diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index ad4a6c282..7acfbf700 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -7,6 +7,7 @@ type CachedStructuredFilterRule = { mode: "equals" | "not-equals" | "is-null" | "is-not-null" | "like" | "not-like" | "less-than" | "greater-than"; rawValue: string; conjunction: "AND" | "OR"; + disabled?: boolean; }; type StructuredFilterCacheState = { scopeKey: string; @@ -39,6 +40,7 @@ import { Code2, Copy, Eye, + EyeOff, Loader2, X, Undo2, @@ -518,6 +520,7 @@ type StructuredFilterRule = { mode: FilterMode; rawValue: string; conjunction: "AND" | "OR"; + disabled?: boolean; }; const localColumnFilters = ref>>({}); @@ -544,7 +547,7 @@ const structuredFilterCacheKey = computed(() => props.cacheKey || [props.connect const structuredFilterScopeKey = computed(() => [props.connectionId ?? "", props.database ?? "", props.schema ?? "", props.context ?? "", props.tableMeta?.schema ?? "", props.tableMeta?.tableName ?? "", filterBuilderColumnOptions.value.join("\0")].join("\u0001")); const structuredFilterRules = ref([]); const appliedStructuredWhereInput = ref(""); -const structuredFilterCount = computed(() => structuredFilterRules.value.filter((rule) => !!rule.columnName && (!filterModeNeedsValue(rule.mode) || rule.rawValue.trim().length > 0)).length); +const structuredFilterCount = computed(() => structuredFilterRules.value.filter((rule) => !rule.disabled && !!rule.columnName && (!filterModeNeedsValue(rule.mode) || rule.rawValue.trim().length > 0)).length); const hasStructuredFilters = computed(() => !!combineWhereInputs(undefined, appliedStructuredWhereInput.value)); const formatterOpenColumn = ref(null); type FormatterDraftKind = Exclude; @@ -1002,6 +1005,7 @@ async function buildStructuredWhereFromRules(rules: StructuredFilterRule[]): Pro const rulesWithConditions = ( await Promise.all( rules.map(async (rule) => { + if (rule.disabled) return { rule, condition: null }; if (!rule.columnName) return { rule, condition: null }; if (filterModeNeedsValue(rule.mode) && !rule.rawValue.trim()) return { rule, condition: null }; const columnInfo = filterBuilderColumns.value.find((column) => column.name === rule.columnName); @@ -6615,7 +6619,7 @@ const gridContextMenuItems = computed(() => {
- @@ -6626,7 +6630,7 @@ const gridContextMenuItems = computed(() => { - @@ -6641,17 +6645,25 @@ const gridContextMenuItems = computed(() => { v-if="filterModeNeedsValue(rule.mode)" :model-value="rule.rawValue" class="h-8 min-w-0 text-xs" + :class="rule.disabled ? 'opacity-45' : ''" + :disabled="rule.disabled" :placeholder="t('grid.filterBuilderValue')" @update:model-value="(value) => updateStructuredFilterRule(rule.id, { rawValue: String(value ?? '') })" @keydown.enter.prevent="applyStructuredFilters" /> -
+
{{ t("grid.filterBuilderNoValue") }}
- +
+ + +