Merge branch '@hera/dev' of ssh://git.daoyoucloud.com:13004/daoyoucloud/tachycode into @hera/dev

This commit is contained in:
sealday 2024-03-25 21:44:57 +08:00
commit 31ab773e4c
2 changed files with 33 additions and 19 deletions

View File

@ -51,7 +51,9 @@ export const customComponentDispatcherSettings = new SchemaSettings({
['x-uid']: fieldSchema['x-uid'], ['x-uid']: fieldSchema['x-uid'],
}; };
fieldSchema['x-component-props']['component'] = component; fieldSchema['x-component-props']['component'] = component;
fieldSchema['x-acl-ignore'] = true;
schema['x-component-props'] = fieldSchema['x-component-props']; schema['x-component-props'] = fieldSchema['x-component-props'];
schema['x-acl-ignore'] = true;
field.componentProps.component = component; field.componentProps.component = component;
dn.emit('patch', { dn.emit('patch', {
schema, schema,

View File

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react'; import React, { useState } from 'react';
import { AutoComplete as AntdAutoComplete } from 'antd'; import { AutoComplete as AntdAutoComplete } from 'antd';
import { connect, useFieldSchema } from '@formily/react'; import { connect, useFieldSchema } from '@formily/react';
import { useAPIClient } from '@nocobase/client'; import { useAPIClient } from '@nocobase/client';
@ -8,42 +8,54 @@ import { fuzzysearch } from '../../utils';
export const AutoComplete = connect((props) => { export const AutoComplete = connect((props) => {
const { fieldNames, params: fieldFilter } = props; const { fieldNames, params: fieldFilter } = props;
const fieldSchema = useFieldSchema(); const fieldSchema = useFieldSchema();
const [defultValue, setDefultValue] = useState([]); const targetKey = fieldNames.value;
const api = useAPIClient(); const api = useAPIClient();
const [defultOptions, setDefultOptions] = useState([]);
const [options, setOptions] = useState([]); const [options, setOptions] = useState([]);
const getNoDuplicateTextOptions = (rawOptions) => {
const targetOptions = rawOptions.filter((option, index, self) => {
return self.findIndex((item) => item[targetKey] === option[targetKey]) === index;
});
return targetOptions;
};
useAsyncEffect(async () => { useAsyncEffect(async () => {
const defultOptions = await api.request({ const {
data: { data: rawOptions },
} = await api.request({
url: fieldSchema['collectionName'] + ':list', url: fieldSchema['collectionName'] + ':list',
params: { params: {
pageSize: 99999, pageSize: 99999,
filter: fieldFilter ? { ...fieldFilter.filter } : {}, filter: fieldFilter ? { ...fieldFilter.filter } : {},
}, },
}); });
changLable(defultOptions?.data?.data); const targetOptions = getNoDuplicateTextOptions(rawOptions);
setDefultOptions(targetOptions);
setOptions(targetOptions);
}, [fieldFilter?.filter, fieldSchema['collectionName']]); }, [fieldFilter?.filter, fieldSchema['collectionName']]);
useEffect(() => { const onSearch = (value) => {
changLable(defultValue); // 在筛选项开头跟踪用户的原始输入值
}, [fieldNames?.label]); if (value) {
setOptions([
const changLable = (defultOptions) => { {
if (defultOptions) { [targetKey]: value,
const items = []; },
defultOptions.forEach((item) => { ...defultOptions,
if (!items.filter((option) => option[fieldNames.value] === item[fieldNames.value]).length) { ]);
items.push(item); } else {
} setOptions(defultOptions);
});
setDefultValue(items);
setOptions(items);
} }
}; };
return ( return (
<AntdAutoComplete <AntdAutoComplete
{...props} {...props}
options={options} options={options}
filterOption={(inputValue, option) => fuzzysearch(inputValue, option[fieldNames.value].toString())} filterOption={(inputValue, option) => fuzzysearch(inputValue, option[targetKey].toString())}
allowClear allowClear
onSearch={onSearch}
/> />
); );
}); });