feat(lesson-preparation): 组合 ExpandedSlice 到 EditorState
This commit is contained in:
@@ -5,25 +5,33 @@ import { createEditorSlice, type EditorSlice } from "./editor-slice";
|
|||||||
import { createSelectionSlice, type SelectionSlice } from "./selection-slice";
|
import { createSelectionSlice, type SelectionSlice } from "./selection-slice";
|
||||||
import { createVersionSlice, type VersionSlice } from "./version-slice";
|
import { createVersionSlice, type VersionSlice } from "./version-slice";
|
||||||
import { createHistorySlice, type HistorySlice } from "./history-slice";
|
import { createHistorySlice, type HistorySlice } from "./history-slice";
|
||||||
|
import { createExpandedSlice, type ExpandedSlice } from "./expanded-slice";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* V4 P2-6 修复:将单体 Zustand store(原 303 行)拆分为 3 个独立 slice。
|
* V4 P2-6 修复:将单体 Zustand store(原 303 行)拆分为 3 个独立 slice。
|
||||||
* V5-2 新增:history-slice 撤销/重做栈(50 步上限)。
|
* V5-2 新增:history-slice 撤销/重做栈(50 步上限)。
|
||||||
|
* V4 纸感重构:新增 expanded-slice(节点展开到正文流的状态)。
|
||||||
*
|
*
|
||||||
* - editor-slice: 文档结构(planId/title/doc)及所有文档操作方法
|
* - editor-slice: 文档结构(planId/title/doc)及所有文档操作方法
|
||||||
* - selection-slice: 节点选中状态(selectedNodeId / selectNode)
|
* - selection-slice: 节点选中状态(selectedNodeId / selectNode / anchorNodeForSelection)
|
||||||
* - version-slice: 草稿版本与保存状态(isDirty/isSaving/lastSavedAt/saveError/isOnline)
|
* - version-slice: 草稿版本与保存状态(isDirty/isSaving/lastSavedAt/saveError/isOnline)
|
||||||
* - history-slice: 撤销/重做栈(past/future/canUndo/canRedo/undo/redo)
|
* - history-slice: 撤销/重做栈(past/future/canUndo/canRedo/undo/redo)
|
||||||
|
* - expanded-slice: V4 节点展开到正文流的状态(expandedNodeIds / toggleExpand / setExpanded)
|
||||||
*
|
*
|
||||||
* 主文件仅负责组合 slice 并导出统一的 EditorState 类型,方便测试与维护。
|
* 主文件仅负责组合 slice 并导出统一的 EditorState 类型,方便测试与维护。
|
||||||
* 各 slice 通过 `import type { EditorState }` 引用合并后的类型,TypeScript
|
* 各 slice 通过 `import type { EditorState }` 引用合并后的类型,TypeScript
|
||||||
* 编译后该类型导入会被完全移除,运行时无循环依赖。
|
* 编译后该类型导入会被完全移除,运行时无循环依赖。
|
||||||
*/
|
*/
|
||||||
export type EditorState = EditorSlice & SelectionSlice & VersionSlice & HistorySlice;
|
export type EditorState = EditorSlice &
|
||||||
|
SelectionSlice &
|
||||||
|
VersionSlice &
|
||||||
|
HistorySlice &
|
||||||
|
ExpandedSlice;
|
||||||
|
|
||||||
export const useLessonPlanEditor = create<EditorState>()((...a) => ({
|
export const useLessonPlanEditor = create<EditorState>()((...a) => ({
|
||||||
...createEditorSlice(...a),
|
...createEditorSlice(...a),
|
||||||
...createSelectionSlice(...a),
|
...createSelectionSlice(...a),
|
||||||
...createVersionSlice(...a),
|
...createVersionSlice(...a),
|
||||||
...createHistorySlice(...a),
|
...createHistorySlice(...a),
|
||||||
|
...createExpandedSlice(...a),
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user