fix(navigator): align object browser table sorting
This commit is contained in:
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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in new issue
Block a user