tmagic-editor/docs/api/editor/historyServiceEvents.md
roymondchen 0f42989ca3 refactor(editor): 统一历史栈结构,支持扩展历史类型
将 pageSteps/codeBlockState/dataSourceState 三套独立历史栈收敛为统一的 steps 结构
(按 stepType 分桶),并新增 registerStepType/setStepName/getStepName 支持自定义
扩展历史类型。同步重构 history 相关服务、组件、工具方法、测试与文档。
2026-06-23 20:14:41 +08:00

123 lines
4.3 KiB
Markdown
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.

# historyService事件
## change
- **详情:** 页面历史记录发生变化(`page` 类型 `push` / `undo` / `redo` 成功时触发;与 `code-block-history-change` / `data-source-history-change` 同构)
- **事件回调函数:** `(pageId: Id, step: StepValue) => void`
::: details 查看 StepValue 及关联类型定义
<<< @/../packages/editor/src/type.ts#StepValue{ts}
<<< @/../packages/editor/src/type.ts#BaseStepValue{ts}
<<< @/../packages/editor/src/type.ts#StepExtra{ts}
<<< @/../packages/editor/src/type.ts#HistoryOpType{ts}
<<< @/../packages/editor/src/type.ts#HistoryOpSource{ts}
<<< @/../packages/schema/src/index.ts#Id{ts}
<<< @/../packages/schema/src/index.ts#MNode{ts}
:::
:::tip
回调签名已与其它历史类型统一为 `(id, step)`当游标处于历史栈边界已无法继续撤销 / 重做 `undo` / `redo` 返回 `null`此时不会触发该事件
:::
## marker-change
- **详情** 通过 [`setMarker`](./historyServiceMethods.md#setmarker) 为某个历史栈种入 `initial` 基线时触发适用于所有类型
- **事件回调函数** `(id: Id, marker: StepValue, stepType: HistoryStepType) => void`
## clear
- **详情** 调用 [`clear`](./historyServiceMethods.md#clear) 清空历史栈时触发适用于所有类型
- **事件回调函数** `(id: Id | undefined, stepType: HistoryStepType) => void`
:::tip
`id` 缺省清空 `stepType` 下全部栈时回调的 `id` `undefined`
:::
## code-block-history-change
- **详情** 代码块历史记录发生变化`push('codeBlock', step, codeBlockId)` / `undo('codeBlock', id)` / `redo('codeBlock', id)` 成功时触发
- **事件回调函数** `(codeBlockId: Id, step: CodeBlockStepValue) => void`
::: details 查看 CodeBlockStepValue 及关联类型定义
<<< @/../packages/editor/src/type.ts#CodeBlockStepValue{ts}
<<< @/../packages/editor/src/type.ts#BaseStepValue{ts}
<<< @/../packages/editor/src/type.ts#HistoryOpSource{ts}
<<< @/../packages/schema/src/index.ts#CodeBlockContent{ts}
<<< @/../packages/schema/src/index.ts#Id{ts}
:::
:::tip
- 新增触发的 step diff `oldSchema` `null`
- 删除触发的 step diff `newSchema` `null`
- `undo` / `redo` 返回 `null`边界状态时不会触发该事件
:::
## data-source-history-change
- **详情** 数据源历史记录发生变化`push('dataSource', step, dataSourceId)` / `undo('dataSource', id)` / `redo('dataSource', id)` 成功时触发
- **事件回调函数** `(dataSourceId: Id, step: DataSourceStepValue) => void`
::: details 查看 DataSourceStepValue 及关联类型定义
<<< @/../packages/editor/src/type.ts#DataSourceStepValue{ts}
<<< @/../packages/editor/src/type.ts#BaseStepValue{ts}
<<< @/../packages/editor/src/type.ts#HistoryOpSource{ts}
<<< @/../packages/schema/src/index.ts#Id{ts}
:::
:::tip
- 新增触发的 step diff `oldSchema` `null`
- 删除触发的 step diff `newSchema` `null`
- `undo` / `redo` 返回 `null`边界状态时不会触发该事件
:::
## mark-saved
- **详情** 调用 [`markSaved`](./historyServiceMethods.md#marksaved) 标记已保存记录时触发
- **事件回调函数** `(payload: { kind: 'all' | HistoryStepType; id?: Id }) => void`
::: tip
- `markSaved(stepType)`缺省 id触发时 `kind` `all` `id`此时 `stepType` 不生效
- `markSaved(stepType, id)` 触发时 `kind` 为对应的 `stepType``page` / `codeBlock` / `dataSource` / 扩展`id` 为目标栈 id
:::
## save-to-indexed-db
- **详情** `saveToIndexedDB` 把历史记录写入本地 IndexedDB 成功时触发
- **事件回调函数** `(snapshot: PersistedHistoryState) => void`
::: details 查看 PersistedHistoryState 类型定义
<<< @/../packages/editor/src/type.ts#PersistedHistoryState{ts}
<<< @/../packages/editor/src/utils/undo-redo.ts#SerializedUndoRedo{ts}
:::
## restore-from-indexed-db
- **详情** `restoreFromIndexedDB` 从本地 IndexedDB 读取并重建历史记录成功时触发找不到记录时不触发
- **事件回调函数** `(snapshot: PersistedHistoryState) => void`
::: details 查看 PersistedHistoryState 类型定义
<<< @/../packages/editor/src/type.ts#PersistedHistoryState{ts}
:::