Add filter for content blocks

This commit is contained in:
Ramon Wenger 2018-09-14 10:36:01 +02:00
parent 4a9eb441af
commit 5b1572b228
3 changed files with 45 additions and 7 deletions

View File

@ -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);

View File

@ -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>

View File

@ -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;
} }
} }
}) })