Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(fix) O3-3958: Allow user to select all answer options #389

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"url": "https://github.com/openmrs/openmrs-esm-form-builder/issues"
},
"dependencies": {
"@carbon/react": "~1.49.0",
"@carbon/react": "^1.75.0",
"@openmrs/esm-form-engine-lib": "latest",
"ajv": "^8.17.1",
"dotenv": "^16.4.5",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useCallback, useMemo, useState } from 'react';
import React, { useCallback, useMemo, useState, useRef } from 'react';
import { Tag, MultiSelect, Stack } from '@carbon/react';
import { useTranslation } from 'react-i18next';
import ConceptSearch from '../../../common/concept-search/concept-search.component';
Expand All @@ -16,6 +16,9 @@
const { formField, concept, setFormField } = useFormField();
const [addedAnswers, setAddedAnswers] = useState<AnswerItem[]>([]);

// Storing the initial questionOptions answers
const initialAnswers = useRef(formField.questionOptions?.answers ?? []);

Comment on lines +25 to +27
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these changes from a bad rebase?

const selectedAnswers = useMemo(
() =>
formField.questionOptions?.answers?.map((answer) => ({
Expand All @@ -27,7 +30,8 @@

const handleSelectAnswers = useCallback(
({ selectedItems }: { selectedItems: Array<AnswerItem> }) => {
const mappedAnswers = selectedItems.map((answer) => ({
const mappedAnswers = selectedItems.filter((item) => item.id !== 'select-all')
.map((answer) => ({
concept: answer.id,
label: answer.text,
}));
Expand Down Expand Up @@ -97,14 +101,17 @@
text: answer.display,
})) ?? [];

const formFieldAnswers = formField.questionOptions?.answers ?? [];
const formFieldAnswers = initialAnswers.current;

// If no answers from concept but we have form field answers, use those
if (conceptAnswerItems.length === 0 && formFieldAnswers.length > 0) {
return formFieldAnswers.map((answer) => ({
id: answer.concept,
text: answer.label,
}));
return [
{ id: 'select-all', text: 'Select All', isSelectAll: true },
...formFieldAnswers.map((answer) => ({
id: answer.concept,
text: answer.label,
})),
];
}

// Merge concept answers with any additional form field answers
Expand All @@ -116,7 +123,7 @@
}));

return [...conceptAnswerItems, ...additionalAnswers];
}, [concept?.answers, formField.questionOptions?.answers]);

Check warning on line 126 in src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/select/select-answers.component.tsx

View workflow job for this annotation

GitHub Actions / build

React Hook useMemo has an unnecessary dependency: 'formField.questionOptions.answers'. Either exclude it or remove the dependency array

const convertAnswerItemsToString = useCallback((item: AnswerItem) => item.text, []);

Expand Down
144 changes: 141 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1391,6 +1391,15 @@ __metadata:
languageName: node
linkType: hard

"@carbon/colors@npm:^11.29.0":
version: 11.29.0
resolution: "@carbon/colors@npm:11.29.0"
dependencies:
"@ibm/telemetry-js": "npm:^1.5.0"
checksum: 10/daea0b96cfb059d67f5dc5ae3705360b24a0c487181b4fff6e982485f54774bc9f43dadde05dfbcf67befa22c4a8fb6e72177b46bb3c35df0dd00c34a0808c44
languageName: node
linkType: hard

"@carbon/feature-flags@npm:^0.16.0":
version: 0.16.0
resolution: "@carbon/feature-flags@npm:0.16.0"
Expand Down Expand Up @@ -1436,6 +1445,16 @@ __metadata:
languageName: node
linkType: hard

"@carbon/grid@npm:^11.31.0":
version: 11.31.0
resolution: "@carbon/grid@npm:11.31.0"
dependencies:
"@carbon/layout": "npm:^11.29.0"
"@ibm/telemetry-js": "npm:^1.5.0"
checksum: 10/62ed7ed28da2add6fff02437cae005237c691358a16fc3eccc2a28f0533000f5c9c729c80143c4ba256c9250452bdaace012e62f1bc3c020fbb486c7b0121d92
languageName: node
linkType: hard

"@carbon/icon-helpers@npm:^10.53.0":
version: 10.53.1
resolution: "@carbon/icon-helpers@npm:10.53.1"
Expand Down Expand Up @@ -1480,6 +1499,19 @@ __metadata:
languageName: node
linkType: hard

"@carbon/icons-react@npm:^11.54.0":
version: 11.54.0
resolution: "@carbon/icons-react@npm:11.54.0"
dependencies:
"@carbon/icon-helpers": "npm:^10.54.0"
"@ibm/telemetry-js": "npm:^1.5.0"
prop-types: "npm:^15.7.2"
peerDependencies:
react: ">=16"
checksum: 10/094c84dea84d3414cd4015eada0ec1d36c269a66a4d89ec167fd22c2dfd085c001e58ea60591e25069c987e0cfd20e9d4dbea9e2cbd1237572f3fd26de3d9b62
languageName: node
linkType: hard

"@carbon/layout@npm:^11.19.0, @carbon/layout@npm:^11.27.0, @carbon/layout@npm:^11.27.1":
version: 11.27.1
resolution: "@carbon/layout@npm:11.27.1"
Expand All @@ -1505,6 +1537,15 @@ __metadata:
languageName: node
linkType: hard

"@carbon/layout@npm:^11.29.0":
version: 11.29.0
resolution: "@carbon/layout@npm:11.29.0"
dependencies:
"@ibm/telemetry-js": "npm:^1.5.0"
checksum: 10/886f6a0b01a34b91a7d10e4d562174ae338cb25713a4fee9a6cc80eec2ab53c3568c086a533cf8afaa11cb3fbe65cf5486ee320f26639bf21e4cd582f3b7873f
languageName: node
linkType: hard

"@carbon/motion@npm:^11.23.0":
version: 11.23.1
resolution: "@carbon/motion@npm:11.23.1"
Expand All @@ -1523,7 +1564,7 @@ __metadata:
languageName: node
linkType: hard

"@carbon/react@npm:>1.47.0 <1.50.0, @carbon/react@npm:~1.49.0":
"@carbon/react@npm:>1.47.0 <1.50.0":
version: 1.49.0
resolution: "@carbon/react@npm:1.49.0"
dependencies:
Expand Down Expand Up @@ -1589,6 +1630,37 @@ __metadata:
languageName: node
linkType: hard

"@carbon/react@npm:^1.75.0":
version: 1.75.0
resolution: "@carbon/react@npm:1.75.0"
dependencies:
"@babel/runtime": "npm:^7.24.7"
"@carbon/feature-flags": "npm:^0.24.0"
"@carbon/icons-react": "npm:^11.54.0"
"@carbon/layout": "npm:^11.29.0"
"@carbon/styles": "npm:^1.74.0"
"@floating-ui/react": "npm:^0.26.0"
"@ibm/telemetry-js": "npm:^1.5.0"
classnames: "npm:2.5.1"
copy-to-clipboard: "npm:^3.3.1"
downshift: "npm:9.0.8"
es-toolkit: "npm:^1.27.0"
flatpickr: "npm:4.6.13"
invariant: "npm:^2.2.3"
prop-types: "npm:^15.7.2"
react-fast-compare: "npm:^3.2.2"
react-is: "npm:^18.3.1"
tabbable: "npm:^6.2.0"
use-resize-observer: "npm:^6.0.0"
window-or-global: "npm:^1.0.1"
peerDependencies:
react: ^16.8.6 || ^17.0.1 || ^18.2.0 || ^19.0.0
react-dom: ^16.8.6 || ^17.0.1 || ^18.2.0 || ^19.0.0
sass: ^1.33.0
checksum: 10/0862588ffb30d559fa322a3143a8df625752b3244b24c522f38eaf59485af3654826b20b35f7211ec04638bd39bf64b9606fdc4861bf09c1e7d280d79d5b3018
languageName: node
linkType: hard

"@carbon/react@npm:~1.37.0":
version: 1.37.0
resolution: "@carbon/react@npm:1.37.0"
Expand Down Expand Up @@ -1674,6 +1746,36 @@ __metadata:
languageName: node
linkType: hard

"@carbon/styles@npm:^1.74.0":
version: 1.74.0
resolution: "@carbon/styles@npm:1.74.0"
dependencies:
"@carbon/colors": "npm:^11.29.0"
"@carbon/feature-flags": "npm:^0.24.0"
"@carbon/grid": "npm:^11.31.0"
"@carbon/layout": "npm:^11.29.0"
"@carbon/motion": "npm:^11.24.0"
"@carbon/themes": "npm:^11.46.0"
"@carbon/type": "npm:^11.35.0"
"@ibm/plex": "npm:6.0.0-next.6"
"@ibm/plex-mono": "npm:0.0.3-alpha.0"
"@ibm/plex-sans": "npm:0.0.3-alpha.0"
"@ibm/plex-sans-arabic": "npm:0.0.3-alpha.0"
"@ibm/plex-sans-devanagari": "npm:0.0.3-alpha.0"
"@ibm/plex-sans-hebrew": "npm:0.0.3-alpha.0"
"@ibm/plex-sans-thai": "npm:0.0.3-alpha.0"
"@ibm/plex-sans-thai-looped": "npm:0.0.3-alpha.0"
"@ibm/plex-serif": "npm:0.0.3-alpha.0"
"@ibm/telemetry-js": "npm:^1.5.0"
peerDependencies:
sass: ^1.33.0
peerDependenciesMeta:
sass:
optional: true
checksum: 10/05b25d783c8da1056213b9ac1bff05a75e83945f51f632a9d40323c2d0863239cfd33f3a8a1e4a8fc003b0aa476985bf5f34a9ca869a44e13e9d4d98944d124c
languageName: node
linkType: hard

"@carbon/telemetry@npm:0.1.0":
version: 0.1.0
resolution: "@carbon/telemetry@npm:0.1.0"
Expand Down Expand Up @@ -1709,6 +1811,19 @@ __metadata:
languageName: node
linkType: hard

"@carbon/themes@npm:^11.46.0":
version: 11.46.0
resolution: "@carbon/themes@npm:11.46.0"
dependencies:
"@carbon/colors": "npm:^11.29.0"
"@carbon/layout": "npm:^11.29.0"
"@carbon/type": "npm:^11.35.0"
"@ibm/telemetry-js": "npm:^1.5.0"
color: "npm:^4.0.0"
checksum: 10/51dbca009e501384dab9fbfb181921e551e03752f590268aa4bd37e08e95e8e0993f0c0e01c1549093ecbe367756ece781b20a339a61650932d3b6183f3f44df
languageName: node
linkType: hard

"@carbon/type@npm:^11.32.0":
version: 11.32.1
resolution: "@carbon/type@npm:11.32.1"
Expand All @@ -1731,6 +1846,17 @@ __metadata:
languageName: node
linkType: hard

"@carbon/type@npm:^11.35.0":
version: 11.35.0
resolution: "@carbon/type@npm:11.35.0"
dependencies:
"@carbon/grid": "npm:^11.31.0"
"@carbon/layout": "npm:^11.29.0"
"@ibm/telemetry-js": "npm:^1.5.0"
checksum: 10/f759e65e399f231a6a2ffc43036eae5d63456c82124b0550bf3d2dd09545c16b037ae8a550d9601ff9a3d86856199d9c9cfa5ecdb3f00c280f7b8c65727fadde
languageName: node
linkType: hard

"@carbon/utils-position@npm:^1.3.0":
version: 1.3.0
resolution: "@carbon/utils-position@npm:1.3.0"
Expand Down Expand Up @@ -3421,7 +3547,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@openmrs/esm-form-builder-app@workspace:."
dependencies:
"@carbon/react": "npm:~1.49.0"
"@carbon/react": "npm:^1.75.0"
"@dnd-kit/core": "npm:^6.1.0"
"@dnd-kit/modifiers": "npm:^6.0.1"
"@dnd-kit/sortable": "npm:^7.0.2"
Expand Down Expand Up @@ -10638,6 +10764,18 @@ __metadata:
languageName: node
linkType: hard

"es-toolkit@npm:^1.27.0":
version: 1.32.0
resolution: "es-toolkit@npm:1.32.0"
dependenciesMeta:
"@trivago/[email protected]":
unplugged: true
[email protected]:
unplugged: true
checksum: 10/98eaf802d5d2fbb2bd7ab69073034b7571b56abfa8e7cb046f22a501718b288c901b4f61a53f36b000549ab57c4265b2f8b86ba255e1a7d6e841ff86822e01be
languageName: node
linkType: hard

"esbuild@npm:^0.23.0":
version: 0.23.1
resolution: "esbuild@npm:0.23.1"
Expand Down Expand Up @@ -17343,7 +17481,7 @@ __metadata:
languageName: node
linkType: hard

"react-is@npm:^17.0.1 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0":
"react-is@npm:^17.0.1 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0, react-is@npm:^18.3.1":
version: 18.3.1
resolution: "react-is@npm:18.3.1"
checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22
Expand Down
Loading