Files
ttstd-infinite-canvas/web/src/components/canvas/canvas-node-action-context.ts

32 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { createContext, useContext } from "react";
import type { CanvasNodeData, CanvasNodeMetadata } from "@/types/canvas";
// 批次子图操作条(下载/创建副本/删除)与主图位下载需要调用画布级动作,
// 但画布节点经 CanvasProjectWorldLayers 渲染、不便逐个透传 handler,
// 通过 Context 注入,避免改动 world-layers。无 Provider 时静默降级为 no-op。
export type CanvasNodeActionContextValue = {
upload?: (node: CanvasNodeData) => void;
download?: (node: CanvasNodeData) => void;
duplicate?: (node: CanvasNodeData) => void;
deleteNode?: (node: CanvasNodeData) => void;
/** 合并式更新节点 metadata;扩展节点(如调色)在自己的面板里改参数时用。 */
updateMetadata?: (nodeId: string, patch: CanvasNodeMetadata) => void;
/** 更新单个节点;媒体尺寸回写使用它,避免触发全量节点时间戳归并。 */
updateNode?: (nodeId: string, update: (node: CanvasNodeData) => CanvasNodeData) => void;
/** 合并延迟提交媒体测量结果,避免首屏图片同时解码时反复刷新画布。 */
updateMediaNode?: (nodeId: string, update: (node: CanvasNodeData) => CanvasNodeData) => void;
/** 改节点宽高;图片首次量到真实尺寸后按比例校正节点用。 */
resizeNode?: (nodeId: string, size: { width: number; height: number }) => void;
/** 打开节点级肖像排查工作台;任务生命周期由画布页面持有。 */
openPortraitClearance?: (node: CanvasNodeData) => void;
/** 打开节点级 AI 审美批改报告。 */
openArtCritique?: (node: CanvasNodeData) => void;
};
export const CanvasNodeActionContext = createContext<CanvasNodeActionContextValue>({});
export function useCanvasNodeActions() {
return useContext(CanvasNodeActionContext);
}