@aehrc/smart-forms-renderer 0.6.7 → 0.7.0

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 (95) hide show
  1. package/README.md +13 -10
  2. package/lib/components/Box.styles.d.ts +1 -0
  3. package/lib/components/Box.styles.js +5 -1
  4. package/lib/components/Box.styles.js.map +1 -1
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +3 -5
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioSingle.js +2 -2
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioSingle.js.map +1 -1
  9. package/lib/components/FormComponents/ItemParts/CheckboxSingle.js +2 -2
  10. package/lib/components/FormComponents/ItemParts/CheckboxSingle.js.map +1 -1
  11. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +3 -5
  12. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  13. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +1 -1
  14. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -1
  15. package/lib/components/FormComponents/RepeatItem/AddItemButton.js +1 -1
  16. package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -1
  17. package/lib/components/Renderer/FormBodyTabbed.js +2 -2
  18. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  19. package/lib/components/Renderer/SmartFormsRenderer.d.ts +1 -0
  20. package/lib/components/Renderer/SmartFormsRenderer.js +2 -3
  21. package/lib/components/Renderer/SmartFormsRenderer.js.map +1 -1
  22. package/lib/components/Tabs/FormBodySingleTab.d.ts +1 -1
  23. package/lib/components/Tabs/FormBodySingleTab.js +2 -4
  24. package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
  25. package/lib/components/Tabs/FormBodyTabList.d.ts +2 -1
  26. package/lib/components/Tabs/FormBodyTabList.js +24 -26
  27. package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
  28. package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +10 -0
  29. package/lib/components/Tabs/FormBodyTabListWrapper.js +44 -0
  30. package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -0
  31. package/lib/hooks/useInitialiseRenderer.d.ts +1 -1
  32. package/lib/hooks/useInitialiseRenderer.js +17 -3
  33. package/lib/hooks/useInitialiseRenderer.js.map +1 -1
  34. package/lib/hooks/useTerminologyServerQuery.d.ts +2 -2
  35. package/lib/hooks/useTerminologyServerQuery.js +8 -4
  36. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  37. package/lib/hooks/useValueSetCodings.js +5 -2
  38. package/lib/hooks/useValueSetCodings.js.map +1 -1
  39. package/lib/stores/useQuestionnaireStore.d.ts +1 -1
  40. package/lib/stores/useQuestionnaireStore.js +3 -2
  41. package/lib/stores/useQuestionnaireStore.js.map +1 -1
  42. package/lib/stores/useTerminologyServerStore.d.ts +7 -0
  43. package/{src/theme/overrides/Typography.ts → lib/stores/useTerminologyServerStore.js} +9 -17
  44. package/lib/stores/useTerminologyServerStore.js.map +1 -0
  45. package/lib/theme/overrides/Overrides.js +1 -2
  46. package/lib/theme/overrides/Overrides.js.map +1 -1
  47. package/lib/utils/isHidden.d.ts +3 -0
  48. package/lib/utils/isHidden.js +30 -0
  49. package/lib/utils/isHidden.js.map +1 -0
  50. package/lib/utils/qItem.d.ts +1 -1
  51. package/lib/utils/qItem.js +1 -1
  52. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.d.ts +1 -1
  53. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -4
  54. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  55. package/lib/utils/questionnaireStoreUtils/extractContainedValueSets.d.ts +1 -1
  56. package/lib/utils/questionnaireStoreUtils/extractContainedValueSets.js +2 -2
  57. package/lib/utils/questionnaireStoreUtils/extractContainedValueSets.js.map +1 -1
  58. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.d.ts +1 -1
  59. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js +6 -4
  60. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js.map +1 -1
  61. package/lib/utils/questionnaireStoreUtils/resolveValueSets.d.ts +1 -1
  62. package/lib/utils/questionnaireStoreUtils/resolveValueSets.js +2 -2
  63. package/lib/utils/questionnaireStoreUtils/resolveValueSets.js.map +1 -1
  64. package/lib/utils/tabs.d.ts +10 -0
  65. package/lib/utils/tabs.js +26 -1
  66. package/lib/utils/tabs.js.map +1 -1
  67. package/lib/utils/valueSet.d.ts +1 -1
  68. package/lib/utils/valueSet.js +3 -4
  69. package/lib/utils/valueSet.js.map +1 -1
  70. package/package.json +2 -2
  71. package/src/components/Box.styles.ts +6 -1
  72. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +5 -7
  73. package/src/components/FormComponents/ChoiceItems/ChoiceRadioSingle.tsx +2 -2
  74. package/src/components/FormComponents/ItemParts/CheckboxSingle.tsx +2 -2
  75. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +5 -7
  76. package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +1 -0
  77. package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +1 -0
  78. package/src/components/Renderer/FormBodyTabbed.tsx +2 -2
  79. package/src/components/Renderer/SmartFormsRenderer.tsx +9 -2
  80. package/src/components/Tabs/FormBodySingleTab.tsx +3 -6
  81. package/src/components/Tabs/FormBodyTabList.tsx +41 -41
  82. package/src/components/Tabs/FormBodyTabListWrapper.tsx +80 -0
  83. package/src/hooks/useInitialiseRenderer.ts +22 -2
  84. package/src/hooks/useTerminologyServerQuery.ts +8 -6
  85. package/src/hooks/useValueSetCodings.ts +5 -2
  86. package/src/stores/useQuestionnaireStore.ts +10 -3
  87. package/src/stores/useTerminologyServerStore.ts +34 -0
  88. package/src/theme/overrides/Overrides.ts +0 -2
  89. package/src/utils/qItem.ts +1 -1
  90. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +10 -4
  91. package/src/utils/questionnaireStoreUtils/extractContainedValueSets.ts +5 -2
  92. package/src/utils/questionnaireStoreUtils/extractOtherExtensions.ts +8 -4
  93. package/src/utils/questionnaireStoreUtils/resolveValueSets.ts +3 -2
  94. package/src/utils/tabs.ts +54 -1
  95. package/src/utils/valueSet.ts +3 -4
package/lib/utils/tabs.js CHANGED
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { hasHiddenExtension, isSpecificItemControl } from './itemControl';
18
- import { isHiddenByEnableWhens } from './qItem';
18
+ import { isHidden, isHiddenByEnableWhens } from './qItem';
19
19
  export function getFirstVisibleTab(tabs, enableWhenItems, enableWhenExpressions) {
20
20
  return Object.entries(tabs)
21
21
  .sort(([, tabA], [, tabB]) => tabA.tabIndex - tabB.tabIndex)
@@ -187,4 +187,29 @@ export function getContextDisplays(item) {
187
187
  }
188
188
  return item.item.filter((childItem) => isSpecificItemControl(childItem, 'context-display') && childItem.type === 'display');
189
189
  }
190
+ export function isTabHidden(params) {
191
+ const { qItem, contextDisplayItems, isTab, enableWhenIsActivated, enableWhenItems, enableWhenExpressions, completedTabsCollapsed } = params;
192
+ if (!isTab ||
193
+ isHidden({
194
+ questionnaireItem: qItem,
195
+ enableWhenIsActivated,
196
+ enableWhenItems,
197
+ enableWhenExpressions
198
+ })) {
199
+ return true;
200
+ }
201
+ if (completedTabsCollapsed) {
202
+ const completedDisplayItem = contextDisplayItems.find((contextDisplayItem) => contextDisplayItem.text === 'Complete');
203
+ if (completedDisplayItem &&
204
+ !isHidden({
205
+ questionnaireItem: completedDisplayItem,
206
+ enableWhenIsActivated,
207
+ enableWhenItems,
208
+ enableWhenExpressions
209
+ })) {
210
+ return true;
211
+ }
212
+ }
213
+ return false;
214
+ }
190
215
  //# sourceMappingURL=tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/utils/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,UAAU,kBAAkB,CAChC,IAAU,EACV,eAAgC,EAChC,qBAA2D;IAE3D,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC3D,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE;QAC9B,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE;YAC9B,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;SAC7C;QAED,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE;YACpC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;SACnD;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AACD;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,aAAgC;IAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,aAAgC;IAC7D,OAAO,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,IAAuB;;IAC3C,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,mEAAmE,CACrF,CAAC;IAEF,IAAI,WAAW,EAAE;QACf,MAAM,SAAS,GAAG,MAAA,MAAA,WAAW,CAAC,oBAAoB,0CAAE,MAAM,0CAAE,IAAI,CAC9D,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAChC,CAAC;QACF,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAuC,EACvC,eAAwB;IAExB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,IAAI,GAAS,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;YACnB,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC;SACpC,CAAC;KACH;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,2BAA2B,CACzC,MAAyC;IAEzC,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC;IAEvF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,CAAC,qBAAqB,CAAC;YACvC,MAAM;YACN,qBAAqB;YACrB,eAAe;YACf,qBAAqB;SACtB,CAAC,CAAC;QAEH,OAAO;YACL,MAAM;YACN,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoC;IACzE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAC5F,MAAM,CAAC;IAET,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;QACrD,IAAI;QACJ,qBAAqB;QACrB,eAAe;QACf,qBAAqB;KACtB,CAAC,CAAC;IAEH,IAAI,YAAY,GAAG,eAAe,GAAG,CAAC,CAAC;IACvC,MAAM,qBAAqB,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,qBAAqB,EAAE;QAC7B,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE;YAC9C,OAAO,YAAY,CAAC;SACrB;QACD,YAAY,EAAE,CAAC;KAChB;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAU,EACV,qBAA8B,EAC9B,eAAgC,EAChC,qBAA2D;IAE3D,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;QACrD,IAAI;QACJ,qBAAqB;QACrB,eAAe;QACf,qBAAqB;KACtB,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAU,EACV,qBAA8B,EAC9B,eAAgC,EAChC,qBAA2D;IAE3D,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;QACrD,IAAI;QACJ,qBAAqB;QACrB,eAAe;QACf,qBAAqB;KACtB,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,OAAO,EAAE,CAAC;KACX;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACrB,CAAC,SAAS,EAAE,EAAE,CACZ,qBAAqB,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CACtF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/utils/tabs.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import type { FhirResourceString } from '../interfaces/populate.interface';
3
3
  import type { ValueSetPromise } from '../interfaces/valueSet.interface';
4
4
  import type { VariableXFhirQuery } from '../interfaces/variables.interface';
5
5
  export declare function getTerminologyServerUrl(qItem: QuestionnaireItem): string | undefined;
6
- export declare function getValueSetPromise(url: string, terminologyServer?: string): Promise<ValueSet>;
6
+ export declare function getValueSetPromise(url: string, terminologyServerUrl: string): Promise<ValueSet>;
7
7
  export declare function resolvePromises(valueSetPromises: Record<string, ValueSetPromise>): Promise<Record<string, ValueSetPromise>>;
8
8
  /**
9
9
  * Sets an array of codings with the values from a valueSet
@@ -26,7 +26,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
26
26
  import * as FHIR from 'fhirclient';
27
27
  const VALID_VALUE_SET_URL_REGEX = /https?:\/\/(www\.)?[-\w@:%.+~#=]{2,256}\.[a-z]{2,4}\b([-@\w:%+.~#?&/=]*ValueSet[-@\w:%+.~#?&/=]*)/;
28
28
  const VALID_FHIRPATH_VARIABLE_REGEX = /%(.*?)\./;
29
- const ONTOSERVER_ENDPOINT = 'https://r4.ontoserver.csiro.au/fhir/';
30
29
  export function getTerminologyServerUrl(qItem) {
31
30
  var _a;
32
31
  const itemControl = (_a = qItem.extension) === null || _a === void 0 ? void 0 : _a.find((extension) => extension.url === 'http://hl7.org/fhir/StructureDefinition/terminology-server');
@@ -35,15 +34,15 @@ export function getTerminologyServerUrl(qItem) {
35
34
  }
36
35
  return undefined;
37
36
  }
38
- export function getValueSetPromise(url, terminologyServer) {
37
+ export function getValueSetPromise(url, terminologyServerUrl) {
39
38
  let valueSetUrl = url;
40
39
  if (url.includes('ValueSet/$expand?url=')) {
41
40
  const splitUrl = url.split('ValueSet/$expand?url=');
42
- terminologyServer = splitUrl[0];
41
+ terminologyServerUrl = splitUrl[0];
43
42
  valueSetUrl = splitUrl[1];
44
43
  }
45
44
  valueSetUrl = valueSetUrl.replace('|', '&version=');
46
- return FHIR.client({ serverUrl: terminologyServer !== null && terminologyServer !== void 0 ? terminologyServer : ONTOSERVER_ENDPOINT }).request({
45
+ return FHIR.client({ serverUrl: terminologyServerUrl }).request({
47
46
  url: 'ValueSet/$expand?url=' + valueSetUrl
48
47
  });
49
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"valueSet.js","sourceRoot":"","sources":["../../src/utils/valueSet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"valueSet.js","sourceRoot":"","sources":["../../src/utils/valueSet.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.6.7",
3
+ "version": "0.7.0",
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 @@
58
58
  "@storybook/react": "^7.4.0",
59
59
  "@storybook/react-vite": "^7.4.0",
60
60
  "@storybook/testing-library": "^0.2.0",
61
- "@testing-library/jest-dom": "^5.14.1",
61
+ "@testing-library/jest-dom": "^6.1.2",
62
62
  "@testing-library/react": "^14.0.0",
63
63
  "@testing-library/react-hooks": "^7.0.2",
64
64
  "@types/jest": "^29.5.4",
@@ -17,6 +17,7 @@
17
17
 
18
18
  import Box from '@mui/material/Box';
19
19
  import { styled } from '@mui/material/styles';
20
+ import FormControlLabel from '@mui/material/FormControlLabel';
20
21
 
21
22
  export const QGroupContainerBox = styled(Box, {
22
23
  shouldForwardProp: (prop) => prop !== 'cardElevation' && prop !== 'isRepeated'
@@ -26,9 +27,13 @@ export const QGroupContainerBox = styled(Box, {
26
27
  }));
27
28
 
28
29
  export const FullWidthFormComponentBox = styled(Box)(() => ({
29
- marginBottom: 14
30
+ marginBottom: 10
30
31
  }));
31
32
 
32
33
  export const FormTitleWrapper = styled(Box)(() => ({
33
34
  marginTop: 12
34
35
  }));
36
+
37
+ export const StyledFormControlLabel = styled(FormControlLabel)(() => ({
38
+ height: 34
39
+ }));
@@ -35,7 +35,6 @@ import WarningAmberIcon from '@mui/icons-material/WarningAmber';
35
35
  import DoneIcon from '@mui/icons-material/Done';
36
36
  import ErrorIcon from '@mui/icons-material/Error';
37
37
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
38
- import { getTerminologyServerUrl } from '../../../utils/valueSet';
39
38
  import type {
40
39
  PropsWithIsRepeatedAttribute,
41
40
  PropsWithIsTabledAttribute,
@@ -73,17 +72,16 @@ function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
73
72
  const [input, setInput] = useState('');
74
73
  const debouncedInput = useDebounce(input, AUTOCOMPLETE_DEBOUNCE_DURATION);
75
74
 
76
- const answerValueSetUrl = qItem.answerValueSet;
77
- const terminologyServerUrl = getTerminologyServerUrl(qItem);
78
75
  const { options, loading, feedback } = useTerminologyServerQuery(
79
- answerValueSetUrl,
76
+ qItem,
80
77
  maxList,
81
78
  input,
82
- debouncedInput,
83
- terminologyServerUrl
79
+ debouncedInput
84
80
  );
85
81
 
86
- if (!answerValueSetUrl) return null;
82
+ if (!qItem.answerValueSet) {
83
+ return null;
84
+ }
87
85
 
88
86
  // Event handlers
89
87
  function handleValueChange(_: SyntheticEvent<Element, Event>, newValue: Coding | null) {
@@ -16,8 +16,8 @@
16
16
  */
17
17
 
18
18
  import React from 'react';
19
- import FormControlLabel from '@mui/material/FormControlLabel';
20
19
  import Radio from '@mui/material/Radio';
20
+ import { StyledFormControlLabel } from '../../Box.styles';
21
21
 
22
22
  interface ChoiceRadioSingleProps {
23
23
  value: string;
@@ -29,7 +29,7 @@ function ChoiceRadioSingle(props: ChoiceRadioSingleProps) {
29
29
  const { value, label, readOnly } = props;
30
30
 
31
31
  return (
32
- <FormControlLabel
32
+ <StyledFormControlLabel
33
33
  disabled={readOnly}
34
34
  value={value}
35
35
  control={<Radio size="small" />}
@@ -17,7 +17,7 @@
17
17
 
18
18
  import React from 'react';
19
19
  import Checkbox from '@mui/material/Checkbox';
20
- import FormControlLabel from '@mui/material/FormControlLabel';
20
+ import { StyledFormControlLabel } from '../../Box.styles';
21
21
 
22
22
  interface Props {
23
23
  value: string;
@@ -31,7 +31,7 @@ function CheckboxSingle(props: Props) {
31
31
  const { value, label, readOnly, isChecked, onCheckedChange } = props;
32
32
 
33
33
  return (
34
- <FormControlLabel
34
+ <StyledFormControlLabel
35
35
  disabled={readOnly}
36
36
  control={
37
37
  <Checkbox size="small" checked={isChecked} onChange={() => onCheckedChange(value)} />
@@ -37,7 +37,6 @@ import InfoIcon from '@mui/icons-material/Info';
37
37
  import DoneIcon from '@mui/icons-material/Done';
38
38
  import ErrorIcon from '@mui/icons-material/Error';
39
39
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
40
- import { getTerminologyServerUrl } from '../../../utils/valueSet';
41
40
  import type {
42
41
  PropsWithIsRepeatedAttribute,
43
42
  PropsWithIsTabledAttribute,
@@ -80,17 +79,16 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
80
79
  const [input, setInput] = useState('');
81
80
  const debouncedInput = useDebounce(input, AUTOCOMPLETE_DEBOUNCE_DURATION);
82
81
 
83
- const answerValueSetUrl = qItem.answerValueSet;
84
- const terminologyServerUrl = getTerminologyServerUrl(qItem);
85
82
  const { options, loading, feedback } = useTerminologyServerQuery(
86
- answerValueSetUrl,
83
+ qItem,
87
84
  maxList,
88
85
  input,
89
- debouncedInput,
90
- terminologyServerUrl
86
+ debouncedInput
91
87
  );
92
88
 
93
- if (!answerValueSetUrl) return null;
89
+ if (!qItem.answerValueSet) {
90
+ return null;
91
+ }
94
92
 
95
93
  // Event handlers
96
94
  function handleValueChange(_: SyntheticEvent<Element, Event>, newValue: Coding | string | null) {
@@ -35,6 +35,7 @@ function AddItemButton(props: AddItemButtonProps) {
35
35
  <Box display="flex" flexDirection="row-reverse">
36
36
  <Button
37
37
  variant="contained"
38
+ size="small"
38
39
  startIcon={<AddIcon />}
39
40
  disabled={isDisabled}
40
41
  onClick={onAddItem}
@@ -35,6 +35,7 @@ function AddItemButton(props: AddItemButtonProps) {
35
35
  <Box display="flex" flexDirection="row-reverse">
36
36
  <Button
37
37
  variant="contained"
38
+ size="small"
38
39
  startIcon={<AddIcon />}
39
40
  disabled={isDisabled}
40
41
  onClick={onAddItem}
@@ -23,7 +23,7 @@ import TabPanel from '@mui/lab/TabPanel';
23
23
  import { getQrItemsIndex, mapQItemsIndex } from '../../utils/mapItem';
24
24
  import GroupItem from '../FormComponents/GroupItem/GroupItem';
25
25
  import { updateQrGroup } from '../../utils/qrItem';
26
- import FormBodyTabList from '../Tabs/FormBodyTabList';
26
+ import FormBodyTabListWrapper from '../Tabs/FormBodyTabListWrapper';
27
27
  import type { PropsWithQrItemChangeHandler } from '../../interfaces/renderProps.interface';
28
28
  import useQuestionnaireStore from '../../stores/useQuestionnaireStore';
29
29
 
@@ -61,7 +61,7 @@ function FormBodyTabbed(props: FormBodyTabbedProps) {
61
61
  <Grid container spacing={2}>
62
62
  <TabContext value={currentTab.toString()}>
63
63
  <Grid item xs={12} md={3.5} lg={3} xl={2.75}>
64
- <FormBodyTabList qFormItems={qItems} currentTabIndex={currentTab} tabs={tabs} />
64
+ <FormBodyTabListWrapper qFormItems={qItems} currentTabIndex={currentTab} tabs={tabs} />
65
65
  </Grid>
66
66
 
67
67
  <Grid item xs={12} md={8.5} lg={9} xl={9.25}>
@@ -32,17 +32,24 @@ interface SmartFormsRendererProps {
32
32
  questionnaire: Questionnaire;
33
33
  questionnaireResponse?: QuestionnaireResponse;
34
34
  additionalVariables?: Record<string, object>;
35
+ terminologyServerUrl?: string;
35
36
  fhirClient?: Client;
36
37
  }
37
38
 
38
- // TODO add terminiology server
39
39
  function SmartFormsRenderer(props: SmartFormsRendererProps) {
40
- const { questionnaire, questionnaireResponse, additionalVariables, fhirClient } = props;
40
+ const {
41
+ questionnaire,
42
+ questionnaireResponse,
43
+ additionalVariables,
44
+ terminologyServerUrl,
45
+ fhirClient
46
+ } = props;
41
47
 
42
48
  const isLoading = useInitialiseRenderer(
43
49
  questionnaire,
44
50
  questionnaireResponse,
45
51
  additionalVariables,
52
+ terminologyServerUrl,
46
53
  fhirClient
47
54
  );
48
55
  const queryClient = useQueryClient();
@@ -23,23 +23,20 @@ import Typography from '@mui/material/Typography';
23
23
 
24
24
  import useQuestionnaireStore from '../../stores/useQuestionnaireStore';
25
25
  import type { QuestionnaireItem } from 'fhir/r4';
26
- import { getContextDisplays } from '../../utils/tabs';
27
26
  import ContextDisplayItem from '../FormComponents/ItemParts/ContextDisplayItem';
28
27
 
29
28
  interface FormBodySingleTabProps {
30
- qItem: QuestionnaireItem;
29
+ contextDisplayItems: QuestionnaireItem[];
31
30
  selected: boolean;
32
31
  tabLabel: string;
33
32
  listIndex: number;
34
33
  }
35
34
 
36
35
  const FormBodySingleTab = memo(function FormBodySingleTab(props: FormBodySingleTabProps) {
37
- const { qItem, selected, tabLabel, listIndex } = props;
36
+ const { contextDisplayItems, selected, tabLabel, listIndex } = props;
38
37
 
39
38
  const switchTab = useQuestionnaireStore((state) => state.switchTab);
40
39
 
41
- const contextDisplayItems = getContextDisplays(qItem);
42
-
43
40
  function handleTabClick() {
44
41
  switchTab(listIndex);
45
42
  window.scrollTo(0, 0);
@@ -55,7 +52,7 @@ const FormBodySingleTab = memo(function FormBodySingleTab(props: FormBodySingleT
55
52
  primary={
56
53
  <Box display="flex" alignItems="center" justifyContent="space-between">
57
54
  <Typography variant="subtitle2">{tabLabel}</Typography>
58
- <Box display="flex">
55
+ <Box display="flex" minHeight={24} minWidth={24} ml={1}>
59
56
  {contextDisplayItems.map((item) => {
60
57
  return <ContextDisplayItem key={item.linkId} displayItem={item} />;
61
58
  })}
@@ -15,70 +15,70 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import React, { memo } from 'react';
19
- import Box from '@mui/material/Box';
20
- import Card from '@mui/material/Card';
18
+ import React, { memo, useMemo } from 'react';
21
19
  import Collapse from '@mui/material/Collapse';
22
- import { PrimarySelectableList } from '../Lists.styles';
23
20
  import { TransitionGroup } from 'react-transition-group';
24
- import { isHidden } from '../../utils/qItem';
25
21
  import { getShortText } from '../../utils/itemControl';
26
22
  import type { QuestionnaireItem } from 'fhir/r4';
27
23
  import FormBodySingleTab from './FormBodySingleTab';
28
24
  import type { Tabs } from '../../interfaces/tab.interface';
29
25
  import useQuestionnaireStore from '../../stores/useQuestionnaireStore';
26
+ import { getContextDisplays, isTabHidden } from '../../utils/tabs';
30
27
 
31
28
  interface FormBodyTabListProps {
32
- qFormItems: QuestionnaireItem[];
29
+ topLevelItems: QuestionnaireItem[];
33
30
  currentTabIndex: number;
34
31
  tabs: Tabs;
32
+ completedTabsCollapsed: boolean;
35
33
  }
36
34
 
37
35
  const FormBodyTabList = memo(function FormBodyTabList(props: FormBodyTabListProps) {
38
- const { qFormItems, currentTabIndex, tabs } = props;
36
+ const { topLevelItems, currentTabIndex, tabs, completedTabsCollapsed } = props;
39
37
 
40
38
  const enableWhenIsActivated = useQuestionnaireStore((state) => state.enableWhenIsActivated);
41
39
  const enableWhenItems = useQuestionnaireStore((state) => state.enableWhenItems);
42
40
  const enableWhenExpressions = useQuestionnaireStore((state) => state.enableWhenExpressions);
43
41
 
42
+ const allContextDisplayItems = useMemo(
43
+ () => topLevelItems.map((topLevelItem) => getContextDisplays(topLevelItem)),
44
+ [topLevelItems]
45
+ );
46
+
44
47
  return (
45
- <Card sx={{ p: 0.75, mb: 2 }}>
46
- <Box sx={{ flexGrow: 1 }}>
47
- <PrimarySelectableList dense disablePadding sx={{ my: 1 }} data-test="renderer-tab-list">
48
- <TransitionGroup>
49
- {qFormItems.map((qItem, i) => {
50
- const isTab = !!tabs[qItem.linkId];
48
+ <TransitionGroup>
49
+ {topLevelItems.map((qItem, i) => {
50
+ const contextDisplayItems = allContextDisplayItems[i];
51
+ const isTab = !!tabs[qItem.linkId];
51
52
 
52
- if (
53
- !isTab ||
54
- isHidden({
55
- questionnaireItem: qItem,
56
- enableWhenIsActivated,
57
- enableWhenItems,
58
- enableWhenExpressions
59
- })
60
- ) {
61
- return null;
62
- }
53
+ if (
54
+ isTabHidden({
55
+ qItem,
56
+ contextDisplayItems,
57
+ isTab,
58
+ enableWhenIsActivated,
59
+ enableWhenItems,
60
+ enableWhenExpressions,
61
+ completedTabsCollapsed
62
+ })
63
+ ) {
64
+ return null;
65
+ }
63
66
 
64
- const tabIsSelected = currentTabIndex.toString() === i.toString();
65
- const tabLabel = getShortText(qItem) ?? qItem.text ?? '';
67
+ const tabIsSelected = currentTabIndex.toString() === i.toString();
68
+ const tabLabel = getShortText(qItem) ?? qItem.text ?? '';
66
69
 
67
- return (
68
- <Collapse key={qItem.linkId} timeout={100}>
69
- <FormBodySingleTab
70
- qItem={qItem}
71
- selected={tabIsSelected}
72
- tabLabel={tabLabel}
73
- listIndex={i}
74
- />
75
- </Collapse>
76
- );
77
- })}
78
- </TransitionGroup>
79
- </PrimarySelectableList>
80
- </Box>
81
- </Card>
70
+ return (
71
+ <Collapse key={qItem.linkId} timeout={100}>
72
+ <FormBodySingleTab
73
+ contextDisplayItems={contextDisplayItems}
74
+ selected={tabIsSelected}
75
+ tabLabel={tabLabel}
76
+ listIndex={i}
77
+ />
78
+ </Collapse>
79
+ );
80
+ })}
81
+ </TransitionGroup>
82
82
  );
83
83
  });
84
84
 
@@ -0,0 +1,80 @@
1
+ /*
2
+ * Copyright 2023 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
+
18
+ import React, { memo, useState } from 'react';
19
+ import Box from '@mui/material/Box';
20
+ import Card from '@mui/material/Card';
21
+ import { PrimarySelectableList } from '../Lists.styles';
22
+ import type { QuestionnaireItem } from 'fhir/r4';
23
+ import type { Tabs } from '../../interfaces/tab.interface';
24
+ import { IconButton } from '@mui/material';
25
+ import ExpandLess from '@mui/icons-material/ExpandLess';
26
+ import ExpandMore from '@mui/icons-material/ExpandMore';
27
+ import Typography from '@mui/material/Typography';
28
+ import Divider from '@mui/material/Divider';
29
+ import FormBodyTabList from './FormBodyTabList';
30
+
31
+ interface FormBodyTabListWrapperProps {
32
+ qFormItems: QuestionnaireItem[];
33
+ currentTabIndex: number;
34
+ tabs: Tabs;
35
+ }
36
+
37
+ const FormBodyTabListWrapper = memo(function FormBodyTabListWrapper(
38
+ props: FormBodyTabListWrapperProps
39
+ ) {
40
+ const { qFormItems, currentTabIndex, tabs } = props;
41
+
42
+ const [completedTabsExpanded, setCompletedTabsExpanded] = useState(true);
43
+
44
+ return (
45
+ <Card sx={{ p: 0.75, mb: 2 }}>
46
+ <Box sx={{ flexGrow: 1 }}>
47
+ <PrimarySelectableList dense disablePadding sx={{ mb: 1 }} data-test="renderer-tab-list">
48
+ <Box display="flex" justifyContent="center" alignItems="center" mx={2} columnGap={0.5}>
49
+ <Typography
50
+ variant="overline"
51
+ fontSize={9}
52
+ color={completedTabsExpanded ? 'text.secondary' : 'text.disabled'}>
53
+ Completed tabs {completedTabsExpanded ? 'shown' : 'hidden'}
54
+ </Typography>
55
+ <IconButton
56
+ size="small"
57
+ onClick={() => {
58
+ setCompletedTabsExpanded(!completedTabsExpanded);
59
+ }}>
60
+ {completedTabsExpanded ? (
61
+ <ExpandLess fontSize="small" />
62
+ ) : (
63
+ <ExpandMore fontSize="small" />
64
+ )}
65
+ </IconButton>
66
+ </Box>
67
+ <Divider sx={{ mx: 1 }} light />
68
+ <FormBodyTabList
69
+ topLevelItems={qFormItems}
70
+ currentTabIndex={currentTabIndex}
71
+ tabs={tabs}
72
+ completedTabsCollapsed={!completedTabsExpanded}
73
+ />
74
+ </PrimarySelectableList>
75
+ </Box>
76
+ </Card>
77
+ );
78
+ });
79
+
80
+ export default FormBodyTabListWrapper;
@@ -23,11 +23,13 @@ import useQuestionnaireResponseStore from '../stores/useQuestionnaireResponseSto
23
23
  import type Client from 'fhirclient/lib/Client';
24
24
  import useSmartConfigStore from '../stores/useSmartConfigStore';
25
25
  import { readEncounter, readPatient, readUser } from '../api/smartClient';
26
+ import useTerminologyServerStore from '../stores/useTerminologyServerStore';
26
27
 
27
28
  function useInitialiseRenderer(
28
29
  questionnaire: Questionnaire,
29
30
  questionnaireResponse?: QuestionnaireResponse,
30
31
  additionalVariables?: Record<string, object>,
32
+ terminologyServerUrl?: string,
31
33
  fhirClient?: Client
32
34
  ): boolean {
33
35
  const buildSourceQuestionnaire = useQuestionnaireStore((state) => state.buildSourceQuestionnaire);
@@ -39,6 +41,8 @@ function useInitialiseRenderer(
39
41
  (state) => state.setUpdatableResponseAsPopulated
40
42
  );
41
43
 
44
+ const setTerminologyServerUrl = useTerminologyServerStore((state) => state.setUrl);
45
+ const resetTerminologyServerUrl = useTerminologyServerStore((state) => state.resetUrl);
42
46
  const setSmartClient = useSmartConfigStore((state) => state.setClient);
43
47
  const setPatient = useSmartConfigStore((state) => state.setPatient);
44
48
  const setUser = useSmartConfigStore((state) => state.setUser);
@@ -48,6 +52,7 @@ function useInitialiseRenderer(
48
52
 
49
53
  useLayoutEffect(() => {
50
54
  setLoading(true);
55
+ // set fhirClient if provided
51
56
  if (fhirClient) {
52
57
  setSmartClient(fhirClient);
53
58
  readPatient(fhirClient).then((patient) => {
@@ -61,7 +66,20 @@ function useInitialiseRenderer(
61
66
  });
62
67
  }
63
68
 
64
- buildSourceQuestionnaire(questionnaire, questionnaireResponse, additionalVariables).then(() => {
69
+ // set terminology server url if provided, otherwise reset it back to ontoserver
70
+ if (terminologyServerUrl) {
71
+ setTerminologyServerUrl(terminologyServerUrl);
72
+ } else {
73
+ resetTerminologyServerUrl();
74
+ }
75
+
76
+ // initialise form including enableWhen, enableWhenExpressions, calculatedExpressions, initialExpressions, answerExpressions, cache answerValueSets
77
+ buildSourceQuestionnaire(
78
+ questionnaire,
79
+ questionnaireResponse,
80
+ additionalVariables,
81
+ terminologyServerUrl
82
+ ).then(() => {
65
83
  buildSourceResponse(createQuestionnaireResponse(questionnaire));
66
84
 
67
85
  if (questionnaireResponse) {
@@ -82,7 +100,9 @@ function useInitialiseRenderer(
82
100
  setSmartClient,
83
101
  setPatient,
84
102
  setUser,
85
- setEncounter
103
+ setEncounter,
104
+ terminologyServerUrl,
105
+ setTerminologyServerUrl
86
106
  ]);
87
107
 
88
108
  return loading;