mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-18 23:43:55 +01:00
Decouple Tree from client app's hotkey system by adding getSelectedItems() to TreeHandle and having callers register hotkeys externally. Extract shared action callbacks to eliminate duplication between hotkey and context menu handlers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
36 lines
967 B
TypeScript
36 lines
967 B
TypeScript
import { useEffect, useState } from "react";
|
|
import type {
|
|
ActionInvocation,
|
|
ActionMetadata,
|
|
} from "@yaakapp-internal/proxy-lib";
|
|
import { rpc } from "./rpc";
|
|
|
|
let cachedActions: [ActionInvocation, ActionMetadata][] | null = null;
|
|
|
|
/** Fetch and cache all action metadata. */
|
|
async function getActions(): Promise<[ActionInvocation, ActionMetadata][]> {
|
|
if (!cachedActions) {
|
|
const { actions } = await rpc("list_actions", {});
|
|
cachedActions = actions;
|
|
}
|
|
return cachedActions;
|
|
}
|
|
|
|
/** Look up metadata for a specific action invocation. */
|
|
export function useActionMetadata(
|
|
action: ActionInvocation,
|
|
): ActionMetadata | null {
|
|
const [meta, setMeta] = useState<ActionMetadata | null>(null);
|
|
|
|
useEffect(() => {
|
|
getActions().then((actions) => {
|
|
const match = actions.find(
|
|
([inv]) => inv.scope === action.scope && inv.action === action.action,
|
|
);
|
|
setMeta(match?.[1] ?? null);
|
|
});
|
|
}, [action]);
|
|
|
|
return meta;
|
|
}
|