diff --git a/docs/zh/achitecture.md b/docs/zh/achitecture.md index 40c83fedff..5b870cd85e 100644 --- a/docs/zh/achitecture.md +++ b/docs/zh/achitecture.md @@ -153,10 +153,13 @@ export const enum CommandType { * `COMMAND` 负责根据特定的业务逻辑创建、编排和执行 `MUTATION` 或 `OPERATION`,例如一个 **删除行 `COMMAND`** 会生成一个 **删除行 `MUTATION`** 和用于 undo 的一个 **插入行 `MUTATION`** 及一个 **设置单元格内容 `MUTATION`** * `COMMAND` 是业务逻辑的主要承载者,如果对于一个 _用户操作行为_ 需要根据应用的状态来触发不同的 _底层行为_ —— 例如 _用户点击加粗文字按钮_ 时 需要根据当前选区范围来决定 _加粗操作的生效范围_ —— 相应的判断应该由 `COMMAND` 完成 * 可以派发其他 `COMMAND` `OPERATION` `MUTATION` + * 允许异步执行 * `MUTATION` 是对落盘数据所做的变更,涉及协同编辑的冲突处理,例如插入行列,修改单元格内容,修改筛选范围等等操作 * 不可以再派发其他任何命令 + * **必须同步执行** * `OPERATION` 是对不落盘数据(或称应用状态)所做的变更,不涉及冲突处理,例如修改滚动位置、修改侧边栏状态等等 * 不可以再派发其他任何命令 + * **必须同步执行** ### 协同编辑 diff --git a/packages/base-sheets/src/commands/utils/interface.ts b/packages/base-sheets/src/commands/utils/interface.ts new file mode 100644 index 0000000000..45f38dd706 --- /dev/null +++ b/packages/base-sheets/src/commands/utils/interface.ts @@ -0,0 +1,5 @@ +// TODO@wzhudev: not all commands / mutations / operations depend on this interface +export interface ISheetCommandSharedParams { + workbookId: string; + worksheetId: string; +} diff --git a/packages/base-sheets/src/controllers/basic-worksheet.controller.ts b/packages/base-sheets/src/controllers/basic-worksheet.controller.ts index dc6ce51551..9dd6fa6481 100644 --- a/packages/base-sheets/src/controllers/basic-worksheet.controller.ts +++ b/packages/base-sheets/src/controllers/basic-worksheet.controller.ts @@ -116,107 +116,98 @@ export class BasicWorksheetController extends Disposable implements IDisposable super(); [ - AddWorksheetMergeCommand, - AddWorksheetMergeMutation, AddWorksheetMergeAllCommand, - AddWorksheetMergeVerticalCommand, + AddWorksheetMergeCommand, AddWorksheetMergeHorizontalCommand, - RemoveWorksheetMergeCommand, - RemoveWorksheetMergeMutation, + AddWorksheetMergeMutation, + AddWorksheetMergeVerticalCommand, + ClearSelectionAllCommand, ClearSelectionContentCommand, ClearSelectionFormatCommand, - ClearSelectionAllCommand, - SetRangeValuesMutation, - SetWorksheetNameCommand, - SetWorksheetNameMutation, - SetWorksheetActivateCommand, - SetWorksheetActivateMutation, - SetStyleCommand, - SetRangeStyleMutation, - SetWorksheetHideCommand, - SetWorksheetHideMutation, - - // #region row col commands & mutations - - InsertRowCommand, - InsertRowBeforeCommand, - InsertRowAfterCommand, - InsertRowMutation, - RemoveRowCommand, - RemoveRowMutation, - InsertColCommand, - InsertColBeforeCommand, - InsertColAfterCommand, - InsertColMutation, - RemoveColCommand, - RemoveColMutation, - MoveRowsCommand, - MoveColsCommand, - MoveRowsMutation, - MoveColsMutation, - - SetColWidthCommand, - SetWorksheetColWidthMutation, - SetWorksheetRowIsAutoHeightCommand, - SetRowHeightCommand, - SetWorksheetRowHeightMutation, - SetWorksheetRowIsAutoHeightMutation, - SetWorksheetRowAutoHeightMutation, - SetRowHiddenCommand, - SetRowHiddenMutation, - SetColHiddenCommand, - SetColHiddenMutation, - SetSelectedColsVisibleCommand, - SetColVisibleMutation, - SetSelectedRowsVisibleCommand, - SetSpecificRowsVisibleCommand, - SetSpecificColsVisibleCommand, - SetRowVisibleMutation, - SetWorksheetOrderCommand, - SetWorksheetOrderMutation, - - DeltaRowHeightCommand, - DeltaColumnWidthCommand, - - // #endregion - - SetRangeValuesCommand, - TrimWhitespaceCommand, - InsertRangeMoveRightCommand, - InsertRangeMoveDownCommand, - InsertRangeMutation, + CopySheetCommand, DeleteRangeMoveLeftCommand, DeleteRangeMoveUpCommand, DeleteRangeMutation, - SetRangeFormattedValueCommand, - SetRangeFormattedValueMutation, - - SetTextColorCommand, - SetBackgroundColorCommand, - SetTextWrapCommand, - SetTextRotationCommand, - ResetTextColorCommand, - ResetBackgroundColorCommand, - SetHorizontalTextAlignCommand, - SetVerticalTextAlignCommand, - SetBorderCommand, - SetBorderColorCommand, - SetBorderStyleCommand, - SetBorderPositionCommand, - SetBorderStylesMutation, - CopySheetCommand, - SetTabColorCommand, - SetTabColorMutation, - SetWorksheetShowCommand, - RemoveSheetCommand, - RemoveSheetMutation, + DeltaColumnWidthCommand, + DeltaRowHeightCommand, + InsertColAfterCommand, + InsertColBeforeCommand, + InsertColCommand, + InsertColMutation, + InsertRangeMoveDownCommand, + InsertRangeMoveRightCommand, + InsertRangeMutation, + InsertRowAfterCommand, + InsertRowBeforeCommand, + InsertRowCommand, + InsertRowMutation, InsertSheetCommand, InsertSheetMutation, - SetFrozenCommand, - SetFrozenMutation, - SetFrozenCancelCommand, + MoveColsCommand, + MoveColsMutation, MoveRangeCommand, MoveRangeMutation, + MoveRowsCommand, + MoveRowsMutation, + RemoveColCommand, + RemoveColMutation, + RemoveRowCommand, + RemoveRowMutation, + RemoveSheetCommand, + RemoveSheetMutation, + RemoveWorksheetMergeCommand, + RemoveWorksheetMergeMutation, + ResetBackgroundColorCommand, + ResetTextColorCommand, + SetBackgroundColorCommand, + SetBorderColorCommand, + SetBorderCommand, + SetBorderPositionCommand, + SetBorderStyleCommand, + SetBorderStylesMutation, + SetColHiddenCommand, + SetColHiddenMutation, + SetColVisibleMutation, + SetColWidthCommand, + SetFrozenCancelCommand, + SetFrozenCommand, + SetFrozenMutation, + SetHorizontalTextAlignCommand, + SetRangeFormattedValueCommand, + SetRangeFormattedValueMutation, + SetRangeStyleMutation, + SetRangeValuesCommand, + SetRangeValuesMutation, + SetRowHeightCommand, + SetRowHiddenCommand, + SetRowHiddenMutation, + SetRowVisibleMutation, + SetSelectedColsVisibleCommand, + SetSelectedRowsVisibleCommand, + SetSpecificColsVisibleCommand, + SetSpecificRowsVisibleCommand, + SetStyleCommand, + SetTabColorCommand, + SetTabColorMutation, + SetTextColorCommand, + SetTextRotationCommand, + SetTextWrapCommand, + SetVerticalTextAlignCommand, + SetWorksheetActivateCommand, + SetWorksheetActivateMutation, + SetWorksheetColWidthMutation, + SetWorksheetHideCommand, + SetWorksheetHideMutation, + SetWorksheetNameCommand, + SetWorksheetNameMutation, + SetWorksheetOrderCommand, + SetWorksheetOrderMutation, + SetWorksheetRowAutoHeightMutation, + SetWorksheetRowHeightMutation, + SetWorksheetRowIsAutoHeightCommand, + SetWorksheetRowIsAutoHeightMutation, + SetWorksheetShowCommand, + TrimWhitespaceCommand, ].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command))); } } diff --git a/packages/base-sheets/src/index.ts b/packages/base-sheets/src/index.ts index 6af43c7c4d..b93fc7866c 100644 --- a/packages/base-sheets/src/index.ts +++ b/packages/base-sheets/src/index.ts @@ -177,4 +177,5 @@ export { SetWorksheetRowIsAutoHeightMutation, } from './commands/mutations/set-worksheet-row-height.mutation'; export { type ISetSelectionsOperationParams, SetSelectionsOperation } from './commands/operations/selection.operation'; +export { type ISheetCommandSharedParams } from './commands/utils/interface'; export { RefRangeService } from './services/ref-range.service'; diff --git a/packages/core/src/Shared/Tools.ts b/packages/core/src/Shared/Tools.ts index 07d49d2182..2ae40c1d77 100644 --- a/packages/core/src/Shared/Tools.ts +++ b/packages/core/src/Shared/Tools.ts @@ -283,22 +283,23 @@ export class Tools { return diffValue(one, tow); } - static deepClone(value: any): any { + static deepClone(value: T): T { if (!this.isDefine(value)) { return value; } if (this.isRegExp(value)) { - return new RegExp(value); + return new RegExp(value) as T; } + // @ts-ignore if (this.isDate(value)) { - return new Date(value); + return new Date(value) as T; } if (this.isArray(value)) { const clone: any[] = []; value.forEach((item, index) => { clone[index] = Tools.deepClone(item); }); - return clone; + return clone as T; } if (this.isObject(value)) { const clone: IKeyValue = {}; @@ -307,7 +308,7 @@ export class Tools { clone[key] = Tools.deepClone(item); }); Object.setPrototypeOf(clone, Object.getPrototypeOf(value)); - return clone; + return clone as T; } return value; } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index a7037370f3..48ef393108 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -14,6 +14,7 @@ export { type IExecutionOptions, type IMultiCommand, type IMutation, + type IMutationInfo, type IOperation, sequenceExecute, } from './services/command/command.service'; diff --git a/packages/core/src/services/command/command.service.ts b/packages/core/src/services/command/command.service.ts index 159d4923c6..02afaf0ef1 100644 --- a/packages/core/src/services/command/command.service.ts +++ b/packages/core/src/services/command/command.service.ts @@ -80,6 +80,12 @@ export interface ICommandInfo { params?: T; } +export interface IMutationInfo { + id: string; + type?: CommandType.MUTATION; + params: T; +} + export interface IExecutionOptions { local?: boolean; }