I am using Nuxt
I have a simple 'Drawer.vue' component.
After my user execute a login, I try show the page with the drawer.
If the login was successful, the 'auth' midleware receive the 'menu items' to drawer by '/me" backend endpoint.
My problem is that I am getting the next error. I have seen this question Vuex - Do not mutate vuex store state outside mutation handlers, but AFAIK I am not changing vuex store state outside mutation handlers.
//Error:
Error: [vuex] do not mutate vuex store state outside mutation handlers.
at assert (vuex.esm.js?2f62:135)
at Vue.store._vm.$watch.deep (vuex.esm.js?2f62:893)
at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1863)
at Watcher.run (vue.runtime.esm.js?2b0e:4584)
at Watcher.update (vue.runtime.esm.js?2b0e:4558)
at Dep.notify (vue.runtime.esm.js?2b0e:730)
at Object.reactiveSetter [as items] (vue.runtime.esm.js?2b0e:1055)
at eval (Drawer.vue?c84c:43)
at Array.filter (<anonymous>)
at VueComponent.flatFilter (Drawer.vue?c84c:40)
// Drawer.vue
<template>
<div>
{{ computedItems }}
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'DashboardCoreDrawer',
data: () => ({
menuFiltered: [],
defaultMenu: [
{
icon: 'mdi-view-dashboard',
title: 'Dashboard',
to: '/',
visible: 1,
},
],
}),
computed: {
...mapGetters(['menuUser']),
computedItems() {
return this.menuFiltered
},
},
watch: {
menuUser(newValue) {
this.menuFiltered = this.filterItems(newValue)
},
},
methods: {
flatFilter(nestedProp, compareKey, compareId, arr) {
return arr.filter((o) => {
const keep = o[compareKey] !== compareId
if (keep && o[nestedProp]) {
o[nestedProp] = this.flatFilter(
nestedProp,
compareKey,
compareId,
o[nestedProp]
)
}
return keep
})
},
filterItems(arr) {
const items = [...arr]
const res = this.flatFilter('items', 'visible', 0, items)
return res
},
},
}
</script>
// index.js, in Nuxt store folder:
export const getters = {
menuUser(state) {
return state.auth.user?.menu || []
},
}