From 9d1e19fd5be6cf13a9ca539ec6ab95e2a0d9e614 Mon Sep 17 00:00:00 2001 From: Simona Domnisoru Date: Thu, 27 Jun 2024 09:48:19 +0200 Subject: [PATCH 1/2] fix: skip the fileResource requests for image --- .../WidgetProfile/hooks/getSubValueForTei.js | 5 +-- .../Stages/Stage/getEventDataWithSubValue.js | 24 ++++++-------- .../helpers/getListDataCommon/getSubvalues.js | 14 +++++--- .../capture-core/events/getSubValues.js | 32 ++++++------------- 4 files changed, 28 insertions(+), 47 deletions(-) diff --git a/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js b/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js index 5d50f9aff8..2e4c20b831 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js +++ b/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js @@ -28,12 +28,10 @@ const getFileResourceSubvalue = async ({ attribute, querySingleResource }: SubVa }; }; -const getImageResourceSubvalue = async ({ attribute, querySingleResource, minorServerVersion }: SubValueFunctionParams) => { +const getImageResourceSubvalue = async ({ attribute, minorServerVersion }: SubValueFunctionParams) => { const { id, value, teiId, programId, absoluteApiPath } = attribute; if (!value) return null; - const { displayName } = await querySingleResource({ resource: 'fileResources', id: value }); - const urls = hasAPISupportForFeature(minorServerVersion, FEATURES.trackerImageEndpoint) ? { url: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${id}/image?program=${programId}`, previewUrl: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${id}/image?program=${programId}&dimension=small`, @@ -43,7 +41,6 @@ const getImageResourceSubvalue = async ({ attribute, querySingleResource, minorS }; return { - name: displayName, value, ...urls, }; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js index 5042919cbc..a4dff1973f 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js @@ -27,15 +27,13 @@ const getFileResourceSubvalue = async (keys: Object, querySingleResource: QueryS }, {}); }; -const getImageSubvalue = async (keys: Object, querySingleResource: QuerySingleResource, eventId: string, absoluteApiPath: string) => { - const promises = Object.keys(keys) - .map(async (key) => { +const getImageSubvalue = (keys: Object, querySingleResource: QuerySingleResource, eventId: string, absoluteApiPath: string) => ( + Object.keys(keys) + .map((key) => { const value = keys[key]; if (value) { - const { id, displayName: name } = await querySingleResource({ resource: `fileResources/${value}` }); return { - id, - name, + value, ...(featureAvailable(FEATURES.trackerImageEndpoint) ? { url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${key}/image`, @@ -48,17 +46,13 @@ const getImageSubvalue = async (keys: Object, querySingleResource: QuerySingleRe }; } return {}; - }); - - return (await Promise.all(promises)) - .reduce((acc, { id, name, url, previewUrl }) => { - if (id) { - acc[id] = { value: id, name, url, previewUrl }; + }).reduce((acc, { value, url, previewUrl }) => { + if (value) { + acc[value] = { value, url, previewUrl }; } return acc; - }, {}); -}; - + }, {}) +); const getOrganisationUnitSubvalue = async (keys: Object, querySingleResource: QuerySingleResource) => { const ids = Object.values(keys) diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getListDataCommon/getSubvalues.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getListDataCommon/getSubvalues.js index 3087bfd68a..06fee42794 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getListDataCommon/getSubvalues.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getListDataCommon/getSubvalues.js @@ -14,7 +14,7 @@ import type { TeiColumnMetaForDataFetching } from '../../../../types'; import type { QuerySingleResource } from '../../../../../../../utils/api'; const getSubvaluesPlain = (querySingleResource: QuerySingleResource, absoluteApiPath: string) => { - const getImageOrFileResourceSubvalue = async (keys: Array) => { + const getFileResourceSubvalue = async (keys: Array) => { const promises = keys .map(async (key) => { const { id, displayName: name } = await querySingleResource({ resource: 'fileResources', id: key }); @@ -31,6 +31,12 @@ const getSubvaluesPlain = (querySingleResource: QuerySingleResource, absoluteApi }, {}); }; + const getImageResourceSubvalue = (keys: Array) => + keys.reduce((acc, key) => { + acc[key] = key; + return acc; + }, {}); + const getOrganisationUnitSubvalue = async (keys: Array) => getOrgUnitNames(keys, querySingleResource); @@ -38,8 +44,8 @@ const getSubvaluesPlain = (querySingleResource: QuerySingleResource, absoluteApi [string]: any, |} = { [dataElementTypes.ORGANISATION_UNIT]: getOrganisationUnitSubvalue, - [dataElementTypes.IMAGE]: getImageOrFileResourceSubvalue, - [dataElementTypes.FILE_RESOURCE]: getImageOrFileResourceSubvalue, + [dataElementTypes.IMAGE]: getImageResourceSubvalue, + [dataElementTypes.FILE_RESOURCE]: getFileResourceSubvalue, }; const subvaluePostProcessorByType: {| @@ -47,11 +53,9 @@ const getSubvaluesPlain = (querySingleResource: QuerySingleResource, absoluteApi |} = { [dataElementTypes.IMAGE]: ({ subvalueKey: value, - subvalue: name, imageUrl, previewUrl, }) => ({ - name, value, url: `${absoluteApiPath}${imageUrl}`, previewUrl: `${absoluteApiPath}${previewUrl}`, diff --git a/src/core_modules/capture-core/events/getSubValues.js b/src/core_modules/capture-core/events/getSubValues.js index 2f35c15cd8..8004fa62f9 100644 --- a/src/core_modules/capture-core/events/getSubValues.js +++ b/src/core_modules/capture-core/events/getSubValues.js @@ -35,37 +35,23 @@ const subValueGetterByElementType = { return null; }), [dataElementTypes.IMAGE]: ({ - value, eventId, metaElementId, absoluteApiPath, - querySingleResource, }: { - value: any, eventId: string, metaElementId: string, absoluteApiPath: string, - querySingleResource: QuerySingleResource, }) => - querySingleResource({ resource: `fileResources/${value}` }) - .then(res => - ({ - name: res.name, - value: res.id, - ...(featureAvailable(FEATURES.trackerImageEndpoint) ? - { - url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${metaElementId}/image`, - previewUrl: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${metaElementId}/image?dimension=small`, - } : { - url: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}`, - previewUrl: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}`, - } - ), - })) - .catch((error) => { - log.warn(errorCreator(GET_SUBVALUE_ERROR)({ value, eventId, metaElementId, error })); - return null; - }), + (featureAvailable(FEATURES.trackerImageEndpoint) ? + { + url: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${metaElementId}/image`, + previewUrl: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${metaElementId}/image?dimension=small`, + } : { + url: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}`, + previewUrl: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}`, + } + ), [dataElementTypes.ORGANISATION_UNIT]: ({ value, eventId, From 78418c0cc8dd35f6c4c590a759d07057ca0f2c0b Mon Sep 17 00:00:00 2001 From: Simona Domnisoru Date: Wed, 10 Jul 2024 11:12:35 +0200 Subject: [PATCH 2/2] feat: preview images in versions prior to 41 --- .../WidgetProfile/hooks/getSubValueForTei.js | 4 ++-- .../Stages/Stage/getEventDataWithSubValue.js | 2 +- .../getEventListData/convertToClientEvents.js | 6 +++--- .../helpers/getTeiListData/convertToClientTeis.js | 4 ++-- .../capture-core/converters/clientToList.js | 8 +------- .../capture-core/converters/clientToView.js | 10 +--------- .../capture-core/events/getSubValues.js | 2 +- .../trackedEntityInstances/getSubValues.js | 14 ++++---------- 8 files changed, 15 insertions(+), 35 deletions(-) diff --git a/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js b/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js index 2e4c20b831..241316d4eb 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js +++ b/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js @@ -36,8 +36,8 @@ const getImageResourceSubvalue = async ({ attribute, minorServerVersion }: SubVa url: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${id}/image?program=${programId}`, previewUrl: `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${id}/image?program=${programId}&dimension=small`, } : { - url: `${absoluteApiPath}/trackedEntityInstances/${teiId}/${id}/image`, - previewUrl: `${absoluteApiPath}/trackedEntityInstances/${teiId}/${id}/image`, + url: `${absoluteApiPath}/trackedEntityInstances/${teiId}/${id}/image?program=${programId}`, + previewUrl: `${absoluteApiPath}/trackedEntityInstances/${teiId}/${id}/image?program=${programId}&dimension=SMALL`, }; return { diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js index a4dff1973f..29919f0fe8 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/getEventDataWithSubValue.js @@ -40,7 +40,7 @@ const getImageSubvalue = (keys: Object, querySingleResource: QuerySingleResource previewUrl: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${key}/image?dimension=small`, } : { url: `${absoluteApiPath}/events/files?dataElementUid=${key}&eventUid=${eventId}`, - previewUrl: `${absoluteApiPath}/events/files?dataElementUid=${key}&eventUid=${eventId}`, + previewUrl: `${absoluteApiPath}/events/files?dataElementUid=${key}&eventUid=${eventId}&dimension=SMALL`, } ), }; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getEventListData/convertToClientEvents.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getEventListData/convertToClientEvents.js index 250970edf1..4e0e339c90 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getEventListData/convertToClientEvents.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getEventListData/convertToClientEvents.js @@ -53,8 +53,8 @@ const buildTEIRecord = ({ imageUrl: `/tracker/trackedEntities/${trackedEntity}/attributes/${id}/image?program=${programId}`, previewUrl: `/tracker/trackedEntities/${trackedEntity}/attributes/${id}/image?program=${programId}&dimension=small`, } : { - imageUrl: `/trackedEntityInstances/${trackedEntity}/${id}/image`, - previewUrl: `/trackedEntityInstances/${trackedEntity}/${id}/image`, + imageUrl: `/trackedEntityInstances/${trackedEntity}/${id}/image?program=${programId}`, + previewUrl: `/trackedEntityInstances/${trackedEntity}/${id}/image?program=${programId}&dimension=SMALL`, } ))() : {}; @@ -94,7 +94,7 @@ const buildEventRecord = ({ previewUrl: `/tracker/events/${apiEvent.event}/dataValues/${id}/image?dimension=small`, } : { imageUrl: `/events/files?dataElementUid=${id}&eventUid=${apiEvent.event}`, - previewUrl: `/events/files?dataElementUid=${id}&eventUid=${apiEvent.event}`, + previewUrl: `/events/files?dataElementUid=${id}&eventUid=${apiEvent.event}&dimension=SMALL`, } ))() : {}; diff --git a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getTeiListData/convertToClientTeis.js b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getTeiListData/convertToClientTeis.js index 101a796fd1..f726604bba 100644 --- a/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getTeiListData/convertToClientTeis.js +++ b/src/core_modules/capture-core/components/WorkingLists/TeiWorkingLists/epics/teiViewEpics/helpers/getTeiListData/convertToClientTeis.js @@ -34,8 +34,8 @@ export const convertToClientTeis = ( imageUrl: `/tracker/trackedEntities/${tei.trackedEntity}/attributes/${id}/image?program=${programId}`, previewUrl: `/tracker/trackedEntities/${tei.trackedEntity}/attributes/${id}/image?program=${programId}&dimension=small`, } : { - imageUrl: `/trackedEntityInstances/${tei.trackedEntity}/${id}/image`, - previewUrl: `/trackedEntityInstances/${tei.trackedEntity}/${id}/image`, + imageUrl: `/trackedEntityInstances/${tei.trackedEntity}/${id}/image?program=${programId}`, + previewUrl: `/trackedEntityInstances/${tei.trackedEntity}/${id}/image?program=${programId}&dimension=SMALL`, } ))() : {}; diff --git a/src/core_modules/capture-core/converters/clientToList.js b/src/core_modules/capture-core/converters/clientToList.js index ea052fda36..a5f39b4105 100644 --- a/src/core_modules/capture-core/converters/clientToList.js +++ b/src/core_modules/capture-core/converters/clientToList.js @@ -4,7 +4,6 @@ import moment from 'moment'; import i18n from '@dhis2/d2-i18n'; import { Tag } from '@dhis2/ui'; import { PreviewImage } from 'capture-ui'; -import { featureAvailable, FEATURES } from 'capture-core-utils'; import { dataElementTypes, type DataElement } from '../metaData'; import { convertMomentToDateFormatString } from '../utils/converters/date'; import { stringifyNumber } from './common/stringifyNumber'; @@ -60,12 +59,7 @@ function convertImageForDisplay(clientValue: ImageClientValue) { if (typeof clientValue === 'string' || clientValue instanceof String) { return clientValue; } - return featureAvailable(FEATURES.trackerImageEndpoint) ? ( - - ) : convertFileForDisplay(clientValue); + return ; } function convertRangeForDisplay(parser: any, clientValue: any) { diff --git a/src/core_modules/capture-core/converters/clientToView.js b/src/core_modules/capture-core/converters/clientToView.js index 51b91f07e5..a1301e6836 100644 --- a/src/core_modules/capture-core/converters/clientToView.js +++ b/src/core_modules/capture-core/converters/clientToView.js @@ -3,7 +3,6 @@ import React from 'react'; import moment from 'moment'; import i18n from '@dhis2/d2-i18n'; import { PreviewImage } from 'capture-ui'; -import { featureAvailable, FEATURES } from 'capture-core-utils'; import { dataElementTypes, type DataElement } from '../metaData'; import { convertMomentToDateFormatString } from '../utils/converters/date'; import { stringifyNumber } from './common/stringifyNumber'; @@ -52,16 +51,9 @@ function convertFileForDisplay(clientValue: FileClientValue) { } function convertImageForDisplay(clientValue: ImageClientValue) { - return featureAvailable(FEATURES.trackerImageEndpoint) ? ( - - ) : convertFileForDisplay(clientValue); + return ; } - const valueConvertersForType = { [dataElementTypes.NUMBER]: stringifyNumber, [dataElementTypes.INTEGER]: stringifyNumber, diff --git a/src/core_modules/capture-core/events/getSubValues.js b/src/core_modules/capture-core/events/getSubValues.js index 8004fa62f9..005dbc4d9d 100644 --- a/src/core_modules/capture-core/events/getSubValues.js +++ b/src/core_modules/capture-core/events/getSubValues.js @@ -49,7 +49,7 @@ const subValueGetterByElementType = { previewUrl: `${absoluteApiPath}/tracker/events/${eventId}/dataValues/${metaElementId}/image?dimension=small`, } : { url: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}`, - previewUrl: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}`, + previewUrl: `${absoluteApiPath}/events/files?dataElementUid=${metaElementId}&eventUid=${eventId}&dimension=SMALL`, } ), [dataElementTypes.ORGANISATION_UNIT]: ({ diff --git a/src/core_modules/capture-core/trackedEntityInstances/getSubValues.js b/src/core_modules/capture-core/trackedEntityInstances/getSubValues.js index 3b6f08c12c..abd6eda46a 100644 --- a/src/core_modules/capture-core/trackedEntityInstances/getSubValues.js +++ b/src/core_modules/capture-core/trackedEntityInstances/getSubValues.js @@ -16,16 +16,10 @@ const subValueGetterByElementType = { absoluteApiPath: string, programId: ?string, }) => { - const buildUrl = () => { - if (featureAvailable(FEATURES.trackerImageEndpoint)) { - if (programId) { - return `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?program=${programId}&dimension=small`; - } - return `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?dimension=small`; - } - return `${absoluteApiPath}/trackedEntityInstances/${teiId}/${attributeId}/image`; - }; - const previewUrl = buildUrl(); + const url = featureAvailable(FEATURES.trackerImageEndpoint) + ? `${absoluteApiPath}/tracker/trackedEntities/${teiId}/attributes/${attributeId}/image?dimension=small` + : `${absoluteApiPath}/trackedEntityInstances/${teiId}/${attributeId}/image?dimension=SMALL`; + const previewUrl = programId ? `${url}&program=${programId}` : url; return { previewUrl,