tmagic-editor/docs/api/editor/historyServiceEvents.md
roymondchen e2c065f90d feat(editor): 代码块与数据源支持按 id 独立的历史记录
- history service 新增 pushCodeBlock/undoCodeBlock/redoCodeBlock
  /canUndoCodeBlock/canRedoCodeBlock 及数据源对称 API
- 按 id 维度各自维护独立 UndoRedo 栈,与页面/节点历史完全解耦
- type 新增 CodeBlockStepValue / DataSourceStepValue 独立类型
- HistoryState 扩展 codeBlockState / dataSourceState 字段
- codeBlockService.setCodeDslByIdSync / deleteCodeDslByIds 自动入历史
- dataSourceService.add / update / remove 自动入历史
- 入栈成功时 emit code-block-history-change / data-source-history-change
- 补充单测共 21 例,更新 history/codeBlock/dataSource 相关文档
2026-05-27 19:50:17 +08:00

2.1 KiB

historyService事件

page-change

  • 详情: 页面切换

  • 事件回调函数: (undoRedo: UndoRedo) => void

    ::: details 查看 UndoRedo 类定义 <<< @/../packages/editor/src/utils/undo-redo.ts#UndoRedo{ts} :::

change

  • 详情: 历史记录发生变化

  • 事件回调函数: (state: StepValue | null) => void

    ::: details 查看 StepValue 及关联类型定义 <<< @/../packages/editor/src/type.ts#StepValue{ts}

    <<< @/../packages/editor/src/type.ts#HistoryOpType{ts}

    <<< @/../packages/schema/src/index.ts#Id{ts}

    <<< @/../packages/schema/src/index.ts#MNode{ts} :::

    :::tip 当游标处于历史栈边界(已经无法继续撤销或重做)时,UndoRedo.undo() / redo() 返回 null,对应 change 回调收到的 statenull :::

code-block-history-change

  • 详情: 代码块历史记录发生变化(pushCodeBlock / undoCodeBlock / redoCodeBlock 成功时触发)

  • 事件回调函数: (codeBlockId: Id, step: CodeBlockStepValue) => void

    ::: details 查看 CodeBlockStepValue 及关联类型定义 <<< @/../packages/editor/src/type.ts#CodeBlockStepValue{ts}

    <<< @/../packages/schema/src/index.ts#CodeBlockContent{ts}

    <<< @/../packages/schema/src/index.ts#Id{ts} :::

    :::tip

    • 新增触发的 step 中 oldContentnull
    • 删除触发的 step 中 newContentnull
    • undo / redo 返回 null(边界状态)时不会触发该事件 :::

data-source-history-change

  • 详情: 数据源历史记录发生变化(pushDataSource / undoDataSource / redoDataSource 成功时触发)

  • 事件回调函数: (dataSourceId: Id, step: DataSourceStepValue) => void

    ::: details 查看 DataSourceStepValue 及关联类型定义 <<< @/../packages/editor/src/type.ts#DataSourceStepValue{ts}

    <<< @/../packages/schema/src/index.ts#Id{ts} :::

    :::tip

    • 新增触发的 step 中 oldSchemanull
    • 删除触发的 step 中 newSchemanull
    • undo / redo 返回 null(边界状态)时不会触发该事件 :::