{"version":3,"file":"historyUtil.mjs","sources":["../../../../src/utils/historyUtil.ts"],"sourcesContent":["import { ref } from 'vue-demi';\nimport { elementTypeFormat, MyElement, Panel } from '@myprint/design/types/entity';\nimport { useManualRefHistory } from '@vueuse/core';\nimport { getCurrentPanel, installPanelParentElement } from './elementUtil';\nimport { useAppStoreHook as appStore } from '@myprint/design/stores/app';\nimport { updatePanel } from '@myprint/design/plugins/moveable/moveable';\nimport { parse } from '@myprint/design/utils/utils';\n\nexport enum ActionEnum {\n    INIT = '加载',\n    ADD = '添加<{element}>',\n    RESIZE = '修改<{element}>尺寸',\n    ROTATE = '旋转<{element}>',\n    REMOVE = '删除<{element}>',\n    PASTE = '粘贴<{element}>',\n    CUT = '剪切<{element}>',\n    CLEAR = '清空面板',\n    MOVE = '移动<{element}>',\n    BATCH_MOVE = '移动<多个元素>',\n    UPDATE_STYLE = '修改<{element}>的[{content}]',\n    BATCH_UPDATE_STYLE = '修改<多个元素>的[{content}]',\n}\n\nlet max = 50;\n\nexport interface History {\n    label: string,\n    content: string\n}\n\nexport interface Snapshot {\n    panel?: Panel\n    elementList?: MyElement[]\n    content?: string\n    action: ActionEnum,\n    type?: 'Element' | 'PANEL'\n}\n\nconst historyRecord = ref<History>({} as History);\nconst {\n    undoStack,\n    redoStack,\n    commit,\n    history,\n    undo,\n    redo,\n    clear,\n    canUndo,\n    canRedo\n} = useManualRefHistory(historyRecord, { capacity: max });\n\nfunction init() {\n    record(<Snapshot>{\n        type: 'PANEL',\n        action: ActionEnum.INIT,\n        elementList: appStore().currentElement\n    });\n    clear();\n}\n\nfunction record(snapshot: Snapshot) {\n    let action = snapshot.action as any;\n    let label = '';\n    if (snapshot.elementList) {\n        for (let myElement of snapshot.elementList) {\n            label = label + (myElement.label ? myElement.label : elementTypeFormat[myElement.type]) + ',';\n        }\n        label = label.slice(0, -1);\n    } else {\n        label = '面板';\n    }\n\n    snapshot.panel = getCurrentPanel();\n    if (action == ActionEnum.UPDATE_STYLE) {\n        if (snapshot.elementList != null) {\n            action = action.replace('{element}', label).replace('{content}', snapshot.content);\n        } else {\n            action = action.replace('{element}', label).replace('{content}', snapshot.content);\n        }\n    } else if ([ActionEnum.REMOVE, ActionEnum.ADD, ActionEnum.RESIZE, ActionEnum.ROTATE, ActionEnum.MOVE, ActionEnum.CUT, ActionEnum.PASTE].includes(action)) {\n        action = action.replace('{element}', label);\n    }\n\n    delete snapshot.elementList;\n    delete snapshot.content;\n\n    snapshot.action = action;\n    historyRecord.value = {\n        content: JSON.stringify(snapshot, (key, value) => {\n            if ('parent' == key) return undefined;\n            if ('target' == key) return undefined;\n            if ('nestColumnList' == key) return undefined;\n            return value;\n        }),\n        label: action\n    };\n    commit();\n}\n\nfunction undoPanel() {\n    if (!canUndo.value) {\n        return;\n    }\n    undo();\n    const snapshot = {} as Snapshot;\n    parse(historyRecord.value.content, snapshot);\n    const panel = getCurrentPanel();\n    // panel.elementList = [];\n    panel.elementList = snapshot.panel!.elementList;\n    panel.pageHeader = snapshot.panel!.pageHeader;\n    panel.pageFooter = snapshot.panel!.pageFooter;\n    installPanelParentElement(panel);\n    updatePanel();\n}\n\nfunction redoPanel() {\n    if (!canRedo.value) {\n        return;\n    }\n    const panel = getCurrentPanel();\n    redo();\n    const snapshot = {} as Snapshot;\n    parse(historyRecord.value.content, snapshot);\n    // panel.elementList = [];\n    panel.elementList = snapshot.panel!.elementList;\n    panel.pageHeader = snapshot.panel!.pageHeader;\n    panel.pageFooter = snapshot.panel!.pageFooter;\n    installPanelParentElement(panel);\n    updatePanel();\n}\n\nexport function changeWrapper(val: string | number, title?: string, callback?: (arg: typeof val) => void) {\n    record({\n        elementList: appStore().currentElement,\n        content: title,\n        action: ActionEnum.UPDATE_STYLE\n    } as Snapshot);\n    if (callback) {\n        callback(val);\n    }\n}\n\nexport {\n    init,\n    record,\n    canUndo,\n    canRedo,\n    undoStack,\n    redoStack,\n    undoPanel,\n    redoPanel,\n    redo,\n    history,\n    clear\n};\n"],"names":["ActionEnum","appStore"],"mappings":"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"}