diff --git a/packages/core/client/src/block-provider/hooks/index.ts b/packages/core/client/src/block-provider/hooks/index.ts index 168374889f..e304a5ddaf 100644 --- a/packages/core/client/src/block-provider/hooks/index.ts +++ b/packages/core/client/src/block-provider/hooks/index.ts @@ -468,6 +468,10 @@ const useDoFilter = () => { block.defaultFilter, ]); + if (_.isEmpty(storedFilter[uid])) { + block.clearSelection?.(); + } + if (doNothingWhenFilterIsEmpty && _.isEmpty(storedFilter[uid])) { return; } @@ -1349,6 +1353,7 @@ export const useAssociationFilterBlockProps = () => { [filterKey]: value, }; } else { + block.clearSelection?.(); if (block.dataLoadingMode === 'manual') { return block.clearData(); } @@ -1442,6 +1447,8 @@ async function doReset({ const target = targets.find((target) => target.uid === block.uid); if (!target) return; + block.clearSelection?.(); + if (block.dataLoadingMode === 'manual') { return block.clearData(); } diff --git a/packages/core/client/src/filter-provider/FilterProvider.tsx b/packages/core/client/src/filter-provider/FilterProvider.tsx index 6dab9105e0..4991eefa71 100644 --- a/packages/core/client/src/filter-provider/FilterProvider.tsx +++ b/packages/core/client/src/filter-provider/FilterProvider.tsx @@ -54,6 +54,8 @@ export interface DataBlock { clearFilter: (uid: string) => void; /** 将数据区块的数据置为空 */ clearData: () => void; + /** 清除表格的选中项 */ + clearSelection?: () => void; /** 数据区块表中所有的关系字段 */ associatedFields?: CollectionFieldOptions_deprecated[]; /** 数据区块表中所有的外键字段 */ @@ -165,16 +167,21 @@ export const DataBlockCollector = ({ clearData() { this.service.mutate(undefined); }, + clearSelection() { + if (field) { + field.data.clearSelectedRowKeys?.(); + } + }, }); }, [ associatedFields, collection, dataLoadingMode, - field?.componentProps?.title, fieldSchema, params?.filter, recordDataBlocks, getDataBlockRequest, + field, ]); useEffect(() => { diff --git a/packages/core/client/src/filter-provider/utils.ts b/packages/core/client/src/filter-provider/utils.ts index 17dfe9df44..1b3c6920ba 100644 --- a/packages/core/client/src/filter-provider/utils.ts +++ b/packages/core/client/src/filter-provider/utils.ts @@ -215,7 +215,7 @@ export const useFilterAPI = () => { // 保留原有的 filter const storedFilter = block.service.params?.[1]?.filters || {}; - if (value !== undefined) { + if (value != null) { storedFilter[uid] = { $and: [ { @@ -226,7 +226,11 @@ export const useFilterAPI = () => { ], }; } else { + block.clearSelection?.(); delete storedFilter[uid]; + if (block.dataLoadingMode === 'manual') { + return block.clearData(); + } } const mergedFilter = mergeFilter([ diff --git a/packages/core/client/src/modules/blocks/data-blocks/table/hooks/useTableBlockProps.tsx b/packages/core/client/src/modules/blocks/data-blocks/table/hooks/useTableBlockProps.tsx index 32c931e8f3..ed391e9210 100644 --- a/packages/core/client/src/modules/blocks/data-blocks/table/hooks/useTableBlockProps.tsx +++ b/packages/core/client/src/modules/blocks/data-blocks/table/hooks/useTableBlockProps.tsx @@ -141,6 +141,7 @@ export const useTableBlockProps = () => { const storedFilter = block.service.params?.[1]?.filters || {}; if (selectedRow.includes(record[tableBlockContextBasicValue.rowKey])) { + block.clearSelection?.(); if (block.dataLoadingMode === 'manual') { return block.clearData(); }