From e762129d3584d8a1c6d1e86ac75c7686c3e9b6b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:55:34 +0300 Subject: [PATCH 01/14] (chore) Update translations from Transifex (#2038) (chore) Update translations from Transifex (#2035) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../translations/fr.json | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/esm-patient-flags-app/translations/fr.json b/packages/esm-patient-flags-app/translations/fr.json index 3b7cf985a..1722cedca 100644 --- a/packages/esm-patient-flags-app/translations/fr.json +++ b/packages/esm-patient-flags-app/translations/fr.json @@ -1,29 +1,29 @@ { - "activeFirst": "Active first", + "activeFirst": "Actif en premier", "alphabetically": "A - Z", "clearSearch": "Effacer la recherche", - "closeFlagsBar": "Close flags bar", - "disableFlagError": "Disable flag error", - "disablingFlag": "Disabling flag...", - "discard": "Discard", - "edit": "Edit", - "editFlags": "Edit flags", - "editPatientFlags": "Edit patient flags", - "enabledFlag": "Enabled flag", - "enablingFlag": "Enabling flag...", - "flagCount_one": "{{count}} risk flag", - "flagCount_other": "{{count}} risk flags", - "flagDisabled": "Flag disabled", - "flagDisabledSuccessfully": "Flag successfully disabled", - "flagDisableError": "Error disabling the flag", - "flagEnabled": "flag enabled", - "flagEnabledSuccessfully": "Flag successfully enabled", - "flagEnableError": "Error enabling flag", - "loading": "Loading", - "matchesForSearchTerm_one": "{{count}} flag", - "matchesForSearchTerm_other": "{{count}} flags", - "noFlagsFound": "Sorry, no flags found matching your search", - "retiredFirst": "Retired first", - "saveAndClose": "Save & close", - "searchForAFlag": "Search for a flag" + "closeFlagsBar": "Fermer la barre des drapeaux", + "disableFlagError": "Erreur de désactivation du drapeau", + "disablingFlag": "Désactivation du drapeau en cours...", + "discard": "Abandonner", + "edit": "Modifier", + "editFlags": "Modifier les drapeaux", + "editPatientFlags": "Modifier les drapeaux du patient", + "enabledFlag": "Drapeau activé", + "enablingFlag": "Activation du drapeau en cours...", + "flagCount_one": "{{count}} drapeau de risque", + "flagCount_other": "{{count}} drapeaux de risque", + "flagDisabled": "Drapeau désactivé", + "flagDisabledSuccessfully": "Drapeau désactivé avec succès", + "flagDisableError": "Erreur lors de la désactivation du drapeau", + "flagEnabled": "drapeau activé", + "flagEnabledSuccessfully": "Drapeau activé avec succès", + "flagEnableError": "Erreur lors de l'activation du drapeau", + "loading": "Chargement", + "matchesForSearchTerm_one": "{{count}} drapeau", + "matchesForSearchTerm_other": "{{count}} drapeaux", + "noFlagsFound": "Désolé, aucun drapeau ne correspond à votre recherche", + "retiredFirst": "Retraité en premier", + "saveAndClose": "Sauvegarder et fermer", + "searchForAFlag": "Rechercher un drapeau" } From 7989276c33202d03f6e909364e40a3f06ee0c782 Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Fri, 27 Sep 2024 14:06:11 +0300 Subject: [PATCH 02/14] (fix) Pass patient object to banner actions menu (#2040) --- .../src/banner/patient-banner.component.tsx | 1 + yarn.lock | 210 +++++++++--------- 2 files changed, 106 insertions(+), 105 deletions(-) diff --git a/packages/esm-patient-banner-app/src/banner/patient-banner.component.tsx b/packages/esm-patient-banner-app/src/banner/patient-banner.component.tsx index 8721ec613..e012e46e0 100644 --- a/packages/esm-patient-banner-app/src/banner/patient-banner.component.tsx +++ b/packages/esm-patient-banner-app/src/banner/patient-banner.component.tsx @@ -68,6 +68,7 @@ const PatientBanner: React.FC = ({ patient, patientUuid, hid actionsSlotName="patient-actions-slot" isDeceased={patient.deceasedBoolean} patientUuid={patientUuid} + patient={patient} /> ) : null} diff --git a/yarn.lock b/yarn.lock index fcb144ecf..0a476de99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5516,9 +5516,9 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-api@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-api@npm:5.8.2-pre.2324" +"@openmrs/esm-api@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-api@npm:5.8.2-pre.2361" dependencies: "@types/fhir": "npm:0.0.31" lodash-es: "npm:^4.17.21" @@ -5527,17 +5527,17 @@ __metadata: "@openmrs/esm-error-handling": 5.x "@openmrs/esm-navigation": 5.x "@openmrs/esm-offline": 5.x - checksum: 10/749b34e205aee357959aa55b13bb3b217ef591bf4a859ebd6fed5d7a4446214baa080014ee28d29d3ada494d235894c1396edfddbc23aa4b9a75920837d12289 + checksum: 10/b4b531ca8efe645fc33215b4b0f36394a18524e986df4dc31514bfacf9faa8e25e0a2311a2ae41f17fd9c5507f16baee2c2cb328774237173f3b57ab358603a1 languageName: node linkType: hard -"@openmrs/esm-app-shell@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-app-shell@npm:5.8.2-pre.2324" +"@openmrs/esm-app-shell@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-app-shell@npm:5.8.2-pre.2361" dependencies: "@carbon/react": "npm:~1.37.0" - "@openmrs/esm-framework": "npm:5.8.2-pre.2324" - "@openmrs/esm-styleguide": "npm:5.8.2-pre.2324" + "@openmrs/esm-framework": "npm:5.8.2-pre.2361" + "@openmrs/esm-styleguide": "npm:5.8.2-pre.2361" dayjs: "npm:^1.10.4" dexie: "npm:^3.0.3" html-webpack-plugin: "npm:^5.5.0" @@ -5562,13 +5562,13 @@ __metadata: workbox-strategies: "npm:^6.1.5" workbox-webpack-plugin: "npm:^6.1.5" workbox-window: "npm:^6.1.5" - checksum: 10/3bbc83810f2bf61a5ccb85de7e07f46f6b5b4b1e5ca51059227ee37a38f2bae9ac449453e0239273df41f3a16899711b389fac72e4263f9e47e7a92726fac951 + checksum: 10/a71536c158c46b8e166bb4f77b7bf24c89d261c4a6611d96fcf181c9e040e6892125603684a1aa7f8b5deff19953a2514d1d62f5ea28890ca9455592fbd083ad languageName: node linkType: hard -"@openmrs/esm-config@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-config@npm:5.8.2-pre.2324" +"@openmrs/esm-config@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-config@npm:5.8.2-pre.2361" dependencies: ramda: "npm:^0.26.1" peerDependencies: @@ -5576,44 +5576,44 @@ __metadata: "@openmrs/esm-state": 5.x "@openmrs/esm-utils": 5.x single-spa: 5.x - checksum: 10/9558f4a11981e1506d4960b1a73766e0de02e2a14d44425ae15bd4ffe137fe9107bd45325f69af1d51db7f1aed8f9075d09d1a711c6b65f6293804c96eede224 + checksum: 10/0e3184227ab66a8ddd93c0c24e5822f0ca205b8421129f8d635b24e0befa213f95750d8346411aca74a17ef9fee75006e414b570c282d59fc13f95081f942720 languageName: node linkType: hard -"@openmrs/esm-context@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-context@npm:5.8.2-pre.2324" +"@openmrs/esm-context@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-context@npm:5.8.2-pre.2361" dependencies: immer: "npm:^10.0.4" peerDependencies: "@openmrs/esm-globals": 5.x "@openmrs/esm-state": 5.x - checksum: 10/ab937a20c214b8134568862f72e14f4b70b1226737066593de970b9be09b4a522094b1d3d68f13da377c0b40af041b44bb60703529ee58ca5c5965b5ae8a3866 + checksum: 10/61f1439da8658f41274d391cf41906adbaa5ab55e8955febbf919c840544ec4a60c60e967151fe7ebcc903466a259fd7d2a54b355af703280cb62698e3f48b52 languageName: node linkType: hard -"@openmrs/esm-dynamic-loading@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-dynamic-loading@npm:5.8.2-pre.2324" +"@openmrs/esm-dynamic-loading@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-dynamic-loading@npm:5.8.2-pre.2361" peerDependencies: "@openmrs/esm-globals": 5.x "@openmrs/esm-translations": 5.x - checksum: 10/36274d800b4857648822b5bf413899a2d06f8acfe1bf7f2225d666b7298eeaa36cffd4f73fdfa552d07abed5a026e5965088609db48d76ab9b861590c83ff546 + checksum: 10/bbb5d1de5b5872ea727957b7754bf171c3d6372736f9b5371adb368860d71ef2c537d7a0e10acf8a3caaa11fb1d1f77004cd7dd07b73e17f101dc450af8c20cd languageName: node linkType: hard -"@openmrs/esm-error-handling@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-error-handling@npm:5.8.2-pre.2324" +"@openmrs/esm-error-handling@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-error-handling@npm:5.8.2-pre.2361" peerDependencies: "@openmrs/esm-globals": 5.x - checksum: 10/7c4223cac88206dd05190068ee6eb2d8862acc29cca1f9f6853cb2899e4731f387b93c5dd31063e43e90bc65766f55b41afdf2b564ca7f55aa203a48a8ab84c0 + checksum: 10/4a039b47f1c776e3e60d4ecf55154666bb9e077f6122a543c5a2b12c6fd065704fa3ec107e0e0b5e3723dceff56096986a1ac6e3d15183b4a8d436cb1302fc5f languageName: node linkType: hard -"@openmrs/esm-expression-evaluator@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-expression-evaluator@npm:5.8.2-pre.2324" +"@openmrs/esm-expression-evaluator@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-expression-evaluator@npm:5.8.2-pre.2361" dependencies: "@jsep-plugin/arrow": "npm:^1.0.5" "@jsep-plugin/new": "npm:^1.0.3" @@ -5622,13 +5622,13 @@ __metadata: "@jsep-plugin/template": "npm:^1.0.4" "@jsep-plugin/ternary": "npm:^1.1.3" jsep: "npm:^1.3.9" - checksum: 10/67ed15e87113b865b28f85bd90f00384eac75a3c6e9c4cefa43f482bdd11178423f29663670ef914ceb09f74d12976955dcdb72b2c9f9fb9feb938d321bcf0cf + checksum: 10/5f1d014dee476efbb46c3852bc947a5741282bb1c0fa2a94092c2442ae87ab2bf915532d70a8f0e3ffacec15a10d913d052ef0daf5cbf9c4c229dca2a4270445 languageName: node linkType: hard -"@openmrs/esm-extensions@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-extensions@npm:5.8.2-pre.2324" +"@openmrs/esm-extensions@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-extensions@npm:5.8.2-pre.2361" dependencies: lodash-es: "npm:^4.17.21" peerDependencies: @@ -5639,20 +5639,20 @@ __metadata: "@openmrs/esm-state": 5.x "@openmrs/esm-utils": 5.x single-spa: 5.x - checksum: 10/d0cf434484f77aa4c03cca13ca77c788fc40479bb4d7322de03e1de2172944ff01789a066964a65d0e1ed00d0eb54f1e6dded7b42427b767d3766da2a4ce13b8 + checksum: 10/dc132b030b7ea22ea1fd01d75bb5d414d015198a6b0683c091c108f665af75d9e7f62674e5885ec2f1fd6eeafcb4a4ab705a8184eca96d6520e40af25a401b2e languageName: node linkType: hard -"@openmrs/esm-feature-flags@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-feature-flags@npm:5.8.2-pre.2324" +"@openmrs/esm-feature-flags@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-feature-flags@npm:5.8.2-pre.2361" dependencies: ramda: "npm:^0.26.1" peerDependencies: "@openmrs/esm-globals": 5.x "@openmrs/esm-state": 5.x single-spa: 5.x - checksum: 10/4e964e1b0792444b735ec485ebc69646ed7d7a1ff731447febde932b6a61989688c970f56ca00e2d01555e9b82d180c33415314fd6762cfb308d69c6820fa803 + checksum: 10/201a388ec97f05e19136b37e3a91b69bc1db1e68ca2d11fe52b886d6946c48eba38f1702bbe50b65cff200b94ac6df4be2da95b71698ac81fb8ed2889067bdb6 languageName: node linkType: hard @@ -5769,27 +5769,27 @@ __metadata: languageName: unknown linkType: soft -"@openmrs/esm-framework@npm:5.8.2-pre.2324, @openmrs/esm-framework@npm:next": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-framework@npm:5.8.2-pre.2324" - dependencies: - "@openmrs/esm-api": "npm:5.8.2-pre.2324" - "@openmrs/esm-config": "npm:5.8.2-pre.2324" - "@openmrs/esm-context": "npm:5.8.2-pre.2324" - "@openmrs/esm-dynamic-loading": "npm:5.8.2-pre.2324" - "@openmrs/esm-error-handling": "npm:5.8.2-pre.2324" - "@openmrs/esm-expression-evaluator": "npm:5.8.2-pre.2324" - "@openmrs/esm-extensions": "npm:5.8.2-pre.2324" - "@openmrs/esm-feature-flags": "npm:5.8.2-pre.2324" - "@openmrs/esm-globals": "npm:5.8.2-pre.2324" - "@openmrs/esm-navigation": "npm:5.8.2-pre.2324" - "@openmrs/esm-offline": "npm:5.8.2-pre.2324" - "@openmrs/esm-react-utils": "npm:5.8.2-pre.2324" - "@openmrs/esm-routes": "npm:5.8.2-pre.2324" - "@openmrs/esm-state": "npm:5.8.2-pre.2324" - "@openmrs/esm-styleguide": "npm:5.8.2-pre.2324" - "@openmrs/esm-translations": "npm:5.8.2-pre.2324" - "@openmrs/esm-utils": "npm:5.8.2-pre.2324" +"@openmrs/esm-framework@npm:5.8.2-pre.2361, @openmrs/esm-framework@npm:next": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-framework@npm:5.8.2-pre.2361" + dependencies: + "@openmrs/esm-api": "npm:5.8.2-pre.2361" + "@openmrs/esm-config": "npm:5.8.2-pre.2361" + "@openmrs/esm-context": "npm:5.8.2-pre.2361" + "@openmrs/esm-dynamic-loading": "npm:5.8.2-pre.2361" + "@openmrs/esm-error-handling": "npm:5.8.2-pre.2361" + "@openmrs/esm-expression-evaluator": "npm:5.8.2-pre.2361" + "@openmrs/esm-extensions": "npm:5.8.2-pre.2361" + "@openmrs/esm-feature-flags": "npm:5.8.2-pre.2361" + "@openmrs/esm-globals": "npm:5.8.2-pre.2361" + "@openmrs/esm-navigation": "npm:5.8.2-pre.2361" + "@openmrs/esm-offline": "npm:5.8.2-pre.2361" + "@openmrs/esm-react-utils": "npm:5.8.2-pre.2361" + "@openmrs/esm-routes": "npm:5.8.2-pre.2361" + "@openmrs/esm-state": "npm:5.8.2-pre.2361" + "@openmrs/esm-styleguide": "npm:5.8.2-pre.2361" + "@openmrs/esm-translations": "npm:5.8.2-pre.2361" + "@openmrs/esm-utils": "npm:5.8.2-pre.2361" dayjs: "npm:^1.10.7" peerDependencies: dayjs: 1.x @@ -5800,7 +5800,7 @@ __metadata: rxjs: 6.x single-spa: 5.x swr: 2.x - checksum: 10/d26979f2414ddaeca631ab8af8b7c746cd2d732c86e1ae6a7ed8425d5d7fa7b058d8be2ca11e120ddb253a4477061effe465af65467a72d1a982a503ee10fa5a + checksum: 10/6a5d1942087ea1b9658764c8886abad42dfc0dfb2e8ef79479b5ed093915a1f56531d2ccfd05c82961e329e80be2c1e177c8b7c2aecc6370ac2ebc776bf11e23 languageName: node linkType: hard @@ -5826,31 +5826,31 @@ __metadata: languageName: unknown linkType: soft -"@openmrs/esm-globals@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-globals@npm:5.8.2-pre.2324" +"@openmrs/esm-globals@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-globals@npm:5.8.2-pre.2361" dependencies: "@types/fhir": "npm:0.0.31" peerDependencies: single-spa: 5.x - checksum: 10/852a59b228460a18ee7f0b0795b6076e18af4f828ceb15a4974efb649639d1c2746360ef8f032a582ee2702bf4872e77697802a69c38d0a772a262c2343800f0 + checksum: 10/02a884d87c054f23ce4f77c9d4f2b2234016e64eedfa1dc24be97ed4201442f2b6f0f08b3a96d5976f65147b89db34dd48be03dd3bd69d3b2dab17a41e96141c languageName: node linkType: hard -"@openmrs/esm-navigation@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-navigation@npm:5.8.2-pre.2324" +"@openmrs/esm-navigation@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-navigation@npm:5.8.2-pre.2361" dependencies: path-to-regexp: "npm:6.1.0" peerDependencies: "@openmrs/esm-state": 5.x - checksum: 10/4c41021ebf2e7277f7c5efa2fb030ff0a222f18b73ac09c14af40b376d2b059c6bde2d3f752de7fdcf65c3b551fe802ced08e9eda6a1cda36e150237910e5849 + checksum: 10/c564aa323cdb97d7009ba10c57c7aefc9d4af2e29a82494c80fdc361f46b26ed901c10127322bc5ba5d26efed81d7a9e6c52a5a716e50f53a1a26b9ecfe9d2ea languageName: node linkType: hard -"@openmrs/esm-offline@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-offline@npm:5.8.2-pre.2324" +"@openmrs/esm-offline@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-offline@npm:5.8.2-pre.2361" dependencies: dexie: "npm:^3.0.3" lodash-es: "npm:^4.17.21" @@ -5861,7 +5861,7 @@ __metadata: "@openmrs/esm-globals": 5.x "@openmrs/esm-state": 5.x rxjs: 6.x - checksum: 10/818c21888ead8ebbbb657286654258d7dcf7efa5871b3fe2eb7b391d3d491fc6a36b732cca8d6160c93af0c32b2e0faf3f7008009838ab7b663a40fc68eec059 + checksum: 10/2aa6c34ca56e5e1a3a01a41cc4587e65596edeae89e397aed24b06e1bc43b01175152c55574a64d7473f341659768348744452b165222054c9548e6e4c8f8ff8 languageName: node linkType: hard @@ -6254,9 +6254,9 @@ __metadata: languageName: unknown linkType: soft -"@openmrs/esm-react-utils@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-react-utils@npm:5.8.2-pre.2324" +"@openmrs/esm-react-utils@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-react-utils@npm:5.8.2-pre.2361" dependencies: lodash-es: "npm:^4.17.21" single-spa-react: "npm:^6.0.0" @@ -6277,13 +6277,13 @@ __metadata: react-i18next: 11.x rxjs: 6.x swr: 2.x - checksum: 10/5bb18e260525aa1f9b2109b206e0b86b1f9ebd39fcd0e541799ec52966e7486dc3efd4db927fc5a29f767ee4d7abd761e92e0cd71eaf827c35264028dd7383a7 + checksum: 10/38115ba811c3d84893ee4c7c5f4c1995186955605df09371e15638018787fa2c7f4ce105a5dc84a7f1893067f1db85de9dd2e65071d067245b96d4cb6d242924 languageName: node linkType: hard -"@openmrs/esm-routes@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-routes@npm:5.8.2-pre.2324" +"@openmrs/esm-routes@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-routes@npm:5.8.2-pre.2361" peerDependencies: "@openmrs/esm-config": 5.x "@openmrs/esm-dynamic-loading": 5.x @@ -6292,24 +6292,24 @@ __metadata: "@openmrs/esm-globals": 5.x "@openmrs/esm-utils": 5.x single-spa: 6.x - checksum: 10/610e6160118bc1c0b3f9497493d587d40009ade6a6d12e1a3458e3c7df9d3c9f9e4384dfe354a4a394602a3e41eb09488993282030901355396fb90f0c02a40e + checksum: 10/6dfbb3d04e452069151be9f697fbe8009b3c8abb1781c41395a353ad586d663351cd86ab81488798bfa82873862cd75ec5a4b0ec80cef5c1c8c4e2ea663b5482 languageName: node linkType: hard -"@openmrs/esm-state@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-state@npm:5.8.2-pre.2324" +"@openmrs/esm-state@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-state@npm:5.8.2-pre.2361" dependencies: zustand: "npm:^4.5.5" peerDependencies: "@openmrs/esm-globals": 5.x - checksum: 10/5bc36a7482241315dec1d388d4981b7b9c60068586a49e271958d698b6c53298235bd4a18e80acdc6fe46d4685505237bbf108fd259359d8ceb8f915dfe40d78 + checksum: 10/63dfca465e114a9b564f2c7ff2c3537ae43cec0bada501f95e87873893b9e47757b349e6b70783e2dc200c47e85d7bc603dffe7a051b8ebf81c608f4eef1cf31 languageName: node linkType: hard -"@openmrs/esm-styleguide@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-styleguide@npm:5.8.2-pre.2324" +"@openmrs/esm-styleguide@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-styleguide@npm:5.8.2-pre.2361" dependencies: "@carbon/charts": "npm:^1.12.0" "@carbon/react": "npm:~1.37.0" @@ -6333,24 +6333,24 @@ __metadata: react-dom: 18.x react-i18next: 11.x rxjs: 6.x - checksum: 10/e18f3a49e327faa435111b17285968b28aa69eebd236b57a3be046ba0d6c2afab5105bd969356ea455b606ec5474214a7ca27c745eb0717ec581f01308142939 + checksum: 10/392807bda113efaa23d0c32fde4eb9cf37ef2320cc35290dd918de826002d739539b60b811ef72d5551c0940f3c6c8d61807c2f8bfc5b65b61561768d43908af languageName: node linkType: hard -"@openmrs/esm-translations@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-translations@npm:5.8.2-pre.2324" +"@openmrs/esm-translations@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-translations@npm:5.8.2-pre.2361" dependencies: i18next: "npm:21.10.0" peerDependencies: i18next: 21.x - checksum: 10/af19de835ef0edc0122bafeb1a8bc4ef6814a1910f7ab4b242af6f04a176c4198afb3c552b6d9dad903a20f4b1e08f48ebaa447be6f081a8c7fe8763ad47c922 + checksum: 10/c4be2be5d5828a8a36a917e5c69879647dd514417ace8a46ab8c67ae2ad60113ab8cd9daf85883b17cd6be7eb6dabca45e3a96118f8b2ba81d538bf04619c00e languageName: node linkType: hard -"@openmrs/esm-utils@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/esm-utils@npm:5.8.2-pre.2324" +"@openmrs/esm-utils@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/esm-utils@npm:5.8.2-pre.2361" dependencies: "@formatjs/intl-durationformat": "npm:^0.2.4" "@internationalized/date": "npm:^3.5.5" @@ -6360,7 +6360,7 @@ __metadata: dayjs: 1.x i18next: 21.x rxjs: 6.x - checksum: 10/158f470c142dba5ce06bb2d6952cf688ba1b7b6bce72c4a49749671c62da703bc0212e79d2bb6ee0dd7c7c6172e2f79dcb72b3fc26f2f845477459dc169ddb73 + checksum: 10/fba0b545bf4e3e9ebafbc92987b83a92bea43adc4594c98e3c02aa3dbb93c12169286fa4a332762374ca919a98d76947ac638d1020d31878b35efd32a3f5fea2 languageName: node linkType: hard @@ -6411,9 +6411,9 @@ __metadata: languageName: node linkType: hard -"@openmrs/webpack-config@npm:5.8.2-pre.2324": - version: 5.8.2-pre.2324 - resolution: "@openmrs/webpack-config@npm:5.8.2-pre.2324" +"@openmrs/webpack-config@npm:5.8.2-pre.2361": + version: 5.8.2-pre.2361 + resolution: "@openmrs/webpack-config@npm:5.8.2-pre.2361" dependencies: "@swc/core": "npm:^1.3.58" clean-webpack-plugin: "npm:^4.0.0" @@ -6431,7 +6431,7 @@ __metadata: webpack-stats-plugin: "npm:^1.0.3" peerDependencies: webpack: 5.x - checksum: 10/f9192fed663a4cba3946754c24fb83f2fa2bee872ce709a008f12b97e982ec97aa28d2f939b34cc1b2e9dd261b40beaaf183f948e1915de16b5a178d9c8cef4e + checksum: 10/d0b443ca6a22a1a4391e77c1e19da5c4ac7c443275d75c69fede25d99e16fab0e910bd70fd032636d73da922fe9bd2217fbdfea288a339b2459bf6e0e9273608 languageName: node linkType: hard @@ -20665,11 +20665,11 @@ __metadata: linkType: hard "openmrs@npm:next": - version: 5.8.2-pre.2324 - resolution: "openmrs@npm:5.8.2-pre.2324" + version: 5.8.2-pre.2361 + resolution: "openmrs@npm:5.8.2-pre.2361" dependencies: - "@openmrs/esm-app-shell": "npm:5.8.2-pre.2324" - "@openmrs/webpack-config": "npm:5.8.2-pre.2324" + "@openmrs/esm-app-shell": "npm:5.8.2-pre.2361" + "@openmrs/webpack-config": "npm:5.8.2-pre.2361" "@pnpm/npm-conf": "npm:^2.1.0" "@swc/core": "npm:^1.3.58" autoprefixer: "npm:^10.4.20" @@ -20708,7 +20708,7 @@ __metadata: yargs: "npm:^17.6.2" bin: openmrs: ./dist/cli.js - checksum: 10/65bab4500890cc94c18cde99f9172a153e96aac6c8b1deaf91685bb157d976df9f13625edd121142a20bc0d1a277b7542993bcef5da44c2bb21f68c518194f00 + checksum: 10/4a2f4940d486dd59ad9d447eaa78d9a901c6b2cc778130870cbd982563bdcb7aa8d876ab140450de11abb57a55b5c7f01272d593281cf890f9c82862da20da7d languageName: node linkType: hard From a272a4a439ea54d36f0c544e2b0000d1cae88ec8 Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Sat, 28 Sep 2024 08:53:12 +0300 Subject: [PATCH 03/14] (fix) Remove double border from Conditions datatables --- .../conditions/conditions-detailed-summary.component.tsx | 2 +- .../src/conditions/conditions-detailed-summary.scss | 6 ++++++ .../src/conditions/conditions-overview.component.tsx | 2 +- .../src/conditions/conditions-overview.scss | 6 ++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.component.tsx b/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.component.tsx index c4e4ad2d0..5818c6a6f 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.component.tsx +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.component.tsx @@ -142,7 +142,7 @@ function ConditionsDetailedSummary({ patient }) { {({ rows, headers, getHeaderProps, getTableProps, getRowProps }) => ( <> - +
{headers.map((header) => ( diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.scss b/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.scss index 8736a0600..03e321617 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.scss +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-detailed-summary.scss @@ -61,3 +61,9 @@ @include type.type-style('body-compact-01'); color: $text-02; } + +.table { + td { + border-bottom: none !important; + } +} diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-overview.component.tsx b/packages/esm-patient-conditions-app/src/conditions/conditions-overview.component.tsx index ce0bd79db..a72f7d24e 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-overview.component.tsx +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-overview.component.tsx @@ -180,7 +180,7 @@ const ConditionsOverview: React.FC = ({ patientUuid }) {({ rows, headers, getHeaderProps, getTableProps }) => ( <> -
+
{headers.map((header) => ( diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-overview.scss b/packages/esm-patient-conditions-app/src/conditions/conditions-overview.scss index 2fdc2e427..8b19a85e0 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-overview.scss +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-overview.scss @@ -65,3 +65,9 @@ .tableContainer { flex: 1; } + +.table { + td { + border-bottom: none !important; + } +} From ee29a5c757754686482641e8b080e4abdb0c9595 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 18:48:33 +0300 Subject: [PATCH 04/14] (chore) Update translations from Transifex (#2041) Co-authored-by: OpenMRS Bot Co-authored-by: Dennis Kigen --- packages/esm-form-entry-app/translations/fr.json | 2 +- packages/esm-patient-chart-app/translations/fr.json | 2 +- packages/esm-patient-medications-app/translations/fr.json | 8 ++++---- packages/esm-patient-orders-app/translations/fr.json | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/esm-form-entry-app/translations/fr.json b/packages/esm-form-entry-app/translations/fr.json index 40973c090..d576da39f 100644 --- a/packages/esm-form-entry-app/translations/fr.json +++ b/packages/esm-form-entry-app/translations/fr.json @@ -15,7 +15,7 @@ "clearEntry": "Êtes-vous sûr(e) de vouloir effacer cette entrée ?", "closeThisPanel": "Fermer ce panneau", "componentLoadingFailed": "Le chargement du composant a échoué...", - "daysAgo": "il y a jours", + "daysAgo": "des jours auparavant", "deleteEntry": "Êtes-vous sûr(e) de vouloir supprimer cet élément ?", "discardButton": "Écarter", "disallowDecimals": "Les valeurs décimales ne sont pas autorisées", diff --git a/packages/esm-patient-chart-app/translations/fr.json b/packages/esm-patient-chart-app/translations/fr.json index 54fab144d..f88ae3e99 100644 --- a/packages/esm-patient-chart-app/translations/fr.json +++ b/packages/esm-patient-chart-app/translations/fr.json @@ -173,7 +173,7 @@ "visitStartDatetime": "Date et heure de début de la visite", "visitStarted": "Visite démarrée", "visitStartedSuccessfully": "{{visit}} a démarré avec succès", - "visitStopDateMustBeAfterMostRecentEncounter": "La date de fin doit être le ou après {{lastEncounterDatetime}}", + "visitStopDateMustBeAfterMostRecentEncounter": "La date de fin doit être proche ou après {{lastEncounterDatetime}}", "visitStopDatetime": "Date et heure de fin de la visite", "visitSummaries": "Résumés de la visite", "visitType": "Type de visite", diff --git a/packages/esm-patient-medications-app/translations/fr.json b/packages/esm-patient-medications-app/translations/fr.json index 593852eed..caffb2abe 100644 --- a/packages/esm-patient-medications-app/translations/fr.json +++ b/packages/esm-patient-medications-app/translations/fr.json @@ -27,11 +27,11 @@ "editDoseComboBoxPlaceholder": "Dose", "editDoseComboBoxTitle": "Dose", "editFrequencyComboBoxTitle": "Fréquence", - "editRouteComboBoxTitle": "Posologie", + "editRouteComboBoxTitle": "Voie d'administration", "error": "Erreur", "errorFetchingDrugOrderTemplates": "Error fetching drug order templates", "errorFetchingDrugResults": "Erreur lors de la récupération des résultats pour « {{searchTerm}} »", - "errorFetchingOrderConfig": "Error occured when fetching Order config", + "errorFetchingOrderConfig": " Une erreur s'est produite lors de la récupération de la configuration de la commande", "female": "Féminin", "freeDosageErrorMessage": "Ajouter une note de dosage gratuite", "freeTextDosage": "Texte libre de dosage", @@ -66,8 +66,8 @@ "prescriptionRefills": "Renouvellements d'ordonnance", "print": "Imprimer", "printedBy": "Imprimé par", - "prn": "P.R.N.", - "prnReason": "P.R.N. reason", + "prn": "Pro Re Nata (Au besoin)", + "prnReason": "Raison du P.R.N", "prnReasonPlaceholder": "Raison de prendre des médicaments", "quantity": "Quantité", "quantityToDispense": "Quantité à délivrer", diff --git a/packages/esm-patient-orders-app/translations/fr.json b/packages/esm-patient-orders-app/translations/fr.json index c84bace1c..c077b5267 100644 --- a/packages/esm-patient-orders-app/translations/fr.json +++ b/packages/esm-patient-orders-app/translations/fr.json @@ -12,7 +12,7 @@ "chooseAnOption": "Choisir une option", "dateCannotBeBeforeToday": "La date ne peut être antérieure à aujourd'hui", "dateOfOrder": "Date de la commande", - "discard": "Ecarté", + "discard": "Retiré", "discontinued": "Discontinued", "dose": "Dose", "editResults": "Afficher les résultats", From 8c8e20d3f6fa2e6f85bf7c57a1524ee0d797babe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 21:28:44 +0300 Subject: [PATCH 05/14] (chore) Update translations from Transifex (#2042) Co-authored-by: OpenMRS Bot --- .../esm-form-engine-app/translations/es.json | 26 +-- .../esm-form-entry-app/translations/es.json | 10 +- .../translations/es.json | 44 ++--- .../translations/es.json | 8 +- .../translations/es.json | 170 +++++++++--------- .../translations/es.json | 16 +- .../esm-patient-labs-app/translations/es.json | 20 +-- .../translations/es.json | 148 +++++++-------- 8 files changed, 221 insertions(+), 221 deletions(-) diff --git a/packages/esm-form-engine-app/translations/es.json b/packages/esm-form-engine-app/translations/es.json index 15c56f807..1a1846aa4 100644 --- a/packages/esm-form-engine-app/translations/es.json +++ b/packages/esm-form-engine-app/translations/es.json @@ -1,15 +1,15 @@ { - "cancel": "Cancel", - "closeThisPanel": "Close this panel", - "collapseAll": "Collapse all", - "deleteQuestion": "Delete question", - "deleteQuestionConfirmation": "Are you sure you want to delete this question?", - "deleteQuestionExplainerText": "This action cannot be undone.", - "errorTitle": "There was an error with this form", - "expandAll": "Expand all", - "loading": "Loading", - "or": "or", - "thisList": "this list", - "toggleCollapseOrExpand": "Toggle collapse or expand", - "tryAgainMessage": "Try opening another form from" + "cancel": "Cancelar", + "closeThisPanel": "Cerrar este panel", + "collapseAll": "Colapsar todo", + "deleteQuestion": "Borrar pregunta", + "deleteQuestionConfirmation": "¿Estás seguro de que deseas eliminar esta pregunta?", + "deleteQuestionExplainerText": "Esta acción no puede ser deshecha.", + "errorTitle": "Hubo un error con este formulario", + "expandAll": "Expandir todo", + "loading": "Cargando", + "or": "o", + "thisList": "esta lista", + "toggleCollapseOrExpand": "Alternar entre colapsar o expandir", + "tryAgainMessage": "Intentar abrir otro formulario de" } diff --git a/packages/esm-form-entry-app/translations/es.json b/packages/esm-form-entry-app/translations/es.json index 8ac693943..223b3aaf7 100644 --- a/packages/esm-form-entry-app/translations/es.json +++ b/packages/esm-form-entry-app/translations/es.json @@ -18,13 +18,13 @@ "daysAgo": " días atrás", "deleteEntry": "¿Estás seguro de que deseas eliminar este elemento?", "discardButton": "Descartar", - "disallowDecimals": "Decimals are not allowed", + "disallowDecimals": "No se permiten decimales", "enterMoreCharacters": "Por favor, ingresa 2 o más caracteres", "errorFetchingFormData": "Hubo un error al obtener los datos del formulario. Detalles: {detail}", "errorLoadingForm": "Error al cargar el formulario", "errorWithForm": "Hubo un error con este formulario", "fix": "Corregir", - "formSubmissionFailed": "An error occurred while processing your form submission. Kindly notify the system administrator and reference the following error : {error}", + "formSubmissionFailed": "Ocurrió un error al procesar el envío de su formulario. Por favor, notifique al administrador del sistema y haga referencia al siguiente error: {error}", "formSubmittedSuccessfully": "El formulario se ha enviado correctamente.", "from": "Desde", "futureDateRestriction": "¡No se permite una fecha futura!", @@ -44,14 +44,14 @@ "minusSecond": "Restar un segundo", "minutesAgo": " minutos atrás", "monthsAgo": " meses atrás", - "next": "Next", + "next": "Siguiente", "next21Years": "Próximos 21 años", "nextMonth": "Próximo mes", "nextYear": "Próximo año", "patientIdentifierDuplication": "Duplicación de identificador de paciente", "patientIdentifierDuplicationDescription": "El identificador proporcionado ya está asociado a un paciente existente. Por favor, verifica el identificador e intenta de nuevo.", - "orderNumber": "Order number", - "previous": "Previous", + "orderNumber": "Número de orden", + "previous": "Anterior", "previous21Years": "Años anteriores 21", "previousMonth": "Mes anterior", "previousValue": "Valor anterior", diff --git a/packages/esm-patient-attachments-app/translations/es.json b/packages/esm-patient-attachments-app/translations/es.json index 67beeca31..ab3e630ef 100644 --- a/packages/esm-patient-attachments-app/translations/es.json +++ b/packages/esm-patient-attachments-app/translations/es.json @@ -1,26 +1,26 @@ { "add": "Añadir", - "addAnImage": "Add image", + "addAnImage": "Añadir imagen", "addAttachment": "Añadir archivo adjunto", "addAttachment_title": "Añadir archivo adjunto", "addMoreAttachments": "Añadir más archivos adjuntos", "attachmentCaptionInstruction": "Introduzca título", "attachments": "Archivos adjuntos", "Attachments": "Archivos adjuntos", - "attachmentsInLowerCase": "attachments", - "attachmentsInProperFormat": "Attachments", - "cameraAccessErrorMessage": "Please enable camera access in your browser settings and try again.", + "attachmentsInLowerCase": "archivos adjuntos", + "attachmentsInProperFormat": "Archivos adjuntos", + "cameraAccessErrorMessage": "Por favor, habilite el acceso a la cámara en la configuración de su navegador e intente nuevamente.", "cameraError": "Error de cámara", "cancel": "Cancelar", - "chooseAnAllowedFileType": "The file \"{{fileName}}\" cannot be uploaded. Please upload a file with one of the following extensions: {{supportedExtensions}}, or {{ lastExtension }}.", + "chooseAnAllowedFileType": "El archivo \"{{fileName}}\" no se puede subir. Por favor, suba un archivo con una de las siguientes extensiones: {{supportedExtensions}} o {{lastExtension}}.", "closeModal": "Cerrar", "closePreview": "Cerrar vista previa", "dateUploaded": "Fecha de carga", "delete": "Borrar", "deleteAttachmentConfirmationText": "¿Está seguro de que desea eliminar este {{attachmentType}}? Esta acción no se puede deshacer.", "deleteImage": "Borrar imagen", - "deletePdf": "Delete PDF", - "edit": "Edit", + "deletePdf": "Eliminar PDF", + "edit": "Editar", "error": "Error", "failed": "fallido", "failedDeleting": "no se pudo borrar", @@ -29,25 +29,25 @@ "fileDeleted": "Archivo eliminado", "fileName": "Nombre de archivo", "fileSizeInstructions": "Arrastre y suelte archivos aquí o haga clic para cargar", - "fileSizeLimitExceeded": "supera el tamaño de archivo de", - "fileSizeLimitExceededText": "Límite de tamaño de archivo excedido", - "fileUploadSizeConstraints": "Límite de archivo es {{fileSize}}MB", - "gridView": "Grid view", + "fileSizeLimitExceeded": "supera el tamaño límite de", + "fileSizeLimitExceededText": "Se ha excedido el límite de tamaño de archivo", + "fileUploadSizeConstraints": "El límite de tamaño de archivo es {{fileSize}} MB", + "gridView": "Vista de cuadrícula", "image": "Imagen", - "imageDescription": "Descripción de imagen", - "imagePreview": "Image preview", + "imageDescription": "Descripción de la imagen", + "imagePreview": "Vista previa de la imagen", "name": "nombre", - "noImageToDisplay": "No image to display", - "options": "Options", - "successfullyDeleted": "eliminado con éxito", - "tableView": "Table view", + "noImageToDisplay": "No hay imagen para mostrar", + "options": "Opciones", + "successfullyDeleted": "eliminado exitosamente", + "tableView": "Vista de tabla", "type": "Tipo", - "unsupportedFileType": "Unsupported file type", + "unsupportedFileType": "Tipo de archivo no compatible", "uploadComplete": "Carga completa", - "uploadedSuccessfully": "cargado con éxito", - "uploadError": "Error uploading file", - "uploadFiles": "Upload files", - "uploading": "Cargando", + "uploadedSuccessfully": "cargado exitosamente", + "uploadError": "Error al subir el archivo", + "uploadFiles": "Subir archivos", + "uploading": "Subiendo", "uploadWillContinueInTheBackground": "Los archivos se cargarán en segundo plano. Puede cerrar esta ventana.", "webcam": "Cámara web" } diff --git a/packages/esm-patient-banner-app/translations/es.json b/packages/esm-patient-banner-app/translations/es.json index 84a755e1b..7872be89b 100644 --- a/packages/esm-patient-banner-app/translations/es.json +++ b/packages/esm-patient-banner-app/translations/es.json @@ -6,9 +6,9 @@ "country": "País", "countyDistrict": "Distrito", "district": "Distrito", - "dob": "DOB", - "patientIdentifierSticker": "Patient identifier sticker", + "dob": "Fecha de Nacimiento", + "patientIdentifierSticker": "Etiqueta de identificación del paciente", "postalCode": "Código Postal", - "state": "State", - "stateProvince": "State" + "state": "Estado", + "stateProvince": "Estado" } diff --git a/packages/esm-patient-chart-app/translations/es.json b/packages/esm-patient-chart-app/translations/es.json index c93ab9285..93281f8b9 100644 --- a/packages/esm-patient-chart-app/translations/es.json +++ b/packages/esm-patient-chart-app/translations/es.json @@ -1,95 +1,95 @@ { "addAPastVisit": "Añadir una visita pasada", "addPastVisit": "Añadir visita pasada", - "addPastVisitText": "Puedes añadir una nueva visita pasada o actualizar una antigua. Elige una de las opciones a continuación para continuar.", + "addPastVisitText": "Puedes añadir una visita pasada nueva o actualizar una antigua. Elige una de las opciones a continuación para continuar.", "all": "Todo", "allEncounters": "Todos los encuentros", - "appointmentCheckedIn": "Appointment checked in", - "appointmentMarkedChecked": "Appointment marked as Checked In", + "appointmentCheckedIn": "Llegada a la cita verificada", + "appointmentMarkedChecked": "Cita marcada como \"Llegada Verificada\"", "cancel": "Cancelar", "cancelActiveVisitConfirmation": "¿Estás seguro de que quieres cancelar esta visita activa?", - "cancellingVisit": "Cancelling visit", + "cancellingVisit": "Cancelando visita", "cancelVisit": "Cancelar visita", "cancelVisitExplainerMessage": "Cancelar esta visita eliminará los encuentros asociados a ella", "causeOfDeath": "Causa de muerte", - "causeOfDeath_lower": "cause of death concepts configured in the system", - "causeOfDeathIsRequired": "Please select the cause of death", + "causeOfDeath_lower": "Conceptos de causa de muerte configurados en el sistema", + "causeOfDeathIsRequired": "Por favor, seleccione la causa de muerte", "checkFilters": "Comprobar los filtros anteriores", "close": "Cerrar", "confirm": "Confirmar", - "confirmDeletingVisitTextWithStartAndEndDate": "Are you sure you want to delete {{visit}} which started {{visitStartDate}} and ended {{visitEndDate}}?", - "confirmModifyingVisitDateToAccomodateEncounter": "The encounter date falls outside the designated visit date range. Would you like to modify the visit date to accommodate the new encounter date?", - "currentVisit": "Current visit", + "confirmDeletingVisitTextWithStartAndEndDate": "¿Está seguro de que desea eliminar la visita {{visit}} que comenzó el {{visitStartDate}} y terminó el {{visitEndDate}}?", + "confirmModifyingVisitDateToAccomodateEncounter": "La fecha del encuentro está fuera del rango de fechas de la visita designada. ¿Le gustaría modificar la fecha de la visita para ajustarse a la nueva fecha del encuentro?", + "currentVisit": "Visita actual", "date": "Fecha", "dateAndTime": "Fecha y hora", - "dateOfDeath": "Date of death", - "deathDateRequired": "Please select the date of death", + "dateOfDeath": "Fecha de fallecimiento", + "deathDateRequired": "Por favor, seleccione la fecha de fallecimiento", "delete": "Eliminar", - "deleteEncounter": "Delete encounter", + "deleteEncounter": "Eliminar encuentro", "deleteEncounterConfirmationText": "¿Estás seguro de que deseas eliminar este encuentro? Esta acción no se puede deshacer.", "deleteThisEncounter": "Eliminar este encuentro", - "deleteVisit": "Delete visit", - "deleteVisitDialogHeader": "Are you sure you want to delete visit?", - "deletingVisit": "Deleting visit", - "deletingVisitWillDeleteEncounters": "Deleting this visit will delete all associated encounters.", + "deleteVisit": "Eliminar visita", + "deleteVisitDialogHeader": "¿Estás seguro de que deseas eliminar la visita?", + "deletingVisit": "Eliminando visita", + "deletingVisitWillDeleteEncounters": "Eliminar esta visita eliminará todos los encuentros asociados.", "diagnoses": "Diagnósticos", "discard": "Descartar", "dose": "Dosis", - "editPastVisit": "Edit past visit", + "editPastVisit": "Editar visita pasada", "editThisEncounter": "Editar este encuentro", "editThisVisit": "Editar esta visita", - "editVisitDetails": "Edit visit details", + "editVisitDetails": "Editar detalles de la visita", "emptyStateText": "No hay {{displayText}} para mostrar para este paciente", "encounterDeleted": "Encuentro eliminado", "encounters": "Encuentros", - "encounters__lower": "encounters", + "encounters__lower": "encuentros", "encounters_title": "Encuentros", "encounterType": "Tipo de encuentro", "end": "Finalizar", - "endActiveVisitConfirmation": "Are you sure you want to end this active visit?", + "endActiveVisitConfirmation": "¿Está seguro de que desea finalizar esta visita activa?", "endDate": "Fecha de finalización", - "endDate_title": "End date", + "endDate_title": "Fecha de finalización", "endVisit": "Finalizar visita", "endVisit_title": "Finalizar Visita", "endVisitExplainerMessage": "Finalizar esta visita significa que ya no podrás añadir encuentros a la misma. Si necesitas añadir un encuentro, puedes crear una nueva visita para este paciente o editar una pasada.", - "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", + "enterNonCodedCauseOfDeath": "Ingrese la causa de muerte no codificada", "error": "Error", - "errorCancellingVisit": "Error cancelling active visit", - "errorCopy": "Lo siento, hubo un problema al mostrar esta información. Puedes intentar recargar la página o ponerte en contacto con el administrador del sitio y citar el código de error de arriba.", - "errorCreatingVisitAttribute": "Could not delete {{attributeName}} attribute", - "errorDeletingVisit": "Error deleting visit", - "errorDeletingVisitAttribute": "Could not delete {{attributeName}} attribute", - "errorEndingVisit": "Error ending visit", - "errorMarkingPatientAlive": "Error marking patient alive", - "errorMarkingPatientDeceased": "Error marking patient deceased", - "errorOccuredDeletingVisit": "An error occured when deleting visit", - "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", - "errorUpdatingVisitDetails": "Error updating visit details", - "errorWhenRestoringVisit": "Error occured when restoring {{visit}}", + "errorCancellingVisit": "Error al cancelar una visita activa", + "errorCopy": "Lo sentimos, hubo un problema al mostrar esta información. Puedes intentar recargar la página o ponerte en contacto con el administrador del sitio y hacer referencia al código de error de arriba.", + "errorCreatingVisitAttribute": "No se pudo eliminar el atributo {{attributeName}}", + "errorDeletingVisit": "Error al eliminar la visita", + "errorDeletingVisitAttribute": "No se pudo eliminar el atributo {{attributeName}}", + "errorEndingVisit": "Error al finalizar la visita", + "errorMarkingPatientAlive": "Error al marcar al paciente como vivo", + "errorMarkingPatientDeceased": "Error al marcar al paciente como fallecido", + "errorOccuredDeletingVisit": "Ocurrió un error al eliminar la visita", + "errorUpdatingVisitAttribute": "No se pudo eliminar el atributo {{attributeName}}", + "errorUpdatingVisitDetails": "Error al actualizar los detalles de la visita", + "errorWhenRestoringVisit": "Ocurrió un error al restaurar {{visit}}", "failedDeleting": "no se pudo eliminar", "failedToLoadCurrentVisit": "Error al cargar la visita actual", "fieldRequired": "Este campo es obligatorio", "filterByEncounterType": "Filtrar por tipo de encuentro", - "form": "Form name", + "form": "Nombre del formulario", "goToThisEncounter": "Ir a este encuentro", "indication": "Indicación", - "invalidTimeFormat": "Invalid time format", - "invalidVisitStartDate": "Start date needs to be on or before {{firstEncounterDatetime}}", - "invalidVisitStopDate": "Visit stop date time cannot be on or before visit start date time", + "invalidTimeFormat": "Formato de hora no válido", + "invalidVisitStartDate": "La fecha de inicio debe ser el {{firstEncounterDatetime}} o antes", + "invalidVisitStopDate": "La fecha y hora de finalización de la visita no pueden ser iguales o anteriores a la fecha y hora de inicio de la visita", "loading": "Cargando", "loadingVisit": "Cargando visita actual...", - "loadMore": "Load more", + "loadMore": "Cargar más", "location": "Ubicación", - "markAliveSuccessfully": "Patient marked alive succesfully", - "markDeceasedWarning": "Marking the patient as deceased will end any active visits for this patient", - "markPatientAlive": "Mark patient alive", - "markPatientAliveConfirmation": "Are you sure you want to mark this patient alive?", - "markPatientDeceased": "Mark patient deceased", + "markAliveSuccessfully": "Paciente marcado como vivo con éxito", + "markDeceasedWarning": "Marcar al paciente como fallecido finalizará cualquier visita activa para este paciente", + "markPatientAlive": "Marcar paciente como vivo", + "markPatientAliveConfirmation": "¿Estás seguro de que deseas marcar este paciente como vivo?", + "markPatientDeceased": "Marcar paciente como fallecido", "medications": "Medicamentos", - "medications__lower": "medications", + "medications__lower": "medicamentos", "missingVisitType": "Falta el tipo de visita", - "modifyVisitDate": "Modify visit date", - "movePatient": "Move patient", + "modifyVisitDate": "Modificar fecha de la visita", + "movePatient": "Mover al paciente", "movePatientToNextService": "Mover al paciente al siguiente servicio", "name": "Nombre", "no": "No", @@ -100,23 +100,23 @@ "noDiagnosesFound": "No se encontraron diagnósticos", "noEncountersFound": "No se encontraron encuentros", "noEncountersToDisplay": "No hay encuentros para mostrar", - "nonCodedCauseOfDeath": "Non-coded cause of death", - "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", + "nonCodedCauseOfDeath": "Causa de muerte no codificada", + "nonCodedCauseOfDeathRequired": "Por favor, ingrese la causa de muerte no codificada", "noObservationsFound": "No se encontraron observaciones", "notes": "Notas", - "notes__lower": "notes", + "notes__lower": "notas", "optional": "opcional", - "orderDurationAndUnit": "para {{duration}} {{durationUnit}}", + "orderDurationAndUnit": "por {{duration}} {{durationUnit}}", "orderIndefiniteDuration": "Duración indefinida", "paginationItemsCount_one": "{{pageItemsCount}} / {{count}} elemento", "paginationItemsCount_other": "{{pageItemsCount}} / {{count}} elementos", - "paginationPageText_one": "of {{count}} page", - "paginationPageText_other": "of {{count}} pages", + "paginationPageText_one": "de {{count}} página", + "paginationPageText_other": "de {{count}} páginas", "partOfFormDidntLoad": "Parte del formulario no se cargó", - "pastVisitErrorText": "Past visit error", - "pastVisits": "Past visits", - "Patient Summary": "Patient summary", - "printIdentifierSticker": "Print identifier sticker", + "pastVisitErrorText": "Error de visita pasada", + "pastVisits": "Visita pasada", + "Patient Summary": "Resumen del paciente ", + "printIdentifierSticker": "Imprimir etiqueta de identificación", "program": "Programa", "provider": "Proveedor", "quantity": "Cantidad", @@ -124,12 +124,12 @@ "queueEntryError": "Error al añadir paciente a la cola", "recommended": "Recomendado", "record": "Registro", - "refills": "Recambios", + "refills": "Reposiciones", "refreshToTryAgain": "Por favor, actualiza para intentarlo de nuevo", - "required": "Required", - "retrospectiveEntry": "Retrospective entry", - "saveAndClose": "Save and close", - "saving": "Saving", + "required": "Requerido", + "retrospectiveEntry": "Entrada retrospectiva", + "saveAndClose": "Guardar y cerrar", + "saving": "Guardando", "searchForAVisitType": "Buscar un tipo de visita", "searchForCauseOfDeath": "Buscar una causa de muerte", "searchThisList": "Buscar en esta lista", @@ -137,48 +137,48 @@ "selectAnOption": "Selecciona una opción", "selectLocation": "Selecciona una ubicación", "selectProgramType": "Selecciona el tipo de programa", - "selectVisitType": "Please select a visit type", + "selectVisitType": "Por favor, seleccione el tipo de visita", "start": "Iniciar", "startAVisit": "Iniciar una visita", "startDate": "Fecha de inicio", - "startingVisit": "Starting visit", + "startingVisit": "Iniciando visita", "startNewVisit": "Iniciar nueva visita", - "startVisit": "Start visit", - "startVisitError": "Error al iniciar la visita actual", + "startVisit": "Iniciar visita", + "startVisitError": "Error al iniciar la visita", "successfullyDeleted": "eliminado con éxito", "tests": "Pruebas", "time": "Hora", "timeFormat ": "Formato de Hora", "type": "Tipo", - "undo": "Undo", + "undo": "Deshacer", "updateError": "Error al actualizar la cita próxima", - "updateVisit": "Update visit", - "updatingVisit": "Updating visit", + "updateVisit": "Actualizar visita", + "updatingVisit": "Actualizando visita", "visit": "Visita", - "visitAttributes": "Visit attributes", - "visitCancelled": "Visit cancelled", - "visitCancelSuccessMessage": "Active {{visit}} cancelled successfully", - "visitDeleted": "{{visit}} deleted", - "visitDeletedSuccessfully": "{{visit}} deleted successfully", - "visitDetailsUpdated": "Visit details updated", - "visitDetailsUpdatedSuccessfully": "{{visit}} updated successfully", + "visitAttributes": "Atributos de la visita", + "visitCancelled": "Visita cancelada", + "visitCancelSuccessMessage": "Visita activa {{visit}} cancelada con éxito", + "visitDeleted": "{{visit}} eliminada", + "visitDeletedSuccessfully": "{{visit}} eliminada con éxito", + "visitDetailsUpdated": "Detalles de la visita actualizados", + "visitDetailsUpdatedSuccessfully": "{{visit}} actualizada con éxito", "visitEnded": "Visita finalizada", "visitEndSuccessfully": "Visita actual finalizada con éxito", - "visitLocation": "Visit location", - "visitNotRestored": "Visit couldn't be restored", - "visitRestored": "Visit restored", - "visitRestoredSuccessfully": "{{visit}} restored successfully", + "visitLocation": "Ubicación de la visita", + "visitNotRestored": "No se pudo restaurar la visita", + "visitRestored": "Visita restaurada", + "visitRestoredSuccessfully": "{{visit}} restaurada con éxito", "visits": "visitas", "Visits": "Visitas", - "visitStartDatetime": "Visit start date and time", + "visitStartDatetime": "Fecha y hora de inicio de visita", "visitStarted": "Visita iniciada", "visitStartedSuccessfully": "Visita {{visit}} iniciada con éxito", - "visitStopDateMustBeAfterMostRecentEncounter": "Stop date needs to be on or after {{lastEncounterDatetime}}", - "visitStopDatetime": "Visit stop date and time", - "visitSummaries": "Resúmenes de Visita", + "visitStopDateMustBeAfterMostRecentEncounter": "La fecha de finalización debe ser el {{lastEncounterDatetime}} o después", + "visitStopDatetime": "Fecha y hora de finalización de la visita", + "visitSummaries": "Resúmenes de la visita", "visitType": "Tipo de visita", "visitType_title": "Tipo de Visita", "visitTypeRequired": "Se requiere un tipo de visita", - "warning": "Warning", + "warning": "Advertencia", "yes": "Sí" } diff --git a/packages/esm-patient-conditions-app/translations/es.json b/packages/esm-patient-conditions-app/translations/es.json index 18cd7369c..405dc4a08 100644 --- a/packages/esm-patient-conditions-app/translations/es.json +++ b/packages/esm-patient-conditions-app/translations/es.json @@ -1,14 +1,14 @@ { - "active": "Active", + "active": "Activo", "add": "Añadir", "cancel": "Cancelar", "checkFilters": "Comprobar los filtros anteriores", - "clinicalStatus": "Clinical status", - "clinicalStatusRequired": "A clinical status is required", + "clinicalStatus": "Estado clínico", + "clinicalStatusRequired": "Se requiere un estado clínico", "condition": "Condición", - "conditionDeleted": "Condition deleted", + "conditionDeleted": "Condición eliminado", "conditionNowVisible": "Ahora es visible en la página de Condiciones", - "conditionRequired": "A condition is required", + "conditionRequired": "Se requiere una condición", "conditions": "Condiciones", "Conditions": "Condiciones", "conditionSaved": "Condición guardada con éxito", @@ -25,12 +25,12 @@ "errorCreatingCondition": "Error al crear la condición", "errorDeletingCondition": "Error al eliminar la condición", "errorUpdatingCondition": "Error al actualizar la condición", - "inactive": "Inactive", + "inactive": "Inactivo", "noConditionsToDisplay": "No hay condiciones para mostrar", "noResultsFor": "Sin resultados para", "onsetDate": "Fecha de aparición", - "recordCondition": "Record a Condition", - "required": "Required", + "recordCondition": "Registrar una Condición", + "required": "Requerido", "saveAndClose": "Guardar y cerrar", "saving": "Guardando", "searchConditions": "Buscar condiciones", diff --git a/packages/esm-patient-labs-app/translations/es.json b/packages/esm-patient-labs-app/translations/es.json index 6e1aebd6d..b45762e73 100644 --- a/packages/esm-patient-labs-app/translations/es.json +++ b/packages/esm-patient-labs-app/translations/es.json @@ -1,16 +1,16 @@ { - "add": "Add", + "add": "Añadir", "additionalInstructions": "Instrucciones adicionales", - "addLabOrderWorkspaceTitle": "Add lab order", - "backToOrderBasket": "Back to order basket", + "addLabOrderWorkspaceTitle": "Añadir orden de laboratorio", + "backToOrderBasket": "Volver a la cesta de órdenes", "backToTimeline": "Volver al calendario", - "cancel": "Cancel", - "checkFilters": "Check the filters above", - "clear": "Clear", - "clearFilters": "Clear filters", - "clearSearchResults": "Clear results", - "closeSearchBar": "Close search", - "data": "data", + "cancel": "Cancelar", + "checkFilters": "Comprobar los filtros anteriores", + "clear": "Limpiar", + "clearFilters": "Limpiar filtros", + "clearSearchResults": "Limpiar resultados", + "closeSearchBar": "Cerrar búsqueda", + "data": "datos", "dataLoadError": "Data load error", "dataTimelineText": "Data timeline", "date": "Fecha", diff --git a/packages/esm-patient-orders-app/translations/es.json b/packages/esm-patient-orders-app/translations/es.json index 1ac3c7740..c494a03ea 100644 --- a/packages/esm-patient-orders-app/translations/es.json +++ b/packages/esm-patient-orders-app/translations/es.json @@ -1,77 +1,77 @@ { - "actionsMenu": "Actions menu", - "activeVisitRequired": "An active visit is required to make orders", - "add": "Add", - "addResults": "Add results", - "allOrders": "All orders", - "cancel": "Cancel", - "cancellationDate": "Cancellation date", - "cancellationDateRequired": "Cancellation date is required", - "cancelOrder": "Cancel order", - "checkFilters": "Check the filters above", - "chooseAnOption": "Choose an option", - "dateCannotBeBeforeToday": "Date cannot be before today", - "dateOfOrder": "Date of order", - "discard": "Discard", - "discontinued": "Discontinued", - "dose": "Dose", - "editResults": "Edit results", - "endDate": "End date", - "enterTestResults": "Enter test results", + "actionsMenu": "Menú de acciones", + "activeVisitRequired": "Se requiere una visita activa para realizar órdenes ", + "add": "Añadir", + "addResults": "Añadir resultados", + "allOrders": "Añadir órdenes", + "cancel": "Cancelar", + "cancellationDate": "Fecha de cancelación", + "cancellationDateRequired": "Se requiere una fecha de cancelación", + "cancelOrder": "Cancelar orden", + "checkFilters": "Verifique los filtros de arriba", + "chooseAnOption": "Escoger una opción", + "dateCannotBeBeforeToday": "La fecha no puede ser anterior a hoy", + "dateOfOrder": "Fecha de la orden", + "discard": "Descartar", + "discontinued": "Descontinuado", + "dose": "Dosis", + "editResults": "Editar resultados", + "endDate": "Fecha de finalización", + "enterTestResults": "Ingresar resultados de pruebas", "error": "Error", - "errorCancellingOrder": "Error cancelling order", - "errorSavingLabResults": "Error saving lab results", - "indication": "Indication", - "launchOrderBasket": "Launch order basket", - "loading": "Loading", - "loadingInitialValues": "Loading initial values", - "loadingTestDetails": "Loading test details", - "medicationDurationAndUnit": "for {{duration}} {{durationUnit}}", - "medicationIndefiniteDuration": "Indefinite duration", - "medications": "Medications", - "modifyOrder": "Modify order", - "noMatchingOrdersToDisplay": "No matching orders to display", - "normalRange": "Normal range", - "onDate": "on", - "order": "Order", - "orderBasket": "Order basket", - "orderBasketWorkspaceTitle": "Order basket", - "orderCancellation": "Order cancellation", - "orderCancelled": "Order cancelled", - "orderCompleted": "Placed orders", - "orderDetails": "Order details", - "ordered": "Placed order for", - "orderedBy": "Ordered by", - "ordererInformation": "Orderer information", - "orderNumber": "Order number", - "orders": "Orders", - "Orders": "Orders", - "orderType": "Order type", - "pleaseFillField": "Please fill at least one field", - "pleaseFillRequiredFields": "Please fill all the required fields", - "print": "Print", - "printedBy": "Printed by", - "priority": "Priority", - "quantity": "Quantity", - "reasonForCancellation": "Reason for cancellation", - "reasonForCancellationRequired": "Reason for cancellation is required", - "refills": "Refills", - "result": "Result", - "saveAndClose": "Save and close", - "saveDrugOrderFailed": "Error ordering {{orderName}}", - "saveLabResults": "Save lab results", - "saving": "Saving", - "searchTable": "Search table", - "selectOrderType": "Select order type", - "signAndClose": "Sign and close", - "startAVisitToRecordOrders": "Start a visit to order", - "startVisit": "Start visit", - "status": "Status", - "successfullyCancelledOrder": "Order {{orderNumber}} has been cancelled successfully", - "successfullySavedLabResults": "Lab results for {{orderNumber}} have been successfully updated", - "Test Order_few": "Test orders", - "testType": "Test type", - "tryReopeningTheWorkspaceAgain": "Please try launching the workspace again", - "unknownOrderType": "Unknown order type", - "updated": "Updated" + "errorCancellingOrder": "Error al cancelar la orden", + "errorSavingLabResults": "Error al guardar los resultados de laboratorio", + "indication": "Indicación", + "launchOrderBasket": "Iniciar cesta de órdenes", + "loading": "Cargando", + "loadingInitialValues": "Cargando valores iniciales", + "loadingTestDetails": "Cargando detalles de la prueba", + "medicationDurationAndUnit": "por {{duration}} {{durationUnit}}", + "medicationIndefiniteDuration": "Duración indefinida", + "medications": "Medicamentos", + "modifyOrder": "Modificar orden", + "noMatchingOrdersToDisplay": "No hay órdenes coincidentes para mostrar", + "normalRange": "Rango normal", + "onDate": "en", + "order": "Orden", + "orderBasket": "Cesta de órdenes", + "orderBasketWorkspaceTitle": "Cesta de órdenes", + "orderCancellation": "Cancelación de orden", + "orderCancelled": "Orden cancelada", + "orderCompleted": "Órdenes realizadas", + "orderDetails": "Detalles de la orden", + "ordered": "Orden realizada para", + "orderedBy": "Ordenado por", + "ordererInformation": "Información del solicitante", + "orderNumber": "Número de orden", + "orders": "Órdenes", + "Orders": "Órdenes", + "orderType": "Tipo de orden", + "pleaseFillField": "Por favor, complete al menos un campo", + "pleaseFillRequiredFields": "Por favor, complete todos los campos obligatorios", + "print": "Imprimir", + "printedBy": "Impreso por", + "priority": "Prioridad", + "quantity": "Cantidad", + "reasonForCancellation": "Motivo de cancelación", + "reasonForCancellationRequired": "El motivo de cancelación es obligatorio", + "refills": "Reposiciones", + "result": "Resultado", + "saveAndClose": "Guardar y cerrar", + "saveDrugOrderFailed": "Error al solicitar {{orderName}}", + "saveLabResults": "Guardar resultados de laboratorio", + "saving": "Guardando", + "searchTable": "Guardar tabla", + "selectOrderType": "Seleccionar tipo de orden", + "signAndClose": "Firmar y cerrar", + "startAVisitToRecordOrders": "Iniciar una visita para realizar una orden", + "startVisit": "Iniciar visita", + "status": "Estado", + "successfullyCancelledOrder": "La orden {{orderNumber}} ha sido cancelada con éxito", + "successfullySavedLabResults": "Los resultados de laboratorio para la orden {{orderNumber}} se han actualizado correctamente", + "Test Order_few": "Órdenes de prueba", + "testType": "Tipo de prueba", + "tryReopeningTheWorkspaceAgain": "Intente iniciar de nuevo el área de trabajo ", + "unknownOrderType": "Tipo de orden desconocido", + "updated": "Actualizado" } From 1d4485b26e9517931da52a0499c2c77cc8caa5ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:21:08 +0300 Subject: [PATCH 06/14] (chore) Update translations from Transifex (#2043) Co-authored-by: OpenMRS Bot --- .../translations/es.json | 28 ++-- .../esm-patient-labs-app/translations/es.json | 128 +++++++++--------- .../translations/es.json | 4 +- .../translations/es.json | 66 ++++----- .../translations/es.json | 18 +-- .../translations/es.json | 18 +-- .../translations/es.json | 44 +++--- 7 files changed, 153 insertions(+), 153 deletions(-) diff --git a/packages/esm-patient-immunizations-app/translations/es.json b/packages/esm-patient-immunizations-app/translations/es.json index 3957de729..4d28c2908 100644 --- a/packages/esm-patient-immunizations-app/translations/es.json +++ b/packages/esm-patient-immunizations-app/translations/es.json @@ -1,18 +1,18 @@ { "add": "Agregar", "cancel": "Cancelar", - "doseNumber": "Dose Number", - "doseNumberWithinSeries": "Dose number within series", - "edit": "Edit", + "doseNumber": "Número de dosis dentro de la serie", + "doseNumberWithinSeries": "Número de dosis dentro de la serie", + "edit": "Editar", "error": "Error", "errorSaving": "Error al guardar la vacunación", - "expirationDate": "Fecha de vencimiento", - "goToSummary": "Ir al resumen", - "immunization": "Immunization", + "expirationDate": "Fecha de Vencimiento", + "goToSummary": "Ir al Resumen", + "immunization": "Immunización", "immunizations": "Inmunizaciones", "Immunizations": "Inmunizaciones", - "immunizations__lower": "immunizations", - "immunizationWorkspaceTitle": "Immunization Form", + "immunizations__lower": "inmunizaciones", + "immunizationWorkspaceTitle": "Formulario de Inmunización", "lotNumber": "Número de lote", "manufacturer": "Fabricante", "pleaseSelect": "Por favor, seleccione", @@ -20,12 +20,12 @@ "save": "Guardar", "seeAll": "Ver todo", "sequence": "Secuencia", - "singleDoseOn": "Dosis única el", - "time": "Time", - "timeFormat ": "Time Format", + "singleDoseOn": "Dosis Única el", + "time": "Hora", + "timeFormat ": "Formato de Hora", "vaccinationDate": "Fecha de vacunación", - "vaccinationDateRequired": "Vaccination date required", - "vaccinationSaved": "Vacunación guardada exitosamente", + "vaccinationDateRequired": "La fecha de vacunación es obligatoria", + "vaccinationSaved": "Vacunación guardada con éxito", "vaccine": "Vacuna", - "vaccineRequired": "Vaccine required" + "vaccineRequired": "La vacuna es obligatoria" } diff --git a/packages/esm-patient-labs-app/translations/es.json b/packages/esm-patient-labs-app/translations/es.json index b45762e73..6181e99e9 100644 --- a/packages/esm-patient-labs-app/translations/es.json +++ b/packages/esm-patient-labs-app/translations/es.json @@ -11,82 +11,82 @@ "clearSearchResults": "Limpiar resultados", "closeSearchBar": "Cerrar búsqueda", "data": "datos", - "dataLoadError": "Data load error", - "dataTimelineText": "Data timeline", + "dataLoadError": "Error en la carga de datos", + "dataTimelineText": "Calendario de datos", "date": "Fecha", "dateCollected": "Mostrando fecha de recogida", - "dateTime": "Date and time", - "directlyAddToBasket": "Add to basket", + "dateTime": "Fecha y hora", + "directlyAddToBasket": "Añadir a la cesta", "discard": "Descartar", - "endDate": "End date", + "endDate": "Fecha de finalización", "error": "Error", - "errorFetchingTestTypes": "Error fetching results for \"{{searchTerm}}\"", + "errorFetchingTestTypes": "Error al obtener resultados para \"{{searchTerm}}\"", "errorLoadingTestTypes": "Error al cargar los tipos de pruebas", - "female": "Female", - "goToDrugOrderForm": "Order form", - "hideResultsTable": "Hide results table", - "individualTests": "Individual tests", - "labOrders": "Lab orders", + "female": "Femenino", + "goToDrugOrderForm": "Formulario de orden", + "hideResultsTable": "Ocultar tabla de resultados", + "individualTests": "Pruebas individuales", + "labOrders": "Órdenes de laboratorio", "labReferenceNumber": "Número de referencia del laboratorio", - "male": "Male", + "male": "Masculino", "moreResultsAvailable": "Más resultados disponibles", - "noPanelsFound": "No panels found", - "noResultsForTestTypeSearch": "No results to display for \"{{searchTerm}}\"", - "noResultsToDisplay": "No results to display", - "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", + "noPanelsFound": "No se encontraron paneles", + "noResultsForTestTypeSearch": "No hay resultados para \"{{searchTerm}}\"", + "noResultsToDisplay": "No hay resultados para mostrar", + "noTestResultsWithinSpecifiedRange": "No se encontraron resultados de pruebas dentro del rango especificado", "observationsDisplayText": "observaciones", - "onDate": "on", - "orderActionDiscontinue": "Discontinue", - "orderActionIncomplete": "Incomplete", + "onDate": "en", + "orderActionDiscontinue": "Descontinuar", + "orderActionIncomplete": "Incompleto", "orderActionNew": "Nuevo", - "orderActionRenew": "Renew", - "orderActionRevise": "Modify", - "ordered": "Pedido", - "orderReason": "Order reason", - "other": "Other", - "overTime": "Over time", + "orderActionRenew": "Renovar", + "orderActionRevise": "Modificar", + "ordered": "Ordenado", + "orderReason": "Razón de la orden", + "other": "Otro", + "overTime": "Con el tiempo", "panel": "Panel", - "panels": "panels", - "pleaseRequiredFields": "Please fill all required fields", - "print": "Print", - "printedBy": "Printed by", - "printTestResults": "Print test results", - "priority": "Priority", + "panels": "paneles", + "pleaseRequiredFields": "Por favor, complete todos los campos obligatorios", + "print": "Imprimir", + "printedBy": "Impreso por", + "printTestResults": "Imprimir resultados de pruebas", + "priority": "Prioridad", "recentResults": "Resultados Recientes", - "recentTestResults": "Resultados de Pruebas Recientes", - "referenceRange": "Rango de Referencia", - "removeFromBasket": "Quitar de la cesta", - "reset": "Reset", - "resetTreeText": "Reiniciar árbol", - "resetView": "to reset this view", - "resulted": "Resultados", - "results": "Results", - "Results Viewer": "Visualizador de resultados", + "recentTestResults": "resultados de pruebas recientes", + "referenceRange": "Rango de referencia", + "removeFromBasket": "Retirar de la cesta", + "reset": "Restablecer", + "resetTreeText": "Restablecer árbol", + "resetView": "para restablecer esta vista", + "resulted": "resultó", + "results": "Resultados", + "Results Viewer": "Visualizador de Resultados", "resultsText": "resultados", "returnToTimeline": "Volver al calendario", "saveOrder": "Guardar orden", - "search": "Search", - "searchAgain": "search again", - "searchByTestName": "Search by test name", - "searchFieldPlaceholder": "Search for a test type", - "searchResultsMatchesForTerm_one": "{{count}} result for \"{{searchTerm}}\"", - "searchResultsMatchesForTerm_other": "{{count}} results for \"{{searchTerm}}\"", - "searchResultsTextFor_one": "{{count}} search result for {{searchTerm}}", - "searchResultsTextFor_other": "{{count}} search results for {{searchTerm}}", - "seeAllResults": "Ver Todos los Resultados", - "showResultsTable": "Show results table", - "showTree": "Mostrar Árbol", - "startDate": "Start date", - "testName": "Nombre de la Prueba", - "testResults": "Resultados de la Prueba", - "testResults_title": "Resultados de Pruebas", - "testResultsData": "Test results data", - "tests": "Tests", + "search": "Buscar", + "searchAgain": "buscar nuevamente", + "searchByTestName": "Buscar por nombre de la prueba", + "searchFieldPlaceholder": "Buscar por tipo de prueba", + "searchResultsMatchesForTerm_one": "{{count}} resultado para {{searchTerm}}", + "searchResultsMatchesForTerm_other": "{{count}} resultados para {{searchTerm}}", + "searchResultsTextFor_one": "{{count}} resultado de búsqueda para {{searchTerm}}", + "searchResultsTextFor_other": "{{count}} resultados de búsqueda para {{searchTerm}}", + "seeAllResults": "Ver todos los resultados", + "showResultsTable": "Mostrar tabla de resultados", + "showTree": "Mostrar árbol", + "startDate": "Fecha de inicio", + "testName": "Nombre de la prueba", + "testResults": "resultados de la prueba", + "testResults_title": "Resultados de la Prueba", + "testResultsData": "Datos de los resultados de la prueba", + "tests": "Pruebas", "testType": "Tipo de prueba", "timeline": "Calendario", "tree": "Árbol", "trend": "Tendencia", - "trendline": "Trendline", + "trendline": "Línea de tendencia", "trendlineRangeSelector1Day": "1 día", "trendlineRangeSelector1Month": "1 mes", "trendlineRangeSelector1Year": "1 año", @@ -94,12 +94,12 @@ "trendlineRangeSelector5Years": "5 años", "trendlineRangeSelectorAll": "Todo", "trendlineRangeSelectorMonths": "6 meses", - "tryReopeningTheForm": "Por favor, intenta lanzar el formulario de nuevo", - "trySearchingAgain": "Please try searching again", - "tryTo": "Try to", - "unknown": "Unknown", - "usingADifferentTerm": "using a different term", + "tryReopeningTheForm": "Por favor, intente abrir el formulario de nuevo", + "trySearchingAgain": "Por favor, intente buscar de nuevo", + "tryTo": "Intente", + "unknown": "Desconocido", + "usingADifferentTerm": "utilizando un término diferente", "value": "Valor", "view": "Ver", - "viewTimeline": "View timeline" + "viewTimeline": "Ver calendario" } diff --git a/packages/esm-patient-lists-app/translations/es.json b/packages/esm-patient-lists-app/translations/es.json index b072b23ea..dbe3b6e8c 100644 --- a/packages/esm-patient-lists-app/translations/es.json +++ b/packages/esm-patient-lists-app/translations/es.json @@ -11,9 +11,9 @@ "noPatientListsToDisplay": "No hay listas de pacientes para mostrar", "noPatientsInList": "No hay pacientes en esta lista", "numberOfPatients": "Número de pacientes", - "patientListDetailWorkspaceTitle": "Patient List Details", + "patientListDetailWorkspaceTitle": "Detalles de la lista de pacientes", "patientLists": "Listas de pacientes", - "patientListsWorkspaceTitle": "Patient Lists", + "patientListsWorkspaceTitle": "Listas de Pacientes", "patients": "pacientes", "searchThisList": "Buscar en esta lista", "sex": "Sexo", diff --git a/packages/esm-patient-medications-app/translations/es.json b/packages/esm-patient-medications-app/translations/es.json index ddf929c1c..963b9259d 100644 --- a/packages/esm-patient-medications-app/translations/es.json +++ b/packages/esm-patient-medications-app/translations/es.json @@ -3,21 +3,21 @@ "activeMedicationsHeaderTitle": "Medicamentos activos", "activeMedicationsTableTitle": "Medicamentos Activos", "add": "Añadir", - "addDrugOrderWorkspaceTitle": "Add drug order", - "backToOrderBasket": "Volver a la cesta de pedidos", - "clearSearchResults": "Borrar resultados", - "decrement": "Decremento", + "addDrugOrderWorkspaceTitle": "Añadir orden de medicamento", + "backToOrderBasket": "Volver a la cesta de órdenes", + "clearSearchResults": "Borrar Resultados", + "decrement": "Disminuir", "details": "Detalles", - "directlyAddToBasket": "Añadir inmediatamente a la cesta", + "directlyAddToBasket": "Añadir a la cesta", "discard": "Descartar", - "discontinue": "Interrumpir", - "discontinuedDate": "Discontinued date", + "discontinue": "Descontinuar", + "discontinuedDate": "Fecha de descontinuación", "dispensingInformation": "3. Instrucciones de suministro", "dosageInstructions": "1. Instrucciones de dosificación", - "dosageRequiredErrorMessage": "Dosage is required", + "dosageRequiredErrorMessage": "La dosificación es obligatoria", "dose": "Dosis", "drugAlreadyPrescribed": "Ya prescrito", - "drugOrders": "Drug orders", + "drugOrders": "Órdenes de medicamentos", "duration": "Duración", "durationUnit": "Unidad de duración", "durationUnitPlaceholder": "Unidad de Duración", @@ -29,65 +29,65 @@ "editFrequencyComboBoxTitle": "Frecuencia", "editRouteComboBoxTitle": "Ruta", "error": "Error", - "errorFetchingDrugOrderTemplates": "Error en la obtención de plantillas de pedidos de medicamentos", + "errorFetchingDrugOrderTemplates": "Error al obtener las plantillas de órdenes de medicamentos", "errorFetchingDrugResults": "Error al buscar resultados para \"{{searchTerm}}\"", - "errorFetchingOrderConfig": "Se ha producido un error al recuperar la configuración del pedido", + "errorFetchingOrderConfig": "Se ha producido un error al recuperar la configuración de la orden", "female": "Femenino", - "freeDosageErrorMessage": "Add free dosage note", + "freeDosageErrorMessage": "Añadir nota de dosificación gratuita", "freeTextDosage": "Dosificación de texto libre", "goToDrugOrderForm": "Abrir formulario", - "increment": "Incremento", + "increment": "Incrementar", "indication": "Indicación", - "indicationErrorMessage": "Indication is required", + "indicationErrorMessage": "La indicación es obligatoria", "indicationPlaceholder": "p. ej. \"Hipertensión\"", "male": "Masculino", - "medicationDurationAndUnit": "para {{duration}} {{durationUnit}}", + "medicationDurationAndUnit": "por {{duration}} {{durationUnit}}", "medicationIndefiniteDuration": "Duración indefinida", - "medications": "Medications", + "medications": "Medicamentos", "modify": "Modificar", "none": "Ninguno", "noResultsForDrugSearch": "No hay resultados para \"{{searchTerm}}\"", - "numRefillsErrorMessage": "Number of refills is required", + "numRefillsErrorMessage": "El número de reposiciones es obligatorio", "onDate": "en", - "orderActionDiscontinue": "Interrumpir", - "orderActionIncomplete": "Incomplete", + "orderActionDiscontinue": "Descontinuar", + "orderActionIncomplete": "Incompleto", "orderActionNew": "Nuevo", "orderActionRenew": "Renovar", "orderActionRevise": "Modificar", - "orderForm": "Formulario de pedido", + "orderForm": "Formulario de orden", "other": "Otro", "pastMedicationsDisplayText": "Medicamentos anteriores", "pastMedicationsHeaderTitle": "Medicamentos anteriores", "pastMedicationsTableTitle": "Medicamentos Anteriores", "patientInstructions": "Instrucciones para el paciente", "patientInstructionsPlaceholder": "Instrucciones de dosificación adicionales (por ejemplo, \"Tomar después de comer\")", - "pillDispensedErrorMessage": "Quantity to dispense is required", + "pillDispensedErrorMessage": "La cantidad a dispensar es obligatoria", "prescriptionDuration": "2. Duración de la prescripción", "prescriptionRefills": "Reposición de la prescripción", "print": "Imprimir", "printedBy": "Impreso por", "prn": "P.R.N.", - "prnReason": "P.R.N. razón", + "prnReason": "Razón P.R.N.", "prnReasonPlaceholder": "Razón para tomar medicamentos", "quantity": "Cantidad", "quantityToDispense": "Cantidad a dispensar", "refills": "Reposición", "removeFromBasket": "Retirar de la cesta", - "reorder": "Volver a pedir", - "saveOrder": "Guardar pedido", + "reorder": "Volver a ordenar", + "saveOrder": "Guardar orden", "searchAgain": "buscar de nuevo", "searchFieldPlaceholder": "Buscar un medicamento o un conjunto de órdenes (por ejemplo, \"Aspirina\")", - "searchResultsMatchesForTerm_one": "{{count}} result for \"{{searchTerm}}\"", - "searchResultsMatchesForTerm_other": "{{count}} results for \"{{searchTerm}}\"", - "selectFrequencyErrorMessage": "Frequency is required", - "selectQuantityUnitsErrorMessage": "Quantity unit is required", - "selectRouteErrorMessage": "Route is required", - "selectUnitErrorMessage": "Dose unit is required", + "searchResultsMatchesForTerm_one": "{{count}} resultado para \"{{searchTerm}}\"", + "searchResultsMatchesForTerm_other": "{{count}} resultados para \"{{searchTerm}}\"", + "selectFrequencyErrorMessage": "La frecuencia es obligatoria", + "selectQuantityUnitsErrorMessage": "La unidad de cantidad es obligatoria", + "selectRouteErrorMessage": "La vía de administración es obligatoria", + "selectUnitErrorMessage": "La unidad de dosis es obligatoria", "startDate": "Fecha de inicio", "takeAsNeeded": "Tomar según sea necesario", - "tryReopeningTheForm": "Intente abrir el formulario de nuevo", - "trySearchingAgain": "Intente buscar de nuevo", - "tryTo": "Intentar", + "tryReopeningTheForm": "Por favor, intente abrir el formulario de nuevo", + "trySearchingAgain": "Por favor, intente buscar de nuevo", + "tryTo": "Intente", "unknown": "Desconocido", "usingADifferentTerm": "utilizando un término diferente" } diff --git a/packages/esm-patient-notes-app/translations/es.json b/packages/esm-patient-notes-app/translations/es.json index 26fd22a7f..ee061f04f 100644 --- a/packages/esm-patient-notes-app/translations/es.json +++ b/packages/esm-patient-notes-app/translations/es.json @@ -7,22 +7,22 @@ "date": "Fecha", "diagnoses": "Diagnósticos", "discard": "Descartar", - "emptyDiagnosisText": "No se ha seleccionado ningún diagnóstico. Introduce un diagnóstico a continuación", - "enterPrimaryDiagnoses": "Ingresar diagnósticos principales", - "enterSecondaryDiagnoses": "Ingresar diagnósticos secundarios", + "emptyDiagnosisText": "No se ha seleccionado ningún diagnóstico. Introduzca un diagnóstico a continuación", + "enterPrimaryDiagnoses": "Ingrese Diagnósticos Principales", + "enterSecondaryDiagnoses": "Ingrese Diagnósticos Secundarios", "error": "Error", - "errorFetchingConcepts": "There was a problem fetching concepts", + "errorFetchingConcepts": "Hubo un problema al obtener los conceptos", "image": "Imagen", - "imageRemoved": "Image removed", + "imageRemoved": "Imagen removida", "imageUploadHelperText": "Subir una imagen o utilizar la cámara de este dispositivo para capturar una imagen", "noMatchingDiagnoses": "No se encontraron diagnósticos coincidentes", "note": "Nota", "noVisitNoteToDisplay": "No hay notas de visita para mostrar", "primaryDiagnosis": "Diagnóstico principal", - "primaryDiagnosisInputPlaceholder": "Elegir un diagnóstico principal", - "primaryDiagnosisRequired": "Choose at least one primary diagnosis", + "primaryDiagnosisInputPlaceholder": "Elija un diagnóstico principal", + "primaryDiagnosisRequired": "Elija al menos un diagnóstico principal", "saveAndClose": "Guardar y cerrar", - "saving": "Saving", + "saving": "Guardando", "searchForPrimaryDiagnosis": "Buscar un diagnóstico principal", "searchForSecondaryDiagnosis": "Buscar un diagnóstico secundario", "secondaryDiagnosis": "Diagnóstico secundario", @@ -34,5 +34,5 @@ "visitNotes": "Notas de visita", "visitNoteSaved": "Nota de visita guardada", "visitNoteSaveError": "Error al guardar la nota de visita", - "visitNoteWorkspaceTitle": "Visit Note" + "visitNoteWorkspaceTitle": "Nota de la visita" } diff --git a/packages/esm-patient-programs-app/translations/es.json b/packages/esm-patient-programs-app/translations/es.json index f76917589..a0cd9c6cf 100644 --- a/packages/esm-patient-programs-app/translations/es.json +++ b/packages/esm-patient-programs-app/translations/es.json @@ -3,11 +3,11 @@ "active": "Activo", "activePrograms": "Programas activos", "add": "Añadir", - "addPrograms": "Add programs", + "addPrograms": "Añadir programas", "cancel": "Cancelar", "carePrograms": "Programas de atención", "chooseProgram": "Elegir un programa", - "chooseStatus": "Choose a program status", + "chooseStatus": "Escoger un estado de programa", "completedOn": "Completado el", "configurePrograms": "Por favor, configure programas para continuar.", "dateCompleted": "Fecha de finalización", @@ -24,15 +24,15 @@ "noProgramsConfigured": "No hay programas configurados", "programEnrollments": "Inscripciones en programa", "programEnrollmentSaveError": "Error al guardar inscripción en programa", - "programEnrollmentWorkspaceTitle": "Record program enrollment", - "programName": "Nombre de programa", - "programRequired": "Program is required", - "programs": "Programas", + "programEnrollmentWorkspaceTitle": "Registrar la inscripción en el programa", + "programName": "Nombre del programa", + "programRequired": "El programa es obligatorio", + "programs": "Inscripciones en el programa", "Programs": "Programas", - "programStatus": "Program status", + "programStatus": "Estado del programa", "saveAndClose": "Guardar y cerrar", - "saving": "Saving", + "saving": "Guardando", "seeAll": "Ver todos", - "state": "State", + "state": "Estado", "status": "Estado" } diff --git a/packages/esm-patient-vitals-app/translations/es.json b/packages/esm-patient-vitals-app/translations/es.json index 43a34d42e..2b23abe9e 100644 --- a/packages/esm-patient-vitals-app/translations/es.json +++ b/packages/esm-patient-vitals-app/translations/es.json @@ -1,20 +1,20 @@ { - "abnormalValue": "Abnormal value", + "abnormalValue": "Valor anormal", "add": "Añadir", "additionalNoteText": "Escriba aquí cualquier nota adicional", - "biometricDisplayed": "Biometría mostrada", - "biometrics": "Biometría", - "biometrics_lower": "biometría", - "bloodPressure": "Presión arterial", - "bloodPressureAbbreviated": "BP", + "biometricDisplayed": "Biométrica mostrada", + "biometrics": "Biométricas", + "biometrics_lower": "biométricas", + "bloodPressure": "Presión Arterial", + "bloodPressureAbbreviated": "PA", "bmi": "IMC", "bp": "PA", "calculatedBmi": "IMC (calc.)", "checkForValidity": "Algunos de los valores introducidos no son válidos", - "date": "Date", - "dateAndTime": "Date and time", - "daysOldVitals_one": "These vitals are {{count}} day old", - "daysOldVitals_other": "These vitals are {{count}} days old", + "date": "Fecha", + "dateAndTime": "Fecha y hora", + "daysOldVitals_one": "Estos signos vitales tienen {{count}} día", + "daysOldVitals_other": "Estos signos vitales tienen {{count}} días", "diastolic": "diastólica", "discard": "Descartar", "error": "Error", @@ -28,20 +28,20 @@ "noDataRecorded": "No se han registrado datos para este paciente", "notes": "Notas", "other": "Otro", - "outOfDateVitals": "These vitals are out of date", + "outOfDateVitals": "Estos signos vitales están desactualizados.", "overdue": "Atrasado", - "overOneWeekOldVitals": "These vitals are over one week old", - "oxygenSaturation": "Oxygen saturation", + "overOneWeekOldVitals": "Estos signos vitales tienen más de una semana.", + "oxygenSaturation": "Saturación de oxígeno", "pleaseFillField": "Por favor, complete al menos un campo", "print": "Imprimir", "printedBy": "Impreso por", "pulse": "Pulso", "recordBiometrics": "Registrar datos biométricos", "recordVitals": "Registrar signos vitales", - "recordVitalsAndBiometrics": "Record Vitals and Biometrics", + "recordVitalsAndBiometrics": "Registrar Signos Vitales y Biométricas", "respirationRate": "Frecuencia respiratoria", "respiratoryRate": "FR", - "respiratoryRateAbbreviated": "R. Rate", + "respiratoryRateAbbreviated": "FR", "saveAndClose": "Guardar y cerrar", "seeAll": "Ver todo", "spo2": "SpO2", @@ -50,15 +50,15 @@ "temperature": "Temperatura", "temperatureAbbreviated": "Temp", "unknown": "Desconocido", - "validationInputError": "Value must be between {{min}} and {{max}}", - "vitals": "Signos vitales", - "Vitals & Biometrics": "Signos vitales y biometría", - "vitalsAndBiometrics": "Signos vitales y biométricos", - "vitalsAndBiometricsNowAvailable": "Ahora son visibles en la página de Signos vitales y biométricos", - "vitalsAndBiometricsRecorded": "Signos vitales y biométricos guardados", + "validationInputError": "El valor debe estar entre {{min}} y {{max}}", + "vitals": "Signos Vitales", + "Vitals & Biometrics": "Signos Vitales y Biométricas", + "vitalsAndBiometrics": "Signos vitales y biométricas", + "vitalsAndBiometricsNowAvailable": "Ahora son visibles en la página de Signos vitales y Biométricas", + "vitalsAndBiometricsRecorded": "Signos Vitales y Biométricas guardados", "vitalsAndBiometricsSaveError": "Error al guardar signos vitales y biométricos", "vitalsHistory": "Historial de signos vitales", - "vitalSignDisplayed": "Vital sign displayed", + "vitalSignDisplayed": "Signo vital mostrado", "vitalSigns": "Signos vitales", "weight": "Peso" } From b07de64c70ddd561f04411af12dbb10b6d2118a6 Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Mon, 30 Sep 2024 17:50:16 +0300 Subject: [PATCH 07/14] (refactor) Port modal registrations to use the modal system (#2044) This PR ports over a few modal registrations in the Patient Chart routes registry from using the extension system to using the modal system. It also refactors a few component export names from using the `Dialog` suffix to using the `Modal` suffix for consistency. --- packages/esm-patient-chart-app/src/index.ts | 14 ++--- .../esm-patient-chart-app/src/routes.json | 60 ++++++++----------- 2 files changed, 31 insertions(+), 43 deletions(-) diff --git a/packages/esm-patient-chart-app/src/index.ts b/packages/esm-patient-chart-app/src/index.ts index d2831af5a..2b4d78a18 100644 --- a/packages/esm-patient-chart-app/src/index.ts +++ b/packages/esm-patient-chart-app/src/index.ts @@ -181,33 +181,33 @@ export const markPatientDeceasedForm = getAsyncLifecycle( }, ); -export const cancelVisitDialog = getAsyncLifecycle(() => import('./visit/visit-prompt/cancel-visit-dialog.component'), { +export const cancelVisitModal = getAsyncLifecycle(() => import('./visit/visit-prompt/cancel-visit-dialog.component'), { featureName: 'cancel visit', moduleName, }); -export const startVisitDialog = getAsyncLifecycle(() => import('./visit/visit-prompt/start-visit-dialog.component'), { +export const startVisitModal = getAsyncLifecycle(() => import('./visit/visit-prompt/start-visit-dialog.component'), { featureName: 'start visit', moduleName, }); -export const deleteVisitDialog = getAsyncLifecycle(() => import('./visit/visit-prompt/delete-visit-dialog.component'), { +export const deleteVisitModal = getAsyncLifecycle(() => import('./visit/visit-prompt/delete-visit-dialog.component'), { featureName: 'delete visit', moduleName, }); -export const modifyVisitDateDialog = getAsyncLifecycle(() => import('./visit/visit-prompt/modify-visit-date.modal'), { - featureName: 'delete visit', +export const modifyVisitDateModal = getAsyncLifecycle(() => import('./visit/visit-prompt/modify-visit-date.modal'), { + featureName: 'modify visit date', moduleName, }); -export const endVisitDialog = getAsyncLifecycle(() => import('./visit/visit-prompt/end-visit-dialog.component'), { +export const endVisitModal = getAsyncLifecycle(() => import('./visit/visit-prompt/end-visit-dialog.component'), { featureName: 'end visit', moduleName, }); export const markPatientAliveModal = getAsyncLifecycle(() => import('./mark-patient-alive/mark-patient-alive.modal'), { - featureName: 'Mark patient alive', + featureName: 'mark patient alive', moduleName, }); diff --git a/packages/esm-patient-chart-app/src/routes.json b/packages/esm-patient-chart-app/src/routes.json index 3bcd6bc77..b006461f4 100644 --- a/packages/esm-patient-chart-app/src/routes.json +++ b/packages/esm-patient-chart-app/src/routes.json @@ -146,36 +146,6 @@ "online": true, "offline": true }, - { - "name": "cancel-visit-dialog", - "component": "cancelVisitDialog", - "online": true, - "offline": true - }, - { - "name": "start-visit-dialog", - "component": "startVisitDialog", - "online": true, - "offline": true - }, - { - "name": "delete-visit-dialog", - "component": "deleteVisitDialog", - "online": true, - "offline": true - }, - { - "name": "modify-visit-date-dialog", - "component": "modifyVisitDateDialog", - "online": true, - "offline": true - }, - { - "name": "end-visit-dialog", - "component": "endVisitDialog", - "online": true, - "offline": true - }, { "name": "start-visit-button-patient-search", "slot": "start-visit-button-slot", @@ -190,12 +160,6 @@ "online": true, "offline": true }, - { - "name": "delete-encounter-modal", - "component": "deleteEncounterModal", - "online": true, - "offline": true - }, { "name": "current-visit-summary", "component": "currentVisitSummary", @@ -231,9 +195,33 @@ } ], "modals": [ + { + "name": "cancel-visit-dialog", + "component": "cancelVisitModal" + }, + { + "name": "delete-encounter-modal", + "component": "deleteEncounterModal" + }, + { + "name": "delete-visit-dialog", + "component": "deleteVisitModal" + }, + { + "name": "end-visit-dialog", + "component": "endVisitModal" + }, { "name": "mark-patient-alive-modal", "component": "markPatientAliveModal" + }, + { + "name": "modify-visit-date-dialog", + "component": "modifyVisitDateModal" + }, + { + "name": "start-visit-dialog", + "component": "startVisitModal" } ], "pages": [ From 20eb9f48af471ea202a8b9ab43271cc25d5e387b Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Mon, 30 Sep 2024 23:57:14 +0300 Subject: [PATCH 08/14] (fix) Fix View timeline button spacing in results viewer --- .../individual-results-table.component.tsx | 5 +++-- .../individual-results-table/individual-results-table.scss | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.component.tsx b/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.component.tsx index a6d397fe3..934c784ee 100644 --- a/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.component.tsx +++ b/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.component.tsx @@ -132,11 +132,12 @@ const IndividualResultsTable: React.FC = ({ isLoadi : ''} diff --git a/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.scss b/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.scss index f29604114..0320522f2 100644 --- a/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.scss +++ b/packages/esm-patient-labs-app/src/test-results/individual-results-table/individual-results-table.scss @@ -105,6 +105,7 @@ p { .viewTimeline { display: flex; margin-left: auto; + margin-top: -(layout.$spacing-02); } .cardTitle { From 15a2f3aee58434e301ebd117dc2d2dcaec33acc1 Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Tue, 1 Oct 2024 13:30:30 +0300 Subject: [PATCH 09/14] (fix) Fix invalid prop warning for some Carbon components (#2048) (fix) Fix invalid prop warning for Carbon Components This PR fixes the value passed as the `invalid` prop for several Carbon Components, ensuring that the value is always a boolean. --- .../mark-patient-deceased-form.workspace.tsx | 4 ++-- .../src/visit/visit-form/visit-date-time.component.tsx | 6 +++--- .../lab-orders/add-lab-order/lab-order-form.component.tsx | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx index dcfa6f5b8..3e1b3979f 100644 --- a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx +++ b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx @@ -219,8 +219,8 @@ const MarkPatientDeceasedForm: React.FC = ({ close render={({ field: { onChange, value } }) => ( = ({ labelText={t('date', 'Date')} placeholder="dd/mm/yyyy" style={{ width: '100%' }} - invalid={errors[dateFieldName]?.message} + invalid={!!errors[dateFieldName]} invalidText={errors[dateFieldName]?.message} /> @@ -84,7 +84,7 @@ const VisitDateTimeField: React.FC = ({ style={{ marginLeft: '0.125rem', flex: 'none' }} value={value} onBlur={onBlur} - invalid={errors[timeFieldName]?.message} + invalid={!!errors[timeFieldName]} invalidText={errors[timeFieldName]?.message} > = ({ onChange={(event) => onChange(event.target.value as amPm)} value={value} aria-label={t('timeFormat ', 'Time Format')} - invalid={errors[timeFormatFieldName]?.message} + invalid={!!errors[timeFormatFieldName]} invalidText={errors[timeFormatFieldName]?.message} > diff --git a/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/lab-order-form.component.tsx b/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/lab-order-form.component.tsx index a1a057c5f..f398521f8 100644 --- a/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/lab-order-form.component.tsx +++ b/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/lab-order-form.component.tsx @@ -193,7 +193,7 @@ export function LabOrderForm({ value={value} onChange={onChange} onBlur={onBlur} - invalid={errors.accessionNumber?.message} + invalid={!!errors.accessionNumber} invalidText={errors.accessionNumber?.message} /> )} @@ -216,7 +216,7 @@ export function LabOrderForm({ items={priorityOptions} onBlur={onBlur} onChange={({ selectedItem }) => onChange(selectedItem?.value || '')} - invalid={errors.urgency?.message} + invalid={!!errors.urgency} invalidText={errors.urgency?.message} /> )} @@ -241,7 +241,7 @@ export function LabOrderForm({ items={orderReasons} onBlur={onBlur} onChange={({ selectedItem }) => onChange(selectedItem?.uuid || '')} - invalid={errors.orderReason?.message} + invalid={!!errors.orderReason} invalidText={errors.orderReason?.message} /> )} @@ -266,7 +266,7 @@ export function LabOrderForm({ onChange={onChange} onBlur={onBlur} maxCount={500} - invalid={errors.instructions?.message} + invalid={!!errors.instructions} invalidText={errors.instructions?.message} /> )} From 4b394c8023c5341d77402836c48730e141166d22 Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Tue, 1 Oct 2024 17:06:17 +0300 Subject: [PATCH 10/14] (feat) Add an empty state view to BaseVisitType (#2045) This PR tweaks the `BaseVisitType` component as follows: - Adds an empty state to the search input to show when there are no matching results. - Conditionally renders the Pagination container based on whether there are any matching results. - Refactors the debounce logic in the search input to use the `useDebounce` hook. - Tweaks the `StructuredListSkeleton` component to remove a double bottom border. - Adds some missing test coverage to the `BaseVisitType` component. - Moves styling to a colocated SCSS file. --- .../visit-form/base-visit-type.component.tsx | 106 ++++++++++-------- ...ype-overview.scss => base-visit-type.scss} | 42 ++++++- .../visit/visit-form/base-visit-type.test.tsx | 67 ++++++++++- 3 files changed, 164 insertions(+), 51 deletions(-) rename packages/esm-patient-chart-app/src/visit/visit-form/{visit-type-overview.scss => base-visit-type.scss} (62%) diff --git a/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.component.tsx b/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.component.tsx index 94ea90588..d7e183c29 100644 --- a/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.component.tsx +++ b/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.component.tsx @@ -1,14 +1,12 @@ -import React, { useState, useMemo } from 'react'; +import React, { useState, useMemo, useCallback } from 'react'; +import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { useFormContext, Controller } from 'react-hook-form'; -import classNames from 'classnames'; -import debounce from 'lodash-es/debounce'; -import isEmpty from 'lodash-es/isEmpty'; -import { Layer, RadioButtonGroup, RadioButton, Search, StructuredListSkeleton } from '@carbon/react'; +import { Layer, RadioButton, RadioButtonGroup, Search, StructuredListSkeleton, Tile } from '@carbon/react'; import { PatientChartPagination } from '@openmrs/esm-patient-common-lib'; -import { useLayoutType, usePagination, type VisitType } from '@openmrs/esm-framework'; +import { useDebounce, useLayoutType, usePagination, type VisitType } from '@openmrs/esm-framework'; import { type VisitFormData } from './visit-form.resource'; -import styles from './visit-type-overview.scss'; +import styles from './base-visit-type.scss'; interface BaseVisitTypeProps { visitTypes: Array; @@ -16,21 +14,25 @@ interface BaseVisitTypeProps { const BaseVisitType: React.FC = ({ visitTypes }) => { const { t } = useTranslation(); + const { control } = useFormContext(); const isTablet = useLayoutType() === 'tablet'; const [searchTerm, setSearchTerm] = useState(''); - const { control } = useFormContext(); + const debouncedSearchTerm = useDebounce(searchTerm, 300); const searchResults = useMemo(() => { - if (!isEmpty(searchTerm)) { - return visitTypes.filter((visitType) => visitType.display.toLowerCase().search(searchTerm.toLowerCase()) !== -1); - } else { + if (!debouncedSearchTerm.trim()) { return visitTypes; } - }, [searchTerm, visitTypes]); - - const handleSearch = useMemo(() => debounce((searchTerm) => setSearchTerm(searchTerm), 300), []); + const lowercasedTerm = debouncedSearchTerm.toLowerCase(); + return visitTypes.filter((visitType) => visitType.display.toLowerCase().includes(lowercasedTerm)); + }, [debouncedSearchTerm, visitTypes]); const { results, currentPage, goTo } = usePagination(searchResults, 5); + const hasNoMatchingSearchResults = debouncedSearchTerm.trim() !== '' && searchResults.length === 0; + + const handleSearchTermChange = useCallback((event: React.ChangeEvent) => { + setSearchTerm(event.target.value); + }, []); return (
@@ -39,49 +41,63 @@ const BaseVisitType: React.FC = ({ visitTypes }) => { {isTablet ? ( handleSearch(event.target.value)} - placeholder={t('searchForAVisitType', 'Search for a visit type')} labelText="" + onChange={handleSearchTermChange} + placeholder={t('searchForAVisitType', 'Search for a visit type')} /> ) : ( handleSearch(event.target.value)} - placeholder={t('searchForAVisitType', 'Search for a visit type')} labelText="" + onChange={handleSearchTermChange} + placeholder={t('searchForAVisitType', 'Search for a visit type')} /> )} - ( - - {results.map(({ uuid, display, name }) => ( - - ))} - - )} - /> -
- goTo(page)} + {hasNoMatchingSearchResults ? ( +
+ +
+

{t('noVisitTypesToDisplay', 'No visit types to display')}

+

{t('checkFilters', 'Check the filters above')}

+
+
+
+ ) : ( + ( + + {results.map(({ uuid, display, name }) => ( + + ))} + + )} /> -
+ )} + + {!hasNoMatchingSearchResults && ( +
+ goTo(page)} + pageNumber={currentPage} + pageSize={5} + totalItems={visitTypes?.length} + /> +
+ )} ) : ( - + )}
); diff --git a/packages/esm-patient-chart-app/src/visit/visit-form/visit-type-overview.scss b/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.scss similarity index 62% rename from packages/esm-patient-chart-app/src/visit/visit-form/visit-type-overview.scss rename to packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.scss index 3504a5801..b9ce6ad35 100644 --- a/packages/esm-patient-chart-app/src/visit/visit-form/visit-type-overview.scss +++ b/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.scss @@ -1,12 +1,8 @@ +@use '@carbon/colors'; @use '@carbon/layout'; @use '@carbon/type'; @use '@openmrs/esm-styleguide/src/vars' as *; -.visitTypeOverviewWrapper { - margin: layout.$spacing-05 0; - border: 0.0625rem solid $grey-2; -} - .tablet { background-color: $ui-02; } @@ -19,6 +15,15 @@ } } +.visitTypeOverviewWrapper { + margin: layout.$spacing-05 0; + border: 0.0625rem solid $grey-2; + + &:has(.skeleton) { + border-bottom: none !important; + } +} + .visitTypeOverviewWrapper div:nth-child(3) > div:nth-child(2) { position: relative; } @@ -41,3 +46,30 @@ padding: layout.$spacing-02 layout.$spacing-05; margin: layout.$spacing-03 0; } + +.tileContainer { + background-color: $ui-02; + padding: layout.$spacing-09 0; +} + +.tile { + margin: auto; + width: fit-content; +} + +.tileContent { + display: flex; + flex-direction: column; + align-items: center; +} + +.content { + @include type.type-style('heading-compact-02'); + color: $text-02; + margin-bottom: layout.$spacing-03; +} + +.helper { + @include type.type-style('body-compact-01'); + color: $text-02; +} diff --git a/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.test.tsx b/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.test.tsx index a02b50253..e7a6973f1 100644 --- a/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.test.tsx +++ b/packages/esm-patient-chart-app/src/visit/visit-form/base-visit-type.test.tsx @@ -67,7 +67,49 @@ describe('VisitTypeOverview', () => { render(); }; - it('should be able to search for a visit type', async () => { + it('renders a list of the available visit types', () => { + renderVisitTypeOverview(); + + mockVisitTypes.forEach((visitType) => { + const radio = screen.getByRole('radio', { name: new RegExp(visitType.display, 'i') }); + expect(radio).toBeInTheDocument(); + expect(radio).not.toBeChecked(); + }); + }); + + it('allows keyboard navigation through visit types', async () => { + const user = userEvent.setup(); + + renderVisitTypeOverview(); + + const firstVisitType = screen.getByRole('radio', { name: new RegExp(mockVisitTypes[0].display, 'i') }); + firstVisitType.focus(); + + await user.keyboard('{ArrowDown}'); + expect(screen.getByRole('radio', { name: new RegExp(mockVisitTypes[1].display, 'i') })).toHaveFocus(); + + await user.keyboard('{ArrowUp}'); + expect(firstVisitType).toHaveFocus(); + }); + + it('clears the search input when the clear button is clicked', async () => { + const user = userEvent.setup(); + + renderVisitTypeOverview(); + + const searchInput = screen.getByRole('searchbox'); + await user.type(searchInput, 'HIV'); + + const clearButton = screen.getByRole('button', { name: /clear/i }); + await user.click(clearButton); + + expect(searchInput).toHaveValue(''); + mockVisitTypes.forEach((visitType) => { + expect(screen.getByRole('radio', { name: new RegExp(visitType.display, 'i') })).toBeInTheDocument(); + }); + }); + + it('searches for a matching visit type when the user types in the search input', async () => { const user = userEvent.setup(); renderVisitTypeOverview(); @@ -84,4 +126,27 @@ describe('VisitTypeOverview', () => { expect(outpatientVisit).toBeEmptyDOMElement(); expect(hivVisit).toBeInTheDocument(); }); + + it('renders an empty state when a search yields no matching results', async () => { + const user = userEvent.setup(); + + renderVisitTypeOverview(); + + const searchInput = screen.getByRole('searchbox'); + await user.type(searchInput, 'NonexistentVisitType'); + + expect(screen.getByText(/no visit types to display/i)).toBeInTheDocument(); + expect(screen.getByText(/check the filters above/i)).toBeInTheDocument(); + }); + + it('selects a visit type when clicked', async () => { + const user = userEvent.setup(); + + renderVisitTypeOverview(); + + const hivVisit = screen.getByRole('radio', { name: /HIV Return Visit/i }); + await user.click(hivVisit); + + expect(hivVisit).toBeChecked(); + }); }); From dc45ca5ae85092996a00ce0e2c3f8b634e37214b Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Tue, 1 Oct 2024 22:24:25 +0300 Subject: [PATCH 11/14] (feat) Add an empty state view to MarkPatientDeceased component (#2046) This PR extends the MarkPatientDeceased component as follows: - Adds an empty state view to the component - Adds test coverage for the component - Amends the property passed to the `invalid` prop of the non-coded cause of death `TextInput` field. --- .../mark-patient-deceased-form.scss | 27 +++ .../mark-patient-deceased-form.test.tsx | 190 ++++++++++++++++++ .../mark-patient-deceased-form.workspace.tsx | 55 +++-- .../translations/en.json | 1 + 4 files changed, 258 insertions(+), 15 deletions(-) create mode 100644 packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.test.tsx diff --git a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.scss b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.scss index 335c272e5..fa29df9df 100644 --- a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.scss +++ b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.scss @@ -146,3 +146,30 @@ border-bottom: none; } } + +.tileContainer { + background-color: $ui-02; + padding: layout.$spacing-09 0; +} + +.tile { + margin: auto; + width: fit-content; +} + +.tileContent { + display: flex; + flex-direction: column; + align-items: center; +} + +.content { + @include type.type-style('heading-compact-02'); + color: $text-02; + margin-bottom: layout.$spacing-03; +} + +.helper { + @include type.type-style('body-compact-01'); + color: $text-02; +} diff --git a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.test.tsx b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.test.tsx new file mode 100644 index 000000000..652e7cd80 --- /dev/null +++ b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.test.tsx @@ -0,0 +1,190 @@ +import React from 'react'; +import userEvent from '@testing-library/user-event'; +import { render, screen } from '@testing-library/react'; +import { getDefaultsFromConfigSchema, showSnackbar, useConfig } from '@openmrs/esm-framework'; +import { esmPatientChartSchema, type ChartConfig } from '../config-schema'; +import { mockPatient } from 'tools'; +import { markPatientDeceased, useCausesOfDeath } from '../data.resource'; +import MarkPatientDeceasedForm from './mark-patient-deceased-form.workspace'; + +const originalLocation = window.location; +delete window.location; +window.location = { ...originalLocation, reload: jest.fn() }; + +const mockMarkPatientDeceased = jest.mocked(markPatientDeceased); +const mockUseCausesOfDeath = jest.mocked(useCausesOfDeath); +const mockUseConfig = jest.mocked(useConfig); +const mockShowSnackbar = jest.mocked(showSnackbar); +const mockCloseWorkspace = jest.fn(); + +jest.mock('../data.resource.ts', () => ({ + markPatientDeceased: jest.fn().mockResolvedValue({}), + useCausesOfDeath: jest.fn(), +})); + +describe('MarkPatientDeceasedForm', () => { + const freeTextFieldConceptUuid = '1234e218-6c8a-4ca3-8edb-9f6d9c8c8c7f'; + + const defaultProps = { + patientUuid: mockPatient.id, + closeWorkspace: mockCloseWorkspace, + closeWorkspaceWithSavedChanges: jest.fn(), + promptBeforeClosing: jest.fn(), + setTitle: jest.fn(), + }; + + const codedCausesOfDeath = [ + { + display: 'Traumatic injury', + uuid: '8b64f45e-1d5f-4894-b77c-4e1d840e2c99', + name: 'Traumatic injury', + }, + { + display: 'Neoplasm/cancer', + uuid: 'c4e8d03c-f09b-48d1-8d93-7d84d463f865', + name: 'Neoplasm/cancer', + }, + { + display: 'Infectious disease', + uuid: 'b7c1c30f-5b9e-4a3d-b943-7f4b3f740e6c', + name: 'Infectious disease', + }, + { + display: 'Other', + uuid: freeTextFieldConceptUuid, + name: 'Other', + }, + ]; + + beforeEach(() => { + mockUseCausesOfDeath.mockReturnValue({ + causesOfDeath: codedCausesOfDeath, + isLoading: false, + isValidating: false, + }); + + mockUseConfig.mockReturnValue({ + ...getDefaultsFromConfigSchema(esmPatientChartSchema), + freeTextFieldConceptUuid, + }); + }); + + afterAll(() => { + window.location = originalLocation; + }); + + it('renders the cause of death form', () => { + render(); + + expect(screen.getByRole('img', { name: /warning/i })).toBeInTheDocument(); + expect( + screen.getByText(/marking the patient as deceased will end any active visits for this patient/i), + ).toBeInTheDocument(); + expect(screen.getByText(/cause of death/i)).toBeInTheDocument(); + expect(screen.getByRole('searchbox')).toBeInTheDocument(); + expect(screen.getByRole('textbox', { name: /date/i })); + codedCausesOfDeath.forEach((codedCauseOfDeath) => { + expect(screen.getByRole('radio', { name: codedCauseOfDeath.display })).toBeInTheDocument(); + }); + expect(screen.getByRole('button', { name: /discard/i })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /save and close/i })).toBeInTheDocument(); + }); + + it('searches through the list when the user types in the search input', async () => { + const user = userEvent.setup(); + + render(); + + const searchInput = screen.getByRole('searchbox'); + + await user.type(searchInput, 'totally random text'); + expect(screen.getByText(/no matching coded causes of death/i)); + + await user.clear(searchInput); + await user.type(searchInput, 'traumatic injury'); + + expect(screen.getByRole('radio', { name: 'Traumatic injury' })).toBeInTheDocument(); + expect(screen.getAllByRole('radio')).toHaveLength(1); + }); + + it('selecting "Other" as the cause of death requires the user to enter a non-coded cause of death', async () => { + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const user = userEvent.setup(); + + render(); + + const submitButton = screen.getByRole('button', { name: /save and close/i }); + + await user.click(screen.getByRole('radio', { name: 'Other' })); + expect(screen.getByRole('textbox', { name: /non-coded cause of death/i })).toBeInTheDocument(); + + await user.click(submitButton); + + expect(screen.getByText(/please enter the non-coded cause of death/i)).toBeInTheDocument(); + + await user.type(screen.getByRole('textbox', { name: /non\-coded cause of death/i }), 'Septicemia'); + await user.click(submitButton); + + expect(markPatientDeceased).toHaveBeenCalledWith( + expect.any(Date), + '8673ee4f-e2ab-4077-ba55-4980f408773e', // causeOfDeathUuid + freeTextFieldConceptUuid, // otherCauseOfDeathConceptUuid + 'Septicemia', // otherCauseOfDeath + ); + consoleError.mockRestore(); + }); + + it('submits the form with a coded cause of death', async () => { + const user = userEvent.setup(); + + render(); + + const submitButton = screen.getByRole('button', { name: /save and close/i }); + const traumaticInjuryRadio = screen.getByRole('radio', { name: 'Traumatic injury' }); + + await user.click(traumaticInjuryRadio); + await user.click(submitButton); + + expect(markPatientDeceased).toHaveBeenCalledWith( + expect.any(Date), + '8673ee4f-e2ab-4077-ba55-4980f408773e', + '8b64f45e-1d5f-4894-b77c-4e1d840e2c99', // causeOfDeathUuid for Traumatic injury, + '', + ); + }); + + it('renders an error message when saving the cause of death fails', async () => { + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const user = userEvent.setup(); + const mockError = new Error('API Error'); + + mockMarkPatientDeceased.mockRejectedValueOnce(mockError); + + render(); + + const submitButton = screen.getByRole('button', { name: /save and close/i }); + const traumaticInjuryRadio = screen.getByRole('radio', { name: 'Traumatic injury' }); + + await user.click(traumaticInjuryRadio); + await user.click(submitButton); + + expect(mockShowSnackbar).toHaveBeenCalledWith({ + isLowContrast: false, + kind: 'error', + subtitle: mockError.message, + title: 'Error marking patient deceased', + }); + consoleError.mockRestore(); + }); + + it('clicking the discard button closes the workspace', async () => { + const user = userEvent.setup(); + + render(); + + const discardButton = screen.getByRole('button', { name: /discard/i }); + await user.click(discardButton); + + expect(mockCloseWorkspace).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx index 3e1b3979f..1b691f717 100644 --- a/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx +++ b/packages/esm-patient-chart-app/src/mark-patient-deceased/mark-patient-deceased-form.workspace.tsx @@ -16,6 +16,7 @@ import { Search, StructuredListSkeleton, TextInput, + Tile, } from '@carbon/react'; import { Controller, useForm, type SubmitHandler } from 'react-hook-form'; import { z } from 'zod'; @@ -50,6 +51,10 @@ const MarkPatientDeceasedForm: React.FC = ({ close : causesOfDeath; }, [searchTerm, causesOfDeath]); + const handleSearchTermChange = (event) => { + setSearchTerm(event.target.value); + }; + const schema = z .object({ causeOfDeath: z.string().refine((causeOfDeath) => !!causeOfDeath, { @@ -172,35 +177,55 @@ const MarkPatientDeceasedForm: React.FC = ({ close {causesOfDeath?.length ? ( setSearchTerm(event.target.value)} - placeholder={t('searchForCauseOfDeath', 'Search for a cause of death')} labelText="" + onChange={handleSearchTermChange} + placeholder={t('searchForCauseOfDeath', 'Search for a cause of death')} /> ) : null} - {causesOfDeath?.length ? ( + {causesOfDeath?.length && filteredCausesOfDeath.length > 0 ? ( ( - - {(filteredCausesOfDeath ? filteredCausesOfDeath : causesOfDeath).map( - ({ uuid, display, name }) => ( - - ), - )} + + {filteredCausesOfDeath.map(({ uuid, display, name }) => ( + + ))} )} /> ) : null} + {searchTerm && filteredCausesOfDeath.length === 0 && ( +
+ +
+

+ {t('noMatchingCodedCausesOfDeath', 'No matching coded causes of death')} +

+

{t('checkFilters', 'Check the filters above')}

+
+
+
+ )} + {!isLoadingCausesOfDeath && !causesOfDeath?.length ? ( Date: Tue, 1 Oct 2024 22:52:18 +0300 Subject: [PATCH 12/14] (feat) Tweak Test results dashboard sticky header UI (#2021) * (feat) Add background color on scrolling sticky results menu * Fix test results dashboard margins * Commit orphaned translation --------- Co-authored-by: Dennis Kigen --- .../chart-review/dashboard-view.scss | 4 +- .../translations/en.json | 1 + .../results-viewer.extension.tsx | 42 ++++++++++++++++--- .../results-viewer/results-viewer.scss | 18 ++++++++ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/packages/esm-patient-chart-app/src/patient-chart/chart-review/dashboard-view.scss b/packages/esm-patient-chart-app/src/patient-chart/chart-review/dashboard-view.scss index 00dccd327..99d582b30 100644 --- a/packages/esm-patient-chart-app/src/patient-chart/chart-review/dashboard-view.scss +++ b/packages/esm-patient-chart-app/src/patient-chart/chart-review/dashboard-view.scss @@ -15,7 +15,9 @@ } // See https://zpl.io/lrlmdq0 for the Visits dashboard design -[data-extension-slot-name='patient-chart-encounters-dashboard-slot'] { +[data-extension-slot-name='patient-chart-encounters-dashboard-slot'], +// See https://zpl.io/RmMXrDE for the Test Results dashboard design +[data-extension-slot-name='patient-chart-test-results-dashboard-slot'] { margin: 0 layout.$spacing-05; } diff --git a/packages/esm-patient-chart-app/translations/en.json b/packages/esm-patient-chart-app/translations/en.json index 7f67d35c8..e9fc6e906 100644 --- a/packages/esm-patient-chart-app/translations/en.json +++ b/packages/esm-patient-chart-app/translations/en.json @@ -106,6 +106,7 @@ "noObservationsFound": "No observations found", "notes": "Notes", "notes__lower": "notes", + "noVisitTypesToDisplay": "No visit types to display", "optional": "optional", "orderDurationAndUnit": "for {{duration}} {{durationUnit}}", "orderIndefiniteDuration": "Indefinite duration", diff --git a/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.extension.tsx b/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.extension.tsx index 44832ea2a..ecabd8355 100644 --- a/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.extension.tsx +++ b/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.extension.tsx @@ -1,10 +1,12 @@ -import React, { useCallback, useContext, useState } from 'react'; +import React, { useCallback, useContext, useEffect, useRef, useState } from 'react'; import classNames from 'classnames'; import { type TFunction, useTranslation } from 'react-i18next'; import { useParams } from 'react-router-dom'; import { ContentSwitcher, Switch, Button } from '@carbon/react'; import { EmptyState, ErrorState } from '@openmrs/esm-patient-common-lib'; import { navigate, useConfig, useLayoutType } from '@openmrs/esm-framework'; +import { type ConfigObject } from '../../config-schema'; +import { type viewOpts } from '../../types'; import { FilterContext, FilterProvider } from '../filter'; import { useGetManyObstreeData } from '../grouped-timeline'; import { testResultsBasePath } from '../helpers'; @@ -12,9 +14,7 @@ import PanelView from '../panel-view/panel-view.component'; import TabletOverlay from '../tablet-overlay'; import TreeViewWrapper from '../tree-view/tree-view-wrapper.component'; import Trendline from '../trendline/trendline.component'; -import type { ConfigObject } from '../../config-schema'; import styles from './results-viewer.scss'; -import { type viewOpts } from '../../types'; type panelOpts = 'tree' | 'panel'; @@ -65,6 +65,34 @@ const ResultsViewer: React.FC = ({ patientUuid, basePath, lo const isExpanded = view === 'full'; const trendlineView = testUuid && type === 'trendline'; const responsiveSize = isTablet ? 'lg' : 'md'; + const [isHeaderVisible, setIsHeaderVisible] = useState(true); + const headerRef = useRef(null); + + useEffect(() => { + const observerCallback: IntersectionObserverCallback = (entries) => { + const [entry] = entries; + setIsHeaderVisible(entry.isIntersecting); + }; + + const observerOptions: IntersectionObserverInit = { + threshold: 1, + rootMargin: '-1px 0px 0px 0px', + }; + + const observer = new IntersectionObserver(observerCallback, observerOptions); + + const currentHeader = headerRef.current; + if (currentHeader) { + observer.observe(currentHeader); + } + + return () => { + if (currentHeader) { + observer.unobserve(currentHeader); + } + observer.disconnect(); + }; + }, []); const navigateBackFromTrendlineView = useCallback(() => { navigate({ @@ -75,7 +103,8 @@ const ResultsViewer: React.FC = ({ patientUuid, basePath, lo if (isTablet) { return (
-
+
+

{`${t('results', 'Results')} ${ totalResultsCount ? `(${totalResultsCount})` : '' }`}

@@ -123,14 +152,15 @@ const ResultsViewer: React.FC = ({ patientUuid, basePath, lo return (
-
+
+

{t('tests', 'Tests')}

diff --git a/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.scss b/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.scss index dfa25a4e6..2eaa68c70 100644 --- a/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.scss +++ b/packages/esm-patient-labs-app/src/test-results/results-viewer/results-viewer.scss @@ -1,5 +1,6 @@ @use '@carbon/layout'; @use '@carbon/type'; +@use '@carbon/colors'; @use '@openmrs/esm-styleguide/src/vars' as *; :global(.omrs-breakpoint-gt-small-desktop .-esm-patient-chart__patient-chart__widthContained___Ow0JH) { @@ -46,6 +47,23 @@ position: sticky; top: layout.$spacing-09; display: flex; + transition: border-bottom 0.2s ease-in-out; +} + +.resultsHeaderScrolled { + border-bottom: 1px solid colors.$gray-20; + width: 100%; + left: 0; + right: 0; +} + +.headerSentinel { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 1px; + visibility: hidden; } .leftHeaderSection { From 23c438843c1808fcd3a81838a924aa9c856fa3b3 Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Wed, 2 Oct 2024 00:08:56 +0300 Subject: [PATCH 13/14] (fix) Visit header UI fixes --- .../src/visit-header/visit-header.component.tsx | 10 +++++++--- .../src/visit-header/visit-header.scss | 10 +++++----- .../visit/queue-entry/edit-queue-entry.component.tsx | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/esm-patient-chart-app/src/visit-header/visit-header.component.tsx b/packages/esm-patient-chart-app/src/visit-header/visit-header.component.tsx index 6d96d0139..dcbe61550 100644 --- a/packages/esm-patient-chart-app/src/visit-header/visit-header.component.tsx +++ b/packages/esm-patient-chart-app/src/visit-header/visit-header.component.tsx @@ -47,13 +47,12 @@ const PatientInfo: React.FC = ({ patient }) => { const name = patient ? getPatientName(patient) : ''; const patientUuid = `${patient?.id}`; - const { currentVisit } = useVisit(patientUuid); const patientNameIsTooLong = !isTablet && name.trim().length > 25; + const { currentVisit } = useVisit(patientUuid); const { queueEntry } = useVisitQueueEntry(patientUuid, currentVisit?.uuid); const visitType = queueEntry?.visitType ?? ''; const priority = queueEntry?.priority ?? ''; - const getServiceString = useCallback(() => { if (queueEntry?.status && queueEntry.service) { return `${t(queueEntry.status)} - ${t(queueEntry.service)}`; @@ -93,7 +92,12 @@ const PatientInfo: React.FC = ({ patient }) => { ) : ( {name} )} - {`${age(patient?.birthDate)}, ${getGender(patient?.gender)}`} + + + {patient?.birthDate ? `${age(patient.birthDate)}, ` : ''} + {patient?.gender ? getGender(patient.gender) : ''} + + {queueEntry && ( <>
diff --git a/packages/esm-patient-chart-app/src/visit-header/visit-header.scss b/packages/esm-patient-chart-app/src/visit-header/visit-header.scss index 53b02804d..15c58b9ed 100644 --- a/packages/esm-patient-chart-app/src/visit-header/visit-header.scss +++ b/packages/esm-patient-chart-app/src/visit-header/visit-header.scss @@ -13,7 +13,7 @@ } .navLogo { - margin-right: layout.$spacing-06; + margin-right: layout.$spacing-05; margin-left: layout.$spacing-04; } @@ -34,7 +34,7 @@ display: flex; align-items: center; color: $ui-02; - padding: 0 layout.$spacing-03; + padding: 0 layout.$spacing-05; :global(.cds--popover--bottom .cds--popover-content) { text-align: center; @@ -65,7 +65,7 @@ .patientInfo { color: $color-gray-30; @include type.type-style('body-compact-01'); - margin: 0 layout.$spacing-03 0; + margin: 0 layout.$spacing-05 0; } } @@ -80,9 +80,9 @@ } .navDivider { - background-color: colors.$teal-20; + background-color: var(--brand-03); width: 0.05rem; - height: 2.25rem; + height: 1.5rem; } .tag { diff --git a/packages/esm-patient-chart-app/src/visit/queue-entry/edit-queue-entry.component.tsx b/packages/esm-patient-chart-app/src/visit/queue-entry/edit-queue-entry.component.tsx index dd2353d5f..46056b07f 100644 --- a/packages/esm-patient-chart-app/src/visit/queue-entry/edit-queue-entry.component.tsx +++ b/packages/esm-patient-chart-app/src/visit/queue-entry/edit-queue-entry.component.tsx @@ -2,8 +2,8 @@ import React, { type ComponentProps, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { Button } from '@carbon/react'; import { EditIcon, showModal, useLayoutType } from '@openmrs/esm-framework'; -import styles from './edit-queue-entry.scss'; import { type MappedVisitQueueEntry } from './queue.resource'; +import styles from './edit-queue-entry.scss'; interface EditQueueEntryProps { queueEntry: MappedVisitQueueEntry; @@ -23,7 +23,7 @@ export const EditQueueEntry: React.FC = ({ queueEntry }) =>