mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 03:01:16 +00:00
feat: field suport change JSExpression value
This commit is contained in:
parent
4f7a0b984c
commit
e1864fdf71
@ -16,7 +16,7 @@ import type {
|
|||||||
import { Transducer } from './utils';
|
import { Transducer } from './utils';
|
||||||
import { ISettingPropEntry, SettingPropEntry } from './setting-prop-entry';
|
import { ISettingPropEntry, SettingPropEntry } from './setting-prop-entry';
|
||||||
import { computed, obx, makeObservable, action, untracked, intl } from '@alilc/lowcode-editor-core';
|
import { computed, obx, makeObservable, action, untracked, intl } from '@alilc/lowcode-editor-core';
|
||||||
import { cloneDeep, isCustomView, isDynamicSetter } from '@alilc/lowcode-utils';
|
import { cloneDeep, isCustomView, isDynamicSetter, isJSExpression } from '@alilc/lowcode-utils';
|
||||||
import { ISettingTopEntry } from './setting-top-entry';
|
import { ISettingTopEntry } from './setting-top-entry';
|
||||||
import { IComponentMeta, INode } from '@alilc/lowcode-designer';
|
import { IComponentMeta, INode } from '@alilc/lowcode-designer';
|
||||||
|
|
||||||
@ -38,28 +38,28 @@ export interface ISettingField extends ISettingPropEntry, Omit<IBaseModelSetting
|
|||||||
IComponentMeta,
|
IComponentMeta,
|
||||||
INode
|
INode
|
||||||
>, 'setValue' | 'key' | 'node'> {
|
>, 'setValue' | 'key' | 'node'> {
|
||||||
get items(): Array<ISettingField | IPublicTypeCustomView>;
|
|
||||||
|
|
||||||
get title(): string | ReactNode | undefined;
|
|
||||||
|
|
||||||
readonly isSettingField: true;
|
readonly isSettingField: true;
|
||||||
|
|
||||||
purge(): void;
|
|
||||||
|
|
||||||
extraProps: IPublicTypeFieldExtraProps;
|
|
||||||
|
|
||||||
get setter(): IPublicTypeSetterType | null;
|
|
||||||
|
|
||||||
get expanded(): boolean;
|
|
||||||
|
|
||||||
readonly isRequired: boolean;
|
readonly isRequired: boolean;
|
||||||
|
|
||||||
readonly isGroup: boolean;
|
readonly isGroup: boolean;
|
||||||
|
|
||||||
|
extraProps: IPublicTypeFieldExtraProps;
|
||||||
|
|
||||||
|
get items(): Array<ISettingField | IPublicTypeCustomView>;
|
||||||
|
|
||||||
|
get title(): string | ReactNode | undefined;
|
||||||
|
|
||||||
|
get setter(): IPublicTypeSetterType | null;
|
||||||
|
|
||||||
|
get expanded(): boolean;
|
||||||
|
|
||||||
get valueState(): number;
|
get valueState(): number;
|
||||||
|
|
||||||
setExpanded(value: boolean): void;
|
setExpanded(value: boolean): void;
|
||||||
|
|
||||||
|
purge(): void;
|
||||||
|
|
||||||
setValue(
|
setValue(
|
||||||
val: any,
|
val: any,
|
||||||
isHotValue?: boolean,
|
isHotValue?: boolean,
|
||||||
@ -271,16 +271,29 @@ export class SettingField extends SettingPropEntry implements ISettingField {
|
|||||||
}
|
}
|
||||||
if (this.isUseVariable()) {
|
if (this.isUseVariable()) {
|
||||||
const oldValue = this.getValue();
|
const oldValue = this.getValue();
|
||||||
this.setValue(
|
if (isJSExpression(value)) {
|
||||||
{
|
this.setValue(
|
||||||
type: 'JSExpression',
|
{
|
||||||
value: oldValue.value,
|
type: 'JSExpression',
|
||||||
mock: value,
|
value: value.value,
|
||||||
},
|
mock: oldValue.mock,
|
||||||
false,
|
},
|
||||||
false,
|
false,
|
||||||
options,
|
false,
|
||||||
);
|
options,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.setValue(
|
||||||
|
{
|
||||||
|
type: 'JSExpression',
|
||||||
|
value: oldValue.value,
|
||||||
|
mock: value,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
options,
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.setValue(value, false, false, options);
|
this.setValue(value, false, false, options);
|
||||||
}
|
}
|
||||||
@ -297,7 +310,6 @@ export class SettingField extends SettingPropEntry implements ISettingField {
|
|||||||
return this.designer!.autorun(action, true);
|
return this.designer!.autorun(action, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internalToShellField() {
|
internalToShellField() {
|
||||||
return this.designer!.shellModelFactory.createSettingField(this);
|
return this.designer!.shellModelFactory.createSettingField(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -168,6 +168,40 @@ describe('setting-field 测试', () => {
|
|||||||
expect(arrField.getHotValue()).toEqual([undefined, {name: '2'}, {name: '3'}]);
|
expect(arrField.getHotValue()).toEqual([undefined, {name: '2'}, {name: '3'}]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('js expression setValue / setHotValue', () => {
|
||||||
|
const settingEntry = mockNode.settingEntry;
|
||||||
|
const field = settingEntry.get('behavior');
|
||||||
|
|
||||||
|
const subField = field.createField({
|
||||||
|
name: 'sub',
|
||||||
|
title: 'sub',
|
||||||
|
});
|
||||||
|
subField.setValue({
|
||||||
|
type: 'JSExpression',
|
||||||
|
value: 'state.a',
|
||||||
|
mock: 'haha',
|
||||||
|
});
|
||||||
|
|
||||||
|
subField.setHotValue({
|
||||||
|
type: 'JSExpression',
|
||||||
|
value: 'state.b',
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(subField.getValue()).toEqual({
|
||||||
|
type: 'JSExpression',
|
||||||
|
value: 'state.b',
|
||||||
|
mock: 'haha',
|
||||||
|
});
|
||||||
|
|
||||||
|
subField.setHotValue('mock02');
|
||||||
|
|
||||||
|
expect(subField.getValue()).toEqual({
|
||||||
|
type: 'JSExpression',
|
||||||
|
value: 'state.b',
|
||||||
|
mock: 'mock02',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('onEffect', async () => {
|
it('onEffect', async () => {
|
||||||
const settingEntry = mockNode.settingEntry as SettingTopEntry;
|
const settingEntry = mockNode.settingEntry as SettingTopEntry;
|
||||||
const field = settingEntry.get('behavior');
|
const field = settingEntry.get('behavior');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user