From 239bb29de1853c87f687a4355df76179a09d5ae5 Mon Sep 17 00:00:00 2001 From: liujuping Date: Thu, 11 May 2023 10:01:56 +0800 Subject: [PATCH] feat: add skeleton item model --- .../designer/src/document/document-model.ts | 2 +- .../designer/src/document/node/props/prop.ts | 4 +++ packages/designer/src/project/project.ts | 8 ++--- packages/editor-skeleton/src/skeleton.ts | 7 +++-- packages/editor-skeleton/src/widget/panel.ts | 4 +++ packages/engine/src/modules/classes.ts | 2 ++ packages/engine/src/modules/symbols.ts | 2 ++ packages/shell/src/api/skeleton.ts | 18 ++++++++--- packages/shell/src/index.ts | 2 ++ packages/shell/src/model/index.ts | 1 + packages/shell/src/model/skeleton-item.ts | 31 +++++++++++++++++++ packages/shell/src/symbols.ts | 3 +- packages/types/src/shell/api/skeleton.ts | 3 +- packages/types/src/shell/model/index.ts | 1 + .../types/src/shell/model/skeleton-item.ts | 6 ++++ .../workspace/src/context/view-context.ts | 2 ++ 16 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 packages/shell/src/model/skeleton-item.ts create mode 100644 packages/types/src/shell/model/skeleton-item.ts diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 699775bc7..2d39ed115 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -141,7 +141,7 @@ export interface IDocumentModel extends Omit, 'exportSchema' | 'node'>, IPropParent { + spread: boolean; + key: string | number | undefined; readonly props: IProps; @@ -42,6 +44,8 @@ export interface IProp extends Omit item.fileName === doc || item.id === doc); + if (typeof doc === 'string' || typeof doc === 'number') { + const got = this.documents.find((item) => item.fileName === String(doc) || String(item.id) === String(doc)); if (got) { return got.open(); } - const data = this.data.componentsTree.find((data) => data.fileName === doc); + const data = this.data.componentsTree.find((data) => data.fileName === String(doc)); if (data) { doc = this.createDocument(data); return doc.open(); diff --git a/packages/editor-skeleton/src/skeleton.ts b/packages/editor-skeleton/src/skeleton.ts index 180859f1d..616e7f017 100644 --- a/packages/editor-skeleton/src/skeleton.ts +++ b/packages/editor-skeleton/src/skeleton.ts @@ -56,7 +56,8 @@ export interface ISkeleton extends Omit { editor: IEditor; @@ -101,6 +102,8 @@ export interface ISkeleton extends Omit): IWidget | Widget | Panel | Stage | Dock | PanelDock | undefined; } export class Skeleton { @@ -440,7 +443,7 @@ export class Skeleton { return restConfig; } - add(config: IPublicTypeSkeletonConfig, extraConfig?: Record) { + add(config: IPublicTypeSkeletonConfig, extraConfig?: Record): IWidget | Widget | Panel | Stage | Dock | PanelDock | undefined { const parsedConfig = { ...this.parseConfig(config), ...extraConfig, diff --git a/packages/editor-skeleton/src/widget/panel.ts b/packages/editor-skeleton/src/widget/panel.ts index feec08da7..b35af6a21 100644 --- a/packages/editor-skeleton/src/widget/panel.ts +++ b/packages/editor-skeleton/src/widget/panel.ts @@ -211,6 +211,10 @@ export class Panel implements IWidget { this.setActive(false); } + disable() {} + + enable(): void {} + show() { this.setActive(true); } diff --git a/packages/engine/src/modules/classes.ts b/packages/engine/src/modules/classes.ts index 44aeed965..d68ea43de 100644 --- a/packages/engine/src/modules/classes.ts +++ b/packages/engine/src/modules/classes.ts @@ -10,6 +10,7 @@ import { Selection, Prop, SimulatorHost, + SkeletonItem, } from '@alilc/lowcode-shell'; import { Node as InnerNode } from '@alilc/lowcode-designer'; @@ -26,4 +27,5 @@ export default { Selection, Prop, SimulatorHost, + SkeletonItem, }; diff --git a/packages/engine/src/modules/symbols.ts b/packages/engine/src/modules/symbols.ts index 7faccff51..a0371abf9 100644 --- a/packages/engine/src/modules/symbols.ts +++ b/packages/engine/src/modules/symbols.ts @@ -11,6 +11,7 @@ import { designerCabinSymbol, propSymbol, simulatorHostSymbol, + skeletonItemSymbol, } from '@alilc/lowcode-shell'; export default { @@ -26,4 +27,5 @@ export default { designerCabinSymbol, propSymbol, simulatorHostSymbol, + skeletonItemSymbol, }; diff --git a/packages/shell/src/api/skeleton.ts b/packages/shell/src/api/skeleton.ts index cb5c8f8aa..b48747598 100644 --- a/packages/shell/src/api/skeleton.ts +++ b/packages/shell/src/api/skeleton.ts @@ -4,8 +4,9 @@ import { SkeletonEvents, } from '@alilc/lowcode-editor-skeleton'; import { skeletonSymbol } from '../symbols'; -import { IPublicApiSkeleton, IPublicTypeDisposable, IPublicTypeSkeletonConfig, IPublicTypeWidgetConfigArea } from '@alilc/lowcode-types'; +import { IPublicApiSkeleton, IPublicModelSkeletonItem, IPublicTypeDisposable, IPublicTypeSkeletonConfig, IPublicTypeWidgetConfigArea } from '@alilc/lowcode-types'; import { getLogger } from '@alilc/lowcode-utils'; +import { SkeletonItem } from '../model/skeleton-item'; const innerSkeletonSymbol = Symbol('skeleton'); @@ -46,12 +47,15 @@ export class Skeleton implements IPublicApiSkeleton { * @param extraConfig * @returns */ - add(config: IPublicTypeSkeletonConfig, extraConfig?: Record) { + add(config: IPublicTypeSkeletonConfig, extraConfig?: Record): IPublicModelSkeletonItem | undefined { const configWithName = { ...config, pluginName: this.pluginName, }; - return this[skeletonSymbol].add(configWithName, extraConfig); + const item = this[skeletonSymbol].add(configWithName, extraConfig); + if (item) { + return new SkeletonItem(item); + } } /** @@ -68,6 +72,10 @@ export class Skeleton implements IPublicApiSkeleton { skeleton[normalizeArea(area)].container?.remove(name); } + getAreaItems(areaName: IPublicTypeWidgetConfigArea): IPublicModelSkeletonItem[] { + return this[skeletonSymbol][normalizeArea(areaName)].container.items?.map(d => new SkeletonItem(d)); + } + /** * 显示面板 * @param name @@ -193,7 +201,7 @@ export class Skeleton implements IPublicApiSkeleton { } } -function normalizeArea(area: IPublicTypeWidgetConfigArea | undefined): 'leftArea' | 'rightArea' | 'topArea' | 'toolbar' | 'mainArea' | 'bottomArea' | 'leftFixedArea' | 'leftFloatArea' | 'stages' { +function normalizeArea(area: IPublicTypeWidgetConfigArea | undefined): 'leftArea' | 'rightArea' | 'topArea' | 'toolbar' | 'mainArea' | 'bottomArea' | 'leftFixedArea' | 'leftFloatArea' | 'stages' | 'subTopArea' { switch (area) { case 'leftArea': case 'left': @@ -220,6 +228,8 @@ function normalizeArea(area: IPublicTypeWidgetConfigArea | undefined): 'leftArea return 'leftFloatArea'; case 'stages': return 'stages'; + case 'subTopArea': + return 'subTopArea'; default: throw new Error(`${area} not supported`); } diff --git a/packages/shell/src/index.ts b/packages/shell/src/index.ts index b3fca90b0..6f79c78bc 100644 --- a/packages/shell/src/index.ts +++ b/packages/shell/src/index.ts @@ -11,6 +11,7 @@ import { Clipboard, SettingField, Window, + SkeletonItem, } from './model'; import { Project, @@ -66,4 +67,5 @@ export { SimulatorHost, Config, SettingField, + SkeletonItem, }; diff --git a/packages/shell/src/model/index.ts b/packages/shell/src/model/index.ts index 8b668c947..a15d50b54 100644 --- a/packages/shell/src/model/index.ts +++ b/packages/shell/src/model/index.ts @@ -20,3 +20,4 @@ export * from './plugin-instance'; export * from './window'; export * from './clipboard'; export * from './editor-view'; +export * from './skeleton-item'; diff --git a/packages/shell/src/model/skeleton-item.ts b/packages/shell/src/model/skeleton-item.ts new file mode 100644 index 000000000..b91e5a19a --- /dev/null +++ b/packages/shell/src/model/skeleton-item.ts @@ -0,0 +1,31 @@ +import { skeletonItemSymbol } from '../symbols'; +import { IPublicModelSkeletonItem } from '@alilc/lowcode-types'; +import { Dock, IWidget, Panel, PanelDock, Stage, Widget } from '@alilc/lowcode-editor-skeleton'; + +export class SkeletonItem implements IPublicModelSkeletonItem { + private [skeletonItemSymbol]: IWidget | Widget | Panel | Stage | Dock | PanelDock; + + constructor(skeletonItem: IWidget | Widget | Panel | Stage | Dock | PanelDock) { + this[skeletonItemSymbol] = skeletonItem; + } + + get name() { + return this[skeletonItemSymbol].name; + } + + disable() { + this[skeletonItemSymbol].disable?.(); + } + + enable() { + this[skeletonItemSymbol].enable?.(); + } + + hide() { + this[skeletonItemSymbol].hide(); + } + + show() { + this[skeletonItemSymbol].show(); + } +} \ No newline at end of file diff --git a/packages/shell/src/symbols.ts b/packages/shell/src/symbols.ts index 48d6a9656..b4ec01c7e 100644 --- a/packages/shell/src/symbols.ts +++ b/packages/shell/src/symbols.ts @@ -35,4 +35,5 @@ export const clipboardSymbol = Symbol('clipboard'); export const configSymbol = Symbol('configSymbol'); export const conditionGroupSymbol = Symbol('conditionGroup'); export const editorViewSymbol = Symbol('editorView'); -export const pluginContextSymbol = Symbol('pluginContext'); \ No newline at end of file +export const pluginContextSymbol = Symbol('pluginContext'); +export const skeletonItemSymbol = Symbol('skeletonItem'); \ No newline at end of file diff --git a/packages/types/src/shell/api/skeleton.ts b/packages/types/src/shell/api/skeleton.ts index b22b3586c..13ba3468b 100644 --- a/packages/types/src/shell/api/skeleton.ts +++ b/packages/types/src/shell/api/skeleton.ts @@ -1,3 +1,4 @@ +import { IPublicModelSkeletonItem } from '../model'; import { IPublicTypeDisposable, IPublicTypeSkeletonConfig } from '../type'; export interface IPublicApiSkeleton { @@ -9,7 +10,7 @@ export interface IPublicApiSkeleton { * @param extraConfig * @returns */ - add(config: IPublicTypeSkeletonConfig, extraConfig?: Record): any; + add(config: IPublicTypeSkeletonConfig, extraConfig?: Record): IPublicModelSkeletonItem | undefined; /** * 移除一个面板实例 diff --git a/packages/types/src/shell/model/index.ts b/packages/types/src/shell/model/index.ts index e310128ca..1924f1121 100644 --- a/packages/types/src/shell/model/index.ts +++ b/packages/types/src/shell/model/index.ts @@ -31,3 +31,4 @@ export * from './resource'; export * from './clipboard'; export * from './setting-field'; export * from './editor-view'; +export * from './skeleton-item'; diff --git a/packages/types/src/shell/model/skeleton-item.ts b/packages/types/src/shell/model/skeleton-item.ts new file mode 100644 index 000000000..ca262ccbf --- /dev/null +++ b/packages/types/src/shell/model/skeleton-item.ts @@ -0,0 +1,6 @@ +/** + * @since 1.1.7 + */ +export interface IPublicModelSkeletonItem { + +} \ No newline at end of file diff --git a/packages/workspace/src/context/view-context.ts b/packages/workspace/src/context/view-context.ts index 7dfc66393..ff4c12eee 100644 --- a/packages/workspace/src/context/view-context.ts +++ b/packages/workspace/src/context/view-context.ts @@ -7,7 +7,9 @@ import { IEditorWindow } from '../window'; import { getWebviewPlugin } from '../inner-plugins/webview'; export interface IViewContext extends IBasicContext { + editorWindow: IEditorWindow; + viewName: string; } export class Context extends BasicContext implements IViewContext {