diff --git a/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue b/packages/nc-gui/components/project/spreadsheet/components/ColumnFilter.vue
index f756981188..1cb7505942 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 @@
mdi-close-box
- {{ $t('labels.where') }}
+ {{ $t('labels.where') }}
{{ item }}
-
+
{{ item.text }}
-
+
-
+
- mdi-plus
+ mdi-plus
{{ $t('activity.addFilter') }}
- mdi-plus
+ mdi-plus
Add Filter Group
@@ -297,10 +297,21 @@ export default {
},
},
watch: {
- async viewId(v) {
- if (v) {
- await this.loadFilter();
- }
+ viewId: {
+ async handler(v) {
+ if (v) {
+ await this.loadFilter();
+ }
+ },
+ immediate: true,
+ },
+ hookId: {
+ async handler(v) {
+ if (v) {
+ await this.loadFilter();
+ }
+ },
+ immediate: true,
},
filters: {
handler(v) {
@@ -309,9 +320,6 @@ export default {
deep: true,
},
},
- created() {
- this.loadFilter();
- },
methods: {
filterComparisonOp(f) {
return this.comparisonOp.filter(op => {
@@ -348,11 +356,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 +374,7 @@ export default {
await this.$api.dbTableWebhookFilter.create(this.hookId || hookId, {
...filter,
fk_parent_id: this.parentId,
+ status: undefined,
})
);
} else {
@@ -371,6 +384,7 @@ export default {
await this.$api.dbTableFilter.create(this.viewId, {
...filter,
fk_parent_id: this.parentId,
+ status: undefined,
})
);
}
@@ -378,7 +392,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 +405,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,