Add filter for content blocks
This commit is contained in:
parent
4a9eb441af
commit
5b1572b228
|
|
@ -4,7 +4,8 @@
|
||||||
|
|
||||||
<add-content-block-button :parent="chapter.id"></add-content-block-button>
|
<add-content-block-button :parent="chapter.id"></add-content-block-button>
|
||||||
|
|
||||||
<content-block v-if="visibleFor(contentBlock, 'VXNlckdyb3VwTm9kZTo2')" :contentBlock="contentBlock" :key="contentBlock.id" v-for="contentBlock in chapter.contentBlocks">
|
<content-block :contentBlock="contentBlock"
|
||||||
|
:key="contentBlock.id" v-for="contentBlock in filteredContentBlocks">
|
||||||
</content-block>
|
</content-block>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -21,6 +22,17 @@
|
||||||
AddContentBlockButton
|
AddContentBlockButton
|
||||||
},
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
filteredContentBlocks() {
|
||||||
|
return this.chapter && this.chapter.contentBlocks
|
||||||
|
? this.chapter.contentBlocks.filter(contentBlock => this.visibleFor(contentBlock, this.currentFilter))
|
||||||
|
: [];
|
||||||
|
},
|
||||||
|
currentFilter() {
|
||||||
|
return this.$store.state.filterForGroup;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
visibleFor(contentBlock, userGroup) {
|
visibleFor(contentBlock, userGroup) {
|
||||||
return !contentBlock.hiddenFor.map(entry => entry.id).includes(userGroup);
|
return !contentBlock.hiddenFor.map(entry => entry.id).includes(userGroup);
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,26 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="filter-bar">
|
<div class="filter-bar">
|
||||||
|
|
||||||
<checkbox label="Alles" :checked="true"></checkbox>
|
<radiobutton label="Alles" :checked="!currentFilter" v-on:input="updateFilter(false)"></radiobutton>
|
||||||
<checkbox v-for="group in userGroups" :key="group.id" :label="group.name"></checkbox>
|
<radiobutton
|
||||||
|
v-for="group in userGroups"
|
||||||
|
:key="group.id"
|
||||||
|
:label="group.name"
|
||||||
|
:item="group"
|
||||||
|
:checked="group.id === currentFilter"
|
||||||
|
v-on:input="updateFilter(group.id)"
|
||||||
|
></radiobutton>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {userGroupsQuery} from '@/helpers/user-groups'
|
import {userGroupsQuery} from '@/helpers/user-groups'
|
||||||
|
import {mapActions} from 'vuex';
|
||||||
import Checkbox from '@/components/Checkbox.vue';
|
import Radiobutton from '@/components/Radiobutton';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Checkbox
|
Radiobutton
|
||||||
},
|
},
|
||||||
|
|
||||||
apollo: {
|
apollo: {
|
||||||
|
|
@ -24,6 +31,18 @@
|
||||||
return {
|
return {
|
||||||
userGroups: []
|
userGroups: []
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
currentFilter() {
|
||||||
|
return this.$store.state.filterForGroup;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
...mapActions({
|
||||||
|
updateFilter: 'setFilterForGroup'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ export default new Vuex.Store({
|
||||||
contentBlockPosition: {},
|
contentBlockPosition: {},
|
||||||
scrollPosition: 0,
|
scrollPosition: 0,
|
||||||
moduleSlug: 'mein-neues-umfeld',
|
moduleSlug: 'mein-neues-umfeld',
|
||||||
updateContentBlocks: false
|
updateContentBlocks: false,
|
||||||
|
filterForGroup: false
|
||||||
},
|
},
|
||||||
|
|
||||||
getters: {},
|
getters: {},
|
||||||
|
|
@ -48,6 +49,9 @@ export default new Vuex.Store({
|
||||||
},
|
},
|
||||||
resetUpdateContentBlocksFlag({commit}) {
|
resetUpdateContentBlocksFlag({commit}) {
|
||||||
commit('updateContentBlocks', false);
|
commit('updateContentBlocks', false);
|
||||||
|
},
|
||||||
|
setFilterForGroup({commit}, payload) {
|
||||||
|
commit('setFilterForGroup', payload);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -72,6 +76,9 @@ export default new Vuex.Store({
|
||||||
},
|
},
|
||||||
setContentBlockPosition(state, payload) {
|
setContentBlockPosition(state, payload) {
|
||||||
state.contentBlockPosition = payload;
|
state.contentBlockPosition = payload;
|
||||||
|
},
|
||||||
|
setFilterForGroup(state, payload) {
|
||||||
|
state.filterForGroup = payload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue