From 7340a7d1871cf7afc4f80a031549ed824488b42b Mon Sep 17 00:00:00 2001 From: Katherine Date: Wed, 23 Apr 2025 11:39:54 +0800 Subject: [PATCH] fix: missing filter for already associated data when adding association data (#6750) * fix: missing filter for already associated data when adding association collection table * fix: bug --- .../actions/associate/AssociateActionProvider.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/core/client/src/modules/actions/associate/AssociateActionProvider.tsx b/packages/core/client/src/modules/actions/associate/AssociateActionProvider.tsx index 18be2d76b9..5e2a49c7c4 100644 --- a/packages/core/client/src/modules/actions/associate/AssociateActionProvider.tsx +++ b/packages/core/client/src/modules/actions/associate/AssociateActionProvider.tsx @@ -7,7 +7,7 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import React, { useState, useContext } from 'react'; +import React, { useState, useContext, useEffect } from 'react'; import { RecordPickerProvider, RecordPickerContext } from '../../../schema-component/antd/record-picker'; import { SchemaComponentOptions, @@ -41,9 +41,16 @@ const useTableSelectorProps = () => { export const AssociateActionProvider = (props) => { const [selectedRows, setSelectedRows] = useState([]); const collection = useCollection(); - const { resource, service, block, __parent } = useBlockRequestContext(); + const { resource, block, __parent } = useBlockRequestContext(); const actionCtx = useActionContext(); const { isMobile } = useOpenModeContext() || {}; + const [associationData, setAssociationData] = useState([]); + useEffect(() => { + resource?.list?.().then((res) => { + setAssociationData(res.data?.data || []); + }); + }, [resource]); + const pickerProps = { size: 'small', onChange: props?.onChange, @@ -73,8 +80,8 @@ export const AssociateActionProvider = (props) => { }; const getFilter = () => { const targetKey = collection?.filterTargetKey || 'id'; - if (service.data?.data) { - const list = service.data?.data.map((option) => option[targetKey]).filter(Boolean); + if (associationData) { + const list = associationData.map((option) => option[targetKey]).filter(Boolean); const filter = list.length ? { $and: [{ [`${targetKey}.$ne`]: list }] } : {}; return filter; }