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

@@ -110,6 +110,7 @@ describe("EDITOR_SETTINGS_DRAFT_KEYS", () => {
it("includes the data grid filter view", () => {
expect(EDITOR_SETTINGS_DRAFT_KEYS).toContain("dataGridFilterEditorView");
expect(EDITOR_SETTINGS_DRAFT_KEYS).toContain("dataGridKeepFilterEditorExpanded");
expect(EDITOR_SETTINGS_DRAFT_KEYS).toContain("dataGridTextFilterPanelHeight");
});
@@ -196,9 +197,10 @@ describe("editorSettingsDraftFromSettings", () => {
expect(editorSettingsDraftFromSettings(makeSettings({ colorizeDataGridCellTypes: false })).colorizeDataGridCellTypes).toBe(false);
});
it("maps the data grid filter view from settings", () => {
const draft = editorSettingsDraftFromSettings(makeSettings({ dataGridFilterEditorView: "text", dataGridTextFilterPanelHeight: 224 }));
it("maps the data grid filter view and persistent expansion from settings", () => {
const draft = editorSettingsDraftFromSettings(makeSettings({ dataGridFilterEditorView: "text", dataGridKeepFilterEditorExpanded: true, dataGridTextFilterPanelHeight: 224 }));
expect(draft.dataGridFilterEditorView).toBe("text");
expect(draft.dataGridKeepFilterEditorExpanded).toBe(true);
expect(draft.dataGridTextFilterPanelHeight).toBe(224);
});
@@ -137,6 +137,25 @@ describe("settingsTransfer", () => {
expect(result.value.categories).toEqual(["appearance"]);
});
it("round-trips persistent filter editor expansion as a data setting", () => {
const result = parseSettingsTransferFile(fileWith({ dataGridKeepFilterEditorExpanded: true }));
expect(result.ok).toBe(true);
if (!result.ok) return;
expect(result.value.editorSettings.dataGridKeepFilterEditorExpanded).toBe(true);
expect(result.value.categories).toEqual(["data"]);
expect(transferCategoryForKey("dataGridKeepFilterEditorExpanded")).toBe("data");
});
it("migrates the legacy auto-hide filter preference from older exports", () => {
const expanded = parseSettingsTransferFile(fileWith({ dataGridAutoHideFilterBuilder: false }));
expect(expanded.ok).toBe(true);
if (expanded.ok) expect(expanded.value.editorSettings.dataGridKeepFilterEditorExpanded).toBe(true);
const collapsed = parseSettingsTransferFile(fileWith({ dataGridAutoHideFilterBuilder: true }));
expect(collapsed.ok).toBe(true);
if (collapsed.ok) expect(collapsed.value.editorSettings.dataGridKeepFilterEditorExpanded).toBe(false);
});
it("ignores unknown fields instead of importing them", () => {
const result = parseSettingsTransferFile(
fileWith({
@@ -50,7 +50,7 @@ export const EDITOR_SETTINGS_DRAFT_KEYS = [
"compactColumnHeaderActions",
"dataGridQuickEntry",
"dataGridFilterEditorView",
"dataGridAutoHideFilterBuilder",
"dataGridKeepFilterEditorExpanded",
"dataGridTextFilterPanelHeight",
"multiStatementDefaultView",
"dataGridAutoTransposeSingleRow",
@@ -141,7 +141,7 @@ const SETTINGS_TRANSFER_CATEGORY_KEYS: Record<SettingsTransferCategoryId, readon
"compactColumnHeaderActions",
"dataGridQuickEntry",
"dataGridFilterEditorView",
"dataGridAutoHideFilterBuilder",
"dataGridKeepFilterEditorExpanded",
"dataGridTextFilterPanelHeight",
"multiStatementDefaultView",
"dataGridAutoTransposeSingleRow",
@@ -468,6 +468,13 @@ export function parseSettingsTransferFile(text: string): { ok: true; value: Pars
const editor = settings.editor;
if (!isPlainObject(editor)) return { ok: false, error: { code: "empty-settings" } };
// Old exports used the inverse `dataGridAutoHideFilterBuilder` flag. Keep
// accepting it, but normalize it into the single current preference before
// applying the strict whitelist below.
if (!("dataGridKeepFilterEditorExpanded" in editor) && typeof editor.dataGridAutoHideFilterBuilder === "boolean") {
editor.dataGridKeepFilterEditorExpanded = !editor.dataGridAutoHideFilterBuilder;
}
const presentKeys = EDITOR_SETTINGS_DRAFT_KEYS.filter((key) => key in editor);
if (presentKeys.length === 0) return { ok: false, error: { code: "empty-settings" } };