Skip to content

Commit 36f6fc2

Browse files
author
Guillaume Chau
committed
fix(vuex): last inspected state should apply filters/grouping
1 parent c7c1053 commit 36f6fc2

File tree

2 files changed

+65
-58
lines changed

2 files changed

+65
-58
lines changed

packages/app-frontend/src/views/vuex/VuexStateInspector.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,16 @@ export default {
160160
161161
...mapGetters('vuex', [
162162
'inspectedState',
163+
'inspectedLastState',
163164
'filteredHistory',
164165
'inspectedEntry',
165166
'modules'
166167
]),
167168
168169
filteredState () {
169-
const inspectedState = this.isOnlyMutationPayload && this.inspectedState.mutation ? {
170-
mutation: this.inspectedState.mutation,
171-
...this.lastReceivedState
172-
} : this.inspectedState
170+
const inspectedState = this.isOnlyMutationPayload && this.inspectedState.mutation
171+
? this.inspectedLastState
172+
: this.inspectedState
173173
174174
const getProcessedState = (state, type) => {
175175
if (!Array.isArray(state)) {

packages/app-frontend/src/views/vuex/module.js

Lines changed: 61 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -127,58 +127,17 @@ function escapeStringForRegExp (str) {
127127
}
128128

129129
const getters = {
130-
inspectedState ({ base, inspectedIndex, inspectedState, inspectedModule }, getters) {
131-
const entry = getters.filteredHistory[inspectedIndex]
132-
const res = {}
133-
134-
if (entry) {
135-
res.mutation = {
136-
type: entry.mutation.type,
137-
payload: entry.mutation.payload ? parse(entry.mutation.payload) : undefined
138-
}
139-
}
140-
141-
const data = entry ? inspectedState : base
142-
if (data) {
143-
res.state = data.state
144-
res.getters = data.getters
145-
146-
if (inspectedModule) {
147-
res.state = get(res.state, inspectedModule.replace(/\//g, '.'))
148-
149-
if (res.getters) {
150-
res.getters = Object.keys(res.getters)
151-
.filter(key => key.startsWith(inspectedModule))
152-
.reduce((obj, key) => {
153-
obj[key.substr(inspectedModule.length + 1)] = res.getters[key]
154-
return obj
155-
}, {})
156-
}
157-
}
158-
}
130+
inspectedEntry ({ inspectedIndex }, { filteredHistory }) {
131+
return filteredHistory[inspectedIndex]
132+
},
159133

160-
if (SharedData.vuexGroupGettersByModule && res.getters) {
161-
const getterGroups = {}
162-
const keys = Object.keys(res.getters)
163-
keys.forEach(key => {
164-
const parts = key.split('/')
165-
let parent = getterGroups
166-
for (let p = 0; p < parts.length - 1; p++) {
167-
const part = parts[p]
168-
parent = parent[part] = parent[part] || {
169-
_custom: {
170-
value: {},
171-
abstract: true
172-
}
173-
}
174-
parent = parent._custom.value
175-
}
176-
parent[parts.pop()] = res.getters[key]
177-
})
178-
res.getters = getterGroups
179-
}
134+
inspectedState ({ base, inspectedIndex, inspectedState, inspectedModule }, { inspectedEntry }) {
135+
const data = inspectedEntry ? inspectedState : base
136+
return processInspectedState({ entry: inspectedEntry, data, inspectedModule })
137+
},
180138

181-
return res
139+
inspectedLastState ({ lastReceivedState, inspectedModule }, { inspectedEntry }) {
140+
return processInspectedState({ entry: inspectedEntry, data: lastReceivedState, inspectedModule })
182141
},
183142

184143
filteredHistory ({ history, filterRegex }) {
@@ -193,10 +152,6 @@ const getters = {
193152
return -1
194153
},
195154

196-
inspectedEntry ({ inspectedIndex }, { filteredHistory }) {
197-
return filteredHistory[inspectedIndex]
198-
},
199-
200155
modules ({ base, inspectedIndex, inspectedState }, getters) {
201156
const entry = getters.filteredHistory[inspectedIndex]
202157
const data = entry ? inspectedState : base
@@ -207,6 +162,58 @@ const getters = {
207162
}
208163
}
209164

165+
function processInspectedState ({ entry, data, inspectedModule }) {
166+
const res = {}
167+
168+
if (entry) {
169+
res.mutation = {
170+
type: entry.mutation.type,
171+
payload: entry.mutation.payload ? parse(entry.mutation.payload) : undefined
172+
}
173+
}
174+
175+
if (data) {
176+
res.state = data.state
177+
res.getters = data.getters
178+
179+
if (inspectedModule) {
180+
res.state = get(res.state, inspectedModule.replace(/\//g, '.'))
181+
182+
if (res.getters) {
183+
res.getters = Object.keys(res.getters)
184+
.filter(key => key.startsWith(inspectedModule))
185+
.reduce((obj, key) => {
186+
obj[key.substr(inspectedModule.length + 1)] = res.getters[key]
187+
return obj
188+
}, {})
189+
}
190+
}
191+
}
192+
193+
if (SharedData.vuexGroupGettersByModule && res.getters) {
194+
const getterGroups = {}
195+
const keys = Object.keys(res.getters)
196+
keys.forEach(key => {
197+
const parts = key.split('/')
198+
let parent = getterGroups
199+
for (let p = 0; p < parts.length - 1; p++) {
200+
const part = parts[p]
201+
parent = parent[part] = parent[part] || {
202+
_custom: {
203+
value: {},
204+
abstract: true
205+
}
206+
}
207+
parent = parent._custom.value
208+
}
209+
parent[parts.pop()] = res.getters[key]
210+
})
211+
res.getters = getterGroups
212+
}
213+
214+
return res
215+
}
216+
210217
export default {
211218
namespaced: true,
212219
state,

0 commit comments

Comments
 (0)