From dbc958c6bc608a4f6bb3e1f93bc249a58d3251d9 Mon Sep 17 00:00:00 2001 From: "wuyue.xht" Date: Thu, 30 Jul 2020 23:16:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=BC=E5=87=BA=E7=9A=84schema?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0componentsMap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/src/document/document-model.ts | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 903312e29..6609e25c8 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -20,6 +20,15 @@ export type GetDataType = T extends undefined : any : T; + export interface ComponentMap { + componentName: string; + package: string; + version?: string; + destructuring?: boolean; + exportName?: string; + subName?: string; + } + export class DocumentModel { /** * 根节点 类型有:Page/Component/Block @@ -493,9 +502,13 @@ export class DocumentModel { } // add toData - toData() { + toData(extraComps?: string[]) { const node = this.project?.currentDocument?.export(TransformStage.Save); - return { componentsTree: [node] }; + const data = { + componentsMap: this.getComponentsMap(extraComps), + componentsTree: [node], + }; + return data; } getHistory(): History { @@ -564,6 +577,37 @@ export class DocumentModel { return this.rootNodeVisitorMap[name]; } + getComponentsMap(extraComps?: string[]) { + const componentsMap: ComponentMap[] = []; + // 组件去重 + const map: any = {}; + for (let node of this.nodesMap.values()) { + const { componentName } = node || {}; + if (!map[componentName] && node?.componentMeta?.npm?.package) { + map[componentName] = true; + componentsMap.push({ + componentName, + package: node?.componentMeta?.npm?.package, + }); + } + } + // 合并外界传入的自定义渲染的组件 + if (Array.isArray(extraComps)) { + extraComps.forEach(c => { + if (c && !map[c]) { + const m = this.getComponentMeta(c); + if (m && m.npm?.package) { + componentsMap.push({ + componentName: c, + package: m.npm?.package, + }); + } + } + }); + } + return componentsMap; + } + onNodeCreate(func: (node: Node) => void) { this.emitter.on('nodecreate', func); return () => {