18 lines
1.4 KiB
TypeScript
18 lines
1.4 KiB
TypeScript
/**
|
||
* React renderer 的受控命令注入点。renderer 借用 editor 的普通 dispatch/transaction,
|
||
* 不取得直接修改文档表或绕过校验的权限;上下文缺失时明确报错,避免默默丢编辑。
|
||
*/
|
||
"use client";
|
||
import { createContext, useContext } from 'react';
|
||
import type { Transaction } from '../canvas-core/editor.ts';
|
||
import type { Command, Result } from '../canvas-core/types.ts';
|
||
/** 与普通历史单元一致的标签/分组信息,不是网络请求参数。 */
|
||
export type RendererCommandOptions={label?:string;groupId?:string};
|
||
/** 最小写入门面:单命令或同步逻辑事务都返回 editor 的校验/提交结果。 */
|
||
export type CanvasRendererCommands={dispatch(command:Command,options?:RendererCommandOptions):Result;transaction(callback:(transaction:Transaction)=>unknown,options?:RendererCommandOptions):Result};
|
||
/** Provider 由上层 renderer 装配;默认 null 表示组件尚未处于合法的编辑上下文。 */
|
||
export const CanvasRendererCommandsContext=createContext<CanvasRendererCommands|null>(null);
|
||
/** Trusted installed renderers submit normal validated commands, never write a second model. */
|
||
/** 已安装的受信 renderer 通过此 hook 获取命令门面,所有业务修改仍经 editor 发布边界。 */
|
||
export function useCanvasRendererCommands(){const commands=useContext(CanvasRendererCommandsContext);if(!commands)throw Error('Canvas renderer commands are unavailable');return commands;}
|