fix(default-value): should not show 'N/A' when a normal value is selected. (#2365)
* fix(default-value): fix N/A * fix: fix invalid selection
This commit is contained in:
		
							parent
							
								
									7151345c40
								
							
						
					
					
						commit
						4e4c4eae27
					
				@ -2,7 +2,7 @@ import { LoadingOutlined, PlusOutlined } from '@ant-design/icons';
 | 
			
		||||
import { RecursionField, connect, mapProps, observer, useField, useFieldSchema, useForm } from '@formily/react';
 | 
			
		||||
import { Space, message } from 'antd';
 | 
			
		||||
import { isFunction } from 'mathjs';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import React, { useState } from 'react';
 | 
			
		||||
import { useTranslation } from 'react-i18next';
 | 
			
		||||
import { RecordProvider, useAPIClient } from '../../../';
 | 
			
		||||
import { isVariable } from '../../common/utils/uitls';
 | 
			
		||||
@ -22,6 +22,10 @@ const InternalAssociationSelect = observer((props: AssociationSelectProps) => {
 | 
			
		||||
  const { options: collectionField } = useAssociationFieldContext();
 | 
			
		||||
  const initValue = isVariable(props.value) ? undefined : props.value;
 | 
			
		||||
  const value = Array.isArray(initValue) ? initValue.filter(Boolean) : initValue;
 | 
			
		||||
 | 
			
		||||
  // 因为通过 Schema 的形式书写的组件,在值变更的时候 `value` 的值没有改变,所以需要维护一个 `innerValue` 来变更值
 | 
			
		||||
  const [innerValue, setInnerValue] = useState(value);
 | 
			
		||||
 | 
			
		||||
  const addMode = fieldSchema['x-component-props']?.addMode;
 | 
			
		||||
  const isAllowAddNew = fieldSchema['x-add-new'];
 | 
			
		||||
  const { t } = useTranslation();
 | 
			
		||||
@ -29,6 +33,7 @@ const InternalAssociationSelect = observer((props: AssociationSelectProps) => {
 | 
			
		||||
  const form = useForm();
 | 
			
		||||
  const api = useAPIClient();
 | 
			
		||||
  const resource = api.resource(collectionField.target);
 | 
			
		||||
 | 
			
		||||
  const handleCreateAction = async (props) => {
 | 
			
		||||
    const { search: value, callBack } = props;
 | 
			
		||||
    const {
 | 
			
		||||
@ -63,6 +68,7 @@ const InternalAssociationSelect = observer((props: AssociationSelectProps) => {
 | 
			
		||||
      </div>
 | 
			
		||||
    );
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div key={fieldSchema.name}>
 | 
			
		||||
      <Space.Compact style={{ display: 'flex', lineHeight: '32px' }}>
 | 
			
		||||
@ -71,8 +77,12 @@ const InternalAssociationSelect = observer((props: AssociationSelectProps) => {
 | 
			
		||||
          {...props}
 | 
			
		||||
          size={'middle'}
 | 
			
		||||
          objectValue={objectValue}
 | 
			
		||||
          value={value}
 | 
			
		||||
          value={value || innerValue}
 | 
			
		||||
          service={service}
 | 
			
		||||
          onChange={(value) => {
 | 
			
		||||
            setInnerValue(value);
 | 
			
		||||
            props.onChange?.(value);
 | 
			
		||||
          }}
 | 
			
		||||
          CustomDropdownRender={addMode === 'quickAdd' && QuickAddContent}
 | 
			
		||||
        ></RemoteSelect>
 | 
			
		||||
 | 
			
		||||
@ -99,7 +109,7 @@ interface AssociationSelectInterface {
 | 
			
		||||
  FilterDesigner: React.FC;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const AssociationSelect = InternalAssociationSelect as unknown as AssociationSelectInterface;
 | 
			
		||||
export const AssociationSelect = (InternalAssociationSelect as unknown) as AssociationSelectInterface;
 | 
			
		||||
 | 
			
		||||
export const AssociationSelectReadPretty = connect(
 | 
			
		||||
  (props: any) => {
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { css, cx } from '@emotion/css';
 | 
			
		||||
import { ArrayCollapse, ArrayItems, FormItem as Item, FormLayout } from '@formily/antd-v5';
 | 
			
		||||
import { ArrayCollapse, ArrayItems, FormLayout, FormItem as Item } from '@formily/antd-v5';
 | 
			
		||||
import { Field } from '@formily/core';
 | 
			
		||||
import { ISchema, observer, Schema, useField, useFieldSchema } from '@formily/react';
 | 
			
		||||
import { ISchema, observer, useField, useFieldSchema } from '@formily/react';
 | 
			
		||||
import { dayjs } from '@nocobase/utils/client';
 | 
			
		||||
import { Select } from 'antd';
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
@ -20,7 +20,7 @@ import {
 | 
			
		||||
} from '../../../collection-manager';
 | 
			
		||||
import { isTitleField } from '../../../collection-manager/Configuration/CollectionFields';
 | 
			
		||||
import { GeneralSchemaItems } from '../../../schema-items/GeneralSchemaItems';
 | 
			
		||||
import { GeneralSchemaDesigner, isPatternDisabled, isShowDefaultValue, SchemaSettings } from '../../../schema-settings';
 | 
			
		||||
import { GeneralSchemaDesigner, SchemaSettings, isPatternDisabled, isShowDefaultValue } from '../../../schema-settings';
 | 
			
		||||
import { useIsShowMultipleSwitch } from '../../../schema-settings/hooks/useIsShowMultipleSwitch';
 | 
			
		||||
import { isVariable, parseVariables, useVariablesCtx } from '../../common/utils/uitls';
 | 
			
		||||
import { useCompile, useDesignable, useFieldModeOptions } from '../../hooks';
 | 
			
		||||
 | 
			
		||||
@ -98,8 +98,6 @@ interface SchemaSettingsContextProps {
 | 
			
		||||
  collectionName?: any;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const mouseEnterDelay = 150;
 | 
			
		||||
 | 
			
		||||
const SchemaSettingsContext = createContext<SchemaSettingsContextProps>(null);
 | 
			
		||||
 | 
			
		||||
export const useSchemaSettings = () => {
 | 
			
		||||
@ -1443,7 +1441,7 @@ export const findParentFieldSchema = (fieldSchema: Schema) => {
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
SchemaSettings.DefaultValue = function DefaultvalueConfigure(props) {
 | 
			
		||||
SchemaSettings.DefaultValue = function DefaultValueConfigure(props) {
 | 
			
		||||
  const variablesCtx = useVariablesCtx();
 | 
			
		||||
  const currentSchema = useFieldSchema();
 | 
			
		||||
  const fieldSchema = props?.fieldSchema ?? currentSchema;
 | 
			
		||||
@ -1463,9 +1461,10 @@ SchemaSettings.DefaultValue = function DefaultvalueConfigure(props) {
 | 
			
		||||
  const parentFieldSchema = collectionField?.interface === 'm2o' && findParentFieldSchema(fieldSchema);
 | 
			
		||||
  const parentCollectionField = parentFieldSchema && getCollectionJoinField(parentFieldSchema?.['x-collection-field']);
 | 
			
		||||
  const tableCtx = useTableBlockContext();
 | 
			
		||||
  const isAllowContexVariable =
 | 
			
		||||
  const isAllowContextVariable =
 | 
			
		||||
    collectionField?.interface === 'm2m' ||
 | 
			
		||||
    (parentCollectionField?.type === 'hasMany' && collectionField?.interface === 'm2o');
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <SchemaSettings.ModalItem
 | 
			
		||||
      title={t('Set default value')}
 | 
			
		||||
@ -1477,44 +1476,43 @@ SchemaSettings.DefaultValue = function DefaultvalueConfigure(props) {
 | 
			
		||||
          title: t('Set default value'),
 | 
			
		||||
          properties: {
 | 
			
		||||
            default: {
 | 
			
		||||
              ...(fieldSchemaWithoutRequired || {}),
 | 
			
		||||
              'x-decorator': 'FormItem',
 | 
			
		||||
              'x-component': 'VariableInput',
 | 
			
		||||
              'x-component-props': {
 | 
			
		||||
                ...(fieldSchema?.['x-component-props'] || {}),
 | 
			
		||||
                collectionField,
 | 
			
		||||
                targetField,
 | 
			
		||||
                collectionName: collectionField?.collectionName,
 | 
			
		||||
                contextCollectionName: isAllowContexVariable && tableCtx.collection,
 | 
			
		||||
                contextCollectionName: isAllowContextVariable && tableCtx.collection,
 | 
			
		||||
                schema: collectionField?.uiSchema,
 | 
			
		||||
                className: defaultInputStyle,
 | 
			
		||||
                renderSchemaComponent: function Com(props) {
 | 
			
		||||
                  const s = _.cloneDeep(fieldSchemaWithoutRequired) || ({} as Schema);
 | 
			
		||||
                  s.title = '';
 | 
			
		||||
 | 
			
		||||
                  // 任何一个非空字符串都可以
 | 
			
		||||
                  s.name = 'default';
 | 
			
		||||
 | 
			
		||||
                  s['x-read-pretty'] = false;
 | 
			
		||||
                  s['x-disabled'] = false;
 | 
			
		||||
 | 
			
		||||
                  return (
 | 
			
		||||
                    <SchemaComponent
 | 
			
		||||
                      schema={{
 | 
			
		||||
                        ...(s || {}),
 | 
			
		||||
                        'x-component-props': {
 | 
			
		||||
                          ...s['x-component-props'],
 | 
			
		||||
                          onChange: props.onChange,
 | 
			
		||||
                          value: props.value,
 | 
			
		||||
                          defaultValue: getFieldDefaultValue(s, collectionField),
 | 
			
		||||
                          style: {
 | 
			
		||||
                            width: '100%',
 | 
			
		||||
                            verticalAlign: 'top',
 | 
			
		||||
                            minWidth: '200px',
 | 
			
		||||
                          },
 | 
			
		||||
                        },
 | 
			
		||||
                      }}
 | 
			
		||||
                    />
 | 
			
		||||
                  );
 | 
			
		||||
                  const schema = {
 | 
			
		||||
                    ...(s || {}),
 | 
			
		||||
                    'x-component-props': {
 | 
			
		||||
                      ...s['x-component-props'],
 | 
			
		||||
                      collectionName: collectionField?.collectionName,
 | 
			
		||||
                      targetField,
 | 
			
		||||
                      onChange: props.onChange,
 | 
			
		||||
                      defaultValue: getFieldDefaultValue(s, collectionField),
 | 
			
		||||
                      style: {
 | 
			
		||||
                        width: '100%',
 | 
			
		||||
                        verticalAlign: 'top',
 | 
			
		||||
                        minWidth: '200px',
 | 
			
		||||
                      },
 | 
			
		||||
                    },
 | 
			
		||||
                  };
 | 
			
		||||
 | 
			
		||||
                  return <SchemaComponent schema={schema} />;
 | 
			
		||||
                },
 | 
			
		||||
              },
 | 
			
		||||
              name: 'default',
 | 
			
		||||
              title: t('Default value'),
 | 
			
		||||
              default: getFieldDefaultValue(fieldSchema, collectionField),
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,7 @@ export const VariableInput = (props: Props) => {
 | 
			
		||||
      onChange={onChange}
 | 
			
		||||
      scope={scope}
 | 
			
		||||
      style={style}
 | 
			
		||||
      changeOnSelect={contextCollectionName!==null}
 | 
			
		||||
      changeOnSelect={contextCollectionName !== null}
 | 
			
		||||
    >
 | 
			
		||||
      <RenderSchemaComponent value={value} onChange={onChange} />
 | 
			
		||||
    </Variable.Input>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user