diff --git a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/banner/patient-banner.component.tsx b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/banner/patient-banner.component.tsx index ecdf7b5f4..f5eb3526c 100644 --- a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/banner/patient-banner.component.tsx +++ b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/banner/patient-banner.component.tsx @@ -167,9 +167,7 @@ const PatientBanner: React.FC = ({ patient, patientUuid, hid )} - {showContactDetails && ( - - )} + {showContactDetails && } ); }; diff --git a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.component.tsx b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.component.tsx index 645a1ed69..b4503feab 100644 --- a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.component.tsx +++ b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.component.tsx @@ -1,33 +1,108 @@ -import React from 'react'; -import classNames from 'classnames'; +import React, { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { SkeletonText } from '@carbon/react'; +import { InlineLoading } from '@carbon/react'; +import { ConfigurableLink, parseDate, useConfig, usePatient } from '@openmrs/esm-framework'; import { useRelationships } from './relationships.resource'; import { usePatientContactAttributes } from '../hooks/usePatientAttributes'; -import type { Address as AddressType } from '../../../types'; +import { usePatientListsForPatient } from '../hooks/usePatientListsForPatient'; import styles from './contact-details.scss'; +import classNames from 'classnames'; interface ContactDetailsProps { - address: Array; patientId: string; - isDeceased: boolean; + deceased: boolean; } -const Address: React.FC<{ address: AddressType }> = ({ address }) => { +const PatientLists: React.FC<{ patientUuid: string }> = ({ patientUuid }) => { const { t } = useTranslation(); + const { cohorts = [], isLoading } = usePatientListsForPatient(patientUuid); return ( + <> +

+ {t('patientLists', 'Patient Lists')} ({cohorts?.length ?? 0}) +

+ {isLoading ? ( + + ) : ( +
    + {(() => { + if (cohorts?.length > 0) { + const sortedLists = cohorts.sort( + (a, b) => parseDate(a.startDate).getTime() - parseDate(b.startDate).getTime(), + ); + const slicedLists = sortedLists.slice(0, 3); + return slicedLists?.map((cohort) => ( +
  • + + {cohort.name} + +
  • + )); + } + return
  • --
  • ; + })()} +
  • + + {cohorts.length > 3 + ? t('seeMoreLists', 'See {{count}} more lists', { + count: cohorts?.length - 3, + }) + : ''} + +
  • +
+ )} + + ); +}; + +const Address: React.FC<{ patientId: string }> = ({ patientId }) => { + const { isLoading, patient } = usePatient(patientId); + const address = patient?.address?.find((a) => a.use === 'home'); + const { t } = useTranslation(); + const getAddressKey = (url) => url.split('#')[1]; + /* + DO NOT REMOVE THIS COMMENT UNLESS YOU UNDERSTAND WHY IT IS HERE + + t('address1', 'Address line 1') + t('address2', 'Address line 2') + t('city', 'City') + t('cityVillage', 'City') + t('country', 'Country') + t('countyDistrict', 'District') + t('district', 'District') + t('postalCode', 'Postal code') + t('state', 'State') + t('stateProvince', 'State') + */ + + return isLoading ? ( + + ) : ( <>

{t('address', 'Address')}

    {address ? ( - <> -
  • {address.postalCode}
  • -
  • {address.address1}
  • -
  • {address.cityVillage}
  • -
  • {address.stateProvince}
  • -
  • {address.country}
  • - + + {Object.entries(address) + .filter(([key]) => !['use', 'id'].includes(key)) + .map(([key, value]) => + key === 'extension' ? ( + address?.extension[0]?.extension.map((add, i) => { + return ( +
  • + {t(getAddressKey(add.url), getAddressKey(add.url))}: {add.valueString} +
  • + ); + }) + ) : ( +
  • + {t(key, key)}: {value} +
  • + ), + )} +
    ) : ( '--' )} @@ -36,26 +111,41 @@ const Address: React.FC<{ address: AddressType }> = ({ address }) => { ); }; -const Contact: React.FC<{ patientUuid: string }> = ({ patientUuid }) => { +const Contact: React.FC<{ patientUuid: string; deceased?: boolean }> = ({ patientUuid }) => { const { t } = useTranslation(); - const { isLoading, contactAttributes } = usePatientContactAttributes(patientUuid); + const { isLoading: isLoadingAttributes, contactAttributes } = usePatientContactAttributes(patientUuid); + + const contacts = useMemo( + () => + contactAttributes + ? [ + ...contactAttributes?.map((contact) => [ + t(contact.attributeType.display, contact.attributeType.display), + contact.value, + ]), + ] + : [], + [contactAttributes], + ); return ( <>

    {t('contactDetails', 'Contact Details')}

    -
      - {isLoading ? ( - - ) : contactAttributes?.length ? ( - contactAttributes?.map(({ attributeType, value, uuid }) => ( -
    • - {attributeType.display} : {value} -
    • - )) - ) : ( - '--' - )} -
    + {isLoadingAttributes ? ( + + ) : ( +
      + {contacts.length ? ( + contacts.map(([label, value], index) => ( +
    • + {label}: {value} +
    • + )) + ) : ( +
    • --
    • + )} +
    + )} ); }; @@ -67,38 +157,39 @@ const Relationships: React.FC<{ patientId: string }> = ({ patientId }) => { return ( <>

    {t('relationships', 'Relationships')}

    - <> - {isLoading ? ( - - ) : relationships?.length ? ( -
      - {relationships.map((r) => ( -
    • -
      {r.display}
      -
      {r.relationshipType}
      -
      {`${r.relativeAge} ${r.relativeAge === 1 ? 'yr' : 'yrs'}`}
      -
    • - ))} -
    - ) : ( - '--' - )} - + {isLoading ? ( + + ) : ( +
      + {relationships?.length > 0 ? ( + <> + {relationships.map((r) => ( +
    • +
      {r.display}
      +
      {r.relationshipType}
      +
      + {`${r.relativeAge ? r.relativeAge : '--'} ${ + r.relativeAge ? (r.relativeAge === 1 ? 'yr' : 'yrs') : '' + }`} +
      +
    • + ))} + + ) : ( +
    • --
    • + )} +
    + )} ); }; -const ContactDetails: React.FC = ({ address, patientId, isDeceased }) => { - const currentAddress = address ? address.find((a) => a.preferred) : undefined; - +const ContactDetails: React.FC = ({ patientId, deceased }) => { return ( -
    +
    -
    +
    @@ -108,7 +199,9 @@ const ContactDetails: React.FC = ({ address, patientId, isD
    -
    {/* Patient lists go here */}
    +
    + +
    ); diff --git a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.test.tsx b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.test.tsx index 7a9bd6d60..dd7744b67 100644 --- a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.test.tsx +++ b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/contact-details/contact-details.test.tsx @@ -1,82 +1,170 @@ import React from 'react'; -import { render, screen } from '@testing-library/react'; +import { screen } from '@testing-library/react'; +import { renderWithSwr } from 'tools'; +import { usePatientAttributes, usePatientContactAttributes } from '../hooks/usePatientAttributes'; +import { usePatientListsForPatient } from '../hooks/usePatientListsForPatient'; import { useRelationships } from './relationships.resource'; -import { usePatientContactAttributes } from '../hooks/usePatientAttributes'; -import { mockAddress } from '__mocks__'; import ContactDetails from './contact-details.component'; +import { usePatient } from '@openmrs/esm-framework'; +const mockedUsePatient = usePatient as jest.Mock; +const mockedUsePatientAttributes = usePatientAttributes as jest.Mock; +const mockedUsePatientContactAttributes = usePatientContactAttributes as jest.Mock; +const mockUsePatientListsForPatient = usePatientListsForPatient as jest.Mock; const mockUseRelationships = useRelationships as jest.Mock; -const mockUsePatientContactAttributes = usePatientContactAttributes as jest.Mock; -const mockContactAttributes = [ - { attributeType: { display: 'Email' }, value: 'test@example.com', uuid: '24252571-dd5a-11e6-9d9c-0242ac152222' }, +const mockRelationships = [ + { + display: '100ADT - Amanda Robinson', + name: 'Amanda Robinson', + relationshipType: 'Sibling', + relativeAge: 24, + relativeUuid: '07006bcb-91d4-4c57-a5f7-49751899d9b5', + uuid: '993bc79d-5ca5-4c76-b4b3-adf49e25bd0b', + }, ]; -const mockRelationships = [ +const mockPersonAttributes = [ + { + display: 'Next of Kin Contact Phone Number = 0000000000', + uuid: '1de1ac71-68e8-4a08-a7e2-5042093d4e46', + value: '0700-000-000', + attributeType: { + uuid: 'a657a4f1-9c0f-444b-a1fd-445bb91dd12d', + display: 'Next of Kin Contact Phone Number', + }, + }, { - uuid: '24252571-dd5a-11e6-9d9c-0242ac150002', - display: 'John Doe', - relationshipType: 'Family', - relativeAge: 30, + display: 'Phone number', + uuid: 'asdflkjhasdf', + value: '+0123456789', + attributeType: { + uuid: 'qweproiuqweproiu', + display: 'Phone number', + }, }, ]; -jest.mock('./relationships.resource'); -jest.mock('../hooks/usePatientAttributes'); +const mockCohorts = [ + { + uuid: 'fdc95682-e206-421b-9534-e2a4010cc05d', + name: 'List three', + startDate: '2023-04-19T23:26:27.000+0000', + endDate: null, + }, + { + uuid: '1d48bec7-6aab-464c-ac16-687ba46e7812', + name: ' Test patient List-47', + startDate: '2023-04-24T23:28:49.000+0000', + endDate: null, + }, + { + uuid: '6ce81b61-387d-43ab-86fb-606fa16d39dd', + name: ' Test patient List-41', + startDate: '2023-04-24T23:28:49.000+0000', + endDate: null, + }, + { + uuid: '1361caf0-b3c3-4937-88e3-40074f7f3320', + name: 'Potential Patients', + startDate: '2023-06-07T15:40:00.000+0000', + endDate: null, + }, +]; -mockUsePatientContactAttributes.mockReturnValue({ - isLoading: false, - contactAttributes: mockContactAttributes, -}); +jest.mock('../hooks/usePatientAttributes', () => ({ + usePatientAttributes: jest.fn(), + usePatientContactAttributes: jest.fn(), +})); -mockUseRelationships.mockReturnValue({ isLoading: false, data: mockRelationships }); +jest.mock('../hooks/usePatientListsForPatient', () => ({ + usePatientListsForPatient: jest.fn(), +})); + +jest.mock('./relationships.resource', () => ({ + useRelationships: jest.fn(), +})); describe('ContactDetails', () => { beforeEach(() => { - mockUsePatientContactAttributes.mockReturnValue({ + mockedUsePatient.mockReturnValue({ + isLoading: false, + patient: { + address: [ + { + city: 'Foo', + country: 'Bar', + id: '0000', + postalCode: '00100', + state: 'Quux', + use: 'home', + }, + ], + telecom: [{ system: 'Cellular', value: '+0123456789' }], + }, + }); + mockedUsePatientContactAttributes.mockReturnValue({ isLoading: false, - contactAttributes: mockContactAttributes, + contactAttributes: mockPersonAttributes, }); - mockUseRelationships.mockReturnValue({ isLoading: false, data: mockRelationships }); - }); - it('renders address', () => { - render(); + mockUsePatientListsForPatient.mockReturnValue({ + isLoading: false, + cohorts: mockCohorts, + }); - expect(screen.getByText('Address')).toBeInTheDocument(); - expect(screen.getByText('12345')).toBeInTheDocument(); - expect(screen.getByText('123 Main St')).toBeInTheDocument(); - expect(screen.getByText('City')).toBeInTheDocument(); - expect(screen.getByText('State')).toBeInTheDocument(); - expect(screen.getByText('Country')).toBeInTheDocument(); + mockUseRelationships.mockReturnValue({ + isLoading: false, + data: mockRelationships, + }); }); - it('renders contact attributes', async () => { - render(); + it("renders the patient's address, contact details, patient lists, and relationships when available", async () => { + renderWithSwr(); + expect(screen.getByText('Address')).toBeInTheDocument(); expect(screen.getByText('Contact Details')).toBeInTheDocument(); - expect(screen.getByText('Email : test@example.com')); - }); - - it('renders relationships', async () => { - render(); - expect(screen.getByText('Relationships')).toBeInTheDocument(); - expect(screen.getByText('John Doe')).toBeInTheDocument(); + expect(screen.getByText(/Amanda Robinson/)).toBeInTheDocument(); + expect(screen.getByText(/Sibling/i)).toBeInTheDocument(); + expect(screen.getByText(/24 yrs/i)).toBeInTheDocument(); + expect(screen.getByText(/\+0123456789/i)).toBeInTheDocument(); + expect(screen.getByText(/Next of Kin Contact Phone Number/i)).toBeInTheDocument(); + expect(screen.getByText(/0700-000-000/)).toBeInTheDocument(); + expect(screen.getByText(/Patient Lists/)).toBeInTheDocument(); + expect(screen.getByText(/Test patient List-47/)).toBeInTheDocument(); + expect(screen.getByText(/List three/)).toBeInTheDocument(); }); - it('renders skeleton when loading', async () => { - mockUsePatientContactAttributes.mockReturnValue({ - isLoading: true, + it('renders an empty state view when contact details, relations, patient lists and addresses are not available', async () => { + mockedUsePatient.mockReturnValue({ + isLoading: false, + address: [], + }); + mockedUsePatientAttributes.mockReturnValue({ + isLoading: false, + attributes: [], + error: null, + }); + mockedUsePatientContactAttributes.mockReturnValue({ + isLoading: false, contactAttributes: [], }); + mockUsePatientListsForPatient.mockReturnValue({ + isLoading: false, + cohorts: [], + }); + mockUseRelationships.mockReturnValue({ + isLoading: false, + data: [], + }); - mockUseRelationships.mockReturnValue({ isLoading: true, data: [] }); - - render(); + renderWithSwr(); + expect(screen.getByText('Address')).toBeInTheDocument(); + expect(screen.getByText('Relationships')).toBeInTheDocument(); expect(screen.getByText('Contact Details')).toBeInTheDocument(); - expect(screen.queryByText('John Doe')).not.toBeInTheDocument(); - expect(screen.queryByText('Email : test@example.com')).not.toBeInTheDocument(); + expect(screen.getByText(/Patient Lists/)).toBeInTheDocument(); + expect(screen.getAllByText('--').length).toBe(4); }); }); diff --git a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/hooks/usePatientListsForPatient.ts b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/hooks/usePatientListsForPatient.ts new file mode 100644 index 000000000..65f861cee --- /dev/null +++ b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/hooks/usePatientListsForPatient.ts @@ -0,0 +1,19 @@ +import { useMemo } from 'react'; +import useSWR from 'swr'; +import { type FetchResponse, openmrsFetch } from '@openmrs/esm-framework'; +import { type CohortMemberResponse } from '../types'; + +export function usePatientListsForPatient(patientUuid: string) { + const customRepresentation = 'custom:(uuid,patient:ref,cohort:(uuid,name,startDate,endDate))'; + const url = patientUuid ? `ws/rest/v1/cohortm/cohortmember?patient=${patientUuid}&v=${customRepresentation}` : null; + const { data, isLoading } = useSWR, Error>(url, openmrsFetch); + + const cohorts = data?.data?.results.map((ref) => ({ + uuid: ref.cohort.uuid, + name: ref.cohort.name, + startDate: ref.cohort.startDate, + endDate: ref.cohort.endDate, + })); + + return useMemo(() => ({ cohorts, isLoading }), [isLoading, cohorts]); +} diff --git a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/types/index.ts b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/types/index.ts index 473d1163e..2060edf2e 100644 --- a/packages/esm-patient-search-app/src/patient-search-page/patient-banner/types/index.ts +++ b/packages/esm-patient-search-app/src/patient-search-page/patient-banner/types/index.ts @@ -35,3 +35,20 @@ export interface Attribute { uuid: string; value: string | number; } + +export interface CohortMemberResponse { + results: Array; +} + +interface CohortMember { + uuid: string; + patient: OpenmrsResource; + cohort: Cohort; +} + +interface Cohort { + uuid: string; + name: string; + startDate: string; + endDate: string; +} diff --git a/packages/esm-patient-search-app/src/types/index.ts b/packages/esm-patient-search-app/src/types/index.ts index bb4d9afeb..adf38b1f0 100644 --- a/packages/esm-patient-search-app/src/types/index.ts +++ b/packages/esm-patient-search-app/src/types/index.ts @@ -29,6 +29,7 @@ export interface Identifier { } export interface Address { preferred: boolean; + voided: boolean; address1: string; cityVillage: string; country: string; diff --git a/packages/esm-patient-search-app/translations/ar.json b/packages/esm-patient-search-app/translations/ar.json index 6f66e9e4a..ca64d23e9 100644 --- a/packages/esm-patient-search-app/translations/ar.json +++ b/packages/esm-patient-search-app/translations/ar.json @@ -1,15 +1,22 @@ { "actions": "الإجراءات", "address": "العنوان", + "address1": "سطر العنوان الأول", + "address2": "سطر العنوان الثاني", "age": "العمر", "any": "أي", "apply": "تطبيق", + "city": "المدينة", + "cityVillage": "المدينة", "clear": "مسح", "clearSearch": "مسح البحث", "closeSearch": "Close Search Panel", "contactDetails": "تفاصيل الاتصال", "countOfFiltersApplied": "تم تطبيق الفلاتر", + "country": "الدولة", + "countyDistrict": "المنطقة", "dayOfBirth": "يوم الميلاد", + "district": "المنطقة", "error": "خطأ", "errorCopy": "عذرًا، حدث خطأ. يمكنك محاولة إعادة تحميل هذه الصفحة، أو الاتصال بمسؤول الموقع وذكر رمز الخطأ أعلاه.", "female": "أنثى", @@ -21,14 +28,15 @@ "noPatientChartsFoundMessage": "عذرًا، لم يتم العثور على سجلات المرضى", "other": "آخر", "phoneNumber": "رقم الهاتف", + "postalCode": "الرمز البريدي", "postcode": "الرمز البريدي", "previousPage": "الصفحة السابقة", - "recentSearchResultsCount_zero": "{{count}} نتيجة بحث حديثة", - "recentSearchResultsCount_one": "{{count}} نتيجة بحث حديثة", - "recentSearchResultsCount_two": "{{count}} نتيجة بحث حديثة", "recentSearchResultsCount_few": "{{count}} نتيجة بحث حديثة", "recentSearchResultsCount_many": "{{count}} نتيجة بحث حديثة", + "recentSearchResultsCount_one": "{{count}} نتيجة بحث حديثة", "recentSearchResultsCount_other": "{{count}} نتيجة بحث حديثة", + "recentSearchResultsCount_two": "{{count}} نتيجة بحث حديثة", + "recentSearchResultsCount_zero": "{{count}} نتيجة بحث حديثة", "refineSearch": "تحسين البحث", "refineSearchHeaderText": "إضافة معايير بحث إضافية", "refineSearchTabletBannerText": "لا يمكنك العثور على من تبحث عنه؟", @@ -39,14 +47,16 @@ "searchingText": "جاري البحث...", "searchPatient": "بحث عن المريض", "searchResults": "نتائج البحث", - "searchResultsCount_zero": "{{count}} نتيجة بحث", - "searchResultsCount_one": "{{count}} نتيجة بحث", - "searchResultsCount_two": "{{count}} نتيجة بحث", "searchResultsCount_few": "{{count}} نتيجة بحث", "searchResultsCount_many": "{{count}} نتيجة بحث", + "searchResultsCount_one": "{{count}} نتيجة بحث", "searchResultsCount_other": "{{count}} نتيجة بحث", + "searchResultsCount_two": "{{count}} نتيجة بحث", + "searchResultsCount_zero": "{{count}} نتيجة بحث", "sex": "الجنس", "showDetails": "عرض التفاصيل", + "state": "الولاية", + "stateProvince": "الولاية", "trySearchWithPatientUniqueID": "حاول البحث مرة أخرى باستخدام رقم التعريف الفريد للمريض", "unknown": "غير معروف", "yearOfBirth": "سنة الميلاد" diff --git a/packages/esm-patient-search-app/translations/en.json b/packages/esm-patient-search-app/translations/en.json index 9773f5ec7..e404e4da6 100644 --- a/packages/esm-patient-search-app/translations/en.json +++ b/packages/esm-patient-search-app/translations/en.json @@ -1,26 +1,36 @@ { "actions": "Actions", "address": "Address", + "address1": "Address line 1", + "address2": "Address line 2", "age": "Age", "any": "Any", "apply": "Apply", + "city": "City", + "cityVillage": "City", "clear": "Clear", "clearSearch": "Clear", "closeSearch": "Close Search Panel", "contactDetails": "Contact Details", "countOfFiltersApplied": "filters applied", + "country": "Country", + "countyDistrict": "District", "dayOfBirth": "Day of Birth", + "district": "District", "error": "Error", "errorCopy": "Sorry, there was a an error. You can try to reload this page, or contact the site administrator and quote the error code above.", "female": "Female", "filtersAppliedText": "search queries added", "hideDetails": "Hide details", + "loading": "Loading", "male": "Male", "monthOfBirth": "Month of Birth", "nextPage": "Next page", "noPatientChartsFoundMessage": "Sorry, no patient charts were found", "other": "Other", + "patientLists": "Patient Lists", "phoneNumber": "Phone number", + "postalCode": "Postal code", "postcode": "Postcode", "previousPage": "Previous page", "recentSearchResultsCount_one": "{{count}} recent search result", @@ -37,8 +47,12 @@ "searchResults": "Search Results", "searchResultsCount_one": "{{count}} search result", "searchResultsCount_other": "{{count}} search results", + "seeMoreLists_one": "See {{count}} more lists", + "seeMoreLists_other": "See {{count}} more lists", "sex": "Sex", "showDetails": "Show details", + "state": "State", + "stateProvince": "State", "trySearchWithPatientUniqueID": "Try to search again using the patient's unique ID number", "unknown": "Unknown", "yearOfBirth": "Year of Birth" diff --git a/packages/esm-patient-search-app/translations/es.json b/packages/esm-patient-search-app/translations/es.json index 24fee9efc..5259246b4 100644 --- a/packages/esm-patient-search-app/translations/es.json +++ b/packages/esm-patient-search-app/translations/es.json @@ -1,15 +1,22 @@ { "actions": "Acciones", "address": "Dirección", + "address1": "Línea de Dirección 1", + "address2": "Línea de Dirección 2", "age": "Edad", "any": "Cualquier/a", "apply": "Aplicar", + "city": "Ciudad", + "cityVillage": "ciudad", "clear": "Borrar", "clearSearch": "Borrar", "closeSearch": "Close Search Panel", "contactDetails": "Información de contacto", "countOfFiltersApplied": "filtros utilizados", + "country": "País", + "countyDistrict": "Distrito", "dayOfBirth": "Día de Nacimiento", + "district": "Distrito", "error": "Error", "errorCopy": "Lo sentimos, se ha producido un error. Puede intentar recargar esta página o ponerse en contacto con el administrador del sitio y especificar el código de error.", "female": "Femenino", @@ -21,10 +28,11 @@ "noPatientChartsFoundMessage": "Lo sentimos, no se han encontrado historiales de pacientes", "other": "Otro", "phoneNumber": "Número de teléfono", + "postalCode": "Código Postal", "postcode": "Código postal", "previousPage": "Página anterior", - "recentSearchResultsCount_one": "{{count}} resultado de búsqueda reciente", "recentSearchResultsCount_many": "{{count}} resultados de búsqueda reciente", + "recentSearchResultsCount_one": "{{count}} resultado de búsqueda reciente", "recentSearchResultsCount_other": "{{count}} resultados de búsqueda reciente", "refineSearch": "Afinar búsqueda", "refineSearchHeaderText": "Añadir criterios de búsqueda adicionales", @@ -36,11 +44,13 @@ "searchingText": "Buscando...", "searchPatient": "Buscar Paciente", "searchResults": "Resultados de la Búsqueda", - "searchResultsCount_one": "{{count}} resultado de búsqueda", "searchResultsCount_many": "{{count}} resultados de búsqueda", + "searchResultsCount_one": "{{count}} resultado de búsqueda", "searchResultsCount_other": "{{count}} resultados de búsqueda", "sex": "Sexo", "showDetails": "Mostrar detalles", + "state": "State", + "stateProvince": "State", "trySearchWithPatientUniqueID": "Intente buscar con el número de identificación único del paciente", "unknown": "Desconocido", "yearOfBirth": "Año de Nacimiento" diff --git a/packages/esm-patient-search-app/translations/fr.json b/packages/esm-patient-search-app/translations/fr.json index 5077136e2..93317e19b 100644 --- a/packages/esm-patient-search-app/translations/fr.json +++ b/packages/esm-patient-search-app/translations/fr.json @@ -1,15 +1,22 @@ { "actions": "Actions", "address": "Adresse", + "address1": "Address line 1", + "address2": "Address line 2", "age": "Age", "any": "N'importe quel", "apply": "Appliquer", + "city": "City", + "cityVillage": "City", "clear": "Effacer", "clearSearch": "Effacer", "closeSearch": "Close Search Panel", "contactDetails": "Informations de contact", "countOfFiltersApplied": "Filtres appliqués", + "country": "Country", + "countyDistrict": "District", "dayOfBirth": "Day of Birth", + "district": "District", "error": "Erreur", "errorCopy": "Désolé, une erreur s'est produite. Vous pouvez tenter de rafraîchir la page, ou bien contacter l'administrateur du site et transmettre le message d'erreur ci-dessus.", "female": "Femme", @@ -21,10 +28,11 @@ "noPatientChartsFoundMessage": "Désolé, aucun dossier de patient n'a été trouvé", "other": "Autre", "phoneNumber": "Numéro de téléphone", + "postalCode": "Postal code", "postcode": "Code postal", "previousPage": "Page précédente", - "recentSearchResultsCount_one": "{{count}} recent search result", "recentSearchResultsCount_many": "{{count}} recent search results", + "recentSearchResultsCount_one": "{{count}} recent search result", "recentSearchResultsCount_other": "{{count}} recent search results", "refineSearch": "Affiner la recherche", "refineSearchHeaderText": "Ajouter un critère de recherche supplémentaire", @@ -36,11 +44,13 @@ "searchingText": "Recherche", "searchPatient": "Rechercher un patient", "searchResults": "Résultats de recherche", - "searchResultsCount_one": "{{count}} search result", "searchResultsCount_many": "{{count}} search results", + "searchResultsCount_one": "{{count}} search result", "searchResultsCount_other": "{{count}} search results", "sex": "Sexe", "showDetails": "Afficher les informations", + "state": "State", + "stateProvince": "State", "trySearchWithPatientUniqueID": "Essayez de chercher par l'identifiant unique du patient", "unknown": "Inconnu", "yearOfBirth": "Year of Birth" diff --git a/packages/esm-patient-search-app/translations/he.json b/packages/esm-patient-search-app/translations/he.json index 42cf19d02..67da61c0e 100644 --- a/packages/esm-patient-search-app/translations/he.json +++ b/packages/esm-patient-search-app/translations/he.json @@ -1,15 +1,23 @@ { "actions": "פעולות", "address": "כתובת", + "address": "כתובת", + "address1": "כתובת רשומה 1", + "address2": "כתובת רשומה 2", "age": "גיל", "any": "כל", "apply": "החל", + "city": "עיר", + "cityVillage": "עיר", "clear": "נקה", "clearSearch": "נקה", "closeSearch": "Close Search Panel", "contactDetails": "פרטי יצירת קשר", "countOfFiltersApplied": "מספר מסננים שהוחלו", + "country": "מדינה", + "countyDistrict": "מחוז", "dayOfBirth": "יום הלידה", + "district": "מחוז", "error": "שגיאה", "errorCopy": "מצטערים, אירעה שגיאה. ניתן לנסות לטעון מחדש את הדף או ליצור קשר עם מנהל האתר ולציין את קוד השגיאה שמופיע למעלה.", "female": "נקבה", @@ -21,12 +29,13 @@ "noPatientChartsFoundMessage": "מצטערים, לא נמצאו כרטיסי מטופלים", "other": "אחר", "phoneNumber": "מספר טלפון", + "postalCode": "מיקוד", "postcode": "מיקוד", "previousPage": "הדף הקודם", - "recentSearchResultsCount_one": "{{count}} תוצאת חיפוש אחרונה", - "recentSearchResultsCount_two": "{{count}} תוצאות חיפוש אחרונות", "recentSearchResultsCount_many": "{{count}} תוצאות חיפוש אחרונות", + "recentSearchResultsCount_one": "{{count}} תוצאת חיפוש אחרונה", "recentSearchResultsCount_other": "{{count}} תוצאות חיפוש אחרונות", + "recentSearchResultsCount_two": "{{count}} תוצאות חיפוש אחרונות", "refineSearch": "צמצם חיפוש", "refineSearchHeaderText": "הוסף קריטריונים נוספים לחיפוש", "refineSearchTabletBannerText": "לא ניתן למצוא את האדם שאתה מחפש?", @@ -37,12 +46,14 @@ "searchingText": "...מחפש", "searchPatient": "חיפוש מטופל", "searchResults": "תוצאות חיפוש", - "searchResultsCount_one": "{{count}} תוצאת חיפוש", - "searchResultsCount_two": "{{count}} תוצאות חיפוש", "searchResultsCount_many": "{{count}} תוצאות חיפוש", + "searchResultsCount_one": "{{count}} תוצאת חיפוש", "searchResultsCount_other": "{{count}} תוצאות חיפוש", + "searchResultsCount_two": "{{count}} תוצאות חיפוש", "sex": "מין", "showDetails": "הצג פרטים", + "state": "מדינה", + "stateProvince": "מדינה", "trySearchWithPatientUniqueID": "נסה לחפש עם מספר הזיהוי הייחודי של המטופל", "unknown": "לא ידוע", "yearOfBirth": "שנת הלידה" diff --git a/packages/esm-patient-search-app/translations/km.json b/packages/esm-patient-search-app/translations/km.json index 4c8b87028..39f961222 100644 --- a/packages/esm-patient-search-app/translations/km.json +++ b/packages/esm-patient-search-app/translations/km.json @@ -1,15 +1,21 @@ { "actions": "សកម្មភាព", "address": "អាសយដ្ឋាន", + "address2": "អសយដ្ឋានជួរទី 2", "age": "អាយុ", "any": "ណាមួយ", "apply": "អនុវត្ត", + "city": "ទីក្រុង", + "cityVillage": "ទីក្រុង", "clear": "ជម្រះ លុបចោល", "clearSearch": "ជម្រះ លុបចោល", "closeSearch": "Close Search Panel", "contactDetails": "ព័ត៌មានលម្អិតអំពីអ្នកជំងឺ", "countOfFiltersApplied": "បានអនុវត្តតម្រង ( ចុចតម្រង)", + "country": "ប្រទេស", + "countyDistrict": "ស្រុក/ខ័ណ្ឌ", "dayOfBirth": "Day of Birth", + "district": "ស្រុក/ខ័ណ្ឌ", "error": "កំហុស", "errorCopy": "សូមអភ័យទោស មានកំហុសមួយ។ អ្នកអាចព្យាយាមផ្ទុកទំព័រនេះឡើងវិញ ឬទាក់ទងអ្នកគ្រប់គ្រងគេហទំព័រ ហើយដកស្រង់កូដកំហុសខាងលើ។", "female": "ស្រី", @@ -21,6 +27,7 @@ "noPatientChartsFoundMessage": "សូមអភ័យទោស រកមិនឃើញតារាងអ្នកជំងឺទេ។", "other": "ផ្សេងទៀត", "phoneNumber": "លេខទូរស័ព្ទ", + "postalCode": "លេខកូដតំបន់", "postcode": "លេខកូដប្រៃសណីយ៍", "previousPage": "ទំព័រbមុន", "recentSearchResultsCount_other": "{{count}} recent search results", @@ -37,7 +44,9 @@ "searchResultsCount_other": "{{count}} search results", "sex": "ភេទ", "showDetails": "បង្ហាញព័ត៌មានលម្អិត", + "state": "រដ្ឋ", + "stateProvince": "រដ្ឋ", "trySearchWithPatientUniqueID": "ព្យាយាមស្វែងរកដោយប្រើអត្តលេខតែមួយគត់របស់អ្នកជំងឺ", - "unknown": "មិនដឹង", + "unknown": "មិនដឹង","address1": "អាសយដ្ឋានជួរទី១", "yearOfBirth": "Year of Birth" } diff --git a/packages/esm-patient-search-app/translations/zh.json b/packages/esm-patient-search-app/translations/zh.json index 031f39758..0645c4dcc 100644 --- a/packages/esm-patient-search-app/translations/zh.json +++ b/packages/esm-patient-search-app/translations/zh.json @@ -1,14 +1,21 @@ { "actions": "操作", "address": "地址", + "address1": "地址行1", + "address2": "地址行2", "age": "年龄", "any": "任意", "apply": "应用", + "city": "城市", + "cityVillage": "城市", "clear": "清除", "clearSearch": "清除", "contactDetails": "联系方式", "countOfFiltersApplied": "已应用筛选器", + "country": "国家", + "countyDistrict": "区县", "day": "日", + "district": "区县", "error": "错误", "errorCopy": "抱歉,发生了一个错误。您可以尝试重新加载此页面,或联系网站管理员并引用上面的错误代码。", "female": "女性", @@ -20,6 +27,7 @@ "orPatientName": "或者患者的姓名", "other": "其他", "phoneNumber": "电话号码", + "postalCode": "邮政编码", "postcode": "邮政编码", "previousPage": "上一页", "refineSearch": "细化搜索", @@ -37,6 +45,8 @@ "sex": "性别", "showAllDetails": "展示所有细节", "showLess": "展示更少", + "state": "省份", + "stateProvince": "省份", "trySearchWithPatientUniqueID": "尝试使用患者的唯一ID进行搜索", "unknown": "未知", "year": "年" diff --git a/packages/esm-patient-search-app/translations/zh_CN.json b/packages/esm-patient-search-app/translations/zh_CN.json index 031f39758..0645c4dcc 100644 --- a/packages/esm-patient-search-app/translations/zh_CN.json +++ b/packages/esm-patient-search-app/translations/zh_CN.json @@ -1,14 +1,21 @@ { "actions": "操作", "address": "地址", + "address1": "地址行1", + "address2": "地址行2", "age": "年龄", "any": "任意", "apply": "应用", + "city": "城市", + "cityVillage": "城市", "clear": "清除", "clearSearch": "清除", "contactDetails": "联系方式", "countOfFiltersApplied": "已应用筛选器", + "country": "国家", + "countyDistrict": "区县", "day": "日", + "district": "区县", "error": "错误", "errorCopy": "抱歉,发生了一个错误。您可以尝试重新加载此页面,或联系网站管理员并引用上面的错误代码。", "female": "女性", @@ -20,6 +27,7 @@ "orPatientName": "或者患者的姓名", "other": "其他", "phoneNumber": "电话号码", + "postalCode": "邮政编码", "postcode": "邮政编码", "previousPage": "上一页", "refineSearch": "细化搜索", @@ -37,6 +45,8 @@ "sex": "性别", "showAllDetails": "展示所有细节", "showLess": "展示更少", + "state": "省份", + "stateProvince": "省份", "trySearchWithPatientUniqueID": "尝试使用患者的唯一ID进行搜索", "unknown": "未知", "year": "年"