@aehrc/smart-forms-renderer 0.40.1 → 0.40.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +2 -2
  2. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  3. package/lib/components/FormComponents/RepeatGroup/RepeatGroupView.js +6 -6
  4. package/lib/components/FormComponents/RepeatGroup/RepeatGroupView.js.map +1 -1
  5. package/lib/components/FormComponents/Tables/GroupTable.js +8 -8
  6. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
  7. package/lib/components/FormComponents/Tables/GroupTableBody.d.ts +1 -1
  8. package/lib/components/FormComponents/Tables/GroupTableBody.js +3 -3
  9. package/lib/components/FormComponents/Tables/GroupTableBody.js.map +1 -1
  10. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +1 -1
  11. package/lib/components/FormComponents/Tables/GroupTableRow.js +4 -4
  12. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
  13. package/lib/components/FormComponents/Tables/GroupTableView.d.ts +1 -1
  14. package/lib/components/Renderer/FormTopLevelItem.js +2 -1
  15. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  16. package/lib/hooks/useGroupTableRows.js +1 -1
  17. package/lib/hooks/useGroupTableRows.js.map +1 -1
  18. package/lib/hooks/useInitialiseGroupTable.js +8 -14
  19. package/lib/hooks/useInitialiseGroupTable.js.map +1 -1
  20. package/lib/hooks/useInitialiseRepeatGroups.d.ts +2 -2
  21. package/lib/hooks/useInitialiseRepeatGroups.js +10 -19
  22. package/lib/hooks/useInitialiseRepeatGroups.js.map +1 -1
  23. package/lib/hooks/useRepeatGroups.js +6 -2
  24. package/lib/hooks/useRepeatGroups.js.map +1 -1
  25. package/lib/index.d.ts +1 -1
  26. package/lib/index.js +1 -1
  27. package/lib/index.js.map +1 -1
  28. package/lib/interfaces/groupTable.interface.d.ts +1 -1
  29. package/lib/interfaces/repeatGroup.interface.d.ts +1 -1
  30. package/lib/theme/palette.js +0 -4
  31. package/lib/theme/palette.js.map +1 -1
  32. package/lib/utils/groupTable.js +1 -1
  33. package/lib/utils/groupTable.js.map +1 -1
  34. package/lib/utils/index.d.ts +1 -1
  35. package/lib/utils/index.js +1 -1
  36. package/lib/utils/index.js.map +1 -1
  37. package/lib/utils/manageForm.d.ts +7 -0
  38. package/lib/utils/manageForm.js +14 -1
  39. package/lib/utils/manageForm.js.map +1 -1
  40. package/lib/utils/repeatId.d.ts +2 -0
  41. package/lib/utils/repeatId.js +70 -2
  42. package/lib/utils/repeatId.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +2 -2
  45. package/src/components/FormComponents/RepeatGroup/RepeatGroupView.tsx +6 -6
  46. package/src/components/FormComponents/Tables/GroupTable.tsx +8 -8
  47. package/src/components/FormComponents/Tables/GroupTableBody.tsx +5 -5
  48. package/src/components/FormComponents/Tables/GroupTableRow.tsx +5 -5
  49. package/src/components/FormComponents/Tables/GroupTableView.tsx +1 -1
  50. package/src/components/Renderer/FormTopLevelItem.tsx +10 -8
  51. package/src/hooks/useGroupTableRows.ts +1 -1
  52. package/src/hooks/useInitialiseGroupTable.ts +8 -15
  53. package/src/hooks/useInitialiseRepeatGroups.ts +13 -24
  54. package/src/hooks/useRepeatGroups.ts +8 -4
  55. package/src/index.ts +1 -0
  56. package/src/interfaces/groupTable.interface.ts +1 -1
  57. package/src/interfaces/repeatGroup.interface.ts +1 -1
  58. package/src/stories/storybookWrappers/BuildFormButtonForStorybook.tsx +1 -1
  59. package/src/stories/storybookWrappers/IdRemoverButtonForStorybook.tsx +8 -11
  60. package/src/stories/storybookWrappers/IdRemoverDebuggerWrapperForStorybook.tsx +5 -2
  61. package/src/theme/palette.ts +0 -4
  62. package/src/utils/groupTable.ts +1 -1
  63. package/src/utils/index.ts +7 -1
  64. package/src/utils/manageForm.ts +27 -1
  65. package/src/utils/repeatId.ts +98 -2
@@ -12,6 +12,8 @@ import { initialiseQuestionnaireResponse } from './initialise';
12
12
  import { removeEmptyAnswers } from './removeEmptyAnswers';
13
13
  import { readEncounter, readPatient, readUser } from '../api/smartClient';
14
14
  import cloneDeep from 'lodash.clonedeep';
15
+ import { updateQuestionnaireResponse } from './genericRecursive';
16
+ import { removeInternalRepeatIdsRecursive } from './repeatId';
15
17
  /**
16
18
  * Build the form with an initial Questionnaire and an optional filled QuestionnaireResponse.
17
19
  * If a QuestionnaireResponse is not provided, an empty QuestionnaireResponse is set as the initial QuestionnaireResponse.
@@ -86,7 +88,8 @@ export function initialiseFhirClient(fhirClient) {
86
88
  * @author Sean Fong
87
89
  */
88
90
  export function getResponse() {
89
- return cloneDeep(questionnaireResponseStore.getState().updatableResponse);
91
+ const cleanResponse = removeInternalIdsFromResponse(questionnaireStore.getState().sourceQuestionnaire, questionnaireResponseStore.getState().updatableResponse);
92
+ return cloneDeep(cleanResponse);
90
93
  }
91
94
  /**
92
95
  * Remove all empty/hidden answers from the filled QuestionnaireResponse.
@@ -107,6 +110,16 @@ export function removeEmptyAnswersFromResponse(questionnaire, questionnaireRespo
107
110
  enableWhenExpressions
108
111
  });
109
112
  }
113
+ /**
114
+ * Remove all instances of item.answer.id from the filled QuestionnaireResponse.
115
+ * These IDs are used internally for rendering repeating items, and can be safely left out of the final response.
116
+ *
117
+ * @author Sean Fong
118
+ */
119
+ export function removeInternalIdsFromResponse(questionnaire, questionnaireResponse) {
120
+ const questionnaireResponseToUpdate = cloneDeep(questionnaireResponse);
121
+ return updateQuestionnaireResponse(questionnaire, questionnaireResponseToUpdate, removeInternalRepeatIdsRecursive, undefined);
122
+ }
110
123
  /**
111
124
  * Check if a QuestionnaireResponseItem has either an item or an answer property.
112
125
  *
@@ -1 +1 @@
1
- {"version":3,"file":"manageForm.js","sourceRoot":"","sources":["../../src/utils/manageForm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manageForm.js","sourceRoot":"","sources":["../../src/utils/manageForm.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
+ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
1
2
  export declare function generateNewRepeatId(linkId: string): string;
2
3
  export declare function generateExistingRepeatId(linkId: string, index: number): string;
4
+ export declare function removeInternalRepeatIdsRecursive(qItem: QuestionnaireItem, qrItemOrItems: QuestionnaireResponseItem | QuestionnaireResponseItem[] | null): QuestionnaireResponseItem | QuestionnaireResponseItem[] | null;
@@ -14,12 +14,80 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
+ var __rest = (this && this.__rest) || function (s, e) {
18
+ var t = {};
19
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
20
+ t[p] = s[p];
21
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
22
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
23
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
24
+ t[p[i]] = s[p[i]];
25
+ }
26
+ return t;
27
+ };
17
28
  import { nanoid } from 'nanoid';
29
+ import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
18
30
  export function generateNewRepeatId(linkId) {
19
- return `${linkId}-${nanoid()}`;
31
+ return `${linkId}-repeat-${nanoid()}`;
20
32
  }
21
33
  export function generateExistingRepeatId(linkId, index) {
22
34
  const paddedIndex = index.toString().padStart(6, '0');
23
- return `${linkId}-${paddedIndex}`;
35
+ return `${linkId}-repeat-${paddedIndex}`;
36
+ }
37
+ export function removeInternalRepeatIdsRecursive(qItem, qrItemOrItems) {
38
+ var _a, _b;
39
+ // Process repeating group items separately
40
+ const hasMultipleAnswers = Array.isArray(qrItemOrItems);
41
+ if (hasMultipleAnswers) {
42
+ return removeInternalRepeatIdsFromRepeatGroup(qItem, qrItemOrItems);
43
+ }
44
+ // At this point qrItemOrItems is a single QuestionnaireResponseItem
45
+ const qrItem = qrItemOrItems;
46
+ // Process items with child items
47
+ const childQItems = (_a = qItem.item) !== null && _a !== void 0 ? _a : [];
48
+ const childQrItems = (_b = qrItem === null || qrItem === void 0 ? void 0 : qrItem.item) !== null && _b !== void 0 ? _b : [];
49
+ const updatedChildQrItems = [];
50
+ if (childQItems.length > 0) {
51
+ const indexMap = mapQItemsIndex(qItem);
52
+ const qrItemsByIndex = getQrItemsIndex(childQItems, childQrItems, indexMap);
53
+ // Iterate child items
54
+ for (const [index, childQItem] of childQItems.entries()) {
55
+ const childQRItemOrItems = qrItemsByIndex[index];
56
+ const updatedChildQRItemOrItems = removeInternalRepeatIdsRecursive(childQItem, childQRItemOrItems !== null && childQRItemOrItems !== void 0 ? childQRItemOrItems : null);
57
+ if (Array.isArray(updatedChildQRItemOrItems)) {
58
+ if (updatedChildQRItemOrItems.length > 0) {
59
+ updatedChildQrItems.push(...updatedChildQRItemOrItems);
60
+ }
61
+ continue;
62
+ }
63
+ if (updatedChildQRItemOrItems) {
64
+ updatedChildQrItems.push(updatedChildQRItemOrItems);
65
+ }
66
+ }
67
+ }
68
+ // Construct updated qrItem
69
+ return removeInternalRepeatIdsFromItem(qItem, qrItem, updatedChildQrItems);
70
+ }
71
+ function removeInternalRepeatIdsFromRepeatGroup(qItem, qrItems) {
72
+ if (!qItem.item) {
73
+ return [];
74
+ }
75
+ return qrItems
76
+ .flatMap((childQrItem) => removeInternalRepeatIdsRecursive(qItem, childQrItem))
77
+ .filter((childQRItem) => !!childQRItem);
78
+ }
79
+ function removeInternalRepeatIdsFromItem(qItem, qrItem, childQrItems) {
80
+ var _a, _b;
81
+ if (!qrItem) {
82
+ return null;
83
+ }
84
+ // Remove internal repeatId from all answers
85
+ const updatedAnswers = (_b = (_a = qrItem.answer) === null || _a === void 0 ? void 0 : _a.map(
86
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
+ (_a) => {
88
+ var { id } = _a, rest = __rest(_a, ["id"]);
89
+ return Object.assign({}, rest);
90
+ }).filter((answer) => !!answer && Object.keys(answer).length > 0)) !== null && _b !== void 0 ? _b : [];
91
+ return Object.assign(Object.assign(Object.assign({ linkId: qItem.linkId }, (qItem.text && { text: qItem.text })), (childQrItems.length > 0 && { item: childQrItems })), (updatedAnswers.length > 0 && { answer: updatedAnswers }));
24
92
  }
25
93
  //# sourceMappingURL=repeatId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repeatId.js","sourceRoot":"","sources":["../../src/utils/repeatId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc,EAAE,KAAa;IACpE,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,MAAM,IAAI,WAAW,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"repeatId.js","sourceRoot":"","sources":["../../src/utils/repeatId.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aehrc/smart-forms-renderer",
3
- "version": "0.40.1",
3
+ "version": "0.40.2",
4
4
  "description": "FHIR Structured Data Captured (SDC) rendering engine for Smart Forms",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -58,7 +58,7 @@ function RepeatGroup(props: RepeatGroupProps) {
58
58
 
59
59
  const mutateRepeatEnableWhenItems = useQuestionnaireStore.use.mutateRepeatEnableWhenItems();
60
60
 
61
- const initialRepeatGroups = useInitialiseRepeatGroups(qItem, qrItems);
61
+ const initialRepeatGroups = useInitialiseRepeatGroups(qItem.linkId, qrItems);
62
62
 
63
63
  const [repeatGroups, setRepeatGroups] = useRepeatGroups(initialRepeatGroups);
64
64
 
@@ -104,7 +104,7 @@ function RepeatGroup(props: RepeatGroupProps) {
104
104
  setRepeatGroups([
105
105
  ...repeatGroups,
106
106
  {
107
- nanoId: generateNewRepeatId(qItem.linkId),
107
+ id: generateNewRepeatId(qItem.linkId),
108
108
  qrItem: null
109
109
  }
110
110
  ]);
@@ -76,7 +76,7 @@ function RepeatGroupView(props: RepeatGroupViewProps) {
76
76
  return (
77
77
  <QGroupContainerBox key={qItem.linkId} cardElevation={groupCardElevation} isRepeated={true}>
78
78
  <Card elevation={groupCardElevation} sx={{ p: 2 }}>
79
- {repeatGroups.map(({ nanoId, qrItem: nullableQrItem }, index) => {
79
+ {repeatGroups.map(({ id, qrItem: nullableQrItem }, index) => {
80
80
  const answeredQrItem = createEmptyQrItem(qItem, undefined);
81
81
  if (nullableQrItem) {
82
82
  answeredQrItem.item = nullableQrItem.item;
@@ -84,7 +84,7 @@ function RepeatGroupView(props: RepeatGroupViewProps) {
84
84
 
85
85
  return (
86
86
  <RepeatGroupItem
87
- key={nanoId}
87
+ key={id}
88
88
  qItem={qItem}
89
89
  repeatGroupIndex={index}
90
90
  answeredQrItem={answeredQrItem}
@@ -127,14 +127,14 @@ function RepeatGroupView(props: RepeatGroupViewProps) {
127
127
  <AccordionDetails sx={{ pt: 0 }}>
128
128
  {qItem.text ? <Divider sx={{ mb: 1.5 }} light /> : null}
129
129
  <TransitionGroup>
130
- {repeatGroups.map(({ nanoId, qrItem: nullableQrItem }, index) => {
130
+ {repeatGroups.map(({ id, qrItem: nullableQrItem }, index) => {
131
131
  const answeredQrItem = createEmptyQrItem(qItem, undefined);
132
132
  if (nullableQrItem) {
133
133
  answeredQrItem.item = nullableQrItem.item;
134
134
  }
135
135
 
136
136
  return (
137
- <Collapse key={nanoId} timeout={200}>
137
+ <Collapse key={id} timeout={200}>
138
138
  <RepeatGroupItem
139
139
  qItem={qItem}
140
140
  repeatGroupIndex={index}
@@ -169,14 +169,14 @@ function RepeatGroupView(props: RepeatGroupViewProps) {
169
169
  </>
170
170
  ) : null}
171
171
  <TransitionGroup>
172
- {repeatGroups.map(({ nanoId, qrItem: nullableQrItem }, index) => {
172
+ {repeatGroups.map(({ id, qrItem: nullableQrItem }, index) => {
173
173
  const answeredQrItem = createEmptyQrItem(qItem, undefined);
174
174
  if (nullableQrItem) {
175
175
  answeredQrItem.item = nullableQrItem.item;
176
176
  }
177
177
 
178
178
  return (
179
- <Collapse key={nanoId} timeout={200}>
179
+ <Collapse key={id} timeout={200}>
180
180
  <RepeatGroupItem
181
181
  qItem={qItem}
182
182
  repeatGroupIndex={index}
@@ -104,7 +104,7 @@ function GroupTable(props: GroupTableProps) {
104
104
  const updatedTableRows = [...tableRows];
105
105
 
106
106
  const rowToRemove = updatedTableRows[index];
107
- const updatedSelectedIds = selectedIds.filter((id) => id !== rowToRemove.nanoId);
107
+ const updatedSelectedIds = selectedIds.filter((id) => id !== rowToRemove.id);
108
108
 
109
109
  updatedTableRows.splice(index, 1);
110
110
 
@@ -117,21 +117,21 @@ function GroupTable(props: GroupTableProps) {
117
117
  }
118
118
 
119
119
  function handleAddRow() {
120
- const newRowNanoId = generateNewRepeatId(qItem.linkId);
120
+ const newRowId = generateNewRepeatId(qItem.linkId);
121
121
  setTableRows([
122
122
  ...tableRows,
123
123
  {
124
- nanoId: newRowNanoId,
124
+ id: newRowId,
125
125
  qrItem: null
126
126
  }
127
127
  ]);
128
- setSelectedIds([...selectedIds, newRowNanoId]);
128
+ setSelectedIds([...selectedIds, newRowId]);
129
129
  }
130
130
 
131
131
  function handleSelectAll() {
132
132
  // deselect all if all are selected, otherwise select all
133
133
  const updatedTableIds =
134
- selectedIds.length === tableRows.length ? [] : tableRows.map((tableRow) => tableRow.nanoId);
134
+ selectedIds.length === tableRows.length ? [] : tableRows.map((tableRow) => tableRow.id);
135
135
  setSelectedIds(updatedTableIds);
136
136
  onQrRepeatGroupChange({
137
137
  linkId: qItem.linkId,
@@ -139,12 +139,12 @@ function GroupTable(props: GroupTableProps) {
139
139
  });
140
140
  }
141
141
 
142
- function handleSelectRow(nanoId: string) {
142
+ function handleSelectRow(rowId: string) {
143
143
  const updatedSelectedIds = [...selectedIds];
144
144
 
145
- const index = updatedSelectedIds.indexOf(nanoId);
145
+ const index = updatedSelectedIds.indexOf(rowId);
146
146
  if (index === -1) {
147
- updatedSelectedIds.push(nanoId);
147
+ updatedSelectedIds.push(rowId);
148
148
  } else {
149
149
  updatedSelectedIds.splice(index, 1);
150
150
  }
@@ -41,7 +41,7 @@ interface GroupTableBodyProps
41
41
  qItemsIndexMap: Record<string, number>;
42
42
  onRowChange: (newQrRow: QuestionnaireResponseItem, index: number) => void;
43
43
  onRemoveRow: (index: number) => void;
44
- onSelectRow: (nanoId: string) => void;
44
+ onSelectRow: (rowId: string) => void;
45
45
  onReorderRows: (newTableRows: GroupTableRowModel[]) => void;
46
46
  }
47
47
 
@@ -80,8 +80,8 @@ function GroupTableBody(props: GroupTableBodyProps) {
80
80
  <Droppable droppableId="gtable_rows" direction="vertical">
81
81
  {(droppableProvided, snapshot) => (
82
82
  <TableBody ref={droppableProvided.innerRef} {...droppableProvided.droppableProps}>
83
- {tableRows.map(({ nanoId, qrItem: nullableQrItem }, index) => {
84
- const itemIsSelected = selectedIds.indexOf(nanoId) !== -1;
83
+ {tableRows.map(({ id, qrItem: nullableQrItem }, index) => {
84
+ const itemIsSelected = selectedIds.indexOf(id) !== -1;
85
85
  const answeredQrItem = createEmptyQrItem(tableQItem, undefined);
86
86
  if (nullableQrItem) {
87
87
  answeredQrItem.item = nullableQrItem.item;
@@ -89,9 +89,9 @@ function GroupTableBody(props: GroupTableBodyProps) {
89
89
 
90
90
  return (
91
91
  <GroupTableRow
92
- key={nanoId}
92
+ key={id}
93
93
  index={index}
94
- nanoId={nanoId}
94
+ rowId={id}
95
95
  tableQItem={tableQItem}
96
96
  answeredQrItem={answeredQrItem}
97
97
  nullableQrItem={nullableQrItem}
@@ -39,7 +39,7 @@ interface GroupTableRowProps
39
39
  PropsWithShowMinimalViewAttribute,
40
40
  PropsWithParentIsReadOnlyAttribute,
41
41
  TableRowProps {
42
- nanoId: string;
42
+ rowId: string;
43
43
  index: number;
44
44
  tableQItem: QuestionnaireItem;
45
45
  answeredQrItem: QuestionnaireResponseItem;
@@ -58,7 +58,7 @@ interface GroupTableRowProps
58
58
 
59
59
  function GroupTableRow(props: GroupTableRowProps) {
60
60
  const {
61
- nanoId,
61
+ rowId,
62
62
  index,
63
63
  tableQItem,
64
64
  answeredQrItem,
@@ -78,7 +78,7 @@ function GroupTableRow(props: GroupTableRowProps) {
78
78
 
79
79
  if (isRepeated) {
80
80
  return (
81
- <Draggable draggableId={nanoId} index={index}>
81
+ <Draggable draggableId={rowId} index={index}>
82
82
  {(draggableProvided, snapshot) => (
83
83
  <StyledGroupTableRow
84
84
  itemIsDragged={snapshot.isDragging}
@@ -106,7 +106,7 @@ function GroupTableRow(props: GroupTableRowProps) {
106
106
  <SelectRowButton
107
107
  isSelected={itemIsSelected}
108
108
  readOnly={readOnly}
109
- onSelectItem={() => onSelectRow(nanoId)}
109
+ onSelectItem={() => onSelectRow(rowId)}
110
110
  />
111
111
  </>
112
112
  )}
@@ -150,7 +150,7 @@ function GroupTableRow(props: GroupTableRowProps) {
150
150
  <SelectRowButton
151
151
  isSelected={itemIsSelected}
152
152
  readOnly={readOnly}
153
- onSelectItem={() => onSelectRow(nanoId)}
153
+ onSelectItem={() => onSelectRow(rowId)}
154
154
  />
155
155
  </>
156
156
  )}
@@ -54,7 +54,7 @@ interface GroupTableViewProps
54
54
  onAddRow: () => void;
55
55
  onRowChange: (newQrRow: QuestionnaireResponseItem, index: number) => void;
56
56
  onRemoveRow: (index: number) => void;
57
- onSelectRow: (nanoId: string) => void;
57
+ onSelectRow: (rowId: string) => void;
58
58
  onSelectAll: () => void;
59
59
  onReorderRows: (newTableRows: GroupTableRowModel[]) => void;
60
60
  }
@@ -175,14 +175,16 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
175
175
  const itemRepeatsAndIsNotCheckbox = isRepeatItemAndNotCheckbox(topLevelQItem);
176
176
  if (itemRepeatsAndIsNotCheckbox) {
177
177
  return (
178
- <RepeatItem
179
- key={topLevelQItem.linkId}
180
- qItem={topLevelQItem}
181
- qrItem={topLevelQRItem}
182
- groupCardElevation={1}
183
- parentIsReadOnly={readOnly}
184
- onQrItemChange={onQrItemChange}
185
- />
178
+ <Box mt={1}>
179
+ <RepeatItem
180
+ key={topLevelQItem.linkId}
181
+ qItem={topLevelQItem}
182
+ qrItem={topLevelQRItem}
183
+ groupCardElevation={1}
184
+ parentIsReadOnly={readOnly}
185
+ onQrItemChange={onQrItemChange}
186
+ />
187
+ </Box>
186
188
  );
187
189
  }
188
190
 
@@ -24,7 +24,7 @@ function useGroupTableRows(linkId: string, qrItems: QuestionnaireResponseItem[])
24
24
 
25
25
  const [tableRows, setTableRows] = useState(initialisedGroupTableRows);
26
26
  const [selectedIds, setSelectedIds] = useState<string[]>(
27
- initialisedGroupTableRows.map((row) => row.nanoId)
27
+ initialisedGroupTableRows.map((row) => row.id)
28
28
  );
29
29
 
30
30
  return { tableRows, selectedIds, setTableRows, setSelectedIds };
@@ -23,23 +23,16 @@ function useInitialiseGroupTable(
23
23
  linkId: string,
24
24
  qrItems: QuestionnaireResponseItem[]
25
25
  ): GroupTableRowModel[] {
26
- let initialGroupTableRows: GroupTableRowModel[] = [
27
- {
28
- nanoId: generateNewRepeatId(linkId),
29
- qrItem: null
30
- }
31
- ];
32
-
33
- if (qrItems.length > 0) {
34
- initialGroupTableRows = qrItems.map((qrItem, index) => {
35
- return {
36
- nanoId: generateExistingRepeatId(linkId, index),
37
- qrItem
38
- };
39
- });
26
+ if (qrItems.length === 0) {
27
+ return [{ id: generateNewRepeatId(linkId), qrItem: null }];
40
28
  }
41
29
 
42
- return initialGroupTableRows;
30
+ return qrItems.map((qrItem, index) => {
31
+ return {
32
+ id: generateExistingRepeatId(linkId, index),
33
+ qrItem
34
+ };
35
+ });
43
36
  }
44
37
 
45
38
  export default useInitialiseGroupTable;
@@ -15,38 +15,27 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
18
+ import type { QuestionnaireResponseItem } from 'fhir/r4';
19
19
  import type { RepeatGroupSingle } from '../interfaces/repeatGroup.interface';
20
20
  import { useMemo } from 'react';
21
21
  import { generateExistingRepeatId, generateNewRepeatId } from '../utils/repeatId';
22
22
 
23
23
  function useInitialiseRepeatGroups(
24
- qItem: QuestionnaireItem,
24
+ linkId: string,
25
25
  qrItems: QuestionnaireResponseItem[]
26
26
  ): RepeatGroupSingle[] {
27
- return useMemo(
28
- () => {
29
- let initialRepeatGroupAnswers: RepeatGroupSingle[] = [
30
- {
31
- nanoId: generateNewRepeatId(qItem.linkId),
32
- qrItem: null
33
- }
34
- ];
27
+ return useMemo(() => {
28
+ if (qrItems.length === 0) {
29
+ return [{ id: generateNewRepeatId(linkId), qrItem: null }];
30
+ }
35
31
 
36
- if (qrItems.length > 0) {
37
- initialRepeatGroupAnswers = qrItems.map((qrItem, index) => {
38
- return {
39
- nanoId: generateExistingRepeatId(qItem.linkId, index),
40
- qrItem
41
- };
42
- });
43
- }
44
- return initialRepeatGroupAnswers;
45
- },
46
- // Requires checking of both qItem and qrItems
47
- // eslint-disable-next-line react-hooks/exhaustive-deps
48
- [qItem, qrItems]
49
- );
32
+ return qrItems.map((qrItem, index) => {
33
+ return {
34
+ id: generateExistingRepeatId(linkId, index),
35
+ qrItem
36
+ };
37
+ });
38
+ }, [linkId, qrItems]);
50
39
  }
51
40
 
52
41
  export default useInitialiseRepeatGroups;
@@ -19,6 +19,7 @@ import type { Dispatch, SetStateAction } from 'react';
19
19
  import { useEffect, useState } from 'react';
20
20
  import type { RepeatGroupSingle } from '../interfaces/repeatGroup.interface';
21
21
  import _isEqual from 'lodash/isEqual';
22
+ import type { QuestionnaireResponseItem } from 'fhir/r4';
22
23
 
23
24
  function useRepeatGroups(
24
25
  valueFromProps: RepeatGroupSingle[]
@@ -27,10 +28,13 @@ function useRepeatGroups(
27
28
 
28
29
  useEffect(
29
30
  () => {
30
- const valueFromPropsQRItems = valueFromProps.map(
31
- (repeatGroupSingle) => repeatGroupSingle.qrItem
32
- );
33
- const repeatGroupsQRItems = repeatGroups.map((repeatGroupSingle) => repeatGroupSingle.qrItem);
31
+ const valueFromPropsQRItems = valueFromProps
32
+ .map((repeatGroupSingle) => repeatGroupSingle.qrItem)
33
+ .filter((qrItem): qrItem is QuestionnaireResponseItem => qrItem !== null);
34
+
35
+ const repeatGroupsQRItems = repeatGroups
36
+ .map((repeatGroupSingle) => repeatGroupSingle.qrItem)
37
+ .filter((qrItem): qrItem is QuestionnaireResponseItem => qrItem !== null);
34
38
 
35
39
  if (!_isEqual(valueFromPropsQRItems, repeatGroupsQRItems)) {
36
40
  setRepeatGroups(valueFromProps);
package/src/index.ts CHANGED
@@ -42,6 +42,7 @@ export {
42
42
  destroyForm,
43
43
  getResponse,
44
44
  removeEmptyAnswersFromResponse,
45
+ removeInternalIdsFromResponse,
45
46
  isSpecificItemControl,
46
47
  isRepeatItemAndNotCheckbox,
47
48
  initialiseQuestionnaireResponse,
@@ -18,6 +18,6 @@
18
18
  import type { QuestionnaireResponseItem } from 'fhir/r4';
19
19
 
20
20
  export interface GroupTableRowModel {
21
- nanoId: string;
21
+ id: string;
22
22
  qrItem: QuestionnaireResponseItem | null;
23
23
  }
@@ -23,6 +23,6 @@ export interface QrRepeatGroup {
23
23
  }
24
24
 
25
25
  export interface RepeatGroupSingle {
26
- nanoId: string;
26
+ id: string;
27
27
  qrItem: QuestionnaireResponseItem | null;
28
28
  }
@@ -44,7 +44,7 @@ function BuildFormButtonForStorybook(props: BuildFormButtonProps) {
44
44
  <Box display="flex" mb={0.5} alignItems="center" columnGap={3}>
45
45
  <Tooltip title="Build form with questionnaire response" placement="right">
46
46
  <IconButton onClick={handleBuildForm} size="small" color="primary">
47
- <Iconify icon="ph:hammer" sx={{ mb: 0.5 }} />
47
+ <Iconify icon="ph:hammer" />
48
48
  </IconButton>
49
49
  </Tooltip>
50
50
  </Box>
@@ -17,27 +17,24 @@
17
17
 
18
18
  // @ts-ignore
19
19
  import React from 'react';
20
- import type { QuestionnaireResponse } from 'fhir/r4';
20
+ import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
21
21
  import { Box, IconButton, Tooltip } from '@mui/material';
22
22
  import ContentCutIcon from '@mui/icons-material/ContentCut';
23
+ import { useQuestionnaireResponseStore } from '../../stores';
24
+ import { removeInternalIdsFromResponse } from '../../utils/manageForm';
23
25
 
24
26
  interface IdRemoverButtonProps {
27
+ questionnaire: Questionnaire;
25
28
  questionnaireResponse: QuestionnaireResponse;
26
29
  }
27
30
 
28
31
  function IdRemoverButtonForStorybook(props: IdRemoverButtonProps) {
29
- const { questionnaireResponse } = props;
32
+ const { questionnaire, questionnaireResponse } = props;
30
33
 
31
- async function handleRemoveIds() {
32
- console.log('handle remove IDs');
34
+ const updateResponse = useQuestionnaireResponseStore.use.updateResponse();
33
35
 
34
- // return buildForm()
35
- // updateQuestionnaireResponse(
36
- // questionnaire,
37
- // populatedResponse,
38
- // initialiseItemCalculatedExpressionValueRecursive,
39
- // calculatedExpressionsWithValues
40
- // );
36
+ async function handleRemoveIds() {
37
+ updateResponse(removeInternalIdsFromResponse(questionnaire, questionnaireResponse));
41
38
  }
42
39
 
43
40
  return (
@@ -48,7 +48,7 @@ function IdRemoverDebuggerWrapperForStorybook(props: IdRemoverDebuggerWrapperFor
48
48
 
49
49
  const isBuilding = useBuildForm(
50
50
  questionnaire,
51
- undefined,
51
+ questionnaireResponse,
52
52
  undefined,
53
53
  STORYBOOK_TERMINOLOGY_SERVER_URL
54
54
  );
@@ -63,7 +63,10 @@ function IdRemoverDebuggerWrapperForStorybook(props: IdRemoverDebuggerWrapperFor
63
63
  <div>
64
64
  <Grid container>
65
65
  <Grid item xs={6}>
66
- <IdRemoverButtonForStorybook questionnaireResponse={questionnaireResponse} />
66
+ <IdRemoverButtonForStorybook
67
+ questionnaire={questionnaire}
68
+ questionnaireResponse={updatableResponse}
69
+ />
67
70
  <BaseRenderer />
68
71
  </Grid>
69
72
  <Grid item xs={6}>
@@ -77,10 +77,6 @@ const palette: PaletteOptions = {
77
77
  secondary: grey['600'],
78
78
  disabled: grey['500']
79
79
  },
80
- background: {
81
- paper: '#fff',
82
- default: grey['50']
83
- },
84
80
  customBackground: {
85
81
  neutral: '#F4F6F8'
86
82
  },
@@ -32,6 +32,6 @@ export function reorderRows(
32
32
 
33
33
  export function getGroupTableItemsToUpdate(tableRows: GroupTableRowModel[], selectedIds: string[]) {
34
34
  return tableRows
35
- .filter((row) => selectedIds.includes(row.nanoId))
35
+ .filter((row) => selectedIds.includes(row.id))
36
36
  .flatMap((singleRow) => (singleRow.qrItem ? [cloneDeep(singleRow.qrItem)] : []));
37
37
  }
@@ -15,7 +15,13 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- export { buildForm, destroyForm, getResponse, removeEmptyAnswersFromResponse } from './manageForm';
18
+ export {
19
+ buildForm,
20
+ destroyForm,
21
+ getResponse,
22
+ removeEmptyAnswersFromResponse,
23
+ removeInternalIdsFromResponse
24
+ } from './manageForm';
19
25
  export { initialiseQuestionnaireResponse } from './initialise';
20
26
  export { isSpecificItemControl } from './itemControl';
21
27
  export { isRepeatItemAndNotCheckbox } from './qItem';