From e67df3e2a56fce8dd85afb53d667f4437b79f27f Mon Sep 17 00:00:00 2001 From: ChaDongWun <66347959+lovewave02@users.noreply.github.com> Date: Wed, 15 Jul 2026 17:45:29 +0900 Subject: [PATCH] fix: keep manual search and sorting independent --- .../processors/apply-sorting-fast-sort.ts | 2 +- .../datagrid/core/processors/apply-sorting.ts | 2 +- packages/cli/tests/apply-sorting.test.ts | 63 +++++++++++++++++++ sites/beta/vite.config.ts | 2 +- .../processors/apply-sorting-fast-sort.ts | 2 +- .../datagrid/core/processors/apply-sorting.ts | 2 +- 6 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 packages/cli/tests/apply-sorting.test.ts diff --git a/packages/cli/datagrid/core/processors/apply-sorting-fast-sort.ts b/packages/cli/datagrid/core/processors/apply-sorting-fast-sort.ts index bd509941..e4e5b0c7 100644 --- a/packages/cli/datagrid/core/processors/apply-sorting-fast-sort.ts +++ b/packages/cli/datagrid/core/processors/apply-sorting-fast-sort.ts @@ -26,7 +26,7 @@ import { findColumnById, flattenColumnStructureAndClearGroups } from "../utils.s export function applySorting(datagrid: DatagridCore, data: TOriginalRow[]): TOriginalRow[] { data = datagrid.lifecycleHooks.executePreSort(data); - const isManualSortingEnabled = datagrid.features.globalSearch.isManual; + const isManualSortingEnabled = datagrid.features.sorting.isManual; const noSorting = datagrid.features.sorting.sortConfigs.length === 0; if (isManualSortingEnabled || noSorting) return data; diff --git a/packages/cli/datagrid/core/processors/apply-sorting.ts b/packages/cli/datagrid/core/processors/apply-sorting.ts index 47f40c1a..e203a1a8 100644 --- a/packages/cli/datagrid/core/processors/apply-sorting.ts +++ b/packages/cli/datagrid/core/processors/apply-sorting.ts @@ -24,7 +24,7 @@ import { findColumnById, flattenColumnStructureAndClearGroups } from "../utils.s export function applySorting(datagrid: DatagridCore, data: TOriginalRow[]): TOriginalRow[] { data = datagrid.lifecycleHooks.executePreSort(data); - const isManualSortingEnabled = datagrid.features.globalSearch.isManual || datagrid.features.sorting.isManual; + const isManualSortingEnabled = datagrid.features.sorting.isManual; const noSorting = datagrid.features.sorting.sortConfigs.length === 0; if (isManualSortingEnabled || noSorting) return data; diff --git a/packages/cli/tests/apply-sorting.test.ts b/packages/cli/tests/apply-sorting.test.ts new file mode 100644 index 00000000..40ebfe9e --- /dev/null +++ b/packages/cli/tests/apply-sorting.test.ts @@ -0,0 +1,63 @@ +import { describe, expect, it } from "vitest"; + +import { applySorting } from "../datagrid/core/processors/apply-sorting"; +import type { DatagridCore } from "../datagrid/core/index.svelte"; + +type Row = { + value: number; +}; + +function createDatagrid({ + globalSearchIsManual = false, + sortingIsManual = false, +}: { + globalSearchIsManual?: boolean; + sortingIsManual?: boolean; +} = {}): DatagridCore { + const column = { + type: "accessor", + columnId: "value", + isSortable: () => true, + getValueFn: (row: Row) => row.value, + }; + + return { + _columns: [column], + features: { + globalSearch: { isManual: globalSearchIsManual }, + sorting: { + isManual: sortingIsManual, + sortConfigs: [{ columnId: "value", direction: "ascending" }], + }, + }, + lifecycleHooks: { + executePreSort: (rows: Row[]) => rows, + executePostSort: (rows: Row[]) => rows, + }, + processors: { + data: { + metrics: { + measure: (_name: string, callback: () => void) => callback(), + }, + }, + }, + } as unknown as DatagridCore; +} + +describe("applySorting", () => { + it("sorts locally when only global search is manual", () => { + const rows = [{ value: 2 }, { value: 1 }]; + + expect( + applySorting(createDatagrid({ globalSearchIsManual: true }), rows), + ).toEqual([{ value: 1 }, { value: 2 }]); + }); + + it("leaves rows unchanged when sorting itself is manual", () => { + const rows = [{ value: 2 }, { value: 1 }]; + + expect( + applySorting(createDatagrid({ sortingIsManual: true }), rows), + ).toEqual(rows); + }); +}); diff --git a/sites/beta/vite.config.ts b/sites/beta/vite.config.ts index 81dedbcb..6a8acf65 100644 --- a/sites/beta/vite.config.ts +++ b/sites/beta/vite.config.ts @@ -11,6 +11,6 @@ export default defineConfig({ }) ], test: { - include: ['src/**/*.{test,spec}.{js,ts}'] + include: ['src/**/*.{test,spec}.{js,ts}', '../../packages/cli/tests/**/*.{test,spec}.{js,ts}'] } }); diff --git a/sites/official/src/lib/datagrid/core/processors/apply-sorting-fast-sort.ts b/sites/official/src/lib/datagrid/core/processors/apply-sorting-fast-sort.ts index bd509941..e4e5b0c7 100644 --- a/sites/official/src/lib/datagrid/core/processors/apply-sorting-fast-sort.ts +++ b/sites/official/src/lib/datagrid/core/processors/apply-sorting-fast-sort.ts @@ -26,7 +26,7 @@ import { findColumnById, flattenColumnStructureAndClearGroups } from "../utils.s export function applySorting(datagrid: DatagridCore, data: TOriginalRow[]): TOriginalRow[] { data = datagrid.lifecycleHooks.executePreSort(data); - const isManualSortingEnabled = datagrid.features.globalSearch.isManual; + const isManualSortingEnabled = datagrid.features.sorting.isManual; const noSorting = datagrid.features.sorting.sortConfigs.length === 0; if (isManualSortingEnabled || noSorting) return data; diff --git a/sites/official/src/lib/datagrid/core/processors/apply-sorting.ts b/sites/official/src/lib/datagrid/core/processors/apply-sorting.ts index 47f40c1a..e203a1a8 100644 --- a/sites/official/src/lib/datagrid/core/processors/apply-sorting.ts +++ b/sites/official/src/lib/datagrid/core/processors/apply-sorting.ts @@ -24,7 +24,7 @@ import { findColumnById, flattenColumnStructureAndClearGroups } from "../utils.s export function applySorting(datagrid: DatagridCore, data: TOriginalRow[]): TOriginalRow[] { data = datagrid.lifecycleHooks.executePreSort(data); - const isManualSortingEnabled = datagrid.features.globalSearch.isManual || datagrid.features.sorting.isManual; + const isManualSortingEnabled = datagrid.features.sorting.isManual; const noSorting = datagrid.features.sorting.sortConfigs.length === 0; if (isManualSortingEnabled || noSorting) return data;