Merge pull request #2244 from nextcloud/enh/filter-on-label-click
Toggle filter on clicking card labels
This commit is contained in:
@@ -57,7 +57,7 @@
|
|||||||
class="labels"
|
class="labels"
|
||||||
@click="openCard">
|
@click="openCard">
|
||||||
<li v-for="label in card.labels" :key="label.id" :style="labelStyle(label)">
|
<li v-for="label in card.labels" :key="label.id" :style="labelStyle(label)">
|
||||||
<span>{{ label.title }}</span>
|
<span @click="applyLabelFilter(label)">{{ label.title }}</span>
|
||||||
</li>
|
</li>
|
||||||
</transition-group>
|
</transition-group>
|
||||||
<div v-show="!compactMode" class="card-controls compact-item" @click="openCard">
|
<div v-show="!compactMode" class="card-controls compact-item" @click="openCard">
|
||||||
@@ -142,6 +142,9 @@ export default {
|
|||||||
cancelEdit() {
|
cancelEdit() {
|
||||||
this.editing = false
|
this.editing = false
|
||||||
},
|
},
|
||||||
|
applyLabelFilter(label) {
|
||||||
|
this.$nextTick(() => this.$store.dispatch('toggleFilter', { tags: [label.id] }))
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -132,9 +132,27 @@ export default new Vuex.Store({
|
|||||||
setSearchQuery(state, searchQuery) {
|
setSearchQuery(state, searchQuery) {
|
||||||
state.searchQuery = searchQuery
|
state.searchQuery = searchQuery
|
||||||
},
|
},
|
||||||
setFilter(state, filter) {
|
SET_FILTER(state, filter) {
|
||||||
Object.assign(state.filter, filter)
|
Object.assign(state.filter, filter)
|
||||||
},
|
},
|
||||||
|
TOGGLE_FILTER(state, filter) {
|
||||||
|
Object.keys(filter).forEach((key) => {
|
||||||
|
switch (key) {
|
||||||
|
case 'due':
|
||||||
|
Vue.set(state.filter, key, filter.due)
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
filter[key].forEach((item) => {
|
||||||
|
if (state.filter[key].indexOf(item) === -1) {
|
||||||
|
state.filter[key].push(item)
|
||||||
|
} else {
|
||||||
|
state.filter[key].splice(state.filter[key].indexOf(item), 1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
toggleShowArchived(state) {
|
toggleShowArchived(state) {
|
||||||
state.showArchived = !state.showArchived
|
state.showArchived = !state.showArchived
|
||||||
},
|
},
|
||||||
@@ -261,7 +279,10 @@ export default new Vuex.Store({
|
|||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
setFilter({ commit }, filter) {
|
setFilter({ commit }, filter) {
|
||||||
commit('setFilter', filter)
|
commit('SET_FILTER', filter)
|
||||||
|
},
|
||||||
|
toggleFilter({ commit }, filter) {
|
||||||
|
commit('TOGGLE_FILTER', filter)
|
||||||
},
|
},
|
||||||
async loadBoardById({ commit, dispatch }, boardId) {
|
async loadBoardById({ commit, dispatch }, boardId) {
|
||||||
const filterReset = { tags: [], users: [], due: '' }
|
const filterReset = { tags: [], users: [], due: '' }
|
||||||
|
|||||||
Reference in New Issue
Block a user