diff --git a/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/RegisterTei/RegisterTei.container.js b/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/RegisterTei/RegisterTei.container.js index fe9ef129b6..5c74a30e44 100644 --- a/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/RegisterTei/RegisterTei.container.js +++ b/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/RegisterTei/RegisterTei.container.js @@ -18,12 +18,10 @@ export const RegisterTei = ({ const error = useSelector(({ newRelationshipRegisterTei }) => (newRelationshipRegisterTei.error)); const selectedScopeId = suggestedProgramId || trackedEntityTypeId; const { trackedEntityName } = useScopeInfo(selectedScopeId); - const { - inheritedAttributes, - isLoading: isLoadingAttributes, - } = useInheritedAttributeValues({ + const { inheritedAttributes, isLoading: isLoadingAttributes } = useInheritedAttributeValues({ teiId, trackedEntityTypeId, + programId: suggestedProgramId, }); if (isLoadingAttributes) { diff --git a/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/useInheritedAttributeValues.js b/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/useInheritedAttributeValues.js index d65d5a9c86..8c526525dd 100644 --- a/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/useInheritedAttributeValues.js +++ b/src/core_modules/capture-core/components/Pages/common/TEIRelationshipsWidget/useInheritedAttributeValues.js @@ -1,7 +1,13 @@ // @flow +import { useMemo } from 'react'; +import { useSelector } from 'react-redux'; import type { InputAttribute } from '../../../DataEntries/EnrollmentRegistrationEntry/hooks/useFormValues'; import { useApiDataQuery } from '../../../../utils/reactQueryHelpers'; -import { getTrackedEntityTypeThrowIfNotFound } from '../../../../metaData'; +import { + getProgramFromProgramIdThrowIfNotFound, + getTrackedEntityTypeThrowIfNotFound, + TrackerProgram, +} from '../../../../metaData'; type Props = { teiId: string, @@ -13,21 +19,40 @@ type Return = { isLoading: boolean, }; export const useInheritedAttributeValues = ({ teiId, trackedEntityTypeId }: Props): Return => { - const trackedEntityType = getTrackedEntityTypeThrowIfNotFound(trackedEntityTypeId); - const inheritedAttributeIds = trackedEntityType.attributes?.reduce((acc, attribute) => { - if (attribute.inherit) { - acc.add(attribute.id); + const programId = useSelector(({ newRelationshipRegisterTei }) => newRelationshipRegisterTei.programId); + const inheritedAttributeIds = useMemo(() => { + const attributeIds = new Set(); + + if (programId) { + const program = getProgramFromProgramIdThrowIfNotFound(programId); + if (program instanceof TrackerProgram) { + program.attributes.forEach((attribute) => { + if (attribute.inherit) { + attributeIds.add(attribute.id); + } + }); + } + return attributeIds; } - return acc; - }, new Set()); + + const trackedEntityType = getTrackedEntityTypeThrowIfNotFound(trackedEntityTypeId); + trackedEntityType.attributes.forEach((attribute) => { + if (attribute.inherit) { + attributeIds.add(attribute.id); + } + }); + return attributeIds; + }, [programId, trackedEntityTypeId]); + const { data, isLoading } = useApiDataQuery( - ['inheritedAttributeValues', teiId], + ['inheritedAttributeValues', teiId, programId], { resource: 'tracker/trackedEntities', id: teiId, params: { fields: ['attributes'], + program: programId, }, }, { enabled: !!teiId, diff --git a/src/core_modules/capture-core/utils/reactQueryHelpers/query/useApiDataQuery.js b/src/core_modules/capture-core/utils/reactQueryHelpers/query/useApiDataQuery.js index 8505d4aaff..44b0ba996f 100644 --- a/src/core_modules/capture-core/utils/reactQueryHelpers/query/useApiDataQuery.js +++ b/src/core_modules/capture-core/utils/reactQueryHelpers/query/useApiDataQuery.js @@ -6,7 +6,7 @@ import type { Result } from './useMetadataQuery.types'; import { ReactQueryAppNamespace } from '../reactQueryHelpers.const'; export const useApiDataQuery = ( - queryKey: Array, + queryKey: Array, queryObject: ResourceQuery, queryOptions: UseQueryOptions, ): Result => {