fix(数据表): 树数据表-级联修复,修复级联选择编辑无显示 (#1583)
Reviewed-on: daoyoucloud/tachybase#1583 Co-authored-by: wjh <wwwjh0710@163.com> Co-committed-by: wjh <wwwjh0710@163.com>
This commit is contained in:
		
							parent
							
								
									4cda546880
								
							
						
					
					
						commit
						725e31871c
					
				@ -45,6 +45,7 @@ const CascadeSelect = connect((props) => {
 | 
			
		||||
  const resource = api.resource(collectionField.target);
 | 
			
		||||
  const { getCollectionJoinField, getInterface } = useCollectionManager_deprecated();
 | 
			
		||||
  const fieldNames = associationField?.componentProps?.fieldNames;
 | 
			
		||||
  const [change, setChange] = useState(false);
 | 
			
		||||
  const targetField =
 | 
			
		||||
    collectionField?.target &&
 | 
			
		||||
    fieldNames?.label &&
 | 
			
		||||
@ -57,7 +58,7 @@ const CascadeSelect = connect((props) => {
 | 
			
		||||
  }, [targetField]);
 | 
			
		||||
  const field: any = useField();
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    if (value) {
 | 
			
		||||
    if (value && !change) {
 | 
			
		||||
      const values = Array.isArray(value)
 | 
			
		||||
        ? extractLastNonNullValueObjects(
 | 
			
		||||
            value?.filter((v) => v.value),
 | 
			
		||||
@ -73,7 +74,7 @@ const CascadeSelect = connect((props) => {
 | 
			
		||||
      });
 | 
			
		||||
      setSelectedOptions(options);
 | 
			
		||||
    }
 | 
			
		||||
  }, []);
 | 
			
		||||
  }, [value]);
 | 
			
		||||
  const mapOptionsToTags = useCallback(
 | 
			
		||||
    (options) => {
 | 
			
		||||
      try {
 | 
			
		||||
@ -140,6 +141,7 @@ const CascadeSelect = connect((props) => {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const handleSelect = async (value, option, index) => {
 | 
			
		||||
    setChange(true);
 | 
			
		||||
    const data = await handleGetOptions({ parentId: option?.id });
 | 
			
		||||
    const options = [...selectedOptions];
 | 
			
		||||
    options.splice(index + 1);
 | 
			
		||||
@ -272,6 +274,13 @@ export const InternalCascadeSelect = observer(
 | 
			
		||||
      return [{}];
 | 
			
		||||
    };
 | 
			
		||||
    const defaultValue = toValue();
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
      const isChange = selectForm.values?.select_array?.filter((value) => value && Object.keys(value).length);
 | 
			
		||||
      if (collectionField.interface !== 'm2o' && props.value && !isChange.length) {
 | 
			
		||||
        const value = extractLastNonNullValueObjects(defaultValue).filter((v) => v && Object.keys(v).length > 0);
 | 
			
		||||
        selectForm.setValues({ select_array: value });
 | 
			
		||||
      }
 | 
			
		||||
    }, [props.value]);
 | 
			
		||||
    const schema = {
 | 
			
		||||
      type: 'object',
 | 
			
		||||
      properties: {
 | 
			
		||||
@ -315,26 +324,24 @@ export const InternalCascadeSelect = observer(
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
    return (
 | 
			
		||||
      props.value !== null && (
 | 
			
		||||
        <FormProvider form={selectForm}>
 | 
			
		||||
          {collectionField.interface === 'm2o' ? (
 | 
			
		||||
            <SchemaComponent
 | 
			
		||||
              components={{ FormItem }}
 | 
			
		||||
              schema={{
 | 
			
		||||
                ...fieldSchema,
 | 
			
		||||
                default: field.value,
 | 
			
		||||
                title: '',
 | 
			
		||||
                'x-component': AssociationCascadeSelect,
 | 
			
		||||
                'x-component-props': {
 | 
			
		||||
                  ...props,
 | 
			
		||||
                },
 | 
			
		||||
              }}
 | 
			
		||||
            />
 | 
			
		||||
          ) : (
 | 
			
		||||
            <SchemaField schema={schema} />
 | 
			
		||||
          )}
 | 
			
		||||
        </FormProvider>
 | 
			
		||||
      )
 | 
			
		||||
      <FormProvider form={selectForm}>
 | 
			
		||||
        {collectionField.interface === 'm2o' ? (
 | 
			
		||||
          <SchemaComponent
 | 
			
		||||
            components={{ FormItem }}
 | 
			
		||||
            schema={{
 | 
			
		||||
              ...fieldSchema,
 | 
			
		||||
              default: field.value,
 | 
			
		||||
              title: '',
 | 
			
		||||
              'x-component': AssociationCascadeSelect,
 | 
			
		||||
              'x-component-props': {
 | 
			
		||||
                ...props,
 | 
			
		||||
              },
 | 
			
		||||
            }}
 | 
			
		||||
          />
 | 
			
		||||
        ) : (
 | 
			
		||||
          <SchemaField schema={schema} />
 | 
			
		||||
        )}
 | 
			
		||||
      </FormProvider>
 | 
			
		||||
    );
 | 
			
		||||
  },
 | 
			
		||||
  { displayName: 'InternalCascadeSelect' },
 | 
			
		||||
 | 
			
		||||
@ -56,12 +56,12 @@ const Cascade = connect((props) => {
 | 
			
		||||
  const changOnSelect = fieldSchema['x-component-props']?.changOnSelect || false;
 | 
			
		||||
  const field: any = useField();
 | 
			
		||||
  const [selectedOptions, setSelectedOptions] = useState([]);
 | 
			
		||||
  const [chang, setChang] = useState(false);
 | 
			
		||||
  const [change, setChange] = useState(false);
 | 
			
		||||
  const [dataList, setDataList] = useState({});
 | 
			
		||||
  const { styles } = useStyles();
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    const propsValue = props.value || fieldSchema['x-component-props'].value;
 | 
			
		||||
    if (!chang && propsValue) {
 | 
			
		||||
    if (!change && propsValue) {
 | 
			
		||||
      if (!propsValue.parent && !Object.keys(dataList).length) {
 | 
			
		||||
        resource
 | 
			
		||||
          .list({
 | 
			
		||||
@ -116,7 +116,7 @@ const Cascade = connect((props) => {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const handleSelect = async (option) => {
 | 
			
		||||
    setChang(true);
 | 
			
		||||
    setChange(true);
 | 
			
		||||
    if (option) {
 | 
			
		||||
      if (['o2m', 'm2m'].includes(collectionField.interface)) {
 | 
			
		||||
        const fieldValue = Array.isArray(associationField.fieldValue) ? associationField.fieldValue : [];
 | 
			
		||||
@ -243,6 +243,13 @@ export const InternalCascader = observer(
 | 
			
		||||
      return [{}];
 | 
			
		||||
    };
 | 
			
		||||
    const defaultValue = toValue();
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
      const isChange = selectForm.values?.select_array?.filter((value) => value && Object.keys(value).length);
 | 
			
		||||
      if (collectionField.interface !== 'm2o' && props.value && !isChange.length) {
 | 
			
		||||
        selectForm.setInitialValues({ select_array: defaultValue });
 | 
			
		||||
      }
 | 
			
		||||
    }, [props.value]);
 | 
			
		||||
 | 
			
		||||
    const schema = {
 | 
			
		||||
      type: 'object',
 | 
			
		||||
      properties: {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user