diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index a0019259d..f0b203564 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -8,6 +8,11 @@ on: branches: - main +env: + TURBO_API: 'http://127.0.0.1:9080' + TURBO_TOKEN: ${{ secrets.TURBO_SERVER_TOKEN }} + TURBO_TEAM: ${{ github.repository_owner }} + jobs: run_e2e_tests: runs-on: ubuntu-latest @@ -38,6 +43,12 @@ jobs: - name: Install Playwright Browsers run: npx playwright install chromium --with-deps + - name: Setup local cache server for Turborepo + uses: felixmosh/turborepo-gh-artifacts@v3 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + server-token: ${{ env.TURBO_TOKEN }} + - name: Build apps run: yarn turbo run build --color --concurrency=5 diff --git a/packages/esm-patient-banner-app/translations/am.json b/packages/esm-patient-banner-app/translations/am.json index da032812d..e4e1b2fa1 100644 --- a/packages/esm-patient-banner-app/translations/am.json +++ b/packages/esm-patient-banner-app/translations/am.json @@ -1,12 +1,26 @@ { "address1": "Address line 1", "address2": "Address line 2", + "age": "Age", + "cancel": "Cancel", "city": "City", "cityVillage": "city", "country": "Country", "countyDistrict": "District", "district": "District", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "Postal code", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "State", - "stateProvince": "State" + "stateProvince": "State", + "unknown": "Unknown" } diff --git a/packages/esm-patient-banner-app/translations/ar.json b/packages/esm-patient-banner-app/translations/ar.json index 389090cff..f616a4c5b 100644 --- a/packages/esm-patient-banner-app/translations/ar.json +++ b/packages/esm-patient-banner-app/translations/ar.json @@ -1,12 +1,26 @@ { "address1": "سطر العنوان الأول", "address2": "سطر العنوان الثاني", + "age": "Age", + "cancel": "Cancel", "city": "المدينة", "cityVillage": "المدينة", "country": "الدولة", "countyDistrict": "المنطقة", "district": "المنطقة", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "الرمز البريدي", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "الولاية", - "stateProvince": "الولاية" + "stateProvince": "الولاية", + "unknown": "Unknown" } diff --git a/packages/esm-patient-banner-app/translations/es.json b/packages/esm-patient-banner-app/translations/es.json index 6a8dedc0c..aa523a29b 100644 --- a/packages/esm-patient-banner-app/translations/es.json +++ b/packages/esm-patient-banner-app/translations/es.json @@ -1,12 +1,26 @@ { "address1": "Línea de Dirección 1", "address2": "Línea de Dirección 2", + "age": "Age", + "cancel": "Cancel", "city": "Ciudad", "cityVillage": "ciudad", "country": "País", "countyDistrict": "Distrito", "district": "Distrito", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "Código Postal", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "State", - "stateProvince": "State" + "stateProvince": "State", + "unknown": "Unknown" } diff --git a/packages/esm-patient-banner-app/translations/fr.json b/packages/esm-patient-banner-app/translations/fr.json index 71f10c160..20ded9d9a 100644 --- a/packages/esm-patient-banner-app/translations/fr.json +++ b/packages/esm-patient-banner-app/translations/fr.json @@ -1,12 +1,26 @@ { "address1": "Address line 1", "address2": "Address line 2", + "age": "Age", + "cancel": "Cancel", "city": "City", "cityVillage": "City", "country": "Country", "countyDistrict": "District", "district": "District", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "Postal code", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "State", - "stateProvince": "State" + "stateProvince": "State", + "unknown": "Unknown" } diff --git a/packages/esm-patient-banner-app/translations/he.json b/packages/esm-patient-banner-app/translations/he.json index 8de53f1d0..ccfd6cc9a 100644 --- a/packages/esm-patient-banner-app/translations/he.json +++ b/packages/esm-patient-banner-app/translations/he.json @@ -1,12 +1,26 @@ { "address1": "כתובת רשומה 1", "address2": "כתובת רשומה 2", + "age": "Age", + "cancel": "Cancel", "city": "עיר", "cityVillage": "עיר", "country": "מדינה", "countyDistrict": "מחוז", "district": "מחוז", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "מיקוד", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "מדינה", - "stateProvince": "מדינה" + "stateProvince": "מדינה", + "unknown": "Unknown" } diff --git a/packages/esm-patient-banner-app/translations/km.json b/packages/esm-patient-banner-app/translations/km.json index 7e5b1d010..1af6cc9ec 100644 --- a/packages/esm-patient-banner-app/translations/km.json +++ b/packages/esm-patient-banner-app/translations/km.json @@ -1,12 +1,26 @@ { "address1": "អាសយដ្ឋានជួរទី១", "address2": "អសយដ្ឋានជួរទី 2", + "age": "Age", + "cancel": "Cancel", "city": "ទីក្រុង", "cityVillage": "ទីក្រុង", "country": "ប្រទេស", "countyDistrict": "ស្រុក/ខ័ណ្ឌ", "district": "ស្រុក/ខ័ណ្ឌ", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "លេខកូដតំបន់", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "រដ្ឋ", - "stateProvince": "រដ្ឋ" + "stateProvince": "រដ្ឋ", + "unknown": "Unknown" } diff --git a/packages/esm-patient-banner-app/translations/zh.json b/packages/esm-patient-banner-app/translations/zh.json index d911356cd..fad8616e9 100644 --- a/packages/esm-patient-banner-app/translations/zh.json +++ b/packages/esm-patient-banner-app/translations/zh.json @@ -1,12 +1,26 @@ { "address1": "地址行1", "address2": "地址行2", + "age": "年龄", + "cancel": "取消", "city": "城市", "cityVillage": "城市", "country": "国家", "countyDistrict": "区县", "district": "区县", + "dob": "出生日期", + "female": "女性", + "male": "男性", + "other": "其他", + "patientIdentifierSticker": "患者标识符贴纸", "postalCode": "邮政编码", + "print": "打印", + "printError": "打印错误", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "打印标识符贴纸", + "printing": "打印中", + "sex": "性别", "state": "省份", - "stateProvince": "省份" + "stateProvince": "省份", + "unknown": "未知" } diff --git a/packages/esm-patient-banner-app/translations/zh_CN.json b/packages/esm-patient-banner-app/translations/zh_CN.json index d911356cd..659c99690 100644 --- a/packages/esm-patient-banner-app/translations/zh_CN.json +++ b/packages/esm-patient-banner-app/translations/zh_CN.json @@ -1,12 +1,26 @@ { "address1": "地址行1", "address2": "地址行2", + "age": "Age", + "cancel": "Cancel", "city": "城市", "cityVillage": "城市", "country": "国家", "countyDistrict": "区县", "district": "区县", + "dob": "DOB", + "female": "Female", + "male": "Male", + "other": "Other", + "patientIdentifierSticker": "Patient identifier sticker", "postalCode": "邮政编码", + "print": "Print", + "printError": "Print error", + "printErrorExplainer": "An error occurred in \"{{errorLocation}}\": ", + "printIdentifierSticker": "Print identifier sticker", + "printing": "Printing", + "sex": "Sex", "state": "省份", - "stateProvince": "省份" + "stateProvince": "省份", + "unknown": "Unknown" } diff --git a/packages/esm-patient-chart-app/translations/am.json b/packages/esm-patient-chart-app/translations/am.json index c409bfd66..a166fb6ee 100644 --- a/packages/esm-patient-chart-app/translations/am.json +++ b/packages/esm-patient-chart-app/translations/am.json @@ -12,18 +12,18 @@ "cancelVisit": "Cancel visit", "cancelVisitExplainerMessage": "Cancelling this visit will delete its associated encounters", "causeOfDeath": "Cause of death", - "causeOfDeath_title": "Cause of Death", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "Check the filters above", "close": "Close", "confirm": "Confirm", - "confirmDeceased": "Confirm Deceased", "confirmDeletingVisitTextWithStartAndEndDate": "Are you sure you want to delete {{visit}} which started {{visitStartDate}} and ended {{visitEndDate}}?", - "confirmMarkAsAlive": "Are you sure, you want to mark patient as alive?", "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", "date": "Date", "dateAndTime": "Date & time", - "dateOfDeath": "Date of Death", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "Delete", "deleteEncounter": "Delete Encounter", "deleteEncounterConfirmationText": "Are you sure you want to delete this encounter? This action can't be undone.", @@ -52,6 +52,7 @@ "endVisit": "End visit", "endVisit_title": "End Visit", "endVisitExplainerMessage": "Ending this visit means that you will no longer be able to add encounters to it. If you need to add an encounter, you can create a new visit for this patient or edit a past one.", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "Error", "errorCancellingVisit": "Error cancelling active visit", "errorCopy": "Sorry, there was a problem displaying this information. You can try to reload this page, or contact the site administrator and quote the error code above.", @@ -59,6 +60,8 @@ "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", @@ -79,11 +82,11 @@ "loadMore": "Load more", "location": "Location", "male": "Male", - "markAlive": "Mark alive", - "markAsAlive": "Mark As Alive", - "markAsDeceased": "Are you sure you want to mark patient as deceased?", - "markDeceased": "Mark deceased", - "markingPatientDeceasedInfoText": "Marking the patient as deceased will end any active visits for this patient", + "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", "medications": "Medications", "medications__lower": "medications", "missingVisitType": "Missing visit type", @@ -99,6 +102,8 @@ "noDiagnosesFound": "No diagnoses found", "noEncountersFound": "No encounters found", "noEncountersToDisplay": "No encounters to display", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "No observations found", "notes": "Notes", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "Past Visit Error", "pastVisits": "Past Visits", "Patient Summary": "Patient Summary", + "printIdentifierSticker": "Print identifier sticker", "program": "Program", "provider": "Provider", "quantity": "Quantity", @@ -124,6 +130,8 @@ "refills": "Refills", "refreshToTryAgain": "Please refresh to try again", "retrospectiveEntry": "Retrospective Entry", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "Search for a visit type", "searchForCauseOfDeath": "Search for a cause of death", "searchThisList": "Search this list", @@ -132,11 +140,6 @@ "selectLocation": "Select a location", "selectProgramType": "Select program type", "selectVisitType": "Please select a Visit Type", - "setAliveError": "Error marking patient alive", - "setAliveSuccessfully": "Patient has been marked alive successfully", - "setDeceased": "Set Deceased", - "setDeceasedError": "Error marking patient deceased", - "setDeceasedSuccessfully": "Patient has been marked dead successfully", "start": "Start", "startAVisit": "Start a visit", "startDate": "Start Date", @@ -179,5 +182,6 @@ "visitType": "Visit type", "visitType_title": "Visit Type", "visitTypeRequired": "Visit type is required", + "warning": "Warning", "yes": "Yes" } diff --git a/packages/esm-patient-chart-app/translations/ar.json b/packages/esm-patient-chart-app/translations/ar.json index 8047fc6e5..7a67096dd 100644 --- a/packages/esm-patient-chart-app/translations/ar.json +++ b/packages/esm-patient-chart-app/translations/ar.json @@ -12,18 +12,18 @@ "cancelVisit": "إلغاء الزيارة", "cancelVisitExplainerMessage": "إلغاء هذه الزيارة سيؤدي إلى حذف اللقاءات المرتبطة بها", "causeOfDeath": "سبب الوفاة", - "causeOfDeath_title": "سبب الوفاة", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "تحقق من الفلاتر أعلاه", "close": "إغلاق", "confirm": "تأكيد", - "confirmDeceased": "تأكيد الوفاة", "confirmDeletingVisitTextWithStartAndEndDate": "Are you sure you want to delete {{visit}} which started {{visitStartDate}} and ended {{visitEndDate}}?", - "confirmMarkAsAlive": "هل أنت متأكد أنك تريد وضع علامة على المريض كأنه على قيد الحياة؟", "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": "الزيارة الحالية", "date": "التاريخ", "dateAndTime": "التاريخ والوقت", - "dateOfDeath": "تاريخ الوفاة", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "حذف", "deleteEncounter": "حذف اللقاء", "deleteEncounterConfirmationText": "هل أنت متأكد أنك تريد حذف هذا اللقاء؟ لا يمكن التراجع عن هذا الإجراء.", @@ -52,6 +52,7 @@ "endVisit": "إنهاء الزيارة", "endVisit_title": "إنهاء الزيارة", "endVisitExplainerMessage": "إنهاء هذه الزيارة يعني أنك لن تتمكن بعد الآن من إضافة لقاءات إليها. إذا كنت بحاجة إلى إضافة لقاء، يمكنك إنشاء زيارة جديدة لهذا المريض أو تعديل زيارة سابقة.", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "خطأ", "errorCancellingVisit": "Error cancelling active visit", "errorCopy": "عذرًا، حدثت مشكلة أثناء عرض هذه المعلومات. يمكنك محاولة إعادة تحميل هذه الصفحة، أو الاتصال بمسؤول الموقع واقتباس رمز الخطأ أعلاه.", @@ -59,6 +60,8 @@ "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", @@ -79,11 +82,11 @@ "loadMore": "Load more", "location": "الموقع", "male": "ذكر", - "markAlive": "وضع علامة على أنه على قيد الحياة", - "markAsAlive": "وضع علامة كأنه على قيد الحياة", - "markAsDeceased": "هل أنت متأكد أنك تريد وضع علامة على المريض كمتوف؟", - "markDeceased": "وضع علامة كمتوف", - "markingPatientDeceasedInfoText": "وضع علامة على المريض كمتوف سينهي أي زيارات نشطة لهذا المريض", + "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", "medications": "الأدوية", "medications__lower": "medications", "missingVisitType": "نوع الزيارة مفقود", @@ -99,6 +102,8 @@ "noDiagnosesFound": "لم يتم العثور على تشخيصات", "noEncountersFound": "لم يتم العثور على لقاءات", "noEncountersToDisplay": "لا يوجد لقاءات لعرضها", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "لم يتم العثور على ملاحظات", "notes": "ملاحظات", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "خطأ في الزيارات السابقة", "pastVisits": "الزيارات السابقة", "Patient Summary": "ملخص المريض", + "printIdentifierSticker": "Print identifier sticker", "program": "البرنامج", "provider": "مقدم الخدمة", "quantity": "الكمية", @@ -124,6 +130,8 @@ "refills": "إعادة التعبئة", "refreshToTryAgain": "يرجى التحديث للمحاولة مرة أخرى", "retrospectiveEntry": "إدخال رجعي", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "ابحث عن نوع الزيارة", "searchForCauseOfDeath": "ابحث عن سبب الوفاة", "searchThisList": "ابحث في هذه القائمة", @@ -132,11 +140,6 @@ "selectLocation": "اختر الموقع", "selectProgramType": "اختر نوع البرنامج", "selectVisitType": "يرجى اختيار نوع الزيارة", - "setAliveError": "خطأ في وضع علامة على المريض كحي", - "setAliveSuccessfully": "تم وضع علامة على المريض كحي بنجاح", - "setDeceased": "وضع علامة كمتوف", - "setDeceasedError": "خطأ في وضع علامة على المريض كمتوف", - "setDeceasedSuccessfully": "تم وضع علامة على المريض كمتوف بنجاح", "start": "بدء", "startAVisit": "بدء زيارة", "startDate": "تاريخ البدء", @@ -179,5 +182,6 @@ "visitType": "نوع الزيارة", "visitType_title": "نوع الزيارة", "visitTypeRequired": "نوع الزيارة مطلوب", + "warning": "Warning", "yes": "نعم" } diff --git a/packages/esm-patient-chart-app/translations/es.json b/packages/esm-patient-chart-app/translations/es.json index af721d29f..0f130c2b2 100644 --- a/packages/esm-patient-chart-app/translations/es.json +++ b/packages/esm-patient-chart-app/translations/es.json @@ -12,18 +12,18 @@ "cancelVisit": "Cancelar visita", "cancelVisitExplainerMessage": "Cancelar esta visita eliminará los encuentros asociados a ella", "causeOfDeath": "Causa de muerte", - "causeOfDeath_title": "Causa de Muerte", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "Comprobar los filtros anteriores", "close": "Cerrar", "confirm": "Confirmar", - "confirmDeceased": "Confirmar fallecido", "confirmDeletingVisitTextWithStartAndEndDate": "Are you sure you want to delete {{visit}} which started {{visitStartDate}} and ended {{visitEndDate}}?", - "confirmMarkAsAlive": "¿Estás seguro de que deseas marcar al paciente como vivo?", "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": "Visita actual", "date": "Fecha", "dateAndTime": "Fecha y hora", - "dateOfDeath": "Fecha de fallecimiento", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "Eliminar", "deleteEncounter": "Eliminar Encuentro", "deleteEncounterConfirmationText": "¿Estás seguro de que deseas eliminar este encuentro? Esta acción no se puede deshacer.", @@ -52,6 +52,7 @@ "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", "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.", @@ -59,6 +60,8 @@ "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", @@ -79,11 +82,11 @@ "loadMore": "Load more", "location": "Ubicación", "male": "Masculino", - "markAlive": "Marcar como Vivo", - "markAsAlive": "Marcar como Vivo", - "markAsDeceased": "¿Estás seguro de que deseas marcar al paciente como fallecido?", - "markDeceased": "Marcar como Fallecido", - "markingPatientDeceasedInfoText": "Marcar al paciente como fallecido finalizará cualquier visita activa para este paciente", + "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", "medications": "Medicamentos", "medications__lower": "medications", "missingVisitType": "Falta el tipo de visita", @@ -99,6 +102,8 @@ "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", "noObservationsFound": "No se encontraron observaciones", "notes": "Notas", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "Error de visita pasada", "pastVisits": "Visitas pasadas", "Patient Summary": "Resumen del Paciente", + "printIdentifierSticker": "Print identifier sticker", "program": "Programa", "provider": "Proveedor", "quantity": "Cantidad", @@ -124,6 +130,8 @@ "refills": "Recambios", "refreshToTryAgain": "Por favor, actualiza para intentarlo de nuevo", "retrospectiveEntry": "Entrada retrospectiva", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "Buscar un tipo de visita", "searchForCauseOfDeath": "Buscar una causa de muerte", "searchThisList": "Buscar en esta lista", @@ -132,11 +140,6 @@ "selectLocation": "Selecciona una ubicación", "selectProgramType": "Selecciona el tipo de programa", "selectVisitType": "Selecciona el tipo de visita", - "setAliveError": "Error al marcar al paciente como vivo", - "setAliveSuccessfully": "El paciente ha sido marcado como vivo con éxito", - "setDeceased": "Marcar como Fallecido", - "setDeceasedError": "Error al marcar al paciente como fallecido", - "setDeceasedSuccessfully": "El paciente ha sido marcado como fallecido con éxito", "start": "Iniciar", "startAVisit": "Iniciar una visita", "startDate": "Fecha de inicio", @@ -179,5 +182,6 @@ "visitType": "Tipo de visita", "visitType_title": "Tipo de Visita", "visitTypeRequired": "Se requiere un tipo de visita", + "warning": "Warning", "yes": "Sí" } diff --git a/packages/esm-patient-chart-app/translations/fr.json b/packages/esm-patient-chart-app/translations/fr.json index 5e30db37b..bb15b82e5 100644 --- a/packages/esm-patient-chart-app/translations/fr.json +++ b/packages/esm-patient-chart-app/translations/fr.json @@ -12,18 +12,18 @@ "cancelVisit": "Annuler la visite", "cancelVisitExplainerMessage": "L'annulation de cette visite supprimera les rencontres associées", "causeOfDeath": "Cause de décès", - "causeOfDeath_title": "Cause de décès", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "Vérifiez les filtres ci-dessus", "close": "Fermer", "confirm": "Confirmer", - "confirmDeceased": "Confirmer le décès", "confirmDeletingVisitTextWithStartAndEndDate": "Are you sure you want to delete {{visit}} which started {{visitStartDate}} and ended {{visitEndDate}}?", - "confirmMarkAsAlive": "Êtes-vous sûr de vouloir marquer le patient comme vivant?", "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": "Visite en cours", "date": "Date", "dateAndTime": "Date et heure", - "dateOfDeath": "Date de la mort", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "Supprimer", "deleteEncounter": "Supprimer la rencontre", "deleteEncounterConfirmationText": "Êtes-vous sûr de vouloir supprimer cette rencontre? Cette action ne peut pas être annulée.", @@ -52,6 +52,7 @@ "endVisit": "Clôturer la visite", "endVisit_title": "Clôturer la visite", "endVisitExplainerMessage": "Clôturer cette visite signifie que vous ne pourrez plus y ajouter de rencontres. Si vous devez ajouter une rencontre, vous pouvez créer une nouvelle visite pour ce patient ou modifier une visite passée.", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "Erreur", "errorCancellingVisit": "Erreur en annullant la visite active", "errorCopy": "Sorry, there was a problem displaying this information. You can try to reload this page, or contact the site administrator and quote the error code above.", @@ -59,6 +60,8 @@ "errorDeletingVisit": "Erreur en supprimant la visite", "errorDeletingVisitAttribute": "Could not delete {{attributeName}} attribute", "errorEndingVisit": "Erreur en clôturant la visite", + "errorMarkingPatientAlive": "Error marking patient alive", + "errorMarkingPatientDeceased": "Error marking patient deceased", "errorOccuredDeletingVisit": "Une erreur s'est produite lors de la suppression de la visite.", "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", "errorUpdatingVisitDetails": "Erreur lors de la mise à jour des détails de la visite", @@ -79,11 +82,11 @@ "loadMore": "Charger plus", "location": "Emplacement", "male": "Homme", - "markAlive": "Marquer vivant", - "markAsAlive": "Marquer comme vivant", - "markAsDeceased": "Êtes-vous sûr de vouloir marquer le patient comme décédé?", - "markDeceased": "Marquer décédé", - "markingPatientDeceasedInfoText": "Marquer le patient comme décédé mettra fin à toute visite active pour ce patient", + "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", "medications": "Médicaments", "medications__lower": "medications", "missingVisitType": "Il manque le type de visite", @@ -99,6 +102,8 @@ "noDiagnosesFound": "Aucun diagnostic trouvé", "noEncountersFound": "Aucune rencontre trouvée", "noEncountersToDisplay": "Aucune rencontre à afficher", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "Aucune observation trouvée", "notes": "Notes", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "Erreur de visite passée", "pastVisits": "Visites passées", "Patient Summary": "Patient Summary", + "printIdentifierSticker": "Print identifier sticker", "program": "Programme", "provider": "Fournisseur", "quantity": "Quantité", @@ -124,6 +130,8 @@ "refills": "Recharges", "refreshToTryAgain": "Please refresh to try again", "retrospectiveEntry": "Retrospective Entry", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "Chercher un type de visite", "searchForCauseOfDeath": "Chercher une cause de décès", "searchThisList": "Chercher dans cette liste", @@ -132,11 +140,6 @@ "selectLocation": "Sélectionnez un lieu", "selectProgramType": "Sélectionnez un type de programme", "selectVisitType": "Veuillez sélectionner un type de visite", - "setAliveError": "Erreur en marquant le patient comme vivant", - "setAliveSuccessfully": "Le patient a été marqué comme vivant avec succès", - "setDeceased": "Marqué comme décédé", - "setDeceasedError": "Erreur en marquant le patient comme décédé", - "setDeceasedSuccessfully": "Le patient a été marqué comme décédé avec succès", "start": "Début", "startAVisit": "Start a visit", "startDate": "Date de début", @@ -179,5 +182,6 @@ "visitType": "Type de visite", "visitType_title": "Visit Type", "visitTypeRequired": "Visit type is required", + "warning": "Warning", "yes": "Oui" } diff --git a/packages/esm-patient-chart-app/translations/he.json b/packages/esm-patient-chart-app/translations/he.json index 1028eb568..ee51fc769 100644 --- a/packages/esm-patient-chart-app/translations/he.json +++ b/packages/esm-patient-chart-app/translations/he.json @@ -12,18 +12,18 @@ "cancelVisit": "ביטול ביקור", "cancelVisitExplainerMessage": "ביטול הביקור הזה ימחק את המפגשים המשויכים אליו", "causeOfDeath": "סיבת המוות", - "causeOfDeath_title": "סיבת המוות", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "נא לבדוק את המסננים למעלה", "close": "סגור", "confirm": "אישור", - "confirmDeceased": "אישור מצב פטירה", "confirmDeletingVisitTextWithStartAndEndDate": "אתה בטוח שברצונך למחוק את {{visit}} שהתחיל ב-{{visitStartDate}} והסתיים ב-{{visitEndDate}}?", - "confirmMarkAsAlive": "האם אתה בטוח שברצונך לסמן את המטופל כחי?", "confirmModifyingVisitDateToAccomodateEncounter": "תאריך הפגישה נמצא מחוץ לטווח תאריכי הביקור המיועד. האם ברצונך לשנות את תאריך הביקור כדי להתאים לתאריך הפגישה החדש?", "currentVisit": "ביקור הנוכחי", "date": "תאריך", "dateAndTime": "תאריך ושעה", - "dateOfDeath": "תאריך המוות", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "מחק", "deleteEncounter": "מחק ביקור", "deleteEncounterConfirmationText": "האם אתה בטוח שברצונך למחוק את הביקור הזה? לא ניתן לבטל פעולה זו.", @@ -52,6 +52,7 @@ "endVisit": "סיום ביקור", "endVisit_title": "סיום ביקור", "endVisitExplainerMessage": "סיום הביקור הזה אומר שלא תוכל יותר להוסיף מפגשים אליו. אם אתה צריך להוסיף מפגש, אתה יכול ליצור ביקור חדש למטופל זה או לערוך ביקור קודם.", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "שגיאה", "errorCancellingVisit": "שגיאה בביטול הביקור הפעיל", "errorCopy": "סליחה, הייתה בעיה בהצגת המידע הזה. ניתן לנסות לרענן את הדף או ליצור קשר עם מנהל האתר ולציין את קוד השגיאה למעלה", @@ -59,6 +60,8 @@ "errorDeletingVisit": "שגיאה במחיקת הביקור", "errorDeletingVisitAttribute": "Could not delete {{attributeName}} attribute", "errorEndingVisit": "שגיאה בסיום הביקור", + "errorMarkingPatientAlive": "Error marking patient alive", + "errorMarkingPatientDeceased": "Error marking patient deceased", "errorOccuredDeletingVisit": "אירעה שגיאה בעת מחיקת הביקור", "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", "errorUpdatingVisitDetails": "שגיאה בעדכון פרטי הביקור", @@ -79,11 +82,11 @@ "loadMore": "Load more", "location": "מיקום", "male": "זכר", - "markAlive": "סמן כחי", - "markAsAlive": "סמן כחי", - "markAsDeceased": "האם אתה בטוח שברצונך לסמן את המטופל כנפטר?", - "markDeceased": "סמן נפטר", - "markingPatientDeceasedInfoText": "סימון המטופל כנפטר יסיים את כל הביקורים הפעילים של המטופל הזה", + "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", "medications": "תרופות", "medications__lower": "medications", "missingVisitType": "חסר סוג ביקור", @@ -99,6 +102,8 @@ "noDiagnosesFound": "לא נמצאו אבחנות", "noEncountersFound": "לא נמצאו ביקורים", "noEncountersToDisplay": "אין ביקורים להצגה", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "לא נמצאו תצפיות", "notes": "הערות", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "שגיאה בביקור עבר", "pastVisits": "ביקורים עבריים", "Patient Summary": "סיכום המטופל", + "printIdentifierSticker": "Print identifier sticker", "program": "תוכנית", "provider": "ספק", "quantity": "כמות", @@ -124,6 +130,8 @@ "refills": "מחזורים", "refreshToTryAgain": "נא רענן ונסה שנית", "retrospectiveEntry": "רשומה רטרוספקטיבית", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "חיפוש סוג ביקור", "searchForCauseOfDeath": "חיפוש סיבת מוות", "searchThisList": "חיפוש ברשימה זו", @@ -132,11 +140,6 @@ "selectLocation": "בחר מיקום", "selectProgramType": "בחר סוג תוכנית", "selectVisitType": "יש לבחור סוג ביקור", - "setAliveError": "שגיאה בסימון המטופל כחי", - "setAliveSuccessfully": "המטופל סומן כחי בהצלחה", - "setDeceased": "סמן נפטר", - "setDeceasedError": "שגיאה בסימון המטופל כנפטר", - "setDeceasedSuccessfully": "המטופל סומן כנפטר בהצלחה", "start": "התחל", "startAVisit": "התחל ביקור", "startDate": "תאריך התחלה", @@ -179,5 +182,6 @@ "visitType": "סוג הביקור", "visitType_title": "סוג הביקור", "visitTypeRequired": "נדרש סוג ביקור", + "warning": "Warning", "yes": "כן" } diff --git a/packages/esm-patient-chart-app/translations/km.json b/packages/esm-patient-chart-app/translations/km.json index 7fa1046f6..0b926cfef 100644 --- a/packages/esm-patient-chart-app/translations/km.json +++ b/packages/esm-patient-chart-app/translations/km.json @@ -12,18 +12,18 @@ "cancelVisit": "បោះបង់ការជួបពិនិត្យជំងឺ", "cancelVisitExplainerMessage": "បោះបង់ការពិនិត្យជំងឺនេះនឹងលុបការមកពិនិត្យជំងឺដែលពាក់ព័ន្ធ។", "causeOfDeath": "មូលហេតុនៃការស្លាប់", - "causeOfDeath_title": "មូលហេតុនៃការស្លាប់", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "ពិនិត្យតម្រងខាងលើ", "close": "បិទ", "confirm": "បញ្ជាក់", - "confirmDeceased": "បញ្ជាក់ថាបានស្លាប់", "confirmDeletingVisitTextWithStartAndEndDate": "តើអ្នកពិតជាចង់លុប {{visit}} ដែលបានចាប់ផ្តើមពិនិត្យនៅថ្ងៃទី {{visitStartDate}} និងបញ្ចប់ការពិនិត្យនៅថ្ងៃទី {{visitEndDate}}មែនទេ?", - "confirmMarkAsAlive": "តើអ្នកប្រាកដទេថា អ្នកចង់ដាក់ថាអ្នកជំងឺថានៅរស់វិញ?", "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": "ដំណើរទស្សនកិច្ចបច្ចុប្បន្ន", "date": "កាលបរិច្ឆេទ", "dateAndTime": "ថ្ងៃ និង ពេលវេលា", - "dateOfDeath": "កាលបរិច្ឆេទនៃការស្លាប់", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "លុប", "deleteEncounter": "លុបចោលការពិនិត្យ", "deleteEncounterConfirmationText": "តើអ្នកប្រាកដថាចង់លុបការពិនិត្យនេះទេ? ពេលលុបហើយ មិនអាចយកទិន្នន័យត្រឡប់មកវិញបានទេ", @@ -52,6 +52,7 @@ "endVisit": "បញ្ចប់ការមកពិនិត្យជំងឺ", "endVisit_title": "បញ្ចប់ការមកពីនិត្យ", "endVisitExplainerMessage": "ការបញ្ចប់ការពិនិត្យជំងឺនេះមានន័យថា អ្នកនឹងមិនអាចបន្ថែមការមកពិនិត្យជំងឺទៀតទេ។ ប្រសិនបើអ្នកត្រូវការបន្ថែមការមកពិនិត្យជំងឺ អ្នកអាចបង្កើតការមកពិនិត្យជំងឺថ្មីសម្រាប់អ្នកជំងឺនេះ ឬកែសម្រួលលើការពិនិត្យជំងឺចាស់។", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "មានកំហុស", "errorCancellingVisit": "មានបញ្ហាបច្ចេកទេសបោះបង់ការពិនិត្យជំងឺសកម្ម", "errorCopy": "សូមអធ្យាស្រ័យ មានបញ្ហាក្នុងការបង្ហាញព័ត៌មាននេះ។ អ្នកអាចព្យាយាមទាញទំព័រនេះម្តងទៀត ឬទាក់ទងអ្នកគ្រប់គ្រងប្រព័ន្ធទិន្នន័យ ហើយស្រង់លេខកូដដែលមិនដំណើរការមុខងារខាងលើ។", @@ -59,6 +60,8 @@ "errorDeletingVisit": "មានបញ្ហាបច្ចេកទេសក្នុងការលុបការពិនិត្យជំងឺ", "errorDeletingVisitAttribute": "Could not delete {{attributeName}} attribute", "errorEndingVisit": "មានបញ្ហាបច្ចេកទេសបញ្ចប់ការពិនិត្យជំងឺ", + "errorMarkingPatientAlive": "Error marking patient alive", + "errorMarkingPatientDeceased": "Error marking patient deceased", "errorOccuredDeletingVisit": "មានបញ្ហាបច្ចេកទេសនៅពេលលុបការពិនិត្យជំងឺ", "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", "errorUpdatingVisitDetails": "មានបញ្ហាបច្ចេកទេសក្នុងការធ្វើបច្ចុប្បន្នភាពព័ត៌មានលម្អិតនៃការពិនិត្យជំងឺ", @@ -79,11 +82,11 @@ "loadMore": "Load more", "location": "ទីតាំង", "male": "ប្រុស", - "markAlive": "សម្គាល់ថានៅរស់", - "markAsAlive": "សម្គាល់ថានៅរស់", - "markAsDeceased": "តើអ្នកប្រាកដថាចង់សម្គាល់ថាអ្នកជំងឺបានស្លាប់ហើយ?", - "markDeceased": "កំណត់ត្រាមរណភាព", - "markingPatientDeceasedInfoText": "ការសម្គាល់អ្នកជំងឺថាបានស្លាប់ រួចបញ្ចប់ការពិនិត្យអ្នកជំងឺនេះ", + "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", "medications": "ឱសថ", "medications__lower": "medications", "missingVisitType": "បាត់ប្រភេទនៃការមកពិនិត្យជំងឺ", @@ -99,6 +102,8 @@ "noDiagnosesFound": "រកមិនឃើញរោគវិនិច្ឆ័យទេ", "noEncountersFound": "រកមិនឃើញការជួបគ្នាទេ", "noEncountersToDisplay": "ពុំមានព័ត៌មានការពិនិត្យបង្ហាញទេ", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "រកមិនឃើញការសង្កេតទេ", "notes": "រកមិនឃើញការកត់ចំណាំទេ", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "កំហុសក្នុងការមកពិនិត្យជំងឺកន្លងមក", "pastVisits": "ការមកពិនិត្យជំងឺកន្លងមក", "Patient Summary": "សង្ខេបអ្នកជំងឺ", + "printIdentifierSticker": "Print identifier sticker", "program": "កម្មវិធី", "provider": "អ្នកផ្តល់សេវា", "quantity": "បរិមាណ", @@ -124,6 +130,8 @@ "refills": "ការបំពេញបន្ថែម", "refreshToTryAgain": "សូមRefreshឡើងវិញ ដើម្បីព្យាយាមម្តងទៀត", "retrospectiveEntry": "ការបញ្ចូលទិន្នន័យកាលបរិច្ឆេទចាស់", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "ស្វែងរកប្រភេទជំងឺមកពិនិត្យ", "searchForCauseOfDeath": "ស្វែងរកមូលហេតុនៃការស្លាប់", "searchThisList": "ស្វែងរកបញ្ជីនេះ", @@ -132,11 +140,6 @@ "selectLocation": "ជ្រើសរើសទីតាំង", "selectProgramType": "ជ្រើសរើសប្រភេទកម្មវិធី", "selectVisitType": "សូមជ្រើសរើសប្រភេទជំងឺមកពិនិត្យ", - "setAliveError": "មានកំហុសក្នុងការសម្គាល់ថាអ្នកជំងឺនៅរស់", - "setAliveSuccessfully": "ការសម្គាល់បានជោគជ័យថាអ្នកជំងឺនៅមានជីវិត", - "setDeceased": "កំណត់មរណភាព", - "setDeceasedError": "មានកំហុសក្នុងការសម្គាល់ថាអ្នកជំងឺបានស្លាប់", - "setDeceasedSuccessfully": "ការសម្គាល់ដោយជោគជ័យថាអ្នកជំងឺបានស្លាប់", "start": "ចាប់ផ្តើម", "startAVisit": "ចាប់ផ្តើមការពិនិត្", "startDate": "ថ្ងៃចាប់ផ្តើម", @@ -179,5 +182,6 @@ "visitType": "ប្រភេទជំងឺមកពិនិត្យ", "visitType_title": "ប្រភេទនៃការពិនិត្យ", "visitTypeRequired": "តម្រូវឱ្យមានប្រភេទពិនិត្យជំងឺ", + "warning": "Warning", "yes": "បាទ/ចាស" } diff --git a/packages/esm-patient-chart-app/translations/zh.json b/packages/esm-patient-chart-app/translations/zh.json index 31b331821..5d2d1dfe1 100644 --- a/packages/esm-patient-chart-app/translations/zh.json +++ b/packages/esm-patient-chart-app/translations/zh.json @@ -12,18 +12,18 @@ "cancelVisit": "取消就诊", "cancelVisitExplainerMessage": "取消此次就诊将删除其关联的问诊记录", "causeOfDeath": "死亡原因", - "causeOfDeath_title": "死亡原因", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "检查上方的筛选条件", "close": "关闭", "confirm": "确认", - "confirmDeceased": "确认已故", "confirmDeletingVisitTextWithStartAndEndDate": "你确定要删除开始于{{visitStartDate}},结束于{{visitEndDate}}的{{visit}}吗?", - "confirmMarkAsAlive": "您确定要将患者标记为存活吗?", "confirmModifyingVisitDateToAccomodateEncounter": "问诊日期不在指定的就诊日期范围内。您是否希望修改就诊日期以适应新的问诊日期?", "currentVisit": "当前就诊", "date": "日期", "dateAndTime": "日期&时间", - "dateOfDeath": "死亡日期", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "删除", "deleteEncounter": "删除问诊", "deleteEncounterConfirmationText": "您确定要删除这条问诊记录吗?此操作无法撤销。", @@ -52,6 +52,7 @@ "endVisit": "结束就诊", "endVisit_title": "结束就诊", "endVisitExplainerMessage": "结束此次就诊意味着您将无法再添加与之相关的问诊记录。如果您需要添加问诊记录,可以为该患者创建一个新的就诊或编辑过去的就诊。", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "错误", "errorCancellingVisit": "取消活动就诊时出现错误", "errorCopy": "抱歉,显示此信息时出现问题。您可以尝试重新加载此页面,或联系网站管理员并引用上面的错误代码。", @@ -59,6 +60,8 @@ "errorDeletingVisit": "删除就诊时出现错误", "errorDeletingVisitAttribute": "Could not delete {{attributeName}} attribute", "errorEndingVisit": "编辑就诊时出现错误", + "errorMarkingPatientAlive": "Error marking patient alive", + "errorMarkingPatientDeceased": "Error marking patient deceased", "errorOccuredDeletingVisit": "删除就诊时发生错误", "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", "errorUpdatingVisitDetails": "更新就诊详情时出现错误", @@ -79,11 +82,11 @@ "loadMore": "加载更多", "location": "地点", "male": "男性", - "markAlive": "标记存活", - "markAsAlive": "标记为存活", - "markAsDeceased": "您确定要将患者标记为已故吗?", - "markDeceased": "标记已故", - "markingPatientDeceasedInfoText": "标记患者为已故将结束该患者的所有活动就诊", + "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", "medications": "用药", "medications__lower": "medications", "missingVisitType": "就诊类型缺失", @@ -99,6 +102,8 @@ "noDiagnosesFound": "未找到诊断", "noEncountersFound": "未找到问诊记录", "noEncountersToDisplay": "没有可显示的问诊记录", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "未找到观察记录", "notes": "记录", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "历史就诊错误", "pastVisits": "历史就诊", "Patient Summary": "患者摘要", + "printIdentifierSticker": "Print identifier sticker", "program": "项目", "provider": "提供者", "quantity": "数量", @@ -124,6 +130,8 @@ "refills": "补充处方", "refreshToTryAgain": "请刷新以重试", "retrospectiveEntry": "回顾性条目", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "搜索就诊类型", "searchForCauseOfDeath": "搜索死亡原因", "searchThisList": "搜索此列表", @@ -132,11 +140,6 @@ "selectLocation": "选择地点", "selectProgramType": "选择项目类型", "selectVisitType": "请选择就诊类型", - "setAliveError": "标记患者为存活时出现错误", - "setAliveSuccessfully": "患者已成功标记为存活", - "setDeceased": "设置为已故", - "setDeceasedError": "标记患者为已故时出现错误", - "setDeceasedSuccessfully": "患者已成功标记为已故", "start": "开始", "startAVisit": "开始一次就诊", "startDate": "开始日期", @@ -179,5 +182,6 @@ "visitType": "就诊类型", "visitType_title": "就诊类型", "visitTypeRequired": "就诊类型是必填项", + "warning": "Warning", "yes": "是" } diff --git a/packages/esm-patient-chart-app/translations/zh_CN.json b/packages/esm-patient-chart-app/translations/zh_CN.json index 31b331821..5d2d1dfe1 100644 --- a/packages/esm-patient-chart-app/translations/zh_CN.json +++ b/packages/esm-patient-chart-app/translations/zh_CN.json @@ -12,18 +12,18 @@ "cancelVisit": "取消就诊", "cancelVisitExplainerMessage": "取消此次就诊将删除其关联的问诊记录", "causeOfDeath": "死亡原因", - "causeOfDeath_title": "死亡原因", + "causeOfDeath_lower": "cause of death concepts configured in the system", + "causeOfDeathIsRequired": "Please select the cause of death", "checkFilters": "检查上方的筛选条件", "close": "关闭", "confirm": "确认", - "confirmDeceased": "确认已故", "confirmDeletingVisitTextWithStartAndEndDate": "你确定要删除开始于{{visitStartDate}},结束于{{visitEndDate}}的{{visit}}吗?", - "confirmMarkAsAlive": "您确定要将患者标记为存活吗?", "confirmModifyingVisitDateToAccomodateEncounter": "问诊日期不在指定的就诊日期范围内。您是否希望修改就诊日期以适应新的问诊日期?", "currentVisit": "当前就诊", "date": "日期", "dateAndTime": "日期&时间", - "dateOfDeath": "死亡日期", + "dateOfDeath": "Date of death", + "deathDateRequired": "Please select the date of death", "delete": "删除", "deleteEncounter": "删除问诊", "deleteEncounterConfirmationText": "您确定要删除这条问诊记录吗?此操作无法撤销。", @@ -52,6 +52,7 @@ "endVisit": "结束就诊", "endVisit_title": "结束就诊", "endVisitExplainerMessage": "结束此次就诊意味着您将无法再添加与之相关的问诊记录。如果您需要添加问诊记录,可以为该患者创建一个新的就诊或编辑过去的就诊。", + "enterNonCodedCauseOfDeath": "Enter non-coded cause of death", "error": "错误", "errorCancellingVisit": "取消活动就诊时出现错误", "errorCopy": "抱歉,显示此信息时出现问题。您可以尝试重新加载此页面,或联系网站管理员并引用上面的错误代码。", @@ -59,6 +60,8 @@ "errorDeletingVisit": "删除就诊时出现错误", "errorDeletingVisitAttribute": "Could not delete {{attributeName}} attribute", "errorEndingVisit": "编辑就诊时出现错误", + "errorMarkingPatientAlive": "Error marking patient alive", + "errorMarkingPatientDeceased": "Error marking patient deceased", "errorOccuredDeletingVisit": "删除就诊时发生错误", "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", "errorUpdatingVisitDetails": "更新就诊详情时出现错误", @@ -79,11 +82,11 @@ "loadMore": "加载更多", "location": "地点", "male": "男性", - "markAlive": "标记存活", - "markAsAlive": "标记为存活", - "markAsDeceased": "您确定要将患者标记为已故吗?", - "markDeceased": "标记已故", - "markingPatientDeceasedInfoText": "标记患者为已故将结束该患者的所有活动就诊", + "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", "medications": "用药", "medications__lower": "medications", "missingVisitType": "就诊类型缺失", @@ -99,6 +102,8 @@ "noDiagnosesFound": "未找到诊断", "noEncountersFound": "未找到问诊记录", "noEncountersToDisplay": "没有可显示的问诊记录", + "nonCodedCauseOfDeath": "Non-coded cause of death", + "nonCodedCauseOfDeathRequired": "Please enter the non-coded cause of death", "noObservationsFound": "未找到观察记录", "notes": "记录", "notes__lower": "notes", @@ -114,6 +119,7 @@ "pastVisitErrorText": "历史就诊错误", "pastVisits": "历史就诊", "Patient Summary": "患者摘要", + "printIdentifierSticker": "Print identifier sticker", "program": "项目", "provider": "提供者", "quantity": "数量", @@ -124,6 +130,8 @@ "refills": "补充处方", "refreshToTryAgain": "请刷新以重试", "retrospectiveEntry": "回顾性条目", + "saveAndClose": "Save and close", + "saving": "Saving", "searchForAVisitType": "搜索就诊类型", "searchForCauseOfDeath": "搜索死亡原因", "searchThisList": "搜索此列表", @@ -132,11 +140,6 @@ "selectLocation": "选择地点", "selectProgramType": "选择项目类型", "selectVisitType": "请选择就诊类型", - "setAliveError": "标记患者为存活时出现错误", - "setAliveSuccessfully": "患者已成功标记为存活", - "setDeceased": "设置为已故", - "setDeceasedError": "标记患者为已故时出现错误", - "setDeceasedSuccessfully": "患者已成功标记为已故", "start": "开始", "startAVisit": "开始一次就诊", "startDate": "开始日期", @@ -179,5 +182,6 @@ "visitType": "就诊类型", "visitType_title": "就诊类型", "visitTypeRequired": "就诊类型是必填项", + "warning": "Warning", "yes": "是" } diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-form.test.tsx b/packages/esm-patient-conditions-app/src/conditions/conditions-form.test.tsx index 11744e982..98562d2d6 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-form.test.tsx +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-form.test.tsx @@ -2,8 +2,8 @@ import React from 'react'; import dayjs from 'dayjs'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { showSnackbar } from '@openmrs/esm-framework'; -import { searchedCondition } from '__mocks__'; +import { type FetchResponse, openmrsFetch, showSnackbar } from '@openmrs/esm-framework'; +import { mockFhirConditionsResponse, searchedCondition } from '__mocks__'; import { getByTextWithMarkup, mockPatient } from 'tools'; import { createCondition, useConditionsSearch } from './conditions.resource'; import ConditionsForm from './conditions-form.workspace'; @@ -29,15 +29,18 @@ const utc = require('dayjs/plugin/utc'); dayjs.extend(utc); const testProps = { + condition: null, closeWorkspace: jest.fn(), closeWorkspaceWithSavedChanges: jest.fn(), patientUuid: mockPatient.id, - formContext: 'creating' as const, + promptBeforeClosing: jest.fn(), + formContext: 'creating' as 'creating' | 'editing', }; const mockCreateCondition = createCondition as jest.Mock; const mockUseConditionsSearch = useConditionsSearch as jest.Mock; -const mockshowSnackbar = showSnackbar as jest.Mock; +const mockShowSnackbar = showSnackbar as jest.Mock; +const mockOpenmrsFetch = jest.mocked(openmrsFetch); jest.mock('lodash-es/debounce', () => jest.fn((fn) => fn)); @@ -50,20 +53,26 @@ jest.mock('@openmrs/esm-framework', () => { }; }); -jest.mock('./conditions.resource', () => ({ - createCondition: jest.fn(), - editCondition: jest.fn(), - useConditions: jest.fn().mockImplementation(() => ({ - mutate: jest.fn(), - })), - useConditionsSearch: jest.fn().mockImplementation(() => ({ - conditions: [], - error: null, - isSearching: false, - })), -})); - -describe('Conditions Form', () => { +jest.mock('./conditions.resource', () => { + const originalModule = jest.requireActual('./conditions.resource'); + + return { + ...originalModule, + createCondition: jest.fn(), + editCondition: jest.fn(), + useConditionsSearch: jest.fn().mockImplementation(() => ({ + conditions: [], + error: null, + isSearching: false, + })), + }; +}); + +describe('Conditions form', () => { + beforeEach(() => { + mockShowSnackbar.mockClear(); + }); + it('renders the conditions form with all the relevant fields and values', () => { renderConditionsForm(); @@ -127,7 +136,8 @@ describe('Conditions Form', () => { it('renders a success toast notification upon successfully recording a condition', async () => { const user = userEvent.setup(); - mockCreateCondition.mockReturnValue(Promise.resolve({ status: 201, body: 'Condition created' })); + mockOpenmrsFetch.mockResolvedValue({ data: [] } as FetchResponse); + mockCreateCondition.mockResolvedValue({ status: 201, body: 'Condition created' }); mockUseConditionsSearch.mockReturnValue({ searchResults: searchedCondition, error: null, @@ -142,11 +152,20 @@ describe('Conditions Form', () => { const conditionSearchInput = screen.getByRole('searchbox', { name: /enter condition/i }); const onsetDateInput = screen.getByRole('textbox', { name: /onset date/i }); expect(cancelButton).not.toBeDisabled(); + await user.type(conditionSearchInput, 'Headache'); await user.click(screen.getByRole('menuitem', { name: /headache/i })); await user.click(activeStatusInput); await user.type(onsetDateInput, '2020-05-05'); await user.click(submitButton); + + // TODO: Figure out why this isn't working + // expect(mockShowSnackbar).toHaveBeenCalled(); + // expect(mockShowSnackbar).toHaveBeenCalledWith({ + // kind: 'success', + // subtitle: 'It is now visible on the Conditions page', + // title: 'Condition saved', + // }); }); it('renders an error notification if there was a problem recording a condition', async () => { @@ -175,8 +194,77 @@ describe('Conditions Form', () => { expect(submitButton).not.toBeDisabled(); await user.click(submitButton); }); + + it('validates the form against the provided zod schema before submitting it', async () => { + const user = userEvent.setup(); + + mockOpenmrsFetch.mockResolvedValue({ data: [] } as FetchResponse); + mockCreateCondition.mockResolvedValue({ status: 201, body: 'Condition created' }); + mockUseConditionsSearch.mockReturnValue({ + searchResults: searchedCondition, + error: null, + isSearching: false, + }); + + renderConditionsForm(); + + const conditionSearchInput = screen.getByRole('searchbox', { name: /enter condition/i }); + const submitButton = screen.getByRole('button', { name: /save & close/i }); + + await user.click(submitButton); + + expect(screen.getByText(/a condition is required/i)).toBeInTheDocument(); + expect(screen.getByText(/a clinical status is required/i)).toBeInTheDocument(); + + await user.type(conditionSearchInput, 'Headache'); + await user.click(screen.getByRole('menuitem', { name: /headache/i })); + await user.click(submitButton); + + expect(screen.getByText(/a clinical status is required/i)).toBeInTheDocument(); + + await user.click(screen.getByRole('radio', { name: 'Active' })); + await user.click(submitButton); + + expect(screen.queryByText(/a condition is required/i)).not.toBeInTheDocument(); + expect(screen.queryByText(/a clinical status is required/i)).not.toBeInTheDocument(); + + expect(mockShowSnackbar).toHaveBeenCalled(); + expect(mockShowSnackbar).toHaveBeenCalledWith({ + kind: 'success', + subtitle: 'It is now visible on the Conditions page', + title: 'Condition saved', + }); + }); + + it('launching the form with an existing condition prepopulates the form with the condition details', async () => { + const user = userEvent.setup(); + + const conditionToEdit = { + clinicalStatus: 'Active', + conceptId: '117399AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', + display: 'Hypertension', + abatementDateTime: undefined, + onsetDateTime: '2020-08-19T00:00:00+00:00', + recordedDate: '2020-08-19T18:34:48+00:00', + id: 'f4ee2cfe-3880-4ea2-a5a6-82aa8a0f6389', + }; + + testProps.condition = conditionToEdit; + testProps.formContext = 'editing' as 'creating' | 'editing'; + + mockOpenmrsFetch.mockResolvedValue({ data: mockFhirConditionsResponse } as FetchResponse); + renderConditionsForm(); + + expect(screen.queryByRole('searchbox', { name: /Enter condition/i })).not.toBeInTheDocument(); + + const inactiveStatusInput = screen.getByRole('radio', { name: 'Inactive' }); + const submitButton = screen.getByRole('button', { name: /save & close/i }); + + await user.click(inactiveStatusInput); + await user.click(submitButton); + }); }); function renderConditionsForm() { - render( {}} {...testProps} />); + render(); } diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-form.workspace.tsx b/packages/esm-patient-conditions-app/src/conditions/conditions-form.workspace.tsx index 9c6435ede..bbfd9bd04 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-form.workspace.tsx +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-form.workspace.tsx @@ -1,5 +1,6 @@ import React, { useEffect, useState } from 'react'; -import { useTranslation } from 'react-i18next'; +import classNames from 'classnames'; +import { type TFunction, useTranslation } from 'react-i18next'; import { useForm, FormProvider, type SubmitHandler } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; @@ -15,14 +16,26 @@ interface ConditionFormProps extends DefaultPatientWorkspaceProps { formContext: 'creating' | 'editing'; } -const schema = z.object({ - abatementDateTime: z.date().optional().nullable(), - clinicalStatus: z.string(), - conditionName: z.string({ required_error: 'A condition is required' }), - onsetDateTime: z.date().nullable(), -}); +const createSchema = (formContext: 'creating' | 'editing', t: TFunction) => { + const isCreating = formContext === 'creating'; -export type ConditionSchema = z.infer; + const clinicalStatusValidation = z.string().refine((clinicalStatus) => !isCreating || !!clinicalStatus, { + message: t('clinicalStatusRequired', 'A clinical status is required'), + }); + + const conditionNameValidation = z.string().refine((conditionName) => !isCreating || !!conditionName, { + message: t('conditionRequired', 'A condition is required'), + }); + + return z.object({ + abatementDateTime: z.date().optional().nullable(), + clinicalStatus: clinicalStatusValidation, + conditionName: conditionNameValidation, + onsetDateTime: z.date().nullable(), + }); +}; + +export type ConditionsFormSchema = z.infer>; const ConditionsForm: React.FC = ({ closeWorkspace, @@ -33,37 +46,32 @@ const ConditionsForm: React.FC = ({ promptBeforeClosing, }) => { const { t } = useTranslation(); - const isTablet = useLayoutType() === 'tablet'; const { conditions } = useConditions(patientUuid); const [isSubmittingForm, setIsSubmittingForm] = useState(false); const [errorCreating, setErrorCreating] = useState(null); const [errorUpdating, setErrorUpdating] = useState(null); + const isEditing = formContext === 'editing'; + const matchingCondition = conditions?.find((c) => c?.id === condition?.id); - const methods = useForm({ + const schema = createSchema(formContext, t); + + const defaultValues = { + abatementDateTime: + isEditing && matchingCondition?.abatementDateTime ? new Date(matchingCondition?.abatementDateTime) : null, + conditionName: '', + clinicalStatus: isEditing ? matchingCondition?.clinicalStatus?.toLowerCase() ?? '' : '', + onsetDateTime: isEditing && matchingCondition?.onsetDateTime ? new Date(matchingCondition?.onsetDateTime) : null, + }; + + const methods = useForm({ mode: 'all', resolver: zodResolver(schema), - defaultValues: { - abatementDateTime: - formContext == 'editing' - ? matchingCondition?.abatementDateTime - ? new Date(matchingCondition?.abatementDateTime) - : null - : null, - conditionName: '', - clinicalStatus: condition?.cells?.find((cell) => cell?.info?.header === 'clinicalStatus')?.value ?? '', - onsetDateTime: - formContext == 'editing' - ? matchingCondition?.onsetDateTime - ? new Date(matchingCondition?.onsetDateTime) - : null - : null, - }, + defaultValues, }); const { - setError, formState: { isDirty }, } = methods; @@ -71,32 +79,11 @@ const ConditionsForm: React.FC = ({ promptBeforeClosing(() => isDirty); }, [isDirty, promptBeforeClosing]); - const onSubmit: SubmitHandler = (payload) => { - setIsSubmittingForm(true); - - if (formContext === 'creating') { - if (!payload.conditionName.trim()) { - setError('conditionName', { - type: 'manual', - message: t('conditionRequired', 'A condition is required'), - }); - } - if (!payload.clinicalStatus) { - setError('clinicalStatus', { - type: 'manual', - message: t('clinicalStatusRequired', 'A clinical status is required'), - }); - } - setIsSubmittingForm(false); - } - + const onSubmit: SubmitHandler = () => { setIsSubmittingForm(true); }; - const onError = (e) => { - console.error('Error submitting condition: ', e); - setIsSubmittingForm(false); - }; + const onError = () => setIsSubmittingForm(false); return ( @@ -104,7 +91,7 @@ const ConditionsForm: React.FC = ({ = ({ /> ) : null} - + diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-overview.test.tsx b/packages/esm-patient-conditions-app/src/conditions/conditions-overview.test.tsx index 582c7bdcf..5319061da 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-overview.test.tsx +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-overview.test.tsx @@ -1,9 +1,8 @@ import React from 'react'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { openmrsFetch, useConfig } from '@openmrs/esm-framework'; +import { type FetchResponse, openmrsFetch, useConfig } from '@openmrs/esm-framework'; import { launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; - import { mockFhirConditionsResponse } from '__mocks__'; import { mockPatient, renderWithSwr, waitForLoadingToFinish } from 'tools'; import ConditionsOverview from './conditions-overview.component'; @@ -12,8 +11,8 @@ const testProps = { patientUuid: mockPatient.id, }; -const mockedUseConfig = useConfig as jest.Mock; -const mockedOpenmrsFetch = openmrsFetch as jest.Mock; +const mockUseConfig = jest.mocked(useConfig); +const mockOpenmrsFetch = jest.mocked(openmrsFetch); jest.mock('@openmrs/esm-patient-common-lib', () => { const originalModule = jest.requireActual('@openmrs/esm-patient-common-lib'); @@ -24,14 +23,14 @@ jest.mock('@openmrs/esm-patient-common-lib', () => { }; }); -describe('ConditionsOverview: ', () => { +describe('ConditionsOverview', () => { beforeEach(() => { - mockedOpenmrsFetch.mockClear(); - mockedUseConfig.mockReturnValue({ conditionPageSize: 5 }); + mockOpenmrsFetch.mockClear(); + mockUseConfig.mockReturnValue({ conditionPageSize: 5 }); }); it('renders an empty state view if conditions data is unavailable', async () => { - mockedOpenmrsFetch.mockReturnValueOnce({ data: [] }); + mockOpenmrsFetch.mockResolvedValueOnce({ data: [] } as FetchResponse); renderConditionsOverview(); @@ -53,7 +52,7 @@ describe('ConditionsOverview: ', () => { }, }; - mockedOpenmrsFetch.mockRejectedValueOnce(error); + mockOpenmrsFetch.mockRejectedValueOnce(error); renderConditionsOverview(); @@ -68,7 +67,7 @@ describe('ConditionsOverview: ', () => { it("renders an overview of the patient's conditions when present", async () => { const user = userEvent.setup(); - mockedOpenmrsFetch.mockReturnValueOnce({ data: mockFhirConditionsResponse }); + mockOpenmrsFetch.mockResolvedValueOnce({ data: mockFhirConditionsResponse } as FetchResponse); renderConditionsOverview(); @@ -100,7 +99,7 @@ describe('ConditionsOverview: ', () => { it('clicking the Add button or Record Conditions link launches the conditions form', async () => { const user = userEvent.setup(); - mockedOpenmrsFetch.mockReturnValueOnce({ data: [] }); + mockOpenmrsFetch.mockResolvedValueOnce({ data: [] } as FetchResponse); renderConditionsOverview(); diff --git a/packages/esm-patient-conditions-app/src/conditions/conditions-widget.component.tsx b/packages/esm-patient-conditions-app/src/conditions/conditions-widget.component.tsx index 203eb1a4b..0ebe82647 100644 --- a/packages/esm-patient-conditions-app/src/conditions/conditions-widget.component.tsx +++ b/packages/esm-patient-conditions-app/src/conditions/conditions-widget.component.tsx @@ -29,13 +29,13 @@ import { useConditions, useConditionsSearch, } from './conditions.resource'; -import { type ConditionSchema } from './conditions-form.workspace'; +import { type ConditionsFormSchema } from './conditions-form.workspace'; import styles from './conditions-form.scss'; interface ConditionsWidgetProps { closeWorkspaceWithSavedChanges?: DefaultPatientWorkspaceProps['closeWorkspaceWithSavedChanges']; conditionToEdit?: ConditionDataTableRow; - editing?: boolean; + isEditing?: boolean; isSubmittingForm: boolean; patientUuid: string; setErrorCreating?: (error: Error) => void; @@ -52,7 +52,7 @@ interface RequiredFieldLabelProps { const ConditionsWidget: React.FC = ({ closeWorkspaceWithSavedChanges, conditionToEdit, - editing, + isEditing, isSubmittingForm, patientUuid, setErrorCreating, @@ -66,7 +66,7 @@ const ConditionsWidget: React.FC = ({ formState: { errors }, getValues, watch, - } = useFormContext(); + } = useFormContext(); const session = useSession(); const searchInputRef = useRef(null); const clinicalStatus = watch('clinicalStatus'); @@ -110,20 +110,16 @@ const ConditionsWidget: React.FC = ({ }; try { - const res = await createCondition(payload); + await createCondition(payload); + mutate(); - if (res.status === 201) { - mutate(); + showSnackbar({ + kind: 'success', + subtitle: t('conditionNowVisible', 'It is now visible on the Conditions page'), + title: t('conditionSaved', 'Condition saved'), + }); - showSnackbar({ - isLowContrast: true, - kind: 'success', - subtitle: t('conditionNowVisible', 'It is now visible on the Conditions page'), - title: t('conditionSaved', 'Condition saved'), - }); - - closeWorkspaceWithSavedChanges(); - } + closeWorkspaceWithSavedChanges(); } catch (error) { setIsSubmittingForm(false); setErrorCreating(error); @@ -142,10 +138,10 @@ const ConditionsWidget: React.FC = ({ const handleUpdate = useCallback(async () => { const payload: FormFields = { - clinicalStatus: editing ? getValues('clinicalStatus') : editableClinicalStatus, + clinicalStatus: isEditing ? getValues('clinicalStatus') : editableClinicalStatus, conceptId: matchingCondition?.conceptId, display: displayName, - abatementDateTime: editing + abatementDateTime: isEditing ? getValues('abatementDateTime') ? dayjs(getValues('abatementDateTime')).format() : editableAbatementDateTime @@ -156,20 +152,16 @@ const ConditionsWidget: React.FC = ({ }; try { - const res = await updateCondition(conditionToEdit?.id, payload); - - if (res.status === 200) { - mutate(); + await updateCondition(conditionToEdit?.id, payload); + mutate(); - showSnackbar({ - isLowContrast: true, - kind: 'success', - subtitle: t('conditionNowVisible', 'It is now visible on the Conditions page'), - title: t('conditionUpdated', 'Condition updated'), - }); + showSnackbar({ + kind: 'success', + subtitle: t('conditionNowVisible', 'It is now visible on the Conditions page'), + title: t('conditionUpdated', 'Condition updated'), + }); - closeWorkspaceWithSavedChanges(); - } + closeWorkspaceWithSavedChanges(); } catch (error) { setIsSubmittingForm(false); setErrorUpdating(error); @@ -179,7 +171,7 @@ const ConditionsWidget: React.FC = ({ conditionToEdit?.id, displayName, editableClinicalStatus, - editing, + isEditing, getValues, matchingCondition?.conceptId, mutate, @@ -207,15 +199,15 @@ const ConditionsWidget: React.FC = ({ Object.entries(errors).map((key, err) => console.error(`${key}: ${err} `)); return; } - editing ? handleUpdate() : handleCreate(); + isEditing ? handleUpdate() : handleCreate(); } - }, [handleUpdate, editing, handleCreate, isSubmittingForm, errors, setIsSubmittingForm]); + }, [handleUpdate, isEditing, handleCreate, isSubmittingForm, errors, setIsSubmittingForm]); return (
}> - {editing ? ( + {isEditing ? ( {displayName} ) : ( <> @@ -243,7 +235,7 @@ const ConditionsWidget: React.FC = ({ setSearchTerm(''); setSelectedCondition(null); }} - disabled={editing} + disabled={isEditing} value={(() => { if (selectedCondition) { return selectedCondition.display; @@ -369,7 +361,6 @@ function RequiredFieldLabel({ label, t }: RequiredFieldLabelProps) { return ( <> {label} - * diff --git a/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/add-lab-order.test.tsx b/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/add-lab-order.test.tsx index cae483581..486e7ccd0 100644 --- a/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/add-lab-order.test.tsx +++ b/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/add-lab-order.test.tsx @@ -136,7 +136,6 @@ describe('AddLabOrder', () => { instructions: 'plz do it thx', labReferenceNumber: 'lba-000124', testType: { label: 'CD4 COUNT', conceptUuid: 'test-lab-uuid-2' }, - careSetting: '6f0c9a92-6f24-11e3-af88-005056821db0', orderer: 'test-provider-uuid', }), ]); 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 339fece33..5be553317 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 @@ -7,7 +7,7 @@ import { useOrderBasket, } from '@openmrs/esm-patient-common-lib'; import { translateFrom, useLayoutType, useSession, useConfig, ExtensionSlot } from '@openmrs/esm-framework'; -import { careSettingUuid, prepLabOrderPostData, useOrderReasons } from '../api'; +import { prepLabOrderPostData, useOrderReasons } from '../api'; import { Button, ButtonSet, @@ -54,30 +54,39 @@ export function LabOrderForm({ const orderReasonRequired = ( config.labTestsWithOrderReasons?.find((c) => c.labTestUuid === initialOrder?.testType?.conceptUuid) || {} ).required; - const labOrderFormSchema = z.object({ - instructions: z.string().optional(), - urgency: z.string().refine((value) => value !== '', { - message: translateFrom(moduleName, 'addLabOrderPriorityRequired', 'Priority is required'), - }), - labReferenceNumber: z.string().optional(), - testType: z.object( - { label: z.string(), conceptUuid: z.string() }, - { - required_error: translateFrom(moduleName, 'addLabOrderLabTestTypeRequired', 'Test type is required'), - invalid_type_error: translateFrom(moduleName, 'addLabOrderLabReferenceRequired', 'Test type is required'), - }, - ), - orderReason: orderReasonRequired - ? z - .string({ - required_error: translateFrom(moduleName, 'addLabOrderLabOrderReasonRequired', 'Order reason is required'), - }) - .refine( - (value) => !!value, - translateFrom(moduleName, 'addLabOrderLabOrderReasonRequired', 'Order reason is required'), - ) - : z.string().optional(), - }); + + const labOrderFormSchema = useMemo( + () => + z.object({ + instructions: z.string().optional(), + urgency: z.string().refine((value) => value !== '', { + message: translateFrom(moduleName, 'addLabOrderPriorityRequired', 'Priority is required'), + }), + labReferenceNumber: z.string().optional(), + testType: z.object( + { label: z.string(), conceptUuid: z.string() }, + { + required_error: translateFrom(moduleName, 'addLabOrderLabTestTypeRequired', 'Test type is required'), + invalid_type_error: translateFrom(moduleName, 'addLabOrderLabReferenceRequired', 'Test type is required'), + }, + ), + orderReason: orderReasonRequired + ? z + .string({ + required_error: translateFrom( + moduleName, + 'addLabOrderLabOrderReasonRequired', + 'Order reason is required', + ), + }) + .refine( + (value) => !!value, + translateFrom(moduleName, 'addLabOrderLabOrderReasonRequired', 'Order reason is required'), + ) + : z.string().optional(), + }), + [orderReasonRequired], + ); const { control, @@ -90,9 +99,11 @@ export function LabOrderForm({ ...initialOrder, }, }); + const orderReasonUuids = (config.labTestsWithOrderReasons?.find((c) => c.labTestUuid === defaultValues?.testType?.conceptUuid) || {}) .orderReasons || []; + const { orderReasons } = useOrderReasons(orderReasonUuids); const handleFormSubmission = useCallback( @@ -101,19 +112,23 @@ export function LabOrderForm({ ...initialOrder, ...data, }; - finalizedOrder.careSetting = careSettingUuid; finalizedOrder.orderer = session.currentProvider.uuid; + const newOrders = [...orders]; const existingOrder = orders.find((order) => ordersEqual(order, finalizedOrder)); if (existingOrder) { newOrders[orders.indexOf(existingOrder)] = { ...finalizedOrder, + // Incomplete orders should be marked completed on saving the form + isOrderIncomplete: false, }; } else { newOrders.push(finalizedOrder); } + setOrders(newOrders); + closeWorkspaceWithSavedChanges({ onWorkspaceClose: () => launchPatientWorkspace('order-basket'), }); diff --git a/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/test-type-search.tsx b/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/test-type-search.tsx index 44ce4986e..28c002d49 100644 --- a/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/test-type-search.tsx +++ b/packages/esm-patient-labs-app/src/lab-orders/add-lab-order/test-type-search.tsx @@ -146,7 +146,7 @@ const TestTypeSearchResultItem: React.FC = ({ tes const createLabOrder = useCallback( (testType: TestType) => { - return createEmptyLabOrder(testType, session.currentProvider.uuid); + return createEmptyLabOrder(testType, session.currentProvider?.uuid); }, [session.currentProvider.uuid], ); diff --git a/packages/esm-patient-labs-app/translations/am.json b/packages/esm-patient-labs-app/translations/am.json index fdd494140..820eb5f6c 100644 --- a/packages/esm-patient-labs-app/translations/am.json +++ b/packages/esm-patient-labs-app/translations/am.json @@ -5,6 +5,7 @@ "backToOrderBasket": "Back to order basket", "backToTimeline": "Back to timeline", "cancel": "Cancel", + "checkFilters": "Check the filters above", "dataLoadError": "Data Load Error", "date": "Date", "dateCollected": "Displaying date collected", @@ -19,6 +20,7 @@ "loading": "Loading", "male": "Male", "moreResultsAvailable": "More results available", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "observations", "onDate": "on", "orderActionDiscontinue": "Discontinue", @@ -57,7 +59,6 @@ "testResultsData": "Test results data", "testType": "Test type", "testTypePlaceholder": "Select one", - "thereAreNoTestResultsFound": "There are no test results found within the specified date range", "timeline": "Timeline", "timeOfTest": "Time of Test", "tree": "Tree", diff --git a/packages/esm-patient-labs-app/translations/ar.json b/packages/esm-patient-labs-app/translations/ar.json index 2cacd1405..788d03524 100644 --- a/packages/esm-patient-labs-app/translations/ar.json +++ b/packages/esm-patient-labs-app/translations/ar.json @@ -5,6 +5,7 @@ "backToOrderBasket": "العودة إلى سلة الطلب", "backToTimeline": "العودة إلى الجدول الزمني", "cancel": "Cancel", + "checkFilters": "Check the filters above", "dataLoadError": "Data Load Error", "date": "تاريخ", "dateCollected": "عرض تاريخ الجمع", @@ -19,6 +20,7 @@ "loading": "جار التحميل", "male": "Male", "moreResultsAvailable": "المزيد من النتائج متاحة", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "ملاحظات", "onDate": "on", "orderActionDiscontinue": "Discontinue", @@ -57,7 +59,6 @@ "testResultsData": "Test results data", "testType": "نوع الاختبار", "testTypePlaceholder": "اختر واحدة", - "thereAreNoTestResultsFound": "There are no test results found within the specified date range", "timeline": "الجدول الزمني", "timeOfTest": "وقت الاختبار", "tree": "شجرة", diff --git a/packages/esm-patient-labs-app/translations/es.json b/packages/esm-patient-labs-app/translations/es.json index 830248269..c377c5b05 100644 --- a/packages/esm-patient-labs-app/translations/es.json +++ b/packages/esm-patient-labs-app/translations/es.json @@ -5,6 +5,7 @@ "backToOrderBasket": "Back to order basket", "backToTimeline": "Volver al calendario", "cancel": "Cancel", + "checkFilters": "Check the filters above", "dataLoadError": "Data Load Error", "date": "Fecha", "dateCollected": "Mostrando fecha de recogida", @@ -19,6 +20,7 @@ "loading": "Cargando", "male": "Male", "moreResultsAvailable": "Más resultados disponibles", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "observaciones", "onDate": "on", "orderActionDiscontinue": "Discontinue", @@ -57,7 +59,6 @@ "testResultsData": "Test results data", "testType": "Tipo de prueba", "testTypePlaceholder": "Selecciona uno", - "thereAreNoTestResultsFound": "There are no test results found within the specified date range", "timeline": "Calendario", "timeOfTest": "Hora de la Prueba", "tree": "Árbol", diff --git a/packages/esm-patient-labs-app/translations/fr.json b/packages/esm-patient-labs-app/translations/fr.json index d0dc2203c..9c4b820b1 100644 --- a/packages/esm-patient-labs-app/translations/fr.json +++ b/packages/esm-patient-labs-app/translations/fr.json @@ -5,6 +5,7 @@ "backToOrderBasket": "Retour au panier de commande", "backToTimeline": "Retour à la chronologie", "cancel": "Cancel", + "checkFilters": "Check the filters above", "dataLoadError": "Data Load Error", "date": "Date", "dateCollected": "Affichage de la date collectée", @@ -19,6 +20,7 @@ "loading": "Chargement", "male": "Male", "moreResultsAvailable": "Plus de résultats disponibles", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "observations", "onDate": "on", "orderActionDiscontinue": "Discontinue", @@ -57,7 +59,6 @@ "testResultsData": "Test results data", "testType": "Type de test", "testTypePlaceholder": "Sélectionnez-en un", - "thereAreNoTestResultsFound": "There are no test results found within the specified date range", "timeline": "Chronologie", "timeOfTest": "Heure du test", "tree": "Arborescence", diff --git a/packages/esm-patient-labs-app/translations/he.json b/packages/esm-patient-labs-app/translations/he.json index 0dd164fd6..588794298 100644 --- a/packages/esm-patient-labs-app/translations/he.json +++ b/packages/esm-patient-labs-app/translations/he.json @@ -5,6 +5,7 @@ "backToOrderBasket": "חזור לסל ההזמנות", "backToTimeline": "חזור לציר הזמן", "cancel": "Cancel", + "checkFilters": "Check the filters above", "dataLoadError": "Data Load Error", "date": "תאריך", "dateCollected": "מציג תאריך איסוף", @@ -19,6 +20,7 @@ "loading": "טוען", "male": "Male", "moreResultsAvailable": "קיימים עוד תוצאות זמינות", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "תצוגת מדדים", "onDate": "on", "orderActionDiscontinue": "Discontinue", @@ -57,7 +59,6 @@ "testResultsData": "Test results data", "testType": "סוג הבדיקה", "testTypePlaceholder": "בחר אחד", - "thereAreNoTestResultsFound": "There are no test results found within the specified date range", "timeline": "ציר זמן", "timeOfTest": "שעת הבדיקה", "tree": "עץ", diff --git a/packages/esm-patient-labs-app/translations/km.json b/packages/esm-patient-labs-app/translations/km.json index f107500a9..d8f07c2b1 100644 --- a/packages/esm-patient-labs-app/translations/km.json +++ b/packages/esm-patient-labs-app/translations/km.json @@ -5,6 +5,7 @@ "backToOrderBasket": "ត្រឡប់ទៅកន្ត្រកបញ្ជាទិញ", "backToTimeline": "ត្រលប់ទៅបន្ទាត់ពេលវេលា", "cancel": "Cancel", + "checkFilters": "Check the filters above", "dataLoadError": "Data Load Error", "date": "កាលបរិច្ឆេទ", "dateCollected": "បង្ហាញកាលបរិច្ឆេទដែលប្រមូលទិន្នន័យបាន", @@ -19,6 +20,7 @@ "loading": "កំពុងផ្ទុក", "male": "Male", "moreResultsAvailable": "អាចរកបានលទ្ធផលច្រើនទៀត", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "ការសង្កេត", "onDate": "on", "orderActionDiscontinue": "Discontinue", @@ -57,7 +59,6 @@ "testResultsData": "Test results data", "testType": "ប្រភេទតេស្ត", "testTypePlaceholder": "ជ្រើសរើសមួយ", - "thereAreNoTestResultsFound": "There are no test results found within the specified date range", "timeline": "បន្ទាត់ពេលវេលា", "timeOfTest": "ពេលវេលានៃការធ្វើតេស្ត", "tree": "មែកធាងទិន្នន័យ(Tree)", diff --git a/packages/esm-patient-labs-app/translations/zh.json b/packages/esm-patient-labs-app/translations/zh.json index da6d44ab1..d43e82c21 100644 --- a/packages/esm-patient-labs-app/translations/zh.json +++ b/packages/esm-patient-labs-app/translations/zh.json @@ -5,6 +5,7 @@ "backToOrderBasket": "返回医嘱篮", "backToTimeline": "返回时间线", "cancel": "取消", + "checkFilters": "Check the filters above", "dataLoadError": "数据加载错误", "date": "日期", "dateCollected": "显示采集日期", @@ -19,6 +20,7 @@ "loading": "加载中", "male": "男性", "moreResultsAvailable": "更多结果可用", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "观察记录", "onDate": "on", "orderActionDiscontinue": "停止使用", @@ -57,7 +59,6 @@ "testResultsData": "检验结果数据", "testType": "检验类型", "testTypePlaceholder": "选择一个", - "thereAreNoTestResultsFound": "指定的日期范围内找不到任何检验结果", "timeline": "时间线", "timeOfTest": "检验时间", "tree": "树状结构", diff --git a/packages/esm-patient-labs-app/translations/zh_CN.json b/packages/esm-patient-labs-app/translations/zh_CN.json index da6d44ab1..d43e82c21 100644 --- a/packages/esm-patient-labs-app/translations/zh_CN.json +++ b/packages/esm-patient-labs-app/translations/zh_CN.json @@ -5,6 +5,7 @@ "backToOrderBasket": "返回医嘱篮", "backToTimeline": "返回时间线", "cancel": "取消", + "checkFilters": "Check the filters above", "dataLoadError": "数据加载错误", "date": "日期", "dateCollected": "显示采集日期", @@ -19,6 +20,7 @@ "loading": "加载中", "male": "男性", "moreResultsAvailable": "更多结果可用", + "noTestResultsWithinSpecifiedRange": "No test results found within the specified range", "observationsDisplayText": "观察记录", "onDate": "on", "orderActionDiscontinue": "停止使用", @@ -57,7 +59,6 @@ "testResultsData": "检验结果数据", "testType": "检验类型", "testTypePlaceholder": "选择一个", - "thereAreNoTestResultsFound": "指定的日期范围内找不到任何检验结果", "timeline": "时间线", "timeOfTest": "检验时间", "tree": "树状结构", diff --git a/packages/esm-patient-medications-app/translations/zh.json b/packages/esm-patient-medications-app/translations/zh.json index eaedf4c2f..1a0c7b538 100644 --- a/packages/esm-patient-medications-app/translations/zh.json +++ b/packages/esm-patient-medications-app/translations/zh.json @@ -43,7 +43,7 @@ "male": "男性", "medicationDurationAndUnit": "持续 {{duration}} {{durationUnit}}", "medicationIndefiniteDuration": "无限期", - "medications": "Medications", + "medications": "药物", "modify": "修改", "none": "无", "noResultsForDrugSearch": "没有与“{{searchTerm}}”有关的结果可显示", diff --git a/packages/esm-patient-medications-app/translations/zh_CN.json b/packages/esm-patient-medications-app/translations/zh_CN.json index eaedf4c2f..1a0c7b538 100644 --- a/packages/esm-patient-medications-app/translations/zh_CN.json +++ b/packages/esm-patient-medications-app/translations/zh_CN.json @@ -43,7 +43,7 @@ "male": "男性", "medicationDurationAndUnit": "持续 {{duration}} {{durationUnit}}", "medicationIndefiniteDuration": "无限期", - "medications": "Medications", + "medications": "药物", "modify": "修改", "none": "无", "noResultsForDrugSearch": "没有与“{{searchTerm}}”有关的结果可显示", diff --git a/packages/esm-patient-vitals-app/translations/am.json b/packages/esm-patient-vitals-app/translations/am.json index 43022ba3c..8126b65a3 100644 --- a/packages/esm-patient-vitals-app/translations/am.json +++ b/packages/esm-patient-vitals-app/translations/am.json @@ -10,12 +10,20 @@ "bmi": "BMI", "bp": "BP", "calculatedBmi": "BMI (calc.)", + "cancel": "Cancel", "checkForValidity": "Some of the values entered are invalid", "date": "Date", "dateAndTime": "Date and time", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "diastolic", "discard": "Discard", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "Error", + "errorVoidingVitals": "Error voiding vitals", "female": "Female", "goToSummary": "Go to Summary", "heartRate": "Heart rate", @@ -25,6 +33,7 @@ "muac": "MUAC", "noDataRecorded": "No data has been recorded for this patient", "notes": "Notes", + "optionsMenu": "Options menu", "other": "Other", "overdue": "Overdue", "oxygenSaturation": "Oxygen saturation", @@ -50,9 +59,13 @@ "vitals": "Vitals", "Vitals & Biometrics": "Vitals & Biometrics", "vitalsAndBiometrics": "Vitals and biometrics", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "They are now visible on the Vitals and Biometrics page", "vitalsAndBiometricsRecorded": "Vitals and Biometrics saved", "vitalsAndBiometricsSaveError": "Error saving vitals and biometrics", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "Vitals history", "vitalSignDisplayed": "Vital sign displayed", "vitalSigns": "Vital signs", diff --git a/packages/esm-patient-vitals-app/translations/ar.json b/packages/esm-patient-vitals-app/translations/ar.json index b3a34fc18..9a08f424a 100644 --- a/packages/esm-patient-vitals-app/translations/ar.json +++ b/packages/esm-patient-vitals-app/translations/ar.json @@ -10,12 +10,20 @@ "bmi": "مؤشر كتلة الجسم", "bp": "ضغط الدم", "calculatedBmi": "مؤشر كتلة الجسم (محسوب)", + "cancel": "Cancel", "checkForValidity": "بعض القيم المدخلة غير صالحة", "date": "Date", "dateAndTime": "Date and time", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "الانقباضي", "discard": "تجاهل", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "خطأ", + "errorVoidingVitals": "Error voiding vitals", "female": "أنثى", "goToSummary": "اذهب إلى الملخص", "heartRate": "معدل ضربات القلب", @@ -25,6 +33,7 @@ "muac": "MUAC", "noDataRecorded": "لم يتم تسجيل أي بيانات لهذا المريض", "notes": "ملاحظات", + "optionsMenu": "Options menu", "other": "أخرى", "overdue": "متأخر", "oxygenSaturation": "Oxygen saturation", @@ -50,9 +59,13 @@ "vitals": "العلامات الحيوية", "Vitals & Biometrics": "العلامات الحيوية والبيانات البيومترية", "vitalsAndBiometrics": "العلامات الحيوية والقياسات البيومترية", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "هم الآن مرئيون على صفحة العلامات الحيوية والقياسات البيومترية", "vitalsAndBiometricsRecorded": "تم حفظ العلامات الحيوية والقياسات البيومترية", "vitalsAndBiometricsSaveError": "خطأ في حفظ العلامات الحيوية والقياسات البيومترية", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "تاريخ العلامات الحيوية", "vitalSignDisplayed": "عرض العلامة الحيوية", "vitalSigns": "العلامات الحيوية", diff --git a/packages/esm-patient-vitals-app/translations/es.json b/packages/esm-patient-vitals-app/translations/es.json index ce7c05401..6ce17c1f8 100644 --- a/packages/esm-patient-vitals-app/translations/es.json +++ b/packages/esm-patient-vitals-app/translations/es.json @@ -10,12 +10,20 @@ "bmi": "IMC", "bp": "PA", "calculatedBmi": "IMC (calc.)", + "cancel": "Cancel", "checkForValidity": "Algunos de los valores introducidos no son válidos", "date": "Date", "dateAndTime": "Date and time", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "diastólica", "discard": "Descartar", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "Error", + "errorVoidingVitals": "Error voiding vitals", "female": "Femenino", "goToSummary": "Ir al resumen", "heartRate": "Frecuencia cardíaca", @@ -25,6 +33,7 @@ "muac": "PB/MUAC", "noDataRecorded": "No se han registrado datos para este paciente", "notes": "Notas", + "optionsMenu": "Options menu", "other": "Otro", "overdue": "Atrasado", "oxygenSaturation": "Oxygen saturation", @@ -50,9 +59,13 @@ "vitals": "Signos vitales", "Vitals & Biometrics": "Signos vitales y biometría", "vitalsAndBiometrics": "Signos vitales y biométricos", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "Ahora son visibles en la página de Signos vitales y biométricos", "vitalsAndBiometricsRecorded": "Signos vitales y biométricos guardados", "vitalsAndBiometricsSaveError": "Error al guardar signos vitales y biométricos", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "Historial de signos vitales", "vitalSignDisplayed": "Signo vital mostrado", "vitalSigns": "Signos vitales", diff --git a/packages/esm-patient-vitals-app/translations/fr.json b/packages/esm-patient-vitals-app/translations/fr.json index d550e60c4..ecee78311 100644 --- a/packages/esm-patient-vitals-app/translations/fr.json +++ b/packages/esm-patient-vitals-app/translations/fr.json @@ -10,12 +10,20 @@ "bmi": "IMC", "bp": "Pression sanguine", "calculatedBmi": "IMC (calc.)", + "cancel": "Cancel", "checkForValidity": "Certaines des valeurs saisies ne sont pas valides.", "date": "Date", "dateAndTime": "Date and time", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "diastolique", "discard": "Abandonner", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "Error", + "errorVoidingVitals": "Error voiding vitals", "female": "Female", "goToSummary": "Aller à la vue d'ensemble", "heartRate": "Rythme cardiaque", @@ -25,6 +33,7 @@ "muac": "Circonférence du bras moyen", "noDataRecorded": "Aucune donnée n'a été enregistrée pour ce patient", "notes": "Notes", + "optionsMenu": "Options menu", "other": "Other", "overdue": "Overdue", "oxygenSaturation": "Oxygen saturation", @@ -50,9 +59,13 @@ "vitals": "Signes vitaux", "Vitals & Biometrics": "Signes vitaux et biométrie", "vitalsAndBiometrics": "Signes vitaux et biométrie", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "Ils sont désormais visibles sur la page Signes vitaux et biométrie", "vitalsAndBiometricsRecorded": "Signes vitaux et biométrie sauvegardés", "vitalsAndBiometricsSaveError": "Erreur en sauvegardant les signes vitaux et la biométrie", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "Vitals history", "vitalSignDisplayed": "Signe vital affiché", "vitalSigns": "Signes vitaux", diff --git a/packages/esm-patient-vitals-app/translations/he.json b/packages/esm-patient-vitals-app/translations/he.json index 092c463b5..439aea81e 100644 --- a/packages/esm-patient-vitals-app/translations/he.json +++ b/packages/esm-patient-vitals-app/translations/he.json @@ -10,12 +10,20 @@ "bmi": "BMI", "bp": "ל.דם", "calculatedBmi": "BMI (חישוב)", + "cancel": "Cancel", "checkForValidity": "חלק מהערכים שהוזנו אינם תקפים", "date": "תאריך", "dateAndTime": "תאריך ושעה", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "דיאסטולי", "discard": "בטל", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "שגיאה", + "errorVoidingVitals": "Error voiding vitals", "female": "נקבה", "goToSummary": "עבור לסיכום", "heartRate": "קצב לב", @@ -25,6 +33,7 @@ "muac": "MUAC", "noDataRecorded": "לא נרשמו נתונים עבור מטופל זה", "notes": "הערות", + "optionsMenu": "Options menu", "other": "אחר", "overdue": "מאחר", "oxygenSaturation": "Oxygen saturation", @@ -50,9 +59,13 @@ "vitals": "מדדים חיוניים", "Vitals & Biometrics": "מדדים וביומטריה", "vitalsAndBiometrics": "מדדים חיוניים וביומטרים", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "הם כעת זמינים בדף מדדים חיוניים וביומטרים", "vitalsAndBiometricsRecorded": "מדדים חיוניים וביומטרים נשמרו", "vitalsAndBiometricsSaveError": "שגיאה בשמירת מדדים חיוניים וביומטרים", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "היסטוריה של חיוניים", "vitalSignDisplayed": "מדד חיוני מוצג", "vitalSigns": "מדדים חיוניים", diff --git a/packages/esm-patient-vitals-app/translations/km.json b/packages/esm-patient-vitals-app/translations/km.json index 6e0a5df1e..35b3ef995 100644 --- a/packages/esm-patient-vitals-app/translations/km.json +++ b/packages/esm-patient-vitals-app/translations/km.json @@ -10,12 +10,20 @@ "bmi": "សន្ទស្សន៍ទម្ងន់ខ្លួន", "bp": "សម្ពាធឈាម", "calculatedBmi": "សន្ទស្សន៍ទម្ងន់ខ្លួន(calc.)", + "cancel": "Cancel", "checkForValidity": "តម្លៃមួយចំនួនដែលបានបញ្ចូលមិនត្រឹមត្រូវទេ", "date": "កាលបរិច្ឆេទ", "dateAndTime": "កាលបរិច្ឆេទ និងម៉ោង", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "ដឺដ្យាស្តូលីក", "discard": "បោះបង់", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "មានបញ្ហាបច្ចេកទេស", + "errorVoidingVitals": "Error voiding vitals", "female": "ស្រី", "goToSummary": "ចូលទៅកាន់ ការសង្ខេប", "heartRate": "ចង្វាក់បេះដូង", @@ -25,6 +33,7 @@ "muac": "រង្វង់ដើមដៃពាក់ផ្នែកខាងលើ(MUAC)", "noDataRecorded": "មិនមានទិន្នន័យត្រូវបានកត់ត្រាសម្រាប់អ្នកជំងឺនេះទេ", "notes": "កំណត់សម្គាល់", + "optionsMenu": "Options menu", "other": "ផ្សេងៗ", "overdue": "ហួសពេលកំណត់", "oxygenSaturation": "Oxygen saturation", @@ -50,9 +59,13 @@ "vitals": "សញ្ញាជីវិត", "Vitals & Biometrics": "សញ្ញាជីវិត និងជីវមាត្រ", "vitalsAndBiometrics": "សញ្ញាជីវិត និងជីវមាត្រ", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "ឥឡូវនេះពួកវាអាចមើលឃើញនៅលើទំព័រ សញ្ញាជីវិត និងជីវមាត្រ", "vitalsAndBiometricsRecorded": "សញ្ញាជីវិត និងជីវមាត្រត្រូវបានរក្សាទុក", "vitalsAndBiometricsSaveError": "កំហុសក្នុងការរក្សាទុកសញ្ញាជីវិត និងជីវមាត្រ", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "ប្រវត្តិសញ្ញាជីវិត", "vitalSignDisplayed": "សញ្ញាជីវិតត្រូវបានបង្ហាញ", "vitalSigns": "សញ្ញាជីវិត", diff --git a/packages/esm-patient-vitals-app/translations/zh.json b/packages/esm-patient-vitals-app/translations/zh.json index 248698548..126da84bc 100644 --- a/packages/esm-patient-vitals-app/translations/zh.json +++ b/packages/esm-patient-vitals-app/translations/zh.json @@ -10,12 +10,20 @@ "bmi": "BMI", "bp": "血压", "calculatedBmi": "BMI (calc.)", + "cancel": "Cancel", "checkForValidity": "输入的一些值无效", "date": "日期", "dateAndTime": "日期和时间", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "舒张压", "discard": "放弃", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "错误", + "errorVoidingVitals": "Error voiding vitals", "female": "女性", "goToSummary": "前往摘要", "heartRate": "心率", @@ -25,6 +33,7 @@ "muac": "中上臂围", "noDataRecorded": "该患者尚未记录任何数据", "notes": "备注", + "optionsMenu": "Options menu", "other": "其他", "overdue": "逾期", "oxygenSaturation": "血氧饱和度", @@ -50,9 +59,13 @@ "vitals": "生命体征", "Vitals & Biometrics": "生命体征&生物测定", "vitalsAndBiometrics": "生命体征和生物测定", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "现在在生命体征和生物测定页面上可见", "vitalsAndBiometricsRecorded": "生命体征和生物测定数据已保存", "vitalsAndBiometricsSaveError": "保存生命体征和生物测定数据时出现错误", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "生命体征历史", "vitalSignDisplayed": "生命体征已显示", "vitalSigns": "生命体征", diff --git a/packages/esm-patient-vitals-app/translations/zh_CN.json b/packages/esm-patient-vitals-app/translations/zh_CN.json index 248698548..126da84bc 100644 --- a/packages/esm-patient-vitals-app/translations/zh_CN.json +++ b/packages/esm-patient-vitals-app/translations/zh_CN.json @@ -10,12 +10,20 @@ "bmi": "BMI", "bp": "血压", "calculatedBmi": "BMI (calc.)", + "cancel": "Cancel", "checkForValidity": "输入的一些值无效", "date": "日期", "dateAndTime": "日期和时间", + "delete": "Delete", + "deletePatientVitalsAndBiometrics": "Delete Vitals and Biometrics", + "deleteVitalsBiometricsConfirmationText": "Are you sure you want to delete these Vitals and Biometrics entries?", "diastolic": "舒张压", "discard": "放弃", + "edit": "Edit", + "editVitalsAndBiometrics": "Edit Vitals and Biometrics", + "encounterNotFound": "Encounter not found", "error": "错误", + "errorVoidingVitals": "Error voiding vitals", "female": "女性", "goToSummary": "前往摘要", "heartRate": "心率", @@ -25,6 +33,7 @@ "muac": "中上臂围", "noDataRecorded": "该患者尚未记录任何数据", "notes": "备注", + "optionsMenu": "Options menu", "other": "其他", "overdue": "逾期", "oxygenSaturation": "血氧饱和度", @@ -50,9 +59,13 @@ "vitals": "生命体征", "Vitals & Biometrics": "生命体征&生物测定", "vitalsAndBiometrics": "生命体征和生物测定", + "vitalsAndBiometricsDeleted": "Vitals and Biometrics deleted", + "vitalsAndBiometricsDeleteError": "Error deleting Vitals and Biometrics", + "vitalsAndBiometricsEditError": "Error editing vitals and biometrics", "vitalsAndBiometricsNowAvailable": "现在在生命体征和生物测定页面上可见", "vitalsAndBiometricsRecorded": "生命体征和生物测定数据已保存", "vitalsAndBiometricsSaveError": "保存生命体征和生物测定数据时出现错误", + "vitalsAndBiometricsUpdated": "Vitals and Biometrics updated", "vitalsHistory": "生命体征历史", "vitalSignDisplayed": "生命体征已显示", "vitalSigns": "生命体征", diff --git a/yarn.lock b/yarn.lock index 3759cfc67..aaf3e4ec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4904,8 +4904,8 @@ __metadata: linkType: hard "@openmrs/openmrs-form-engine-lib@npm:next": - version: 2.0.0-pre.1249 - resolution: "@openmrs/openmrs-form-engine-lib@npm:2.0.0-pre.1249" + version: 2.0.0-pre.1260 + resolution: "@openmrs/openmrs-form-engine-lib@npm:2.0.0-pre.1260" dependencies: "@carbon/react": "npm:>1.47.0 <1.50.0" ace-builds: "npm:^1.33.2" @@ -4927,7 +4927,7 @@ __metadata: react-i18next: 11.x rxjs: 6.x swr: 2.x - checksum: 10/d1c9b2e5f25491eda272849cfe9af9173d0a8c09c09ba743cb419ed90e6655e7e73cfe01ce979f3bce7ce583273be583917deeeb09a0aa2b695eeb2e02853f09 + checksum: 10/3266f4c4df6254f46017808dc5fec6071c8ab3a7476147285d182cee1679156f037ef058cdea18f55fce1175007c4dbd6997742eaa695419dd555d6d1efa077e languageName: node linkType: hard @@ -6649,6 +6649,13 @@ __metadata: languageName: node linkType: hard +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.2 + resolution: "@socket.io/component-emitter@npm:3.1.2" + checksum: 10/89888f00699eb34e3070624eb7b8161fa29f064aeb1389a48f02195d55dd7c52a504e52160016859f6d6dffddd54324623cdd47fd34b3d46f9ed96c18c456edc + languageName: node + linkType: hard + "@surma/rollup-plugin-off-main-thread@npm:^2.2.3": version: 2.2.3 resolution: "@surma/rollup-plugin-off-main-thread@npm:2.2.3" @@ -7045,13 +7052,6 @@ __metadata: languageName: node linkType: hard -"@types/component-emitter@npm:^1.2.10": - version: 1.2.11 - resolution: "@types/component-emitter@npm:1.2.11" - checksum: 10/0e081c5f7a4b113af3732f67ad9ebb487d5c239d440d96938ff9a679d18bb9337a513638e12b5b02a7a921494eef18c5a4d78f1188bc43a12290edd74c42a9c7 - languageName: node - linkType: hard - "@types/connect-history-api-fallback@npm:^1.3.5": version: 1.3.5 resolution: "@types/connect-history-api-fallback@npm:1.3.5" @@ -10221,13 +10221,6 @@ __metadata: languageName: node linkType: hard -"component-emitter@npm:~1.3.0": - version: 1.3.0 - resolution: "component-emitter@npm:1.3.0" - checksum: 10/dfc1ec2e7aa2486346c068f8d764e3eefe2e1ca0b24f57506cd93b2ae3d67829a7ebd7cc16e2bf51368fac2f45f78fcff231718e40b1975647e4a86be65e1d05 - languageName: node - linkType: hard - "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -11334,6 +11327,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:~4.3.4": + version: 4.3.5 + resolution: "debug@npm:4.3.5" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/cb6eab424c410e07813ca1392888589972ce9a32b8829c6508f5e1f25f3c3e70a76731610ae55b4bbe58d1a2fffa1424b30e97fa8d394e49cd2656a9643aedd2 + languageName: node + linkType: hard + "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -11945,16 +11950,16 @@ __metadata: languageName: node linkType: hard -"engine.io-parser@npm:~5.0.3": - version: 5.0.4 - resolution: "engine.io-parser@npm:5.0.4" - checksum: 10/98ed4cefed46d9c5796a49fd284e47c7fb94e637128b591eb0e456eb9cd9c1e49d34b4a09deff129cc99f9a7aa4dfa30e811e1f3ad5100a07c19f8dc4428e728 +"engine.io-parser@npm:~5.2.1": + version: 5.2.2 + resolution: "engine.io-parser@npm:5.2.2" + checksum: 10/135b1278547bde501412ac462e93b3b4f6a2fecc30a2b843bb9408b96301e8068bb2496c32d124a3d2544eb0aec8b8eddcb4ef0d0d0b84b7d642b1ffde1b2dcf languageName: node linkType: hard -"engine.io@npm:~6.2.0": - version: 6.2.0 - resolution: "engine.io@npm:6.2.0" +"engine.io@npm:~6.5.2": + version: 6.5.5 + resolution: "engine.io@npm:6.5.5" dependencies: "@types/cookie": "npm:^0.4.1" "@types/cors": "npm:^2.8.12" @@ -11964,9 +11969,9 @@ __metadata: cookie: "npm:~0.4.1" cors: "npm:~2.8.5" debug: "npm:~4.3.1" - engine.io-parser: "npm:~5.0.3" - ws: "npm:~8.2.3" - checksum: 10/28578ccebc82cdde5becd5de6c78c270e742b4e067d7c11dce7cb7b0799c33290de36a8db8289b57a22a00e65ba332201fa678eb5afe7cec0eae6162e0b01791 + engine.io-parser: "npm:~5.2.1" + ws: "npm:~8.17.1" + checksum: 10/df8562e5249cf122efad77b909fe804b36ac5769676f963c997d4d18c91e014c68bb40661ff92f641b978baa0297be4000c2f3c3d1ce237cd1771952ccc5f38a languageName: node linkType: hard @@ -21169,35 +21174,38 @@ __metadata: languageName: node linkType: hard -"socket.io-adapter@npm:~2.4.0": - version: 2.4.0 - resolution: "socket.io-adapter@npm:2.4.0" - checksum: 10/e10c8c36a1b0744432d9fb7266c69268fb11cacb548e95f5feb7708c1438c4c1e034abf3eee56dc3fd4d5524aba4e5a306a402f0c15efb1334be364a05bfad04 +"socket.io-adapter@npm:~2.5.2": + version: 2.5.5 + resolution: "socket.io-adapter@npm:2.5.5" + dependencies: + debug: "npm:~4.3.4" + ws: "npm:~8.17.1" + checksum: 10/e364733a4c34ff1d4a02219e409bd48074fd614b7f5b0568ccfa30dd553252a5b9a41056931306a276891d13ea76a19e2c6f2128a4675c37323f642896874d80 languageName: node linkType: hard -"socket.io-parser@npm:~4.0.4": - version: 4.0.4 - resolution: "socket.io-parser@npm:4.0.4" +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" dependencies: - "@types/component-emitter": "npm:^1.2.10" - component-emitter: "npm:~1.3.0" + "@socket.io/component-emitter": "npm:~3.1.0" debug: "npm:~4.3.1" - checksum: 10/8d051a86b4606bcc36aa0c0bfe94bee95999359c77d5b0b423d13f6f907cdb14b8c8c6eec8c8131e57f1ed2088f31c0c40f9af466bb980292b8ecc85dce47b51 + checksum: 10/4be500a9ff7e79c50ec25af11048a3ed34b4c003a9500d656786a1e5bceae68421a8394cf3eb0aa9041f85f36c1a9a737617f4aee91a42ab4ce16ffb2aa0c89c languageName: node linkType: hard "socket.io@npm:^4.4.1": - version: 4.5.1 - resolution: "socket.io@npm:4.5.1" + version: 4.7.5 + resolution: "socket.io@npm:4.7.5" dependencies: accepts: "npm:~1.3.4" base64id: "npm:~2.0.0" + cors: "npm:~2.8.5" debug: "npm:~4.3.2" - engine.io: "npm:~6.2.0" - socket.io-adapter: "npm:~2.4.0" - socket.io-parser: "npm:~4.0.4" - checksum: 10/34f7ba728d6fe156129304db6d55235a7b17ca1b8a0ff447f56e83dfcc32efe41fee14ec58ed75763a6e4bc63efeafdfc579bb73cd9a44c1d810a09a8ff9ccbc + engine.io: "npm:~6.5.2" + socket.io-adapter: "npm:~2.5.2" + socket.io-parser: "npm:~4.2.4" + checksum: 10/911528f5bfdf83dbe2b154866884b736a7498f112f294a6f8420418fa11baadf08578869dab3e220c943094ff0d17b7f4587de3b1ad39679d9c12ed4cb226900 languageName: node linkType: hard @@ -24166,18 +24174,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:~8.2.3": - version: 8.2.3 - resolution: "ws@npm:8.2.3" +"ws@npm:~8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 10/84f3e90c35f466c86bf37fb15dbb9fbcdab5f4cf9485e563b2a75fd76b03c4813bb130e03991eb2bb325761bf7a0ad845e3ced7499a5e4e206e08bf93fac7bb7 + checksum: 10/4264ae92c0b3e59c7e309001e93079b26937aab181835fb7af79f906b22cd33b6196d96556dafb4e985742dd401e99139572242e9847661fdbc96556b9e6902d languageName: node linkType: hard