From fff587d9eb1d614a0a936146b8c101b6aff8c08e Mon Sep 17 00:00:00 2001 From: roymondchen Date: Wed, 27 Jul 2022 16:44:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(editor):=20=E6=96=B0=E5=A2=9E=E7=BB=84?= =?UTF-8?q?=E4=BB=B6id=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor/src/services/editor.ts | 2 +- packages/editor/src/services/props.ts | 51 ++++++++++++++++--- packages/editor/src/utils/props.ts | 22 -------- .../editor/tests/unit/services/props.spec.ts | 5 ++ packages/editor/tests/unit/utils/form.spec.ts | 6 --- 5 files changed, 51 insertions(+), 35 deletions(-) diff --git a/packages/editor/src/services/editor.ts b/packages/editor/src/services/editor.ts index 51383c36..70584d93 100644 --- a/packages/editor/src/services/editor.ts +++ b/packages/editor/src/services/editor.ts @@ -506,7 +506,7 @@ class Editor extends BaseService { return; } - await propsService.setNewItemId(config, this.get('root')); + config = await propsService.setNewItemId(config, this.get('root')); if (config.style) { config.style = { ...config.style, diff --git a/packages/editor/src/services/props.ts b/packages/editor/src/services/props.ts index c66cc55e..5cf9e114 100644 --- a/packages/editor/src/services/props.ts +++ b/packages/editor/src/services/props.ts @@ -25,7 +25,7 @@ import { NodeType } from '@tmagic/schema'; import { isPop, toLine } from '@tmagic/utils'; import type { PropsState } from '@editor/type'; -import { DEFAULT_CONFIG, fillConfig, getDefaultPropsValue } from '@editor/utils/props'; +import { DEFAULT_CONFIG, fillConfig } from '@editor/utils/props'; import BaseService from './BaseService'; @@ -36,7 +36,15 @@ class Props extends BaseService { }); constructor() { - super(['setPropsConfig', 'getPropsConfig', 'setPropsValue', 'getPropsValue', 'createId', 'setNewItemId']); + super([ + 'setPropsConfig', + 'getPropsConfig', + 'setPropsValue', + 'getPropsValue', + 'createId', + 'setNewItemId', + 'getDefaultPropsValue', + ]); } public setPropsConfigs(configs: Record) { @@ -99,12 +107,20 @@ class Props extends BaseService { return value; } - const data = cloneDeep(defaultValue as any); - - await this.setNewItemId(data); + const [id, defaultPropsValue, data] = await Promise.all([ + this.createId(type), + this.getDefaultPropsValue(type), + this.setNewItemId( + cloneDeep({ + type, + ...defaultValue, + } as any), + ), + ]); return { - ...getDefaultPropsValue(type, await this.createId(type)), + id, + ...defaultPropsValue, ...mergeWith(cloneDeep(this.state.propsValueMap[type] || {}), data), }; } @@ -133,6 +149,29 @@ class Props extends BaseService { await this.setNewItemId(item, config as MPage); } } + + return config; + } + + /** + * 获取默认属性配置 + * @param type 组件类型 + * @returns Object + */ + public async getDefaultPropsValue(type: string) { + return ['page', 'container'].includes(type) + ? { + type, + layout: 'absolute', + style: {}, + name: type, + items: [], + } + : { + type, + style: {}, + name: type, + }; } } diff --git a/packages/editor/src/utils/props.ts b/packages/editor/src/utils/props.ts index 8ea48e02..cd13fbd0 100644 --- a/packages/editor/src/utils/props.ts +++ b/packages/editor/src/utils/props.ts @@ -237,25 +237,3 @@ export const fillConfig = (config: FormConfig = []) => [ // 默认组件属性表单配置 export const DEFAULT_CONFIG: FormConfig = fillConfig([]); - -/** - * 获取默认属性配置 - * @param type 组件类型 - * @returns Object - */ -export const getDefaultPropsValue = (type: string, id: string) => - ['page', 'container'].includes(type) - ? { - type, - id, - layout: 'absolute', - style: {}, - name: type, - items: [], - } - : { - type, - id, - style: {}, - name: type, - }; diff --git a/packages/editor/tests/unit/services/props.spec.ts b/packages/editor/tests/unit/services/props.spec.ts index 295d6c06..fe8212ec 100644 --- a/packages/editor/tests/unit/services/props.spec.ts +++ b/packages/editor/tests/unit/services/props.spec.ts @@ -61,3 +61,8 @@ describe('setNewItemId', () => { expect(config.items[1].id === config.items[0].pop).toBeTruthy(); }); }); + +test('getDefaultValue', async () => { + const value = await props.getDefaultPropsValue('text'); + expect(value.type).toBe('text'); +}); diff --git a/packages/editor/tests/unit/utils/form.spec.ts b/packages/editor/tests/unit/utils/form.spec.ts index 6234ae44..4f5c8f40 100644 --- a/packages/editor/tests/unit/utils/form.spec.ts +++ b/packages/editor/tests/unit/utils/form.spec.ts @@ -42,10 +42,4 @@ describe('util form', () => { expect(config[0].items[0].items.length - defaultConfig[0].items[0].items.length).toBe(1); }); - - test('getDefaultValue', () => { - const value = props.getDefaultPropsValue('text', '1'); - expect(value.id).toBe('1'); - expect(value.type).toBe('text'); - }); });