mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-05-30 12:18:10 +00:00
- 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 相关文档
235 lines
5.2 KiB
Markdown
235 lines
5.2 KiB
Markdown
# historyService方法
|
||
|
||
## reset
|
||
|
||
- **详情:**
|
||
|
||
重置全部历史记录(包括页面节点栈、代码块栈、数据源栈),并重置当前页面 id / canRedo / canUndo
|
||
|
||
## resetPage
|
||
|
||
- **详情:**
|
||
|
||
重置当前页面的历史记录状态(清空当前页面id,重置 canRedo/canUndo)
|
||
|
||
## resetState
|
||
|
||
- **详情:**
|
||
|
||
重置历史记录全部内部状态(清空 pageId、pageSteps、canRedo、canUndo、codeBlockState、dataSourceState)
|
||
|
||
## changePage
|
||
|
||
- **参数:**
|
||
- `{MPage | MPageFragment} page`
|
||
|
||
::: details 查看 MPage / MPageFragment 类型定义
|
||
<<< @/../packages/schema/src/index.ts#MPage{ts}
|
||
|
||
<<< @/../packages/schema/src/index.ts#MPageFragment{ts}
|
||
:::
|
||
|
||
- **详情:**
|
||
|
||
按页面切换历史堆栈
|
||
|
||
## push
|
||
|
||
- **参数:**
|
||
- `{StepValue} state`
|
||
|
||
::: 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}
|
||
:::
|
||
|
||
- **返回:**
|
||
- `{StepValue | null}`
|
||
|
||
- **详情:**
|
||
|
||
添加一条历史记录
|
||
|
||
## undo
|
||
|
||
- **返回:**
|
||
- `{StepValue | null}`
|
||
|
||
- **详情:**
|
||
|
||
撤销当前操作
|
||
|
||
## redo
|
||
|
||
- **返回:**
|
||
- `{StepValue | null}`
|
||
|
||
- **详情:**
|
||
|
||
恢复到下一步
|
||
|
||
## pushCodeBlock
|
||
|
||
- **参数:**
|
||
- `{Id} codeBlockId` 代码块 id
|
||
- `{Object} payload`
|
||
- `{CodeBlockContent | null} oldContent` 变更前的代码块内容;新增时为 `null`
|
||
- `{CodeBlockContent | null} newContent` 变更后的代码块内容;删除时为 `null`
|
||
|
||
::: details 查看 CodeBlockStepValue 及关联类型定义
|
||
<<< @/../packages/editor/src/type.ts#CodeBlockStepValue{ts}
|
||
|
||
<<< @/../packages/schema/src/index.ts#CodeBlockContent{ts}
|
||
:::
|
||
|
||
- **返回:**
|
||
- `{CodeBlockStepValue | null}` 入栈失败(未传 id)时返回 `null`
|
||
|
||
- **详情:**
|
||
|
||
推入一条代码块变更记录。与页面 / 节点完全无关,按 `codeBlockId` 维度独立一份 `UndoRedo` 栈,
|
||
栈实例存放在 `historyService.state.codeBlockState[codeBlockId]`。
|
||
|
||
入栈成功后会触发 `code-block-history-change` 事件。
|
||
|
||
::: tip
|
||
`codeBlockService.setCodeDslByIdSync` 与 `codeBlockService.deleteCodeDslByIds` 内部已经
|
||
自动调用本方法,业务代码通常无需手动调用。
|
||
:::
|
||
|
||
## undoCodeBlock
|
||
|
||
- **参数:**
|
||
- `{Id} codeBlockId`
|
||
|
||
- **返回:**
|
||
- `{CodeBlockStepValue | null}` 栈不存在或已无可撤销记录时返回 `null`
|
||
|
||
- **详情:**
|
||
|
||
撤销指定代码块的最近一次变更。成功时会触发 `code-block-history-change` 事件。
|
||
拿到 step 后由调用方根据 `step.oldContent` 写回 `codeBlockService`(本方法不会自动回放)。
|
||
|
||
## redoCodeBlock
|
||
|
||
- **参数:**
|
||
- `{Id} codeBlockId`
|
||
|
||
- **返回:**
|
||
- `{CodeBlockStepValue | null}` 栈不存在或已无可重做记录时返回 `null`
|
||
|
||
- **详情:**
|
||
|
||
重做指定代码块的下一次变更。成功时会触发 `code-block-history-change` 事件。
|
||
|
||
## canUndoCodeBlock
|
||
|
||
- **参数:**
|
||
- `{Id} codeBlockId`
|
||
|
||
- **返回:**
|
||
- `{boolean}`
|
||
|
||
- **详情:**
|
||
|
||
指定代码块当前是否可撤销。栈不存在时返回 `false`。
|
||
|
||
## canRedoCodeBlock
|
||
|
||
- **参数:**
|
||
- `{Id} codeBlockId`
|
||
|
||
- **返回:**
|
||
- `{boolean}`
|
||
|
||
- **详情:**
|
||
|
||
指定代码块当前是否可重做。栈不存在时返回 `false`。
|
||
|
||
## pushDataSource
|
||
|
||
- **参数:**
|
||
- `{Id} dataSourceId` 数据源 id
|
||
- `{Object} payload`
|
||
- `{DataSourceSchema | null} oldSchema` 变更前的数据源 schema;新增时为 `null`
|
||
- `{DataSourceSchema | null} newSchema` 变更后的数据源 schema;删除时为 `null`
|
||
|
||
::: details 查看 DataSourceStepValue 及关联类型定义
|
||
<<< @/../packages/editor/src/type.ts#DataSourceStepValue{ts}
|
||
:::
|
||
|
||
- **返回:**
|
||
- `{DataSourceStepValue | null}` 入栈失败(未传 id)时返回 `null`
|
||
|
||
- **详情:**
|
||
|
||
推入一条数据源变更记录。与页面 / 节点完全无关,按 `dataSourceId` 维度独立一份 `UndoRedo` 栈,
|
||
栈实例存放在 `historyService.state.dataSourceState[dataSourceId]`。
|
||
|
||
入栈成功后会触发 `data-source-history-change` 事件。
|
||
|
||
::: tip
|
||
`dataSourceService.add` / `update` / `remove` 内部已经自动调用本方法,业务代码通常无需手动调用。
|
||
:::
|
||
|
||
## undoDataSource
|
||
|
||
- **参数:**
|
||
- `{Id} dataSourceId`
|
||
|
||
- **返回:**
|
||
- `{DataSourceStepValue | null}`
|
||
|
||
- **详情:**
|
||
|
||
撤销指定数据源的最近一次变更。成功时会触发 `data-source-history-change` 事件。
|
||
拿到 step 后由调用方根据 `step.oldSchema` 写回 `dataSourceService`(本方法不会自动回放)。
|
||
|
||
## redoDataSource
|
||
|
||
- **参数:**
|
||
- `{Id} dataSourceId`
|
||
|
||
- **返回:**
|
||
- `{DataSourceStepValue | null}`
|
||
|
||
- **详情:**
|
||
|
||
重做指定数据源的下一次变更。成功时会触发 `data-source-history-change` 事件。
|
||
|
||
## canUndoDataSource
|
||
|
||
- **参数:**
|
||
- `{Id} dataSourceId`
|
||
|
||
- **返回:**
|
||
- `{boolean}`
|
||
|
||
- **详情:**
|
||
|
||
指定数据源当前是否可撤销。栈不存在时返回 `false`。
|
||
|
||
## canRedoDataSource
|
||
|
||
- **参数:**
|
||
- `{Id} dataSourceId`
|
||
|
||
- **返回:**
|
||
- `{boolean}`
|
||
|
||
- **详情:**
|
||
|
||
指定数据源当前是否可重做。栈不存在时返回 `false`。
|
||
|
||
## destroy
|
||
|
||
- **详情:**
|
||
|
||
销毁
|
||
|