@aehrc/smart-forms-renderer 0.37.2 → 0.38.4

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 (104) hide show
  1. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +6 -2
  2. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  3. package/lib/components/FormComponents/QuantityItem/QuantityComparatorField.d.ts +12 -0
  4. package/lib/components/FormComponents/QuantityItem/QuantityComparatorField.js +13 -0
  5. package/lib/components/FormComponents/QuantityItem/QuantityComparatorField.js.map +1 -0
  6. package/lib/components/FormComponents/QuantityItem/QuantityField.d.ts +15 -0
  7. package/lib/components/FormComponents/QuantityItem/QuantityField.js +14 -0
  8. package/lib/components/FormComponents/QuantityItem/QuantityField.js.map +1 -0
  9. package/lib/components/FormComponents/QuantityItem/QuantityItem.d.ts +9 -0
  10. package/lib/components/FormComponents/QuantityItem/QuantityItem.js +144 -0
  11. package/lib/components/FormComponents/QuantityItem/QuantityItem.js.map +1 -0
  12. package/lib/components/FormComponents/QuantityItem/QuantityUnitField.d.ts +12 -0
  13. package/lib/components/FormComponents/QuantityItem/QuantityUnitField.js +10 -0
  14. package/lib/components/FormComponents/QuantityItem/QuantityUnitField.js.map +1 -0
  15. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +2 -1
  16. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  17. package/lib/components/FormComponents/Tables/GroupTable.d.ts +2 -2
  18. package/lib/components/FormComponents/Tables/GroupTable.js +2 -2
  19. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
  20. package/lib/components/FormComponents/Tables/GroupTableBody.d.ts +2 -2
  21. package/lib/components/FormComponents/Tables/GroupTableBody.js +2 -2
  22. package/lib/components/FormComponents/Tables/GroupTableBody.js.map +1 -1
  23. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +3 -2
  24. package/lib/components/FormComponents/Tables/GroupTableRow.js +16 -5
  25. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
  26. package/lib/components/FormComponents/Tables/GroupTableView.d.ts +2 -2
  27. package/lib/components/FormComponents/Tables/GroupTableView.js +10 -10
  28. package/lib/components/FormComponents/Tables/GroupTableView.js.map +1 -1
  29. package/lib/components/Renderer/FormTopLevelItem.js +6 -0
  30. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  31. package/lib/hooks/useDecimalCalculatedExpression.d.ts +2 -2
  32. package/lib/hooks/useQuantityCalculatedExpression.d.ts +14 -0
  33. package/lib/hooks/useQuantityCalculatedExpression.js +105 -0
  34. package/lib/hooks/useQuantityCalculatedExpression.js.map +1 -0
  35. package/lib/hooks/useRenderingExtensions.d.ts +2 -1
  36. package/lib/hooks/useRenderingExtensions.js +3 -2
  37. package/lib/hooks/useRenderingExtensions.js.map +1 -1
  38. package/lib/hooks/useStringInput.js +1 -0
  39. package/lib/hooks/useStringInput.js.map +1 -1
  40. package/lib/interfaces/valueSet.interface.d.ts +15 -0
  41. package/lib/tests/test-data/initialValueSample.d.ts +2 -0
  42. package/lib/tests/test-data/initialValueSample.js +802 -0
  43. package/lib/tests/test-data/initialValueSample.js.map +1 -0
  44. package/lib/utils/answerExpression.d.ts +18 -0
  45. package/lib/utils/answerExpression.js +133 -0
  46. package/lib/utils/answerExpression.js.map +1 -0
  47. package/lib/utils/calculatedExpression.js +5 -2
  48. package/lib/utils/calculatedExpression.js.map +1 -1
  49. package/lib/utils/dynamicValueSet.d.ts +5 -0
  50. package/lib/utils/dynamicValueSet.js +96 -0
  51. package/lib/utils/dynamicValueSet.js.map +1 -0
  52. package/lib/utils/fhirpathAsyncUtils/fhirpath-async.d.ts +14 -0
  53. package/lib/utils/fhirpathAsyncUtils/fhirpath-async.js +639 -0
  54. package/lib/utils/fhirpathAsyncUtils/fhirpath-async.js.map +1 -0
  55. package/lib/utils/fhirpathAsyncUtils/outcome-utils.d.ts +3 -0
  56. package/lib/utils/fhirpathAsyncUtils/outcome-utils.js +41 -0
  57. package/lib/utils/fhirpathAsyncUtils/outcome-utils.js.map +1 -0
  58. package/lib/utils/genericRecursive.d.ts +17 -0
  59. package/lib/utils/genericRecursive.js +82 -0
  60. package/lib/utils/genericRecursive.js.map +1 -0
  61. package/lib/utils/initialise.js +47 -57
  62. package/lib/utils/initialise.js.map +1 -1
  63. package/lib/utils/itemControl.d.ts +7 -1
  64. package/lib/utils/itemControl.js +14 -0
  65. package/lib/utils/itemControl.js.map +1 -1
  66. package/lib/utils/quantity.d.ts +4 -0
  67. package/lib/utils/quantity.js +49 -0
  68. package/lib/utils/quantity.js.map +1 -0
  69. package/lib/utils/repopulateIntoResponse.js +1 -1
  70. package/lib/utils/repopulateIntoResponse.js.map +1 -1
  71. package/lib/utils/valueSet.d.ts +2 -1
  72. package/lib/utils/valueSet.js +22 -0
  73. package/lib/utils/valueSet.js.map +1 -1
  74. package/package.json +1 -1
  75. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +16 -0
  76. package/src/components/FormComponents/QuantityItem/QuantityComparatorField.tsx +40 -0
  77. package/src/components/FormComponents/QuantityItem/QuantityField.tsx +60 -0
  78. package/src/components/FormComponents/QuantityItem/QuantityItem.tsx +286 -0
  79. package/src/components/FormComponents/QuantityItem/QuantityUnitField.tsx +38 -0
  80. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +2 -1
  81. package/src/components/FormComponents/Tables/GroupTable.tsx +4 -0
  82. package/src/components/FormComponents/Tables/GroupTableBody.tsx +5 -1
  83. package/src/components/FormComponents/Tables/GroupTableRow.tsx +98 -46
  84. package/src/components/FormComponents/Tables/GroupTableView.tsx +30 -26
  85. package/src/components/Renderer/FormTopLevelItem.tsx +17 -0
  86. package/src/hooks/useDecimalCalculatedExpression.ts +2 -2
  87. package/src/hooks/useQuantityCalculatedExpression.ts +177 -0
  88. package/src/hooks/useRenderingExtensions.ts +5 -2
  89. package/src/hooks/useStringInput.ts +1 -0
  90. package/src/interfaces/valueSet.interface.ts +19 -0
  91. package/src/stories/assets/questionnaires/QItemControlGroup.ts +229 -5
  92. package/src/stories/assets/questionnaires/QPrePopTester.ts +30 -0
  93. package/src/stories/assets/questionnaires/QQuantity.ts +283 -1
  94. package/src/stories/itemTypes/Quantity.stories.tsx +33 -1
  95. package/src/stories/sdc/ItemControlGroup.stories.tsx +10 -3
  96. package/src/tests/initial.test.ts +34 -0
  97. package/src/tests/test-data/initialValueSample.ts +826 -0
  98. package/src/utils/calculatedExpression.ts +6 -2
  99. package/src/utils/{updateQr.ts → genericRecursive.ts} +47 -2
  100. package/src/utils/initialise.ts +67 -73
  101. package/src/utils/itemControl.ts +19 -1
  102. package/src/utils/quantity.ts +62 -0
  103. package/src/utils/repopulateIntoResponse.ts +1 -1
  104. package/src/utils/valueSet.ts +32 -1
@@ -32,7 +32,7 @@ import GroupTableBody from './GroupTableBody';
32
32
  import Checkbox from '@mui/material/Checkbox';
33
33
  import { useQuestionnaireStore } from '../../../stores';
34
34
  function GroupTableView(props) {
35
- const { qItem, qItemsIndexMap, groupCardElevation, readOnly, tableRows, selectedIds, itemLabels, showMinimalView, parentIsReadOnly, onAddRow, onRowChange, onRemoveRow, onSelectRow, onSelectAll, onReorderRows } = props;
35
+ const { qItem, qItemsIndexMap, groupCardElevation, isRepeated, readOnly, tableRows, selectedIds, itemLabels, showMinimalView, parentIsReadOnly, onAddRow, onRowChange, onRemoveRow, onSelectRow, onSelectAll, onReorderRows } = props;
36
36
  const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
37
37
  if (showMinimalView) {
38
38
  return (React.createElement(QGroupContainerBox, { cardElevation: groupCardElevation, isRepeated: false, py: 1 },
@@ -43,25 +43,25 @@ function GroupTableView(props) {
43
43
  itemLabels.map((itemLabel) => (React.createElement(HeaderTableCell, { key: itemLabel, size: "medium" }, itemLabel))),
44
44
  React.createElement(TableCell, null))),
45
45
  React.createElement(TableBody, null,
46
- React.createElement(GroupTableBody, { tableQItem: qItem, readOnly: readOnly, tableRows: tableRows, selectedIds: selectedIds, qItemsIndexMap: qItemsIndexMap, showMinimalView: showMinimalView, parentIsReadOnly: parentIsReadOnly, onRowChange: onRowChange, onRemoveRow: onRemoveRow, onSelectRow: onSelectRow, onReorderRows: onReorderRows }))))));
46
+ React.createElement(GroupTableBody, { tableQItem: qItem, readOnly: readOnly, tableRows: tableRows, selectedIds: selectedIds, qItemsIndexMap: qItemsIndexMap, isRepeated: isRepeated, showMinimalView: showMinimalView, parentIsReadOnly: parentIsReadOnly, onRowChange: onRowChange, onRemoveRow: onRemoveRow, onSelectRow: onSelectRow, onReorderRows: onReorderRows }))))));
47
47
  }
48
48
  return (React.createElement(QGroupContainerBox, { cardElevation: groupCardElevation, isRepeated: false, py: 3, "data-linkid": qItem.linkId, onClick: () => onFocusLinkId(qItem.linkId) },
49
- groupCardElevation !== 1 ? (React.createElement(React.Fragment, null,
49
+ React.createElement(React.Fragment, null,
50
50
  React.createElement(Typography, { fontSize: 13, variant: "h6", color: readOnly ? 'text.secondary' : 'text.primary' },
51
51
  React.createElement(LabelWrapper, { qItem: qItem, readOnly: readOnly })),
52
- React.createElement(Divider, { sx: { my: 1 }, light: true }))) : null,
52
+ React.createElement(Divider, { sx: { my: 1 }, light: true })),
53
53
  React.createElement(TableContainer, { component: Paper, elevation: groupCardElevation },
54
54
  React.createElement(Table, null,
55
- React.createElement("caption", null,
56
- React.createElement(AddRowButton, { repeatGroups: tableRows, readOnly: readOnly, onAddItem: onAddRow })),
55
+ isRepeated ? (React.createElement("caption", null,
56
+ React.createElement(AddRowButton, { repeatGroups: tableRows, readOnly: readOnly, onAddItem: onAddRow }))) : null,
57
57
  React.createElement(TableHead, null,
58
58
  React.createElement(TableRow, null,
59
59
  React.createElement(HeaderTableCell, { padding: "none" }),
60
- React.createElement(HeaderTableCell, { padding: "none" },
61
- React.createElement(Checkbox, { color: "primary", size: "small", indeterminate: selectedIds.length > 0 && selectedIds.length < tableRows.length, checked: tableRows.length > 0 && selectedIds.length === tableRows.length, disabled: readOnly, onChange: onSelectAll })),
60
+ isRepeated ? (React.createElement(HeaderTableCell, { padding: "none" },
61
+ React.createElement(Checkbox, { color: "primary", size: "small", indeterminate: selectedIds.length > 0 && selectedIds.length < tableRows.length, checked: tableRows.length > 0 && selectedIds.length === tableRows.length, disabled: readOnly, onChange: onSelectAll }))) : null,
62
62
  itemLabels.map((itemLabel) => (React.createElement(HeaderTableCell, { key: itemLabel }, itemLabel))),
63
- React.createElement(TableCell, null))),
64
- React.createElement(GroupTableBody, { tableQItem: qItem, readOnly: readOnly, tableRows: tableRows, selectedIds: selectedIds, qItemsIndexMap: qItemsIndexMap, showMinimalView: showMinimalView, parentIsReadOnly: parentIsReadOnly, onRowChange: onRowChange, onRemoveRow: onRemoveRow, onSelectRow: onSelectRow, onReorderRows: onReorderRows })))));
63
+ React.createElement(TableCell, { padding: "checkbox" }))),
64
+ React.createElement(GroupTableBody, { tableQItem: qItem, readOnly: readOnly, tableRows: tableRows, selectedIds: selectedIds, qItemsIndexMap: qItemsIndexMap, isRepeated: isRepeated, showMinimalView: showMinimalView, parentIsReadOnly: parentIsReadOnly, onRowChange: onRowChange, onRemoveRow: onRemoveRow, onSelectRow: onSelectRow, onReorderRows: onReorderRows })))));
65
65
  }
66
66
  export default GroupTableView;
67
67
  //# sourceMappingURL=GroupTableView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupTableView.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/Tables/GroupTableView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupTableView.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/Tables/GroupTableView.tsx"],"names":[],"mappings":"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"}
@@ -27,6 +27,8 @@ import useHidden from '../../hooks/useHidden';
27
27
  import GroupItemSwitcher from '../FormComponents/GroupItem/GroupItemSwitcher';
28
28
  import useReadOnly from '../../hooks/useReadOnly';
29
29
  import Box from '@mui/material/Box';
30
+ import { isSpecificItemControl } from '../../utils';
31
+ import GroupTable from '../FormComponents/Tables/GroupTable';
30
32
  function FormTopLevelItem(props) {
31
33
  const { topLevelQItem, topLevelQRItemOrItems, parentIsReadOnly, onQrItemChange, onQrRepeatGroupChange } = props;
32
34
  const itemIsTabContainer = isTabContainer(topLevelQItem);
@@ -59,6 +61,10 @@ function FormTopLevelItem(props) {
59
61
  }
60
62
  // If form is untabbed, it is rendered as a regular group
61
63
  if (itemIsGroup) {
64
+ // GroupTable "gtable" can be rendered with either repeats:true or false
65
+ if (isSpecificItemControl(topLevelQItem, 'gtable')) {
66
+ return (React.createElement(GroupTable, { key: topLevelQItem.linkId, qItem: topLevelQItem, qrItems: topLevelQRItem ? [topLevelQRItem] : [], groupCardElevation: 1, isRepeated: false, parentIsReadOnly: parentIsReadOnly, onQrRepeatGroupChange: onQrRepeatGroupChange }));
67
+ }
62
68
  return (React.createElement(GroupItem, { key: topLevelQItem.linkId, qItem: topLevelQItem, qrItem: topLevelQRItem, groupCardElevation: 1, isRepeated: false, parentIsReadOnly: readOnly, onQrItemChange: onQrItemChange }));
63
69
  }
64
70
  // Otherwise, it is rendered as a non-group item
@@ -1 +1 @@
1
- {"version":3,"file":"FormTopLevelItem.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormTopLevelItem.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FormTopLevelItem.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormTopLevelItem.tsx"],"names":[],"mappings":"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"}
@@ -2,12 +2,12 @@ import type { QuestionnaireItem } from 'fhir/r4';
2
2
  interface UseDecimalCalculatedExpression {
3
3
  calcExpUpdated: boolean;
4
4
  }
5
- interface useDecimalCalculatedExpressionProps {
5
+ interface UseDecimalCalculatedExpressionProps {
6
6
  qItem: QuestionnaireItem;
7
7
  inputValue: string;
8
8
  precision: number | null;
9
9
  onChangeByCalcExpressionDecimal: (calcExpressionValue: number) => void;
10
10
  onChangeByCalcExpressionNull: () => void;
11
11
  }
12
- declare function useDecimalCalculatedExpression(props: useDecimalCalculatedExpressionProps): UseDecimalCalculatedExpression;
12
+ declare function useDecimalCalculatedExpression(props: UseDecimalCalculatedExpressionProps): UseDecimalCalculatedExpression;
13
13
  export default useDecimalCalculatedExpression;
@@ -0,0 +1,14 @@
1
+ import type { QuestionnaireItem } from 'fhir/r4';
2
+ interface UseQuantityCalculatedExpression {
3
+ calcExpUpdated: boolean;
4
+ }
5
+ interface UseQuantityCalculatedExpressionProps {
6
+ qItem: QuestionnaireItem;
7
+ inputValue: string;
8
+ precision: number | null;
9
+ onChangeByCalcExpressionDecimal: (newValue: number) => void;
10
+ onChangeByCalcExpressionQuantity: (newValue: number, newUnitSystem: string, newUnitCode: string, newUnitDisplay: string) => void;
11
+ onChangeByCalcExpressionNull: () => void;
12
+ }
13
+ declare function useQuantityCalculatedExpression(props: UseQuantityCalculatedExpressionProps): UseQuantityCalculatedExpression;
14
+ export default useQuantityCalculatedExpression;
@@ -0,0 +1,105 @@
1
+ /*
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { useEffect, useState } from 'react';
18
+ import { useQuestionnaireStore } from '../stores';
19
+ import { validateCodePromise } from '../utils/valueSet';
20
+ import { TERMINOLOGY_SERVER_URL } from '../globals';
21
+ function useQuantityCalculatedExpression(props) {
22
+ const { qItem, inputValue, precision, onChangeByCalcExpressionDecimal, onChangeByCalcExpressionQuantity, onChangeByCalcExpressionNull } = props;
23
+ const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
24
+ const [calcExpUpdated, setCalcExpUpdated] = useState(false);
25
+ useEffect(() => {
26
+ var _a;
27
+ const calcExpression = (_a = calculatedExpressions[qItem.linkId]) === null || _a === void 0 ? void 0 : _a.find((exp) => exp.from === 'item');
28
+ if (!calcExpression) {
29
+ return;
30
+ }
31
+ // only update if calculated value is different from current value
32
+ if (calcExpression.value !== inputValue &&
33
+ (typeof calcExpression.value === 'number' ||
34
+ typeof calcExpression.value === 'string' ||
35
+ calcExpression.value === null)) {
36
+ // Null path
37
+ if (calcExpression.value === null) {
38
+ onChangeByCalcExpressionNull();
39
+ return;
40
+ }
41
+ // Number path
42
+ if (typeof calcExpression.value === 'number') {
43
+ const calcExpressionValue = typeof precision === 'number'
44
+ ? parseFloat(calcExpression.value.toFixed(precision))
45
+ : calcExpression.value;
46
+ // only update if calculated value is different from current value
47
+ if (calcExpressionValue !== parseFloat(inputValue)) {
48
+ // update ui to show calculated value changes
49
+ setCalcExpUpdated(true);
50
+ setTimeout(() => {
51
+ setCalcExpUpdated(false);
52
+ }, 500);
53
+ // calculatedExpression value is null
54
+ if (calcExpressionValue === null) {
55
+ onChangeByCalcExpressionNull();
56
+ return;
57
+ }
58
+ // calculatedExpression value is a number
59
+ onChangeByCalcExpressionDecimal(calcExpressionValue);
60
+ }
61
+ }
62
+ // String path (quantity)
63
+ if (typeof calcExpression.value === 'string') {
64
+ try {
65
+ const [value, unitCode] = calcExpression.value.split(' ');
66
+ const unitCodeFormatted = unitCode.replace(/'/g, '');
67
+ const ucumValueSet = 'http://hl7.org/fhir/ValueSet/ucum-units';
68
+ const ucumSystem = 'http://unitsofmeasure.org';
69
+ validateCodePromise(ucumValueSet, ucumSystem, unitCodeFormatted, TERMINOLOGY_SERVER_URL).then((validateCodeResponse) => {
70
+ // Return early if validate-code request fails
71
+ if (!validateCodeResponse) {
72
+ onChangeByCalcExpressionNull();
73
+ return;
74
+ }
75
+ if (validateCodeResponse.parameter) {
76
+ const systemParameter = validateCodeResponse.parameter.find((p) => p.name === 'system');
77
+ const codeParameter = validateCodeResponse.parameter.find((p) => p.name === 'code');
78
+ const displayParameter = validateCodeResponse.parameter.find((p) => p.name === 'display');
79
+ if (systemParameter.valueUri &&
80
+ codeParameter.valueCode &&
81
+ displayParameter.valueString) {
82
+ // update ui to show calculated value changes
83
+ setCalcExpUpdated(true);
84
+ setTimeout(() => {
85
+ setCalcExpUpdated(false);
86
+ }, 500);
87
+ onChangeByCalcExpressionQuantity(parseFloat(value), systemParameter.valueUri, codeParameter.valueCode, displayParameter.valueString);
88
+ }
89
+ }
90
+ });
91
+ }
92
+ catch (e) {
93
+ console.error(e);
94
+ onChangeByCalcExpressionNull();
95
+ }
96
+ }
97
+ }
98
+ },
99
+ // Only trigger this effect if calculatedExpression of item changes
100
+ // eslint-disable-next-line react-hooks/exhaustive-deps
101
+ [calculatedExpressions]);
102
+ return { calcExpUpdated: calcExpUpdated };
103
+ }
104
+ export default useQuantityCalculatedExpression;
105
+ //# sourceMappingURL=useQuantityCalculatedExpression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuantityCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useQuantityCalculatedExpression.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { QuestionnaireItem } from 'fhir/r4';
1
+ import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4';
2
2
  interface RenderingExtensions {
3
3
  displayUnit: string;
4
4
  displayPrompt: string;
@@ -7,6 +7,7 @@ interface RenderingExtensions {
7
7
  readOnly: boolean;
8
8
  entryFormat: string;
9
9
  required: boolean;
10
+ quantityUnit: QuestionnaireItemAnswerOption | null;
10
11
  }
11
12
  declare function useRenderingExtensions(qItem: QuestionnaireItem): RenderingExtensions;
12
13
  export default useRenderingExtensions;
@@ -14,7 +14,7 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- import { getTextDisplayFlyover, getTextDisplayInstructions, getTextDisplayPrompt, getTextDisplayUnit } from '../utils/itemControl';
17
+ import { getQuantityUnit, getTextDisplayFlyover, getTextDisplayInstructions, getTextDisplayPrompt, getTextDisplayUnit } from '../utils/itemControl';
18
18
  import { structuredDataCapture } from 'fhir-sdc-helpers';
19
19
  import { useMemo } from 'react';
20
20
  function useRenderingExtensions(qItem) {
@@ -27,7 +27,8 @@ function useRenderingExtensions(qItem) {
27
27
  displayFlyover: getTextDisplayFlyover(qItem),
28
28
  readOnly: !!qItem.readOnly,
29
29
  entryFormat: (_a = structuredDataCapture.getEntryFormat(qItem)) !== null && _a !== void 0 ? _a : '',
30
- required: (_b = qItem.required) !== null && _b !== void 0 ? _b : false
30
+ required: (_b = qItem.required) !== null && _b !== void 0 ? _b : false,
31
+ quantityUnit: getQuantityUnit(qItem)
31
32
  });
32
33
  }, [qItem]);
33
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useRenderingExtensions.js","sourceRoot":"","sources":["../../src/hooks/useRenderingExtensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAYhC,SAAS,sBAAsB,CAAC,KAAwB;IACtD,OAAO,OAAO,CACZ,GAAG,EAAE;;QAAC,OAAA,CAAC;YACL,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC;YACtC,aAAa,EAAE,oBAAoB,CAAC,KAAK,CAAC;YAC1C,mBAAmB,EAAE,0BAA0B,CAAC,KAAK,CAAC;YACtD,cAAc,EAAE,qBAAqB,CAAC,KAAK,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ;YAC1B,WAAW,EAAE,MAAA,qBAAqB,CAAC,cAAc,CAAC,KAAK,CAAC,mCAAI,EAAE;YAC9D,QAAQ,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,KAAK;SAClC,CAAC,CAAA;KAAA,EACF,CAAC,KAAK,CAAC,CACR,CAAC;AACJ,CAAC;AAED,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"useRenderingExtensions.js","sourceRoot":"","sources":["../../src/hooks/useRenderingExtensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAahC,SAAS,sBAAsB,CAAC,KAAwB;IACtD,OAAO,OAAO,CACZ,GAAG,EAAE;;QAAC,OAAA,CAAC;YACL,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC;YACtC,aAAa,EAAE,oBAAoB,CAAC,KAAK,CAAC;YAC1C,mBAAmB,EAAE,0BAA0B,CAAC,KAAK,CAAC;YACtD,cAAc,EAAE,qBAAqB,CAAC,KAAK,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ;YAC1B,WAAW,EAAE,MAAA,qBAAqB,CAAC,cAAc,CAAC,KAAK,CAAC,mCAAI,EAAE;YAC9D,QAAQ,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,KAAK;YACjC,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC;SACrC,CAAC,CAAA;KAAA,EACF,CAAC,KAAK,CAAC,CACR,CAAC;AACJ,CAAC;AAED,eAAe,sBAAsB,CAAC"}
@@ -15,6 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { useEffect, useState } from 'react';
18
+ // The purpose of this hook to sync the string state from external changes i.e. re-population changes etc.
18
19
  function useStringInput(valueFromProps) {
19
20
  const [input, setInput] = useState(valueFromProps);
20
21
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useStringInput.js","sourceRoot":"","sources":["../../src/hooks/useStringInput.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,SAAS,cAAc,CAAC,cAAsB;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEnD,SAAS,CACP,GAAG,EAAE;QACH,IAAI,KAAK,KAAK,cAAc,EAAE;YAC5B,QAAQ,CAAC,cAAc,CAAC,CAAC;SAC1B;IACH,CAAC;IACD,iDAAiD;IACjD,uDAAuD;IACvD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"useStringInput.js","sourceRoot":"","sources":["../../src/hooks/useStringInput.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,0GAA0G;AAC1G,SAAS,cAAc,CAAC,cAAsB;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEnD,SAAS,CACP,GAAG,EAAE;QACH,IAAI,KAAK,KAAK,cAAc,EAAE;YAC5B,QAAQ,CAAC,cAAc,CAAC,CAAC;SAC1B;IACH,CAAC;IACD,iDAAiD;IACjD,uDAAuD;IACvD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,eAAe,cAAc,CAAC"}
@@ -3,3 +3,18 @@ export interface ValueSetPromise {
3
3
  promise: Promise<ValueSet>;
4
4
  valueSet?: ValueSet;
5
5
  }
6
+ export interface ValidateCodeResponse extends Parameters<any> {
7
+ parameter: [SystemParameter, CodeParameter, DisplayParameter];
8
+ }
9
+ export interface SystemParameter {
10
+ name: 'system';
11
+ valueUri: string;
12
+ }
13
+ export interface CodeParameter {
14
+ name: 'code';
15
+ valueCode: string;
16
+ }
17
+ export interface DisplayParameter {
18
+ name: 'display';
19
+ valueString: string;
20
+ }
@@ -0,0 +1,2 @@
1
+ import type { Questionnaire } from 'fhir/r4';
2
+ export declare const qInitialValueSample: Questionnaire;