fix: improve filter strategy

This commit is contained in:
chenos 2023-01-12 14:28:47 +08:00
parent c5238f5643
commit 3e90bc9d7e
3 changed files with 34 additions and 10 deletions

View File

@ -23,7 +23,8 @@ export const AssociationFilterItem = (props) => {
const fieldSchema = useFieldSchema(); const fieldSchema = useFieldSchema();
const Designer = useDesigner(); const Designer = useDesigner();
const compile = useCompile(); const compile = useCompile();
const { service } = useBlockRequestContext(); const { service, props: blockProps } = useBlockRequestContext();
const [searchVisible, setSearchVisible] = useState(false); const [searchVisible, setSearchVisible] = useState(false);
const collectionFieldName = collectionField.name; const collectionFieldName = collectionField.name;
@ -76,7 +77,15 @@ export const AssociationFilterItem = (props) => {
delete filters[`af.${collectionFieldName}`]; delete filters[`af.${collectionFieldName}`];
} }
service.run({ ...service.params?.[0], pageSize: 200, page: 1, filter: mergeFilter(Object.values(filters)) }, { filters }); service.run(
{
...service.params?.[0],
pageSize: 200,
page: 1,
filter: mergeFilter([Object.values(filters), blockProps?.params?.filter]),
},
{ filters },
);
}; };
const handleSearchToggle = (e: MouseEvent) => { const handleSearchToggle = (e: MouseEvent) => {

View File

@ -107,9 +107,11 @@ export const useFilterFieldProps = ({ options, service, params }) => {
const filter = removeNullCondition(values?.filter); const filter = removeNullCondition(values?.filter);
const filters = service.params?.[1]?.filters || {}; const filters = service.params?.[1]?.filters || {};
filters[`default`] = mergeFilter([defaultFilter, filter]); filters[`filterAction`] = filter;
service.run(
service.run({ ...service.params?.[0], page: 1, filter: mergeFilter(Object.values(filters)) }, { filters }); { ...service.params?.[0], page: 1, filter: mergeFilter([...Object.values(filters), defaultFilter]) },
{ filters },
);
const items = filter?.$and || filter?.$or; const items = filter?.$and || filter?.$or;
if (items?.length) { if (items?.length) {
field.title = t('{{count}} filter items', { count: items?.length || 0 }); field.title = t('{{count}} filter items', { count: items?.length || 0 });
@ -119,7 +121,16 @@ export const useFilterFieldProps = ({ options, service, params }) => {
}, },
onReset() { onReset() {
const filter = params.filter; const filter = params.filter;
service.run({ ...service.params?.[0], filter, page: 1 }); const filters = service.params?.[1]?.filters || {};
delete filters[`filterAction`];
service.run(
{
...service.params?.[0],
filter: mergeFilter([...Object.values(filters), filter]),
page: 1,
},
{ filters },
);
field.title = t('Filter'); field.title = t('Filter');
}, },
}; };

View File

@ -1,11 +1,11 @@
import { ArrayItems } from '@formily/antd'; import { ArrayItems } from '@formily/antd';
import { ISchema, observer, useField, useFieldSchema } from '@formily/react'; import { ISchema, useField, useFieldSchema } from '@formily/react';
import React, { useEffect } from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useTableBlockContext } from '../../../block-provider'; import { useTableBlockContext } from '../../../block-provider';
import { mergeFilter } from '../../../block-provider/SharedFilterProvider';
import { useCollection } from '../../../collection-manager'; import { useCollection } from '../../../collection-manager';
import { useCollectionFilterOptions, useSortFields } from '../../../collection-manager/action-hooks'; import { useCollectionFilterOptions, useSortFields } from '../../../collection-manager/action-hooks';
import { useRecord } from '../../../record-provider';
import { GeneralSchemaDesigner, SchemaSettings } from '../../../schema-settings'; import { GeneralSchemaDesigner, SchemaSettings } from '../../../schema-settings';
import { useSchemaTemplate } from '../../../schema-templates'; import { useSchemaTemplate } from '../../../schema-templates';
import { useDesignable } from '../../hooks'; import { useDesignable } from '../../hooks';
@ -81,7 +81,11 @@ export const TableBlockDesigner = () => {
params.filter = filter; params.filter = filter;
field.decoratorProps.params = params; field.decoratorProps.params = params;
fieldSchema['x-decorator-props']['params'] = params; fieldSchema['x-decorator-props']['params'] = params;
service.run({ ...service.params?.[0], filter, page: 1 }); const filters = service.params?.[1]?.filters || {};
service.run(
{ ...service.params?.[0], filter: mergeFilter([...Object.values(filters), filter]), page: 1 },
{ filters },
);
dn.emit('patch', { dn.emit('patch', {
schema: { schema: {
['x-uid']: fieldSchema['x-uid'], ['x-uid']: fieldSchema['x-uid'],