feat(grid): keep filter editor expanded

This commit is contained in:
二丫讲梵 authored and GitHub committed 2026-09-09 12:04:32 +08:00
1 parent 08edb60772
commit 004b27a3c2
19 files changed
+157 -45

No files matched your search

+13 -4
View File
@@ -1199,6 +1199,15 @@ const filteredFilterBuilderColumnOptions = filterBuilder.filteredColumns;
const appliedStructuredWhereInput = filterBuilder.appliedWhereInput;
const draftStructuredWhereInput = ref("");
const filterEditorView = computed(() => settingsStore.editorSettings.dataGridFilterEditorView);
const isPersistentFilterView = computed(() => filterEditorView.value === "conditions" || filterEditorView.value === "text");
const isFilterEditorPinnedOpen = computed(() => isPersistentFilterView.value && settingsStore.editorSettings.dataGridKeepFilterEditorExpanded);
const effectiveFilterBuilderOpen = computed({
get: () => isFilterEditorPinnedOpen.value || filterBuilderOpen.value,
set: (open: boolean) => {
if (isFilterEditorPinnedOpen.value) return;
filterBuilderOpen.value = open;
},
});
const structuredFilterCount = computed(() => structuredFilterRules.value.filter((rule) => !rule.disabled && !!rule.columnName && filterModeHasCompleteValue(rule.mode, rule.rawValue, rule.rawEndValue)).length);
const hasStructuredFilters = computed(() => !!combineWhereInputs(undefined, appliedStructuredWhereInput.value));
interface ForeignKeyDisplayLabelState {
@@ -1553,7 +1562,7 @@ function buildGroupedWhere(conditions: string[], rules: StructuredFilterRule[]):
async function applyStructuredFilters() {
if (!canUseWhereSearch.value) return;
appliedStructuredWhereInput.value = await buildStructuredWhereFromRules(structuredFilterRules.value);
if (settingsStore.editorSettings.dataGridAutoHideFilterBuilder) filterBuilderOpen.value = false;
if (!isFilterEditorPinnedOpen.value) filterBuilderOpen.value = false;
await applyWhereFilter();
}
@@ -11127,7 +11136,7 @@ function openGridSnapshot() {
<DataGridQueryControls
v-model:where-input="whereFilterInput"
v-model:order-by-input="orderByInput"
v-model:filter-builder-open="filterBuilderOpen"
v-model:filter-builder-open="effectiveFilterBuilderOpen"
:filter-editor-view="filterEditorView"
:columns="props.tableMeta?.columns.map((column) => column.name) ?? props.result.columns"
:condition-columns="conditionColumns"
@@ -11278,7 +11287,7 @@ function openGridSnapshot() {
</DataGridToolbar>
</div>
<DataGridFilterWorkbench
v-if="canUseWhereSearch && filterEditorView === 'conditions' && filterBuilderOpen"
v-if="canUseWhereSearch && filterEditorView === 'conditions' && effectiveFilterBuilderOpen"
:sql-preview="filterSqlPreview"
:rules="structuredFilterRules"
:columns="filterBuilderColumnOptions"
@@ -11298,7 +11307,7 @@ function openGridSnapshot() {
@update-rule="updateStructuredFilterRule"
/>
<DataGridTextFilterWorkbench
v-if="canUseWhereSearch && filterEditorView === 'text' && filterBuilderOpen"
v-if="canUseWhereSearch && filterEditorView === 'text' && effectiveFilterBuilderOpen"
:height="settingsStore.editorSettings.dataGridTextFilterPanelHeight"
:sql-preview="filterSqlPreview"
:rules="structuredFilterRules"
@@ -138,6 +138,16 @@ beforeEach(() => {
localStorage.removeItem("dbx-filter-builder-value-shortcut-hint-days");
});
describe("DataGrid canvas surfaces", () => {
it("keeps condition and text filter editors open when persistent expansion is enabled", () => {
expect(dataGridSource).toContain('const isPersistentFilterView = computed(() => filterEditorView.value === "conditions" || filterEditorView.value === "text");');
expect(dataGridSource).toContain("const isFilterEditorPinnedOpen = computed(() => isPersistentFilterView.value && settingsStore.editorSettings.dataGridKeepFilterEditorExpanded);");
expect(dataGridSource).toContain("get: () => isFilterEditorPinnedOpen.value || filterBuilderOpen.value,");
expect(dataGridSource).toContain("if (!isFilterEditorPinnedOpen.value) filterBuilderOpen.value = false;");
expect(dataGridSource).toContain('v-model:filter-builder-open="effectiveFilterBuilderOpen"');
expect(dataGridSource).toContain("filterEditorView === 'conditions' && effectiveFilterBuilderOpen");
expect(dataGridSource).toContain("filterEditorView === 'text' && effectiveFilterBuilderOpen");
});
it("asks before an expensive Elasticsearch cursor jump", () => {
expect(dataGridSource).toContain("requestCount >= ELASTICSEARCH_PAGE_JUMP_WARNING_REQUESTS");
expect(dataGridSource).toContain('t("grid.esDeepPageJumpConfirmMessage"');