Files
mnote/design/old/08-legacy-rust-kernel/done/mindmap-onlyoffice-boundary.md
T

5.2 KiB
Raw Blame History

[recycle] Mindmap 与 OnlyOffice 当前边界说明

更新时间:2026-04-14

主仓:/mnt/Data1T/mnote

1. Mindmap 当前主链

1.1 主组件与嵌入链路

  • 主组件:/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx
  • BlockNote 注册入口:/mnt/Data1T/mnote/wolai-frontend/src/components/editor/schema.ts
  • 独立全屏页:/mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx

当前事实:

  • MindmapBlockView 同时服务文档内嵌块与独立全屏页。
  • 独立页通过 editorStub 复用同一组件,不额外复制第二套思维导图主壳。
  • 文档内嵌与独立页共用同一套工具栏、侧栏、导航器、缩略图与上下文菜单子组件。

1.2 数据入口与 ops 边界

  • 本地读写入口:/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmapLocalStore.ts
  • 节点操作入口:/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmapOps.ts
  • 页面 API
    • /mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/route.ts
    • /mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts

当前拆分:

  • 前端交互状态保留在 MindmapBlock.tsx 及其子组件内。
  • 本体数据读写由 mindmapLocalStore.ts 提供本地文件落盘兼容接口。
  • 节点增删改、引用、注释、链接等操作由 mindmapOps.ts 统一描述为 MindmapOp
  • 页面 API 当前通过 Convex api.mindmaps.* 承接 get/put/restore/purge,保留现有前端形态不变。
  • 当前 Mindmap API 已补统一元信息口径:
    • pageId = documentId
    • attachmentId = mindmapId
    • workspaceId 统一来自页面归属工作区
    • requestId/traceId 统一从请求头透传或在路由侧兜底生成

1.3 后续 adapter 目标

后续若进入 Rust adapter,只抽象以下边界,不复制历史仓 UI:

  • 节点树结构
  • 节点引用 refs
  • 节点操作日志 MindmapOp
  • mindmap 与 page/block 的绑定关系

2. OnlyOffice 当前主链

2.1 页面与 API 边界

  • 页面入口:
    • /mnt/Data1T/mnote/wolai-frontend/src/app/onlyoffice/page.tsx
    • /mnt/Data1T/mnote/wolai-frontend/src/app/onlyoffice/OnlyOfficeClientPage.tsx
  • 页面侧面板:
    • /mnt/Data1T/mnote/wolai-frontend/src/components/onlyoffice/OnlyOfficeAiAgentPanel.tsx
  • API 边界:
    • /mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/sign/route.ts
    • /mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/proxy/route.ts
    • /mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/callback/route.ts
    • /mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/forcesave/route.ts

当前拆分:

  • page.tsx 负责页面级早期 DOM 补丁与容器加载。
  • OnlyOfficeClientPage.tsx 负责编辑器初始化、内部请求改写、代理地址适配与 callback URL 组装。
  • sign 负责 JWT 签名。
  • proxy 负责同源代理与回源 URL 安全限制。
  • callback 负责保存回写存储。
  • forcesave 负责触发文档服务器强制保存。

2.2 与正文和附件的关系

  • Office 文件入口仍来自 MediaBlock/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MediaBlock.tsx
  • 正文里只保留附件块与跳转入口,不在 BlockNote 内直接运行 OnlyOffice 编辑器。
  • OnlyOffice 编辑器继续在独立 /onlyoffice 页面运行。
  • 当前 OnlyOffice 已稳定使用:
    • documentId 作为页面业务标识
    • assetId 作为附件业务标识
    • 页面归属仍由文档/附件在 Convex 中的 workspace_iddocument_id 决定

2.5 与 Mindmap 对齐后的共享标识口径

  • 页面标识:
    • Mindmap 使用 pageId/documentId
    • OnlyOffice 使用 documentId
  • 附件标识:
    • Mindmap 使用 attachmentId/mindmapId
    • OnlyOffice 使用 assetId
  • 页面归属:
    • 两者都以 Convex 中的 workspace_id + document_id 作为最终归属真相
  • 追踪字段:
    • Mindmap API 已返回 requestId/traceId
    • OnlyOffice 页面当前通过查询参数与调试上下文持有 assetId/documentId/userId,后续若接入统一 Rust adapter,继续沿用同一页面/附件口径

2.3 静态资源边界

  • 根目录静态资源保留在 /mnt/Data1T/mnote/src/components/onlyoffice/
  • 当前已确认存在:
    • onlyoffice-web-apps/
    • onlyoffice-plugins/
    • onlyoffice-data/

这些目录继续保留为运行所需静态资源、插件和数据目录,不做迁移式替换。

2.4 后续 adapter 目标

后续若进入 Rust adapter,只抽象以下边界:

  • 对象解析与附件定位
  • 签名生成
  • callback 写回
  • forcesave 触发
  • 代理回源请求

3. 历史仓禁止误复制范围

以下历史仓路径只作为参考,不进入主仓主线:

  • /mnt/Data1T/mnote-rust/app/documents/[id]/mindmap/page.tsx
  • /mnt/Data1T/mnote-rust/app/documents/[id]/office/page.tsx
  • /mnt/Data1T/mnote-rust/components/sidebar/sidebar.tsx
  • /mnt/Data1T/mnote-rust/app/page.tsx
  • /mnt/Data1T/mnote-rust/app/onlyoffice/page.tsx

约束:

  • 不复制第二套对象页壳。
  • 不复制第二套 sidebar 壳。
  • adapter-onlyofficeadapter-mindmap 继续作为后置实现项,而不是本阶段直接迁入主线。