diff --git a/src/main.js b/src/main.js index 66f4b66c0..ec10d5c4b 100644 --- a/src/main.js +++ b/src/main.js @@ -58,5 +58,17 @@ new Vue({ el: '#content', router, store, + mounted: function() { + // eslint-disable-next-line + new OCA.Search(this.filter, this.cleanSearch) + }, + methods: { + filter(query) { + this.$store.commit('setSearchQuery', query) + }, + cleanSearch() { + this.$store.commit('setSearchQuery', '') + }, + }, render: h => h(App), }) diff --git a/src/store/card.js b/src/store/card.js index 3b0b5cd85..c1bef1cd9 100644 --- a/src/store/card.js +++ b/src/store/card.js @@ -30,8 +30,9 @@ export default { cards: [], }, getters: { - cardsByStack: state => (id) => { - return state.cards.filter((card) => card.stackId === id).sort((a, b) => a.order - b.order) + cardsByStack: (state, getters) => (id) => { + return state.cards.filter((card) => card.stackId === id && (getters.getSearchQuery === '' || (card.title.toLowerCase().includes(getters.getSearchQuery.toLowerCase()) || card.description.toLowerCase().includes(getters.getSearchQuery.toLowerCase()))) + ).sort((a, b) => a.order - b.order) }, cardById: state => (id) => { return state.cards.find((card) => card.id === id) diff --git a/src/store/main.js b/src/store/main.js index 3440f2638..6f83dd358 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -61,8 +61,12 @@ export default new Vuex.Store({ boardFilter: BOARD_FILTERS.ALL, activity: [], activityLoadMore: true, + searchQuery: '', }, getters: { + getSearchQuery: state => { + return state.searchQuery + }, boards: state => { return state.boards }, @@ -107,6 +111,9 @@ export default new Vuex.Store({ }, }, mutations: { + setSearchQuery(state, searchQuery) { + state.searchQuery = searchQuery + }, toggleShowArchived(state) { state.showArchived = !state.showArchived },