Files
dbx/apps/desktop/src/lib/sidebar/sidebarObjectGroupRouting.ts
T

31 lines
1.4 KiB
TypeScript

import type { TreeNode } from "@/types/database";
import { hasTreeNodeDatabaseContext } from "@/lib/sidebar/treeNodeContext";
import { objectTypesForGroupNode } from "@/lib/table/tableTree";
export interface SidebarObjectGroupLoaders {
loadTriggers(connectionId: string, database: string, table: string, schema?: string, nodeId?: string, catalog?: string): Promise<void>;
loadObjectGroupChildren(node: TreeNode, options?: SidebarObjectGroupLoadOptions): Promise<void>;
}
export interface SidebarObjectGroupLoadOptions {
searchFilter?: string;
allowGlobalSearchMismatch?: boolean;
expectedSidebarSearchQuery?: string;
}
/**
* Loads object-group metadata from the same path used by the sidebar toggle.
* Table trigger groups are special because they are scoped to one table;
* schema-level trigger groups are regular database object groups.
*/
export async function loadSidebarObjectGroup(node: TreeNode, loaders: SidebarObjectGroupLoaders, options?: SidebarObjectGroupLoadOptions): Promise<boolean> {
if (node.type === "group-triggers" && node.connectionId && hasTreeNodeDatabaseContext(node) && node.tableName) {
await loaders.loadTriggers(node.connectionId, node.database, node.tableName, node.schema, node.id, node.catalog);
return true;
}
if (!objectTypesForGroupNode(node.type)) return false;
await loaders.loadObjectGroupChildren(node, options);
return true;
}