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

33 lines
1.3 KiB
TypeScript

import type { DatabaseType, TreeNode } from "@/types/database";
interface SidebarTreeDeleteShortcutContext {
activeNode: TreeNode;
selectedNodes: readonly TreeNode[];
databaseTypeForNode: (node: TreeNode) => DatabaseType | undefined;
requestHBaseTableDelete: () => boolean;
requestDefaultDelete: () => boolean;
}
function isUnmodifiedDeleteShortcut(event: KeyboardEvent): boolean {
return !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey && (event.key === "Delete" || event.key === "Backspace");
}
export function handleSidebarTreeDeleteShortcut(event: KeyboardEvent, context: SidebarTreeDeleteShortcutContext): boolean {
if (!isUnmodifiedDeleteShortcut(event)) return false;
const activeHBaseTable = context.activeNode.type === "table" && context.databaseTypeForNode(context.activeNode) === "hbase";
const hasActiveMultiSelection = context.selectedNodes.length > 1 && context.selectedNodes.some((node) => node.id === context.activeNode.id);
if (activeHBaseTable && hasActiveMultiSelection) {
event.preventDefault();
event.stopPropagation();
return true;
}
const handled = activeHBaseTable ? context.requestHBaseTableDelete() : context.requestDefaultDelete();
if (!handled) return false;
event.preventDefault();
event.stopPropagation();
return true;
}