From 3dfd4240ad9d5ef4512b283dc222eb54891aa896 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Sun, 1 Sep 2024 03:44:36 +0200 Subject: [PATCH 01/20] fix(translations): sync translations from transifex (master) Automatically merged. --- i18n/ar_IQ.po | 29 +++++---------- i18n/ckb.po | 93 ++++++++++++++++++++++++++-------------------- i18n/cs.po | 6 +-- i18n/es.po | 6 +-- i18n/es_419.po | 93 ++++++++++++++++++++++++++-------------------- i18n/fr.po | 6 +-- i18n/id.po | 6 +-- i18n/km.po | 29 +++++---------- i18n/lo.po | 56 ++++++++++++++-------------- i18n/my.po | 29 +++++---------- i18n/nb.po | 29 +++++---------- i18n/nl.po | 6 +-- i18n/prs.po | 29 +++++---------- i18n/ps.po | 29 +++++---------- i18n/pt.po | 29 +++++---------- i18n/pt_BR.po | 29 +++++---------- i18n/ro.po | 6 +-- i18n/ru.po | 29 +++++---------- i18n/sv.po | 89 +++++++++++++++++++++++++------------------- i18n/tet.po | 89 +++++++++++++++++++++++++------------------- i18n/tg.po | 29 +++++---------- i18n/uk.po | 29 +++++---------- i18n/ur.po | 29 +++++---------- i18n/uz_UZ_Cyrl.po | 29 +++++---------- i18n/uz_UZ_Latn.po | 29 +++++---------- i18n/vi.po | 29 +++++---------- i18n/zh.po | 6 +-- i18n/zh_CN.po | 29 +++++---------- 28 files changed, 413 insertions(+), 513 deletions(-) diff --git a/i18n/ar_IQ.po b/i18n/ar_IQ.po index 01af8b5790..cbeeaaf0e3 100644 --- a/i18n/ar_IQ.po +++ b/i18n/ar_IQ.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: KRG HIS , 2024\n" "Language-Team: Arabic (Iraq) (https://app.transifex.com/hisp-uio/teams/100509/ar_IQ/)\n" @@ -491,18 +491,6 @@ msgstr "يحتوي على نص" msgid "Yes" msgstr "نعم" -msgid "mm/dd/yyyy" -msgstr "شهر / يوم / سنة" - -msgid "Years" -msgstr "السنوات" - -msgid "Months" -msgstr "الأشهر" - -msgid "Days" -msgstr "‏‏الأيام" - msgid "Uploading file" msgstr "تحميل ملف" @@ -1323,6 +1311,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1482,22 +1473,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ckb.po b/i18n/ckb.po index 9ca0dee15f..1a33d92772 100644 --- a/i18n/ckb.po +++ b/i18n/ckb.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Central Kurdish (https://app.transifex.com/hisp-uio/teams/100509/ckb/)\n" @@ -45,6 +45,9 @@ msgstr "" "تکایە پەیجەکەت ریفرێش بکەوە بۆ ئەوەی ئەم وەشانە بکەیتەوە بەڵام ئاگاداربکە " "ئەم کردارە وەشانەکانیتر دادەخات" +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "" @@ -375,17 +378,11 @@ msgstr "کەسی تۆمارکراو" msgid "validation failed" msgstr "سەلماندنەکە سەرکەوتوونەبوو" -msgid "Errors" -msgstr "هەڵەکان" - -msgid "Feedback" -msgstr "ڕاووبۆچون" - -msgid "Indicators" -msgstr "نیشاندەر" +msgid "No feedback for this event yet" +msgstr "" -msgid "Warnings" -msgstr "ئاگادارکردنەوەکان" +msgid "No indicator output for this event yet" +msgstr "" msgid "Generate new event" msgstr "" @@ -499,18 +496,6 @@ msgstr "نووسینی تێدایە" msgid "Yes" msgstr "بەڵێ" -msgid "mm/dd/yyyy" -msgstr "مانگ/رۆژ/ساڵ" - -msgid "Years" -msgstr "ساڵەکان" - -msgid "Months" -msgstr "مانگەکان" - -msgid "Days" -msgstr "رۆژەکان" - msgid "Uploading file" msgstr "سەرخستنی فایل" @@ -577,6 +562,9 @@ msgstr "ستونەکانی دەتەوێ دەربکەوێ لە خشتەکە" msgid "Column" msgstr "ستوون" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "نوێ کردنەوە" @@ -784,12 +772,6 @@ msgstr "" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "" @@ -820,6 +802,11 @@ msgstr "" msgid "Registered events" msgstr "حالەتە تۆمارکراوەکان" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "" @@ -935,6 +922,18 @@ msgstr "" "بەجێهێشتنی ئەم پەڕەیە هەڵبژاردنەکانت هەڵدەسپێری کە بۆ پەیوەندیە نوێیەکان " "کردووتە" +msgid "Errors" +msgstr "هەڵەکان" + +msgid "Feedback" +msgstr "ڕاووبۆچون" + +msgid "Indicators" +msgstr "نیشاندەر" + +msgid "Warnings" +msgstr "ئاگادارکردنەوەکان" + msgid "Show all events" msgstr "هەموو حاڵەتەکان پیشان بدە" @@ -976,6 +975,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "ڕەنگە دووبارەبوونەوە دۆزرابێتەوە" @@ -1255,9 +1260,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "" @@ -1312,6 +1314,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1463,22 +1468,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1498,6 +1503,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "" + msgid "Changelog" msgstr "" @@ -1663,9 +1677,6 @@ msgstr "هەڵەیک ڕوویدا، تکایە سەیری لۆگ فایل بکە msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/cs.po b/i18n/cs.po index 9248d56299..62ef1badcc 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -1354,6 +1354,9 @@ msgstr "Naplánované datum nelze změnit pro události {{ eventStatus }}" msgid "Event completed" msgstr "Událost dokončena" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Zpět ke všem fázím a událostem" @@ -1538,9 +1541,6 @@ msgstr "Chcete-li otevřít tuto událost, počkejte na dokončení ukládání" msgid "Show {{ rest }} more" msgstr "Zobrazit {{ rest }} více" -msgid "Reset list" -msgstr "Resetovat seznam" - msgid "Go to full {{ eventName }}" msgstr "Přejít na celou {{ eventName }}" diff --git a/i18n/es.po b/i18n/es.po index c876e8fa4f..1b377c622d 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -1393,6 +1393,9 @@ msgstr "" msgid "Event completed" msgstr "Evento completado" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Volver a todas las etapas y eventos" @@ -1583,9 +1586,6 @@ msgstr "Para abrir este evento, espere hasta que se complete el guardado." msgid "Show {{ rest }} more" msgstr "Mostrar más {{ rest }} " -msgid "Reset list" -msgstr "Resetear lista" - msgid "Go to full {{ eventName }}" msgstr "Ir a {{ eventName }} completado" diff --git a/i18n/es_419.po b/i18n/es_419.po index c4288e743b..8bc4508cd5 100644 --- a/i18n/es_419.po +++ b/i18n/es_419.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jaime Bosque , 2024\n" "Language-Team: Spanish (Latin America) (https://app.transifex.com/hisp-uio/teams/100509/es_419/)\n" @@ -46,6 +46,9 @@ msgstr "" " a utilizar esta versión, pero tenga en cuenta que esto cerrará otras " "versiones." +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "Ver panel de {{programName}}" @@ -384,17 +387,11 @@ msgstr "persona registrada" msgid "validation failed" msgstr "La validación ha fallado" -msgid "Errors" -msgstr "Errores" - -msgid "Feedback" -msgstr "Retroalimentación" - -msgid "Indicators" -msgstr "Indicadores" +msgid "No feedback for this event yet" +msgstr "" -msgid "Warnings" -msgstr "Advertencias" +msgid "No indicator output for this event yet" +msgstr "" msgid "Generate new event" msgstr "Generar nuevo evento" @@ -509,18 +506,6 @@ msgstr "Contiene texto" msgid "Yes" msgstr "Sí" -msgid "mm/dd/yyyy" -msgstr "mm/dd/aaaa" - -msgid "Years" -msgstr "Años" - -msgid "Months" -msgstr "Meses" - -msgid "Days" -msgstr "Días" - msgid "Uploading file" msgstr "Subiendo archivo" @@ -587,6 +572,9 @@ msgstr "Columns to show in table" msgid "Column" msgstr "Columna" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "Actualizar" @@ -816,12 +804,6 @@ msgstr "Hubo un error al cargar la página" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "La etapa del programa no es válida" @@ -852,6 +834,11 @@ msgstr "Etapa" msgid "Registered events" msgstr "Eventos registrados" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "Seleccione {{category}}." @@ -969,6 +956,18 @@ msgstr "" "Al salir de esta página, se descartarán las selecciones que haya realizado " "para una nueva relación." +msgid "Errors" +msgstr "Errores" + +msgid "Feedback" +msgstr "Retroalimentación" + +msgid "Indicators" +msgstr "Indicadores" + +msgid "Warnings" +msgstr "Advertencias" + msgid "Show all events" msgstr "Mostrar todos los eventos" @@ -1012,6 +1011,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "No se pudieron encontrar los datos del evento de inscripción" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "Posibles duplicados encontrados." @@ -1294,9 +1299,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "Cancelar" @@ -1351,6 +1353,9 @@ msgstr "" msgid "Event completed" msgstr "Evento completado" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Volver a todas las etapas y eventos" @@ -1504,6 +1509,12 @@ msgstr "Fecha de reporte" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "" + msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" @@ -1513,15 +1524,9 @@ msgstr "" msgid "Show {{ rest }} more" msgstr "" -msgid "Reset list" -msgstr "" - msgid "Go to full {{ eventName }}" msgstr "" -msgid "This stage can only have one event" -msgstr "" - msgid "Events could not be retrieved. Please try again later." msgstr "" @@ -1540,6 +1545,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "" + msgid "Changelog" msgstr "" @@ -1705,9 +1719,6 @@ msgstr " Ha ocurrido un error. Ver el registro para más detalles." msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/fr.po b/i18n/fr.po index cb371ad974..894d0c288e 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -1368,6 +1368,9 @@ msgstr "" msgid "Event completed" msgstr "Événement terminé" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Retour à tous les stades et événements" @@ -1551,9 +1554,6 @@ msgstr "" msgid "Show {{ rest }} more" msgstr "Afficher {{ rest }} plus" -msgid "Reset list" -msgstr "Réinitialiser la liste" - msgid "Go to full {{ eventName }}" msgstr "Aller à l'intégralité de {{ eventName }}" diff --git a/i18n/id.po b/i18n/id.po index 85a7841d2d..e251484c4c 100644 --- a/i18n/id.po +++ b/i18n/id.po @@ -1332,6 +1332,9 @@ msgstr "" msgid "Event completed" msgstr "Even selesai" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1496,9 +1499,6 @@ msgstr "" msgid "Show {{ rest }} more" msgstr "" -msgid "Reset list" -msgstr "Mengatur ulang daftar" - msgid "Go to full {{ eventName }}" msgstr "" diff --git a/i18n/km.po b/i18n/km.po index 488cdcbe42..04fa91cdc5 100644 --- a/i18n/km.po +++ b/i18n/km.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Khmer (https://app.transifex.com/hisp-uio/teams/100509/km/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "បាទ/ចាស" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "ឆ្នាំ" - -msgid "Months" -msgstr "ខែ" - -msgid "Days" -msgstr "ថ្ងៃ" - msgid "Uploading file" msgstr "" @@ -1305,6 +1293,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1454,22 +1445,22 @@ msgstr "ថ្ងៃខែឆ្នាំរាយការណ៏" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/lo.po b/i18n/lo.po index da0a57c457..b2da06a4c5 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -1335,6 +1335,9 @@ msgstr "ວັນທີທີ່ກຳນົດໄວ້ບໍ່ສາມາດ msgid "Event completed" msgstr "ກິດຈະກຳສຳເລັດແລ້ວ" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "ກັບໄປທຸກຂັ້ນຕອນ ແລະ ເຫດການ" @@ -1508,9 +1511,6 @@ msgstr "ເພື່ອເປີດເຫດການນີ້, ກະລຸນ msgid "Show {{ rest }} more" msgstr "ສະແດງ {{ rest }} ເພີ່ມເຕີມ" -msgid "Reset list" -msgstr "ເຮັດລາຍຊື່ຄືນໃໝ່" - msgid "Go to full {{ eventName }}" msgstr "ໄປທີ່ {{ eventName }} ແບບເຕັມ" @@ -1701,13 +1701,13 @@ msgid "Download with current filters" msgstr "ດາວໂຫຼດດ້ວຍຕົວກອງປັດຈຸບັນ" msgid "An error has occured. See log for details" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດຂຶ້ນ. ເບິ່ງລາຍລະອຽດ" msgid "Scheduled{{ escape }} due {{ time }}" -msgstr "" +msgstr "ກຳນົດເວລາ {{ escape }} ຈົນເຖິງ {{ time }}" msgid "Overdue{{ escape }} due {{ time }}" -msgstr "" +msgstr "ເກີນກຳນົດ {{ escape }} ຈົນເຖິງ {{ time }}" msgid "Overdue" msgstr "ກາຍເວລາທີ່ກໍານົດ" @@ -1719,76 +1719,76 @@ msgid "Visited" msgstr "ເຂົ້າຊົມ" msgid "{{trackedEntityName}} in program{{escape}} {{programName}}" -msgstr "" +msgstr "{{trackedEntityName}} ໃນໂປຣແກຣມ {{escape}} {{programName}}" msgid "Program not found" -msgstr "" +msgstr "ບໍ່ພົບໂປຣແກຣມ" msgid "Program is not a tracker program" -msgstr "" +msgstr "ໂປແກຣມນີ້ບໍ່ແມ່ນໂປແກຣມຕິດຕາມ" msgid "Error saving event" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກເຫດການ" msgid "Could not save event" -msgstr "" +msgstr "ບໍ່ສາມາດບັນທຶກເຫດການໄດ້" msgid "Could not delete event" -msgstr "" +msgstr "ບໍ່ສາມາດລົບເຫດການໄດ້" msgid "Could not save working list" -msgstr "" +msgstr "ບໍ່ສາມາດບັນທຶກລາຍຊື່ການເຮັດວຽກໄດ້" msgid "Could not add working list" -msgstr "" +msgstr "ບໍ່ສາມາດເພີ່ມລາຍຊື່ການເຮັດວຽກໄດ້" msgid "Could not delete working list" -msgstr "" +msgstr "ບໍ່ສາມາດລົບລາຍຊື່ການເຮັດວຽກໄດ້" msgid "Organisation unit search failed." -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການຄົ້ນຫາຫົວໜ່ວຍການຈັດຕັ້ງ" msgid "Error saving tracked entity instance" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກການຕິດຕາມລາຍບຸກຄົນ" msgid "Error saving enrollment" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກການລົງທະບຽນ" msgid "Error saving the enrollment event" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການບັນທຶກການລົງທະບຽນເຫດການ" msgid "Error deleting the enrollment event" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການລົບການລົງທະບຽນເຫດການ" msgid "Error editing the event, the changes made were not saved" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການແກ້ໄຂເຫດການ, ການປ່ຽນແປງທີ່ເຮັດບໍ່ໄດ້ມີການບັນທຶກ" msgid "Error updating the Assignee" -msgstr "" +msgstr "ເກີດຄວາມຜິດພາດໃນການອັບເດດຜູ້ຮັບຜິດຊອບ" msgid "Set coordinate" msgstr "ຕັ້ງຄ່າເສັ້ນສະແດງ" msgid "Time" -msgstr "" +msgstr "ເວລາ" msgid "From date" msgstr "From date" msgid "From time" -msgstr "" +msgstr "ຈາກເວລາ" msgid "To date" msgstr "ເຖີງວັນທີ່" msgid "To time" -msgstr "" +msgstr "ເຖິງເວລາ" msgid "Page {{currentPage}}" -msgstr "" +msgstr "ໜ້າ {{currentPage}}" msgid "Area on map saved" -msgstr "" +msgstr "ບັນທຶກພື້ນທີ່ໃນແຜນທີ່ແລ້ວ" msgid "Compatibility mode" -msgstr "" +msgstr "ຮູບແບບຄວາມເຂົ້າກັນໄດ້" diff --git a/i18n/my.po b/i18n/my.po index c244ccbdf3..5bc6407800 100644 --- a/i18n/my.po +++ b/i18n/my.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Burmese (https://app.transifex.com/hisp-uio/teams/100509/my/)\n" @@ -479,18 +479,6 @@ msgstr "" msgid "Yes" msgstr "Yes" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "နှစ်များ" - -msgid "Months" -msgstr "လများ" - -msgid "Days" -msgstr "" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1455,22 +1446,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/nb.po b/i18n/nb.po index 9577fef16d..12080b29b7 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Caroline Hesthagen Holen , 2024\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" @@ -496,18 +496,6 @@ msgstr "Inneholder tekst" msgid "Yes" msgstr "Ja" -msgid "mm/dd/yyyy" -msgstr "mm/dd/yyyy" - -msgid "Years" -msgstr "År" - -msgid "Months" -msgstr "Måneder" - -msgid "Days" -msgstr "Dager" - msgid "Uploading file" msgstr "Laster opp fil" @@ -1362,6 +1350,9 @@ msgstr "Planlagt dato kan ikke endres for {{ eventStatus }} hendelser" msgid "Event completed" msgstr "Hendelse fullført" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Tilbake til alle faser og hendelser" @@ -1522,6 +1513,12 @@ msgstr "Rapporteringsdato" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "Denne fasen kan bare ha en hendelse" + msgid "New {{ eventName }} event" msgstr "Ny {{ eventName }} hendelse" @@ -1531,15 +1528,9 @@ msgstr "For å åpne denne hendelsen, vennligst vent til lagringen er fullført" msgid "Show {{ rest }} more" msgstr "Vis {{ rest }} flere" -msgid "Reset list" -msgstr "Nullstill liste" - msgid "Go to full {{ eventName }}" msgstr "Gå til hele {{ eventName }}" -msgid "This stage can only have one event" -msgstr "Denne fasen kan bare ha en hendelse" - msgid "Events could not be retrieved. Please try again later." msgstr "Hendelser kunne ikke hentes. Prøv igjen senere." diff --git a/i18n/nl.po b/i18n/nl.po index 1af9d52450..05303720b5 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -1372,6 +1372,9 @@ msgstr "" msgid "Event completed" msgstr "Evenement voltooid" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Terug naar alle stadium en evenementen" @@ -1551,9 +1554,6 @@ msgstr "Wacht tot het opslaan is voltooid om dit evenement te openen" msgid "Show {{ rest }} more" msgstr "Toon {{ rest }} meer" -msgid "Reset list" -msgstr "Lijst resetten" - msgid "Go to full {{ eventName }}" msgstr "Ga naar volledige {{ eventName }}" diff --git a/i18n/prs.po b/i18n/prs.po index 14e21b32d3..e8fcb7ddf2 100644 --- a/i18n/prs.po +++ b/i18n/prs.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Persian (Afghanistan) (https://app.transifex.com/hisp-uio/teams/100509/fa_AF/)\n" @@ -477,18 +477,6 @@ msgstr "" msgid "Yes" msgstr "بلی" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "سالانه" - -msgid "Months" -msgstr "ماه ها" - -msgid "Days" -msgstr "روزها" - msgid "Uploading file" msgstr "" @@ -1305,6 +1293,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1456,22 +1447,22 @@ msgstr "تاریخ گزارش" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ps.po b/i18n/ps.po index 419cc4b400..ada1358d93 100644 --- a/i18n/ps.po +++ b/i18n/ps.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Pashto (https://app.transifex.com/hisp-uio/teams/100509/ps/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "هو [ درست ]" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "کلونه" - -msgid "Months" -msgstr "میاشت" - -msgid "Days" -msgstr "ورځې" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1457,22 +1448,22 @@ msgstr "د راپور نېټه" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/pt.po b/i18n/pt.po index 81fb7ab3b9..c7c2353c06 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Portuguese (https://app.transifex.com/hisp-uio/teams/100509/pt/)\n" @@ -505,18 +505,6 @@ msgstr "Contém texto" msgid "Yes" msgstr "sim" -msgid "mm/dd/yyyy" -msgstr "mm/dd/aaaa" - -msgid "Years" -msgstr "Anos" - -msgid "Months" -msgstr "Meses" - -msgid "Days" -msgstr "Dias" - msgid "Uploading file" msgstr "Carregando arquivo" @@ -1380,6 +1368,9 @@ msgstr "A data agendada não pode ser alterada para eventos {{ eventStatus }}" msgid "Event completed" msgstr "Evento concluído" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Voltar para todos os palcos e eventos" @@ -1543,6 +1534,12 @@ msgstr "Data do relatório" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "Esta etapa só pode ter um evento" + msgid "New {{ eventName }} event" msgstr "Novo evento de {{ eventName }}" @@ -1553,15 +1550,9 @@ msgstr "" msgid "Show {{ rest }} more" msgstr "Mostrar mais {{ rest }}" -msgid "Reset list" -msgstr "Reiniciar lista" - msgid "Go to full {{ eventName }}" msgstr "Vá para o {{ eventName }} completo" -msgid "This stage can only have one event" -msgstr "Esta etapa só pode ter um evento" - msgid "Events could not be retrieved. Please try again later." msgstr "" "Os eventos não puderam ser recuperados. Por favor, tente novamente mais " diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po index 59779dc49f..b968595bfc 100644 --- a/i18n/pt_BR.po +++ b/i18n/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Portuguese (Brazil) (https://app.transifex.com/hisp-uio/teams/100509/pt_BR/)\n" @@ -481,18 +481,6 @@ msgstr "" msgid "Yes" msgstr "Sim" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Anos" - -msgid "Months" -msgstr "Meses" - -msgid "Days" -msgstr "Dias" - msgid "Uploading file" msgstr "" @@ -1310,6 +1298,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1463,22 +1454,22 @@ msgstr "Data do relatório" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ro.po b/i18n/ro.po index 3b2ff70faf..310d3bc638 100644 --- a/i18n/ro.po +++ b/i18n/ro.po @@ -1315,6 +1315,9 @@ msgstr "" msgid "Event completed" msgstr "Eveniment finalizat" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Înapoi la toate etapele și evenimentele" @@ -1484,9 +1487,6 @@ msgstr "" msgid "Show {{ rest }} more" msgstr "" -msgid "Reset list" -msgstr "Resetare listă" - msgid "Go to full {{ eventName }}" msgstr "Accesare {{ eventName }} complet" diff --git a/i18n/ru.po b/i18n/ru.po index 39bdd2d94b..cfd4926b7f 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Russian (https://app.transifex.com/hisp-uio/teams/100509/ru/)\n" @@ -503,18 +503,6 @@ msgstr "Содержит текст" msgid "Yes" msgstr "Да" -msgid "mm/dd/yyyy" -msgstr "мм/дд/гггг" - -msgid "Years" -msgstr "Годы" - -msgid "Months" -msgstr "Месяцы" - -msgid "Days" -msgstr "Дни" - msgid "Uploading file" msgstr "Загрузка файла" @@ -1397,6 +1385,9 @@ msgstr "" msgid "Event completed" msgstr "Событие завершено" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "Обратно ко всем этапам и событиям" @@ -1578,6 +1569,12 @@ msgstr "Дата отчета" msgid "Please select a valid event" msgstr "Выберите действительное событие" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "Данный этап позволяет создать только одно событие" + msgid "New {{ eventName }} event" msgstr "Новое событие {{ eventName }} " @@ -1587,15 +1584,9 @@ msgstr "Чтобы открыть это событие, дождитесь за msgid "Show {{ rest }} more" msgstr "Показать {{ rest }} подробнее" -msgid "Reset list" -msgstr "Сброс списка" - msgid "Go to full {{ eventName }}" msgstr "Перейти к полной версии события {{ eventName }}" -msgid "This stage can only have one event" -msgstr "Данный этап позволяет создать только одно событие" - msgid "Events could not be retrieved. Please try again later." msgstr "Не удалось загрузить события. Повторите попытку позже." diff --git a/i18n/sv.po b/i18n/sv.po index 9113f74852..62edd96eb5 100644 --- a/i18n/sv.po +++ b/i18n/sv.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Swedish (https://app.transifex.com/hisp-uio/teams/100509/sv/)\n" @@ -39,6 +39,9 @@ msgid "" "again, but be aware that this will close other versions." msgstr "" +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "" @@ -361,16 +364,10 @@ msgstr "" msgid "validation failed" msgstr "" -msgid "Errors" +msgid "No feedback for this event yet" msgstr "" -msgid "Feedback" -msgstr "Återkoppling" - -msgid "Indicators" -msgstr "indikatorer" - -msgid "Warnings" +msgid "No indicator output for this event yet" msgstr "" msgid "Generate new event" @@ -483,18 +480,6 @@ msgstr "" msgid "Yes" msgstr "Ja" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "År" - -msgid "Months" -msgstr "Månader" - -msgid "Days" -msgstr "Dagar" - msgid "Uploading file" msgstr "" @@ -561,6 +546,9 @@ msgstr "" msgid "Column" msgstr "" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "Uppdatera" @@ -768,12 +756,6 @@ msgstr "" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "" @@ -804,6 +786,11 @@ msgstr "Skede" msgid "Registered events" msgstr "" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "" @@ -917,6 +904,18 @@ msgid "" "relationship" msgstr "" +msgid "Errors" +msgstr "" + +msgid "Feedback" +msgstr "Återkoppling" + +msgid "Indicators" +msgstr "indikatorer" + +msgid "Warnings" +msgstr "" + msgid "Show all events" msgstr "" @@ -958,6 +957,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "" @@ -1237,9 +1242,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "Avbruten" @@ -1294,6 +1296,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1445,22 +1450,22 @@ msgstr "Rapportdatum" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1480,6 +1485,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "Schemalagd" + msgid "Changelog" msgstr "" @@ -1645,9 +1659,6 @@ msgstr "" msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "Schemalagd" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/tet.po b/i18n/tet.po index 844f679277..719938fd39 100644 --- a/i18n/tet.po +++ b/i18n/tet.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-28T11:23:02.970Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Tetum (Tetun) (https://app.transifex.com/hisp-uio/teams/100509/tet/)\n" @@ -37,6 +37,9 @@ msgid "" "again, but be aware that this will close other versions." msgstr "" +msgid "More" +msgstr "" + msgid "View {{programName}} dashboard" msgstr "" @@ -358,16 +361,10 @@ msgstr "" msgid "validation failed" msgstr "" -msgid "Errors" +msgid "No feedback for this event yet" msgstr "" -msgid "Feedback" -msgstr "Feedback" - -msgid "Indicators" -msgstr "Indikadores" - -msgid "Warnings" +msgid "No indicator output for this event yet" msgstr "" msgid "Generate new event" @@ -480,18 +477,6 @@ msgstr "" msgid "Yes" msgstr "Sim" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Tinan" - -msgid "Months" -msgstr "Fulan" - -msgid "Days" -msgstr "" - msgid "Uploading file" msgstr "" @@ -558,6 +543,9 @@ msgstr "" msgid "Column" msgstr "Koluna" +msgid "Visible" +msgstr "" + msgid "Update" msgstr "Atualiza" @@ -765,12 +753,6 @@ msgstr "" msgid "Choose an organisation unit to start reporting" msgstr "" -msgid "No feedback for this event yet" -msgstr "" - -msgid "No indicator output for this event yet" -msgstr "" - msgid "Program stage is invalid" msgstr "" @@ -801,6 +783,11 @@ msgstr "" msgid "Registered events" msgstr "" +msgid "" +"The category option is not valid for the selected organisation unit. Please " +"select a valid combination." +msgstr "" + msgid "Please select {{category}}." msgstr "" @@ -914,6 +901,18 @@ msgid "" "relationship" msgstr "" +msgid "Errors" +msgstr "" + +msgid "Feedback" +msgstr "Feedback" + +msgid "Indicators" +msgstr "Indikadores" + +msgid "Warnings" +msgstr "" + msgid "Show all events" msgstr "" @@ -954,6 +953,12 @@ msgstr "" msgid "The enrollment event data could not be found" msgstr "" +msgid "Loading" +msgstr "" + +msgid "An error occurred while loading the form" +msgstr "" + msgid "Possible duplicates found" msgstr "" @@ -1233,9 +1238,6 @@ msgstr "" msgid "Owned by {{ownerOrgUnit}}" msgstr "" -msgid "Last updated {{date}}" -msgstr "" - msgid "Cancelled" msgstr "" @@ -1290,6 +1292,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1439,22 +1444,22 @@ msgstr "" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." @@ -1473,6 +1478,15 @@ msgstr "" msgid "Stages and Events" msgstr "" +msgid "An error occurred while loading the widget." +msgstr "" + +msgid "View linked event" +msgstr "" + +msgid "Scheduled" +msgstr "" + msgid "Changelog" msgstr "" @@ -1638,9 +1652,6 @@ msgstr "" msgid "Scheduled{{ escape }} due {{ time }}" msgstr "" -msgid "Scheduled" -msgstr "" - msgid "Overdue{{ escape }} due {{ time }}" msgstr "" diff --git a/i18n/tg.po b/i18n/tg.po index d3195081c7..1346766a62 100644 --- a/i18n/tg.po +++ b/i18n/tg.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Tajik (https://app.transifex.com/hisp-uio/teams/100509/tg/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "Ҳа" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Солҳо" - -msgid "Months" -msgstr "Моҳҳо" - -msgid "Days" -msgstr "" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1457,22 +1448,22 @@ msgstr "Санаи ҳисобот" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/uk.po b/i18n/uk.po index 382b45618d..dd5ad8b73b 100644 --- a/i18n/uk.po +++ b/i18n/uk.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Ukrainian (https://app.transifex.com/hisp-uio/teams/100509/uk/)\n" @@ -483,18 +483,6 @@ msgstr "" msgid "Yes" msgstr "Так" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "Роки" - -msgid "Months" -msgstr "Місяці" - -msgid "Days" -msgstr "Дні" - msgid "Uploading file" msgstr "" @@ -1313,6 +1301,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1468,22 +1459,22 @@ msgstr "Дата звіту" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/ur.po b/i18n/ur.po index 8e95fe396d..69cec58a92 100644 --- a/i18n/ur.po +++ b/i18n/ur.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Urdu (https://app.transifex.com/hisp-uio/teams/100509/ur/)\n" @@ -478,18 +478,6 @@ msgstr "" msgid "Yes" msgstr "ہاں" -msgid "mm/dd/yyyy" -msgstr "" - -msgid "Years" -msgstr "سال" - -msgid "Months" -msgstr "مہینے" - -msgid "Days" -msgstr "دن" - msgid "Uploading file" msgstr "" @@ -1306,6 +1294,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1457,22 +1448,22 @@ msgstr "رپورٹ کی تاریخ" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/uz_UZ_Cyrl.po b/i18n/uz_UZ_Cyrl.po index cd49eaf87b..96a05d6a51 100644 --- a/i18n/uz_UZ_Cyrl.po +++ b/i18n/uz_UZ_Cyrl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Khurshid Ibatov , 2024\n" "Language-Team: Uzbek (Cyrillic) (https://app.transifex.com/hisp-uio/teams/100509/uz@Cyrl/)\n" @@ -496,18 +496,6 @@ msgstr "Матнни ўз ичига олади" msgid "Yes" msgstr "Ҳа" -msgid "mm/dd/yyyy" -msgstr "кун/ой/йил" - -msgid "Years" -msgstr "Йиллар" - -msgid "Months" -msgstr "Ойлар" - -msgid "Days" -msgstr "Кунлар" - msgid "Uploading file" msgstr "Файл юкланмоқда" @@ -1341,6 +1329,9 @@ msgstr "" msgid "Event completed" msgstr "Ҳодиса/тадбир якунланди" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1491,22 +1482,22 @@ msgstr "Ҳисобот санаси" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/uz_UZ_Latn.po b/i18n/uz_UZ_Latn.po index 3c876c6abd..217bfb6e90 100644 --- a/i18n/uz_UZ_Latn.po +++ b/i18n/uz_UZ_Latn.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Yury Rogachev , 2024\n" "Language-Team: Uzbek (Latin) (https://app.transifex.com/hisp-uio/teams/100509/uz@Latn/)\n" @@ -496,18 +496,6 @@ msgstr "Matnni oʼz ichiga oladi" msgid "Yes" msgstr "Ha" -msgid "mm/dd/yyyy" -msgstr "kun/oy/yil" - -msgid "Years" -msgstr "Yillar" - -msgid "Months" -msgstr "Oylar" - -msgid "Days" -msgstr "Kunlar" - msgid "Uploading file" msgstr "Fayl yuklanmoqda" @@ -1330,6 +1318,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1479,22 +1470,22 @@ msgstr "Hisobot sanasi" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/vi.po b/i18n/vi.po index f4fdf8ca07..6df6022cce 100644 --- a/i18n/vi.po +++ b/i18n/vi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Vietnamese (https://app.transifex.com/hisp-uio/teams/100509/vi/)\n" @@ -493,18 +493,6 @@ msgstr "Chứa văn bản" msgid "Yes" msgstr "Có" -msgid "mm/dd/yyyy" -msgstr "mm / dd / yyyy" - -msgid "Years" -msgstr "Năm" - -msgid "Months" -msgstr "Tháng" - -msgid "Days" -msgstr "Ngày" - msgid "Uploading file" msgstr "Đang tải tập tin lên" @@ -1328,6 +1316,9 @@ msgstr "" msgid "Event completed" msgstr "" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1477,22 +1468,22 @@ msgstr "Ngày báo cáo" msgid "Please select a valid event" msgstr "" -msgid "New {{ eventName }} event" +msgid "You do not have access to create events in this stage" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "This stage can only have one event" msgstr "" -msgid "Show {{ rest }} more" +msgid "New {{ eventName }} event" msgstr "" -msgid "Reset list" +msgid "To open this event, please wait until saving is complete" msgstr "" -msgid "Go to full {{ eventName }}" +msgid "Show {{ rest }} more" msgstr "" -msgid "This stage can only have one event" +msgid "Go to full {{ eventName }}" msgstr "" msgid "Events could not be retrieved. Please try again later." diff --git a/i18n/zh.po b/i18n/zh.po index 8058b5a3eb..a5216b482f 100644 --- a/i18n/zh.po +++ b/i18n/zh.po @@ -1301,6 +1301,9 @@ msgstr "无法更改 {{ eventStatus }} 事件的预定日期" msgid "Event completed" msgstr "事件完成" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "回到所有阶段和事件" @@ -1467,9 +1470,6 @@ msgstr "要打开此活动,请等待保存完成" msgid "Show {{ rest }} more" msgstr "显示 {{ rest }} 更多" -msgid "Reset list" -msgstr "重置列表" - msgid "Go to full {{ eventName }}" msgstr "转到完整的{{ eventName }}" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index 29a3101e26..a23db1a424 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-08T11:49:13.423Z\n" +"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: 晓东 林 <13981924470@126.com>, 2024\n" "Language-Team: Chinese (China) (https://app.transifex.com/hisp-uio/teams/100509/zh_CN/)\n" @@ -480,18 +480,6 @@ msgstr "包含文本" msgid "Yes" msgstr "是" -msgid "mm/dd/yyyy" -msgstr "mm/dd/yyyy" - -msgid "Years" -msgstr "年" - -msgid "Months" -msgstr "月" - -msgid "Days" -msgstr "天" - msgid "Uploading file" msgstr "上传文件" @@ -1312,6 +1300,9 @@ msgstr "无法更改 {{ eventStatus }} 事件的预定日期" msgid "Event completed" msgstr "事件完成" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "回到所有阶段和事件" @@ -1461,6 +1452,12 @@ msgstr "报告日期" msgid "Please select a valid event" msgstr "" +msgid "You do not have access to create events in this stage" +msgstr "" + +msgid "This stage can only have one event" +msgstr "这个阶段只能有一个事件" + msgid "New {{ eventName }} event" msgstr "新的 {{ eventName }} 事件" @@ -1470,15 +1467,9 @@ msgstr "要打开此活动,请等待保存完成" msgid "Show {{ rest }} more" msgstr "显示 {{ rest }} 更多" -msgid "Reset list" -msgstr "重置列表" - msgid "Go to full {{ eventName }}" msgstr "转到完整的{{ eventName }}" -msgid "This stage can only have one event" -msgstr "这个阶段只能有一个事件" - msgid "Events could not be retrieved. Please try again later." msgstr "无法检索事件。请稍后再试。" From e8b9593559192710980e29dd7e10be5d95b9aa6e Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Sun, 1 Sep 2024 01:49:55 +0000 Subject: [PATCH 02/20] chore(release): cut 101.3.2 [skip release] ## [101.3.2](https://github.com/dhis2/capture-app/compare/v101.3.1...v101.3.2) (2024-09-01) ### Bug Fixes * **translations:** sync translations from transifex (master) ([3dfd424](https://github.com/dhis2/capture-app/commit/3dfd4240ad9d5ef4512b283dc222eb54891aa896)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c354b0a76..3ce973047b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [101.3.2](https://github.com/dhis2/capture-app/compare/v101.3.1...v101.3.2) (2024-09-01) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([3dfd424](https://github.com/dhis2/capture-app/commit/3dfd4240ad9d5ef4512b283dc222eb54891aa896)) + ## [101.3.1](https://github.com/dhis2/capture-app/compare/v101.3.0...v101.3.1) (2024-08-29) diff --git a/package.json b/package.json index a8dc5d72ca..d392f8367a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.3.1", + "version": "101.3.2", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.3.1", + "@dhis2/rules-engine-javascript": "101.3.2", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index 9ff5cf689d..c31500497a 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.3.1", + "version": "101.3.2", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From cd06e414fc2162397f3844887e1b3f902d18a874 Mon Sep 17 00:00:00 2001 From: Tony Valle <79843014+superskip@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:54:06 +0200 Subject: [PATCH 03/20] fix: [DHIS2-17971] trigger program stage specific rules on opening new event page (#3776) --- .../common/ProgramStage/buildProgramStageMetadata.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core_modules/capture-core/components/DataEntries/common/ProgramStage/buildProgramStageMetadata.js b/src/core_modules/capture-core/components/DataEntries/common/ProgramStage/buildProgramStageMetadata.js index 8c3977382e..dbebc546bb 100644 --- a/src/core_modules/capture-core/components/DataEntries/common/ProgramStage/buildProgramStageMetadata.js +++ b/src/core_modules/capture-core/components/DataEntries/common/ProgramStage/buildProgramStageMetadata.js @@ -28,6 +28,9 @@ export const buildProgramStageMetadata = async ({ const storageController = getUserStorageController(); const cachedRelationshipTypes = await storageController.getAll(userStores.RELATIONSHIP_TYPES); + const cachedProgramRules = await storageController.getAll(userStores.PROGRAM_RULES, { + predicate: rule => rule.programStageId === cachedProgramStage.id, + }); const programStageFactory = new ProgramStageFactory({ cachedOptionSets: new Map(cachedOptionSets.map(optionSet => [optionSet.id, optionSet])), @@ -41,5 +44,8 @@ export const buildProgramStageMetadata = async ({ return programStageFactory.build( cachedProgramStage, programId, - ); + ).then((stage) => { + stage.programRules = cachedProgramRules; + return stage; + }); }; From 325c63887f7e6cddd35944f0a70ea494042f4634 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Mon, 2 Sep 2024 10:59:29 +0000 Subject: [PATCH 04/20] chore(release): cut 101.3.3 [skip release] ## [101.3.3](https://github.com/dhis2/capture-app/compare/v101.3.2...v101.3.3) (2024-09-02) ### Bug Fixes * [DHIS2-17971] trigger program stage specific rules on opening new event page ([#3776](https://github.com/dhis2/capture-app/issues/3776)) ([cd06e41](https://github.com/dhis2/capture-app/commit/cd06e414fc2162397f3844887e1b3f902d18a874)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ce973047b..5182a15d63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [101.3.3](https://github.com/dhis2/capture-app/compare/v101.3.2...v101.3.3) (2024-09-02) + + +### Bug Fixes + +* [DHIS2-17971] trigger program stage specific rules on opening new event page ([#3776](https://github.com/dhis2/capture-app/issues/3776)) ([cd06e41](https://github.com/dhis2/capture-app/commit/cd06e414fc2162397f3844887e1b3f902d18a874)) + ## [101.3.2](https://github.com/dhis2/capture-app/compare/v101.3.1...v101.3.2) (2024-09-01) diff --git a/package.json b/package.json index d392f8367a..dc54a5992a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.3.2", + "version": "101.3.3", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.3.2", + "@dhis2/rules-engine-javascript": "101.3.3", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index c31500497a..fd771bc637 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.3.2", + "version": "101.3.3", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From fb793cc695c6ac28ee6c8e7de6a670503f8b2394 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:02:46 +0200 Subject: [PATCH 05/20] chore(deps): bump actions/download-artifact from 2 to 4.1.7 in /.github/workflows (#3784) chore(deps): bump actions/download-artifact in /.github/workflows Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2 to 4.1.7. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v2...v4.1.7) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/verify-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify-app.yml b/.github/workflows/verify-app.yml index c8a7d22379..6b577c7a87 100644 --- a/.github/workflows/verify-app.yml +++ b/.github/workflows/verify-app.yml @@ -214,7 +214,7 @@ jobs: with: node-version: 18.x - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v4.1.7 with: name: app-build From 12af1384f4ab4e9c6eeef2460bee7d53bfb6b8cc Mon Sep 17 00:00:00 2001 From: Eirik Haugstulen Date: Fri, 6 Sep 2024 09:18:58 +0200 Subject: [PATCH 06/20] feat: [DHIS2-17878][DHIS2-17048] Add overflow menu with actions to stages&events (#3756) * feat: add overflow menu with actions * fix: review comments * fix: pr-comments * chore: cypress tests --- .../StagesAndEventsWidget.feature | 29 ++++- .../StagesAndEventsWidget.js | 88 +++++++++++++- i18n/en.pot | 19 +++ .../Buttons/OverflowButton.component.js | 7 +- .../EnrollmentPageDefault.container.js | 27 +++++ .../LayoutComponentConfig.js | 6 + .../enrollment.actions.js | 12 ++ .../useCommonEnrollmentDomainData.js | 44 +++---- .../DeleteActionButton/DeleteActionButton.js | 30 +++++ .../EventRow/DeleteActionButton/index.js | 3 + .../DeleteActionModal/DeleteActionModal.js | 114 ++++++++++++++++++ .../EventRow/DeleteActionModal/index.js | 3 + .../Stage/StageDetail/EventRow/EventRow.js | 111 +++++++++++++++++ .../StageDetail/EventRow/EventRow.types.js | 17 +++ .../EventRow/SkipAction/SkipAction.js | 89 ++++++++++++++ .../StageDetail/EventRow/SkipAction/index.js | 3 + .../Stage/StageDetail/EventRow/index.js | 3 + .../StageDetail/StageDetail.component.js | 40 ++++-- .../Stage/StageDetail/stageDetail.types.js | 6 +- .../Stages/Stage/stage.types.js | 3 + .../Stages/stages.types.js | 6 + .../stagesAndEvents.types.js | 3 + .../enrollmentDomain.reducerDescription.js | 15 +++ 23 files changed, 633 insertions(+), 45 deletions(-) create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionButton/DeleteActionButton.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionButton/index.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/DeleteActionModal.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js create mode 100644 src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js diff --git a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature index 07387fcde5..e944741b2f 100644 --- a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature +++ b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.feature @@ -1,9 +1,5 @@ Feature: User interacts with Stages and Events Widget - @user:trackerAutoTestRestricted - Scenario: Create new event button is disabled if no data write access - Given you open the enrollment page by typing #enrollment?enrollmentId=WKPoiZxZxNG&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&teiId=PgmUFEQYZdt - Then you should see the disabled button New Previous deliveries event Scenario: User can view program stages Given you open the enrollment page @@ -57,13 +53,36 @@ Feature: User interacts with Stages and Events Widget When you click New First antenatal care visit event Then you should navigate to Add new page #/enrollmentEventNew?enrollmentId=ek4WWAgXX5i&orgUnitId=DwpbWkiqjMy&programId=WSGAb5XwJ3Y&stageId=WZbXY0S00lP&teiId=yFcOhsM1Yoa - Scenario: User can not go to Add new page if stage is not repeatable and there is event in the stage Given you open the enrollment page by typing #enrollment?programId=IpHINAT79UW&orgUnitId=UgYg0YW7ZIh&teiId=fhFQhO0xILJ&enrollmentId=gPDueU02tn8 Then you should see the disabled button New Birth event + Scenario: User can skip a scheduled event + Given you open the enrollment page by typing #/enrollment?enrollmentId=gL8BooqKhdX&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=RABlFsj5Omi + And there is an Overdue event in the TB visit stage + When you click the Skip event overflow button on the Overdue event + Then the event should be skipped + + Scenario: User can unskip a scheduled event + Given you open the enrollment page by typing #/enrollment?enrollmentId=gL8BooqKhdX&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=RABlFsj5Omi + And there is an Skipped event in the TB visit stage + When you click the Unskip event overflow button on the Skipped event + Then there is an Overdue event in the TB visit stage + + @with-restore-deleted-event + Scenario: User can delete an event + Given you open the enrollment page by typing #/enrollment?enrollmentId=ikYMpSKXik1&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=Trc1H9T5C6f + And there is an Active event in the TB visit stage + When you click the Delete event overflow button on the Active event + And you confirm you want to delete the event + Then the TB visit stage should be empty + @user:trackerAutoTestRestricted Scenario: Program stage is hidden if no data read access And you open the enrollment page by typing #enrollment?enrollmentId=iNEq9d22Nyp&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&teiId=k4ODejBytgv Then the Care at birth program stage should be hidden + @user:trackerAutoTestRestricted + Scenario: Create new event button is disabled if no data write access + Given you open the enrollment page by typing #enrollment?enrollmentId=WKPoiZxZxNG&orgUnitId=DiszpKrYNg8&programId=WSGAb5XwJ3Y&teiId=PgmUFEQYZdt + Then you should see the disabled button New Previous deliveries event diff --git a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js index d772f41034..d4771a8876 100644 --- a/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js +++ b/cypress/e2e/EnrollmentPage/StagesAndEventsWidget/StagesAndEventsWidget.js @@ -1,7 +1,38 @@ -import { Given, When, Then, defineStep as And } from '@badeball/cypress-cucumber-preprocessor'; +import { Given, When, Then, defineStep as And, After } from '@badeball/cypress-cucumber-preprocessor'; import { getCurrentYear } from '../../../support/date'; import '../sharedSteps'; +After({ tags: '@with-restore-deleted-event' }, () => { + cy.visit('#/enrollment?enrollmentId=ikYMpSKXik1&orgUnitId=DiszpKrYNg8&programId=ur1Edk5Oe2n&teiId=Trc1H9T5C6f'); + + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="create-new-button"]') + .click(); + + cy.get('[data-test="capture-ui-input"]') + .first() + .type('2023-01-26') + .blur(); + + cy.get('[data-test="virtualized-select"]') + .eq(0) + .click() + .contains('P+') + .click(); + + cy.get('[data-test="virtualized-select"]') + .eq(1) + .click() + .contains('New') + .click(); + + cy.get('[data-test="dhis2-uicore-button"]') + .contains('Save without completing') + .click(); +}); + Then('the program stages should be displayed', () => { cy.get('[data-test="stages-and-events-widget"]') .within(() => { @@ -162,3 +193,58 @@ Then('the Care at birth program stage should be hidden', () => { cy.contains('[data-test="stages-and-events-widget"]', 'Postpartum care visit').should('exist'); cy.contains('[data-test="stages-and-events-widget"]', 'Care at birth').should('not.exist'); }); + +Given(/there is an (.*) event in the TB visit stage$/, (eventStatus) => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .within(() => { + cy.get('[data-test="dhis2-uicore-datatablerow"]') + .contains(eventStatus); + }); +}); + +When(/you click the (.*) event overflow button on the (.*) event$/, (buttonName, eventStatus) => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="dhis2-uicore-tablebody"]') + .contains('tr', eventStatus) + .find('[data-test="overflow-button"]') + .click({ force: true }); + + cy.get('[data-test="overflow-menu"]') + .contains(buttonName) + .click(); +}); + +Then('the event should be skipped', () => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="dhis2-uicore-datatablerow"]') + .contains('Skipped'); +}); + +Then('the TB visit stage should be empty', () => { + cy.get('[data-test="stages-and-events-widget"]') + .find('[data-test="widget-contents"]') + .contains('[data-test="stage-content"]', 'TB visit') + .find('[data-test="dhis2-uicore-datatablerow"]') + .should('not.exist'); +}); + +When('you confirm you want to delete the event', () => { + cy.intercept('POST', '**/tracker?async=false&importStrategy=DELETE') + .as('deleteEvent'); + + cy.get('[data-test="dhis2-uicore-modal"]').within(() => { + cy.contains('button', 'Yes, delete event') + .click(); + }); + + cy.wait('@deleteEvent') + .its('response.statusCode') + .should('eq', 200); +}); + diff --git a/i18n/en.pot b/i18n/en.pot index 25f3a5987a..cae303cf0b 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -1508,6 +1508,25 @@ msgstr "This stage can only have one event" msgid "New {{ eventName }} event" msgstr "New {{ eventName }} event" +msgid "An error occurred while deleting the event" +msgstr "An error occurred while deleting the event" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" + +msgid "An error occurred when updating event status" +msgstr "An error occurred when updating event status" + +msgid "Unskip" +msgstr "Unskip" + +msgid "Skip" +msgstr "Skip" + msgid "To open this event, please wait until saving is complete" msgstr "To open this event, please wait until saving is complete" diff --git a/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js b/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js index 5f20a47c92..57e99a125e 100644 --- a/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js +++ b/src/core_modules/capture-core/components/Buttons/OverflowButton.component.js @@ -1,7 +1,7 @@ // @flow import * as React from 'react'; -import i18n from '@dhis2/d2-i18n'; import { useRef, useState } from 'react'; +import i18n from '@dhis2/d2-i18n'; import { Button, Layer, Popper } from '@dhis2/ui'; type Props = { @@ -15,6 +15,7 @@ type Props = { dataTest?: string, small?: boolean, large?: boolean, + disabled?: boolean, }; export const OverflowButton = ({ @@ -23,6 +24,7 @@ export const OverflowButton = ({ secondary, small, large, + disabled, onClick: handleClick, open: propsOpen, icon, @@ -43,10 +45,11 @@ export const OverflowButton = ({ return (
+ + + + + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js new file mode 100644 index 0000000000..f288fff5b2 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/DeleteActionModal/index.js @@ -0,0 +1,3 @@ +// @flow + +export { DeleteActionModal } from './DeleteActionModal'; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js new file mode 100644 index 0000000000..1f8ba00e56 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.js @@ -0,0 +1,111 @@ +// @flow +import React, { useState } from 'react'; +import { withStyles } from '@material-ui/core/'; +import { + DataTableCell, + DataTableRow, + FlyoutMenu, + IconMore16, +} from '@dhis2/ui'; +import { OverflowButton } from '../../../../../Buttons'; +import type { EventRowProps } from './EventRow.types'; +import { DeleteActionButton } from './DeleteActionButton'; +import { SkipAction } from './SkipAction'; +import { DeleteActionModal } from './DeleteActionModal'; + +const styles = { + row: { + maxWidth: '100%', + whiteSpace: 'nowrap', + cursor: 'pointer', + }, + rowDisabled: { + cursor: 'not-allowed', + opacity: 0.5, + }, +}; + +export const EventStatuses = { + ACTIVE: 'ACTIVE', + COMPLETED: 'COMPLETED', + SKIPPED: 'SKIPPED', + SCHEDULE: 'SCHEDULE', +}; + +const EventRowPlain = ({ + id, + pendingApiResponse, + eventDetails, + cells, + stageWriteAccess, + onDeleteEvent, + onRollbackDeleteEvent, + onUpdateEventStatus, + teiId, + programId, + enrollmentId, + classes, +}: EventRowProps) => { + const [actionsOpen, setActionsOpen] = useState(false); + const [deleteModalOpen, setDeleteModalOpen] = useState(false); + + return ( + + {cells} + + + <> + setActionsOpen(prev => !prev)} + dataTest={'overflow-button'} + secondary + small + icon={} + disabled={pendingApiResponse || !stageWriteAccess} + component={( + + {(eventDetails.status === EventStatuses.SCHEDULE || eventDetails.status === EventStatuses.SKIPPED) && ( + + )} + + + + )} + /> + + {deleteModalOpen && ( + + )} + + + + ); +}; + +export const EventRow = withStyles(styles)(EventRowPlain); diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js new file mode 100644 index 0000000000..d47cc386fc --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/EventRow.types.js @@ -0,0 +1,17 @@ +// @flow + +export type EventRowProps = {| + id: string, + pendingApiResponse: boolean, + eventDetails: ApiEnrollmentEvent, + cells: Array>, + onEventClick: (id: string, options: ?Object) => void, + onDeleteEvent: (id: string) => void, + onUpdateEventStatus: (id: string, status: string) => void, + onRollbackDeleteEvent: (event: ApiEnrollmentEvent) => void, + stageWriteAccess: boolean, + teiId: string, + programId: string, + enrollmentId: string, + ...CssClasses, +|}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js new file mode 100644 index 0000000000..70cd1068b4 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/SkipAction.js @@ -0,0 +1,89 @@ +// @flow +import React from 'react'; +import i18n from '@dhis2/d2-i18n'; +import log from 'loglevel'; +import { + MenuItem, + IconArrowRight16, IconRedo16, +} from '@dhis2/ui'; +import { useMutation } from 'react-query'; +import { useAlert, useDataEngine } from '@dhis2/app-runtime'; +import { EventStatuses } from '../EventRow'; +import { errorCreator } from '../../../../../../../../capture-core-utils'; + +type Props = {| + eventId: string, + eventDetails: ApiEnrollmentEvent, + pendingApiResponse: boolean, + onUpdateEventStatus: (eventId: string, status: string) => void, + setActionsOpen: (open: boolean) => void, +|} + +export const SkipAction = ({ + eventId, + eventDetails, + pendingApiResponse, + setActionsOpen, + onUpdateEventStatus, +}: Props) => { + const dataEngine = useDataEngine(); + const { show: showError } = useAlert( + ({ message }) => message, + { critical: true }, + ); + const { mutate: updateEventStatus } = useMutation( + ({ status }) => dataEngine.mutate({ + resource: 'tracker?async=false&importStrategy=UPDATE', + type: 'create', + data: { + events: [ + { + ...eventDetails, + event: eventId, + status, + }, + ], + }, + }), + { + onMutate: (payload) => { + const status = EventStatuses[payload.status]; + const previousStatus = eventDetails.status; + + status && onUpdateEventStatus(eventId, status); + + return { previousStatus }; + }, + onError: (error, payload, context) => { + showError({ message: i18n.t('An error occurred when updating event status') }); + log.error(errorCreator('An error occurred when updating event status')({ error, payload, context })); + context && onUpdateEventStatus(eventId, context.previousStatus); + }, + }, + ); + + const handleMenuItemClick = (status) => { + setActionsOpen(false); + !pendingApiResponse && updateEventStatus({ status }); + }; + + if (eventDetails.status === EventStatuses.SKIPPED) { + return ( + } + label={i18n.t('Unskip')} + onClick={() => handleMenuItemClick(EventStatuses.SCHEDULE)} + /> + ); + } + + return ( + } + label={i18n.t('Skip')} + onClick={() => handleMenuItemClick(EventStatuses.SKIPPED)} + /> + ); +}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js new file mode 100644 index 0000000000..860c3a51f5 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/SkipAction/index.js @@ -0,0 +1,3 @@ +// @flow + +export { SkipAction } from './SkipAction'; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js new file mode 100644 index 0000000000..acea1793f8 --- /dev/null +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/EventRow/index.js @@ -0,0 +1,3 @@ +// @flow + +export { EventRow } from './EventRow'; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js index 2d1f6dd06d..e36d5f4b16 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/StageDetail.component.js @@ -18,12 +18,15 @@ import { Button, Tooltip, } from '@dhis2/ui'; +import log from 'loglevel'; import { sortDataFromEvent } from './hooks/sortFuntions'; import { StageCreateNewButton } from '../StageCreateNewButton'; import { useComputeDataFromEvent, useComputeHeaderColumn, formatRowForView } from './hooks/useEventList'; import { DEFAULT_NUMBER_OF_ROW, SORT_DIRECTION } from './hooks/constants'; import { getProgramAndStageForProgram } from '../../../../../metaData/helpers'; import type { Props } from './stageDetail.types'; +import { EventRow } from './EventRow'; +import { errorCreator } from '../../../../../../capture-core-utils'; const styles = { @@ -32,10 +35,6 @@ const styles = { whiteSpace: 'nowrap', cursor: 'pointer', }, - rowDisabled: { - cursor: 'not-allowed', - opacity: 0.5, - }, container: { display: 'flex', flexDirection: 'column', @@ -100,10 +99,14 @@ const StageDetailPlain = (props: Props) => { repeatable = false, enableUserAssignment = false, onEventClick, + onDeleteEvent, + onUpdateEventStatus, + onRollbackDeleteEvent, onViewAll, onCreateNew, hiddenProgramStage, - classes } = props; + classes, + } = props; const defaultSortState = { columnName: 'status', sortDirection: SORT_DIRECTION.DESC, @@ -158,6 +161,8 @@ const StageDetailPlain = (props: Props) => { className={classes.row} > {headerCells} + + ); } @@ -205,15 +210,28 @@ const StageDetailPlain = (props: Props) => { )} )); + const eventDetails = events.find(event => event.event === row.id); + if (!eventDetails) { + log.error(errorCreator('Event details not found')({ row })); + return null; + } return ( - - {cells} - + ); }); } diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js index 31d8c79dea..d5a07514d3 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/StageDetail/stageDetail.types.js @@ -1,7 +1,7 @@ // @flow import type { StageDataElement, StageCommonProps } from '../../../types/common.types'; - type ExtractedProps = {| +type ExtractedProps = {| events: Array, dataElements: Array, eventName: string, @@ -9,6 +9,10 @@ import type { StageDataElement, StageCommonProps } from '../../../types/common.t repeatable?: boolean, enableUserAssignment?: boolean, stageId: string, + onCreateNew: (stageId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, hiddenProgramStage?: boolean, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js index d8ce73c7e6..10be4ac00d 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/stage.types.js @@ -7,6 +7,9 @@ type ExtractedProps = {| events: Array, className?: string, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js index 82208aa356..c4ca0b8fd6 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/stages.types.js @@ -5,6 +5,9 @@ export type PlainProps = {| stages: Array, events: Array, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, ...StageCommonProps, ...CssClasses, |}; @@ -13,5 +16,8 @@ export type InputProps = {| stages?: Array, events?: ?Array, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, ...StageCommonProps, |}; diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js index c7e2453f24..5dce9859fb 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/stagesAndEvents.types.js @@ -6,6 +6,9 @@ type ExtractedProps = {| stages?: Array, events: ?Array, onEventClick: (eventId: string) => void, + onDeleteEvent: (eventId: string) => void, + onUpdateEventStatus: (eventId: string, status: string) => void, + onRollbackDeleteEvent: (eventId: ApiEnrollmentEvent) => void, className?: string, |}; diff --git a/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js b/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js index 2eecc8429a..f7ca795289 100644 --- a/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js +++ b/src/core_modules/capture-core/reducers/descriptions/enrollmentDomain.reducerDescription.js @@ -23,6 +23,8 @@ const { COMMIT_ENROLLMENT_EVENTS, ADD_PERSISTED_ENROLLMENT_EVENTS, COMMIT_ENROLLMENT_AND_EVENTS, + DELETE_ENROLLMENT_EVENT, + UPDATE_ENROLLMENT_EVENT_STATUS, } = enrollmentSiteActionTypes; const setAssignee = (state, action) => { @@ -98,6 +100,19 @@ export const enrollmentDomainDesc = createReducerDescription( return { ...state, enrollment: { ...state.enrollment, events } }; }, + [DELETE_ENROLLMENT_EVENT]: (state, { payload: { eventId } }) => { + const events = state.enrollment.events?.filter(event => event.event !== eventId); + return { ...state, enrollment: { ...state.enrollment, events } }; + }, + [UPDATE_ENROLLMENT_EVENT_STATUS]: (state, { payload: { eventId, status, updatedAt } }) => { + const events = state.enrollment.events?.map(event => + (event.event === eventId + ? { ...event, status, updatedAt } + : event), + ); + + return { ...state, enrollment: { ...state.enrollment, events } }; + }, [UPDATE_OR_ADD_ENROLLMENT_EVENTS]: ( state, { payload: { events } }, From 526c2bddbe58b95b4b4c66b262a6fd71f050f3f8 Mon Sep 17 00:00:00 2001 From: Simona Domnisoru Date: Mon, 9 Sep 2024 09:34:03 +0200 Subject: [PATCH 07/20] chore(deps): revert actions/download-artifact from 4.1.7 to 2 in /.github/workflows (#3785) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Revert "chore(deps): bump actions/download-artifact from 2 to 4.1.7 in /.gith…" This reverts commit fb793cc695c6ac28ee6c8e7de6a670503f8b2394. --- .github/workflows/verify-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify-app.yml b/.github/workflows/verify-app.yml index 6b577c7a87..c8a7d22379 100644 --- a/.github/workflows/verify-app.yml +++ b/.github/workflows/verify-app.yml @@ -214,7 +214,7 @@ jobs: with: node-version: 18.x - - uses: actions/download-artifact@v4.1.7 + - uses: actions/download-artifact@v2 with: name: app-build From f6b7f3d89d5d24928a3a8c8c609611950820e272 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Mon, 9 Sep 2024 07:39:10 +0000 Subject: [PATCH 08/20] chore(release): cut 101.4.0 [skip release] # [101.4.0](https://github.com/dhis2/capture-app/compare/v101.3.3...v101.4.0) (2024-09-09) ### Features * [DHIS2-17878][DHIS2-17048] Add overflow menu with actions to stages&events ([#3756](https://github.com/dhis2/capture-app/issues/3756)) ([12af138](https://github.com/dhis2/capture-app/commit/12af1384f4ab4e9c6eeef2460bee7d53bfb6b8cc)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5182a15d63..0eb9a40a3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [101.4.0](https://github.com/dhis2/capture-app/compare/v101.3.3...v101.4.0) (2024-09-09) + + +### Features + +* [DHIS2-17878][DHIS2-17048] Add overflow menu with actions to stages&events ([#3756](https://github.com/dhis2/capture-app/issues/3756)) ([12af138](https://github.com/dhis2/capture-app/commit/12af1384f4ab4e9c6eeef2460bee7d53bfb6b8cc)) + ## [101.3.3](https://github.com/dhis2/capture-app/compare/v101.3.2...v101.3.3) (2024-09-02) diff --git a/package.json b/package.json index dc54a5992a..8e93ee83a0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.3.3", + "version": "101.4.0", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.3.3", + "@dhis2/rules-engine-javascript": "101.4.0", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index fd771bc637..f4cb98057a 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.3.3", + "version": "101.4.0", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From bce1dc485bacc28061d87bdaf6ecd1ef3c237683 Mon Sep 17 00:00:00 2001 From: Simona Domnisoru Date: Thu, 19 Sep 2024 09:07:30 +0200 Subject: [PATCH 09/20] refactor: bump download-artifact and upload-artifact version (#3800) --- .github/workflows/verify-app.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/verify-app.yml b/.github/workflows/verify-app.yml index c8a7d22379..c0623e4d64 100644 --- a/.github/workflows/verify-app.yml +++ b/.github/workflows/verify-app.yml @@ -193,7 +193,7 @@ jobs: - name: Build run: yarn build - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: app-build path: | @@ -214,7 +214,7 @@ jobs: with: node-version: 18.x - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v4 with: name: app-build From a4464f431618200853772cc2546ea9adff515840 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Thu, 19 Sep 2024 09:29:12 +0200 Subject: [PATCH 10/20] fix(translations): sync translations from transifex (master) (#3805) --- i18n/ar.po | 23 ++++++- i18n/cs.po | 17 +++++ i18n/es.po | 38 +++++++--- i18n/es_419.po | 17 +++++ i18n/fr.po | 21 +++++- i18n/id.po | 21 +++++- i18n/lo.po | 25 +++++-- i18n/nb.po | 168 +++++++++++++++++++++++++++------------------ i18n/nl.po | 17 +++++ i18n/prs.po | 17 +++++ i18n/ps.po | 17 +++++ i18n/pt.po | 17 +++++ i18n/pt_BR.po | 21 +++++- i18n/ru.po | 21 +++++- i18n/uk.po | 17 +++++ i18n/ur.po | 17 +++++ i18n/uz_UZ_Cyrl.po | 17 +++++ i18n/uz_UZ_Latn.po | 17 +++++ i18n/vi.po | 17 +++++ i18n/zh.po | 17 +++++ i18n/zh_CN.po | 17 +++++ 21 files changed, 471 insertions(+), 88 deletions(-) diff --git a/i18n/ar.po b/i18n/ar.po index 4bb4146a90..b619c664e0 100644 --- a/i18n/ar.po +++ b/i18n/ar.po @@ -1316,6 +1316,9 @@ msgstr "" msgid "Event completed" msgstr "الحدث مكتمل" +msgid "The event cannot be edited after it has been completed" +msgstr "" + msgid "Back to all stages and events" msgstr "" @@ -1484,13 +1487,27 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" -msgid "To open this event, please wait until saving is complete" +msgid "An error occurred while deleting the event" msgstr "" -msgid "Show {{ rest }} more" +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" msgstr "" -msgid "Reset list" +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "تخطى" + +msgid "To open this event, please wait until saving is complete" +msgstr "" + +msgid "Show {{ rest }} more" msgstr "" msgid "Go to full {{ eventName }}" diff --git a/i18n/cs.po b/i18n/cs.po index 62ef1badcc..798be3e276 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -1535,6 +1535,23 @@ msgstr "Tato fáze může mít pouze jednu událost" msgid "New {{ eventName }} event" msgstr "Nová událost {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Přeskočit" + msgid "To open this event, please wait until saving is complete" msgstr "Chcete-li otevřít tuto událost, počkejte na dokončení ukládání" diff --git a/i18n/es.po b/i18n/es.po index 1b377c622d..6dd93902ff 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -3,7 +3,6 @@ # Sergio Valenzuela , 2020 # ericbp , 2021 # Jaime Bosque , 2021 -# Marta Vila , 2022 # Pablo Pajuelo Cabezas , 2022 # Prabhjot Singh, 2023 # Christian Atavillos, 2023 @@ -13,13 +12,15 @@ # Janeth Cruz, 2024 # Enzo Nicolas Rossi , 2024 # Viktor Varland , 2024 +# Marta Vila , 2024 +# Juan M Alcantara Acosta , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Juan M Alcantara Acosta , 2024\n" "Language-Team: Spanish (https://app.transifex.com/hisp-uio/teams/100509/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -848,6 +849,8 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" +"La opción de categoría no es válida para la unidad organizativa " +"seleccionada. Seleccione una combinación válida." msgid "Please select {{category}}." msgstr "Seleccione {{category}}." @@ -1027,7 +1030,7 @@ msgid "Loading" msgstr "Cargando" msgid "An error occurred while loading the form" -msgstr "" +msgstr "Ocurrió un error al cargar el formulario" msgid "Possible duplicates found" msgstr "Posibles duplicados encontrados" @@ -1394,7 +1397,7 @@ msgid "Event completed" msgstr "Evento completado" msgid "The event cannot be edited after it has been completed" -msgstr "" +msgstr "El evento no admite cambios después de haber sido completado" msgid "Back to all stages and events" msgstr "Volver a todas las etapas y eventos" @@ -1560,7 +1563,7 @@ msgid "Enter details now" msgstr "Introducir datos ahora" msgid "Link to an existing" -msgstr "" +msgstr "Relacionar con ..." msgid "Scheduled date" msgstr "Fecha planificada" @@ -1572,7 +1575,7 @@ msgid "Please select a valid event" msgstr "Seleccione un evento válido" msgid "You do not have access to create events in this stage" -msgstr "" +msgstr "No cuenta con acceso para crear eventos en esta etapa" msgid "This stage can only have one event" msgstr "Esta etapa solo puede tener un evento" @@ -1580,6 +1583,25 @@ msgstr "Esta etapa solo puede tener un evento" msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "Se produjo un error eliminando el evento" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"La eliminación de un evento es permanente y no se puede deshacer. ¿Está " +"seguro de que desea eliminar este evento?" + +msgid "An error occurred when updating event status" +msgstr "Ocurrió un error al actualizar el estado del evento" + +msgid "Unskip" +msgstr "des omitir" + +msgid "Skip" +msgstr "Omitir" + msgid "To open this event, please wait until saving is complete" msgstr "Para abrir este evento, espere hasta que se complete el guardado." @@ -1610,10 +1632,10 @@ msgid "Stages and Events" msgstr "Etapas y eventos" msgid "An error occurred while loading the widget." -msgstr "" +msgstr "Ha ocurrido un error al cargar el componente" msgid "View linked event" -msgstr "" +msgstr "Ver eventos relacionados" msgid "Scheduled" msgstr "Planificado" diff --git a/i18n/es_419.po b/i18n/es_419.po index 8bc4508cd5..1007032b9c 100644 --- a/i18n/es_419.po +++ b/i18n/es_419.po @@ -1518,6 +1518,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "Nuevo evento {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Omitir" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/fr.po b/i18n/fr.po index 894d0c288e..d8952a4af7 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -7,16 +7,16 @@ # Gabriela Rodriguez , 2024 # Yao Selom SAKA (HISP WCA) , 2024 # Elise Desailly, 2024 -# Bram Piot , 2024 # Viktor Varland , 2024 # Yayra Gomado , 2024 +# Bram Piot , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Yayra Gomado , 2024\n" +"Last-Translator: Bram Piot , 2024\n" "Language-Team: French (https://app.transifex.com/hisp-uio/teams/100509/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1548,6 +1548,23 @@ msgstr "Ce stade ne peut avoir qu'un seul événement" msgid "New {{ eventName }} event" msgstr "Nouvel événement {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Ignorer" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/id.po b/i18n/id.po index e251484c4c..450489bebe 100644 --- a/i18n/id.po +++ b/i18n/id.po @@ -8,15 +8,15 @@ # ratih syabrina, 2024 # Yusuf Setiawan , 2024 # Guardian Sanjaya , 2024 -# Aprisa Chrysantina , 2024 # Viktor Varland , 2024 +# Aprisa Chrysantina , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Aprisa Chrysantina , 2024\n" "Language-Team: Indonesian (https://app.transifex.com/hisp-uio/teams/100509/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1493,6 +1493,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Lewati" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/lo.po b/i18n/lo.po index b2da06a4c5..cb86ea18bc 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -4,15 +4,15 @@ # Saysamone Sibounma, 2023 # Somkhit Bouavong , 2024 # Thuy Nguyen , 2024 -# Viktor Varland , 2024 # Namwan Chanthavisouk, 2024 +# Viktor Varland , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Namwan Chanthavisouk, 2024\n" +"Last-Translator: Viktor Varland , 2024\n" "Language-Team: Lao (https://app.transifex.com/hisp-uio/teams/100509/lo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1336,7 +1336,7 @@ msgid "Event completed" msgstr "ກິດຈະກຳສຳເລັດແລ້ວ" msgid "The event cannot be edited after it has been completed" -msgstr "" +msgstr "ເຫດການດັ່ງກ່າວບໍ່ສາມາດແກ້ໄຂໄດ້ຫຼັງຈາກສໍາເລັດແລ້ວ" msgid "Back to all stages and events" msgstr "ກັບໄປທຸກຂັ້ນຕອນ ແລະ ເຫດການ" @@ -1497,7 +1497,7 @@ msgid "Please select a valid event" msgstr "ກະລຸນາເລືອກເຫດການທີ່ຖືກຕ້ອງ" msgid "You do not have access to create events in this stage" -msgstr "" +msgstr "ທ່ານບໍ່ມີສິດເຂົ້າເຖິງເພື່ອສ້າງເຫດການໃນຂັ້ນຕອນນີ້" msgid "This stage can only have one event" msgstr "ຂັ້ນຕອນນີ້ສາມາດມີເຫດການດຽວເທົ່ານັ້ນ" @@ -1505,6 +1505,23 @@ msgstr "ຂັ້ນຕອນນີ້ສາມາດມີເຫດການດ msgid "New {{ eventName }} event" msgstr "ເຫດການໃໝ່ {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "ຂ້າມ" + msgid "To open this event, please wait until saving is complete" msgstr "ເພື່ອເປີດເຫດການນີ້, ກະລຸນາລໍຖ້າຈົນກວ່າການບັນທຶກຈະສຳເລັດ" diff --git a/i18n/nb.po b/i18n/nb.po index 12080b29b7..2e64114b50 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -2,13 +2,14 @@ # Translators: # Karoline Tufte Lien , 2024 # Caroline Hesthagen Holen , 2024 +# Merethe Wollan Blisten, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Caroline Hesthagen Holen , 2024\n" +"Last-Translator: Merethe Wollan Blisten, 2024\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -47,7 +48,7 @@ msgid "More" msgstr "Mer" msgid "View {{programName}} dashboard" -msgstr "Vis {{programName}} dashbord" +msgstr "Vis {{programName}} dashbord" msgid "View dashboard" msgstr "Vis dashbord" @@ -240,7 +241,7 @@ msgid "Completed" msgstr "Fullført" msgid "Please add or cancel note before saving the event" -msgstr "" +msgstr "Legg til eller avbryt notat før lagring" msgid "Save and add another" msgstr "Lagre og legg til en til" @@ -325,25 +326,25 @@ msgid "An error has occurred. See log for details" msgstr "Det har oppstått en feil. Se logg for detaljer" msgid "{{programStageName}} completed" -msgstr "" +msgstr "{{programStageName}} fullført" msgid "" "Would you like to complete the enrollment and all active events as well?" -msgstr "" +msgstr "Ønsker du å fullføre registreringen og alle aktive hendelser?" msgid "{{count}} event in {{programStageName}}" msgid_plural "{{count}} event in {{programStageName}}" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{{count}}hendelse i {{programStageName}}" +msgstr[1] "{{count}} hendelser i {{programStageName}}" msgid "Yes, complete enrollment and events" -msgstr "" +msgstr "Ja, fullfør registreringen og hendelsen. " msgid "Complete enrollment only" -msgstr "" +msgstr "Fullfør bare registreringen" msgid "Would you like to complete the enrollment?" -msgstr "" +msgstr "Ønsker du å fullføre registreringen?" msgid "Complete enrollment" msgstr "Fullfør registrering" @@ -378,10 +379,10 @@ msgid "validation failed" msgstr "validering mislyktes" msgid "No feedback for this event yet" -msgstr "" +msgstr "Det er ingen tilbakemeldinger på denne hendelsen " msgid "No indicator output for this event yet" -msgstr "" +msgstr "Det er ingen indikatorresulater for denne hendelsen " msgid "Generate new event" msgstr "Generer en ny hendelse" @@ -563,7 +564,7 @@ msgid "Column" msgstr "Kolonne" msgid "Visible" -msgstr "" +msgstr "Synlig" msgid "Update" msgstr "Oppdater" @@ -605,7 +606,7 @@ msgid "Program doesn't exist" msgstr "Programmet finnes ikke" msgid "Selected program is invalid for selected organisation unit" -msgstr "" +msgstr "Valgt program er ugyldig for valgt organisajonsenhet" msgid "Online" msgstr "Påkoblet" @@ -620,10 +621,10 @@ msgid "Add note" msgstr "Legg til notat" msgid "You don't have access to write notes" -msgstr "" +msgstr "Du har ikke tilgang til å skrive notater" msgid "Write note" -msgstr "" +msgstr "Skriv notat" msgid "was blanked out and hidden by your last action" msgstr "ble tømt og skjult av den siste handlingen din" @@ -790,7 +791,7 @@ msgid "There was an error loading the page" msgstr "Det oppsto en feil under lasting av siden" msgid "Choose an organisation unit to start reporting" -msgstr "" +msgstr "Velg en organisasjonsenhet for å starte rapportering" msgid "Program stage is invalid" msgstr "Programfase er ugyldig" @@ -805,7 +806,7 @@ msgid "Refer" msgstr "Henvis" msgid "You can't add any more {{ programStageName }} events" -msgstr "Du kan ikke legge til flere {{ programStageName }}-hendelser" +msgstr "Du kan ikke legge til flere {{ programStageName }} hendelser" msgid "Cancel without saving" msgstr "Avbryt uten å lagre" @@ -826,6 +827,8 @@ msgid "" "The category option is not valid for the selected organisation unit. Please " "select a valid combination." msgstr "" +"Valgt kategori er ikke gyldig for valgt organisasjonsenhet. Velg en gyldig " +"kombinasjon. " msgid "Please select {{category}}." msgstr "Velg {{category}}." @@ -842,7 +845,7 @@ msgstr "Vennligst velg en organisasjonsenhet" msgid "" "You don't have access to create a {{trackedEntityName}} in the current " "selections" -msgstr "" +msgstr "Du har ikke tilgang til å lage en {{trackedEntityName}} her" msgid "Choose the {{missingCategories}} to start reporting" msgstr "Velg {{missingCategories}} for å starte rapportering" @@ -931,7 +934,7 @@ msgid "Edit event" msgstr "Rediger hendelse" msgid "View changelog" -msgstr "" +msgstr "Vis endringslogg" msgid "Event details" msgstr "Hendelsesdetaljer" @@ -987,8 +990,8 @@ msgstr "Søk etter attributter" msgid "Fill in at least {{count}} attribute to search" msgid_plural "Fill in at least {{count}} attribute to search" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Fyll inn minst {{count}}attributt for å søke" +msgstr[1] "Fyll inn minst {{count}} attributter for å søke" msgid "Could not retrieve metadata. Please try again later." msgstr "Kunne ikke hente metadata. Prøv igjen senere." @@ -1000,7 +1003,7 @@ msgid "Loading" msgstr "Laster" msgid "An error occurred while loading the form" -msgstr "" +msgstr "Det oppsto en feil ved åpning av skjemaet" msgid "Possible duplicates found" msgstr "Mulige duplikater funnet" @@ -1021,7 +1024,7 @@ msgid "No results found for " msgstr "Ingen resultater funnet for" msgid "Choose an organisation unit" -msgstr "" +msgstr "Velg en organisasjonsenhet" msgid "Clear selection" msgstr "Fjern valg" @@ -1033,7 +1036,7 @@ msgid "Search for a program" msgstr "Søk for et program" msgid "Some programs are being filtered by the chosen organisation unit" -msgstr "" +msgstr "Filtreringen av programmer påvirkes av valgt organisasjonsenhet" msgid "Show all programs" msgstr "Vis alle programmer" @@ -1086,8 +1089,8 @@ msgid "" "Fill in at least {{minAttributesRequiredToSearch}} of these fields to " "search{{escape}} {{searchableAttributes}}" msgstr "" -"Fyll ut minst {{minAttributesRequiredToSearch}} av disse feltene for å " -"søke{{escape}} {{searchableAttributes}}" +"Fyll ut minst {{minAttributesRequiredToSearch}} av disse feltene for å søke " +"{{escape}} {{searchableAttributes}}" msgid "Fill in this field to search{{escape}} {{searchableAttributes}}" msgstr "Fyll ut dette feltet for å søke {{escape}} {{searchableAttributes}}" @@ -1133,7 +1136,7 @@ msgid "Create saved list" msgstr "Lag lagret liste" msgid "Create new in another program" -msgstr "" +msgstr "Opprett ny i et annet program" msgid "Create new event" msgstr "Opprett ny hendelse" @@ -1142,7 +1145,7 @@ msgid "Search for a {{trackedEntityName}} in {{programName}}" msgstr "Søk etter {{trackedEntityName}} i {{programName}}" msgid "No tracked entity types available" -msgstr "" +msgstr "Det er ingen sporbare enhetstyper tilgjengelig" msgid "Assigned to" msgstr "Tildelt til" @@ -1226,10 +1229,10 @@ msgid "Mark for follow-up" msgstr "Merk for oppfølging" msgid "Transfer" -msgstr "" +msgstr "Overfør " msgid "An error occurred while transferring ownership" -msgstr "" +msgstr "En feil oppsto ved overføring av eierskapet " msgid "Existing dates for auto-generated events will not be updated." msgstr "" @@ -1264,19 +1267,25 @@ msgid "" "Transferring enrollment ownership from {{ownerOrgUnit}} to " "{{newOrgUnit}}{{escape}}" msgstr "" +"Overfør eierskapet til registreringen fra {{ownerOrgUnit}} til " +"{{newOrgUnit}} {{escape}}" msgid "" "You will lose access to the enrollment when transferring ownership to " "{{organisationUnit}}." msgstr "" +"Du vil miste tilgangen til hendelsen når eierskapet overføres til " +"{{organisationUnit}}." msgid "Transfer Ownership" -msgstr "" +msgstr "Overfør eierskap" msgid "" "Choose the organisation unit to which enrollment ownership should be " "transferred." msgstr "" +"Velg hvilke organisajonsenhet som skal overta eierskapet til denne " +"registreringen. " msgid "Enrollment date" msgstr "Registreringsdato" @@ -1307,6 +1316,8 @@ msgstr "Legg til område" msgid "Please add or cancel the note before saving the event" msgstr "" +"Du må legge til eller avbryt registreringen i notatet før hendelsen kan " +"lagres. " msgid "organisation unit could not be retrieved. Please try again later." msgstr "organisasjonsenheten kunne ikke hentes. Prøv igjen senere." @@ -1318,13 +1329,13 @@ msgid "program or stage is invalid" msgstr "program eller fase er ugyldig" msgid "Notes about this enrollment" -msgstr "" +msgstr "Notater om denne registreringen" msgid "Write a note about this enrollment" -msgstr "" +msgstr "Skriv et notat om denne registreringen" msgid "This enrollment doesn't have any notes" -msgstr "" +msgstr "Denne registreringen har ingen notater" msgid "Error" msgstr "Feil" @@ -1351,19 +1362,19 @@ msgid "Event completed" msgstr "Hendelse fullført" msgid "The event cannot be edited after it has been completed" -msgstr "" +msgstr "Hendelsen kan ikke redigeres etter at den er fullført" msgid "Back to all stages and events" msgstr "Tilbake til alle faser og hendelser" msgid "Notes about this event" -msgstr "" +msgstr "Notater om denne hendelsen" msgid "Write a note about this event" -msgstr "" +msgstr "Skriv et notat om denne hendelsen" msgid "This event doesn't have any notes" -msgstr "" +msgstr "Denne hendelsen har ingen notater" msgid "Schedule date info" msgstr "Informasjon for planlagt dato" @@ -1410,10 +1421,10 @@ msgid "Schedule date / Due date" msgstr "Planlagt dato / Forfallsdato" msgid "Event notes" -msgstr "" +msgstr "Hendelsesnotater" msgid "Write a note about this scheduled event" -msgstr "" +msgstr "Skriv et notat om denne planlagte hendelsen" msgid "Save note" msgstr "Lagre notat" @@ -1452,57 +1463,62 @@ msgid "Fix errors in the form to continue." msgstr "Rett opp feil i skjemaet for å fortsette." msgid "You do not have access to delete this {{trackedEntityTypeName}}" -msgstr "" +msgstr "Du har ikke tilgang til å slette denne {{trackedEntityTypeName}}" msgid "Delete {{trackedEntityTypeName}}" -msgstr "" +msgstr "Slett {{trackedEntityTypeName}}" msgid "" "Are you sure you want to delete this {{trackedEntityTypeName}}? This will " "permanently remove the {{trackedEntityTypeName}} and all its associated " "enrollments and events in all programs." msgstr "" +"Er du sikker på at du vil slette {{trackedEntityTypeName}}? Sletting vil " +"permanent fjerne {{trackedEntityTypeName}} og alle tilhørende " +"registreringer og hendelser i alle programmer. " msgid "There was a problem deleting the {{trackedEntityTypeName}}" -msgstr "" +msgstr "Det oppsto et problem ved sletting av {{trackedEntityTypeName}}" msgid "Yes, delete {{trackedEntityTypeName}}" -msgstr "" +msgstr "Ja, slett {{trackedEntityTypeName}}" msgid "Profile widget could not be loaded. Please try again later" msgstr "Profil -widgeten kunne ikke lastes inn. Prøv igjen senere" msgid "{{trackedEntityTypeName}} profile" -msgstr "" +msgstr "{{trackedEntityTypeName}} profil" msgid "tracked entity instance" msgstr "Sporet enhetforekomst" msgid "Link to an existing {{linkableStageLabel}}" -msgstr "" +msgstr "Link til eksisterende {{linkableStageLabel}}" msgid "Choose a {{linkableStageLabel}}" -msgstr "" +msgstr "Velg en {{linkableStageLabel}}" msgid "{{ linkableStageLabel }} is not repeatable" -msgstr "" +msgstr "{{ linkableStageLabel }} er ikke repiterbar" msgid "{{ linkableStageLabel }} has no linkable events" -msgstr "" +msgstr "{{ linkableStageLabel }} har ingen hendelser som kan kobles til" msgid "Ambiguous relationships, contact system administrator" -msgstr "" +msgstr "Uklare relasjoner, kontakt din systemadministrator" msgid "" "Enter {{linkableStageLabel}} details in the next step after completing this " "{{currentStageLabel}}." msgstr "" +"Skriv inn {{linkableStageLabel}}detaljer i neste trinn etter du har fullført" +" dette {{currentStageLabel}}." msgid "Enter details now" -msgstr "" +msgstr "Skriv inn detaljer " msgid "Link to an existing" -msgstr "" +msgstr "Koble til en eksisterende" msgid "Scheduled date" msgstr "Planlagt dato" @@ -1511,10 +1527,11 @@ msgid "Report date" msgstr "Rapporteringsdato" msgid "Please select a valid event" -msgstr "" +msgstr "Velg en gyldig hendelse" msgid "You do not have access to create events in this stage" msgstr "" +"Du har ikke rettigheter til å opprette en hendelse i dette programsteget. " msgid "This stage can only have one event" msgstr "Denne fasen kan bare ha en hendelse" @@ -1522,6 +1539,25 @@ msgstr "Denne fasen kan bare ha en hendelse" msgid "New {{ eventName }} event" msgstr "Ny {{ eventName }} hendelse" +msgid "An error occurred while deleting the event" +msgstr "Det oppstå en feil ved sletting av hendelsen. " + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" +"Sletting av hendelsen er permanent og kan ikke angres. Er du sikker på at du" +" vil slette denne hendelsen?" + +msgid "An error occurred when updating event status" +msgstr "En feil oppsto ved oppdatering av status på hendelsen. " + +msgid "Unskip" +msgstr "Ikke hoppe over" + +msgid "Skip" +msgstr "Hopp over" + msgid "To open this event, please wait until saving is complete" msgstr "For å åpne denne hendelsen, vennligst vent til lagringen er fullført" @@ -1536,8 +1572,8 @@ msgstr "Hendelser kunne ikke hentes. Prøv igjen senere." msgid "{{ count }} event" msgid_plural "{{ count }} event" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{{ count }} hendelse" +msgstr[1] "{{count}} hendelse" msgid "{{ overdueEvents }} overdue" msgstr "{{ overdueEvents }} forfalt" @@ -1549,19 +1585,19 @@ msgid "Stages and Events" msgstr "Faser og hendelser" msgid "An error occurred while loading the widget." -msgstr "" +msgstr "En feil oppstå ved lasting av widget. " msgid "View linked event" -msgstr "" +msgstr "Vis knyttede hendelser" msgid "Scheduled" msgstr "Planlagt" msgid "Changelog" -msgstr "" +msgstr "Endringslogg" msgid "No changes to display" -msgstr "" +msgstr "Ingen endringer å vise" msgid "Created" msgstr "Opprettet" @@ -1579,10 +1615,10 @@ msgid "Data item" msgstr "Datapunkt" msgid "Change" -msgstr "" +msgstr "Endre" msgid "New {{trackedEntityTypeName}} relationship" -msgstr "Ny {{trackedEntityTypeName}}relasjon" +msgstr "Ny {{trackedEntityTypeName}} relasjon" msgid "Missing implementation step" msgstr "Manglende implementeringstrinn" @@ -1604,7 +1640,7 @@ msgid "" msgstr "Noe gikk galt under innlasting av relasjoner. Prøv igjen senere." msgid "{{trackedEntityTypeName}} relationships" -msgstr "{{trackedEntityTypeName}}-relasjoner" +msgstr "{{trackedEntityTypeName}} relasjoner" msgid "Delete relationship" msgstr "Slett relasjon" @@ -1613,12 +1649,14 @@ msgid "" "Deleting the relationship is permanent and cannot be undone. Are you sure " "you want to delete this relationship?" msgstr "" +"Sletting av relasjonen er permanent og kan ikke angres. Er du sikker på at " +"du vil slette relasjonen?" msgid "Yes, delete relationship" -msgstr "" +msgstr "Slett relasjon" msgid "An error occurred while deleting the relationship." -msgstr "" +msgstr "Det oppsto en feil ved sletting av relasjonen. " msgid "To open this relationship, please wait until saving is complete" msgstr "For å åpne denne relasjonen, vennligst vent til lagringen er fullført" diff --git a/i18n/nl.po b/i18n/nl.po index 05303720b5..31991c9398 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -1548,6 +1548,23 @@ msgstr "Deze fase kan maar één evenement hebben" msgid "New {{ eventName }} event" msgstr "Nieuwe {{ eventName }} evenement" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Overslaan" + msgid "To open this event, please wait until saving is complete" msgstr "Wacht tot het opslaan is voltooid om dit evenement te openen" diff --git a/i18n/prs.po b/i18n/prs.po index e8fcb7ddf2..89f3234f12 100644 --- a/i18n/prs.po +++ b/i18n/prs.po @@ -1456,6 +1456,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "اسکیپ" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/ps.po b/i18n/ps.po index ada1358d93..31f1707af2 100644 --- a/i18n/ps.po +++ b/i18n/ps.po @@ -1457,6 +1457,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "ترې تېر شئ" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/pt.po b/i18n/pt.po index c7c2353c06..306edb6cbd 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -1543,6 +1543,23 @@ msgstr "Esta etapa só pode ter um evento" msgid "New {{ eventName }} event" msgstr "Novo evento de {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Saltar" + msgid "To open this event, please wait until saving is complete" msgstr "" "Para abrir este evento, aguarde até que o processo de gravar seja concluído" diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po index b968595bfc..00cd51c882 100644 --- a/i18n/pt_BR.po +++ b/i18n/pt_BR.po @@ -2,15 +2,15 @@ # Translators: # Oscar Mesones Lapouble , 2021 # Philip Larsen Donnelly, 2024 -# Thiago Rocha, 2024 # Viktor Varland , 2024 +# Thiago Rocha, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Thiago Rocha, 2024\n" "Language-Team: Portuguese (Brazil) (https://app.transifex.com/hisp-uio/teams/100509/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1463,6 +1463,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Pular" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/ru.po b/i18n/ru.po index cfd4926b7f..ff0df86178 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -3,15 +3,15 @@ # Ulanbek Abakirov , 2020 # Wanda , 2021 # Yury Rogachev , 2024 -# Philip Larsen Donnelly, 2024 # Viktor Varland , 2024 +# Philip Larsen Donnelly, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" "POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Russian (https://app.transifex.com/hisp-uio/teams/100509/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1578,6 +1578,23 @@ msgstr "Данный этап позволяет создать только о msgid "New {{ eventName }} event" msgstr "Новое событие {{ eventName }} " +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Пропустить" + msgid "To open this event, please wait until saving is complete" msgstr "Чтобы открыть это событие, дождитесь завершения сохранения" diff --git a/i18n/uk.po b/i18n/uk.po index dd5ad8b73b..c51bff2210 100644 --- a/i18n/uk.po +++ b/i18n/uk.po @@ -1468,6 +1468,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Пропустити" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/ur.po b/i18n/ur.po index 69cec58a92..ce4b3021c3 100644 --- a/i18n/ur.po +++ b/i18n/ur.po @@ -1457,6 +1457,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "چھوڑ دو" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/uz_UZ_Cyrl.po b/i18n/uz_UZ_Cyrl.po index 96a05d6a51..6ca571beea 100644 --- a/i18n/uz_UZ_Cyrl.po +++ b/i18n/uz_UZ_Cyrl.po @@ -1491,6 +1491,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Ўтказиб юбориш" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/uz_UZ_Latn.po b/i18n/uz_UZ_Latn.po index 217bfb6e90..0379eb17c6 100644 --- a/i18n/uz_UZ_Latn.po +++ b/i18n/uz_UZ_Latn.po @@ -1479,6 +1479,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Oʼtkazib yuborish" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/vi.po b/i18n/vi.po index 6df6022cce..8e1ac63a89 100644 --- a/i18n/vi.po +++ b/i18n/vi.po @@ -1477,6 +1477,23 @@ msgstr "" msgid "New {{ eventName }} event" msgstr "" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "Bỏ qua" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/zh.po b/i18n/zh.po index a5216b482f..70a175384c 100644 --- a/i18n/zh.po +++ b/i18n/zh.po @@ -1464,6 +1464,23 @@ msgstr "这个阶段只能有一个事件" msgid "New {{ eventName }} event" msgstr "新的 {{ eventName }} 事件" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "跳过" + msgid "To open this event, please wait until saving is complete" msgstr "要打开此活动,请等待保存完成" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index a23db1a424..2216a33b29 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -1461,6 +1461,23 @@ msgstr "这个阶段只能有一个事件" msgid "New {{ eventName }} event" msgstr "新的 {{ eventName }} 事件" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "跳过" + msgid "To open this event, please wait until saving is complete" msgstr "要打开此活动,请等待保存完成" From c256a1293339f4dd33f49acc49f350cb0fb42688 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Thu, 19 Sep 2024 07:38:37 +0000 Subject: [PATCH 11/20] chore(release): cut 101.4.1 [skip release] ## [101.4.1](https://github.com/dhis2/capture-app/compare/v101.4.0...v101.4.1) (2024-09-19) ### Bug Fixes * **translations:** sync translations from transifex (master) ([#3805](https://github.com/dhis2/capture-app/issues/3805)) ([a4464f4](https://github.com/dhis2/capture-app/commit/a4464f431618200853772cc2546ea9adff515840)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0eb9a40a3c..95e021f34b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [101.4.1](https://github.com/dhis2/capture-app/compare/v101.4.0...v101.4.1) (2024-09-19) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([#3805](https://github.com/dhis2/capture-app/issues/3805)) ([a4464f4](https://github.com/dhis2/capture-app/commit/a4464f431618200853772cc2546ea9adff515840)) + # [101.4.0](https://github.com/dhis2/capture-app/compare/v101.3.3...v101.4.0) (2024-09-09) diff --git a/package.json b/package.json index 8e93ee83a0..efb07db0ef 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.4.0", + "version": "101.4.1", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.4.0", + "@dhis2/rules-engine-javascript": "101.4.1", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index f4cb98057a..e4e1b00d9d 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.4.0", + "version": "101.4.1", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From 562b03a1cf2cb5cff5382bd433943f289c860095 Mon Sep 17 00:00:00 2001 From: henrikmv <110386561+henrikmv@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:51:05 +0200 Subject: [PATCH 12/20] feat: [DHIS2-17770] Org unit contextualization in self contained widgets (#3720) * feat: org unit context in Stages and Events widget * feat: orgunit in enrollment widget completed * fix: lint * feat: profile widget org unit tooltip completed * fix: remove unused component * fix: error in getOrgUnitNames * fix: cache * fix: disabled value * fix: review changes * fix: restructure cache * fix: set back to right cache * fix: cache structure for useorgunitnames * feat: follow cache standard for all functions * fix: move full path hook * fix: change cache name * fix: undefined value for ancestor * fix: remove level * feat: use recursion * fix: remove console log * fix: changes on recursion * fix: remove unnecessary function from recursion * fix: code clean up * feat: change to clienttolist for widgetenrollment * fix: missing orgunitname in chip component * fix: change to orgunitname * fix: change to clienttolist in widgetprofile * fix: set back to name * feat: change from orgunitname to name * fix: set back to cleint to view * fix: review changes for orgunitname file * feat: remove id from ancestors * feat: change tooltip component * feat: clean up for tooltip * fix: merge with master * fix: after review changes * fix: cy test --- .../WidgetEnrollment/index.js | 8 +- i18n/en.pot | 10 +- .../CardList/CardListItem.component.js | 4 +- .../TeiRegistrationEntry.component.js | 4 +- .../ScopeSelector/ScopeSelector.container.js | 4 +- .../TooltipOrgUnit.component.js | 18 +++ .../Tooltips/TooltipOrgUnit/index.js | 1 + .../InfoBoxes/InfoBoxes.component.js | 6 +- .../WidgetEnrollment.component.js | 21 +-- .../WidgetEnrollment.container.js | 4 +- .../WidgetEventSchedule.container.js | 4 +- .../WidgetProfile/WidgetProfile.component.js | 4 +- .../WidgetProfile/hooks/getSubValueForTei.js | 11 +- .../FlatListOrgUnitField.js | 4 +- .../capture-core/converters/clientToView.js | 26 ++- .../metadataRetrieval/orgUnitName/index.js | 2 +- .../orgUnitName/orgUnitName.js | 152 +++++++++++------- .../capture-ui/FlatList/flatList.types.js | 4 +- 18 files changed, 179 insertions(+), 108 deletions(-) create mode 100644 src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/TooltipOrgUnit.component.js create mode 100644 src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/index.js diff --git a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js index 7ad8539f77..ca5bef0b08 100644 --- a/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js +++ b/cypress/e2e/WidgetsForEnrollmentPages/WidgetEnrollment/index.js @@ -66,7 +66,7 @@ Then('the user sees the enrollment organisation unit', () => { cy.get('[data-test="widget-enrollment"]').within(() => { cy.get('[data-test="widget-enrollment-icon-orgunit"]').should('exist'); cy.get('[data-test="widget-enrollment-orgunit"]') - .contains('Started at Ngelehun CHC') + .contains('Started at: Ngelehun CHC') .should('exist'); }); }); @@ -77,7 +77,7 @@ Then('the user sees the owner organisation unit', () => { 'exist', ); cy.get('[data-test="widget-enrollment-owner-orgunit"]') - .contains('Owned by Ngelehun CHC') + .contains('Owned by: Ngelehun CHC') .should('exist'); }); }); @@ -232,7 +232,7 @@ Then(/^the user successfully transfers the enrollment/, () => { cy.get('[data-test="widget-enrollment"]').within(() => { cy.get('[data-test="widget-enrollment-owner-orgunit"]') - .contains('Owned by Njandama MCHP') + .contains('Owned by: Njandama MCHP') .should('exist'); }); }); @@ -246,7 +246,7 @@ Then(/^the user types in (.*)/, (orgunit) => { Given(/^the enrollment owner organisation unit is (.*)/, (orgunit) => { cy.get('[data-test="widget-enrollment"]').within(() => { cy.get('[data-test="widget-enrollment-owner-orgunit"]') - .contains(`Owned by ${orgunit}`) + .contains(`Owned by: ${orgunit}`) .should('exist'); }); }); diff --git a/i18n/en.pot b/i18n/en.pot index cae303cf0b..5d63ac1048 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" -"PO-Revision-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" +"PO-Revision-Date: 2024-09-02T11:08:16.281Z\n" msgid "Choose one or more dates..." msgstr "Choose one or more dates..." @@ -1281,12 +1281,6 @@ msgstr "Enrollment widget could not be loaded. Please try again later" msgid "Follow-up" msgstr "Follow-up" -msgid "Started at {{orgUnitName}}" -msgstr "Started at {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Owned by {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Cancelled" diff --git a/src/core_modules/capture-core/components/CardList/CardListItem.component.js b/src/core_modules/capture-core/components/CardList/CardListItem.component.js index d411d1a933..17b7513ce8 100644 --- a/src/core_modules/capture-core/components/CardList/CardListItem.component.js +++ b/src/core_modules/capture-core/components/CardList/CardListItem.component.js @@ -15,7 +15,7 @@ import { searchScopes } from '../SearchBox'; import { enrollmentTypes } from './CardList.constants'; import { ListEntry } from './ListEntry.component'; import { dataElementTypes, getTrackerProgramThrowIfNotFound } from '../../metaData'; -import { useOrgUnitName } from '../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../metadataRetrieval/orgUnitName'; import type { ListItem, RenderCustomCardActions } from './CardList.types'; type OwnProps = $ReadOnly<{| @@ -144,7 +144,7 @@ const CardListItemIndex = ({ const enrollments = item.tei ? item.tei.enrollments : []; const enrollmentType = deriveEnrollmentType(enrollments, currentProgramId); const { orgUnitId, enrolledAt } = deriveEnrollmentOrgUnitIdAndDate(enrollments, enrollmentType, currentProgramId); - const { displayName: orgUnitName } = useOrgUnitName(orgUnitId); + const { displayName: orgUnitName } = useOrgUnitNameWithAncestors(orgUnitId); const program = enrollments && enrollments.length ? deriveProgramFromEnrollment(enrollments, currentSearchScopeType) : undefined; diff --git a/src/core_modules/capture-core/components/DataEntries/TeiRegistrationEntry/TeiRegistrationEntry.component.js b/src/core_modules/capture-core/components/DataEntries/TeiRegistrationEntry/TeiRegistrationEntry.component.js index 457fe3a112..14d9395f29 100644 --- a/src/core_modules/capture-core/components/DataEntries/TeiRegistrationEntry/TeiRegistrationEntry.component.js +++ b/src/core_modules/capture-core/components/DataEntries/TeiRegistrationEntry/TeiRegistrationEntry.component.js @@ -8,7 +8,7 @@ import { useScopeInfo } from '../../../hooks/useScopeInfo'; import { scopeTypes } from '../../../metaData'; import { TrackedEntityInstanceDataEntry } from '../TrackedEntityInstance'; import { useCurrentOrgUnitId } from '../../../hooks/useCurrentOrgUnitId'; -import { useOrgUnitName } from '../../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../../metadataRetrieval/orgUnitName'; import type { Props, PlainProps } from './TeiRegistrationEntry.types'; import { DiscardDialog } from '../../Dialogs/DiscardDialog.component'; import { withSaveHandler } from '../../DataEntry'; @@ -54,7 +54,7 @@ const TeiRegistrationEntryPlain = const { scopeType } = useScopeInfo(selectedScopeId); const { formId, formFoundation } = useMetadataForRegistrationForm({ selectedScopeId }); const orgUnitId = useCurrentOrgUnitId(); - const { displayName: orgUnitName } = useOrgUnitName(orgUnitId); + const { displayName: orgUnitName } = useOrgUnitNameWithAncestors(orgUnitId); const handleOnCancel = () => { if (!isUserInteractionInProgress) { diff --git a/src/core_modules/capture-core/components/ScopeSelector/ScopeSelector.container.js b/src/core_modules/capture-core/components/ScopeSelector/ScopeSelector.container.js index 0fdb374e16..6199295503 100644 --- a/src/core_modules/capture-core/components/ScopeSelector/ScopeSelector.container.js +++ b/src/core_modules/capture-core/components/ScopeSelector/ScopeSelector.container.js @@ -3,7 +3,7 @@ import React, { type ComponentType, useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { ScopeSelectorComponent } from './ScopeSelector.component'; import type { OwnProps } from './ScopeSelector.types'; -import { useOrgUnitName } from '../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../metadataRetrieval/orgUnitName'; import { resetOrgUnitIdFromScopeSelector } from './ScopeSelector.actions'; @@ -34,7 +34,7 @@ export const ScopeSelector: ComponentType = ({ }) => { const dispatch = useDispatch(); const [selectedOrgUnit, setSelectedOrgUnit] = useState({ name: undefined, id: selectedOrgUnitId }); - const { displayName, error: ouNameError } = useOrgUnitName(selectedOrgUnit.id); + const { displayName, error: ouNameError } = useOrgUnitNameWithAncestors(selectedOrgUnit.id); useEffect(() => { if (displayName && selectedOrgUnit.name !== displayName) { diff --git a/src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/TooltipOrgUnit.component.js b/src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/TooltipOrgUnit.component.js new file mode 100644 index 0000000000..8b756f7e9c --- /dev/null +++ b/src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/TooltipOrgUnit.component.js @@ -0,0 +1,18 @@ +// @flow +import React from 'react'; +import { Tooltip } from '@dhis2/ui'; + +type Props = { + orgUnitName: string, + ancestors?: Array, +}; + +export const TooltipOrgUnit = ({ orgUnitName, ancestors = [] }: Props) => { + const fullPath = [...ancestors, orgUnitName].join(' / '); + + return ( + + {orgUnitName} + + ); +}; diff --git a/src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/index.js b/src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/index.js new file mode 100644 index 0000000000..046747ddff --- /dev/null +++ b/src/core_modules/capture-core/components/Tooltips/TooltipOrgUnit/index.js @@ -0,0 +1 @@ +export { TooltipOrgUnit } from './TooltipOrgUnit.component'; diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/TransferModal/InfoBoxes/InfoBoxes.component.js b/src/core_modules/capture-core/components/WidgetEnrollment/TransferModal/InfoBoxes/InfoBoxes.component.js index 3c91794004..2cb21e6f98 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/TransferModal/InfoBoxes/InfoBoxes.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/TransferModal/InfoBoxes/InfoBoxes.component.js @@ -4,7 +4,7 @@ import cx from 'classnames'; import { withStyles } from '@material-ui/core/styles'; import { colors, IconInfo16, IconWarning16 } from '@dhis2/ui'; import i18n from '@dhis2/d2-i18n'; -import { useOrgUnitName } from '../../../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../../../metadataRetrieval/orgUnitName'; import { OrgUnitScopes } from '../hooks/useTransferValidation'; import { ProgramAccessLevels } from '../hooks/useProgramAccessLevel'; @@ -48,8 +48,8 @@ const InfoBoxesPlain = ({ orgUnitScopes, classes, }: Props) => { - const { displayName: ownerOrgUnitName } = useOrgUnitName(ownerOrgUnitId); - const { displayName: newOrgUnitName } = useOrgUnitName(validOrgUnitId); + const { displayName: ownerOrgUnitName } = useOrgUnitNameWithAncestors(ownerOrgUnitId); + const { displayName: newOrgUnitName } = useOrgUnitNameWithAncestors(validOrgUnitId); const showWarning = [ProgramAccessLevels.PROTECTED, ProgramAccessLevels.CLOSED].includes(programAccessLevel) && orgUnitScopes.destination === OrgUnitScopes.SEARCH; diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js index 1bbeed7d79..3bec583e85 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.component.js @@ -17,7 +17,8 @@ import { Widget } from '../Widget'; import type { PlainProps } from './enrollment.types'; import { Status } from './Status'; import { dataElementTypes } from '../../metaData'; -import { useOrgUnitName } from '../../metadataRetrieval/orgUnitName'; +import { convertValue } from '../../converters/clientToView'; +import { useOrgUnitNameWithAncestors } from '../../metadataRetrieval/orgUnitName'; import { Date } from './Date'; import { Actions } from './Actions'; import { MiniMap } from './MiniMap'; @@ -69,11 +70,16 @@ export const WidgetEnrollmentPlain = ({ onUpdateEnrollmentStatusError, onUpdateEnrollmentStatusSuccess, onAccessLostFromTransfer, + type = dataElementTypes.ORGANISATION_UNIT, }: PlainProps) => { const [open, setOpenStatus] = useState(true); const { fromServerDate } = useTimeZoneConversion(); const geometryType = getGeometryType(enrollment?.geometry?.type); - const { displayName: orgUnitName } = useOrgUnitName(enrollment?.orgUnit); + const { displayName: orgUnitName, ancestors } = useOrgUnitNameWithAncestors(enrollment?.orgUnit); + const { displayName: ownerOrgUnitName, ancestors: ownerAncestors } = useOrgUnitNameWithAncestors(ownerOrgUnit?.id); + + const orgUnitClientValue = { name: orgUnitName, ancestors }; + const ownerOrgUnitClientValue = { name: ownerOrgUnitName, ancestors: ownerAncestors }; return (
@@ -130,19 +136,16 @@ export const WidgetEnrollmentPlain = ({ - {i18n.t('Started at {{orgUnitName}}', { - orgUnitName, - interpolation: { escapeValue: false }, - })} + {i18n.t('Started at: ')} + {convertValue(orgUnitClientValue, type)}
- {i18n.t('Owned by {{ownerOrgUnit}}', { - ownerOrgUnit: ownerOrgUnit.displayName, - })} + {i18n.t('Owned by: ')} + {convertValue(ownerOrgUnitClientValue, type)}
diff --git a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js index f46827f52b..dba0dc0954 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js +++ b/src/core_modules/capture-core/components/WidgetEnrollment/WidgetEnrollment.container.js @@ -3,7 +3,7 @@ import React, { useMemo } from 'react'; import { errorCreator } from 'capture-core-utils'; import log from 'loglevel'; import { WidgetEnrollment as WidgetEnrollmentNote } from './WidgetEnrollment.component'; -import { useOrgUnitName } from '../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../metadataRetrieval/orgUnitName'; import { useTrackedEntityInstances } from './hooks/useTrackedEntityInstances'; import { useEnrollment } from './hooks/useEnrollment'; import { useProgram } from './hooks/useProgram'; @@ -68,7 +68,7 @@ export const WidgetEnrollment = ({ enrollments, refetch: refetchTEI, } = useTrackedEntityInstances(teiId, programId); - const { error: errorOrgUnit, displayName } = useOrgUnitName( + const { error: errorOrgUnit, displayName } = useOrgUnitNameWithAncestors( typeof ownerOrgUnit === 'string' ? ownerOrgUnit : undefined, ); const { error: errorLocale, locale } = useUserLocale(); diff --git a/src/core_modules/capture-core/components/WidgetEventSchedule/WidgetEventSchedule.container.js b/src/core_modules/capture-core/components/WidgetEventSchedule/WidgetEventSchedule.container.js index 24bfdc0016..843e40d96a 100644 --- a/src/core_modules/capture-core/components/WidgetEventSchedule/WidgetEventSchedule.container.js +++ b/src/core_modules/capture-core/components/WidgetEventSchedule/WidgetEventSchedule.container.js @@ -4,7 +4,7 @@ import i18n from '@dhis2/d2-i18n'; import { useDispatch } from 'react-redux'; import moment from 'moment'; import { getProgramAndStageForProgram, TrackerProgram, getProgramEventAccess, dataElementTypes } from '../../metaData'; -import { useOrgUnitName } from '../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../metadataRetrieval/orgUnitName'; import { useLocationQuery } from '../../utils/routing'; import type { ContainerProps } from './widgetEventSchedule.types'; import { WidgetEventScheduleComponent } from './WidgetEventSchedule.component'; @@ -37,7 +37,7 @@ export const WidgetEventSchedule = ({ }: ContainerProps) => { const { program, stage } = useMemo(() => getProgramAndStageForProgram(programId, stageId), [programId, stageId]); const dispatch = useDispatch(); - const orgUnit = { id: orgUnitId, name: useOrgUnitName(orgUnitId).displayName }; + const orgUnit = { id: orgUnitId, name: useOrgUnitNameWithAncestors(orgUnitId).displayName }; const { programStageScheduleConfig } = useScheduleConfigFromProgramStage(stageId); const { programConfig } = useScheduleConfigFromProgram(programId); const suggestedScheduleDate = useDetermineSuggestedScheduleDate({ diff --git a/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js b/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js index f14f5fb3ec..0204ac19a7 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js +++ b/src/core_modules/capture-core/components/WidgetProfile/WidgetProfile.component.js @@ -97,10 +97,10 @@ const WidgetProfilePlain = ({ const displayInListAttributes = useMemo(() => clientAttributesWithSubvalues .filter(item => item.displayInList) .map((clientAttribute) => { - const { attribute, key } = clientAttribute; + const { attribute, key, valueType } = clientAttribute; const value = convertClientToView(clientAttribute); return { - attribute, key, value, reactKey: attribute, + attribute, key, value, valueType, reactKey: attribute, }; }), [clientAttributesWithSubvalues]); diff --git a/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js b/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js index 241316d4eb..89a9e819cf 100644 --- a/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js +++ b/src/core_modules/capture-core/components/WidgetProfile/hooks/getSubValueForTei.js @@ -51,10 +51,17 @@ const getOrganisationUnitSubvalue = async ({ attribute, querySingleResource }: S resource: 'organisationUnits', id: attribute.value, params: { - fields: 'id,name', + fields: 'id,name,ancestors[displayName]', }, }); - return { ...organisationUnit }; + + const orgUnitClientValue = { + id: organisationUnit.id, + name: organisationUnit.name, + ancestors: organisationUnit.ancestors.map(ancestor => ancestor.displayName), + }; + + return orgUnitClientValue; }; export const subValueGetterByElementType = { diff --git a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js index c8a1652a76..aaf3ffdf3c 100644 --- a/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js +++ b/src/core_modules/capture-core/components/WidgetTwoEventWorkspace/FlatListOrgUnitField/FlatListOrgUnitField.js @@ -1,6 +1,6 @@ // @flow import React from 'react'; -import { useOrgUnitName } from '../../../metadataRetrieval/orgUnitName'; +import { useOrgUnitNameWithAncestors } from '../../../metadataRetrieval/orgUnitName'; type Props = { orgUnitId: string, @@ -9,7 +9,7 @@ type Props = { export const FlatListOrgUnitField = ({ orgUnitId, }: Props) => { - const { displayName } = useOrgUnitName(orgUnitId); + const { displayName } = useOrgUnitNameWithAncestors(orgUnitId); return ( diff --git a/src/core_modules/capture-core/converters/clientToView.js b/src/core_modules/capture-core/converters/clientToView.js index a1301e6836..115bcbeb69 100644 --- a/src/core_modules/capture-core/converters/clientToView.js +++ b/src/core_modules/capture-core/converters/clientToView.js @@ -7,36 +7,39 @@ import { dataElementTypes, type DataElement } from '../metaData'; import { convertMomentToDateFormatString } from '../utils/converters/date'; import { stringifyNumber } from './common/stringifyNumber'; import { MinimalCoordinates } from '../components/MinimalCoordinates'; +import { TooltipOrgUnit } from '../components/Tooltips/TooltipOrgUnit'; function convertDateForView(rawValue: string): string { const momentDate = moment(rawValue); return convertMomentToDateFormatString(momentDate); } - function convertDateTimeForView(rawValue: string): string { const momentDate = moment(rawValue); const dateString = convertMomentToDateFormatString(momentDate); const timeString = momentDate.format('HH:mm'); return `${dateString} ${timeString}`; } - function convertTimeForView(rawValue: string): string { const momentDate = moment(rawValue, 'HH:mm', true); return momentDate.format('HH:mm'); } - type FileClientValue = { name: string, url: string, value: string, }; - type ImageClientValue = { ...FileClientValue, previewUrl: string, }; +type OrgUnitClientValue = { + name: string, + ancestors?: Array, + tooltip?: string, +}; + function convertFileForDisplay(clientValue: FileClientValue) { return ( ; } +function convertOrgUnitForDisplay(clientValue: OrgUnitClientValue) { + return ( + + ); +} + const valueConvertersForType = { [dataElementTypes.NUMBER]: stringifyNumber, [dataElementTypes.INTEGER]: stringifyNumber, @@ -70,7 +83,7 @@ const valueConvertersForType = { [dataElementTypes.AGE]: convertDateForView, [dataElementTypes.FILE_RESOURCE]: convertFileForDisplay, [dataElementTypes.IMAGE]: convertImageForDisplay, - [dataElementTypes.ORGANISATION_UNIT]: (rawValue: Object) => rawValue.name, + [dataElementTypes.ORGANISATION_UNIT]: convertOrgUnitForDisplay, [dataElementTypes.POLYGON]: () => 'Polygon', }; @@ -78,18 +91,15 @@ export function convertValue(value: any, type: $Keys, d if (!value && value !== 0 && value !== false) { return value; } - if (dataElement && dataElement.optionSet) { if (dataElement.type === dataElementTypes.MULTI_TEXT) { return dataElement.optionSet.getMultiOptionsText(value); } return dataElement.optionSet.getOptionText(value); } - // $FlowFixMe dataElementTypes flow error return valueConvertersForType[type] ? valueConvertersForType[type](value) : value; } - export function convertDateWithTimeForView(rawValue?: ?string): string { if (!rawValue) { return ''; } if (!moment(rawValue).hours() && !moment(rawValue).minutes()) { diff --git a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js index f254f83a12..21e8b84212 100644 --- a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js +++ b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/index.js @@ -1,6 +1,6 @@ // @flow export { - useOrgUnitName, + useOrgUnitNameWithAncestors, useOrgUnitNames, getOrgUnitNames, getCachedOrgUnitName, diff --git a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js index ca45d9de40..56d222c119 100644 --- a/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js +++ b/src/core_modules/capture-core/metadataRetrieval/orgUnitName/orgUnitName.js @@ -14,13 +14,43 @@ const displayNamesQuery = { organisationUnits: { resource: 'organisationUnits', params: ({ filter }) => ({ - fields: 'id,displayName', + fields: 'id,displayName,ancestors[id,displayName]', filter: `id:in:[${filter}]`, pageSize: maxBatchSize, }), }, }; +const updateCacheWithOrgUnits = (organisationUnits) => { + organisationUnits.forEach(({ id, displayName, ancestors }) => { + if (ancestors.length > 0) { + displayNameCache[id] = { + displayName, + ancestor: ancestors[ancestors.length - 1].id, + }; + + ancestors.findLast((ancestor, index) => { + if (displayNameCache[ancestor.id]) { + // Ancestors already cached + return true; + } else if (index > 0) { + // Add orgunit WITH ancestor to cache + displayNameCache[ancestor.id] = { + displayName: ancestor.displayName, + ancestor: ancestors[index - 1].id, + }; + return false; + } + // Add orgunit WITHOUT ancestor to cache + displayNameCache[ancestor.id] = { displayName: ancestor.displayName }; + return true; + }); + } else { + displayNameCache[id] = { displayName }; + } + }); +}; + const createBatches = (orgUnitIds: Array): Array> => { const reducedOrgUnitIds = Array.from(orgUnitIds .filter(id => id) @@ -39,6 +69,17 @@ const createBatches = (orgUnitIds: Array): Array> => { return batches; }; +const getAncestors = (orgUnitId) => { + const orgUnit = displayNameCache[orgUnitId]; + + if (!orgUnit) return []; + + const ancestors = getAncestors(orgUnit.ancestor); + ancestors.push(orgUnit.displayName); + + return ancestors; +}; + // Works best with memoized input arrays. export const useOrgUnitNames = (orgUnitIds: Array): { loading: boolean, @@ -54,28 +95,19 @@ export const useOrgUnitNames = (orgUnitIds: Array): { const ready = !fetching && orgUnitIds === requestedArray; - const batches = useMemo( - () => createBatches(orgUnitIds), - [orgUnitIds], - ); - const filter = useMemo( - () => (fetching ? currentBatches[completedBatches].join(',') : ''), - [fetching, currentBatches, completedBatches], - ); - const result = useMemo( - () => (ready ? orgUnitIds.reduce((acc, id) => { - acc[id] = displayNameCache[id]; - return acc; - }, {}) : null), - [ready, orgUnitIds], - ); + const batches = useMemo(() => createBatches(orgUnitIds), [orgUnitIds]); + const filter = useMemo(() => (fetching ? currentBatches[completedBatches].join(',') : ''), [fetching, currentBatches, completedBatches]); + const result = useMemo(() => (ready ? orgUnitIds.reduce((acc, id) => { + acc[id] = displayNameCache[id] ? displayNameCache[id].displayName : null; + return acc; + }, {}) : null), [ready, orgUnitIds]); const onComplete = useCallback(({ organisationUnits }) => { - for (const { id, displayName } of organisationUnits.organisationUnits) { - displayNameCache[id] = displayName; - } + updateCacheWithOrgUnits(organisationUnits.organisationUnits); + const completeCount = completedBatches + 1; setCompletedBatches(completeCount); + if (completeCount === currentBatches.length) { setFetching(false); } else { @@ -83,22 +115,17 @@ export const useOrgUnitNames = (orgUnitIds: Array): { } }, [completedBatches, setCompletedBatches, currentBatches, setFetching, setFetchNextBatch]); - const onError = useCallback( - (fetchError) => { - setFetching(false); - setError(fetchError); - }, - [setFetching, setError], - ); + const onError = useCallback((fetchError) => { + setFetching(false); + setError(fetchError); + }, [setFetching, setError]); - const { refetch } = useDataQuery( - displayNamesQuery, { - variables: { filter }, - onComplete, - onError, - lazy: true, - }, - ); + const { refetch } = useDataQuery(displayNamesQuery, { + variables: { filter }, + onComplete, + onError, + lazy: true, + }); useEffect(() => { if (!fetching && orgUnitIds !== requestedArray) { @@ -111,7 +138,7 @@ export const useOrgUnitNames = (orgUnitIds: Array): { setCompletedBatches(0); } } - }, [fetching, orgUnitIds, requestedArray, batches, setRequestedArray, setCurrentBatches, setCompletedBatches, setFetching, setError]); + }, [fetching, orgUnitIds, requestedArray, batches]); useEffect(() => { if (fetchNextBatch) { @@ -120,7 +147,7 @@ export const useOrgUnitNames = (orgUnitIds: Array): { refetch({ filter }); } } - }, [fetchNextBatch, setFetchNextBatch, completedBatches, currentBatches, refetch, filter]); + }, [fetchNextBatch, completedBatches, currentBatches, refetch, filter]); return { loading: !ready && !error, @@ -130,44 +157,57 @@ export const useOrgUnitNames = (orgUnitIds: Array): { }; export async function getOrgUnitNames(orgUnitIds: Array, querySingleResource: QuerySingleResource): Promise<{| - [orgUnitId: string]: {| - id: string, +[orgUnitId: string]: {| + id: string, displayName: string, |} |}> { await Promise.all(createBatches(orgUnitIds) .map(batch => querySingleResource(displayNamesQuery.organisationUnits, { filter: batch.join(',') }) .then(({ organisationUnits }) => { - for (const { id, displayName } of organisationUnits) { - displayNameCache[id] = displayName; - } - }))); + updateCacheWithOrgUnits(organisationUnits); + }), + ), + ); return orgUnitIds.reduce((acc, orgUnitId) => { acc[orgUnitId] = { id: orgUnitId, - name: displayNameCache[orgUnitId], + name: displayNameCache[orgUnitId]?.displayName, }; return acc; }, {}); } -export const useOrgUnitName = (orgUnitId: ?string): { +export const useOrgUnitNameWithAncestors = (orgUnitId: ?string): { displayName?: string, - error?: any, + ancestors?: Array, + error: any, } => { - const cachedOrgUnitName = orgUnitId && displayNameCache[orgUnitId]; - const fetchId = cachedOrgUnitName ? undefined : orgUnitId; - const { orgUnit, error } = useOrganisationUnit(fetchId, 'displayName'); - if (cachedOrgUnitName) { - return { displayName: cachedOrgUnitName }; - } else if (orgUnit && fetchId) { - displayNameCache[orgUnit.id] = orgUnit.displayName; - if (orgUnit.id === fetchId) { - return { displayName: orgUnit.displayName, error }; - } + const cachedOrgUnit = orgUnitId && displayNameCache[orgUnitId]; + const fetchId = cachedOrgUnit ? undefined : orgUnitId; + const { orgUnit: fetchedOrgUnit, error } = useOrganisationUnit(fetchId, 'displayName,ancestors[id,displayName]'); + + if (orgUnitId && cachedOrgUnit) { + const ancestors = getAncestors(cachedOrgUnit.ancestor); + + return { + displayName: cachedOrgUnit.displayName, + ancestors, + error, + }; + } else if (fetchedOrgUnit && fetchId) { + updateCacheWithOrgUnits([fetchedOrgUnit]); + const ancestors = fetchedOrgUnit.ancestors.map(ancestor => ancestor.displayName); + + return { + displayName: fetchedOrgUnit.displayName, + ancestors, + error, + }; } + return { error }; }; -export const getCachedOrgUnitName = (orgUnitId: string): ?string => displayNameCache[orgUnitId]; +export const getCachedOrgUnitName = (orgUnitId: string): ?string => displayNameCache[orgUnitId]?.displayName; diff --git a/src/core_modules/capture-ui/FlatList/flatList.types.js b/src/core_modules/capture-ui/FlatList/flatList.types.js index 94dc5a5b47..4159c32e1d 100644 --- a/src/core_modules/capture-ui/FlatList/flatList.types.js +++ b/src/core_modules/capture-ui/FlatList/flatList.types.js @@ -1,8 +1,6 @@ // @flow -import { type Node } from 'react'; - export type Props = {| - list: { reactKey: string, key: string, value: Node }[], + list: { reactKey: string, key: string, value: Object, valueType?: string }[], dataTest?: string, ...CssClasses, |}; From f11b35b7a490107bc2e1ef2340497cdd5f0c76d3 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Tue, 24 Sep 2024 07:55:27 +0000 Subject: [PATCH 13/20] chore(release): cut 101.5.0 [skip release] # [101.5.0](https://github.com/dhis2/capture-app/compare/v101.4.1...v101.5.0) (2024-09-24) ### Features * [DHIS2-17770] Org unit contextualization in self contained widgets ([#3720](https://github.com/dhis2/capture-app/issues/3720)) ([562b03a](https://github.com/dhis2/capture-app/commit/562b03a1cf2cb5cff5382bd433943f289c860095)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e021f34b..a001555d3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [101.5.0](https://github.com/dhis2/capture-app/compare/v101.4.1...v101.5.0) (2024-09-24) + + +### Features + +* [DHIS2-17770] Org unit contextualization in self contained widgets ([#3720](https://github.com/dhis2/capture-app/issues/3720)) ([562b03a](https://github.com/dhis2/capture-app/commit/562b03a1cf2cb5cff5382bd433943f289c860095)) + ## [101.4.1](https://github.com/dhis2/capture-app/compare/v101.4.0...v101.4.1) (2024-09-19) diff --git a/package.json b/package.json index efb07db0ef..40c639584b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.4.1", + "version": "101.5.0", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.4.1", + "@dhis2/rules-engine-javascript": "101.5.0", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index e4e1b00d9d..cf91147ca2 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.4.1", + "version": "101.5.0", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From 7b3485b6c364758d1d03e039508d62564b295a96 Mon Sep 17 00:00:00 2001 From: Eirik Haugstulen Date: Fri, 27 Sep 2024 09:39:50 +0200 Subject: [PATCH 14/20] docs: [DHIS2-18052] Rebuild developer docs when there are changes (#3797) --- .github/workflows/rebuild-docs.yml | 19 +++++++++++++++++++ .../enrollment-plugins/manual-setup.mdx | 8 ++++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/rebuild-docs.yml diff --git a/.github/workflows/rebuild-docs.yml b/.github/workflows/rebuild-docs.yml new file mode 100644 index 0000000000..a5c86d59e0 --- /dev/null +++ b/.github/workflows/rebuild-docs.yml @@ -0,0 +1,19 @@ +name: 'dhis2: rebuild developer docs' + +on: + push: + branches: + - master + paths: + - 'docs/developer/**' + - 'CHANGELOG.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + rebuild-docs: + runs-on: ubuntu-latest + steps: + - run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_DEVELOPER_DOCS_TOKEN }} diff --git a/docs/developer/enrollment-plugins/manual-setup.mdx b/docs/developer/enrollment-plugins/manual-setup.mdx index 895973f25b..bae6afbe0f 100644 --- a/docs/developer/enrollment-plugins/manual-setup.mdx +++ b/docs/developer/enrollment-plugins/manual-setup.mdx @@ -76,7 +76,7 @@ You can also have different layouts for the three different enrollment pages. }, { "type": "component", - "name": "EnrollmentComment" + "name": "EnrollmentNote" }, { "type": "component", @@ -188,7 +188,7 @@ You can also have different layouts for the three different enrollment pages. }, { "type": "component", - "name": "EventComment" + "name": "EventNote" }, { "type": "component", @@ -229,8 +229,8 @@ type DefaultComponents = 'QuickActions' | 'AssigneeWidget' | 'NewEventWorkspace' | 'EditEventWorkspace' - | 'EnrollmentComment' - | 'EventComment' + | 'EnrollmentNote' + | 'EventNote' | 'TrackedEntityRelationship' | 'ErrorWidget' | 'WarningWidget' From 22cfe585b6b044c7d6b146c1449ccddb85d8abb4 Mon Sep 17 00:00:00 2001 From: Eirik Haugstulen Date: Fri, 27 Sep 2024 11:20:33 +0200 Subject: [PATCH 15/20] feat: support custom background color (#3814) --- .../DefaultEnrollmentLayout.types.js | 1 + .../EnrollmentPageLayout/EnrollmentPageLayout.js | 11 ++++++++++- .../components/Widget/WidgetCollapsible.component.js | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js index 218d77fa41..922a2071fc 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/DefaultEnrollmentLayout.types.js @@ -34,6 +34,7 @@ export type ColumnConfig = DefaultWidgetColumnConfig | PluginWidgetColumnConfig; export type PageLayoutConfig = { title?: ?string, + backgroundColor?: ?string, leftColumn: ?Array, rightColumn: ?Array, } diff --git a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js index d3f18557ff..f6d821e872 100644 --- a/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js +++ b/src/core_modules/capture-core/components/Pages/common/EnrollmentOverviewDomain/EnrollmentPageLayout/EnrollmentPageLayout.js @@ -10,6 +10,7 @@ import { DefaultPageTitle, EnrollmentPageKeys } from './DefaultEnrollmentLayout. const getEnrollmentPageStyles = () => ({ container: { + minHeight: '90vh', padding: '16px 24px 16px 24px', }, contentContainer: { @@ -44,6 +45,9 @@ const getEnrollmentPageStyles = () => ({ }, }); +// Function to validate hex color +const isValidHex = (color: string) => /^#[0-9A-F]{6}$/i.test(color); + const getTitle = (inputTitle, page) => { const title = inputTitle || i18n.t('Enrollment'); const titles = { @@ -83,8 +87,13 @@ const EnrollmentPageLayoutPlain = ({ props: allProps, }); + const containerStyle = useMemo(() => { + if (!pageLayout.backgroundColor || !isValidHex(pageLayout.backgroundColor)) return undefined; + return { backgroundColor: pageLayout.backgroundColor }; + }, [pageLayout.backgroundColor]); + return ( -
+
+
Date: Fri, 27 Sep 2024 09:25:00 +0000 Subject: [PATCH 16/20] chore(release): cut 101.6.0 [skip release] # [101.6.0](https://github.com/dhis2/capture-app/compare/v101.5.0...v101.6.0) (2024-09-27) ### Features * support custom background color ([#3814](https://github.com/dhis2/capture-app/issues/3814)) ([22cfe58](https://github.com/dhis2/capture-app/commit/22cfe585b6b044c7d6b146c1449ccddb85d8abb4)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a001555d3b..05d1af531c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [101.6.0](https://github.com/dhis2/capture-app/compare/v101.5.0...v101.6.0) (2024-09-27) + + +### Features + +* support custom background color ([#3814](https://github.com/dhis2/capture-app/issues/3814)) ([22cfe58](https://github.com/dhis2/capture-app/commit/22cfe585b6b044c7d6b146c1449ccddb85d8abb4)) + # [101.5.0](https://github.com/dhis2/capture-app/compare/v101.4.1...v101.5.0) (2024-09-24) diff --git a/package.json b/package.json index 40c639584b..09a9938fef 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.5.0", + "version": "101.6.0", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.5.0", + "@dhis2/rules-engine-javascript": "101.6.0", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index cf91147ca2..c5c79526fe 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.5.0", + "version": "101.6.0", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From cbeb1022bf45b241a91dcfb8c3e49956b28b1c44 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Sun, 29 Sep 2024 03:44:52 +0200 Subject: [PATCH 17/20] fix(translations): sync translations from transifex (master) Automatically merged. --- i18n/cs.po | 8 +------- i18n/es.po | 8 +------- i18n/fr.po | 8 +------- i18n/id.po | 8 +------- i18n/lo.po | 20 ++++++++------------ i18n/nb.po | 8 +------- i18n/nl.po | 8 +------- i18n/pt.po | 8 +------- i18n/ro.po | 25 ++++++++++++++++++------- i18n/ru.po | 8 +------- i18n/uz_UZ_Cyrl.po | 9 +-------- i18n/vi.po | 14 ++++---------- i18n/zh.po | 8 +------- i18n/zh_CN.po | 8 +------- 14 files changed, 41 insertions(+), 107 deletions(-) diff --git a/i18n/cs.po b/i18n/cs.po index 798be3e276..61c3bef8ce 100644 --- a/i18n/cs.po +++ b/i18n/cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Jiří Podhorecký , 2024\n" "Language-Team: Czech (https://app.transifex.com/hisp-uio/teams/100509/cs/)\n" @@ -1294,12 +1294,6 @@ msgstr "Widget pro zápis nelze načíst. Prosím zkuste to znovu později" msgid "Follow-up" msgstr "Následovat" -msgid "Started at {{orgUnitName}}" -msgstr "Zahájeno v {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Vlastník: {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Zrušeno" diff --git a/i18n/es.po b/i18n/es.po index 6dd93902ff..534e4de691 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -18,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Juan M Alcantara Acosta , 2024\n" "Language-Team: Spanish (https://app.transifex.com/hisp-uio/teams/100509/es/)\n" @@ -1333,12 +1333,6 @@ msgstr "" msgid "Follow-up" msgstr "Seguimiento" -msgid "Started at {{orgUnitName}}" -msgstr "Comenzó en {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Propiedad de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Cancelar" diff --git a/i18n/fr.po b/i18n/fr.po index d8952a4af7..c9418fa104 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Bram Piot , 2024\n" "Language-Team: French (https://app.transifex.com/hisp-uio/teams/100509/fr/)\n" @@ -1304,12 +1304,6 @@ msgstr "" msgid "Follow-up" msgstr "Suivi" -msgid "Started at {{orgUnitName}}" -msgstr "Commencé à {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Propriété de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Annulé" diff --git a/i18n/id.po b/i18n/id.po index 450489bebe..a4124e8e01 100644 --- a/i18n/id.po +++ b/i18n/id.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Aprisa Chrysantina , 2024\n" "Language-Team: Indonesian (https://app.transifex.com/hisp-uio/teams/100509/id/)\n" @@ -1272,12 +1272,6 @@ msgstr "Widget pendaftaran tidak dapat dimuat. Silakan coba lagi nanti" msgid "Follow-up" msgstr "Mengikuti" -msgid "Started at {{orgUnitName}}" -msgstr "Dimulai di {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Dimiliki oleh {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Dibatalkan" diff --git a/i18n/lo.po b/i18n/lo.po index cb86ea18bc..b12cc74fe7 100644 --- a/i18n/lo.po +++ b/i18n/lo.po @@ -4,15 +4,15 @@ # Saysamone Sibounma, 2023 # Somkhit Bouavong , 2024 # Thuy Nguyen , 2024 -# Namwan Chanthavisouk, 2024 # Viktor Varland , 2024 +# Namwan Chanthavisouk, 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Namwan Chanthavisouk, 2024\n" "Language-Team: Lao (https://app.transifex.com/hisp-uio/teams/100509/lo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1275,12 +1275,6 @@ msgstr "ບໍ່ສາມາດໂຫຼດລາຍການການລົງ msgid "Follow-up" msgstr "ຕິດຕາມ" -msgid "Started at {{orgUnitName}}" -msgstr "ເລີ່ມຈາກ {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "ເປັນເຈົ້າຂອງໂດຍ {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "ຍົກເລີກແລ້ວ" @@ -1506,18 +1500,20 @@ msgid "New {{ eventName }} event" msgstr "ເຫດການໃໝ່ {{ eventName }}" msgid "An error occurred while deleting the event" -msgstr "" +msgstr "ພົບຂໍ້ຜິດພາດໃນລະຫວ່າງລົບເຫດການ" msgid "" "Deleting an event is permanent and cannot be undone. Are you sure you want " "to delete this event?" msgstr "" +"ການລົບເຫດການແມ່ນຖາວອນ ແລະ ບໍ່ສາມາດຍົກເລີກໄດ້. " +"ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການລົບເຫດການນີ້?" msgid "An error occurred when updating event status" -msgstr "" +msgstr "ພົບຂໍ້ຜິດພາດໃນລະຫວ່າງອັບເດດສະຖານະເຫດການ" msgid "Unskip" -msgstr "" +msgstr "ຍົກເລີກ" msgid "Skip" msgstr "ຂ້າມ" diff --git a/i18n/nb.po b/i18n/nb.po index 2e64114b50..e14d1e2e25 100644 --- a/i18n/nb.po +++ b/i18n/nb.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Merethe Wollan Blisten, 2024\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/hisp-uio/teams/100509/nb/)\n" @@ -1299,12 +1299,6 @@ msgstr "Registreringsmodulen kunne ikke lastes inn. Prøv igjen senere" msgid "Follow-up" msgstr "Oppfølging" -msgid "Started at {{orgUnitName}}" -msgstr "Begynt på {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Eid av {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Kansellert" diff --git a/i18n/nl.po b/i18n/nl.po index 31991c9398..1ab637a352 100644 --- a/i18n/nl.po +++ b/i18n/nl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Charel van den Elsen, 2024\n" "Language-Team: Dutch (https://app.transifex.com/hisp-uio/teams/100509/nl/)\n" @@ -1310,12 +1310,6 @@ msgstr "" msgid "Follow-up" msgstr "Opvolgen" -msgid "Started at {{orgUnitName}}" -msgstr "Gestart bij {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Eigendom van {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Geannuleerd" diff --git a/i18n/pt.po b/i18n/pt.po index 306edb6cbd..7531dccfa4 100644 --- a/i18n/pt.po +++ b/i18n/pt.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Viktor Varland , 2024\n" "Language-Team: Portuguese (https://app.transifex.com/hisp-uio/teams/100509/pt/)\n" @@ -1306,12 +1306,6 @@ msgstr "" msgid "Follow-up" msgstr "Acompanhamento" -msgid "Started at {{orgUnitName}}" -msgstr "Iniciado em {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Propriedade de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Cancelado" diff --git a/i18n/ro.po b/i18n/ro.po index 310d3bc638..5c64022113 100644 --- a/i18n/ro.po +++ b/i18n/ro.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Valeriu Plesca , 2024\n" "Language-Team: Romanian (https://app.transifex.com/hisp-uio/teams/100509/ro/)\n" @@ -1255,12 +1255,6 @@ msgstr "" msgid "Follow-up" msgstr "" -msgid "Started at {{orgUnitName}}" -msgstr "" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Deținut de {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Anulat" @@ -1481,6 +1475,23 @@ msgstr "Această etapă poate avea un singur eveniment" msgid "New {{ eventName }} event" msgstr "Eveniment nou {{ eventName }}" +msgid "An error occurred while deleting the event" +msgstr "" + +msgid "" +"Deleting an event is permanent and cannot be undone. Are you sure you want " +"to delete this event?" +msgstr "" + +msgid "An error occurred when updating event status" +msgstr "" + +msgid "Unskip" +msgstr "" + +msgid "Skip" +msgstr "" + msgid "To open this event, please wait until saving is complete" msgstr "" diff --git a/i18n/ru.po b/i18n/ru.po index ff0df86178..01896cce66 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Philip Larsen Donnelly, 2024\n" "Language-Team: Russian (https://app.transifex.com/hisp-uio/teams/100509/ru/)\n" @@ -1320,12 +1320,6 @@ msgstr "" msgid "Follow-up" msgstr "Наблюдать" -msgid "Started at {{orgUnitName}}" -msgstr "Первоначальная регистрация в {{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "Принадлежит {{ownerOrgUnit}}" - msgid "Cancelled" msgstr "Отменен/а/о" diff --git a/i18n/uz_UZ_Cyrl.po b/i18n/uz_UZ_Cyrl.po index 6ca571beea..32a8d2e932 100644 --- a/i18n/uz_UZ_Cyrl.po +++ b/i18n/uz_UZ_Cyrl.po @@ -1,12 +1,11 @@ # # Translators: -# Philip Larsen Donnelly, 2024 # Khurshid Ibatov , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: Khurshid Ibatov , 2024\n" "Language-Team: Uzbek (Cyrillic) (https://app.transifex.com/hisp-uio/teams/100509/uz@Cyrl/)\n" @@ -1269,12 +1268,6 @@ msgstr "" msgid "Follow-up" msgstr "Кузатиш" -msgid "Started at {{orgUnitName}}" -msgstr " {{orgUnitName}} да бошланган" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr " {{ownerOrgUnit}} эгалиги асосида" - msgid "Cancelled" msgstr "Бекор қилинди" diff --git a/i18n/vi.po b/i18n/vi.po index 8e1ac63a89..10dc9f241e 100644 --- a/i18n/vi.po +++ b/i18n/vi.po @@ -2,15 +2,15 @@ # Translators: # Philip Larsen Donnelly, 2024 # Mai Nguyen , 2024 -# Thuy Nguyen , 2024 # Viktor Varland , 2024 +# Thuy Nguyen , 2024 # msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" -"Last-Translator: Viktor Varland , 2024\n" +"Last-Translator: Thuy Nguyen , 2024\n" "Language-Team: Vietnamese (https://app.transifex.com/hisp-uio/teams/100509/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1256,12 +1256,6 @@ msgstr "" msgid "Follow-up" msgstr "Theo dõi sau" -msgid "Started at {{orgUnitName}}" -msgstr "" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "" - msgid "Cancelled" msgstr "Đã hủy" @@ -1314,7 +1308,7 @@ msgid "Scheduled date cannot be changed for {{ eventStatus }} events" msgstr "" msgid "Event completed" -msgstr "" +msgstr "Sự kiện đã hoàn tất" msgid "The event cannot be edited after it has been completed" msgstr "" diff --git a/i18n/zh.po b/i18n/zh.po index 70a175384c..559372ca30 100644 --- a/i18n/zh.po +++ b/i18n/zh.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: easylin , 2024\n" "Language-Team: Chinese (https://app.transifex.com/hisp-uio/teams/100509/zh/)\n" @@ -1241,12 +1241,6 @@ msgstr "无法加载报名的小部件。请稍后再试" msgid "Follow-up" msgstr "后续" -msgid "Started at {{orgUnitName}}" -msgstr "始于{{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "由{{ownerOrgUnit}}拥有" - msgid "Cancelled" msgstr "已取消" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po index 2216a33b29..d370cc02a6 100644 --- a/i18n/zh_CN.po +++ b/i18n/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-08-10T10:42:21.141Z\n" +"POT-Creation-Date: 2024-09-02T11:08:16.281Z\n" "PO-Revision-Date: 2019-06-27 07:31+0000\n" "Last-Translator: 晓东 林 <13981924470@126.com>, 2024\n" "Language-Team: Chinese (China) (https://app.transifex.com/hisp-uio/teams/100509/zh_CN/)\n" @@ -1240,12 +1240,6 @@ msgstr "无法加载报名的小部件。请稍后再试" msgid "Follow-up" msgstr "后续" -msgid "Started at {{orgUnitName}}" -msgstr "始于{{orgUnitName}}" - -msgid "Owned by {{ownerOrgUnit}}" -msgstr "由{{ownerOrgUnit}}拥有" - msgid "Cancelled" msgstr "已取消" From 380f6b6f15dfd8e1d1137e2c8ff93e0d335c22b5 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Sun, 29 Sep 2024 01:49:39 +0000 Subject: [PATCH 18/20] chore(release): cut 101.6.1 [skip release] ## [101.6.1](https://github.com/dhis2/capture-app/compare/v101.6.0...v101.6.1) (2024-09-29) ### Bug Fixes * **translations:** sync translations from transifex (master) ([cbeb102](https://github.com/dhis2/capture-app/commit/cbeb1022bf45b241a91dcfb8c3e49956b28b1c44)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05d1af531c..f91bf84b79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [101.6.1](https://github.com/dhis2/capture-app/compare/v101.6.0...v101.6.1) (2024-09-29) + + +### Bug Fixes + +* **translations:** sync translations from transifex (master) ([cbeb102](https://github.com/dhis2/capture-app/commit/cbeb1022bf45b241a91dcfb8c3e49956b28b1c44)) + # [101.6.0](https://github.com/dhis2/capture-app/compare/v101.5.0...v101.6.0) (2024-09-27) diff --git a/package.json b/package.json index 09a9938fef..0af7250c62 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.6.0", + "version": "101.6.1", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.6.0", + "@dhis2/rules-engine-javascript": "101.6.1", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index c5c79526fe..d869454032 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.6.0", + "version": "101.6.1", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { From 2bb485e0927e9137874131a982fe690b9f6c5361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Storl=C3=B8kken=20Melseth?= Date: Tue, 1 Oct 2024 12:37:24 +0200 Subject: [PATCH 19/20] =?UTF-8?q?fix:=20[DHIS2-18004]=C2=A0sort=20events?= =?UTF-8?q?=20in=20rules=20engine=20by=20occurredAt=20and=20createdAt=20(#?= =?UTF-8?q?3788)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VariableService/VariableService.js | 2 +- .../helpers/structureEvents.js | 30 +++++++++---------- .../VariableService/variableService.types.js | 3 ++ .../rules/converters/dateUtils.js | 16 ++++------ 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/packages/rules-engine/src/services/VariableService/VariableService.js b/packages/rules-engine/src/services/VariableService/VariableService.js index 193de2677e..9b596a8190 100644 --- a/packages/rules-engine/src/services/VariableService/VariableService.js +++ b/packages/rules-engine/src/services/VariableService/VariableService.js @@ -85,7 +85,7 @@ export class VariableService { this.defaultValues = defaultValues; - this.structureEvents = getStructureEvents(dateUtils.compareDates); + this.structureEvents = getStructureEvents(dateUtils.compareDates, onProcessValue); } getVariables({ diff --git a/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js b/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js index 7c4fcab7f8..9660397845 100644 --- a/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js +++ b/packages/rules-engine/src/services/VariableService/helpers/structureEvents.js @@ -1,9 +1,11 @@ // @flow +import { typeKeys } from '../../../constants'; import { eventStatuses } from '../constants'; import type { EventData, EventsData, CompareDates, + ProcessValue, } from '../variableService.types'; const createEventsContainer = (events: EventsData) => { @@ -16,20 +18,16 @@ const createEventsContainer = (events: EventsData) => { return { all: events, byStage: eventsDataByStage }; }; -export const getStructureEvents = (compareDates: CompareDates) => { - const compareEvents = (first: EventData, second: EventData): number => { - let result; - if (!first.occurredAt && !second.occurredAt) { - result = 0; - } else if (!first.occurredAt) { - result = 1; - } else if (!second.occurredAt) { - result = -1; - } else { - result = compareDates(first.occurredAt, second.occurredAt); - } - return result; - }; +export const getStructureEvents = (compareDates: CompareDates, processValue: ProcessValue) => { + const compareEvents = (first: EventData, second: EventData): number => + compareDates( + processValue(first.occurredAt, typeKeys.DATE), + processValue(second.occurredAt, typeKeys.DATE), + ) || + compareDates( + processValue(first.createdAt, typeKeys.DATETIME), + processValue(second.createdAt, typeKeys.DATETIME), + ); return (currentEvent: EventData = {}, otherEvents: EventsData = []) => { const otherEventsFiltered = otherEvents @@ -37,8 +35,8 @@ export const getStructureEvents = (compareDates: CompareDates) => { [eventStatuses.COMPLETED, eventStatuses.ACTIVE, eventStatuses.VISITED].includes(event.status) && event.eventId !== currentEvent.eventId, ); - - const events = Object.keys(currentEvent).length !== 0 ? otherEventsFiltered.concat(currentEvent) : otherEventsFiltered; + const events = Object.keys(currentEvent).length ? + otherEventsFiltered.concat(currentEvent) : otherEventsFiltered; const sortedEvents = events.sort(compareEvents); return createEventsContainer(sortedEvents); diff --git a/packages/rules-engine/src/services/VariableService/variableService.types.js b/packages/rules-engine/src/services/VariableService/variableService.types.js index f31caadc2f..9640354c46 100644 --- a/packages/rules-engine/src/services/VariableService/variableService.types.js +++ b/packages/rules-engine/src/services/VariableService/variableService.types.js @@ -1,4 +1,5 @@ // @flow +import { typeof typeKeys } from '../../constants'; import { typeof eventStatuses } from './constants'; import type { DataElements, TrackedEntityAttributes, OrgUnit } from '../../rulesEngine.types'; @@ -89,3 +90,5 @@ export type VariableServiceInput = {| |}; export type CompareDates = (firstRulesDate: ?string, secondRulesDate: ?string) => number; + +export type ProcessValue = (value: any, type: $Values) => any; diff --git a/src/core_modules/capture-core/rules/converters/dateUtils.js b/src/core_modules/capture-core/rules/converters/dateUtils.js index 674d82bcfc..9d4398635f 100644 --- a/src/core_modules/capture-core/rules/converters/dateUtils.js +++ b/src/core_modules/capture-core/rules/converters/dateUtils.js @@ -51,16 +51,10 @@ export const dateUtils: IDateUtils = { return momentToRulesDate(newDateMoment); }, compareDates: (firstRulesDate: ?string, secondRulesDate: ?string): number => { - const diff = dateUtils.daysBetween(secondRulesDate, firstRulesDate); - if (!diff) { - return 0; - } - if (diff < 0) { - return -1; - } - if (diff > 0) { - return 1; - } - return 0; + // Empty input dates will be replaced by "MAX_SAFE_INTEGER" when creating the timestamp. + // This ensures empty input will be bigger than any actual date + const firstDateTimestamp = firstRulesDate ? moment(firstRulesDate).valueOf() : Number.MAX_SAFE_INTEGER; + const secondDateTimestamp = secondRulesDate ? moment(secondRulesDate).valueOf() : Number.MAX_SAFE_INTEGER; + return firstDateTimestamp - secondDateTimestamp; }, }; From b8245ea6dc8f1ec5287e40190ab77b4173c28635 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Tue, 1 Oct 2024 10:41:56 +0000 Subject: [PATCH 20/20] chore(release): cut 101.6.2 [skip release] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [101.6.2](https://github.com/dhis2/capture-app/compare/v101.6.1...v101.6.2) (2024-10-01) ### Bug Fixes * [DHIS2-18004] sort events in rules engine by occurredAt and createdAt ([#3788](https://github.com/dhis2/capture-app/issues/3788)) ([2bb485e](https://github.com/dhis2/capture-app/commit/2bb485e0927e9137874131a982fe690b9f6c5361)) --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- packages/rules-engine/package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f91bf84b79..65bc0a3ec3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [101.6.2](https://github.com/dhis2/capture-app/compare/v101.6.1...v101.6.2) (2024-10-01) + + +### Bug Fixes + +* [DHIS2-18004] sort events in rules engine by occurredAt and createdAt ([#3788](https://github.com/dhis2/capture-app/issues/3788)) ([2bb485e](https://github.com/dhis2/capture-app/commit/2bb485e0927e9137874131a982fe690b9f6c5361)) + ## [101.6.1](https://github.com/dhis2/capture-app/compare/v101.6.0...v101.6.1) (2024-09-29) diff --git a/package.json b/package.json index 0af7250c62..ffe44ffb82 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "101.6.1", + "version": "101.6.2", "cacheVersion": "7", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "101.6.1", + "@dhis2/rules-engine-javascript": "101.6.2", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index d869454032..d773ecb1fe 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "101.6.1", + "version": "101.6.2", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": {