@tmagic/editor 1.8.0-beta.2 → 1.8.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +43 -9
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +8 -4
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +22 -98
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +32 -9
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +68 -17
- package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ScrollBar.js +0 -1
- package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ViewForm.js +5 -0
- package/dist/es/components/ViewForm.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/es/editorProps.js +9 -1
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +16 -5
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +81 -44
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +10 -3
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +7 -19
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +13 -6
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +11 -8
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +39 -12
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +11 -20
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +11 -6
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +30 -14
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +38 -6
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +151 -153
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +8 -10
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +28 -6
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/Center.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +50 -0
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +50 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +7 -7
- package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +6 -3
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +29 -6
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +32 -6
- package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +11 -3
- package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +11 -3
- package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +11 -3
- package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +11 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +17 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +19 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +19 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +37 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +33 -3
- package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +56 -30
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +35 -26
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +76 -48
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +29 -23
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/es/fields/UISelect.js +0 -1
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/hooks/use-code-block-edit.js +6 -3
- package/dist/es/hooks/use-compare-form.js +119 -0
- package/dist/es/hooks/use-data-source-edit.js +5 -2
- package/dist/es/hooks/use-stage.js +9 -4
- package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/DatasourceIcon.js +17 -0
- package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/index.js +24 -10
- package/dist/es/initService.js +19 -13
- package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +24 -12
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +25 -18
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +25 -38
- package/dist/es/layouts/history-list/BucketTab.js +5 -0
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +177 -88
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +139 -37
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +164 -107
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +44 -9
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +49 -53
- package/dist/es/layouts/history-list/composables.js +138 -108
- package/dist/es/layouts/history-list/useHistoryList.js +56 -0
- package/dist/es/layouts/history-list/useHistoryRevert.js +317 -0
- package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +5 -3
- package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +50 -7
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +33 -13
- package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +26 -38
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +19 -4
- package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +23 -6
- package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +27 -5
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +19 -4
- package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/es/layouts/sidebar/layer/use-click.js +3 -3
- package/dist/es/layouts/sidebar/layer/use-node-status.js +2 -2
- package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +16 -16
- package/dist/es/plugin.js +5 -2
- package/dist/es/services/codeBlock.js +137 -56
- package/dist/es/services/dataSource.js +122 -52
- package/dist/es/services/dep.js +162 -41
- package/dist/es/services/editor.js +613 -179
- package/dist/es/services/history.js +350 -386
- package/dist/es/services/keybinding.js +6 -6
- package/dist/es/services/props.js +3 -2
- package/dist/es/services/storage.js +2 -2
- package/dist/es/services/ui.js +10 -2
- package/dist/es/style.css +549 -113
- package/dist/es/utils/config.js +4 -1
- package/dist/es/utils/const.js +2 -2
- package/dist/es/utils/content-menu.js +19 -11
- package/dist/es/utils/data-source/index.js +34 -11
- package/dist/es/utils/dep/collect-worker-client.js +114 -0
- package/dist/es/utils/dep/idle-task.js +47 -22
- package/dist/es/utils/dep/worker.js +1 -1
- package/dist/es/utils/editor.js +103 -49
- package/dist/es/utils/event.js +123 -0
- package/dist/es/utils/history.js +220 -0
- package/dist/es/utils/indexed-db.js +86 -0
- package/dist/es/utils/monaco-editor.js +22 -6
- package/dist/es/utils/operator.js +2 -2
- package/dist/es/utils/props.js +114 -33
- package/dist/es/utils/type-match-rules.js +367 -0
- package/dist/es/utils/undo-redo.js +60 -1
- package/dist/style.css +549 -113
- package/dist/themes/magic-admin.css +3028 -0
- package/dist/tmagic-editor.umd.cjs +14273 -10029
- package/package.json +8 -8
- package/src/Editor.vue +43 -2
- package/src/components/CodeBlockEditor.vue +3 -0
- package/src/components/CompareForm.vue +18 -146
- package/src/components/ContentMenu.vue +44 -8
- package/src/components/FloatingBox.vue +84 -9
- package/src/components/ScrollBar.vue +0 -67
- package/src/components/ToolButton.vue +2 -2
- package/src/components/ViewForm.vue +55 -0
- package/src/editorProps.ts +30 -0
- package/src/fields/Code.vue +10 -2
- package/src/fields/CodeLink.vue +2 -5
- package/src/fields/CodeSelect.vue +54 -40
- package/src/fields/CodeSelectCol.vue +8 -1
- package/src/fields/CondOpSelect.vue +2 -24
- package/src/fields/DataSourceFieldSelect/FieldSelect.vue +16 -2
- package/src/fields/DataSourceFieldSelect/Index.vue +14 -5
- package/src/fields/DataSourceFields.vue +42 -8
- package/src/fields/DataSourceInput.vue +10 -28
- package/src/fields/DataSourceMethodSelect.vue +9 -4
- package/src/fields/DataSourceMethods.vue +42 -21
- package/src/fields/DataSourceMocks.vue +3 -0
- package/src/fields/DisplayConds.vue +18 -1
- package/src/fields/EventSelect.vue +145 -161
- package/src/fields/StyleSetter/Index.vue +3 -12
- package/src/fields/StyleSetter/components/Border.vue +15 -6
- package/src/fields/StyleSetter/icons/align-items/Center.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/FlexEnd.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/FlexStart.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/SpaceAround.vue +34 -0
- package/src/fields/StyleSetter/icons/align-items/SpaceBetween.vue +34 -0
- package/src/fields/StyleSetter/icons/align-items/index.ts +5 -0
- package/src/fields/StyleSetter/icons/background-repeat/NoRepeat.vue +20 -4
- package/src/fields/StyleSetter/icons/background-repeat/Repeat.vue +10 -28
- package/src/fields/StyleSetter/icons/background-repeat/RepeatX.vue +4 -5
- package/src/fields/StyleSetter/icons/background-repeat/RepeatY.vue +4 -5
- package/src/fields/StyleSetter/icons/flex-direction/Column.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/ColumnReverse.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/Row.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/RowReverse.vue +4 -3
- package/src/fields/StyleSetter/icons/justify-content/Center.vue +5 -2
- package/src/fields/StyleSetter/icons/justify-content/FlexEnd.vue +15 -2
- package/src/fields/StyleSetter/icons/justify-content/FlexStart.vue +15 -2
- package/src/fields/StyleSetter/icons/justify-content/SpaceAround.vue +28 -3
- package/src/fields/StyleSetter/icons/justify-content/SpaceBetween.vue +28 -2
- package/src/fields/StyleSetter/pro/Background.vue +99 -55
- package/src/fields/StyleSetter/pro/Border.vue +9 -11
- package/src/fields/StyleSetter/pro/Font.vue +66 -64
- package/src/fields/StyleSetter/pro/Layout.vue +211 -139
- package/src/fields/StyleSetter/pro/Position.vue +69 -67
- package/src/fields/StyleSetter/pro/Transform.vue +23 -25
- package/src/fields/UISelect.vue +0 -12
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use-code-block-edit.ts +4 -3
- package/src/hooks/use-compare-form.ts +187 -0
- package/src/hooks/use-data-source-edit.ts +2 -2
- package/src/hooks/use-stage.ts +5 -3
- package/src/icons/DatasourceIcon.vue +7 -0
- package/src/index.ts +12 -0
- package/src/initService.ts +26 -16
- package/src/layouts/CodeEditor.vue +34 -11
- package/src/layouts/Framework.vue +15 -8
- package/src/layouts/NavMenu.vue +3 -3
- package/src/layouts/history-list/Bucket.vue +33 -41
- package/src/layouts/history-list/BucketTab.vue +72 -0
- package/src/layouts/history-list/GroupRow.vue +190 -93
- package/src/layouts/history-list/HistoryDiffDialog.vue +169 -90
- package/src/layouts/history-list/HistoryListPanel.vue +191 -95
- package/src/layouts/history-list/InitialRow.vue +38 -8
- package/src/layouts/history-list/PageTab.vue +67 -43
- package/src/layouts/history-list/composables.ts +239 -125
- package/src/layouts/history-list/useHistoryList.ts +60 -0
- package/src/layouts/history-list/useHistoryRevert.ts +425 -0
- package/src/layouts/page-bar/PageBar.vue +4 -2
- package/src/layouts/props-panel/FormPanel.vue +72 -6
- package/src/layouts/props-panel/PropsPanel.vue +62 -18
- package/src/layouts/props-panel/use-style-panel.ts +4 -3
- package/src/layouts/sidebar/ComponentListPanel.vue +10 -6
- package/src/layouts/sidebar/Sidebar.vue +13 -6
- package/src/layouts/sidebar/code-block/CodeBlockList.vue +5 -5
- package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
- package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
- package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +34 -2
- package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +29 -4
- package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
- package/src/layouts/sidebar/layer/LayerMenu.vue +21 -13
- package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
- package/src/layouts/sidebar/layer/LayerNodeTool.vue +7 -4
- package/src/layouts/sidebar/layer/LayerPanel.vue +4 -1
- package/src/layouts/sidebar/layer/use-click.ts +3 -3
- package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
- package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
- package/src/layouts/workspace/viewer/Stage.vue +1 -1
- package/src/layouts/workspace/viewer/ViewerMenu.vue +15 -15
- package/src/plugin.ts +6 -3
- package/src/services/codeBlock.ts +152 -47
- package/src/services/dataSource.ts +120 -41
- package/src/services/dep.ts +292 -47
- package/src/services/editor.ts +820 -224
- package/src/services/history.ts +449 -412
- package/src/services/keybinding.ts +6 -6
- package/src/services/ui.ts +33 -5
- package/src/theme/code-block.scss +37 -0
- package/src/theme/common/var.scss +1 -1
- package/src/theme/component-list-panel.scss +2 -2
- package/src/theme/data-source-field.scss +4 -0
- package/src/theme/display-conds.scss +11 -0
- package/src/theme/event.scss +70 -1
- package/src/theme/floating-box.scss +9 -1
- package/src/theme/framework.scss +4 -1
- package/src/theme/history-list-panel.scss +157 -23
- package/src/theme/layer-node-content.scss +14 -0
- package/src/theme/nav-menu.scss +5 -1
- package/src/theme/page-bar.scss +0 -4
- package/src/theme/props-panel.scss +5 -4
- package/src/theme/scroll-bar.scss +64 -0
- package/src/theme/style-setter/border.scss +17 -5
- package/src/theme/theme.scss +4 -0
- package/src/theme/themes/magic-admin/index.scss +214 -0
- package/src/theme/ui-select.scss +9 -0
- package/src/type.ts +668 -124
- package/src/utils/config.ts +9 -1
- package/src/utils/const.ts +3 -2
- package/src/utils/content-menu.ts +20 -11
- package/src/utils/data-source/index.ts +32 -12
- package/src/utils/dep/collect-worker-client.ts +149 -0
- package/src/utils/dep/idle-task.ts +72 -35
- package/src/utils/dep/worker.ts +113 -9
- package/src/utils/editor.ts +166 -60
- package/src/utils/event.ts +224 -0
- package/src/utils/history.ts +286 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/indexed-db.ts +122 -0
- package/src/utils/monaco-editor.ts +27 -0
- package/src/utils/operator.ts +2 -2
- package/src/utils/props.ts +114 -11
- package/src/utils/type-match-rules.ts +684 -0
- package/src/utils/undo-redo.ts +88 -0
- package/types/index.d.ts +1979 -515
- package/dist/es/layouts/history-list/CodeBlockTab.js +0 -5
- package/dist/es/layouts/history-list/CodeBlockTab.vue_vue_type_script_setup_true_lang.js +0 -62
- package/dist/es/layouts/history-list/DataSourceTab.js +0 -5
- package/dist/es/layouts/history-list/DataSourceTab.vue_vue_type_script_setup_true_lang.js +0 -62
- package/src/layouts/history-list/CodeBlockTab.vue +0 -61
- package/src/layouts/history-list/DataSourceTab.vue +0 -61
|
@@ -13,12 +13,14 @@ import storageService, { Protocol } from '@editor/services/storage';
|
|
|
13
13
|
import type {
|
|
14
14
|
DataSourceStepValue,
|
|
15
15
|
DatasourceTypeOption,
|
|
16
|
+
DslOpWithHistoryIdsResult,
|
|
16
17
|
HistoryOpOptions,
|
|
17
18
|
HistoryOpOptionsWithChangeRecords,
|
|
18
19
|
SyncHookPlugin,
|
|
19
20
|
} from '@editor/type';
|
|
20
21
|
import { getFormConfig, getFormValue } from '@editor/utils/data-source';
|
|
21
22
|
import { COPY_DS_STORAGE_KEY } from '@editor/utils/editor';
|
|
23
|
+
import { createStackStep, describeRevertStep, getLastPushedHistoryIds } from '@editor/utils/history';
|
|
22
24
|
|
|
23
25
|
import BaseService from './BaseService';
|
|
24
26
|
|
|
@@ -54,19 +56,6 @@ const canUsePluginMethods = {
|
|
|
54
56
|
|
|
55
57
|
type SyncMethodName = Writable<(typeof canUsePluginMethods)['sync']>;
|
|
56
58
|
|
|
57
|
-
/**
|
|
58
|
-
* 「回滚」生成的新 step 简短描述。
|
|
59
|
-
* 仅在 service 层使用,避免依赖 UI 层 composables。
|
|
60
|
-
*/
|
|
61
|
-
const describeRevertDataSourceStep = (step: DataSourceStepValue): string => {
|
|
62
|
-
const { oldSchema, newSchema, changeRecords, id } = step;
|
|
63
|
-
if (oldSchema === null && newSchema) return `撤回新增 ${newSchema.title || newSchema.id || id}`;
|
|
64
|
-
if (oldSchema && newSchema === null) return `还原已删除的 ${oldSchema.title || oldSchema.id || id}`;
|
|
65
|
-
const title = newSchema?.title || oldSchema?.title || `${id}`;
|
|
66
|
-
const propPath = changeRecords?.[0]?.propPath;
|
|
67
|
-
return propPath ? `还原 ${title} · ${propPath}` : `还原 ${title}`;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
59
|
class DataSource extends BaseService {
|
|
71
60
|
private state = reactive<State>({
|
|
72
61
|
datasourceTypeList: [],
|
|
@@ -78,6 +67,13 @@ class DataSource extends BaseService {
|
|
|
78
67
|
methods: {},
|
|
79
68
|
});
|
|
80
69
|
|
|
70
|
+
/**
|
|
71
|
+
* 最近一次写入历史栈的数据源历史记录 uuid。
|
|
72
|
+
* 供 *AndGetHistoryId 系列方法在调用 add / update / remove 后取回本次产生的历史记录 id;
|
|
73
|
+
* 普通方法不读取它,调用前由 *AndGetHistoryId 重置为 null。
|
|
74
|
+
*/
|
|
75
|
+
private lastPushedHistoryId: string | null = null;
|
|
76
|
+
|
|
81
77
|
constructor() {
|
|
82
78
|
super(canUsePluginMethods.sync.map((methodName) => ({ name: methodName, isAsync: false })));
|
|
83
79
|
}
|
|
@@ -129,7 +125,10 @@ class DataSource extends BaseService {
|
|
|
129
125
|
* @param options.doNotPushHistory 是否不写入历史记录(默认 false)
|
|
130
126
|
* @param options.historyDescription 入栈时附带的人类可读描述,用于历史面板展示
|
|
131
127
|
*/
|
|
132
|
-
public add(
|
|
128
|
+
public add(
|
|
129
|
+
config: DataSourceSchema,
|
|
130
|
+
{ doNotPushHistory = false, historyDescription, historySource }: HistoryOpOptions = {},
|
|
131
|
+
) {
|
|
133
132
|
const newConfig = {
|
|
134
133
|
...config,
|
|
135
134
|
id: config.id && !this.getDataSourceById(config.id) ? config.id : this.createId(),
|
|
@@ -138,10 +137,17 @@ class DataSource extends BaseService {
|
|
|
138
137
|
this.get('dataSources').push(newConfig);
|
|
139
138
|
|
|
140
139
|
if (!doNotPushHistory) {
|
|
141
|
-
|
|
140
|
+
const step = createStackStep<DataSourceSchema, DataSourceStepValue>(newConfig.id, {
|
|
141
|
+
oldValue: null,
|
|
142
|
+
newValue: newConfig,
|
|
143
|
+
historyDescription,
|
|
144
|
+
source: historySource,
|
|
145
|
+
});
|
|
146
|
+
this.lastPushedHistoryId = (step ? historyService.push('dataSource', step, newConfig.id) : null)?.uuid ?? null;
|
|
142
147
|
}
|
|
143
148
|
|
|
144
149
|
this.emit('add', newConfig);
|
|
150
|
+
this.emit('change', this.get('dataSources'));
|
|
145
151
|
|
|
146
152
|
return newConfig;
|
|
147
153
|
}
|
|
@@ -156,7 +162,12 @@ class DataSource extends BaseService {
|
|
|
156
162
|
*/
|
|
157
163
|
public update(
|
|
158
164
|
config: DataSourceSchema,
|
|
159
|
-
{
|
|
165
|
+
{
|
|
166
|
+
changeRecords = [],
|
|
167
|
+
doNotPushHistory = false,
|
|
168
|
+
historyDescription,
|
|
169
|
+
historySource,
|
|
170
|
+
}: HistoryOpOptionsWithChangeRecords = {},
|
|
160
171
|
) {
|
|
161
172
|
const dataSources = this.get('dataSources');
|
|
162
173
|
|
|
@@ -168,18 +179,21 @@ class DataSource extends BaseService {
|
|
|
168
179
|
dataSources[index] = newConfig;
|
|
169
180
|
|
|
170
181
|
if (!doNotPushHistory) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
182
|
+
const step = createStackStep<DataSourceSchema, DataSourceStepValue>(newConfig.id, {
|
|
183
|
+
oldValue: oldConfig ? cloneDeep(oldConfig) : null,
|
|
184
|
+
newValue: newConfig,
|
|
174
185
|
changeRecords,
|
|
175
186
|
historyDescription,
|
|
187
|
+
source: historySource,
|
|
176
188
|
});
|
|
189
|
+
this.lastPushedHistoryId = (step ? historyService.push('dataSource', step, newConfig.id) : null)?.uuid ?? null;
|
|
177
190
|
}
|
|
178
191
|
|
|
179
192
|
this.emit('update', newConfig, {
|
|
180
193
|
oldConfig,
|
|
181
194
|
changeRecords,
|
|
182
195
|
});
|
|
196
|
+
this.emit('change', this.get('dataSources'));
|
|
183
197
|
|
|
184
198
|
return newConfig;
|
|
185
199
|
}
|
|
@@ -191,19 +205,63 @@ class DataSource extends BaseService {
|
|
|
191
205
|
* @param options.doNotPushHistory 是否不写入历史记录(默认 false)
|
|
192
206
|
* @param options.historyDescription 入栈时附带的人类可读描述,用于历史面板展示
|
|
193
207
|
*/
|
|
194
|
-
public remove(id: string, { doNotPushHistory = false, historyDescription }: HistoryOpOptions = {}) {
|
|
208
|
+
public remove(id: string, { doNotPushHistory = false, historyDescription, historySource }: HistoryOpOptions = {}) {
|
|
195
209
|
const dataSources = this.get('dataSources');
|
|
196
210
|
const index = dataSources.findIndex((ds) => ds.id === id);
|
|
197
211
|
const oldConfig = index !== -1 ? dataSources[index] : null;
|
|
198
212
|
dataSources.splice(index, 1);
|
|
199
213
|
|
|
200
214
|
if (oldConfig && !doNotPushHistory) {
|
|
201
|
-
|
|
215
|
+
const step = createStackStep<DataSourceSchema, DataSourceStepValue>(id, {
|
|
216
|
+
oldValue: cloneDeep(oldConfig),
|
|
217
|
+
newValue: null,
|
|
218
|
+
historyDescription,
|
|
219
|
+
source: historySource,
|
|
220
|
+
});
|
|
221
|
+
this.lastPushedHistoryId = (step ? historyService.push('dataSource', step, id) : null)?.uuid ?? null;
|
|
202
222
|
}
|
|
203
223
|
|
|
204
224
|
this.emit('remove', id);
|
|
225
|
+
this.emit('change', this.get('dataSources'));
|
|
205
226
|
}
|
|
206
227
|
|
|
228
|
+
// #region AndGetHistoryId
|
|
229
|
+
/**
|
|
230
|
+
* 下列 *AndGetHistoryId 方法与对应的 add / update / remove 行为完全一致,
|
|
231
|
+
* 返回值在 {@link DslOpWithHistoryIdsResult} 中同时包含原操作结果与本次写入历史栈的 uuid 列表({@link DataSourceStepValue.uuid}),
|
|
232
|
+
* 可用于精确引用 / 定位该条历史记录(埋点、revert、跨端同步等)。
|
|
233
|
+
*
|
|
234
|
+
* 当本次操作未写入历史(doNotPushHistory 为 true、或无对应记录)时 historyIds 为 `[]`。
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
/** 等价于 {@link add},并额外返回本次写入历史记录的 uuid 列表(未入栈时 historyIds 为 `[]`)。 */
|
|
238
|
+
public addAndGetHistoryId(
|
|
239
|
+
config: DataSourceSchema,
|
|
240
|
+
options: HistoryOpOptions = {},
|
|
241
|
+
): DslOpWithHistoryIdsResult<DataSourceSchema> {
|
|
242
|
+
this.lastPushedHistoryId = null;
|
|
243
|
+
const result = this.add(config, options);
|
|
244
|
+
return { result, historyIds: getLastPushedHistoryIds(this.lastPushedHistoryId) };
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** 等价于 {@link update},并额外返回本次写入历史记录的 uuid 列表(未入栈时 historyIds 为 `[]`)。 */
|
|
248
|
+
public updateAndGetHistoryId(
|
|
249
|
+
config: DataSourceSchema,
|
|
250
|
+
options: HistoryOpOptionsWithChangeRecords = {},
|
|
251
|
+
): DslOpWithHistoryIdsResult<DataSourceSchema> {
|
|
252
|
+
this.lastPushedHistoryId = null;
|
|
253
|
+
const result = this.update(config, options);
|
|
254
|
+
return { result, historyIds: getLastPushedHistoryIds(this.lastPushedHistoryId) };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** 等价于 {@link remove},并额外返回本次写入历史记录的 uuid 列表(未入栈时 historyIds 为 `[]`)。 */
|
|
258
|
+
public removeAndGetHistoryId(id: string, options: HistoryOpOptions = {}): DslOpWithHistoryIdsResult<void> {
|
|
259
|
+
this.lastPushedHistoryId = null;
|
|
260
|
+
this.remove(id, options);
|
|
261
|
+
return { result: undefined, historyIds: getLastPushedHistoryIds(this.lastPushedHistoryId) };
|
|
262
|
+
}
|
|
263
|
+
// #endregion AndGetHistoryId
|
|
264
|
+
|
|
207
265
|
/**
|
|
208
266
|
* 撤销指定数据源的最近一次变更。
|
|
209
267
|
*
|
|
@@ -215,7 +273,7 @@ class DataSource extends BaseService {
|
|
|
215
273
|
* @returns 撤销的 step;栈不存在或已无可撤销时返回 null
|
|
216
274
|
*/
|
|
217
275
|
public undo(id: Id) {
|
|
218
|
-
const step = historyService.
|
|
276
|
+
const step = historyService.undo('dataSource', id);
|
|
219
277
|
if (!step) return null;
|
|
220
278
|
this.applyHistoryStep(step, true);
|
|
221
279
|
return step;
|
|
@@ -227,7 +285,7 @@ class DataSource extends BaseService {
|
|
|
227
285
|
* @returns 重做的 step;栈不存在或已无可重做时返回 null
|
|
228
286
|
*/
|
|
229
287
|
public redo(id: Id) {
|
|
230
|
-
const step = historyService.
|
|
288
|
+
const step = historyService.redo('dataSource', id);
|
|
231
289
|
if (!step) return null;
|
|
232
290
|
this.applyHistoryStep(step, false);
|
|
233
291
|
return step;
|
|
@@ -235,12 +293,12 @@ class DataSource extends BaseService {
|
|
|
235
293
|
|
|
236
294
|
/** 是否可对指定数据源撤销。 */
|
|
237
295
|
public canUndo(id: Id): boolean {
|
|
238
|
-
return historyService.
|
|
296
|
+
return historyService.canUndo('dataSource', id);
|
|
239
297
|
}
|
|
240
298
|
|
|
241
299
|
/** 是否可对指定数据源重做。 */
|
|
242
300
|
public canRedo(id: Id): boolean {
|
|
243
|
-
return historyService.
|
|
301
|
+
return historyService.canRedo('dataSource', id);
|
|
244
302
|
}
|
|
245
303
|
|
|
246
304
|
/**
|
|
@@ -251,7 +309,7 @@ class DataSource extends BaseService {
|
|
|
251
309
|
* @returns 实际移动到的最终游标位置
|
|
252
310
|
*/
|
|
253
311
|
public goto(id: Id, targetCursor: number): number {
|
|
254
|
-
let cursor = historyService.
|
|
312
|
+
let cursor = historyService.getCursor('dataSource', id);
|
|
255
313
|
const target = Math.max(0, targetCursor);
|
|
256
314
|
while (cursor > target) {
|
|
257
315
|
if (!this.undo(id)) break;
|
|
@@ -275,13 +333,31 @@ class DataSource extends BaseService {
|
|
|
275
333
|
* @returns 反向后产生的新 step;目标不存在 / 未应用时返回 null
|
|
276
334
|
*/
|
|
277
335
|
public revert(id: Id, index: number): DataSourceStepValue | null {
|
|
278
|
-
const list = historyService.
|
|
336
|
+
const list = historyService.getStepList('dataSource', id);
|
|
279
337
|
const entry = list[index];
|
|
280
338
|
if (!entry?.applied) return null;
|
|
281
|
-
|
|
339
|
+
// 更新类步骤(前后 schema 都存在)必须带 changeRecords 才支持回滚,否则只能整 schema 替换,会冲掉后续无关变更。
|
|
340
|
+
const { oldSchema, newSchema, changeRecords } = entry.step.diff?.[0] ?? {};
|
|
341
|
+
if (oldSchema && newSchema && !changeRecords?.length) return null;
|
|
342
|
+
const description = `回滚 #${index + 1}: ${describeRevertStep<DataSourceSchema>(entry.step.data.id, entry.step.diff?.[0], (s) => s.title)}`;
|
|
282
343
|
return this.applyRevertStep(entry.step, description);
|
|
283
344
|
}
|
|
284
345
|
|
|
346
|
+
/**
|
|
347
|
+
* 通过历史记录 uuid 回滚数据源历史步骤,语义同 {@link revert},
|
|
348
|
+
* 仅无需调用方再传 dataSourceId 与 index:内部会按 uuid 在全部数据源栈中定位对应步骤后再回滚。
|
|
349
|
+
* 按数组顺序依次回滚,返回与入参同序的结果列表(某项失败时为 `null`)。
|
|
350
|
+
*
|
|
351
|
+
* @param uuids 目标历史记录的 uuid 列表,通常由 {@link addAndGetHistoryId} 等方法返回的 `historyIds`
|
|
352
|
+
*/
|
|
353
|
+
public revertById(uuids: string[]): (DataSourceStepValue | null)[] {
|
|
354
|
+
return uuids.map((uuid) => {
|
|
355
|
+
const location = historyService.findStepLocationByUuid('dataSource', uuid);
|
|
356
|
+
if (!location) return null;
|
|
357
|
+
return this.revert(location.id, location.index);
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
|
|
285
361
|
public createId(): string {
|
|
286
362
|
return `ds_${guid()}`;
|
|
287
363
|
}
|
|
@@ -362,18 +438,19 @@ class DataSource extends BaseService {
|
|
|
362
438
|
* 同构,差异仅在于走对应的公共 add / update / remove 而不是带 doNotPushHistory 的版本。
|
|
363
439
|
*/
|
|
364
440
|
private applyRevertStep(step: DataSourceStepValue, historyDescription: string): DataSourceStepValue | null {
|
|
365
|
-
const { id
|
|
441
|
+
const { id } = step.data;
|
|
442
|
+
const { oldSchema, newSchema, changeRecords } = step.diff?.[0] ?? {};
|
|
366
443
|
|
|
367
444
|
// 原本是新增 → revert 即删除
|
|
368
|
-
if (oldSchema
|
|
369
|
-
this.remove(`${id}`, { historyDescription });
|
|
370
|
-
return historyService.
|
|
445
|
+
if (!oldSchema && newSchema) {
|
|
446
|
+
this.remove(`${id}`, { historyDescription, historySource: 'rollback' });
|
|
447
|
+
return historyService.getStepList('dataSource', id).slice(-1)[0]?.step ?? null;
|
|
371
448
|
}
|
|
372
449
|
|
|
373
450
|
// 原本是删除 → revert 即重新加回
|
|
374
|
-
if (oldSchema && newSchema
|
|
375
|
-
this.add(cloneDeep(oldSchema), { historyDescription });
|
|
376
|
-
return historyService.
|
|
451
|
+
if (oldSchema && !newSchema) {
|
|
452
|
+
this.add(cloneDeep(oldSchema), { historyDescription, historySource: 'rollback' });
|
|
453
|
+
return historyService.getStepList('dataSource', id).slice(-1)[0]?.step ?? null;
|
|
377
454
|
}
|
|
378
455
|
|
|
379
456
|
if (!oldSchema || !newSchema) return null;
|
|
@@ -395,12 +472,13 @@ class DataSource extends BaseService {
|
|
|
395
472
|
this.update(fallbackToFullReplace ? cloneDeep(oldSchema) : patched, {
|
|
396
473
|
changeRecords,
|
|
397
474
|
historyDescription,
|
|
475
|
+
historySource: 'rollback',
|
|
398
476
|
});
|
|
399
|
-
return historyService.
|
|
477
|
+
return historyService.getStepList('dataSource', id).slice(-1)[0]?.step ?? null;
|
|
400
478
|
}
|
|
401
479
|
|
|
402
|
-
this.update(cloneDeep(oldSchema), { historyDescription });
|
|
403
|
-
return historyService.
|
|
480
|
+
this.update(cloneDeep(oldSchema), { historyDescription, historySource: 'rollback' });
|
|
481
|
+
return historyService.getStepList('dataSource', id).slice(-1)[0]?.step ?? null;
|
|
404
482
|
}
|
|
405
483
|
|
|
406
484
|
/**
|
|
@@ -418,10 +496,11 @@ class DataSource extends BaseService {
|
|
|
418
496
|
* @param reverse true=撤销,false=重做
|
|
419
497
|
*/
|
|
420
498
|
private applyHistoryStep(step: DataSourceStepValue, reverse: boolean): void {
|
|
421
|
-
const { id
|
|
499
|
+
const { id } = step.data;
|
|
500
|
+
const { oldSchema, newSchema, changeRecords } = step.diff?.[0] ?? {};
|
|
422
501
|
|
|
423
502
|
// 新增 / 删除:直接 add 或 remove,不走 patch 逻辑
|
|
424
|
-
if (oldSchema
|
|
503
|
+
if (!oldSchema && newSchema) {
|
|
425
504
|
if (reverse) {
|
|
426
505
|
this.remove(`${id}`, { doNotPushHistory: true });
|
|
427
506
|
} else {
|
|
@@ -430,7 +509,7 @@ class DataSource extends BaseService {
|
|
|
430
509
|
return;
|
|
431
510
|
}
|
|
432
511
|
|
|
433
|
-
if (oldSchema && newSchema
|
|
512
|
+
if (oldSchema && !newSchema) {
|
|
434
513
|
if (reverse) {
|
|
435
514
|
this.add(cloneDeep(oldSchema), { doNotPushHistory: true });
|
|
436
515
|
} else {
|