feat: add skeleton item model

This commit is contained in:
liujuping 2023-05-11 10:01:56 +08:00 committed by 林熠
parent 9947a36d17
commit 239bb29de1
16 changed files with 83 additions and 13 deletions

View File

@ -141,7 +141,7 @@ export interface IDocumentModel extends Omit<IPublicModelDocumentModel<
insertNodes(parent: INode, thing: INode[] | IPublicTypeNodeData[], at?: number | null, copy?: boolean): INode[];
open(): DocumentModel;
open(): IDocumentModel;
remove(): void;

View File

@ -16,6 +16,8 @@ export type UNSET = typeof UNSET;
export interface IProp extends Omit<IPublicModelProp<
INode
>, 'exportSchema' | 'node'>, IPropParent {
spread: boolean;
key: string | number | undefined;
readonly props: IProps;
@ -42,6 +44,8 @@ export interface IProp extends Omit<IPublicModelProp<
setupItems(): IProp[] | null;
isVirtual(): boolean;
get type(): ValueTypes;
get size(): number;

View File

@ -1,7 +1,7 @@
import { obx, computed, makeObservable, action, IEventBus, createModuleEventBus } from '@alilc/lowcode-editor-core';
import { IDesigner } from '../designer';
import { DocumentModel, isDocumentModel } from '../document';
import type { IDocumentModel } from "../document";
import type { IDocumentModel } from '../document';
import {
IPublicTypeComponentsMap,
IPublicEnumTransformStage,
@ -317,13 +317,13 @@ export class Project implements IProject {
doc = this.createDocument();
return doc.open();
}
if (typeof doc === 'string') {
const got = this.documents.find((item) => 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();

View File

@ -56,7 +56,8 @@ export interface ISkeleton extends Omit<IPublicApiSkeleton,
'onShowWidget' |
'onHideWidget' |
'remove' |
'hideArea'
'hideArea' |
'add'
> {
editor: IEditor;
@ -101,6 +102,8 @@ export interface ISkeleton extends Omit<IPublicApiSkeleton,
): WidgetContainer;
createPanel(config: PanelConfig): Panel;
add(config: IPublicTypeSkeletonConfig, extraConfig?: Record<string, any>): IWidget | Widget | Panel | Stage | Dock | PanelDock | undefined;
}
export class Skeleton {
@ -440,7 +443,7 @@ export class Skeleton {
return restConfig;
}
add(config: IPublicTypeSkeletonConfig, extraConfig?: Record<string, any>) {
add(config: IPublicTypeSkeletonConfig, extraConfig?: Record<string, any>): IWidget | Widget | Panel | Stage | Dock | PanelDock | undefined {
const parsedConfig = {
...this.parseConfig(config),
...extraConfig,

View File

@ -211,6 +211,10 @@ export class Panel implements IWidget {
this.setActive(false);
}
disable() {}
enable(): void {}
show() {
this.setActive(true);
}

View File

@ -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,
};

View File

@ -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,
};

View File

@ -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<string, any>) {
add(config: IPublicTypeSkeletonConfig, extraConfig?: Record<string, any>): 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`);
}

View File

@ -11,6 +11,7 @@ import {
Clipboard,
SettingField,
Window,
SkeletonItem,
} from './model';
import {
Project,
@ -66,4 +67,5 @@ export {
SimulatorHost,
Config,
SettingField,
SkeletonItem,
};

View File

@ -20,3 +20,4 @@ export * from './plugin-instance';
export * from './window';
export * from './clipboard';
export * from './editor-view';
export * from './skeleton-item';

View File

@ -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();
}
}

View File

@ -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');
export const pluginContextSymbol = Symbol('pluginContext');
export const skeletonItemSymbol = Symbol('skeletonItem');

View File

@ -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<string, any>): any;
add(config: IPublicTypeSkeletonConfig, extraConfig?: Record<string, any>): IPublicModelSkeletonItem | undefined;
/**
*

View File

@ -31,3 +31,4 @@ export * from './resource';
export * from './clipboard';
export * from './setting-field';
export * from './editor-view';
export * from './skeleton-item';

View File

@ -0,0 +1,6 @@
/**
* @since 1.1.7
*/
export interface IPublicModelSkeletonItem {
}

View File

@ -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 {