feat: fix designer:entry ts errors

This commit is contained in:
liujuping 2023-03-14 18:56:46 +08:00 committed by 林熠
parent 4433b2ee78
commit 4d4a8a6d6f
35 changed files with 533 additions and 502 deletions

View File

@ -833,11 +833,11 @@ props 数组下对象字段描述:
| name | 属性名 | String | type = 'field' 生效 |
| defaultValue | 默认值 | Any(视字段类型而定) | type = 'field' 生效 |
| supportVariable | 是否支持配置变量 | Boolean | type = 'field' 生效 |
| condition | 配置当前 prop 是否展示 | (target: SettingTarget) => boolean; | - |
| condition | 配置当前 prop 是否展示 | (target: IPublicModelSettingField) => boolean; | - |
| setter | 单个控件 (setter) 描述,搭建基础协议组件的描述对象,支持 JSExpression / JSFunction / JSSlot | `String\|Object\|Function` | type = 'field' 生效 |
| extraProps | 其他配置属性(不做流通要求) | Object | 其他配置 |
| extraProps.getValue | setter 渲染时被调用setter 会根据该函数的返回值设置 setter 当前值 | Function | (target: SettingTarget, value: any) => any; |
| extraProps.setValue | setter 内容修改时调用,开发者可在该函数内部修改节点 schema 或者进行其他操作 | Function | (target: SettingTarget, value: any) => void; |
| extraProps.getValue | setter 渲染时被调用setter 会根据该函数的返回值设置 setter 当前值 | Function | (target: IPublicModelSettingField, value: any) => any; |
| extraProps.setValue | setter 内容修改时调用,开发者可在该函数内部修改节点 schema 或者进行其他操作 | Function | (target: IPublicModelSettingField, value: any) => void; |
根据属性值类型 propType确定对应控件类型 (setter) 。
@ -922,7 +922,7 @@ props 数组下对象字段描述:
| 字段 | 用途 | 类型 | 备注 |
| ------------------------------- | --------------------------------------------------------------------------------------------------- | ------- | --- |
|initialChildren | 组件拖入“设计器”时根据此配置自动生成 children 节点 schema |NodeData[]/Function NodeData[] | ((target: SettingTarget) => NodeData[]);|
|initialChildren | 组件拖入“设计器”时根据此配置自动生成 children 节点 schema |NodeData[]/Function NodeData[] | ((target: IPublicModelSettingField) => NodeData[]);|
|getResizingHandlers| 用于配置设计器中组件 resize 操作工具的样式和内容 | Function| (currentNode: any) => Array<{ type: 'N' | 'W' | 'S' | 'E' | 'NW' | 'NE' | 'SE' | 'SW'; content?: ReactElement; propTarget?: string; appearOn?: 'mouse-enter' | 'mouse-hover' | 'selected' | 'always'; }> / ReactElement[];
|callbacks| 配置 callbacks 可捕获引擎抛出的一些事件,例如 onNodeAdd、onResize 等 | Callback| -
|callbacks.onNodeAdd| 在容器中拖入组件时触发的事件回调 | Function| (e: MouseEvent, currentNode: any) => any
@ -1098,7 +1098,7 @@ export interface Advanced {
/**
* 拖入容器时,自动带入 children 列表
*/
initialChildren?: NodeData[] | ((target: SettingTarget) => NodeData[]);
initialChildren?: NodeData[] | ((target: IPublicModelSettingField) => NodeData[]);
/**
* @todo 待补充文档
*/

View File

@ -8,10 +8,11 @@ import {
IPublicTypeTransformedComponentMetadata,
IPublicTypeNestingFilter,
IPublicTypeI18nData,
IPublicTypePluginConfig,
IPublicTypeFieldConfig,
IPublicModelComponentMeta,
IPublicTypeAdvanced,
IPublicTypeDisposable,
IPublicTypeLiveTextEditingConfig,
} from '@alilc/lowcode-types';
import { deprecate, isRegExp, isTitleConfig, isNode } from '@alilc/lowcode-utils';
import { computed, createModuleEventBus, IEventBus } from '@alilc/lowcode-editor-core';
@ -59,9 +60,11 @@ export function buildFilter(rule?: string | string[] | RegExp | IPublicTypeNesti
export interface IComponentMeta extends IPublicModelComponentMeta<INode> {
prototype?: any;
get rootSelector(): string | undefined;
setMetadata(metadata: IPublicTypeComponentMetadata): void;
get rootSelector(): string | undefined;
onMetadataChange(fn: (args: any) => void): IPublicTypeDisposable;
}
export class ComponentMeta implements IComponentMeta {
@ -120,7 +123,7 @@ export class ComponentMeta implements IComponentMeta {
return config?.combined || config?.props || [];
}
private _liveTextEditing?: IPublicTypePluginConfig[];
private _liveTextEditing?: IPublicTypeLiveTextEditingConfig[];
get liveTextEditing() {
return this._liveTextEditing;
@ -357,7 +360,7 @@ export class ComponentMeta implements IComponentMeta {
return true;
}
onMetadataChange(fn: (args: any) => void): () => void {
onMetadataChange(fn: (args: any) => void): IPublicTypeDisposable {
this.emitter.on('metadata_change', fn);
return () => {
this.emitter.removeListener('metadata_change', fn);

View File

@ -140,7 +140,7 @@ export class Designer implements IDesigner {
@obx.ref private _simulatorComponent?: ComponentType<any>;
@obx.ref private _simulatorProps?: object | ((project: Project) => object);
@obx.ref private _simulatorProps?: Record<string, any> | ((project: Project) => object);
@obx.ref private _suspensed = false;

View File

@ -1,3 +1,4 @@
export * from './setting-field';
export * from './setting-top-entry';
export * from './setting-entry';
export * from './setting-entry-type';
export * from './setting-prop-entry';

View File

@ -0,0 +1,45 @@
import { IPublicApiSetters, IPublicModelEditor } from '@alilc/lowcode-types';
import { IDesigner } from '../designer';
import { INode } from '../../document';
import { ISettingField } from './setting-field';
export interface ISettingEntry {
readonly designer: IDesigner | undefined;
readonly id: string;
/**
*
*/
readonly isSameComponent: boolean;
/**
*
*/
readonly isSingle: boolean;
/**
*
*/
readonly isMultiple: boolean;
/**
*
*/
readonly editor: IPublicModelEditor;
readonly setters: IPublicApiSetters;
/**
*
*/
get: (propName: string | number) => ISettingField | null;
readonly nodes: INode[];
// @todo 补充 node 定义
/**
* node
*/
getNode: () => any;
}

View File

@ -1,26 +0,0 @@
import { IBaseModelSettingEntry, IPublicModelSettingPropEntry, IPublicTypeSetValueOptions } from '@alilc/lowcode-types';
import { IComponentMeta } from '../../component-meta';
import { IDesigner } from '../designer';
import { INode } from '../../document';
export interface ISettingEntry extends IBaseModelSettingEntry<
INode,
IComponentMeta,
ISettingEntry
> {
readonly designer: IDesigner;
readonly isGroup: boolean;
readonly id: string;
get name(): string | number | undefined;
internalToShellPropEntry(): IPublicModelSettingPropEntry;
valueChange(options: IPublicTypeSetValueOptions): void;
get valueState(): number;
clearValue(): void;
}

View File

@ -7,14 +7,18 @@ import {
IPublicTypeFieldConfig,
IPublicTypeCustomView,
IPublicTypeSetValueOptions,
IPublicTypeDisposable,
IPublicModelSettingField,
IBaseModelSettingField,
} from '@alilc/lowcode-types';
import { Transducer } from './utils';
import { SettingPropEntry } from './setting-prop-entry';
import { ISettingEntry } from './setting-entry';
import { ISettingPropEntry, SettingPropEntry } from './setting-prop-entry';
import { computed, obx, makeObservable, action, untracked, intl } from '@alilc/lowcode-editor-core';
import { cloneDeep, isCustomView, isDynamicSetter } from '@alilc/lowcode-utils';
import { ISettingTopEntry } from './setting-top-entry';
import { IComponentMeta, INode } from '@alilc/lowcode-designer';
function getSettingFieldCollectorKey(parent: ISettingEntry, config: IPublicTypeFieldConfig) {
function getSettingFieldCollectorKey(parent: ISettingTopEntry | ISettingField, config: IPublicTypeFieldConfig) {
let cur = parent;
const path = [config.name];
while (cur !== parent.top) {
@ -26,11 +30,18 @@ function getSettingFieldCollectorKey(parent: ISettingEntry, config: IPublicTypeF
return path.join('.');
}
export interface ISettingField extends Omit<ISettingEntry, 'setValue'> {
export interface ISettingField extends ISettingPropEntry, Omit<IBaseModelSettingField<
ISettingTopEntry,
ISettingField,
IComponentMeta,
INode
>, 'setValue' | 'key' | 'node'> {
get items(): Array<ISettingField | IPublicTypeCustomView>;
get title(): string | ReactNode | undefined;
readonly isSettingField: true;
purge(): void;
extraProps: IPublicTypeFieldExtraProps;
@ -41,6 +52,10 @@ export interface ISettingField extends Omit<ISettingEntry, 'setValue'> {
readonly isRequired: boolean;
readonly isGroup: boolean;
get valueState(): number;
setExpanded(value: boolean): void;
setValue(
@ -49,6 +64,16 @@ export interface ISettingField extends Omit<ISettingEntry, 'setValue'> {
force?: boolean,
extraOptions?: IPublicTypeSetValueOptions,
): void;
clearValue(): void;
valueChange(options: IPublicTypeSetValueOptions): void;
createField(config: IPublicTypeFieldConfig): ISettingField;
onEffect(action: () => void): IPublicTypeDisposable;
internalToShell(): IPublicModelSettingField;
}
export class SettingField extends SettingPropEntry implements ISettingField {
@ -62,7 +87,7 @@ export class SettingField extends SettingPropEntry implements ISettingField {
private hotValue: any;
parent: ISettingEntry;
parent: ISettingTopEntry | ISettingField;
extraProps: IPublicTypeFieldExtraProps;
@ -82,7 +107,7 @@ export class SettingField extends SettingPropEntry implements ISettingField {
private _items: Array<ISettingField | IPublicTypeCustomView> = [];
constructor(
parent: ISettingEntry,
parent: ISettingTopEntry | ISettingField,
config: IPublicTypeFieldConfig,
private settingFieldCollector?: (name: string | number, field: ISettingField) => void,
) {
@ -118,8 +143,8 @@ export class SettingField extends SettingPropEntry implements ISettingField {
}
if (isDynamicSetter(this._setter)) {
return untracked(() => {
const shellThis = this.internalToShellPropEntry();
return (this._setter as IPublicTypeDynamicSetter)?.call(shellThis, shellThis);
const shellThis = this.internalToShell();
return (this._setter as IPublicTypeDynamicSetter)?.call(shellThis, shellThis!);
});
}
return this._setter;
@ -266,8 +291,13 @@ export class SettingField extends SettingPropEntry implements ISettingField {
this.valueChange(options);
}
onEffect(action: () => void): () => void {
return this.designer.autorun(action, true);
onEffect(action: () => void): IPublicTypeDisposable {
return this.designer!.autorun(action, true);
}
internalToShell() {
return this.designer!.shellModelFactory.createSettingField(this);
}
}

View File

@ -1,13 +1,44 @@
import { obx, computed, makeObservable, runInAction, IEventBus, createModuleEventBus } from '@alilc/lowcode-editor-core';
import { GlobalEvent, IPublicApiSetters, IPublicModelEditor, IPublicTypeSetValueOptions } from '@alilc/lowcode-types';
import { uniqueId, isJSExpression, isSettingField } from '@alilc/lowcode-utils';
import { ISettingEntry } from './setting-entry';
import { GlobalEvent, IPublicApiSetters, IPublicModelEditor, IPublicModelSettingField, IPublicTypeFieldExtraProps, IPublicTypeSetValueOptions } from '@alilc/lowcode-types';
import { uniqueId, isJSExpression } from '@alilc/lowcode-utils';
import { ISettingEntry } from './setting-entry-type';
import { INode } from '../../document';
import { IComponentMeta } from '../../component-meta';
import { IDesigner } from '../designer';
import { ISettingField } from './setting-field';
import { ISettingTopEntry } from './setting-top-entry';
import { ISettingField, isSettingField } from './setting-field';
export class SettingPropEntry implements ISettingEntry {
export interface ISettingPropEntry extends ISettingEntry {
get props(): ISettingTopEntry;
readonly isGroup: boolean;
get name(): string | number | undefined;
valueChange(options: IPublicTypeSetValueOptions): void;
getKey(): string | number | undefined;
setKey(key: string | number): void;
getDefaultValue(): any;
setUseVariable(flag: boolean): void;
getProps(): ISettingTopEntry;
isUseVariable(): boolean;
getMockOrValue(): any;
remove(): void;
setValue(val: any, isHotValue?: boolean, force?: boolean, extraOptions?: IPublicTypeSetValueOptions): void;
internalToShell(): IPublicModelSettingField;
}
export class SettingPropEntry implements ISettingPropEntry {
// === static properties ===
readonly editor: IPublicModelEditor;
@ -23,9 +54,9 @@ export class SettingPropEntry implements ISettingEntry {
readonly componentMeta: IComponentMeta | null;
readonly designer: IDesigner;
readonly designer: IDesigner | undefined;
readonly top: ISettingEntry;
readonly top: ISettingTopEntry;
readonly isGroup: boolean;
@ -50,9 +81,9 @@ export class SettingPropEntry implements ISettingEntry {
return path;
}
extraProps: any = {};
extraProps: IPublicTypeFieldExtraProps = {};
constructor(readonly parent: ISettingEntry | ISettingField, name: string | number | undefined, type?: 'field' | 'group') {
constructor(readonly parent: ISettingTopEntry | ISettingField, name: string | number | undefined, type?: 'field' | 'group') {
makeObservable(this);
if (type == null) {
const c = typeof name === 'string' ? name.slice(0, 1) : '';
@ -126,7 +157,7 @@ export class SettingPropEntry implements ISettingEntry {
if (this.type !== 'field') {
const { getValue } = this.extraProps;
return getValue
? getValue(this.internalToShellPropEntry(), undefined) === undefined
? getValue(this.internalToShell()!, undefined) === undefined
? 0
: 1
: 0;
@ -165,7 +196,7 @@ export class SettingPropEntry implements ISettingEntry {
}
const { getValue } = this.extraProps;
try {
return getValue ? getValue(this.internalToShellPropEntry(), val) : val;
return getValue ? getValue(this.internalToShell()!, val) : val;
} catch (e) {
console.warn(e);
return val;
@ -184,7 +215,7 @@ export class SettingPropEntry implements ISettingEntry {
const { setValue } = this.extraProps;
if (setValue && !extraOptions?.disableMutator) {
try {
setValue(this.internalToShellPropEntry(), val);
setValue(this.internalToShell()!, val);
} catch (e) {
/* istanbul ignore next */
console.warn(e);
@ -207,7 +238,7 @@ export class SettingPropEntry implements ISettingEntry {
const { setValue } = this.extraProps;
if (setValue) {
try {
setValue(this.internalToShellPropEntry(), undefined);
setValue(this.internalToShell()!, undefined);
} catch (e) {
/* istanbul ignore next */
console.warn(e);
@ -363,7 +394,7 @@ export class SettingPropEntry implements ISettingEntry {
return v;
}
internalToShellPropEntry() {
return this.designer.shellModelFactory.createSettingPropEntry(this);
internalToShell(): IPublicModelSettingField {
return this.designer!.shellModelFactory.createSettingField(this);;
}
}

View File

@ -1,11 +1,10 @@
import { IPublicTypeCustomView, IPublicModelEditor } from '@alilc/lowcode-types';
import { IPublicTypeCustomView, IPublicModelEditor, IPublicModelSettingTopEntry } from '@alilc/lowcode-types';
import { isCustomView } from '@alilc/lowcode-utils';
import { computed, IEventBus, createModuleEventBus } from '@alilc/lowcode-editor-core';
import { ISettingEntry } from './setting-entry';
import { SettingField } from './setting-field';
import { SettingPropEntry } from './setting-prop-entry';
import { ISettingEntry } from './setting-entry-type';
import { ISettingField, SettingField } from './setting-field';
import { INode } from '../../document';
import { ComponentMeta } from '../../component-meta';
import { IComponentMeta } from '../../component-meta';
import { IDesigner } from '../designer';
import { Setters } from '@alilc/lowcode-shell';
@ -16,8 +15,25 @@ function generateSessionId(nodes: INode[]) {
.join(',');
}
export interface ISettingTopEntry extends ISettingEntry {
export interface ISettingTopEntry extends ISettingEntry, IPublicModelSettingTopEntry<
INode,
ISettingField
> {
purge(): void;
items: Array<ISettingField | IPublicTypeCustomView>;
readonly top: ISettingTopEntry;
readonly parent: ISettingTopEntry;
readonly path: never[];
componentMeta: IComponentMeta | null;
getExtraPropValue(propName: string): void;
setExtraPropValue(propName: string, value: any): void;
}
export class SettingTopEntry implements ISettingTopEntry {
@ -25,11 +41,11 @@ export class SettingTopEntry implements ISettingTopEntry {
private _items: Array<SettingField | IPublicTypeCustomView> = [];
private _componentMeta: ComponentMeta | null = null;
private _componentMeta: IComponentMeta | null = null;
private _isSame = true;
private _settingFieldMap: { [prop: string]: SettingField } = {};
private _settingFieldMap: { [prop: string]: ISettingField } = {};
readonly path = [];
@ -122,8 +138,8 @@ export class SettingTopEntry implements ISettingTopEntry {
private setupItems() {
if (this.componentMeta) {
const settingFieldMap: { [prop: string]: SettingField } = {};
const settingFieldCollector = (name: string | number, field: SettingField) => {
const settingFieldMap: { [prop: string]: ISettingField } = {};
const settingFieldCollector = (name: string | number, field: ISettingField) => {
settingFieldMap[name] = field;
};
this._items = this.componentMeta.configure.map((item) => {
@ -160,34 +176,34 @@ export class SettingTopEntry implements ISettingTopEntry {
/**
*
*/
get(propName: string | number): SettingPropEntry | null {
get(propName: string | number): ISettingField | null {
if (!propName) return null;
return this._settingFieldMap[propName] || (new SettingPropEntry(this, propName));
return this._settingFieldMap[propName] || (new SettingField(this, { name: propName }));
}
/**
*
*/
setPropValue(propName: string, value: any) {
setPropValue(propName: string | number, value: any) {
this.nodes.forEach((node) => {
node.setPropValue(propName, value);
node.setPropValue(propName.toString(), value);
});
}
/**
*
*/
clearPropValue(propName: string) {
clearPropValue(propName: string | number) {
this.nodes.forEach((node) => {
node.clearPropValue(propName);
node.clearPropValue(propName.toString());
});
}
/**
*
*/
getPropValue(propName: string): any {
return this.first.getProp(propName, true)?.getValue();
getPropValue(propName: string | number): any {
return this.first.getProp(propName.toString(), true)?.getValue();
}
/**

View File

@ -153,6 +153,12 @@ export interface IBaseNode<Schema extends IPublicTypeNodeSchema = IPublicTypeNod
getVisible(): boolean;
getChildren(): INodeChildren | null;
clearPropValue(path: string): void;
setProps(props?: IPublicTypePropsMap | IPublicTypePropsList | Props | null): void;
mergeProps(props: IPublicTypePropsMap): void;
}
/**
@ -203,7 +209,7 @@ export interface IBaseNode<Schema extends IPublicTypeNodeSchema = IPublicTypeNod
* isLocked
* hidden
*/
export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema> implements INode {
export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema> implements IBaseNode {
private emitter: IEventBus;
/**
@ -427,18 +433,24 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
});
}
private initialChildren(children: any): IPublicTypeNodeData[] {
private initialChildren(children: IPublicTypeNodeData | IPublicTypeNodeData[] | undefined): IPublicTypeNodeData[] {
// FIXME! this is dirty code
if (children == null) {
const { initialChildren } = this.componentMeta.advanced;
if (initialChildren) {
if (typeof initialChildren === 'function') {
return initialChildren(this as any) || [];
return initialChildren(this.internalToShellNode()!) || [];
}
return initialChildren;
}
}
return children || [];
if (Array.isArray(children)) {
return children;
} else if (children) {
return [children];
} else {
return [];
}
}
isContainer(): boolean {
@ -900,12 +912,12 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
(subNode: INode) => {
subNode.remove(true, true);
},
(iterable, idx) => (iterable as NodeChildren).get(idx),
(iterable, idx) => (iterable as INodeChildren).get(idx),
);
}
if (this.isParental()) {
this.props.import(props, extras);
(this._children as NodeChildren).import(children, checkId);
this._children?.import(children, checkId);
} else {
this.props
.get('children', true)!

View File

@ -104,7 +104,7 @@ describe('setting-field 测试', () => {
// group 类型的 field
const groupField = settingEntry.get('groupkgzzeo41') as SettingField;
expect(groupField.items).toBeUndefined();
expect(groupField.items).toEqual([]);
// 有子节点的 field
const objField = settingEntry.get('obj') as SettingField;

View File

@ -14,7 +14,7 @@ export interface FieldProps {
[extra: string]: any;
}
export function createField(props: FieldProps, children: ReactNode, type?: 'accordion' | 'inline' | 'block' | 'plain' | 'popup' | 'entry') {
export function createField(props: FieldProps, children: ReactNode, type?: 'accordion' | 'inline' | 'block' | 'plain' | 'popup' | 'entry'): ReactNode {
if (type === 'popup') {
return createElement(PopupField, props, children);
}

View File

@ -3,7 +3,7 @@ import { shallowIntl, observer, obx, engineConfig, runInAction, globalContext }
import { createContent, isJSSlot, isSetterConfig } from '@alilc/lowcode-utils';
import { Skeleton, Stage } from '@alilc/lowcode-editor-skeleton';
import { IPublicTypeCustomView } from '@alilc/lowcode-types';
import { SettingField, SettingTopEntry, ISettingEntry, IComponentMeta, ISettingField, isSettingField } from '@alilc/lowcode-designer';
import { ISettingEntry, IComponentMeta, ISettingField, isSettingField, ISettingTopEntry } from '@alilc/lowcode-designer';
import { createField } from '../field';
import PopupService, { PopupPipe } from '../popup';
import { SkeletonContext } from '../../context';
@ -80,7 +80,7 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
const { extraProps } = this.field;
const { condition } = extraProps;
try {
return typeof condition === 'function' ? condition(this.field.internalToShellPropEntry()) !== false : true;
return typeof condition === 'function' ? condition(this.field.internalToShell()) !== false : true;
} catch (error) {
console.error('exception when condition (hidden) is excuted', error);
}
@ -111,7 +111,7 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
if (setter.props) {
setterProps = setter.props;
if (typeof setterProps === 'function') {
setterProps = setterProps(this.field.internalToShellPropEntry());
setterProps = setterProps(this.field.internalToShell());
}
}
if (setter.initialValue != null) {
@ -177,7 +177,7 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
}
// 当前 field 没有 value 值时,将 initialValue 写入 field
// 之所以用 initialValue而不是 defaultValue 是为了保持跟 props.onInitial 的逻辑一致
const _initialValue = typeof initialValue === 'function' ? initialValue(this.field.internalToShellPropEntry()) : initialValue;
const _initialValue = typeof initialValue === 'function' ? initialValue(this.field.internalToShell()) : initialValue;
this.field.setValue(_initialValue);
}
@ -225,9 +225,9 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
forceInline: extraProps.forceInline,
key: field.id,
// === injection
prop: field.internalToShellPropEntry(), // for compatible vision
prop: field.internalToShell(), // for compatible vision
selected: field.top?.getNode()?.internalToShellNode(),
field: field.internalToShellPropEntry(),
field: field.internalToShell(),
// === IO
value, // reaction point
initialValue,
@ -244,7 +244,7 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
if (initialValue == null) {
return;
}
const value = typeof initialValue === 'function' ? initialValue(field.internalToShellPropEntry()) : initialValue;
const value = typeof initialValue === 'function' ? initialValue(field.internalToShell()) : initialValue;
this.setState({
// eslint-disable-next-line react/no-unused-state
value,
@ -303,7 +303,7 @@ class SettingGroupView extends Component<SettingGroupViewProps> {
const { field } = this.props;
const { extraProps } = field;
const { condition, display } = extraProps;
const visible = field.isSingle && typeof condition === 'function' ? condition(field.internalToShellPropEntry()) !== false : true;
const visible = field.isSingle && typeof condition === 'function' ? condition(field.internalToShell()) !== false : true;
if (!visible) {
return null;
@ -340,7 +340,7 @@ export function createSettingFieldView(item: ISettingField | IPublicTypeCustomVi
}
export type SettingsPaneProps = {
target: SettingTopEntry | SettingField;
target: ISettingTopEntry | ISettingField;
usePopup?: boolean;
};

View File

@ -1,7 +1,7 @@
import {
IPublicTypeTransformedComponentMetadata,
IPublicTypeFieldConfig,
IPublicModelSettingTarget,
IPublicModelSettingField,
} from '@alilc/lowcode-types';
import { IconSlot } from '../icons/slot';
import { getConvertedExtraKey } from '@alilc/lowcode-designer';
@ -214,11 +214,11 @@ export default function (
definition: eventsDefinition,
},
},
getValue(field: IPublicModelSettingTarget, val?: any[]) {
getValue(field: IPublicModelSettingField, val?: any[]) {
return val;
},
setValue(field: IPublicModelSettingTarget, eventData) {
setValue(field: IPublicModelSettingField, eventData) {
const { eventDataList, eventList } = eventData;
Array.isArray(eventList) &&
eventList.map((item) => {

View File

@ -1,18 +1,19 @@
import {
INode,
SettingField as InnerSettingField,
ISettingField,
} from '@alilc/lowcode-designer';
import { IShellModelFactory, IPublicModelNode, IPublicModelSettingPropEntry } from '@alilc/lowcode-types';
import { IShellModelFactory, IPublicModelNode } from '@alilc/lowcode-types';
import { IPublicModelSettingField } from '../../../types/src/shell/model/setting-field';
import {
Node,
SettingPropEntry,
SettingField,
} from '@alilc/lowcode-shell';
class ShellModelFactory implements IShellModelFactory {
createNode(node: INode | null | undefined): IPublicModelNode | null {
return Node.create(node);
}
createSettingPropEntry(prop: InnerSettingField): IPublicModelSettingPropEntry {
return SettingPropEntry.create(prop);
createSettingField(prop: ISettingField): IPublicModelSettingField {
return SettingField.create(prop);
}
}
export const shellModelFactory = new ShellModelFactory();

View File

@ -6,7 +6,7 @@ import {
designerSymbol,
skeletonSymbol,
editorSymbol,
settingPropEntrySymbol,
settingFieldSymbol,
settingTopEntrySymbol,
designerCabinSymbol,
propSymbol,
@ -21,7 +21,7 @@ export default {
skeletonSymbol,
editorSymbol,
designerSymbol,
settingPropEntrySymbol,
settingPropEntrySymbol: settingFieldSymbol,
settingTopEntrySymbol,
designerCabinSymbol,
propSymbol,

View File

@ -7,10 +7,10 @@ import {
Prop,
Selection,
Dragon,
SettingPropEntry,
SettingTopEntry,
Clipboard,
Config,
SettingField,
} from './model';
import {
Project,
@ -51,7 +51,7 @@ export {
Setters,
Hotkey,
Skeleton,
SettingPropEntry,
SettingField as SettingPropEntry,
SettingTopEntry,
Dragon,
Common,
@ -63,4 +63,5 @@ export {
Clipboard,
SimulatorHost,
Config,
SettingField,
};

View File

@ -12,8 +12,8 @@ export * from './node';
export * from './prop';
export * from './props';
export * from './selection';
export * from './setting-prop-entry';
export * from './setting-top-entry';
export * from './setting-field';
export * from './resource';
export * from './active-tracker';
export * from './plugin-instance';

View File

@ -28,7 +28,7 @@ export class Props implements IPublicModelProps {
/**
* props
*/
get path(): any[] {
get path(): string[] {
return this[propsSymbol].path;
}

View File

@ -1,144 +1,149 @@
import { SettingField, ISettingEntry } from '@alilc/lowcode-designer';
import { ISettingField, isSettingField } from '@alilc/lowcode-designer';
import {
IPublicTypeCompositeValue,
IPublicTypeFieldConfig,
IPublicTypeCustomView,
IPublicModelSettingPropEntry,
IPublicTypeSetterType,
IPublicTypeFieldExtraProps,
IPublicModelSettingTopEntry,
IPublicModelNode,
IPublicModelComponentMeta,
IPublicTypeSetValueOptions,
IPublicModelSettingField,
IPublicTypeDisposable,
} from '@alilc/lowcode-types';
import { settingPropEntrySymbol } from '../symbols';
import { settingFieldSymbol } from '../symbols';
import { Node as ShellNode } from './node';
import { SettingTopEntry as ShellSettingTopEntry } from './setting-top-entry';
import { SettingTopEntry, SettingTopEntry as ShellSettingTopEntry } from './setting-top-entry';
import { ComponentMeta as ShellComponentMeta } from './component-meta';
import { isCustomView } from '@alilc/lowcode-utils';
export class SettingPropEntry implements IPublicModelSettingPropEntry {
private readonly [settingPropEntrySymbol]: SettingField;
export class SettingField implements IPublicModelSettingField {
private readonly [settingFieldSymbol]: ISettingField;
constructor(prop: SettingField) {
this[settingPropEntrySymbol] = prop;
constructor(prop: ISettingField) {
this[settingFieldSymbol] = prop;
}
static create(prop: SettingField): IPublicModelSettingPropEntry {
return new SettingPropEntry(prop);
static create(prop: ISettingField): IPublicModelSettingField {
return new SettingField(prop);
}
/**
* isGroup
*/
get isGroup(): boolean {
return this[settingPropEntrySymbol].isGroup;
return this[settingFieldSymbol].isGroup;
}
/**
* id
*/
get id(): string {
return this[settingPropEntrySymbol].id;
return this[settingFieldSymbol].id;
}
/**
* name
*/
get name(): string | number {
return this[settingPropEntrySymbol].name;
get name(): string | number | undefined {
return this[settingFieldSymbol].name;
}
/**
* key
*/
get key(): string | number {
return this[settingPropEntrySymbol].getKey();
get key(): string | number | undefined {
return this[settingFieldSymbol].getKey();
}
/**
* path
*/
get path(): any[] {
return this[settingPropEntrySymbol].path;
return this[settingFieldSymbol].path;
}
/**
* title
*/
get title(): any {
return this[settingPropEntrySymbol].title;
return this[settingFieldSymbol].title;
}
/**
* setter
*/
get setter(): IPublicTypeSetterType | null {
return this[settingPropEntrySymbol].setter;
return this[settingFieldSymbol].setter;
}
/**
* expanded
*/
get expanded(): boolean {
return this[settingPropEntrySymbol].expanded;
return this[settingFieldSymbol].expanded;
}
/**
* extraProps
*/
get extraProps(): IPublicTypeFieldExtraProps {
return this[settingPropEntrySymbol].extraProps;
return this[settingFieldSymbol].extraProps;
}
get props(): IPublicModelSettingTopEntry {
return ShellSettingTopEntry.create(this[settingPropEntrySymbol].props);
return ShellSettingTopEntry.create(this[settingFieldSymbol].props);
}
/**
*
*/
get node(): IPublicModelNode | null {
return ShellNode.create(this[settingPropEntrySymbol].getNode());
return ShellNode.create(this[settingFieldSymbol].getNode());
}
/**
*
*/
get parent(): IPublicModelSettingPropEntry {
return SettingPropEntry.create(this[settingPropEntrySymbol].parent as any);
get parent(): IPublicModelSettingField | IPublicModelSettingTopEntry {
if (isSettingField(this[settingFieldSymbol].parent)) {
return SettingField.create(this[settingFieldSymbol].parent);
}
return SettingTopEntry.create(this[settingFieldSymbol].parent);
}
/**
*
*/
get top(): IPublicModelSettingTopEntry {
return ShellSettingTopEntry.create(this[settingPropEntrySymbol].top);
return ShellSettingTopEntry.create(this[settingFieldSymbol].top);
}
/**
* SettingField
*/
get isSettingField(): boolean {
return this[settingPropEntrySymbol].isSettingField;
return this[settingFieldSymbol].isSettingField;
}
/**
* componentMeta
*/
get componentMeta(): IPublicModelComponentMeta | null {
return ShellComponentMeta.create(this[settingPropEntrySymbol].componentMeta);
return ShellComponentMeta.create(this[settingFieldSymbol].componentMeta);
}
/**
* items
*/
get items(): Array<IPublicModelSettingPropEntry | IPublicTypeCustomView> {
return this[settingPropEntrySymbol].items?.map((item) => {
get items(): Array<IPublicModelSettingField | IPublicTypeCustomView> {
return this[settingFieldSymbol].items?.map((item) => {
if (isCustomView(item)) {
return item;
}
return item.internalToShellPropEntry();
return item.internalToShell();
});
}
@ -147,7 +152,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param key
*/
setKey(key: string | number): void {
this[settingPropEntrySymbol].setKey(key);
this[settingFieldSymbol].setKey(key);
}
/**
@ -169,7 +174,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param val
*/
setValue(val: IPublicTypeCompositeValue, extraOptions?: IPublicTypeSetValueOptions): void {
this[settingPropEntrySymbol].setValue(val, false, false, extraOptions);
this[settingFieldSymbol].setValue(val, false, false, extraOptions);
}
/**
@ -178,7 +183,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param value
*/
setPropValue(propName: string | number, value: any): void {
this[settingPropEntrySymbol].setPropValue(propName, value);
this[settingFieldSymbol].setPropValue(propName, value);
}
/**
@ -186,7 +191,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param propName
*/
clearPropValue(propName: string | number): void {
this[settingPropEntrySymbol].clearPropValue(propName);
this[settingFieldSymbol].clearPropValue(propName);
}
/**
@ -194,7 +199,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @returns
*/
getDefaultValue(): any {
return this[settingPropEntrySymbol].getDefaultValue();
return this[settingFieldSymbol].getDefaultValue();
}
/**
@ -202,7 +207,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @returns
*/
getValue(): any {
return this[settingPropEntrySymbol].getValue();
return this[settingFieldSymbol].getValue();
}
/**
@ -211,21 +216,21 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @returns
*/
getPropValue(propName: string | number): any {
return this[settingPropEntrySymbol].getPropValue(propName);
return this[settingFieldSymbol].getPropValue(propName);
}
/**
*
*/
getExtraPropValue(propName: string): any {
return this[settingPropEntrySymbol].getExtraPropValue(propName);
return this[settingFieldSymbol].getExtraPropValue(propName);
}
/**
*
*/
setExtraPropValue(propName: string, value: any): void {
this[settingPropEntrySymbol].setExtraPropValue(propName, value);
this[settingFieldSymbol].setExtraPropValue(propName, value);
}
/**
@ -233,7 +238,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @returns
*/
getProps(): IPublicModelSettingTopEntry {
return ShellSettingTopEntry.create(this[settingPropEntrySymbol].getProps() as ISettingEntry);
return ShellSettingTopEntry.create(this[settingFieldSymbol].getProps());
}
/**
@ -241,7 +246,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @returns
*/
isUseVariable(): boolean {
return this[settingPropEntrySymbol].isUseVariable();
return this[settingFieldSymbol].isUseVariable();
}
/**
@ -249,7 +254,7 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param flag
*/
setUseVariable(flag: boolean): void {
this[settingPropEntrySymbol].setUseVariable(flag);
this[settingFieldSymbol].setUseVariable(flag);
}
/**
@ -257,8 +262,8 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param config
* @returns
*/
createField(config: IPublicTypeFieldConfig): IPublicModelSettingPropEntry {
return SettingPropEntry.create(this[settingPropEntrySymbol].createField(config));
createField(config: IPublicTypeFieldConfig): IPublicModelSettingField {
return SettingField.create(this[settingFieldSymbol].createField(config));
}
/**
@ -266,21 +271,21 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @returns
*/
getMockOrValue(): any {
return this[settingPropEntrySymbol].getMockOrValue();
return this[settingFieldSymbol].getMockOrValue();
}
/**
* field
*/
purge(): void {
this[settingPropEntrySymbol].purge();
this[settingFieldSymbol].purge();
}
/**
* field
*/
remove(): void {
this[settingPropEntrySymbol].remove();
this[settingFieldSymbol].remove();
}
/**
@ -288,15 +293,15 @@ export class SettingPropEntry implements IPublicModelSettingPropEntry {
* @param action
* @returns
*/
onEffect(action: () => void): () => void {
return this[settingPropEntrySymbol].onEffect(action);
onEffect(action: () => void): IPublicTypeDisposable {
return this[settingFieldSymbol].onEffect(action);
}
/**
* shell field shell field
* @returns
*/
internalToShellPropEntry() {
internalToShellField() {
return this;
}
}

View File

@ -1,17 +1,17 @@
import { ISettingEntry } from '@alilc/lowcode-designer';
import { ISettingTopEntry } from '@alilc/lowcode-designer';
import { settingTopEntrySymbol } from '../symbols';
import { Node as ShellNode } from './node';
import { SettingPropEntry as ShellSettingPropEntry } from './setting-prop-entry';
import { IPublicModelSettingTopEntry, IPublicModelNode, IPublicModelSettingPropEntry } from '@alilc/lowcode-types';
import { IPublicModelSettingTopEntry, IPublicModelNode, IPublicModelSettingField } from '@alilc/lowcode-types';
import { SettingField } from './setting-field';
export class SettingTopEntry implements IPublicModelSettingTopEntry {
private readonly [settingTopEntrySymbol]: ISettingEntry;
private readonly [settingTopEntrySymbol]: ISettingTopEntry;
constructor(prop: ISettingEntry) {
constructor(prop: ISettingTopEntry) {
this[settingTopEntrySymbol] = prop;
}
static create(prop: ISettingEntry): IPublicModelSettingTopEntry {
static create(prop: ISettingTopEntry): IPublicModelSettingTopEntry {
return new SettingTopEntry(prop);
}
@ -27,8 +27,8 @@ export class SettingTopEntry implements IPublicModelSettingTopEntry {
* @param propName
* @returns
*/
get(propName: string | number): IPublicModelSettingPropEntry {
return ShellSettingPropEntry.create(this[settingTopEntrySymbol].get(propName) as any);
get(propName: string | number): IPublicModelSettingField {
return SettingField.create(this[settingTopEntrySymbol].get(propName)!);
}
/**
@ -55,4 +55,8 @@ export class SettingTopEntry implements IPublicModelSettingTopEntry {
setPropValue(propName: string | number, value: any): void {
this[settingTopEntrySymbol].setPropValue(propName, value);
}
clearPropValue(propName: string | number) {
this[settingTopEntrySymbol].clearPropValue(propName);
}
}

View File

@ -10,7 +10,7 @@ export const nodeSymbol = Symbol('node');
export const modalNodesManagerSymbol = Symbol('modalNodesManager');
export const nodeChildrenSymbol = Symbol('nodeChildren');
export const propSymbol = Symbol('prop');
export const settingPropEntrySymbol = Symbol('settingPropEntry');
export const settingFieldSymbol = Symbol('settingField');
export const settingTopEntrySymbol = Symbol('settingTopEntry');
export const propsSymbol = Symbol('props');
export const detectingSymbol = Symbol('detecting');

View File

@ -1,8 +1,9 @@
import { IPublicModelSettingPropEntry, IPublicModelNode } from './shell';
import { IPublicModelNode, IPublicModelSettingField } from './shell';
export interface IShellModelFactory {
// TODO: 需要给 innerNode 提供一个 interface 并用在这里
createNode(node: any | null | undefined): IPublicModelNode | null;
// TODO: 需要给 InnerSettingField 提供一个 interface 并用在这里
createSettingPropEntry(prop: any): IPublicModelSettingPropEntry;
createSettingField(prop: any): IPublicModelSettingField;
}

View File

@ -29,5 +29,4 @@ export * from './plugin-instance';
export * from './sensor';
export * from './resource';
export * from './clipboard';
export * from './setting-entry';
export * from './setting-field';

View File

@ -1,5 +1,5 @@
import { IPublicTypeCompositeValue } from '../type';
import { IPublicModelNode } from './';
import { IPublicModelNode, IPublicModelProp } from './';
export interface IBaseModelProps<
Prop
@ -86,4 +86,4 @@ export interface IBaseModelProps<
}
export type IPublicModelProps = IBaseModelProps<IPublicModelProps>;
export interface IPublicModelProps extends IBaseModelProps<IPublicModelProp> {};

View File

@ -1,20 +0,0 @@
import { IPublicModelComponentMeta } from "./component-meta";
import { IPublicModelNode } from "./node";
import { IBaseModelSettingTarget } from "./setting-target";
export interface IBaseModelSettingEntry<
Node,
ComponentMeta,
SettingEntry
> extends IBaseModelSettingTarget<
SettingEntry
> {
readonly nodes: Node[];
readonly componentMeta: ComponentMeta | null;
}
export interface IPublicModelSettingEntry extends IBaseModelSettingEntry<
IPublicModelNode,
IPublicModelComponentMeta,
IPublicModelSettingEntry
> {}

View File

@ -1,5 +1,198 @@
import { IPublicModelSettingEntry } from "./setting-entry";
import { IPublicTypeCustomView, IPublicTypeCompositeValue, IPublicTypeSetterType, IPublicTypeSetValueOptions, IPublicTypeFieldConfig, IPublicTypeFieldExtraProps, IPublicTypeDisposable } from '../type';
import { IPublicModelNode, IPublicModelComponentMeta, IPublicModelSettingTopEntry } from './';
export interface IPublicModelSettingField extends IPublicModelSettingEntry {
export interface IBaseModelSettingField<
SettingTopEntry,
SettingField,
ComponentMeta,
Node
> {
/**
* isGroup
*/
get isGroup(): boolean;
/**
* id
*/
get id(): string;
/**
* name
*/
get name(): string | number | undefined;
/**
* key
*/
get key(): string | number | undefined;
/**
* path
*/
get path(): any[];
/**
* title
*/
get title(): any;
/**
* setter
*/
get setter(): IPublicTypeSetterType | null;
/**
* expanded
*/
get expanded(): boolean;
/**
* extraProps
*/
get extraProps(): IPublicTypeFieldExtraProps;
get props(): SettingTopEntry;
/**
*
*/
get node(): Node | null;
/**
*
*/
readonly parent: SettingTopEntry | SettingField;
/**
*
*/
get top(): SettingTopEntry;
/**
* SettingField
*/
get isSettingField(): boolean;
/**
* componentMeta
*/
get componentMeta(): ComponentMeta | null;
/**
* items
*/
get items(): Array<SettingField | IPublicTypeCustomView>;
/**
* key
* @param key
*/
setKey(key: string | number): void;
/**
*
* @param val
*/
setValue(val: IPublicTypeCompositeValue, extraOptions?: IPublicTypeSetValueOptions): void;
/**
*
* @param propName
* @param value
*/
setPropValue(propName: string | number, value: any): void;
/**
*
* @param propName
*/
clearPropValue(propName: string | number): void;
/**
*
* @returns
*/
getDefaultValue(): any;
/**
*
* @returns
*/
getValue(): any;
/**
*
* @param propName
* @returns
*/
getPropValue(propName: string | number): any;
/**
*
*/
getExtraPropValue(propName: string): any;
/**
*
*/
setExtraPropValue(propName: string, value: any): void;
/**
*
* @returns
*/
getProps(): SettingTopEntry;
/**
*
* @returns
*/
isUseVariable(): boolean;
/**
*
* @param flag
*/
setUseVariable(flag: boolean): void;
/**
* field
* @param config
* @returns
*/
createField(config: IPublicTypeFieldConfig): SettingField;
/**
* mock
* @returns
*/
getMockOrValue(): any;
/**
* field
*/
purge(): void;
/**
* field
*/
remove(): void;
/**
* autorun
* @param action
* @returns
*/
onEffect(action: () => void): IPublicTypeDisposable;
}
export interface IPublicModelSettingField extends IBaseModelSettingField<
IPublicModelSettingTopEntry,
IPublicModelSettingField,
IPublicModelComponentMeta,
IPublicModelNode
> {
}

View File

@ -1,184 +1,6 @@
import { IPublicTypeCustomView, IPublicTypeCompositeValue, IPublicTypeSetterType, IPublicTypeSetValueOptions, IPublicTypeFieldConfig, IPublicTypeFieldExtraProps } from '../type';
import { IPublicModelNode, IPublicModelComponentMeta, IPublicModelSettingTopEntry } from './';
import { IPublicModelSettingField } from './';
export interface IPublicModelSettingPropEntry {
/**
* isGroup
*/
get isGroup(): boolean;
/**
* id
*/
get id(): string;
/**
* name
*/
get name(): string | number;
/**
* key
*/
get key(): string | number;
/**
* path
*/
get path(): any[];
/**
* title
*/
get title(): any;
/**
* setter
*/
get setter(): IPublicTypeSetterType | null;
/**
* expanded
*/
get expanded(): boolean;
/**
* extraProps
*/
get extraProps(): IPublicTypeFieldExtraProps;
get props(): IPublicModelSettingTopEntry;
/**
*
*/
get node(): IPublicModelNode | null;
/**
*
*/
get parent(): IPublicModelSettingPropEntry;
/**
*
*/
get top(): IPublicModelSettingTopEntry;
/**
* SettingField
*/
get isSettingField(): boolean;
/**
* componentMeta
*/
get componentMeta(): IPublicModelComponentMeta | null;
/**
* items
*/
get items(): Array<IPublicModelSettingPropEntry | IPublicTypeCustomView>;
/**
* key
* @param key
*/
setKey(key: string | number): void;
/**
*
* @param val
*/
setValue(val: IPublicTypeCompositeValue, extraOptions?: IPublicTypeSetValueOptions): void;
/**
*
* @param propName
* @param value
*/
setPropValue(propName: string | number, value: any): void;
/**
*
* @param propName
*/
clearPropValue(propName: string | number): void;
/**
*
* @returns
*/
getDefaultValue(): any;
/**
*
* @returns
*/
getValue(): any;
/**
*
* @param propName
* @returns
*/
getPropValue(propName: string | number): any;
/**
*
*/
getExtraPropValue(propName: string): any;
/**
*
*/
setExtraPropValue(propName: string, value: any): void;
/**
*
* @returns
*/
getProps(): IPublicModelSettingTopEntry;
/**
*
* @returns
*/
isUseVariable(): boolean;
/**
*
* @param flag
*/
setUseVariable(flag: boolean): void;
/**
* field
* @param config
* @returns
*/
createField(config: IPublicTypeFieldConfig): IPublicModelSettingPropEntry;
/**
* mock
* @returns
*/
getMockOrValue(): any;
/**
* field
*/
purge(): void;
/**
* field
*/
remove(): void;
/**
* autorun
* @param action
* @returns
*/
onEffect(action: () => void): () => void;
}
/**
* @deprecated please use IPublicModelSettingField
*/
export type IPublicModelSettingPropEntry = IPublicModelSettingField

View File

@ -1,101 +1,6 @@
import { IPublicApiSetters } from '../api';
import { IPublicModelEditor } from './';
import { IPublicModelSettingField } from './';
export interface IBaseModelSettingTarget<
SettingTarget
> {
/**
*
*/
readonly isSameComponent: boolean;
/**
*
*/
readonly isSingle: boolean;
/**
*
*/
readonly isMultiple: boolean;
/**
*
*/
readonly editor: IPublicModelEditor;
readonly setters: IPublicApiSetters;
/**
* 访
*/
readonly path: Array<string| number>;
/**
*
*/
readonly top: SettingTarget;
/**
*
*/
readonly parent: SettingTarget;
/**
*
*/
getValue: () => any;
/**
*
*/
setValue: (value: any) => void;
/**
*
*/
get: (propName: string | number) => SettingTarget | null;
/**
*
*/
getProps?: () => SettingTarget;
/**
*
*/
getPropValue: (propName: string | number) => any;
/**
*
*/
setPropValue: (propName: string | number, value: any) => void;
/**
*
*/
clearPropValue: (propName: string | number) => void;
/**
*
*/
getExtraPropValue: (propName: string) => any;
/**
*
*/
setExtraPropValue: (propName: string, value: any) => void;
// @todo 补充 node 定义
/**
* node
*/
getNode: () => any;
}
export interface IPublicModelSettingTarget extends IBaseModelSettingTarget<
IPublicModelSettingTarget
> {
}
/**
* @deprecated please use IPublicModelSettingField
*/
export type IPublicModelSettingTarget = IPublicModelSettingField;

View File

@ -1,18 +1,21 @@
import { IPublicModelNode, IPublicModelSettingPropEntry } from './';
import { IPublicModelNode, IPublicModelSettingField } from './';
export interface IPublicModelSettingTopEntry {
export interface IPublicModelSettingTopEntry<
Node = IPublicModelNode,
SettingField = IPublicModelSettingField
> {
/**
*
*/
get node(): IPublicModelNode | null;
get node(): Node | null;
/**
*
* @param propName
* @returns
*/
get(propName: string | number): IPublicModelSettingPropEntry;
get(propName: string | number): SettingField | null;
/**
* propName
@ -27,4 +30,10 @@ export interface IPublicModelSettingTopEntry {
* @param value
*/
setPropValue(propName: string | number, value: any): void;
/**
* propName
* @param propName
*/
clearPropValue(propName: string | number): void;
}

View File

@ -1,6 +1,6 @@
import { ComponentType, ReactElement } from 'react';
import { IPublicTypeNodeData, IPublicTypeSnippet, IPublicTypeInitialItem, IPublicTypeFilterItem, IPublicTypeAutorunItem, IPublicTypeCallbacks, IPublicTypeLiveTextEditingConfig } from './';
import { IPublicModelSettingTarget } from '../model';
import { IPublicModelNode, IPublicModelSettingField } from '../model';
/**
*
@ -17,7 +17,7 @@ export interface IPublicTypeAdvanced {
/**
* children
*/
initialChildren?: IPublicTypeNodeData[] | ((target: IPublicModelSettingTarget) => IPublicTypeNodeData[]);
initialChildren?: IPublicTypeNodeData[] | ((target: IPublicModelNode) => IPublicTypeNodeData[]);
/**
* handle 便

View File

@ -1,3 +1,3 @@
import { IPublicModelSettingTarget } from '../model/setting-target';
import { IPublicModelSettingField } from '../model';
export type IPublicTypeDynamicProps = (target: IPublicModelSettingTarget) => Record<string, unknown>;
export type IPublicTypeDynamicProps = (target: IPublicModelSettingField) => Record<string, unknown>;

View File

@ -1,4 +1,4 @@
import { IPublicModelSettingPropEntry, IPublicModelSettingTarget } from '../model';
import { IPublicModelSettingField } from '../model';
import { IPublicTypeLiveTextEditingConfig } from './';
/**
@ -19,28 +19,28 @@ export interface IPublicTypeFieldExtraProps {
/**
* get value for field
*/
getValue?: (target: IPublicModelSettingPropEntry, fieldValue: any) => any;
getValue?: (target: IPublicModelSettingField, fieldValue: any) => any;
/**
* set value for field
*/
setValue?: (target: IPublicModelSettingPropEntry, value: any) => void;
setValue?: (target: IPublicModelSettingField, value: any) => void;
/**
* the field conditional show, is not set always true
* @default undefined
*/
condition?: (target: IPublicModelSettingPropEntry) => boolean;
condition?: (target: IPublicModelSettingField) => boolean;
/**
* autorun when something change
*/
autorun?: (target: IPublicModelSettingTarget) => void;
autorun?: (target: IPublicModelSettingField) => void;
/**
* is this field is a virtual field that not save to schema
*/
virtual?: (target: IPublicModelSettingTarget) => boolean;
virtual?: (target: IPublicModelSettingField) => boolean;
/**
* default collapsed when display accordion

View File

@ -1,5 +1,5 @@
import { IPublicTypePropType, IPublicTypeComponentAction } from './';
import { IPublicModelNode, IPublicModelProp, IPublicModelSettingTarget } from '../model';
import { IPublicModelNode, IPublicModelProp, IPublicModelSettingField } from '../model';
/**
*
@ -93,11 +93,11 @@ export interface IPublicTypeComponentConfigure {
export interface IPublicTypeInitialItem {
name: string;
initial: (target: IPublicModelSettingTarget, currentValue: any) => any;
initial: (target: IPublicModelSettingField, currentValue: any) => any;
}
export interface IPublicTypeFilterItem {
name: string;
filter: (target: IPublicModelSettingTarget | null, currentValue: any) => any;
filter: (target: IPublicModelSettingField | null, currentValue: any) => any;
}
export interface IPublicTypeAutorunItem {
name: string;

View File

@ -1,5 +1,4 @@
import { IPublicModelSettingTarget } from '../model/setting-target';
import { IPublicTypeCustomView, IPublicTypeCompositeValue, IPublicTypeTitleContent } from '..';
import { IPublicTypeCustomView, IPublicTypeCompositeValue, IPublicTypeTitleContent, IPublicModelSettingField } from '..';
import { IPublicTypeDynamicProps } from './dynamic-props';
/**
@ -37,7 +36,7 @@ export interface IPublicTypeSetterConfig {
*
* @todo initialValue defaultValue
*/
initialValue?: any | ((target: IPublicModelSettingTarget) => any);
initialValue?: any | ((target: IPublicModelSettingField) => any);
defaultValue?: any;
@ -51,7 +50,7 @@ export interface IPublicTypeSetterConfig {
/**
* MixedSetter
*/
condition?: (target: IPublicModelSettingTarget) => boolean;
condition?: (target: IPublicModelSettingField) => boolean;
/**
* MixedSetter