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

22 lines
1.4 KiB
TypeScript

import type { TreeNode } from "@/types/database";
export function sidebarDatabaseOpenKey(connectionId: string, database: string): string {
return `${connectionId}\x00${database}`;
}
export function isSidebarDatabaseOpened(node: TreeNode, isTreeNodeChildrenLoaded: (nodeId: string) => boolean): boolean {
return (node.type === "database" || node.type === "mongo-db" || node.type === "vector-database") && !!node.connectionId && node.database != null && isTreeNodeChildrenLoaded(node.id);
}
/** Sidebar "open" visual: tree loaded and/or still referenced by an open editor tab. */
export function isSidebarDatabaseOpenForVisual(node: TreeNode, isTreeNodeChildrenLoaded: (nodeId: string) => boolean, openDatabaseKeys: ReadonlySet<string>): boolean {
if (node.type !== "database" || !node.connectionId || node.database == null) {
return false;
}
return isSidebarDatabaseOpened(node, isTreeNodeChildrenLoaded) || openDatabaseKeys.has(sidebarDatabaseOpenKey(node.connectionId, node.database));
}
export function canCloseSidebarDatabaseConnection(node: TreeNode, isTreeNodeChildrenLoaded: (nodeId: string) => boolean, isDatabaseUsedByOpenTab: (connectionId: string, database: string) => boolean = () => false): boolean {
return node.type === "database" && !!node.connectionId && node.database != null && (isTreeNodeChildrenLoaded(node.id) || isDatabaseUsedByOpenTab(node.connectionId, node.database));
}