Skip to content

Commit aab8a3a

Browse files
liujupingJackLian
authored andcommitted
feat: update setter types
1 parent 4a18f71 commit aab8a3a

File tree

4 files changed

+36
-19
lines changed

4 files changed

+36
-19
lines changed

packages/editor-core/src/di/setter.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { ReactNode } from 'react';
2-
import { IPublicTypeCustomView, IPublicTypeRegisteredSetter } from '@alilc/lowcode-types';
2+
import { IPublicApiSetters, IPublicTypeCustomView, IPublicTypeRegisteredSetter } from '@alilc/lowcode-types';
33
import { createContent, isCustomView } from '@alilc/lowcode-utils';
44

5-
65
const settersMap = new Map<string, IPublicTypeRegisteredSetter & {
76
type: string;
87
}>();
@@ -44,13 +43,17 @@ function getInitialFromSetter(setter: any) {
4443
) || null; // eslint-disable-line
4544
}
4645

47-
export class Setters {
48-
constructor(readonly viewName: string = 'global') {}
46+
export interface ISetters extends IPublicApiSetters {
47+
48+
}
4949

50+
export class Setters implements ISetters {
5051
settersMap = new Map<string, IPublicTypeRegisteredSetter & {
5152
type: string;
5253
}>();
5354

55+
constructor(readonly viewName: string = 'global') {}
56+
5457
getSetter = (type: string): IPublicTypeRegisteredSetter | null => {
5558
return this.settersMap.get(type) || null;
5659
};

packages/editor-skeleton/src/components/settings/settings-pane.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import { Component, MouseEvent, Fragment } from 'react';
1+
import { Component, MouseEvent, Fragment, ReactNode } from 'react';
22
import { shallowIntl, observer, obx, engineConfig, runInAction } from '@alilc/lowcode-editor-core';
33
import { createContent, isJSSlot, isSetterConfig } from '@alilc/lowcode-utils';
44
import { Skeleton, Stage } from '@alilc/lowcode-editor-skeleton';
5-
import { IPublicTypeCustomView } from '@alilc/lowcode-types';
5+
import { IPublicApiSetters, IPublicTypeCustomView, IPublicTypeDynamicProps } from '@alilc/lowcode-types';
66
import { ISettingEntry, IComponentMeta, ISettingField, isSettingField, ISettingTopEntry } from '@alilc/lowcode-designer';
77
import { createField } from '../field';
88
import PopupService, { PopupPipe } from '../popup';
99
import { SkeletonContext } from '../../context';
1010
import { intl } from '../../locale';
11-
import { Setters } from '@alilc/lowcode-shell';
1211

1312
function isStandardComponent(componentMeta: IComponentMeta | null) {
1413
if (!componentMeta) return false;
@@ -40,7 +39,7 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
4039

4140
stageName: string | undefined;
4241

43-
setters?: Setters;
42+
setters?: IPublicApiSetters;
4443

4544
constructor(props: SettingFieldViewProps) {
4645
super(props);
@@ -112,7 +111,9 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
112111
const { defaultValue } = extraProps;
113112

114113
const { setter } = this.field;
115-
let setterProps: any = {};
114+
let setterProps: {
115+
setters?: (ReactNode | string)[];
116+
} & Record<string, unknown> | IPublicTypeDynamicProps = {};
116117
let setterType: any;
117118
let initialValue: any = null;
118119

@@ -236,7 +237,7 @@ class SettingFieldView extends Component<SettingFieldViewProps, SettingFieldView
236237
...extraProps,
237238
},
238239
!stageName &&
239-
this.setters.createSetterContent(setterType, {
240+
this.setters?.createSetterContent(setterType, {
240241
...shallowIntl(setterProps),
241242
forceInline: extraProps.forceInline,
242243
key: field.id,

packages/shell/src/api/setters.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { IPublicTypeCustomView, IPublicApiSetters, IPublicTypeRegisteredSetter } from '@alilc/lowcode-types';
2-
import { Setters as InnerSetters, globalContext } from '@alilc/lowcode-editor-core';
2+
import { ISetters, globalContext, untracked } from '@alilc/lowcode-editor-core';
33
import { ReactNode } from 'react';
44
import { getLogger } from '@alilc/lowcode-utils';
55

@@ -9,26 +9,28 @@ const settersSymbol = Symbol('setters');
99
const logger = getLogger({ level: 'warn', bizName: 'shell-setters' });
1010

1111
export class Setters implements IPublicApiSetters {
12-
readonly [innerSettersSymbol]: InnerSetters;
12+
readonly [innerSettersSymbol]: ISetters;
1313

14-
get [settersSymbol](): InnerSetters {
14+
get [settersSymbol](): ISetters {
1515
if (this.workspaceMode) {
1616
return this[innerSettersSymbol];
1717
}
1818

1919
const workspace = globalContext.get('workspace');
2020
if (workspace.isActive) {
21-
if (!workspace.window.innerSetters) {
22-
logger.error('setter api 调用时机出现问题,请检查');
23-
return this[innerSettersSymbol];
24-
}
25-
return workspace.window.innerSetters;
21+
return untracked(() => {
22+
if (!workspace.window.innerSetters) {
23+
logger.error('setter api 调用时机出现问题,请检查');
24+
return this[innerSettersSymbol];
25+
}
26+
return workspace.window.innerSetters;
27+
});
2628
}
2729

2830
return this[innerSettersSymbol];
2931
}
3032

31-
constructor(innerSetters: InnerSetters, readonly workspaceMode = false) {
33+
constructor(innerSetters: ISetters, readonly workspaceMode = false) {
3234
this[innerSettersSymbol] = innerSetters;
3335
}
3436

@@ -64,6 +66,9 @@ export class Setters implements IPublicApiSetters {
6466
return this[settersSymbol].registerSetter(typeOrMaps, setter);
6567
};
6668

69+
/**
70+
* @deprecated
71+
*/
6772
createSetterContent = (setter: any, props: Record<string, any>): ReactNode => {
6873
return this[settersSymbol].createSetterContent(setter, props);
6974
};

packages/types/src/shell/api/setters.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import { ReactNode } from 'react';
2+
13
import { IPublicTypeRegisteredSetter, IPublicTypeCustomView } from '../type';
24

35
export interface IPublicApiSetters {
6+
47
/**
58
* 获取指定 setter
69
* get setter by type
@@ -29,4 +32,9 @@ export interface IPublicApiSetters {
2932
typeOrMaps: string | { [key: string]: IPublicTypeCustomView | IPublicTypeRegisteredSetter },
3033
setter?: IPublicTypeCustomView | IPublicTypeRegisteredSetter | undefined
3134
): void;
35+
36+
/**
37+
* @deprecated
38+
*/
39+
createSetterContent (setter: any, props: Record<string, any>): ReactNode;
3240
}

0 commit comments

Comments
 (0)