Merge pull request 'fix: 修改自定义筛选为字段内容本身' (#425) from fix_filterCuston into @hera/dev
Reviewed-on: daoyoucloud/tachycode#425 Reviewed-by: sealday <zhanglin@daoyoucloud.com>
This commit is contained in:
		
						commit
						629eb576f1
					
				@ -40,11 +40,11 @@ export const SchemaSettingsRemove: FC<SchemaSettingsRemoveProps> = (props) => {
 | 
			
		||||
            }
 | 
			
		||||
            await dn.remove(null, options);
 | 
			
		||||
            await confirm?.onOk?.();
 | 
			
		||||
            delete form.values[fieldSchema.name];
 | 
			
		||||
            delete form.values['custom'][fieldSchema['collectionName']];
 | 
			
		||||
            const name = fieldSchema.name as string;
 | 
			
		||||
            const title = fieldSchema.title;
 | 
			
		||||
            for (const key in form.fields) {
 | 
			
		||||
              if (key.includes(name) && form.fields[key].title == title) {
 | 
			
		||||
              if (key.includes(name) && form.fields[key].title === title) {
 | 
			
		||||
                delete form.fields[key];
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -377,42 +377,11 @@ export const useFilterVariable = (fields) => {
 | 
			
		||||
    .filter((value) => value?.props?.name.includes('custom.'))
 | 
			
		||||
    .map((custom) => {
 | 
			
		||||
      const value = custom?.props?.name.replace(/^custom\./, '');
 | 
			
		||||
      const collection = collections.filter((collection) => collection.name === value)[0];
 | 
			
		||||
      let children = collection.fields.map((collectionField) => {
 | 
			
		||||
        if (
 | 
			
		||||
          collectionField.interface !== 'o2o' &&
 | 
			
		||||
          collectionField.interface !== 'oho' &&
 | 
			
		||||
          collectionField.interface !== 'm2o' &&
 | 
			
		||||
          collectionField.interface !== 'createdBy' &&
 | 
			
		||||
          collectionField.interface !== 'updatedBy' &&
 | 
			
		||||
          collectionField.interface !== 'o2m' &&
 | 
			
		||||
          collectionField.interface !== 'm2m' &&
 | 
			
		||||
          collectionField.interface !== 'linkTo' &&
 | 
			
		||||
          collectionField.interface !== 'chinaRegion' &&
 | 
			
		||||
          collectionField.interface !== 'obo' &&
 | 
			
		||||
          collectionField.interface !== 'createdAt' &&
 | 
			
		||||
          collectionField.interface !== 'updatedAt'
 | 
			
		||||
        ) {
 | 
			
		||||
          return {
 | 
			
		||||
            key: collectionField.key,
 | 
			
		||||
            value: collectionField.name,
 | 
			
		||||
            label: compile(collectionField.uiSchema.title),
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      children = children.filter(Boolean);
 | 
			
		||||
      return children.length
 | 
			
		||||
        ? {
 | 
			
		||||
            key: custom?.props?.name,
 | 
			
		||||
            value,
 | 
			
		||||
            label: custom.title,
 | 
			
		||||
            children,
 | 
			
		||||
          }
 | 
			
		||||
        : {
 | 
			
		||||
            key: custom?.props?.name,
 | 
			
		||||
            value,
 | 
			
		||||
            label: custom.title,
 | 
			
		||||
          };
 | 
			
		||||
      return {
 | 
			
		||||
        key: custom?.props?.name,
 | 
			
		||||
        value,
 | 
			
		||||
        label: custom.title,
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
  const result = useMemo(
 | 
			
		||||
    () => ({
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,6 @@ export const removeNullCondition = (filter, fieldSchema?) => {
 | 
			
		||||
  if (filterSchema && (filterSchema.$and?.length || filterSchema.$or?.length)) {
 | 
			
		||||
    for (const key in items) {
 | 
			
		||||
      for (const filterItems in filterSchemaItem) {
 | 
			
		||||
        const match = filterSchemaItem[filterItems].slice(11, -2);
 | 
			
		||||
        if (key.includes(filterItems)) {
 | 
			
		||||
          isFilterCustom = true;
 | 
			
		||||
          break;
 | 
			
		||||
@ -38,8 +37,10 @@ export const removeNullCondition = (filter, fieldSchema?) => {
 | 
			
		||||
            for (const key in items) {
 | 
			
		||||
              if (key.includes(collection)) {
 | 
			
		||||
                if (key.includes(match)) {
 | 
			
		||||
                  filterSchemaItem[filterKey] = items[key];
 | 
			
		||||
                  filterItem[match] = items[key];
 | 
			
		||||
                  if (Object.keys(items[key]).length) {
 | 
			
		||||
                    filterSchemaItem[filterKey] = items[key];
 | 
			
		||||
                    filterItem[match] = items[key];
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                if (key.includes(collection)) delete items[key];
 | 
			
		||||
                else {
 | 
			
		||||
 | 
			
		||||
@ -57,11 +57,10 @@ export const AutoComplete = (props) => {
 | 
			
		||||
      }
 | 
			
		||||
      const valueLabel = options.filter((item) => item.value === data)[0];
 | 
			
		||||
      if (valueLabel) {
 | 
			
		||||
        form.values.custom[fieldSchema['collectionName']] = valueLabel;
 | 
			
		||||
        form.values.custom[fieldSchema['collectionName']] = valueLabel.label;
 | 
			
		||||
        setValue(valueLabel.label);
 | 
			
		||||
      } else {
 | 
			
		||||
        form.values.custom[fieldSchema['collectionName']] = {};
 | 
			
		||||
        form.values.custom[fieldSchema['collectionName']][fieldNames.label] = data;
 | 
			
		||||
        form.values.custom[fieldSchema['collectionName']] = data;
 | 
			
		||||
        setValue(data);
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
@ -1,62 +0,0 @@
 | 
			
		||||
import { useField, useFieldSchema } from '@formily/react';
 | 
			
		||||
import { SchemaSettingsSelectItem, useCollectionManager, useDesignable } from '@nocobase/client';
 | 
			
		||||
import { useFieldComponents } from '../schema-initializer/FilterFormItemCustomInitializer/FilterFormItemCustom';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
export const SchemaSettingComponent = () => {
 | 
			
		||||
  const fieldSchema = useFieldSchema();
 | 
			
		||||
  const field = useField();
 | 
			
		||||
  const { options } = useFieldComponents();
 | 
			
		||||
  const { dn } = useDesignable();
 | 
			
		||||
  return (
 | 
			
		||||
    <SchemaSettingsSelectItem
 | 
			
		||||
      key="component-field"
 | 
			
		||||
      title="Field Component"
 | 
			
		||||
      options={options}
 | 
			
		||||
      value={fieldSchema['x-component']}
 | 
			
		||||
      onChange={(mode) => {
 | 
			
		||||
        const schema = {
 | 
			
		||||
          ['x-uid']: fieldSchema['x-uid'],
 | 
			
		||||
          ['x-component']: mode,
 | 
			
		||||
        };
 | 
			
		||||
        field.component = mode;
 | 
			
		||||
        void dn.emit('patch', {
 | 
			
		||||
          schema,
 | 
			
		||||
        });
 | 
			
		||||
        dn.refresh();
 | 
			
		||||
      }}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const SchemaSettingCollection = () => {
 | 
			
		||||
  const fieldSchema = useFieldSchema();
 | 
			
		||||
  const field = useField();
 | 
			
		||||
  const collections = useCollectionManager();
 | 
			
		||||
  const options = collections?.dataSource['options']?.collections.map((value) => {
 | 
			
		||||
    return {
 | 
			
		||||
      label: value.name,
 | 
			
		||||
      value: value.name,
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
  const { dn } = useDesignable();
 | 
			
		||||
  return (
 | 
			
		||||
    <SchemaSettingsSelectItem
 | 
			
		||||
      key="component-field"
 | 
			
		||||
      title="Edit Collection"
 | 
			
		||||
      options={options}
 | 
			
		||||
      value={fieldSchema['collectionName']}
 | 
			
		||||
      onChange={(name) => {
 | 
			
		||||
        fieldSchema['collectionName'] = name;
 | 
			
		||||
        fieldSchema['name'] = 'custom.' + name;
 | 
			
		||||
        const schema = {
 | 
			
		||||
          ['x-uid']: fieldSchema['x-uid'],
 | 
			
		||||
          collectionName: name,
 | 
			
		||||
          name: 'custom.' + name,
 | 
			
		||||
        };
 | 
			
		||||
        void dn.emit('patch', { schema });
 | 
			
		||||
        dn.refresh();
 | 
			
		||||
      }}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
@ -86,21 +86,29 @@ const ObjectSelect = (props: Props) => {
 | 
			
		||||
      showSearch
 | 
			
		||||
      popupMatchSelectWidth={false}
 | 
			
		||||
      filterOption={(input, option) => (option?.[fieldNames.label || 'label'] ?? '').includes(input)}
 | 
			
		||||
      filterSort={(optionA, optionB) =>
 | 
			
		||||
        (optionA?.[fieldNames.label || 'label'] ?? '')
 | 
			
		||||
          .toLowerCase()
 | 
			
		||||
          .localeCompare((optionB?.[fieldNames.label || 'label'] ?? '').toLowerCase())
 | 
			
		||||
      }
 | 
			
		||||
      filterSort={(optionA, optionB) => {
 | 
			
		||||
        if (typeof optionA[fieldNames.label] === 'number') {
 | 
			
		||||
          return optionA[fieldNames.label] - optionB[fieldNames.label];
 | 
			
		||||
        } else if (typeof optionA[fieldNames.label] === 'string') {
 | 
			
		||||
          return (optionA?.[fieldNames.label || 'label'] ?? '')
 | 
			
		||||
            .toLowerCase()
 | 
			
		||||
            .localeCompare((optionB?.[fieldNames.label || 'label'] ?? '').toLowerCase());
 | 
			
		||||
        }
 | 
			
		||||
      }}
 | 
			
		||||
      onChange={(changed) => {
 | 
			
		||||
        const current = getCurrentOptions(
 | 
			
		||||
          toArr(changed).map((v) => v.value),
 | 
			
		||||
          rawOptions || options,
 | 
			
		||||
          fieldNames,
 | 
			
		||||
        );
 | 
			
		||||
        if (['tags', 'multiple'].includes(mode as string) || props.multiple) {
 | 
			
		||||
          onChange?.(current);
 | 
			
		||||
        if (fieldSchema.name.toString().includes('custom')) {
 | 
			
		||||
          onChange?.(changed ? changed['label'] : changed);
 | 
			
		||||
        } else {
 | 
			
		||||
          onChange?.(current.shift() || null);
 | 
			
		||||
          if (['tags', 'multiple'].includes(mode as string) || props.multiple) {
 | 
			
		||||
            onChange?.(current);
 | 
			
		||||
          } else {
 | 
			
		||||
            onChange?.(current.shift() || null);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }}
 | 
			
		||||
      mode={mode}
 | 
			
		||||
 | 
			
		||||
@ -30,11 +30,16 @@ import { Schema, SchemaOptionsContext, observer, useField, useFieldSchema } from
 | 
			
		||||
import { FormLayout } from '@formily/antd-v5';
 | 
			
		||||
import { uid } from '@formily/shared';
 | 
			
		||||
import { Field } from '@formily/core';
 | 
			
		||||
import { EditFormulaTitleField, EditTitle, EditTitleField } from '../../schema-settings';
 | 
			
		||||
import {
 | 
			
		||||
  EditFormulaTitleField,
 | 
			
		||||
  EditTitle,
 | 
			
		||||
  EditTitleField,
 | 
			
		||||
  SchemaSettingCollection,
 | 
			
		||||
  SchemaSettingComponent,
 | 
			
		||||
} from '../../schema-settings';
 | 
			
		||||
import _ from 'lodash';
 | 
			
		||||
import { SchemaSettingsRemove } from '../../components/FormFilter/SchemaSettingsRemove';
 | 
			
		||||
import { useTranslation } from '../../locale';
 | 
			
		||||
import { SchemaSettingComponent, SchemaSettingCollection } from '../../schema-components/SchemaSettingsFieldComponent';
 | 
			
		||||
 | 
			
		||||
export const useFieldComponents = () => {
 | 
			
		||||
  const { t } = useTranslation();
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@ import {
 | 
			
		||||
  SchemaSettingsSelectItem,
 | 
			
		||||
  SchemaSettingsSwitchItem,
 | 
			
		||||
  useCollection_deprecated,
 | 
			
		||||
  useCollectionManager,
 | 
			
		||||
  useCollectionManager_deprecated,
 | 
			
		||||
  useCompile,
 | 
			
		||||
  useDesignable,
 | 
			
		||||
@ -20,6 +21,7 @@ import _ from 'lodash';
 | 
			
		||||
import React, { useCallback, useMemo } from 'react';
 | 
			
		||||
import { useTranslation } from '../locale';
 | 
			
		||||
import { FormFilterScope } from '../components/FormFilter/FormFilterScope';
 | 
			
		||||
import { useFieldComponents } from '../schema-initializer';
 | 
			
		||||
 | 
			
		||||
export const useFormulaTitleOptions = () => {
 | 
			
		||||
  const compile = useCompile();
 | 
			
		||||
@ -495,3 +497,61 @@ export function SessionUpdate() {
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const SchemaSettingComponent = () => {
 | 
			
		||||
  const fieldSchema = useFieldSchema();
 | 
			
		||||
  const field = useField();
 | 
			
		||||
  const { options } = useFieldComponents();
 | 
			
		||||
  const { dn } = useDesignable();
 | 
			
		||||
  return (
 | 
			
		||||
    <SchemaSettingsSelectItem
 | 
			
		||||
      key="component-field"
 | 
			
		||||
      title="Field Component"
 | 
			
		||||
      options={options}
 | 
			
		||||
      value={fieldSchema['x-component']}
 | 
			
		||||
      onChange={(mode) => {
 | 
			
		||||
        const schema = {
 | 
			
		||||
          ['x-uid']: fieldSchema['x-uid'],
 | 
			
		||||
          ['x-component']: mode,
 | 
			
		||||
        };
 | 
			
		||||
        field.component = mode;
 | 
			
		||||
        void dn.emit('patch', {
 | 
			
		||||
          schema,
 | 
			
		||||
        });
 | 
			
		||||
        dn.refresh();
 | 
			
		||||
      }}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const SchemaSettingCollection = () => {
 | 
			
		||||
  const fieldSchema = useFieldSchema();
 | 
			
		||||
  const field = useField();
 | 
			
		||||
  const collections = useCollectionManager();
 | 
			
		||||
  const options = collections?.dataSource['options']?.collections.map((value) => {
 | 
			
		||||
    return {
 | 
			
		||||
      label: value.name,
 | 
			
		||||
      value: value.name,
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
  const { dn } = useDesignable();
 | 
			
		||||
  return (
 | 
			
		||||
    <SchemaSettingsSelectItem
 | 
			
		||||
      key="component-field"
 | 
			
		||||
      title="Edit Collection"
 | 
			
		||||
      options={options}
 | 
			
		||||
      value={fieldSchema['collectionName']}
 | 
			
		||||
      onChange={(name) => {
 | 
			
		||||
        fieldSchema['collectionName'] = name;
 | 
			
		||||
        fieldSchema['name'] = 'custom.' + name;
 | 
			
		||||
        const schema = {
 | 
			
		||||
          ['x-uid']: fieldSchema['x-uid'],
 | 
			
		||||
          collectionName: name,
 | 
			
		||||
          name: 'custom.' + name,
 | 
			
		||||
        };
 | 
			
		||||
        void dn.emit('patch', { schema });
 | 
			
		||||
        dn.refresh();
 | 
			
		||||
      }}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user