feat: add non-filterable config for the filter action

This commit is contained in:
chenos 2022-04-07 18:12:35 +08:00
parent 4e6d1d6fac
commit e67a686231
3 changed files with 14 additions and 16 deletions

View File

@ -106,7 +106,7 @@ const BlockRequestProvider = (props) => {
);
const __parent = useContext(BlockRequestContext);
return (
<BlockRequestContext.Provider value={{ block: props.block, field, service, resource, __parent }}>
<BlockRequestContext.Provider value={{ block: props.block, props, field, service, resource, __parent }}>
{props.children}
</BlockRequestContext.Provider>
);

View File

@ -25,27 +25,26 @@ export const FilterActionDesigner = (props) => {
const { dn } = useDesignable();
const { name } = useCollection();
const fields = useFilterableFields(name);
const fieldNames = fieldSchema?.['x-component-props']?.fieldNames || [];
const nonfilterable = fieldSchema?.['x-component-props']?.nonfilterable || [];
return (
<GeneralSchemaDesigner {...props}>
<SchemaSettings.ItemGroup title={'可筛选字段'}>
{fields.map((field) => {
const checked = fieldNames.includes(field.name);
const checked = !nonfilterable.includes(field.name);
return (
<SchemaSettings.SwitchItem
checked={checked}
title={field?.uiSchema?.title}
onChange={(value) => {
fieldSchema['x-component-props'] = fieldSchema?.['x-component-props'] || {};
const fieldNames = fieldSchema?.['x-component-props']?.fieldNames || [];
console.log('fieldNames.checked', value)
if (value) {
fieldNames.push(field.name);
const nonfilterable = fieldSchema?.['x-component-props']?.nonfilterable || [];
if (!value) {
nonfilterable.push(field.name);
} else {
const index = fieldNames.indexOf(field.name);
fieldNames.splice(index, 1);
const index = nonfilterable.indexOf(field.name);
nonfilterable.splice(index, 1);
}
fieldSchema['x-component-props'].fieldNames = fieldNames;
fieldSchema['x-component-props'].nonfilterable = nonfilterable;
dn.emit('patch', {
schema: {
['x-uid']: fieldSchema['x-uid'],

View File

@ -7,11 +7,11 @@ import { useCollection, useCollectionManager } from '../../../collection-manager
export const useFilterOptions = (collectionName: string) => {
const fieldSchema = useFieldSchema();
const fieldNames = fieldSchema?.['x-component-props']?.fieldNames || [];
const nonfilterable = fieldSchema?.['x-component-props']?.nonfilterable || [];
const { getCollectionFields, getInterface } = useCollectionManager();
const fields = getCollectionFields(collectionName);
const field2option = (field, nochildren) => {
if (fieldNames.length && !nochildren && !fieldNames.includes(field.name)) {
if (nonfilterable.length && !nochildren && nonfilterable.includes(field.name)) {
return;
}
if (!field.interface) {
@ -88,7 +88,7 @@ export const mergeFilter = (filter1, filter2) => {
export const useFilterActionProps = () => {
const { name } = useCollection();
const options = useFilterOptions(name);
const { service } = useBlockRequestContext();
const { service, props } = useBlockRequestContext();
const field = useField<Field>();
const { t } = useTranslation();
return {
@ -105,9 +105,8 @@ export const useFilterActionProps = () => {
}
},
onReset(values) {
const filter = removeNullCondition(values?.filter);
const f1 = service.params?.[0]?.filter;
service.run({ ...service.params?.[0], filter: mergeFilter(f1, filter) });
const filter = removeNullCondition(props.params.filter);
service.run({ ...service.params?.[0], filter });
field.title = t('Filter');
},
};