Merge branch '@hera/dev' of ssh://git.daoyoucloud.com:13004/daoyoucloud/tachycode into @hera/dev
This commit is contained in:
commit
31ab773e4c
@ -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,
|
||||||
|
@ -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}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user