diff --git a/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/DataElement.js b/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/DataElement.js index e5d607999b..81ba3fa127 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/DataElement.js +++ b/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/DataElement.js @@ -340,6 +340,10 @@ export const buildDataElement = ( return null; } + if (trackedEntityAttribute.access?.read === false) { + return null; + } + return trackedEntityAttribute.valueType === dataElementTypes.DATE ? buildDateDataElement(optionSets, programTrackedEntityAttribute, trackedEntityAttribute, querySingleResource) : buildBaseDataElement(optionSets, programTrackedEntityAttribute, trackedEntityAttribute, querySingleResource, minorServerVersion); diff --git a/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/types.js b/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/types.js index c899a5efc8..0f32db5829 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/types.js +++ b/src/core_modules/capture-core/components/WidgetProfile/DataEntry/FormFoundation/types.js @@ -55,6 +55,9 @@ export type TrackedEntityAttribute = { unique: ?boolean, orgunitScope: ?boolean, pattern: ?string, + access?: ?{ + read?: ?boolean, + }, }; export type ProgramTrackedEntityAttribute = { diff --git a/src/core_modules/capture-core/components/WidgetProfile/hooks/useApiProgram.js b/src/core_modules/capture-core/components/WidgetProfile/hooks/useApiProgram.js index fde2d1575c..1141cac28a 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/hooks/useApiProgram.js +++ b/src/core_modules/capture-core/components/WidgetProfile/hooks/useApiProgram.js @@ -15,7 +15,7 @@ const fields = 'programStageSections[id,displayName,displayDescription,sortOrder,dataElements[id]],' + 'programStageDataElements[compulsory,displayInReports,renderOptionsAsRadio,allowFutureDate,renderType[*],dataElement[id,displayName,displayShortName,displayFormName,valueType,translations[*],description,optionSetValue,style,optionSet[id,displayName,version,valueType,options[id,displayName,code,style, translations]]]]' + '],' + - 'programTrackedEntityAttributes[trackedEntityAttribute[id,displayName,displayShortName,displayFormName,description,valueType,optionSetValue,unique,orgunitScope,pattern,translations[property,locale,value],optionSet[id,displayName,version,valueType,options[id,displayName,name,code,style,translations]]],displayInList,searchable,mandatory,renderOptionsAsRadio,allowFutureDate],' + + 'programTrackedEntityAttributes[trackedEntityAttribute[id,displayName,displayShortName,displayFormName,description,valueType,optionSetValue,unique,orgunitScope,pattern,translations[property,locale,value],optionSet[id,displayName,version,valueType,options[id,displayName,name,code,style,translations]],access[read]],displayInList,searchable,mandatory,renderOptionsAsRadio,allowFutureDate],' + 'trackedEntityType[id,access,displayName,allowAuditLog,minAttributesRequiredToSearch,featureType,trackedEntityTypeAttributes[trackedEntityAttribute[id],displayInList,mandatory,searchable],translations[property,locale,value]],' + 'userRoles[id,displayName]'; diff --git a/src/core_modules/capture-core/components/WidgetProfile/hooks/useClientAttributesWithSubvalues.js b/src/core_modules/capture-core/components/WidgetProfile/hooks/useClientAttributesWithSubvalues.js index ebddcdcd56..4dc8c8dcfa 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/hooks/useClientAttributesWithSubvalues.js +++ b/src/core_modules/capture-core/components/WidgetProfile/hooks/useClientAttributesWithSubvalues.js @@ -21,6 +21,9 @@ type InputProgramData = { }, valueType: string, unique: boolean, + access?: ?{ + read?: ?boolean, + } }, displayInList: boolean, }>, @@ -53,8 +56,11 @@ export const useClientAttributesWithSubvalues = (teiId: string, program: InputPr const computedAttributes = await programTrackedEntityAttributes.reduce(async (promisedAcc, currentTEA) => { const { displayInList, - trackedEntityAttribute: { id, optionSet, valueType, unique, displayFormName }, + trackedEntityAttribute: { id, optionSet, valueType, unique, displayFormName, access }, } = currentTEA; + if (access?.read === false) { + return promisedAcc; + } const foundAttribute = trackedEntityInstanceAttributes?.find(item => item.attribute === id); let value; if (foundAttribute) {