mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-19 05:48:17 +00:00
feat: array/object setter support getValue & setValue
This commit is contained in:
parent
bb4d200484
commit
3175745e5e
@ -20,11 +20,12 @@ interface ArraySetterProps {
|
|||||||
itemSetter?: SetterType;
|
itemSetter?: SetterType;
|
||||||
columns?: FieldConfig[];
|
columns?: FieldConfig[];
|
||||||
multiValue?: boolean;
|
multiValue?: boolean;
|
||||||
|
onChange?: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
||||||
static getDerivedStateFromProps(props: ArraySetterProps, state: ArraySetterState) {
|
static getDerivedStateFromProps(props: ArraySetterProps, state: ArraySetterState) {
|
||||||
const { value, field } = props;
|
const { value, field, onChange } = props;
|
||||||
const newLength = value && Array.isArray(value) ? value.length : 0;
|
const newLength = value && Array.isArray(value) ? value.length : 0;
|
||||||
if (state && state.prevLength === newLength) {
|
if (state && state.prevLength === newLength) {
|
||||||
return null;
|
return null;
|
||||||
@ -47,7 +48,9 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
setter: props.itemSetter,
|
setter: props.itemSetter,
|
||||||
// FIXME:
|
// FIXME:
|
||||||
forceInline: 1,
|
forceInline: 1,
|
||||||
|
setValue: () => setTimeout(() => ListSetter.onItemChange(onChange, items)),
|
||||||
});
|
});
|
||||||
|
item.setValue(value[i]);
|
||||||
items[i] = item;
|
items[i] = item;
|
||||||
itemsMap.set(item.id, item);
|
itemsMap.set(item.id, item);
|
||||||
}
|
}
|
||||||
@ -57,7 +60,7 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
itemsMap.delete(item.id);
|
itemsMap.delete(item.id);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
ListSetter.onItemChange(onChange, items);
|
||||||
return {
|
return {
|
||||||
items,
|
items,
|
||||||
itemsMap,
|
itemsMap,
|
||||||
@ -71,6 +74,13 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
prevLength: 0,
|
prevLength: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static onItemChange(onChange: Function|undefined, items: Array<SettingField>) {
|
||||||
|
onChange && onChange(items.map(item => {
|
||||||
|
return item && item.getValue();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
onSort(sortedIds: Array<string | number>) {
|
onSort(sortedIds: Array<string | number>) {
|
||||||
const { itemsMap } = this.state;
|
const { itemsMap } = this.state;
|
||||||
const { onChange, itemSetter, field } = this.props;
|
const { onChange, itemSetter, field } = this.props;
|
||||||
@ -80,12 +90,8 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
|
|
||||||
const values = items.map((item) => {
|
|
||||||
return item.getValue();
|
|
||||||
});
|
|
||||||
|
|
||||||
// 对itemsMap重新生成并刷新当前setter数据
|
// 对itemsMap重新生成并刷新当前setter数据
|
||||||
const newItems = [];
|
const newItems: Array<SettingField> = [];
|
||||||
// const newItemsMap = {};
|
// const newItemsMap = {};
|
||||||
itemsMap.clear();
|
itemsMap.clear();
|
||||||
for (let i = 0; i < items.length; i++) {
|
for (let i = 0; i < items.length; i++) {
|
||||||
@ -94,13 +100,14 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
setter: itemSetter,
|
setter: itemSetter,
|
||||||
// FIXME:
|
// FIXME:
|
||||||
forceInline: 1,
|
forceInline: 1,
|
||||||
|
setValue: () => ListSetter.onItemChange(onChange, newItems),
|
||||||
});
|
});
|
||||||
newItems[i] = newItem;
|
newItems[i] = newItem;
|
||||||
|
|
||||||
itemsMap.set(newItem.id, newItem);
|
itemsMap.set(newItem.id, newItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
onChange(values);
|
ListSetter.onItemChange(onChange, items);
|
||||||
this.setState({
|
this.setState({
|
||||||
items: newItems,
|
items: newItems,
|
||||||
itemsMap,
|
itemsMap,
|
||||||
@ -111,18 +118,20 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
|
|
||||||
onAdd() {
|
onAdd() {
|
||||||
const { items, itemsMap } = this.state;
|
const { items, itemsMap } = this.state;
|
||||||
const { itemSetter } = this.props;
|
const { itemSetter, onChange } = this.props;
|
||||||
const initialValue = typeof itemSetter === 'object' ? (itemSetter as any).initialValue : null;
|
const initialValue = typeof itemSetter === 'object' ? (itemSetter as any).initialValue : null;
|
||||||
const item = this.props.field.createField({
|
const item = this.props.field.createField({
|
||||||
name: items.length,
|
name: items.length,
|
||||||
setter: itemSetter,
|
setter: itemSetter,
|
||||||
// FIXME:
|
// FIXME:
|
||||||
forceInline: 1,
|
forceInline: 1,
|
||||||
|
setValue: () => ListSetter.onItemChange(onChange, items),
|
||||||
});
|
});
|
||||||
items.push(item);
|
items.push(item);
|
||||||
itemsMap.set(item.id, item);
|
itemsMap.set(item.id, item);
|
||||||
item.setValue(typeof initialValue === 'function' ? initialValue(item) : initialValue);
|
item.setValue(typeof initialValue === 'function' ? initialValue(item) : initialValue);
|
||||||
this.scrollToLast = true;
|
this.scrollToLast = true;
|
||||||
|
ListSetter.onItemChange(onChange, items);
|
||||||
this.setState({
|
this.setState({
|
||||||
items: items.slice(),
|
items: items.slice(),
|
||||||
});
|
});
|
||||||
@ -147,7 +156,7 @@ export class ListSetter extends Component<ArraySetterProps, ArraySetterState> {
|
|||||||
}
|
}
|
||||||
itemsMap.delete(field.id);
|
itemsMap.delete(field.id);
|
||||||
field.remove();
|
field.remove();
|
||||||
onChange(values);
|
onChange && onChange(values);
|
||||||
this.setState({ items: items.slice() });
|
this.setState({ items: items.slice() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -164,7 +164,11 @@ class FormSetter extends Component<FormSetterProps> {
|
|||||||
constructor(props: RowSetterProps) {
|
constructor(props: RowSetterProps) {
|
||||||
super(props);
|
super(props);
|
||||||
const { config, field } = props;
|
const { config, field } = props;
|
||||||
this.items = (config?.items || []).map((conf) => field.createField(conf));
|
const { extraProps } = field;
|
||||||
|
this.items = (config?.items || []).map((conf) => field.createField({
|
||||||
|
...conf,
|
||||||
|
setValue: extraProps?.setValue,
|
||||||
|
}));
|
||||||
|
|
||||||
// TODO: extraConfig for custom fields
|
// TODO: extraConfig for custom fields
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user