From 4487c0d402cd4a71f5758510b9fd380c725c551e Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sat, 16 Jul 2022 11:27:39 +0530 Subject: [PATCH 1/2] fix: handle nested group save in filter manual sync re #2690 Signed-off-by: Pranav C --- .../spreadsheet/components/ColumnFilter.vue | 46 +++++++++++-------- packages/nocodb/src/lib/models/Filter.ts | 16 ++++++- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue b/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue index f756981188..b4eb85daa6 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue @@ -10,16 +10,16 @@ - +
{{ item.text }} - + - +
- mdi-plus + mdi-plus {{ $t('activity.addFilter') }} - mdi-plus + mdi-plus Add Filter Group @@ -297,10 +297,13 @@ export default { }, }, watch: { - async viewId(v) { - if (v) { - await this.loadFilter(); - } + viewId: { + async handler(v) { + if (v) { + await this.loadFilter(); + } + }, + immediate: true, }, filters: { handler(v) { @@ -309,9 +312,6 @@ export default { deep: true, }, }, - created() { - this.loadFilter(); - }, methods: { filterComparisonOp(f) { return this.comparisonOp.filter(op => { @@ -348,11 +348,15 @@ export default { await this.$api.dbTableFilter.update(filter.id, { ...filter, fk_parent_id: this.parentId, + children: undefined, + status: undefined, }); } else { await this.$api.dbTableFilter.update(filter.id, { ...filter, fk_parent_id: this.parentId, + children: undefined, + status: undefined, }); } } else if (this.hookId || hookId) { @@ -362,6 +366,7 @@ export default { await this.$api.dbTableWebhookFilter.create(this.hookId || hookId, { ...filter, fk_parent_id: this.parentId, + status: undefined, }) ); } else { @@ -371,6 +376,7 @@ export default { await this.$api.dbTableFilter.create(this.viewId, { ...filter, fk_parent_id: this.parentId, + status: undefined, }) ); } @@ -378,7 +384,9 @@ export default { } if (this.$refs.nestedFilter) { for (const nestedFilter of this.$refs.nestedFilter) { - await nestedFilter.applyChanges(true); + if (nestedFilter.parentId) { + await nestedFilter.applyChanges(true); + } } } this.loadFilter(); @@ -389,12 +397,12 @@ export default { async loadFilter() { let filters = []; if (this.viewId && this._isUIAllowed('filterSync')) { - filters = this.parentId + filters = this.nested ? await this.$api.dbTableFilter.childrenRead(this.parentId) : await this.$api.dbTableFilter.read(this.viewId); } if (this.hookId && this._isUIAllowed('filterSync')) { - filters = this.parentId + filters = this.nested ? await this.$api.dbTableFilter.childrenRead(this.parentId) : await this.$api.dbTableWebhookFilter.read(this.hookId); } diff --git a/packages/nocodb/src/lib/models/Filter.ts b/packages/nocodb/src/lib/models/Filter.ts index 23a8d17eca..34ff8a2f50 100644 --- a/packages/nocodb/src/lib/models/Filter.ts +++ b/packages/nocodb/src/lib/models/Filter.ts @@ -104,7 +104,15 @@ export default class Filter { if (filter?.children?.length) { await Promise.all( filter.children.map((f) => - this.insert({ ...f, fk_parent_id: row.id }, ncMeta) + this.insert( + { + ...f, + fk_parent_id: row.id, + [filter.fk_hook_id ? 'fk_hook_id' : 'fk_view_id']: + filter.fk_hook_id ? filter.fk_hook_id : filter.fk_view_id, + }, + ncMeta + ) ) ); } @@ -373,6 +381,7 @@ export default class Filter { }; await deleteRecursively(filter); } + static async deleteAllByHook(hookId: string, ncMeta = Noco.ncMeta) { const filter = await this.getFilterObject({ hookId }, ncMeta); @@ -421,7 +430,9 @@ export default class Filter { }); await NocoCache.setList(CacheScope.FILTER_EXP, [viewId], filterObjs); } - return filterObjs?.filter(f => !f.fk_parent_id)?.map((f) => new Filter(f)); + return filterObjs + ?.filter((f) => !f.fk_parent_id) + ?.map((f) => new Filter(f)); } static async rootFilterListByHook( @@ -464,6 +475,7 @@ export default class Filter { } return filterObjs?.map((f) => new Filter(f)); } + static async parentFilterListByHook( { hookId, From 745d9bcfdcce86f7ad0d721027050bcbc69848fb Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sat, 16 Jul 2022 12:04:14 +0530 Subject: [PATCH 2/2] fix: load filters on hookid change Signed-off-by: Pranav C --- .../project/spreadsheet/components/ColumnFilter.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue b/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue index b4eb85daa6..1cb7505942 100644 --- a/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue +++ b/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue @@ -305,6 +305,14 @@ export default { }, immediate: true, }, + hookId: { + async handler(v) { + if (v) { + await this.loadFilter(); + } + }, + immediate: true, + }, filters: { handler(v) { this.$emit('input', v && v.filter(f => (f.fk_column_id && f.comparison_op) || f.is_group));