diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index a6811d687..6a5eade7e 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 @@ -496,9 +505,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 { @@ -567,6 +580,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 () => {