From dc029c252a5a135ffbce17c66040f72ea4b7fe00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8F=8A=E8=90=8D=28=E7=B5=AE=E9=BB=8E=29?= Date: Wed, 7 Jun 2023 17:21:10 +0800 Subject: [PATCH] feat(workspace): add resourceTypeList api (#2148) --- packages/shell/src/api/workspace.ts | 15 +++++++++++++++ packages/shell/src/model/resource.ts | 4 ++++ packages/types/src/shell/model/resource.ts | 2 ++ packages/workspace/src/resource.ts | 2 ++ packages/workspace/src/workspace.ts | 6 ++++-- 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/shell/src/api/workspace.ts b/packages/shell/src/api/workspace.ts index 8192ac67d..d51f670e9 100644 --- a/packages/shell/src/api/workspace.ts +++ b/packages/shell/src/api/workspace.ts @@ -34,6 +34,21 @@ export class Workspace implements IPublicApiWorkspace { return new ShellWindow(this[workspaceSymbol].window); } + get resourceTypeList() { + return Array.from(this[workspaceSymbol].resourceTypeMap.values()).map((d) => { + const { name: resourceName, type: resourceType } = d; + const { + description, + } = d.resourceTypeModel({} as any, {}); + + return { + resourceName, + resourceType, + description, + }; + }); + } + onWindowRendererReady(fn: () => void): IPublicTypeDisposable { return this[workspaceSymbol].onWindowRendererReady(fn); } diff --git a/packages/shell/src/model/resource.ts b/packages/shell/src/model/resource.ts index 43f28fbd8..6a1a07e49 100644 --- a/packages/shell/src/model/resource.ts +++ b/packages/shell/src/model/resource.ts @@ -37,6 +37,10 @@ export class Resource implements IPublicModelResource { return this[resourceSymbol].category; } + get description() { + return this[resourceSymbol].description; + } + get children() { return this[resourceSymbol].children.map((child) => new Resource(child)); } diff --git a/packages/types/src/shell/model/resource.ts b/packages/types/src/shell/model/resource.ts index 1f59845e6..0d791412b 100644 --- a/packages/types/src/shell/model/resource.ts +++ b/packages/types/src/shell/model/resource.ts @@ -19,6 +19,8 @@ export interface IBaseModelResource< get viewName(): string | undefined; + get description(): string | undefined; + get config(): { disableBehaviors?: ('copy' | 'remove')[]; } | undefined; diff --git a/packages/workspace/src/resource.ts b/packages/workspace/src/resource.ts index 4b695d036..1d328b6c6 100644 --- a/packages/workspace/src/resource.ts +++ b/packages/workspace/src/resource.ts @@ -12,6 +12,8 @@ export interface IBaseResource extends IBaseModelResource { skeleton: ISkeleton; + description?: string; + get editorViews(): IPublicTypeEditorView[]; get defaultViewType(): string; diff --git a/packages/workspace/src/workspace.ts b/packages/workspace/src/workspace.ts index 46c8c4a0e..bedae8680 100644 --- a/packages/workspace/src/workspace.ts +++ b/packages/workspace/src/workspace.ts @@ -33,6 +33,8 @@ export interface IWorkspace extends Omit; + getResourceList(): IResource[]; getResourceType(resourceName: string): IResourceType; @@ -55,12 +57,12 @@ export class Workspace implements IWorkspace { enableAutoOpenFirstWindow: boolean; + resourceTypeMap: Map = new Map(); + private emitter: IEventBus = createModuleEventBus('workspace'); private _isActive = false; - private resourceTypeMap: Map = new Map(); - private resourceList: IResource[] = []; get skeleton() {