Files
mnote/desktop-electron/desktop-next/src/store/editor-bridge.ts
T

38 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-01-15 20:54:21 +08:00
"use client";
import { create } from "zustand";
import type { ReferenceTarget } from "@/types/search";
import type { Json } from "@/types/supabase";
import type { MediaAsset } from "@/types/media";
export interface EditorReferenceBridgeResult {
blockId: string | null;
}
export interface EditorReferenceBridge {
insertInlineReference: (target: ReferenceTarget, alias?: string) => EditorReferenceBridgeResult;
insertEmbedReference: (target: ReferenceTarget) => EditorReferenceBridgeResult;
/**
* 向当前打开的文档插入一个“附件/媒体”块。
* 主要用于侧边栏文件树拖拽上传后,把文件显示到主编辑区。
*/
insertMediaAsset?: (asset: MediaAsset) => void;
2026-02-01 08:47:40 +08:00
/**
* 向当前打开的文档插入一个“思维导图”块。
* 用于:从垃圾桶恢复思维导图后,把导图重新插入主编辑区。
*/
insertMindmapAsset?: (args: { documentId: string; mindmapId: string }) => void;
2026-01-15 20:54:21 +08:00
replaceWithSnapshot: (blocks: Json) => void;
openTableFullScreen?: (tableId: string) => void;
}
interface EditorBridgeState {
bridge: EditorReferenceBridge | null;
registerBridge: (bridge: EditorReferenceBridge | null) => void;
}
export const useEditorBridgeStore = create<EditorBridgeState>((set) => ({
bridge: null,
registerBridge: (bridge) => set({ bridge }),
}));