From 5780b1b5f293ee097def4074de1b6103362b89c9 Mon Sep 17 00:00:00 2001 From: yehuozhili <673632758@qq.com> Date: Sun, 24 Apr 2022 00:38:03 +0800 Subject: [PATCH] refactor: storechanger&functioncenter --- .../plugin/formComponents/actionButton.tsx | 10 +- .../src/plugin/functionMap/index.ts | 28 +- .../src/plugin/registComponents/button.tsx | 29 +- .../src/plugin/registComponents/inputCo.tsx | 28 +- .../dooringx-lib/src/components/container.tsx | 2 +- .../src/components/control/control.tsx | 27 +- .../src/components/leftDataPannel.tsx | 3 +- .../src/components/modalRender.tsx | 6 +- .../dooringx-lib/src/components/preview.tsx | 16 +- .../src/components/rightConfig.tsx | 93 ++---- .../src/components/timeLine/timeline.tsx | 4 +- packages/dooringx-lib/src/config/index.tsx | 37 +-- .../src/core/AnimateFactory/index.ts | 23 +- .../defaultFormComponents/modalMask.tsx | 6 +- .../dooringx-lib/src/core/dataCenter/index.ts | 30 +- .../src/core/eventCenter/index.ts | 39 ++- .../src/core/functionCenter/index.ts | 111 ++++++-- .../src/core/store/createModal.ts | 39 +++ packages/dooringx-lib/src/core/store/index.ts | 203 ++++++++++++- .../dooringx-lib/src/core/store/storetype.ts | 6 +- .../src/core/storeChanger/index.ts | 267 ------------------ .../src/core/storeChanger/state.ts | 11 - packages/dooringx-lib/src/core/utils/index.ts | 2 +- .../dooringx-lib/src/core/utils/special.ts | 8 + packages/dooringx-lib/src/hooks/index.ts | 8 +- packages/dooringx-lib/src/index.tsx | 4 +- packages/dooringx-lib/src/locale/en.ts | 3 +- packages/dooringx-lib/src/locale/zh-CN.ts | 3 +- 28 files changed, 498 insertions(+), 548 deletions(-) create mode 100644 packages/dooringx-lib/src/core/store/createModal.ts delete mode 100644 packages/dooringx-lib/src/core/storeChanger/index.ts delete mode 100644 packages/dooringx-lib/src/core/storeChanger/state.ts diff --git a/packages/dooringx-example/src/plugin/formComponents/actionButton.tsx b/packages/dooringx-example/src/plugin/formComponents/actionButton.tsx index 2705fdf..efaacee 100644 --- a/packages/dooringx-example/src/plugin/formComponents/actionButton.tsx +++ b/packages/dooringx-example/src/plugin/formComponents/actionButton.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-07-07 14:46:01 * @LastEditors: yehuozhili - * @LastEditTime: 2021-07-13 11:30:17 + * @LastEditTime: 2022-04-23 18:40:40 * @FilePath: \dooringx\packages\dooringx-example\src\plugin\formComponents\actionButton.tsx */ @@ -39,14 +39,8 @@ function ActionButton(props: ActionButtonProps) { const functionConfig = functionCenter.getConfigMap(); const functionMap = functionCenter.getFunctionMap(); const functionNameMap = functionCenter.getNameMap(); - const isEdit = props.config.getStoreChanger().isEdit(); const dataMap = props.config.getDataCenter().getDataMap(); - let modalMap: Record; - if (isEdit) { - modalMap = props.config.getStoreChanger().getOrigin()?.now.modalMap || {}; - } else { - modalMap = props.config.getStore().getData().modalMap; - } + let modalMap = props.config.getStore().getData().modalMap; const handleInputDataSource = useCallback( ( diff --git a/packages/dooringx-example/src/plugin/functionMap/index.ts b/packages/dooringx-example/src/plugin/functionMap/index.ts index 551f0b4..aacc3de 100644 --- a/packages/dooringx-example/src/plugin/functionMap/index.ts +++ b/packages/dooringx-example/src/plugin/functionMap/index.ts @@ -2,12 +2,37 @@ * @Author: yehuozhili * @Date: 2021-07-07 14:22:51 * @LastEditors: yehuozhili - * @LastEditTime: 2021-08-05 14:53:12 + * @LastEditTime: 2022-04-24 00:11:35 * @FilePath: \dooringx\packages\dooringx-example\src\plugin\functionMap\index.ts */ import { FunctionCenterType } from 'dooringx-lib/dist/core/functionCenter'; export const functionMap: FunctionCenterType = { + sleep: { + fn: (ctx, next, _config, args) => { + const arr = args['_sk']; + let num = parseInt(arr[0]); + if (isNaN(num)) { + next(); + } else { + setTimeout(() => { + next(); + }, arr[0]); + } + }, + config: [ + { + name: '输入数值单位ms', + data: ['input'], + options: { + receive: '_sk', + multi: false, + }, + }, + ], + name: '等待', + componentId: '_inner', + }, 上下文转对象: { fn: (ctx, next, _config, args) => { const arr = args['_sk']; @@ -39,5 +64,6 @@ export const functionMap: FunctionCenterType = { }, ], name: '上下文转对象', + componentId: '_inner', }, }; diff --git a/packages/dooringx-example/src/plugin/registComponents/button.tsx b/packages/dooringx-example/src/plugin/registComponents/button.tsx index 60d82ec..7678442 100644 --- a/packages/dooringx-example/src/plugin/registComponents/button.tsx +++ b/packages/dooringx-example/src/plugin/registComponents/button.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-07-07 14:35:38 * @LastEditors: yehuozhili - * @LastEditTime: 2021-08-05 15:10:31 + * @LastEditTime: 2022-04-24 00:29:46 * @FilePath: \dooringx\packages\dooringx-example\src\plugin\registComponents\button.tsx */ @@ -16,7 +16,7 @@ import { } from 'dooringx-lib'; import { FormMap } from '../formTypes'; import { ComponentRenderConfigProps } from 'dooringx-lib/dist/core/components/componentItem'; - +let s = 0; function ButtonTemp(pr: ComponentRenderConfigProps) { const props = pr.data.props; const eventCenter = useMemo(() => { @@ -35,12 +35,13 @@ function ButtonTemp(pr: ComponentRenderConfigProps) { const [text, setText] = useState(''); const op1 = props.op1; useEffect(() => { - let unregist = () => {}; + let unRegist = () => {}; if (op1) { + console.log('kkk'); const functionCenter = eventCenter.getFunctionCenter(); - unregist = functionCenter.register( - `${pr.data.id}+changeText`, - async (ctx, next, config, args: any, _eventList, iname) => { + unRegist = functionCenter.register({ + id: `${pr.data.id}+changeText`, + fn: async (ctx, next, config, args: any, _eventList, iname) => { const userSelect = iname.data; const ctxVal = changeUserValue( userSelect['改变文本数据源'], @@ -49,11 +50,13 @@ function ButtonTemp(pr: ComponentRenderConfigProps) { config, ctx ); - const text = ctxVal[0]; + s = s++; + const text = ctxVal[0] + s; + setText(text); next(); }, - [ + config: [ { name: '改变文本数据源', data: ['ctx', 'input', 'dataSource'], @@ -63,14 +66,16 @@ function ButtonTemp(pr: ComponentRenderConfigProps) { }, }, ], - `${pr.data.id}+改变文本函数` - ); + name: `${pr.data.id}+改变文本函数`, + componentId: pr.data.id, + }); } return () => { - unregist(); + if (pr.context === 'preview') { + unRegist(); // 必须在预览时注销,否则影响二次点击效果,不在预览注销影响编辑时跨弹窗 + } }; }, [op1]); - return ( + , { - const sign = props.config - .getStoreChanger() - .removeModal(props.config.getStore(), v); + const sign = props.config.getStore().removeModal(v); if (!sign.success && sign.sign === 0) { api.error( replaceLocale( @@ -215,7 +217,7 @@ export function Control(props: PropsWithChildren) { ); })} - {props.config.getStoreChanger().getState().modalEditName === '' && + {!props.config.getStore().isEdit() && Object.keys(props.config.getStore().getData().modalMap).length === 0 && (
{replaceLocale('modal.popup.nomodal', `暂时没有弹窗`, props.config)} @@ -232,9 +234,7 @@ export function Control(props: PropsWithChildren) { .then((values) => { form.resetFields(); const modalName = values.modalName; - const sign = props.config - .getStoreChanger() - .newModalMap(props.config.getStore(), modalName); + const sign = props.config.getStore().newModalMap(modalName); if (!sign.succeess && sign.sign === 0) { api.error( @@ -283,7 +283,6 @@ export function Control(props: PropsWithChildren) { config={props.config} visible={settingVisible} onOk={(v: any) => { - console.log(v); props.config.marklineConfig.isAbsorb = v.absorb; props.config.marklineConfig.indent = v.indent; props.config.scaleState.minValue = v.min; diff --git a/packages/dooringx-lib/src/components/leftDataPannel.tsx b/packages/dooringx-lib/src/components/leftDataPannel.tsx index 01e74b6..16a650a 100644 --- a/packages/dooringx-lib/src/components/leftDataPannel.tsx +++ b/packages/dooringx-lib/src/components/leftDataPannel.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2022-04-09 21:44:55 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-10 15:59:37 + * @LastEditTime: 2022-04-24 00:34:55 * @FilePath: \dooringx\packages\dooringx-lib\src\components\leftDataPannel.tsx */ import { @@ -62,6 +62,7 @@ function LeftDataPannel(props: LeftDataPannelProps) { }, { title: '操作', + align: 'center', render: (_v, record: any) => { return ( diff --git a/packages/dooringx-lib/src/components/modalRender.tsx b/packages/dooringx-lib/src/components/modalRender.tsx index c2eb4d3..d449995 100644 --- a/packages/dooringx-lib/src/components/modalRender.tsx +++ b/packages/dooringx-lib/src/components/modalRender.tsx @@ -17,13 +17,13 @@ export const unmountMap: Map = new Map(); export function ModalRender(props: ModalRenderProps) { //先获取数据 - const storeData: IStoreData = useMemo(() => { + const storeData = useMemo(() => { const z = props.data.modalMap[props.name]; if (z) { const data = deepCopy(z); //需要把第一个mask扔了手动写一个 - data.block.shift(); - return data; + data.shift(); + return { block: data }; } return { block: [] }; }, [props.data.modalMap, props.name]); diff --git a/packages/dooringx-lib/src/components/preview.tsx b/packages/dooringx-lib/src/components/preview.tsx index f26d11c..289a86b 100644 --- a/packages/dooringx-lib/src/components/preview.tsx +++ b/packages/dooringx-lib/src/components/preview.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-03-14 05:40:37 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-06 22:07:33 + * @LastEditTime: 2022-04-23 18:01:55 * @FilePath: \dooringx\packages\dooringx-lib\src\components\preview.tsx */ import Container from './container'; @@ -43,7 +43,7 @@ export interface PreviewProps { } function Preview(props: PreviewProps): ReactElement { - const isEdit = props.config.getStoreChanger().isEdit(); + const isEdit = props.config.getStore().isEdit(); /// 这里需要在渲染组件之前必须把所有config加载完成,否则会导致先运行的函数无法运行 const [loading, setLoading] = useState(true); @@ -53,13 +53,11 @@ function Preview(props: PreviewProps): ReactElement { props.config.createdFn.forEach((v) => v()); setTimeout(() => { // 链接数据 - props.config - .getDataCenter() - .initAddToDataMap(props.config.getStore().getData(), props.config.getStoreChanger()); + props.config.getDataCenter().initAddToDataMap(props.config.getStore().getData()); // 链接事件 props.config .getEventCenter() - .syncEventMap(props.config.getStore().getData(), props.config.getStoreChanger()); + .syncEventMap(props.config.getStore().getData(), props.config.getStore()); // 设置全局 const global = props.config.getStore().getData().globalState; @@ -129,10 +127,12 @@ function Preview(props: PreviewProps): ReactElement { if (isEdit) { // 正常情况不会走这 - const state = props.config.getStoreChanger().getOrigin()!.now; + const store = props.config.getStore(); + const data = store.getData(); + store.changeModaltoNormal(data); return ( <> - + ); } else { diff --git a/packages/dooringx-lib/src/components/rightConfig.tsx b/packages/dooringx-lib/src/components/rightConfig.tsx index aa1cfc3..a4dc316 100644 --- a/packages/dooringx-lib/src/components/rightConfig.tsx +++ b/packages/dooringx-lib/src/components/rightConfig.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-03-14 05:42:13 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-08 01:37:25 + * @LastEditTime: 2022-04-23 18:12:53 * @FilePath: \dooringx\packages\dooringx-lib\src\components\rightConfig.tsx */ import { CreateOptionsRes } from '../core/components/formTypes'; @@ -96,29 +96,21 @@ function RightConfig(props: PropsWithChildren) { return null; }; }, [props.config]); - const initColor = useMemo(() => { - return props.config.getStoreChanger().isEdit() - ? rgba2Obj(props.config.getStoreChanger().getOrigin()?.now.globalState.containerColor) - : rgba2Obj(props.config.getStore().getData().globalState.containerColor); + return rgba2Obj(props.config.getStore().getData().globalState.containerColor); }, [props.config]); const initColor2 = useMemo(() => { - return props.config.getStoreChanger().isEdit() - ? rgba2Obj(props.config.getStoreChanger().getOrigin()?.now.globalState.bodyColor) - : rgba2Obj(props.config.getStore().getData().globalState.bodyColor); + return rgba2Obj(props.config.getStore().getData().globalState.bodyColor); }, [props.config]); const initTitle = useMemo(() => { - const title = props.config.getStoreChanger().isEdit() - ? props.config.getStoreChanger().getOrigin()?.now.globalState.title - : props.config.getStore().getData().globalState.title; - return title; + return props.config.getStore().getData().globalState.title; }, [props.config]); const [title, setTitle] = useState(initTitle); const customGlobal = props.config.getConfig().rightGlobalCustom; - const isEdit = props.config.getStoreChanger().isEdit(); - const modalName = props.config.getStoreChanger().getState().modalEditName; - const originData = props.config.getStoreChanger().getOrigin()?.now; + const isEdit = props.config.getStore().isEdit(); + const data = props.config.getStore().getData(); + const modalName = data.modalEditName; return (
) { onChange={(e) => { const val = e.target.value; setTitle(val); - const isEdit = props.config.getStoreChanger().isEdit(); - if (isEdit) { - const originData: IStoreData = deepcopy( - props.config.getStoreChanger().getOrigin()!.now - ); - originData.globalState.title = val; - props.config.getStoreChanger().updateOrigin(originData); - } else { - const originData = deepcopy(props.config.getStore().getData()); - originData.globalState.title = val; - props.config.getStore().setData(originData); - } + const originData = deepcopy(props.config.getStore().getData()); + originData.globalState.title = val; + props.config.getStore().setData(originData); }} /> @@ -199,18 +182,9 @@ function RightConfig(props: PropsWithChildren) { value={props.config.getStore().getData().container.height} onChange={(e) => { const val = e; - const isEdit = props.config.getStoreChanger().isEdit(); - if (isEdit) { - const originData: IStoreData = deepcopy( - props.config.getStoreChanger().getOrigin()!.now - ); - originData.container.height = val; - props.config.getStoreChanger().updateOrigin(originData); - } else { - const originData = deepcopy(props.config.getStore().getData()); - originData.container.height = val; - props.config.getStore().setData(originData); - } + const originData = deepcopy(props.config.getStore().getData()); + originData.container.height = val; + props.config.getStore().setData(originData); }} /> @@ -223,18 +197,9 @@ function RightConfig(props: PropsWithChildren) { { - const isEdit = props.config.getStoreChanger().isEdit(); - if (isEdit) { - const originData: IStoreData = deepcopy( - props.config.getStoreChanger().getOrigin()!.now - ); - originData.globalState.containerColor = `rgba(${newcolor.r}, ${newcolor.g}, ${newcolor.b}, ${newcolor.a})`; - props.config.getStoreChanger().updateOrigin(originData); - } else { - const originData = deepcopy(props.config.getStore().getData()); - originData.globalState.containerColor = `rgba(${newcolor.r}, ${newcolor.g}, ${newcolor.b}, ${newcolor.a})`; - props.config.getStore().setData(originData); - } + const originData = deepcopy(props.config.getStore().getData()); + originData.globalState.containerColor = `rgba(${newcolor.r}, ${newcolor.g}, ${newcolor.b}, ${newcolor.a})`; + props.config.getStore().setData(originData); }} > @@ -247,18 +212,9 @@ function RightConfig(props: PropsWithChildren) { { - const isEdit = props.config.getStoreChanger().isEdit(); - if (isEdit) { - const originData: IStoreData = deepcopy( - props.config.getStoreChanger().getOrigin()!.now - ); - originData.globalState.bodyColor = `rgba(${newcolor.r}, ${newcolor.g}, ${newcolor.b}, ${newcolor.a})`; - props.config.getStoreChanger().updateOrigin(originData); - } else { - const originData = deepcopy(props.config.getStore().getData()); - originData.globalState.bodyColor = `rgba(${newcolor.r}, ${newcolor.g}, ${newcolor.b}, ${newcolor.a})`; - props.config.getStore().setData(originData); - } + const originData = deepcopy(props.config.getStore().getData()); + originData.globalState.bodyColor = `rgba(${newcolor.r}, ${newcolor.g}, ${newcolor.b}, ${newcolor.a})`; + props.config.getStore().setData(originData); }} > @@ -278,15 +234,12 @@ function RightConfig(props: PropsWithChildren) { { const val = e.target.checked; - const cloneData = deepcopy(originData); - if (cloneData) { - cloneData.modalConfig[modalName] = val; - props.config.getStoreChanger().updateOrigin(cloneData); - props.config.getStore().forceUpdate(); - } + const cloneData = deepcopy(data); + cloneData.modalConfig[modalName] = val; + props.config.getStore().setData(cloneData); }} > diff --git a/packages/dooringx-lib/src/components/timeLine/timeline.tsx b/packages/dooringx-lib/src/components/timeLine/timeline.tsx index e1126d6..8f69321 100644 --- a/packages/dooringx-lib/src/components/timeLine/timeline.tsx +++ b/packages/dooringx-lib/src/components/timeLine/timeline.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-08-09 15:15:25 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-01 13:41:34 + * @LastEditTime: 2022-04-23 18:34:46 * @FilePath: \dooringx\packages\dooringx-lib\src\components\timeLine\timeline.tsx */ import deepcopy from 'deepcopy'; @@ -294,7 +294,7 @@ export function TimeLine(props: TimeLineProps) { const onSortEnd = (sort: SortEnd) => { const { oldIndex, newIndex } = sort; const newblocks: IBlockType[] = arrayMove(data, oldIndex, newIndex); - const isEdit = props.config.getStoreChanger().isEdit(); + const isEdit = props.config.getStore().isEdit(); if (isEdit) { const firstType = newblocks[0].name; if (firstType !== 'modalMask') { diff --git a/packages/dooringx-lib/src/config/index.tsx b/packages/dooringx-lib/src/config/index.tsx index c8c4317..db76676 100644 --- a/packages/dooringx-lib/src/config/index.tsx +++ b/packages/dooringx-lib/src/config/index.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-02-25 21:16:58 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-08 01:37:07 + * @LastEditTime: 2022-04-23 23:03:56 * @FilePath: \dooringx\packages\dooringx-lib\src\config\index.tsx */ import React from 'react'; @@ -28,7 +28,6 @@ import MmodalMask from '../core/components/defaultFormComponents/modalMask'; import CommanderWrapper from '../core/command'; import { focusState } from '../core/focusHandler/state'; import ComponentRegister from '../core/components'; -import { StoreChanger } from '../core/storeChanger'; import Store from '../core/store'; import { VerticalAlignMiddleOutlined } from '@ant-design/icons'; import { wrapperMoveState } from '../components/wrapperMove/event'; @@ -177,6 +176,8 @@ export const defaultStore: IMainStoreData = { customAnimate: [], }, modalConfig: {}, + modalEditName: '', + origin: null, }; export const defaultConfig: InitConfig = { @@ -189,7 +190,7 @@ export const defaultConfig: InitConfig = { modalMask: { component: MmodalMask }, // 这个组件不配置显示 }, initFunctionMap: { - 打开弹窗函数: { + open_modal: { fn: (_ctx, next, config, args) => { const modalName = args['_modal']; const storeData = config.getStore().getData(); @@ -207,8 +208,9 @@ export const defaultConfig: InitConfig = { }, ], name: '打开弹窗函数', + componentId: '_inner', }, - 关闭弹窗函数: { + close_modal: { fn: (_ctx, next, _config, args) => { const modalName = args['_modal']; const fn = unmountMap.get(modalName); @@ -228,6 +230,7 @@ export const defaultConfig: InitConfig = { }, ], name: '关闭弹窗函数', + componentId: '_inner', }, }, initDataCenterMap: {}, @@ -338,7 +341,6 @@ export class UserConfig { public store = new Store(); public componentRegister = new ComponentRegister(); public formRegister = new FormComponentRegister(); - public storeChanger = new StoreChanger(); public animateFactory = new AnimateFactory(); public componentCache = {}; public asyncComponentUrlMap = {} as AsyncCacheComponentType; @@ -427,11 +429,11 @@ export class UserConfig { // 注册data this.dataCenter = new DataCenter(this.initConfig.initDataCenterMap); //数据需要加上store上的 - this.dataCenter.initAddToDataMap(this.store.getData(), this.storeChanger); + this.dataCenter.initAddToDataMap(this.store.getData()); // 修改事件与数据初始 this.eventCenter = new EventCenter({}, this.initConfig.initFunctionMap); // 注册画布事件 - this.eventCenter.syncEventMap(this.store.getData(), this.storeChanger); + this.eventCenter.syncEventMap(this.store.getData(), this.store); } init() { @@ -482,9 +484,6 @@ export class UserConfig { getEventCenter() { return this.eventCenter; } - getStoreChanger() { - return this.storeChanger; - } getAnimateFactory() { return this.animateFactory; } @@ -514,14 +513,7 @@ export class UserConfig { * @memberof UserConfig */ getCurrentData() { - let data: IStoreData; - const isEdit = this.storeChanger.isEdit(); - if (isEdit) { - data = this.storeChanger.getOrigin()!.now; - } else { - data = this.store.getData(); - } - return data; + return this.store.getData(); } /** @@ -679,13 +671,8 @@ export class UserConfig { leftProps: Partial, callback?: Function ) { - let isEdit = this.storeChanger.isEdit(); let storeData = this.store.getData(); let globalState = storeData.globalState; - if (isEdit) { - storeData = this.storeChanger.getOrigin()!.now; - globalState = storeData.globalState; - } if (globalState['script'].includes(src)) { console.error(src + 'scripts have been loaded'); return; @@ -707,11 +694,7 @@ export class UserConfig { // 前面加载会重置store 新增组件需要事件初始化 setTimeout(() => { window[this.SCRIPTGLOBALNAME as any] = undefined as any; - isEdit = this.storeChanger.isEdit(); globalState = this.store.getData().globalState; - if (isEdit) { - globalState = this.storeChanger.getOrigin()!.now.globalState; - } globalState['script'].push(src); storeData.globalState = globalState; this.store.resetToInitData([storeData], true); diff --git a/packages/dooringx-lib/src/core/AnimateFactory/index.ts b/packages/dooringx-lib/src/core/AnimateFactory/index.ts index 9594c01..8615506 100644 --- a/packages/dooringx-lib/src/core/AnimateFactory/index.ts +++ b/packages/dooringx-lib/src/core/AnimateFactory/index.ts @@ -139,22 +139,11 @@ export class AnimateFactory { syncToStore(config: UserConfig) { // 先判断global的位置 const store = config.getStore(); - let data: IStoreData; - const isEdit = config.getStoreChanger().isEdit(); - if (isEdit) { - const origin = config.getStoreChanger().getOrigin()!; - data = origin.data[origin.current]; - } else { - data = store.getData(); - } + let data = store.getData(); const copy: IMainStoreData = deepCopy(data); const originGlobal = copy.globalState as IMainStoreData['globalState']; originGlobal.customAnimate = [...this.customAnimateName]; - if (isEdit) { - config.getStoreChanger().updateOrigin(copy); - } else { - store.setData(copy); - } + store.setData(copy); } /** @@ -166,13 +155,7 @@ export class AnimateFactory { syncStoreToConfig(config: UserConfig) { const store = config.getStore(); let data: IStoreData; - const isEdit = config.getStoreChanger().isEdit(); - if (isEdit) { - const origin = config.getStoreChanger().getOrigin()!; - data = origin.data[origin.current]; - } else { - data = store.getData(); - } + data = store.getData(); const dataAnimate = data.globalState?.customAnimate; this.customAnimateName = [...dataAnimate]; } diff --git a/packages/dooringx-lib/src/core/components/defaultFormComponents/modalMask.tsx b/packages/dooringx-lib/src/core/components/defaultFormComponents/modalMask.tsx index eefbdc1..5a8f02f 100644 --- a/packages/dooringx-lib/src/core/components/defaultFormComponents/modalMask.tsx +++ b/packages/dooringx-lib/src/core/components/defaultFormComponents/modalMask.tsx @@ -2,8 +2,8 @@ * @Author: yehuozhili * @Date: 2021-04-04 20:35:11 * @LastEditors: yehuozhili - * @LastEditTime: 2021-07-05 23:55:53 - * @FilePath: \DooringV2\packages\dooring-v2-lib\src\core\components\defaultFormComponents\modalMask.tsx + * @LastEditTime: 2022-04-23 18:36:23 + * @FilePath: \dooringx\packages\dooringx-lib\src\core\components\defaultFormComponents\modalMask.tsx */ import { SaveOutlined } from '@ant-design/icons'; import { Button } from 'antd'; @@ -45,7 +45,7 @@ const MmodalMask = new ComponentItemFactory( style={{ position: 'absolute', right: '10px', top: '10px' }} icon={} onClick={() => { - config.getStoreChanger().closeModal(config.getStore()); + config.getStore().closeModal(); }} > )} diff --git a/packages/dooringx-lib/src/core/dataCenter/index.ts b/packages/dooringx-lib/src/core/dataCenter/index.ts index f90524e..de4ce93 100644 --- a/packages/dooringx-lib/src/core/dataCenter/index.ts +++ b/packages/dooringx-lib/src/core/dataCenter/index.ts @@ -2,13 +2,12 @@ * @Author: yehuozhili * @Date: 2021-04-13 11:20:55 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-10 01:02:03 + * @LastEditTime: 2022-04-23 17:54:22 * @FilePath: \dooringx\packages\dooringx-lib\src\core\dataCenter\index.ts */ import UserConfig from '../../config'; import { IStoreData } from '../store/storetype'; -import { StoreChanger } from '../storeChanger'; /** * @@ -56,19 +55,9 @@ export class DataCenter { */ staticSetToMap(data: Record, config: UserConfig) { this.dataMap = data; - const storeChanger = config.getStoreChanger(); const store = config.getStore(); const storeCurrentData = store.getData(); - const sign = storeChanger.isEdit(); - if (sign) { - const originData = storeChanger.getOrigin(); - if (originData) { - const currentData = originData.now; - currentData.dataSource = data; - } - } else { - storeCurrentData.dataSource = data; - } + storeCurrentData.dataSource = data; } /** @@ -77,19 +66,8 @@ export class DataCenter { * @param {IStoreData} data * @memberof DataCenter */ - initAddToDataMap(data: IStoreData, storeChanger: StoreChanger) { - const sign = storeChanger.isEdit(); - //这里只能初始触发,一般不会走编辑状态,否则逻辑可能会有问题 - if (sign) { - // 编辑状态收集orgin - const originData = storeChanger.getOrigin(); - if (originData) { - const currentData = originData.data[originData.current]; - this.dataMap = currentData.dataSource; - } - } else { - this.dataMap = data.dataSource; - } + initAddToDataMap(data: IStoreData) { + this.dataMap = data.dataSource; } /** diff --git a/packages/dooringx-lib/src/core/eventCenter/index.ts b/packages/dooringx-lib/src/core/eventCenter/index.ts index 058f1a9..c11b6b1 100644 --- a/packages/dooringx-lib/src/core/eventCenter/index.ts +++ b/packages/dooringx-lib/src/core/eventCenter/index.ts @@ -2,14 +2,14 @@ * @Author: yehuozhili * @Date: 2021-04-06 19:33:17 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-06 17:23:54 + * @LastEditTime: 2022-04-24 00:18:18 * @FilePath: \dooringx\packages\dooringx-lib\src\core\eventCenter\index.ts */ import UserConfig from '../../config'; import { FunctionCenter, FunctionCenterType } from '../functionCenter'; import { FunctionDataType } from '../functionCenter/config'; +import Store from '../store'; import { IStoreData } from '../store/storetype'; -import { StoreChanger } from '../storeChanger'; import { EventQuene } from './eventQuene'; // 每个组件制作时可以抛出多个事件,事件名为id+自定义name, @@ -64,35 +64,32 @@ export class EventCenter { * @param {IStoreData} data * @memberof EventCenter */ - syncEventMap(data: IStoreData, storeChanger: StoreChanger) { - // 需要判断是否在弹窗状态。如果在弹窗状态,数据以storeChanger为准,否则就以store为准 - const sign = storeChanger.isEdit(); + syncEventMap(data: IStoreData, store: Store) { + const sign = store.isEdit(); this.eventMap = {}; if (sign) { - const originData = storeChanger.getOrigin(); - if (originData) { - const currentData = originData.data[originData.current]; - // 收集源block数据 - currentData.block.forEach((v) => { - this.eventMap = Object.assign(this.eventMap, v.eventMap); - }); - //收集源modal数据 - Object.keys(currentData.modalMap).forEach((v) => { - currentData.modalMap[v].block.forEach((k) => { - this.eventMap = Object.assign(this.eventMap, k.eventMap); - }); - }); - //收集当前modal数据 - data.block.forEach((v) => { + // 收集源block数据 + if (data.origin) { + data.origin.forEach((v) => { this.eventMap = Object.assign(this.eventMap, v.eventMap); }); } + //收集源modal数据 + Object.keys(data.modalMap).forEach((v) => { + data.modalMap[v].forEach((k) => { + this.eventMap = Object.assign(this.eventMap, k.eventMap); + }); + }); + //收集当前modal数据 + data.block.forEach((v) => { + this.eventMap = Object.assign(this.eventMap, v.eventMap); + }); } else { data.block.forEach((v) => { this.eventMap = Object.assign(this.eventMap, v.eventMap); }); Object.keys(data.modalMap).forEach((v) => { - data.modalMap[v].block.forEach((k) => { + data.modalMap[v].forEach((k) => { this.eventMap = Object.assign(this.eventMap, k.eventMap); }); }); diff --git a/packages/dooringx-lib/src/core/functionCenter/index.ts b/packages/dooringx-lib/src/core/functionCenter/index.ts index a831fd7..cfc76c1 100644 --- a/packages/dooringx-lib/src/core/functionCenter/index.ts +++ b/packages/dooringx-lib/src/core/functionCenter/index.ts @@ -2,12 +2,14 @@ * @Author: yehuozhili * @Date: 2021-04-08 19:59:01 * @LastEditors: yehuozhili - * @LastEditTime: 2021-07-09 16:23:02 - * @FilePath: \DooringV2\packages\dooringx-lib\src\core\functionCenter\index.ts + * @LastEditTime: 2022-04-24 00:14:25 + * @FilePath: \dooringx\packages\dooringx-lib\src\core\functionCenter\index.ts */ import UserConfig from '../../config'; import { EventCenterMapItem, EventCenterUserSelect } from '../eventCenter'; +import Store from '../store'; +import { specialFnList } from '../utils/special'; import { FunctionConfigType } from './config'; /** @@ -32,6 +34,7 @@ export type FunctionCenterValue = { fn: FunctionCenterFunction; config: FunctionConfigType; name: string; + componentId: string; }; export type FunctionCenterType = Record; @@ -39,6 +42,7 @@ export type FunctionCenterType = Record; /** * * 初始化时可以加载初始已配好的函数 + * {} * @export * @class FunctionCenter */ @@ -52,6 +56,7 @@ export class FunctionCenter { public configMap: Record = {}; public funcitonMap: Record = {}; public nameMap: Record = {}; // id对名字 + public componentIdMap: Record> = {}; // 组件id对函数id constructor(public initConfig: FunctionCenterType = {}) { this.init(initConfig); } @@ -76,12 +81,25 @@ export class FunctionCenter { prev[next] = initConfig[next].name; return prev; }, {}); + this.componentIdMap = Object.keys(initConfig).reduce>>( + (prev, next) => { + const cid = initConfig[next].componentId; + if (prev[cid]) { + prev[cid].add(next); + } else { + prev[cid] = new Set([next]); + } + return prev; + }, + {} + ); } reset() { this.funcitonMap = {}; this.configMap = {}; this.nameMap = {}; + this.componentIdMap = {}; } getFunctionMap() { @@ -117,31 +135,34 @@ export class FunctionCenter { /** * - * 删除的组件需要删除动态注册的函数 - * @param {string} name - * @memberof FunctionCenter - */ - deleteFunc(name: string) { - delete this.funcitonMap[name]; - delete this.configMap[name]; - delete this.nameMap[name]; - } - - /** * - *注册函数,同id覆盖,返回删除函数 - * @param {string} id 唯一值 注意!每个组件都要不一样,所以需要带着每个组件的id,这样也方便区分是哪个组件抛出的函数!! - * @param {FunctionCenterFunction} fn 函数体 - * @param {FunctionConfigType} config 配置项 - * @param {string} name 显示名 - * @return {*} + * @param {{ + * id: string;唯一值 注意!每个组件都要不一样,所以需要带着每个组件的id,这样也方便区分是哪个组件抛出的函数!! + * fn: FunctionCenterFunction;函数体 + * config: FunctionConfigType;配置项 + * name: string;显示名 + * componentId: string;所属组件id名用于卸载函数 + * }} obj + * @returns * @memberof FunctionCenter */ - register(id: string, fn: FunctionCenterFunction, config: FunctionConfigType, name: string) { + register(obj: { + id: string; + fn: FunctionCenterFunction; + config: FunctionConfigType; + name: string; + componentId: string; + }) { + const { id, fn, config, name, componentId } = obj; // 注册时,需要通知asyncmap已经拿到 this.funcitonMap[id] = fn; this.configMap[id] = config; this.nameMap[id] = name; + if (this.componentIdMap[componentId]) { + this.componentIdMap[componentId].add(id); + } else { + this.componentIdMap[componentId] = new Set([id]); + } if (this.asyncMap[id]) { this.asyncMap[id](); } @@ -149,12 +170,60 @@ export class FunctionCenter { delete this.funcitonMap[id]; delete this.configMap[id]; delete this.nameMap[id]; + this.componentIdMap[componentId].delete(id); }; } /** * - * 获取函数,包含异步获取函数 + * 画布更新时检查所有组件,不存在的组件和其挂载函数则删除,剔除_inner下的 + * @memberof FunctionCenter + */ + syncFunction(store: Store) { + const special = specialFnList; + const allId: string[] = []; + const data = store.getData(); + // modalmap上 + const map = data.modalMap; + Object.keys(map).forEach((v) => { + map[v].forEach((k) => { + allId.push(k.id); + }); + }); + // block上 + data.block.forEach((v) => { + allId.push(v.id); + }); + if (store.isEdit()) { + // 额外origin上 + if (data.origin) + data.origin?.forEach((v) => { + allId.push(v.id); + }); + } + const needDelete: string[] = []; + Object.keys(this.componentIdMap).forEach((v) => { + if (!special.includes(v)) { + if (!allId.includes(v)) { + needDelete.push(v); + } + } + }); + + needDelete.forEach((v) => { + const ids = this.componentIdMap[v]; + ids.forEach((id) => { + delete this.funcitonMap[id]; + delete this.configMap[id]; + delete this.nameMap[id]; + }); + delete this.componentIdMap[v]; + }); + } + + /** + * + * 获取函数,包含异步获取函数 注意某些情况执行顺序 * @param {string} name * @return {*} {Promise} * @memberof FunctionCenter diff --git a/packages/dooringx-lib/src/core/store/createModal.ts b/packages/dooringx-lib/src/core/store/createModal.ts new file mode 100644 index 0000000..9773499 --- /dev/null +++ b/packages/dooringx-lib/src/core/store/createModal.ts @@ -0,0 +1,39 @@ +/* + * @Author: yehuozhili + * @Date: 2022-04-23 17:03:36 + * @LastEditors: yehuozhili + * @LastEditTime: 2022-04-23 17:03:37 + * @FilePath: \dooringx\packages\dooringx-lib\src\core\store\createModal.ts + */ +import { createUid } from '../utils'; +import { IStoreData } from './storetype'; + +export function createDefaultModalBlock(): IStoreData['block'] { + return [ + { + id: createUid('modal-mask'), + name: 'modalMask', + top: 0, + left: 0, + width: '100%', + height: '100%', + zIndex: 0, + props: {}, + resize: true, + focus: false, + canSee: true, + position: 'absolute', + display: 'block', + syncList: [], + canDrag: false, + eventMap: {}, + functionList: [], + animate: [], + fixed: true, + rotate: { + value: 0, + canRotate: false, + }, + }, + ]; +} diff --git a/packages/dooringx-lib/src/core/store/index.ts b/packages/dooringx-lib/src/core/store/index.ts index 9debe72..c79e394 100644 --- a/packages/dooringx-lib/src/core/store/index.ts +++ b/packages/dooringx-lib/src/core/store/index.ts @@ -2,11 +2,12 @@ * @Author: yehuozhili * @Date: 2021-03-14 04:29:09 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-05 17:08:35 + * @LastEditTime: 2022-04-23 18:53:36 * @FilePath: \dooringx\packages\dooringx-lib\src\core\store\index.ts */ -import { IStoreData } from './storetype'; -import { storeChangerState } from '../storeChanger/state'; +import deepcopy from 'deepcopy'; +import { createDefaultModalBlock } from './createModal'; +import { IBlockType, IStoreData } from './storetype'; export const initialData: IStoreData = { container: { @@ -18,6 +19,8 @@ export const initialData: IStoreData = { dataSource: {}, globalState: {}, modalConfig: {}, + origin: null, + modalEditName: '', }; class Store { @@ -43,6 +46,190 @@ class Store { getIndex() { return this.current; } + getOriginBlock() { + if (this.isEdit()) { + return this.getData().origin as IBlockType[]; + } else { + return this.getData().block; + } + } + + /** + * + * 编辑状态转普通 + * @param {IStoreData} data + * @returns + * @memberof Store + */ + changeModaltoNormal(data: IStoreData) { + if (data.modalEditName === '') { + return; + } + const tmp = data.origin || []; + data.modalMap = { ...data.modalMap, [data.modalEditName]: data.block }; + data.block = tmp; + data.modalEditName = ''; + data.origin = null; + return {}; + } + /** + * + * 非编辑转编辑且已有弹窗 + * @param {IStoreData} data + * @returns + * @memberof Store + */ + changeNormalToModal(data: IStoreData, name: string) { + if (data.modalEditName !== '') { + return { + success: false, + sign: 0, + }; + } + const sign2 = this.isInModalMap(name); + if (!sign2) { + return { + success: false, + sign: 1, + param: name, + }; + } + const tmp = data.block || []; + const modalBlock = data.modalMap[name]; + data.block = modalBlock; + data.modalEditName = name; + data.origin = tmp; + return { success: true, sign: -1 }; + } + /** + * + * 非编辑状态新增 + * @param {IStoreData} data + * @returns + * @memberof Store + */ + newModaltoNormal(data: IStoreData, name: string) { + if (data.modalEditName !== '') { + return; + } + const tmp = data.block || []; + const modalBlock = createDefaultModalBlock(); + data.modalMap = { ...data.modalMap, [name]: modalBlock }; + data.block = modalBlock; + data.modalEditName = name; + data.origin = tmp; + } + + /** + * + * 判断是否编辑 + * @returns + * @memberof Store + */ + isEdit() { + if (this.getData().modalEditName !== '') { + return true; + } + return false; + } + + /** + * + * 判断有没有这个弹窗 + * @param {Store} store + * @param {string} name + * @returns + * @memberof Store + */ + isInModalMap(name: string) { + const modalNameList = Object.keys(this.getData().modalMap); + if (modalNameList.includes(name)) { + return true; + } + return false; + } + + /** + * + * 保存现阶段store,将store替换为新modal数据 + */ + newModalMap(name: string) { + const sign = this.isEdit(); + if (sign) { + return { + succeess: false, + sign: 0, + }; + } + //新建modal name不能重名,否则直接报错 + const sign2 = this.isInModalMap(name); + if (sign2) { + return { + succeess: false, + sign: 1, + param: name, + }; + } + const copyData = deepcopy(this.getData()); + this.newModaltoNormal(copyData, name); + this.setData(copyData); + return { + succeess: true, + sign: -1, + }; + } + + /** + * + * 存储modal到主store的map中,切换主store + * @memberof StoreChanger + */ + closeModal() { + const sign = this.isEdit(); + if (!sign) { + return { + success: false, + sign: 0, + }; + } + const data = deepcopy(this.getData()); + this.changeModaltoNormal(data); + this.setData(data); + return { + success: true, + sign: 0, + }; + } + /** + * + * 删除弹窗,不能处于编辑弹窗状态 + * @param {string} name + * @returns + */ + removeModal(name: string) { + const sign = this.isEdit(); + if (sign) { + return { + success: false, + sign: 0, + }; + } + const sign2 = this.isInModalMap(name); + if (!sign2) { + return { + success: false, + sign: 1, + param: name, + }; + } + const cloneData: IStoreData = deepcopy(this.getData()); + delete cloneData.modalMap[name]; + this.setData(cloneData); + return { + success: true, + sign: -1, + }; + } /** * * 重置需要注册事件 @@ -53,9 +240,10 @@ class Store { resetToInitData(initData: IStoreData[], check = false) { this.storeDataList = initData; this.current = 0; + const d = this.getData(); //如果是编辑模式,需要修改 - if (storeChangerState.modalEditName !== '' && check) { - storeChangerState.modalEditName = ''; + if (d.modalEditName !== '' && check) { + this.changeModaltoNormal(d); } this.emit(); } @@ -71,8 +259,9 @@ class Store { this.storeDataList = initData; this.current = current; //如果是编辑模式,需要修改 - if (storeChangerState.modalEditName !== '' && check) { - storeChangerState.modalEditName = ''; + const d = this.getData(); + if (d.modalEditName !== '' && check) { + this.changeModaltoNormal(d); } this.emit(); } diff --git a/packages/dooringx-lib/src/core/store/storetype.ts b/packages/dooringx-lib/src/core/store/storetype.ts index 93190b1..d8eff0f 100644 --- a/packages/dooringx-lib/src/core/store/storetype.ts +++ b/packages/dooringx-lib/src/core/store/storetype.ts @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-03-14 04:29:09 * @LastEditors: yehuozhili - * @LastEditTime: 2021-08-09 11:30:52 + * @LastEditTime: 2022-04-23 17:07:19 * @FilePath: \dooringx\packages\dooringx-lib\src\core\store\storetype.ts */ @@ -23,10 +23,12 @@ export interface IStoreData { height: number; }; block: Array; - modalMap: Record; + modalMap: Record>; dataSource: Record; globalState: Record; modalConfig: Record; + modalEditName: string; + origin: Array | null; } export interface IMainStoreData extends IStoreData { globalState: GlobalState; diff --git a/packages/dooringx-lib/src/core/storeChanger/index.ts b/packages/dooringx-lib/src/core/storeChanger/index.ts deleted file mode 100644 index 640eac3..0000000 --- a/packages/dooringx-lib/src/core/storeChanger/index.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* - * @Author: yehuozhili - * @Date: 2021-04-05 14:55:31 - * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-05 17:02:34 - * @FilePath: \dooringx\packages\dooringx-lib\src\core\storeChanger\index.ts - */ - -import Store from '../store'; -import { IStoreData } from '../store/storetype'; -import { createUid, deepCopy } from '../utils'; -import { storeChangerState } from './state'; - -export type StoreChangerMap = Record< - 'ORIGIN', - { - data: Array; - current: number; - now: IStoreData; - } | null ->; - -function createDefaultModalBlock(): IStoreData['block'] { - return [ - { - id: createUid('modal-mask'), - name: 'modalMask', - top: 0, - left: 0, - width: '100%', - height: '100%', - zIndex: 0, - props: {}, - resize: true, - focus: false, - canSee: true, - position: 'absolute', - display: 'block', - syncList: [], - canDrag: false, - eventMap: {}, - functionList: [], - animate: [], - fixed: true, - rotate: { - value: 0, - canRotate: false, - }, - }, - ]; -} - -// 用来存储主store -const ORIGIN = 'ORIGIN'; - -const defaultModalStore: () => IStoreData = () => { - const newblock = createDefaultModalBlock(); - return { - container: { - width: 375, - height: 600, - }, - block: newblock, - modalMap: {}, - dataSource: {}, - globalState: {}, - modalConfig: {}, - }; -}; - -export class StoreChanger { - public map: StoreChangerMap; - constructor() { - this.map = { ORIGIN: null }; - } - - getState() { - return storeChangerState; - } - - getOrigin() { - return this.map[ORIGIN]; - } - - /** - * 判断是否在编辑模式。 - * 一次也没进行编辑时,storeChanger中未存store,所以只能判断去获取。 - * @return {*} - * @memberof StoreChanger - */ - isEdit() { - if (storeChangerState.modalEditName !== '') { - return true; - } - return false; - } - - isInModalMap(store: Store, name: string) { - const modalNameList = Object.keys(store.getData().modalMap); - if (modalNameList.includes(name)) { - return true; - } - return false; - } - - initStoreChanger() { - storeChangerState.modalEditName = ''; - this.map = { ORIGIN: null }; - } - - /** - * - * 更新origin内容,用于编辑模式下更新全局属性 - * 需要判断是否在编辑模式,否则会报错 - * @memberof StoreChanger - */ - updateOrigin(data: IStoreData) { - const origin = this.getOrigin(); - if (origin!.data.length === origin!.current + 1) { - //说明为末尾, - origin!.data.push(data); - } else { - //替换下一个索引 - origin!.data[origin!.current + 1] = data; - } - origin!.now = data; - origin!.current = origin!.current + 1; - } - - /** - * - * 保存现阶段store,将store替换为新modal数据 - * @memberof StoreChanger - */ - newModalMap(store: Store, name: string) { - const sign = this.isEdit(); - if (sign) { - return { - succeess: false, - sign: 0, - }; - } - //新建modal name不能重名,否则直接报错 - const sign2 = this.isInModalMap(store, name); - if (sign2) { - return { - succeess: false, - sign: 1, - param: name, - }; - } - storeChangerState.modalEditName = name; - this.map[ORIGIN] = { - data: store.getStoreList(), - current: store.getIndex(), - now: store.getStoreList()[store.getIndex()], - }; - store.resetToInitData([defaultModalStore()]); - return { - succeess: true, - sign: -1, - }; - } - - /** - * - * 存储modal到主store的map中,切换主store - * @param {Store} store - * @memberof StoreChanger - */ - closeModal(store: Store) { - const sign = this.isEdit(); - if (!sign) { - return { - success: false, - sign: 0, - }; - } - const main = this.map[ORIGIN]; - const tmpModalData = deepCopy(store.getData()); - if (main) { - store.resetToCustomData(main.data, main.current); - const cloneData: IStoreData = deepCopy(store.getData()); - cloneData.modalMap[storeChangerState.modalEditName] = tmpModalData; - store.setData(cloneData); - storeChangerState.modalEditName = ''; - return { - success: true, - sign: 0, - }; - } - return { - success: false, - sign: 1, - }; - } - - /** - * - * 在已经保存的map中获取,如果正在编辑别的弹窗,则报错。 - * @param {Store} store store必须为主store - * @param {string} name - * @memberof StoreChanger - */ - updateModal(store: Store, name: string) { - const sign = this.isEdit(); - if (sign) { - return { - success: false, - sign: 0, - }; - } - const sign2 = this.isInModalMap(store, name); - if (!sign2) { - return { - success: false, - sign: 1, - param: name, - }; - } - storeChangerState.modalEditName = name; - const modalData = store.getData().modalMap[name]; - this.map[ORIGIN] = { - data: store.getStoreList(), - current: store.getIndex(), - now: store.getStoreList()[store.getIndex()], - }; - store.resetToInitData([modalData]); - return { - success: true, - sign: -1, - }; - } - - /** - * - * 删除弹窗,不能处于编辑弹窗状态 - * @param {Store} store - * @param {string} name - * @returns - * @memberof StoreChanger - */ - removeModal(store: Store, name: string) { - const sign = this.isEdit(); - if (sign) { - return { - success: false, - sign: 0, - }; - } - const sign2 = this.isInModalMap(store, name); - if (!sign2) { - return { - success: false, - sign: 1, - param: name, - }; - } - const cloneData: IStoreData = deepCopy(store.getData()); - delete cloneData.modalMap[name]; - store.setData(cloneData); - return { - success: true, - sign: -1, - }; - } -} diff --git a/packages/dooringx-lib/src/core/storeChanger/state.ts b/packages/dooringx-lib/src/core/storeChanger/state.ts deleted file mode 100644 index 0b8f378..0000000 --- a/packages/dooringx-lib/src/core/storeChanger/state.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * @Author: yehuozhili - * @Date: 2021-04-05 15:40:04 - * @LastEditors: yehuozhili - * @LastEditTime: 2021-04-05 15:40:47 - * @FilePath: \dooringv2\src\core\storeChanger\state.ts - */ - -export const storeChangerState = { - modalEditName: '', -}; diff --git a/packages/dooringx-lib/src/core/utils/index.ts b/packages/dooringx-lib/src/core/utils/index.ts index 090bcc5..80fe6c5 100644 --- a/packages/dooringx-lib/src/core/utils/index.ts +++ b/packages/dooringx-lib/src/core/utils/index.ts @@ -8,7 +8,7 @@ import deepCopys from 'deepcopy'; import { FunctionDataMap } from '../functionCenter/config'; import UserConfig from '../../config'; -export function deepCopy(obj: any): T { +export function deepCopy(obj: T): T { return deepCopys(obj); } diff --git a/packages/dooringx-lib/src/core/utils/special.ts b/packages/dooringx-lib/src/core/utils/special.ts index d7bab4d..931aecd 100644 --- a/packages/dooringx-lib/src/core/utils/special.ts +++ b/packages/dooringx-lib/src/core/utils/special.ts @@ -1 +1,9 @@ +/* + * @Author: yehuozhili + * @Date: 2021-07-09 00:05:51 + * @LastEditors: yehuozhili + * @LastEditTime: 2022-04-23 23:01:25 + * @FilePath: \dooringx\packages\dooringx-lib\src\core\utils\special.ts + */ export const specialCoList = ['modalMask']; +export const specialFnList = ['_inner']; diff --git a/packages/dooringx-lib/src/hooks/index.ts b/packages/dooringx-lib/src/hooks/index.ts index 14611ca..c4d0232 100644 --- a/packages/dooringx-lib/src/hooks/index.ts +++ b/packages/dooringx-lib/src/hooks/index.ts @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-03-14 05:35:15 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-04 20:13:58 + * @LastEditTime: 2022-04-23 23:34:15 * @FilePath: \dooringx\packages\dooringx-lib\src\hooks\index.ts */ import { useEffect, useMemo, useState } from 'react'; @@ -23,7 +23,8 @@ export function useStoreState( const unRegister = store.subscribe(() => { const data = store.getData(); setState(data); - config.getEventCenter().syncEventMap(store.getData(), config.getStoreChanger()); + config.getEventCenter().syncEventMap(store.getData(), config.getStore()); + config.getEventCenter().getFunctionCenter().syncFunction(store); extraFn(); }); store.setForceUpdate(() => forceUpdate((v) => v + 1)); @@ -124,11 +125,8 @@ export function useIframePostMessage( const data = { store: store.getData(), scaleState: config.getScaleState(), - origin: config.getStoreChanger().getOrigin(), - isEdit: config.getStoreChanger().isEdit(), wrapperState: config.getWrapperMove().iframe, }; - postMessage(data, origin, target); }; }, [config, origin, store, target]); diff --git a/packages/dooringx-lib/src/index.tsx b/packages/dooringx-lib/src/index.tsx index 7c63042..33574aa 100644 --- a/packages/dooringx-lib/src/index.tsx +++ b/packages/dooringx-lib/src/index.tsx @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-03-14 04:22:18 * @LastEditors: yehuozhili - * @LastEditTime: 2022-04-09 21:49:01 + * @LastEditTime: 2022-04-23 23:02:04 * @FilePath: \dooringx\packages\dooringx-lib\src\index.tsx */ @@ -58,7 +58,7 @@ export { defaultStore } from './config'; export { focusState } from './core/focusHandler/state'; //utils export { deepCopy, rgba2Obj, swap, createUid, arrayMove, postMessage } from './core/utils'; -export { specialCoList } from './core/utils/special'; +export { specialCoList, specialFnList } from './core/utils/special'; // iframe export { default as IframeContainer } from './components/iframeContainer'; export { default as IframeContainerWrapper } from './components/IframeWrapperMove'; diff --git a/packages/dooringx-lib/src/locale/en.ts b/packages/dooringx-lib/src/locale/en.ts index 9041e92..c68f042 100644 --- a/packages/dooringx-lib/src/locale/en.ts +++ b/packages/dooringx-lib/src/locale/en.ts @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-08-27 10:20:23 * @LastEditors: yehuozhili - * @LastEditTime: 2022-01-21 10:56:25 + * @LastEditTime: 2022-04-23 18:58:39 * @FilePath: \dooringx\packages\dooringx-lib\src\locale\en.ts */ @@ -30,6 +30,7 @@ export const en: typeof zhCN = { 'modal.popup.name': 'Please enter modal name', 'modal.name': 'Modal name', 'modal.control.remove': 'Delete click to delete the effect of the modal', + edit: 'Edit', yes: 'Ok', no: 'Cancel', 'right.noprops': 'No properties have been configured', diff --git a/packages/dooringx-lib/src/locale/zh-CN.ts b/packages/dooringx-lib/src/locale/zh-CN.ts index a39d707..5d94160 100644 --- a/packages/dooringx-lib/src/locale/zh-CN.ts +++ b/packages/dooringx-lib/src/locale/zh-CN.ts @@ -2,7 +2,7 @@ * @Author: yehuozhili * @Date: 2021-08-27 10:20:15 * @LastEditors: yehuozhili - * @LastEditTime: 2022-01-21 10:55:56 + * @LastEditTime: 2022-04-23 18:58:26 * @FilePath: \dooringx\packages\dooringx-lib\src\locale\zh-CN.ts */ export const zhCN = { @@ -27,6 +27,7 @@ export const zhCN = { 'modal.popup.name': '请输入弹窗名称', 'modal.name': '弹窗名称', 'modal.control.remove': '取消点击删除弹窗', + edit: '编辑', yes: '确定', no: '取消', 'right.noprops': '还没有配置属性',