fix: dynamic component switching error
This commit is contained in:
parent
139ca9a635
commit
8113748f26
@ -1,6 +1,7 @@
|
||||
import { useField } from '@formily/react';
|
||||
import { merge } from '@formily/shared';
|
||||
import flat from 'flat';
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
import get from 'lodash/get';
|
||||
import { useContext, useEffect } from 'react';
|
||||
import { FilterContext, FilterLogicContext } from './context';
|
||||
@ -35,7 +36,7 @@ export const useValues = () => {
|
||||
if (!path) {
|
||||
return;
|
||||
}
|
||||
const [fieldPath, otherPath] = path.split('.$');
|
||||
const [fieldPath = '', otherPath = ''] = path.split('.$');
|
||||
const [operatorValue] = otherPath.split('.', 2);
|
||||
const dataIndex = fieldPath.split('.');
|
||||
const option = findOption(dataIndex, options);
|
||||
@ -57,7 +58,9 @@ export const useValues = () => {
|
||||
field.data = field.data || {};
|
||||
field.data.operators = option?.operators;
|
||||
field.data.operator = operator;
|
||||
field.data.schema = merge(option?.schema, operator?.schema);
|
||||
const s1 = cloneDeep(option?.schema);
|
||||
const s2 = cloneDeep(operator?.schema);
|
||||
field.data.schema = merge(s1, s2);
|
||||
field.data.dataIndex = dataIndex;
|
||||
field.data.value = null;
|
||||
data2value();
|
||||
@ -65,7 +68,10 @@ export const useValues = () => {
|
||||
setOperator(operatorValue) {
|
||||
const operator = field.data?.operators?.find?.((item) => item.value === operatorValue);
|
||||
field.data.operator = operator;
|
||||
field.data.schema = merge(field.data.schema, operator.schema);
|
||||
const option = findOption(field.data.dataIndex, options);
|
||||
const s1 = cloneDeep(option?.schema);
|
||||
const s2 = cloneDeep(operator?.schema);
|
||||
field.data.schema = merge(s1, s2);
|
||||
field.data.value = operator.noValue ? operator.default || true : null;
|
||||
data2value();
|
||||
},
|
||||
|
@ -69,9 +69,14 @@ const filterOption = (input, option) => (option?.label ?? '').toLowerCase().incl
|
||||
|
||||
const InternalSelect = connect(
|
||||
(props: Props) => {
|
||||
const { objectValue, ...others } = props;
|
||||
const { objectValue, value, ...others } = props;
|
||||
const mode = props.mode || props.multiple ? 'multiple' : undefined;
|
||||
|
||||
const toValue = (v) => {
|
||||
if (['multiple', 'tags'].includes(mode)) {
|
||||
return v || [];
|
||||
}
|
||||
return v;
|
||||
};
|
||||
if (objectValue) {
|
||||
return <ObjectSelect {...others} mode={mode} />;
|
||||
}
|
||||
@ -80,6 +85,7 @@ const InternalSelect = connect(
|
||||
showSearch
|
||||
filterOption={filterOption}
|
||||
allowClear
|
||||
value={toValue(value)}
|
||||
{...others}
|
||||
onChange={(changed) => {
|
||||
props.onChange?.(changed === undefined ? null : changed);
|
||||
|
Loading…
Reference in New Issue
Block a user