@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
@@ -16,23 +16,23 @@
16
16
  */
17
17
 
18
18
  import { useQuery } from '@tanstack/react-query';
19
- import type { Coding, ValueSet } from 'fhir/r4';
20
- import { getValueSetCodings, getValueSetPromise } from '../utils/valueSet';
19
+ import type { Coding, QuestionnaireItem, ValueSet } from 'fhir/r4';
20
+ import { getTerminologyServerUrl, getValueSetCodings, getValueSetPromise } from '../utils/valueSet';
21
21
 
22
22
  import type { AlertColor } from '@mui/material/Alert';
23
23
  import useQuestionnaireStore from '../stores/useQuestionnaireStore';
24
+ import useTerminologyServerStore from '../stores/useTerminologyServerStore';
24
25
 
25
26
  function useTerminologyServerQuery(
26
- answerValueSetUrl: string | undefined,
27
+ qItem: QuestionnaireItem,
27
28
  maxList: number,
28
29
  input: string,
29
- searchTerm: string,
30
- terminologyServerUrl?: string
30
+ searchTerm: string
31
31
  ): { options: Coding[]; loading: boolean; feedback?: { message: string; color: AlertColor } } {
32
32
  const processedValueSetUrls = useQuestionnaireStore((state) => state.processedValueSetUrls);
33
+ const defaultTerminologyServerUrl = useTerminologyServerStore((state) => state.url);
33
34
 
34
35
  let fullUrl = '';
35
-
36
36
  let options: Coding[] = [];
37
37
  let loading = false;
38
38
  let feedback: { message: string; color: AlertColor } | undefined;
@@ -46,6 +46,7 @@ function useTerminologyServerQuery(
46
46
  }
47
47
 
48
48
  // Restructure url to include filter and count parameters
49
+ let answerValueSetUrl = qItem.answerValueSet;
49
50
  if (answerValueSetUrl) {
50
51
  if (answerValueSetUrl.startsWith('#')) {
51
52
  answerValueSetUrl = answerValueSetUrl.slice(1);
@@ -62,6 +63,7 @@ function useTerminologyServerQuery(
62
63
  }
63
64
 
64
65
  // Perform query
66
+ const terminologyServerUrl = getTerminologyServerUrl(qItem) ?? defaultTerminologyServerUrl;
65
67
  const { isInitialLoading, error, data } = useQuery<ValueSet>(
66
68
  ['expandValueSet', fullUrl],
67
69
  () => getValueSetPromise(fullUrl, terminologyServerUrl),
@@ -28,6 +28,7 @@ import fhirpath from 'fhirpath';
28
28
  import fhirpath_r4_model from 'fhirpath/fhir-context/r4';
29
29
  import useSmartConfigStore from '../stores/useSmartConfigStore';
30
30
  import useQuestionnaireStore from '../stores/useQuestionnaireStore';
31
+ import useTerminologyServerStore from '../stores/useTerminologyServerStore';
31
32
 
32
33
  function useValueSetCodings(qItem: QuestionnaireItem) {
33
34
  const patient = useSmartConfigStore((state) => state.patient);
@@ -40,6 +41,8 @@ function useValueSetCodings(qItem: QuestionnaireItem) {
40
41
  const addCodingToCache = useQuestionnaireStore((state) => state.addCodingToCache);
41
42
  const { xFhirQueryVariables } = useQuestionnaireStore((state) => state.variables);
42
43
 
44
+ const defaultTerminologyServerUrl = useTerminologyServerStore((state) => state.url);
45
+
43
46
  const valueSetUrl = qItem.answerValueSet;
44
47
  let initialCodings = useMemo(() => {
45
48
  // set options from cached answer options if present
@@ -127,8 +130,8 @@ function useValueSetCodings(qItem: QuestionnaireItem) {
127
130
  const valueSetUrl = qItem.answerValueSet;
128
131
  if (!valueSetUrl || codings.length > 0) return;
129
132
 
130
- const terminologyServer = getTerminologyServerUrl(qItem);
131
- const promise = getValueSetPromise(valueSetUrl, terminologyServer);
133
+ const terminologyServerUrl = getTerminologyServerUrl(qItem) ?? defaultTerminologyServerUrl;
134
+ const promise = getValueSetPromise(valueSetUrl, terminologyServerUrl);
132
135
  if (promise) {
133
136
  promise
134
137
  .then((valueSet: ValueSet) => {
@@ -38,6 +38,7 @@ import { createQuestionnaireModel } from '../utils/questionnaireStoreUtils/creat
38
38
  import { initialiseFormFromResponse } from '../utils/initialiseForm';
39
39
  import { emptyQuestionnaire, emptyResponse } from '../utils/emptyResource';
40
40
  import cloneDeep from 'lodash.clonedeep';
41
+ import useTerminologyServerStore from './useTerminologyServerStore';
41
42
 
42
43
  export interface UseQuestionnaireStoreType {
43
44
  sourceQuestionnaire: Questionnaire;
@@ -57,7 +58,8 @@ export interface UseQuestionnaireStoreType {
57
58
  buildSourceQuestionnaire: (
58
59
  questionnaire: Questionnaire,
59
60
  questionnaireResponse?: QuestionnaireResponse,
60
- additionalVariables?: Record<string, object>
61
+ additionalVariables?: Record<string, object>,
62
+ terminologyServerUrl?: string
61
63
  ) => Promise<void>;
62
64
  destroySourceQuestionnaire: () => void;
63
65
  switchTab: (newTabIndex: number) => void;
@@ -87,9 +89,14 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
87
89
  buildSourceQuestionnaire: async (
88
90
  questionnaire,
89
91
  questionnaireResponse = cloneDeep(emptyResponse),
90
- additionalVariables = {}
92
+ additionalVariables = {},
93
+ terminologyServerUrl = useTerminologyServerStore.getState().url
91
94
  ) => {
92
- const questionnaireModel = await createQuestionnaireModel(questionnaire, additionalVariables);
95
+ const questionnaireModel = await createQuestionnaireModel(
96
+ questionnaire,
97
+ additionalVariables,
98
+ terminologyServerUrl
99
+ );
93
100
 
94
101
  const {
95
102
  initialEnableWhenItems,
@@ -0,0 +1,34 @@
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 { create } from 'zustand';
19
+
20
+ const ONTOSERVER_R4 = 'https://r4.ontoserver.csiro.au/fhir';
21
+
22
+ export interface UseTerminologyServerStoreType {
23
+ url: string;
24
+ setUrl: (newUrl: string) => void;
25
+ resetUrl: () => void;
26
+ }
27
+
28
+ const useTerminologyServerStore = create<UseTerminologyServerStoreType>()((set) => ({
29
+ url: ONTOSERVER_R4,
30
+ setUrl: (newUrl: string) => set(() => ({ url: newUrl })),
31
+ resetUrl: () => set(() => ({ url: ONTOSERVER_R4 }))
32
+ }));
33
+
34
+ export default useTerminologyServerStore;
@@ -21,7 +21,6 @@ import Input from './Input';
21
21
  import Table from './Table';
22
22
  import Button from './Button';
23
23
  import Backdrop from './Backdrop';
24
- import Typography from './Typography';
25
24
  import Autocomplete from './Autocomplete';
26
25
  import Accordion from './Accordion';
27
26
  import SpeedDial from './SpeedDial';
@@ -36,7 +35,6 @@ function ComponentsOverrides(theme: Theme) {
36
35
  Paper(),
37
36
  Button(theme),
38
37
  Backdrop(theme),
39
- Typography(theme),
40
38
  Autocomplete(theme),
41
39
  SpeedDial(theme)
42
40
  );
@@ -32,7 +32,7 @@ interface isHiddenParams {
32
32
  /**
33
33
  * Test the given QItem on a series of checks to verify if the item should be displayed
34
34
  * Check if qItem has hidden attribute
35
- * Check if qItem fufilled its enableWhen criteria
35
+ * Check if qItem fulfilled its enableWhen criteria
36
36
  *
37
37
  * @author Sean Fong
38
38
  */
@@ -30,7 +30,8 @@ import { addAdditionalVariables } from './addAdditionalVariables';
30
30
 
31
31
  export async function createQuestionnaireModel(
32
32
  questionnaire: Questionnaire,
33
- additionalVariables: Record<string, object>
33
+ additionalVariables: Record<string, object>,
34
+ terminologyServerUrl: string
34
35
  ): Promise<QuestionnaireModel> {
35
36
  if (!questionnaire.item) {
36
37
  return createEmptyModel();
@@ -43,7 +44,10 @@ export async function createQuestionnaireModel(
43
44
  let variables: Variables = extractQuestionnaireLevelVariables(questionnaire);
44
45
  variables = addAdditionalVariables(variables, additionalVariables);
45
46
 
46
- const extractContainedValueSetsResult = extractContainedValueSets(questionnaire);
47
+ const extractContainedValueSetsResult = extractContainedValueSets(
48
+ questionnaire,
49
+ terminologyServerUrl
50
+ );
47
51
  let valueSetPromises = extractContainedValueSetsResult.valueSetPromises;
48
52
  let processedValueSetCodings = extractContainedValueSetsResult.processedValueSetCodings;
49
53
  const processedValueSetUrls = extractContainedValueSetsResult.processedValueSetUrls;
@@ -51,7 +55,8 @@ export async function createQuestionnaireModel(
51
55
  const extractOtherExtensionsResult = extractOtherExtensions(
52
56
  questionnaire,
53
57
  variables,
54
- valueSetPromises
58
+ valueSetPromises,
59
+ terminologyServerUrl
55
60
  );
56
61
 
57
62
  const { enableWhenItems, enableWhenExpressions, calculatedExpressions, answerExpressions } =
@@ -62,7 +67,8 @@ export async function createQuestionnaireModel(
62
67
  const resolveValueSetsResult = await resolveValueSets(
63
68
  variables,
64
69
  valueSetPromises,
65
- processedValueSetCodings
70
+ processedValueSetCodings,
71
+ terminologyServerUrl
66
72
  );
67
73
 
68
74
  variables = resolveValueSetsResult.variables;
@@ -19,7 +19,10 @@ import type { ValueSetPromise } from '../../interfaces/valueSet.interface';
19
19
  import { getValueSetCodings, getValueSetPromise } from '../valueSet';
20
20
  import type { Coding, Questionnaire, ValueSet } from 'fhir/r4';
21
21
 
22
- export function extractContainedValueSets(questionnaire: Questionnaire): {
22
+ export function extractContainedValueSets(
23
+ questionnaire: Questionnaire,
24
+ terminologyServerUrl: string
25
+ ): {
23
26
  processedValueSetCodings: Record<string, Coding[]>;
24
27
  processedValueSetUrls: Record<string, string>;
25
28
  valueSetPromises: Record<string, ValueSetPromise>;
@@ -47,7 +50,7 @@ export function extractContainedValueSets(questionnaire: Questionnaire): {
47
50
  const valueSetUrl = getValueSetUrlFromContained(entry);
48
51
  if (valueSetUrl) {
49
52
  valueSetPromises[entry.id] = {
50
- promise: getValueSetPromise(valueSetUrl)
53
+ promise: getValueSetPromise(valueSetUrl, terminologyServerUrl)
51
54
  };
52
55
  continue;
53
56
  }
@@ -41,7 +41,8 @@ interface ReturnParamsRecursive {
41
41
  export function extractOtherExtensions(
42
42
  questionnaire: Questionnaire,
43
43
  variables: Variables,
44
- valueSetPromises: Record<string, ValueSetPromise>
44
+ valueSetPromises: Record<string, ValueSetPromise>,
45
+ terminologyServerUrl: string
45
46
  ): ReturnParamsRecursive {
46
47
  const enableWhenItems: Record<string, EnableWhenItemProperties> = {};
47
48
  const enableWhenExpressions: Record<string, EnableWhenExpression> = {};
@@ -67,7 +68,8 @@ export function extractOtherExtensions(
67
68
  enableWhenExpressions,
68
69
  calculatedExpressions,
69
70
  answerExpressions,
70
- valueSetPromises
71
+ valueSetPromises,
72
+ defaultTerminologyServerUrl: terminologyServerUrl
71
73
  });
72
74
  }
73
75
 
@@ -89,6 +91,7 @@ interface extractExtensionsFromItemRecursiveParams {
89
91
  calculatedExpressions: Record<string, CalculatedExpression>;
90
92
  answerExpressions: Record<string, AnswerExpression>;
91
93
  valueSetPromises: Record<string, ValueSetPromise>;
94
+ defaultTerminologyServerUrl: string;
92
95
  }
93
96
 
94
97
  function extractExtensionsFromItemRecursive(
@@ -101,7 +104,8 @@ function extractExtensionsFromItemRecursive(
101
104
  enableWhenExpressions,
102
105
  calculatedExpressions,
103
106
  answerExpressions,
104
- valueSetPromises
107
+ valueSetPromises,
108
+ defaultTerminologyServerUrl
105
109
  } = params;
106
110
 
107
111
  const items = item.item;
@@ -145,7 +149,7 @@ function extractExtensionsFromItemRecursive(
145
149
  const valueSetUrl = item.answerValueSet;
146
150
  if (valueSetUrl) {
147
151
  if (!valueSetPromises[valueSetUrl] && !valueSetUrl.startsWith('#')) {
148
- const terminologyServerUrl = getTerminologyServerUrl(item);
152
+ const terminologyServerUrl = getTerminologyServerUrl(item) ?? defaultTerminologyServerUrl;
149
153
  valueSetPromises[valueSetUrl] = {
150
154
  promise: getValueSetPromise(valueSetUrl, terminologyServerUrl)
151
155
  };
@@ -28,7 +28,8 @@ import type { ValueSetPromise } from '../../interfaces/valueSet.interface';
28
28
  export async function resolveValueSets(
29
29
  variables: Variables,
30
30
  valueSetPromises: Record<string, ValueSetPromise>,
31
- processedValueSetCodings: Record<string, Coding[]>
31
+ processedValueSetCodings: Record<string, Coding[]>,
32
+ terminologyServerUrl: string
32
33
  ): Promise<{ variables: Variables; processedValueSetCodings: Record<string, Coding[]> }> {
33
34
  // Create a <valueSetUrl, XFhirQueryVariableName> map
34
35
  const valueSetToXFhirQueryVariableNameMap: Record<string, string> =
@@ -37,7 +38,7 @@ export async function resolveValueSets(
37
38
  if (Object.keys(valueSetToXFhirQueryVariableNameMap).length > 0) {
38
39
  for (const valueSetUrl in valueSetToXFhirQueryVariableNameMap) {
39
40
  valueSetPromises[valueSetUrl] = {
40
- promise: getValueSetPromise(valueSetUrl)
41
+ promise: getValueSetPromise(valueSetUrl, terminologyServerUrl)
41
42
  };
42
43
  }
43
44
  }
package/src/utils/tabs.ts CHANGED
@@ -19,7 +19,7 @@ import type { Tabs } from '../interfaces/tab.interface';
19
19
  import type { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
20
20
  import type { Coding, QuestionnaireItem } from 'fhir/r4';
21
21
  import { hasHiddenExtension, isSpecificItemControl } from './itemControl';
22
- import { isHiddenByEnableWhens } from './qItem';
22
+ import { isHidden, isHiddenByEnableWhens } from './qItem';
23
23
 
24
24
  export function getFirstVisibleTab(
25
25
  tabs: Tabs,
@@ -253,3 +253,56 @@ export function getContextDisplays(item: QuestionnaireItem): QuestionnaireItem[]
253
253
  isSpecificItemControl(childItem, 'context-display') && childItem.type === 'display'
254
254
  );
255
255
  }
256
+
257
+ interface IsTabHiddenParams {
258
+ qItem: QuestionnaireItem;
259
+ contextDisplayItems: QuestionnaireItem[];
260
+ isTab: boolean;
261
+ enableWhenIsActivated: boolean;
262
+ enableWhenItems: EnableWhenItems;
263
+ enableWhenExpressions: Record<string, EnableWhenExpression>;
264
+ completedTabsCollapsed: boolean;
265
+ }
266
+
267
+ export function isTabHidden(params: IsTabHiddenParams): boolean {
268
+ const {
269
+ qItem,
270
+ contextDisplayItems,
271
+ isTab,
272
+ enableWhenIsActivated,
273
+ enableWhenItems,
274
+ enableWhenExpressions,
275
+ completedTabsCollapsed
276
+ } = params;
277
+
278
+ if (
279
+ !isTab ||
280
+ isHidden({
281
+ questionnaireItem: qItem,
282
+ enableWhenIsActivated,
283
+ enableWhenItems,
284
+ enableWhenExpressions
285
+ })
286
+ ) {
287
+ return true;
288
+ }
289
+
290
+ if (completedTabsCollapsed) {
291
+ const completedDisplayItem = contextDisplayItems.find(
292
+ (contextDisplayItem) => contextDisplayItem.text === 'Complete'
293
+ );
294
+ if (
295
+ completedDisplayItem &&
296
+ !isHidden({
297
+ questionnaireItem: completedDisplayItem,
298
+ enableWhenIsActivated,
299
+ enableWhenItems,
300
+ enableWhenExpressions
301
+ })
302
+ ) {
303
+ return true;
304
+ }
305
+ }
306
+
307
+ return false;
308
+ }
@@ -35,7 +35,6 @@ const VALID_VALUE_SET_URL_REGEX =
35
35
  /https?:\/\/(www\.)?[-\w@:%.+~#=]{2,256}\.[a-z]{2,4}\b([-@\w:%+.~#?&/=]*ValueSet[-@\w:%+.~#?&/=]*)/;
36
36
 
37
37
  const VALID_FHIRPATH_VARIABLE_REGEX = /%(.*?)\./;
38
- const ONTOSERVER_ENDPOINT = 'https://r4.ontoserver.csiro.au/fhir/';
39
38
 
40
39
  export function getTerminologyServerUrl(qItem: QuestionnaireItem): string | undefined {
41
40
  const itemControl = qItem.extension?.find(
@@ -48,18 +47,18 @@ export function getTerminologyServerUrl(qItem: QuestionnaireItem): string | unde
48
47
  return undefined;
49
48
  }
50
49
 
51
- export function getValueSetPromise(url: string, terminologyServer?: string): Promise<ValueSet> {
50
+ export function getValueSetPromise(url: string, terminologyServerUrl: string): Promise<ValueSet> {
52
51
  let valueSetUrl = url;
53
52
 
54
53
  if (url.includes('ValueSet/$expand?url=')) {
55
54
  const splitUrl = url.split('ValueSet/$expand?url=');
56
- terminologyServer = splitUrl[0];
55
+ terminologyServerUrl = splitUrl[0];
57
56
  valueSetUrl = splitUrl[1];
58
57
  }
59
58
 
60
59
  valueSetUrl = valueSetUrl.replace('|', '&version=');
61
60
 
62
- return FHIR.client({ serverUrl: terminologyServer ?? ONTOSERVER_ENDPOINT }).request({
61
+ return FHIR.client({ serverUrl: terminologyServerUrl }).request({
63
62
  url: 'ValueSet/$expand?url=' + valueSetUrl
64
63
  });
65
64
  }