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'); - }); });