From 75afcba8fcc792781fa29ed54994559cdc61039e Mon Sep 17 00:00:00 2001 From: Gift Nnko Date: Sun, 2 Aug 2026 17:04:22 +0300 Subject: [PATCH 1/2] fix: render both label and value for DISPLAYTEXT feedback RuleFeedbackList (playground) and the shared FormFeedback components each rendered only one half of a DISPLAYTEXT rule's feedback (content or value, never both), so rules that combine a static label with computed data silently dropped one side. The mui FormFeedback was worst-hit, rendering a completely empty alert for value-less DISPLAYTEXT rules. Co-Authored-By: Claude Sonnet 5 --- .../src/components/rules/RuleFeedbackList.tsx | 14 ++---------- .../dhis2-ui/src/components/FormFeedback.tsx | 4 ++-- .../mantine/src/components/FormFeedback.tsx | 22 ++++++++++--------- .../mui/src/components/FormFeedback.tsx | 4 ++-- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/apps/playground/src/components/rules/RuleFeedbackList.tsx b/apps/playground/src/components/rules/RuleFeedbackList.tsx index 094d79a..f591262 100644 --- a/apps/playground/src/components/rules/RuleFeedbackList.tsx +++ b/apps/playground/src/components/rules/RuleFeedbackList.tsx @@ -38,18 +38,8 @@ function FeedbackRow({
- {item.type === 'text' ? ( - - {item.content} - - ) : ( - <> - - {item.content}:{' '} - - {item.value} - - )} + {item.content} + {item.value ? <>: {item.value} : null} {ruleName diff --git a/components/dhis2-ui/src/components/FormFeedback.tsx b/components/dhis2-ui/src/components/FormFeedback.tsx index 75c378f..feef7b5 100644 --- a/components/dhis2-ui/src/components/FormFeedback.tsx +++ b/components/dhis2-ui/src/components/FormFeedback.tsx @@ -13,12 +13,12 @@ function FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[]

{title}

{items.map((item) => ( - {item.type === 'keyValuePair' ? ( + {item.value ? ( <> {item.content}: {item.value} ) : ( - item.value + item.content )} ))} diff --git a/components/mantine/src/components/FormFeedback.tsx b/components/mantine/src/components/FormFeedback.tsx index 492d6ff..8d9a487 100644 --- a/components/mantine/src/components/FormFeedback.tsx +++ b/components/mantine/src/components/FormFeedback.tsx @@ -13,16 +13,18 @@ function FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] {title} {items.map((item) => ( - {item.type === 'keyValuePair' ? ( - - - {item.content} - - : {item.value} - - ) : ( - {item.value} - )} + + {item.value ? ( + <> + + {item.content} + + : {item.value} + + ) : ( + item.content + )} + ))} diff --git a/components/mui/src/components/FormFeedback.tsx b/components/mui/src/components/FormFeedback.tsx index 8605dcd..86b4694 100644 --- a/components/mui/src/components/FormFeedback.tsx +++ b/components/mui/src/components/FormFeedback.tsx @@ -16,12 +16,12 @@ function FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] {items.map((item) => ( - {item.type === 'keyValuePair' ? ( + {item.value ? ( <> {item.content}: {item.value} ) : ( - item.value + item.content )} ))} From f07d9b3f8c12eeaa067d22d53314d3c95b3274b1 Mon Sep 17 00:00:00 2001 From: Gift Nnko Date: Sun, 2 Aug 2026 17:08:11 +0300 Subject: [PATCH 2/2] chore: added playground metadata --- apps/playground/d2.config.js | 2 +- apps/playground/i18n/en.pot | 18 ++++-------------- apps/playground/package.json | 2 +- apps/playground/public/dhis2-app-icon.png | Bin 0 -> 21408 bytes 4 files changed, 6 insertions(+), 16 deletions(-) create mode 100644 apps/playground/public/dhis2-app-icon.png diff --git a/apps/playground/d2.config.js b/apps/playground/d2.config.js index 63e2f3c..a6e197b 100644 --- a/apps/playground/d2.config.js +++ b/apps/playground/d2.config.js @@ -1,7 +1,7 @@ /** @type {import('@dhis2/cli-app-scripts').D2Config} */ const config = { type: 'app', - title: 'Program Rule Playground', + title: 'Program Rules Playground', entryPoints: { app: './src/AppWrapper.tsx', }, diff --git a/apps/playground/i18n/en.pot b/apps/playground/i18n/en.pot index 058aabe..eadb186 100644 --- a/apps/playground/i18n/en.pot +++ b/apps/playground/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: 2026-08-01T09:46:39.955Z\n" -"PO-Revision-Date: 2026-08-01T09:46:39.955Z\n" +"POT-Creation-Date: 2026-08-02T13:21:32.021Z\n" +"PO-Revision-Date: 2026-08-02T13:21:32.021Z\n" msgid "Enrollment" msgstr "Enrollment" @@ -51,9 +51,6 @@ msgstr "Event" msgid "Search by name, code, or ID" msgstr "Search by name, code, or ID" -msgid "None" -msgstr "None" - msgid "Program" msgstr "Program" @@ -63,9 +60,6 @@ msgstr "Type" msgid "Stages" msgstr "Stages" -msgid "Rules" -msgstr "Rules" - msgid "Last updated" msgstr "Last updated" @@ -178,12 +172,8 @@ msgstr "{{sourceLabel}} ยท {{ruleName}}" msgid "Program indicators" msgstr "Program indicators" -msgid "" -"Pick a program to open its forms and watch its rules evaluate. Nothing is " -"saved unless you ask for it." -msgstr "" -"Pick a program to open its forms and watch its rules evaluate. Nothing is " -"saved unless you ask for it." +msgid "Pick a program to open its forms and watch its rules evaluate." +msgstr "Pick a program to open its forms and watch its rules evaluate." msgid "Error loading programs" msgstr "Error loading programs" diff --git a/apps/playground/package.json b/apps/playground/package.json index 56b1721..d7a92f7 100644 --- a/apps/playground/package.json +++ b/apps/playground/package.json @@ -1,5 +1,5 @@ { - "name": "playground", + "name": "program-rules-playground", "version": "0.0.0", "description": "", "license": "BSD-3-Clause", diff --git a/apps/playground/public/dhis2-app-icon.png b/apps/playground/public/dhis2-app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..504d3cc9707de68708fbab6284d2f63535ec28cb GIT binary patch literal 21408 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 literal 0 HcmV?d00001