From a4ccc89969cea2b73e8489fc65e35fe924a3823f Mon Sep 17 00:00:00 2001 From: grnd-alt Date: Wed, 17 Jan 2024 20:13:18 +0100 Subject: [PATCH 1/6] introduce open filter Signed-off-by: grnd-alt --- src/components/Controls.vue | 21 ++++++++++++++++++--- src/store/card.js | 4 +++- src/store/main.js | 2 +- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/components/Controls.vue b/src/components/Controls.vue index bc5148ece..e6c014ae5 100644 --- a/src/components/Controls.vue +++ b/src/components/Controls.vue @@ -183,6 +183,17 @@ @click="beforeSetFilter"> + +
+ + +
(a.title < b.title) ? -1 : 1) @@ -361,6 +372,10 @@ export default { if (e.target.value === 'unassigned') { this.filter.users = [] } + if (e.target.id === 'open') { + this.filter.open = !this.filter.open + this.$store.dispatch('setFilter', { ...this.filter }) + } }, setFilter() { if (this.filter.users.length > 0) { @@ -402,7 +417,7 @@ export default { } }, clearFilter() { - const filterReset = { tags: [], users: [], due: '' } + const filterReset = { tags: [], users: [], due: '' ,open: false} this.$store.dispatch('setFilter', { ...filterReset }) this.filter = filterReset }, diff --git a/src/store/card.js b/src/store/card.js index 28b3a1c34..8c0ee263f 100644 --- a/src/store/card.js +++ b/src/store/card.js @@ -33,7 +33,9 @@ export default { getters: { cardsByStack: (state, getters, rootState) => (id) => { return state.cards.filter((card) => { - const { tags, users, due, unassigned } = rootState.filter + const { tags, users, due, unassigned,open } = rootState.filter + + if (open && card.done !== null) return false; let allTagsMatch = true let allUsersMatch = true diff --git a/src/store/main.js b/src/store/main.js index 3d0248c4c..acf1d8242 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -74,7 +74,7 @@ export default new Vuex.Store({ searchQuery: '', activity: [], activityLoadMore: true, - filter: { tags: [], users: [], due: '' }, + filter: { tags: [], users: [], due: '', open:false}, shortcutLock: false, }, getters: { From f246c68fac93e34e31f53a208aa798eb2c53c06e Mon Sep 17 00:00:00 2001 From: grnd-alt Date: Wed, 17 Jan 2024 20:37:44 +0100 Subject: [PATCH 2/6] introduce done filter Signed-off-by: grnd-alt --- src/components/Controls.vue | 44 +++++++++++++++++++++++++------------ src/store/card.js | 7 ++++-- src/store/main.js | 2 +- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/components/Controls.vue b/src/components/Controls.vue index e6c014ae5..7b93ff330 100644 --- a/src/components/Controls.vue +++ b/src/components/Controls.vue @@ -140,6 +140,28 @@

{{ t('deck', 'Filter by due date') }}

+
+ + +
+ +
+ + +
+
- -
- - -
(a.title < b.title) ? -1 : 1) @@ -376,6 +387,11 @@ export default { this.filter.open = !this.filter.open this.$store.dispatch('setFilter', { ...this.filter }) } + + if (e.target.id === 'done') { + this.filter.done = !this.filter.done + this.$store.dispatch('setFilter', { ...this.filter }) + } }, setFilter() { if (this.filter.users.length > 0) { @@ -417,7 +433,7 @@ export default { } }, clearFilter() { - const filterReset = { tags: [], users: [], due: '' ,open: false} + const filterReset = { tags: [], users: [], due: '' ,open: false, done:false} this.$store.dispatch('setFilter', { ...filterReset }) this.filter = filterReset }, diff --git a/src/store/card.js b/src/store/card.js index 8c0ee263f..33385ad9e 100644 --- a/src/store/card.js +++ b/src/store/card.js @@ -33,9 +33,12 @@ export default { getters: { cardsByStack: (state, getters, rootState) => (id) => { return state.cards.filter((card) => { - const { tags, users, due, unassigned,open } = rootState.filter + const { tags, users, due, unassigned,open, done } = rootState.filter - if (open && card.done !== null) return false; + if (open && card.done !== null) + return false; + if (done && card.done == null) + return false; let allTagsMatch = true let allUsersMatch = true diff --git a/src/store/main.js b/src/store/main.js index acf1d8242..ad80b298a 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -74,7 +74,7 @@ export default new Vuex.Store({ searchQuery: '', activity: [], activityLoadMore: true, - filter: { tags: [], users: [], due: '', open:false}, + filter: { tags: [], users: [], due: '', open:false, done: false}, shortcutLock: false, }, getters: { From 09a9da3cf87452725826e57f2a174d918f729f40 Mon Sep 17 00:00:00 2001 From: grnd-alt Date: Wed, 17 Jan 2024 21:06:33 +0100 Subject: [PATCH 3/6] add new filter section Signed-off-by: grnd-alt --- src/components/Controls.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Controls.vue b/src/components/Controls.vue index 7b93ff330..170067a9d 100644 --- a/src/components/Controls.vue +++ b/src/components/Controls.vue @@ -138,8 +138,7 @@
-

{{ t('deck', 'Filter by due date') }}

- +

{{ t('deck', 'Filter by done') }}

{{ t('deck', 'done') }}
+

{{ t('deck', 'Filter by due date') }}

Date: Thu, 18 Jan 2024 09:48:22 +0100 Subject: [PATCH 4/6] fix linting issues Signed-off-by: grnd-alt --- src/components/Controls.vue | 6 +++--- src/store/card.js | 8 +++----- src/store/main.js | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/components/Controls.vue b/src/components/Controls.vue index 170067a9d..f6cd89a07 100644 --- a/src/components/Controls.vue +++ b/src/components/Controls.vue @@ -315,7 +315,7 @@ export default { filterVisible: false, showArchived: false, isAddStackVisible: false, - filter: { tags: [], users: [], due: '', unassigned: false, open: false, done: false}, + filter: { tags: [], users: [], due: '', unassigned: false, open: false, done: false }, showAddCardModal: false, defaultPageTitle: false, isNotifyPushEnabled: isNotifyPushEnabled(), @@ -339,7 +339,7 @@ export default { } }, isFilterActive() { - return this.filter.tags.length !== 0 || this.filter.users.length !== 0 || this.filter.due !== '' || this.filter.open || this.filter.done; + return this.filter.tags.length !== 0 || this.filter.users.length !== 0 || this.filter.due !== '' || this.filter.open || this.filter.done }, labelsSorted() { return [...this.board.labels].sort((a, b) => (a.title < b.title) ? -1 : 1) @@ -433,7 +433,7 @@ export default { } }, clearFilter() { - const filterReset = { tags: [], users: [], due: '' ,open: false, done:false} + const filterReset = { tags: [], users: [], due: '', open: false, done: false } this.$store.dispatch('setFilter', { ...filterReset }) this.filter = filterReset }, diff --git a/src/store/card.js b/src/store/card.js index 33385ad9e..1c29b994f 100644 --- a/src/store/card.js +++ b/src/store/card.js @@ -33,12 +33,10 @@ export default { getters: { cardsByStack: (state, getters, rootState) => (id) => { return state.cards.filter((card) => { - const { tags, users, due, unassigned,open, done } = rootState.filter + const { tags, users, due, unassigned, open, done } = rootState.filter - if (open && card.done !== null) - return false; - if (done && card.done == null) - return false; + if (open && card.done !== null) { return false } + if (done && card.done == null) { return false } let allTagsMatch = true let allUsersMatch = true diff --git a/src/store/main.js b/src/store/main.js index ad80b298a..a9a5e6bad 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -74,7 +74,7 @@ export default new Vuex.Store({ searchQuery: '', activity: [], activityLoadMore: true, - filter: { tags: [], users: [], due: '', open:false, done: false}, + filter: { tags: [], users: [], due: '', open: false, done: false }, shortcutLock: false, }, getters: { From 9a3521ba9306467e74f4870d159b31d7402a263b Mon Sep 17 00:00:00 2001 From: grnd-alt Date: Fri, 26 Jan 2024 15:03:57 +0100 Subject: [PATCH 5/6] add filter option to show both completed and open refactor element-ids to filter-option- Signed-off-by: grnd-alt --- src/components/Controls.vue | 46 ++++++++++++++++++++++++++----------- src/store/card.js | 4 ++-- src/store/main.js | 2 +- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/components/Controls.vue b/src/components/Controls.vue index f6cd89a07..d56d51808 100644 --- a/src/components/Controls.vue +++ b/src/components/Controls.vue @@ -138,27 +138,37 @@
-

{{ t('deck', 'Filter by done') }}

+

{{ t('deck', 'Filter by completed') }}

- + +
+
+ - +
- - +

{{ t('deck', 'Filter by due date') }}

@@ -315,7 +325,7 @@ export default { filterVisible: false, showArchived: false, isAddStackVisible: false, - filter: { tags: [], users: [], due: '', unassigned: false, open: false, done: false }, + filter: { tags: [], users: [], due: '', unassigned: false, open: false, completed: false, completedOrOpen: true }, showAddCardModal: false, defaultPageTitle: false, isNotifyPushEnabled: isNotifyPushEnabled(), @@ -339,7 +349,7 @@ export default { } }, isFilterActive() { - return this.filter.tags.length !== 0 || this.filter.users.length !== 0 || this.filter.due !== '' || this.filter.open || this.filter.done + return this.filter.tags.length !== 0 || this.filter.users.length !== 0 || this.filter.due !== '' || this.filter.open || this.filter.completed || !this.filter.completedOrOpen }, labelsSorted() { return [...this.board.labels].sort((a, b) => (a.title < b.title) ? -1 : 1) @@ -382,16 +392,26 @@ export default { } if (e.target.value === 'unassigned') { this.filter.users = [] + this.$store.dispatch('setFilter', { ...this.filter }) } - if (e.target.id === 'open') { + if (e.target.id === 'filter-option-open') { this.filter.open = !this.filter.open this.$store.dispatch('setFilter', { ...this.filter }) } - - if (e.target.id === 'done') { - this.filter.done = !this.filter.done + if (e.target.id === 'filter-option-completed') { + this.filter.completed = !this.filter.completed + this.$store.dispatch('setFilter', { ...this.filter }) + } + if (e.target.id !== 'filter-option-both') { + this.filter.completedOrOpen = !(this.filter.open || this.filter.completed) + this.$store.dispatch('setFilter', { ...this.filter }) + } else { + this.filter.completedOrOpen = true + this.filter.open = false + this.filter.completed = false this.$store.dispatch('setFilter', { ...this.filter }) } + this.$store.dispatch('setFilter', { ...this.filter }) }, setFilter() { if (this.filter.users.length > 0) { @@ -433,7 +453,7 @@ export default { } }, clearFilter() { - const filterReset = { tags: [], users: [], due: '', open: false, done: false } + const filterReset = { tags: [], users: [], due: '', open: false, completed: false, completedOrOpen: true } this.$store.dispatch('setFilter', { ...filterReset }) this.filter = filterReset }, diff --git a/src/store/card.js b/src/store/card.js index 1c29b994f..00ff4da92 100644 --- a/src/store/card.js +++ b/src/store/card.js @@ -33,10 +33,10 @@ export default { getters: { cardsByStack: (state, getters, rootState) => (id) => { return state.cards.filter((card) => { - const { tags, users, due, unassigned, open, done } = rootState.filter + const { tags, users, due, unassigned, open, completed } = rootState.filter if (open && card.done !== null) { return false } - if (done && card.done == null) { return false } + if (completed && card.done == null) { return false } let allTagsMatch = true let allUsersMatch = true diff --git a/src/store/main.js b/src/store/main.js index a9a5e6bad..698e0ff3c 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -74,7 +74,7 @@ export default new Vuex.Store({ searchQuery: '', activity: [], activityLoadMore: true, - filter: { tags: [], users: [], due: '', open: false, done: false }, + filter: { tags: [], users: [], due: '', open: false, completed: false, completedOrOpen: true }, shortcutLock: false, }, getters: { From c6728d33c80ad439891bbbcc8bf173d998c3b192 Mon Sep 17 00:00:00 2001 From: grnd-alt Date: Wed, 13 Mar 2024 15:44:17 +0100 Subject: [PATCH 6/6] group completed filters to one property Signed-off-by: grnd-alt --- src/components/Controls.vue | 39 ++++++++++++------------------------- src/store/card.js | 6 +++--- src/store/main.js | 2 +- 3 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/components/Controls.vue b/src/components/Controls.vue index d56d51808..ec130248a 100644 --- a/src/components/Controls.vue +++ b/src/components/Controls.vue @@ -141,23 +141,23 @@

{{ t('deck', 'Filter by completed') }}

- +
- +
@@ -165,10 +165,10 @@ v-model="filter.completed" type="radio" class="radio" - :value="true" + value="completed" @change="setFilter" @click="beforeSetFilter"> - +

{{ t('deck', 'Filter by due date') }}

@@ -325,7 +325,7 @@ export default { filterVisible: false, showArchived: false, isAddStackVisible: false, - filter: { tags: [], users: [], due: '', unassigned: false, open: false, completed: false, completedOrOpen: true }, + filter: { tags: [], users: [], due: '', unassigned: false, completed: 'both' }, showAddCardModal: false, defaultPageTitle: false, isNotifyPushEnabled: isNotifyPushEnabled(), @@ -349,7 +349,7 @@ export default { } }, isFilterActive() { - return this.filter.tags.length !== 0 || this.filter.users.length !== 0 || this.filter.due !== '' || this.filter.open || this.filter.completed || !this.filter.completedOrOpen + return this.filter.tags.length !== 0 || this.filter.users.length !== 0 || this.filter.due !== '' || this.filter.completed !== 'both' }, labelsSorted() { return [...this.board.labels].sort((a, b) => (a.title < b.title) ? -1 : 1) @@ -393,22 +393,8 @@ export default { if (e.target.value === 'unassigned') { this.filter.users = [] this.$store.dispatch('setFilter', { ...this.filter }) - } - if (e.target.id === 'filter-option-open') { - this.filter.open = !this.filter.open - this.$store.dispatch('setFilter', { ...this.filter }) - } - if (e.target.id === 'filter-option-completed') { - this.filter.completed = !this.filter.completed - this.$store.dispatch('setFilter', { ...this.filter }) - } - if (e.target.id !== 'filter-option-both') { - this.filter.completedOrOpen = !(this.filter.open || this.filter.completed) - this.$store.dispatch('setFilter', { ...this.filter }) } else { - this.filter.completedOrOpen = true - this.filter.open = false - this.filter.completed = false + this.filter.completed = 'both' this.$store.dispatch('setFilter', { ...this.filter }) } this.$store.dispatch('setFilter', { ...this.filter }) @@ -453,7 +439,7 @@ export default { } }, clearFilter() { - const filterReset = { tags: [], users: [], due: '', open: false, completed: false, completedOrOpen: true } + const filterReset = { tags: [], users: [], due: '', completed: 'both' } this.$store.dispatch('setFilter', { ...filterReset }) this.filter = filterReset }, @@ -570,7 +556,6 @@ export default { input + label { display: block; padding: 6px 0; - vertical-align: middle; .avatardiv { vertical-align: middle; margin-bottom: 2px; diff --git a/src/store/card.js b/src/store/card.js index 00ff4da92..fb4df408c 100644 --- a/src/store/card.js +++ b/src/store/card.js @@ -33,10 +33,10 @@ export default { getters: { cardsByStack: (state, getters, rootState) => (id) => { return state.cards.filter((card) => { - const { tags, users, due, unassigned, open, completed } = rootState.filter + const { tags, users, due, unassigned, completed } = rootState.filter - if (open && card.done !== null) { return false } - if (completed && card.done == null) { return false } + if (completed === 'open' && card.done !== null) { return false } + if (completed === 'completed' && card.done == null) { return false } let allTagsMatch = true let allUsersMatch = true diff --git a/src/store/main.js b/src/store/main.js index 698e0ff3c..f52aeafc9 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -74,7 +74,7 @@ export default new Vuex.Store({ searchQuery: '', activity: [], activityLoadMore: true, - filter: { tags: [], users: [], due: '', open: false, completed: false, completedOrOpen: true }, + filter: { tags: [], users: [], due: '', completed: 'both' }, shortcutLock: false, }, getters: {