fix(navigator): align object browser table sorting

This commit is contained in:
vrustx authored and GitHub committed 2026-07-16 15:19:04 +08:00
1 parent 0a1efdcb85
commit 552e1741db
3 files changed
+33 -6

No files matched your search

@@ -1,5 +1,5 @@
import type { ObjectInfo } from "@/types/database";
import { createDatabaseObjectNameComparator, normalizeDatabaseObjectName } from "@/lib/table/tableTree";
import { compareDatabaseObjectNames, normalizeDatabaseObjectName } from "@/lib/table/tableTree";
import { parseSlashDelimitedRegexQuery } from "@/lib/common/searchPattern";
export type ObjectBrowserRow = {
@@ -122,11 +122,12 @@ export function filterObjectBrowserRows(rows: ObjectBrowserRow[], query: string)
export function sortObjectBrowserRows(rows: ObjectBrowserRow[], key: ObjectBrowserSortKey, direction: ObjectBrowserSortDirection): ObjectBrowserRow[] {
const multiplier = direction === "asc" ? 1 : -1;
const compareNames = createDatabaseObjectNameComparator(rows.map((row) => row.displayName));
// Sort by natural visible name, matching the sidebar tree ordering
// (see fix "keep tables sorted by visible name" and issue #3604).
return [...rows].sort((left, right) => {
const compared = key === "name" ? compareNames(left.displayName, right.displayName) : compareObjectBrowserValue(left[key], right[key], key, direction);
const compared = key === "name" ? compareDatabaseObjectNames(left.displayName, right.displayName) : compareObjectBrowserValue(left[key], right[key], key, direction);
if (compared !== 0) return compared * multiplier;
return compareNames(left.displayName, right.displayName);
return compareDatabaseObjectNames(left.displayName, right.displayName);
});
}
+6
View File
@@ -211,6 +211,12 @@ export function sortDatabaseObjectsByName<T>(items: readonly T[], getName: (item
return [...items].sort((left, right) => databaseObjectNameCollator.compare(getName(left), getName(right)));
}
// Shared with the object browser so both sides of the UI list objects in the
// same natural visible-name order as the sidebar tree (issue #3604).
export function compareDatabaseObjectNames(left: string, right: string): number {
return databaseObjectNameCollator.compare(left, right);
}
export function mergeTableInfosIntoObjects(objects: readonly ObjectInfo[], tables: readonly TableInfo[], schema?: string): ObjectInfo[] {
const merged = [...objects];
const seen = new Set(