From 45af1c53ded27f6fc5e73966e36c5492b689c832 Mon Sep 17 00:00:00 2001 From: kangwei Date: Thu, 28 May 2020 17:35:42 +0800 Subject: [PATCH] fix: compatiable old VE api --- .../src/bundle/prototype.ts | 29 +++++++++--- .../editor-preset-vision/src/bundle/trunk.ts | 4 ++ .../editor-preset-vision/src/drag-engine.ts | 10 +++- packages/editor-preset-vision/src/index.ts | 6 +-- packages/editor-preset-vision/src/pages.ts | 46 +++++++++++++++---- 5 files changed, 75 insertions(+), 20 deletions(-) diff --git a/packages/editor-preset-vision/src/bundle/prototype.ts b/packages/editor-preset-vision/src/bundle/prototype.ts index 815dab4bf..a309c7b16 100644 --- a/packages/editor-preset-vision/src/bundle/prototype.ts +++ b/packages/editor-preset-vision/src/bundle/prototype.ts @@ -1,5 +1,5 @@ import { ComponentType, ReactElement } from 'react'; -import { ComponentMetadata, FieldConfig, InitialItem, FilterItem } from '@ali/lowcode-types'; +import { ComponentMetadata, FieldConfig, InitialItem, FilterItem, AutorunItem } from '@ali/lowcode-types'; import { ComponentMeta, addBuiltinComponentAction, @@ -22,12 +22,14 @@ const GlobalPropsConfigure: Array<{ position: string; initials?: InitialItem[]; filters?: FilterItem[]; + autoruns?: AutorunItem[]; config: FieldConfig }> = []; const Overrides: { [componentName: string]: { initials?: InitialItem[]; filters?: FilterItem[]; + autoruns?: AutorunItem[]; override: any; }; } = {}; @@ -35,10 +37,12 @@ const Overrides: { function addGlobalPropsConfigure(config: OldGlobalPropConfig) { const initials: InitialItem[] = []; const filters: FilterItem[] = []; + const autoruns: AutorunItem[] = []; GlobalPropsConfigure.push({ position: config.position || 'bottom', initials, filters, + autoruns, config: upgradePropConfig(config, { addInitial: (item) => { initials.push(item); @@ -46,6 +50,9 @@ function addGlobalPropsConfigure(config: OldGlobalPropConfig) { addFilter: (item) => { filters.push(item); }, + addAutorun: (item) => { + autoruns.push(item); + }, }) }); } @@ -60,24 +67,29 @@ function removeGlobalPropsConfigure(name: string) { function overridePropsConfigure(componentName: string, config: { [name: string]: OldPropConfig } | OldPropConfig[]) { const initials: InitialItem[] = []; const filters: FilterItem[] = []; + const autoruns: AutorunItem[] = []; const addInitial = (item: InitialItem) => { initials.push(item); }; const addFilter = (item: FilterItem) => { filters.push(item); }; + const addAutorun = (item: AutorunItem) => { + autoruns.push(item); + }; let override: any; if (Array.isArray(config)) { - override = upgradeConfigure(config, { addInitial, addFilter }); + override = upgradeConfigure(config, { addInitial, addFilter, addAutorun }); } else { override = {}; Object.keys(config).forEach(key => { - override[key] = upgradePropConfig(config[key], { addInitial, addFilter }); + override[key] = upgradePropConfig(config[key], { addInitial, addFilter, addAutorun }); }); } Overrides[componentName] = { initials, filters, + autoruns, override, }; } @@ -107,6 +119,7 @@ registerMetadataTransducer( } else if (position === 'bottom') { bottom.push(item.config); } + // TODO: replace autoruns,initials,filters }); const override = Overrides[componentName]?.override; @@ -127,6 +140,7 @@ registerMetadataTransducer( } } } + // TODO: replace autoruns,initials,filters } return metadata; @@ -202,7 +216,7 @@ class Prototype { return new Prototype(config); } - private id: string; + readonly isPrototype = true; private meta: ComponentMeta; readonly options: OldPrototypeConfig | ComponentMetadata; @@ -215,11 +229,10 @@ class Prototype { const metadata = isNewSpec(input) ? input : upgradeMetadata(input); this.meta = designer.createComponentMeta(metadata); } - this.id = uniqueId('prototype'); } getId() { - return this.id; + return this.getComponentName(); } getConfig(configName?: keyof (OldPrototypeConfig | ComponentMetadata)) { @@ -316,4 +329,8 @@ class Prototype { } } +export function isPrototype(obj: any): obj is Prototype { + return obj && obj.isPrototype; +} + export default Prototype; diff --git a/packages/editor-preset-vision/src/bundle/trunk.ts b/packages/editor-preset-vision/src/bundle/trunk.ts index 1f9b568ce..a37f0bc75 100644 --- a/packages/editor-preset-vision/src/bundle/trunk.ts +++ b/packages/editor-preset-vision/src/bundle/trunk.ts @@ -41,6 +41,10 @@ export class Trunk { return this.metaBundle.getFromMeta(name); } + getPrototypeById(id: string) { + return this.getPrototype(id); + } + listByCategory() { const categories: any[] = []; const categoryMap: any = {}; diff --git a/packages/editor-preset-vision/src/drag-engine.ts b/packages/editor-preset-vision/src/drag-engine.ts index a4ecaaa1f..c1844c38a 100644 --- a/packages/editor-preset-vision/src/drag-engine.ts +++ b/packages/editor-preset-vision/src/drag-engine.ts @@ -1,5 +1,6 @@ import { designer } from './editor'; import { DragObjectType, isNode, isDragNodeDataObject } from '@ali/lowcode-designer'; +import { isPrototype } from './bundle/prototype'; const dragon = designer.dragon; const DragEngine = { @@ -9,7 +10,14 @@ const DragEngine = { if (!r) { return null; } - if (isNode(r)) { + if (isPrototype(r)) { + return { + type: DragObjectType.NodeData, + data: { + componentName: r.getComponentName(), + }, + }; + } else if (isNode(r)) { return { type: DragObjectType.Node, nodes: [r], diff --git a/packages/editor-preset-vision/src/index.ts b/packages/editor-preset-vision/src/index.ts index 6ad999d25..42643cb31 100644 --- a/packages/editor-preset-vision/src/index.ts +++ b/packages/editor-preset-vision/src/index.ts @@ -164,7 +164,7 @@ export { const version = '6.0.0(LowcodeEngine 0.9.0-beta)'; console.log( - `%cVisionEngine %cv${version}`, - "color:#000;font-weight:bold;", - "color:green;font-weight:bold;" + `%c VisionEngine %c v${version} `, + "padding: 2px 1px; border-radius: 3px 0 0 3px; color: #fff; background: #606060;font-weight:bold;", + "padding: 2px 1px; border-radius: 0 3px 3px 0; color: #fff; background: #42c02e;font-weight:bold;" ); diff --git a/packages/editor-preset-vision/src/pages.ts b/packages/editor-preset-vision/src/pages.ts index 71b24300f..23ad9fe23 100644 --- a/packages/editor-preset-vision/src/pages.ts +++ b/packages/editor-preset-vision/src/pages.ts @@ -4,34 +4,60 @@ import { DocumentModel } from '@ali/lowcode-designer'; const { project } = designer; -export interface OldPageData { +export interface PageDataV1 { + id: string; + componentsTree: RootSchema[]; + layout: RootSchema; + [dataAddon: string]: any; +} + +export interface PageDataV2 { id: string; componentsTree: RootSchema[]; [dataAddon: string]: any; } +function isPageDataV1(obj: any): obj is PageDataV1 { + return obj && obj.layout; +} +function isPageDataV2(obj: any): obj is PageDataV2 { + return obj && obj.componentsTree && Array.isArray(obj.componentsTree); +} + +type OldPageData = PageDataV1 | PageDataV2; + const pages = Object.assign(project, { setPages(pages: OldPageData[]) { if (!pages || !Array.isArray(pages) || pages.length === 0) { throw new Error('pages schema 不合法'); } - if (pages[0].componentsTree[0]) { - pages[0].componentsTree[0].componentName = 'Page'; - // FIXME - pages[0].componentsTree[0].lifeCycles = {}; - pages[0].componentsTree[0].methods = {}; + let componentsTree: any; + if (isPageDataV1(pages[0])) { + componentsTree = [pages[0].layout]; + } else { + componentsTree = pages[0].componentsTree; + if (componentsTree[0]) { + componentsTree[0].componentName = 'Page'; + // FIXME + componentsTree[0].lifeCycles = {}; + componentsTree[0].methods = {}; + } } project.load({ version: '1.0.0', componentsMap: [], - componentsTree: pages[0].componentsTree, + componentsTree, }, true); }, - // FIXME: - addPage(data: OldPageData) { - return project.open(data.layout); + addPage(data: OldPageData | RootSchema) { + if (isPageDataV1(data)) { + data = data.layout; + } else if (isPageDataV2(data)) { + data = data.componentsTree[0]; + } + return project.open(data); }, getPage(fnOrIndex: ((page: DocumentModel) => boolean) | number) { if (typeof fnOrIndex === 'number') {