From 02ad41751c496b61fd784cc1370983fa44ed1743 Mon Sep 17 00:00:00 2001 From: Usama Idriss Kakumba <53287480+usamaidrsk@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:47:35 +0300 Subject: [PATCH] (fix) O3-2120: Move `OpenMRS ID` patient search identifier to `defaultIdentifierTypes` (#1061) * refactor: move OpenMRS ID identifier to defaultIdentifierTypes in the config-schema * refactor: proper description to defaultIndentifierTypes * feat: use preferred identifier as fallback * fix: fix tests * fix: remove unrelated comment --------- Co-authored-by: Brandon Istenes --- .../compact-patient-banner.component.tsx | 48 ++++++------------- .../src/config-schema.ts | 15 +++--- .../esm-patient-search-app/src/types/index.ts | 4 ++ 3 files changed, 25 insertions(+), 42 deletions(-) diff --git a/packages/esm-patient-search-app/src/compact-patient-search/compact-patient-banner.component.tsx b/packages/esm-patient-search-app/src/compact-patient-search/compact-patient-banner.component.tsx index fc69186c0..ab7e84c89 100644 --- a/packages/esm-patient-search-app/src/compact-patient-search/compact-patient-banner.component.tsx +++ b/packages/esm-patient-search-app/src/compact-patient-search/compact-patient-banner.component.tsx @@ -1,11 +1,11 @@ import { Tag } from '@carbon/react'; import { + age, ConfigurableLink, ExtensionSlot, - PatientPhoto, - age, getPatientName, interpolateString, + PatientPhoto, useConfig, } from '@openmrs/esm-framework'; import classNames from 'classnames'; @@ -98,9 +98,17 @@ const CompactPatientBanner = forwardRef {fhirPatients.map((patient, index) => { - const patientIdentifiers = patients[index].identifiers.filter((identifier) => - config.defaultIdentifierTypes.includes(identifier.identifierType.uuid), + const preferredIdentifier = patients[index].identifiers.find((identifier) => identifier.preferred); + + const configuredIdentifiers = patients[index].identifiers.filter( + (identifier) => + !identifier.preferred && config.defaultIdentifierTypes.includes(identifier.identifierType.uuid), ); + + const patientIdentifiers = preferredIdentifier + ? [preferredIdentifier, ...configuredIdentifiers] + : configuredIdentifiers; + const patientName = getPatientName(patient); return ( @@ -120,19 +128,9 @@ const CompactPatientBanner = forwardRef {getGender(patient.gender)} · {age(patient.birthDate)} · - {config.defaultIdentifierTypes.length ? ( - <> - {patientIdentifiers.length > 1 ? ( - - ) : ( - - )} - - ) : ( - <> - · {patients[index].identifiers?.[0]?.identifier} - - )} + {patientIdentifiers.map((identifier) => ( + + ))} @@ -189,20 +187,4 @@ const IdentifierTag: React.FC = ({ identifier }) => { ); }; -const DefaultIdentifiers: React.FC = ({ identifiers }) => { - return ( - <> - {identifiers.map((identifier) => ( - - ))} - - ); -}; - -const FallbackIdentifier: React.FC = ({ patient, identifierName }) => { - const identifier = patient.identifiers.find((identifier) => identifier.identifierType.display === identifierName); - - return identifier ? : null; -}; - export default CompactPatientBanner; diff --git a/packages/esm-patient-search-app/src/config-schema.ts b/packages/esm-patient-search-app/src/config-schema.ts index 86746e817..3759d9718 100644 --- a/packages/esm-patient-search-app/src/config-schema.ts +++ b/packages/esm-patient-search-app/src/config-schema.ts @@ -1,4 +1,5 @@ import { Type, validators } from '@openmrs/esm-framework'; + export const configSchema = { search: { patientResultUrl: { @@ -41,15 +42,11 @@ export const configSchema = { _elements: { _type: Type.UUID, }, - _description: - 'A list of identifier types to be displayed in the patient search results as banner tags. If no defaultIdentifierTypes are provided, the defaultIdentifier will be displayed.', - // This UUID is for the OpenMRS ID - _default: ['05a29f94-c0ed-11e2-94be-8c13b969e334'], - }, - defaultIdentifier: { - _type: Type.String, - _description: 'Identifer type to be displayed when no defaultIdentifierTypes are provided. Default is OpenMRS ID.', - _default: 'OpenMRS ID', + _description: 'A list of identifier types to be displayed in the patient search results as banner tags.', + _default: [ + // This UUID is for the OpenMRS ID identifier + '05a29f94-c0ed-11e2-94be-8c13b969e334', + ], }, }; diff --git a/packages/esm-patient-search-app/src/types/index.ts b/packages/esm-patient-search-app/src/types/index.ts index 05da7110c..fe96e211f 100644 --- a/packages/esm-patient-search-app/src/types/index.ts +++ b/packages/esm-patient-search-app/src/types/index.ts @@ -26,7 +26,9 @@ export interface Identifier { identifierType: OpenmrsResource; location: OpenmrsResource; uuid: string; + preferred: boolean; } + export interface Address { preferred: boolean; voided: boolean; @@ -36,6 +38,7 @@ export interface Address { postalCode: string; stateProvince: string; } + export interface FHIRPatientType { id: string; identifier: Array; @@ -77,6 +80,7 @@ export interface FHIRPatientSearchResponse { resource: FHIRPatientType; }>; } + export interface PatientSearchResponse { data?: Array; isLoading: boolean;