@aehrc/smart-forms-renderer 0.20.0 → 0.21.1

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 (46) hide show
  1. package/lib/interfaces/enableWhen.interface.d.ts +11 -3
  2. package/lib/interfaces/index.d.ts +1 -1
  3. package/lib/interfaces/questionnaireStore.interface.d.ts +2 -2
  4. package/lib/setup-jest.js +1 -0
  5. package/lib/stores/questionnaireStore.d.ts +3 -3
  6. package/lib/stores/questionnaireStore.js +20 -5
  7. package/lib/stores/questionnaireStore.js.map +1 -1
  8. package/lib/stories/MedicalHistoryTable.stories.js +45 -0
  9. package/lib/stories/SmartFormsRenderer.stories.js +117 -0
  10. package/lib/utils/enableWhenExpression.d.ts +22 -5
  11. package/lib/utils/enableWhenExpression.js +106 -55
  12. package/lib/utils/enableWhenExpression.js.map +1 -1
  13. package/lib/utils/fhirpath.d.ts +3 -3
  14. package/lib/utils/initialise.d.ts +3 -3
  15. package/lib/utils/qItem.d.ts +2 -2
  16. package/lib/utils/qItem.js +8 -8
  17. package/lib/utils/qItem.js.map +1 -1
  18. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +1 -1
  19. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  20. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.d.ts +5 -5
  21. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js +98 -34
  22. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js.map +1 -1
  23. package/lib/utils/removeEmptyAnswers.d.ts +2 -2
  24. package/lib/utils/removeEmptyAnswers.js.map +1 -1
  25. package/lib/utils/repopulateItems.d.ts +2 -2
  26. package/lib/utils/tabs.d.ts +6 -6
  27. package/lib/utils/tabs.js +3 -18
  28. package/lib/utils/tabs.js.map +1 -1
  29. package/lib/utils/validateQuestionnaire.d.ts +2 -2
  30. package/lib/utils/validateQuestionnaire.js +0 -7
  31. package/lib/utils/validateQuestionnaire.js.map +1 -1
  32. package/package.json +5 -5
  33. package/src/interfaces/enableWhen.interface.ts +13 -3
  34. package/src/interfaces/index.ts +4 -2
  35. package/src/interfaces/questionnaireStore.interface.ts +2 -2
  36. package/src/stores/questionnaireStore.ts +23 -7
  37. package/src/utils/enableWhenExpression.ts +221 -83
  38. package/src/utils/fhirpath.ts +3 -3
  39. package/src/utils/initialise.ts +3 -3
  40. package/src/utils/qItem.ts +11 -11
  41. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +1 -1
  42. package/src/utils/questionnaireStoreUtils/extractOtherExtensions.ts +158 -39
  43. package/src/utils/removeEmptyAnswers.ts +4 -4
  44. package/src/utils/repopulateItems.ts +4 -4
  45. package/src/utils/tabs.ts +9 -24
  46. package/src/utils/validateQuestionnaire.ts +3 -11
@@ -15,13 +15,21 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { Expression, Extension, Questionnaire, QuestionnaireItem } from 'fhir/r4';
18
+ import type {
19
+ Expression,
20
+ Extension,
21
+ Questionnaire,
22
+ QuestionnaireItem,
23
+ QuestionnaireItemEnableWhen
24
+ } from 'fhir/r4';
19
25
  import type { CalculatedExpression } from '../../interfaces/calculatedExpression.interface';
20
26
  import type {
21
- EnableWhenExpression,
27
+ EnableWhenExpressions,
22
28
  EnableWhenItems,
29
+ EnableWhenRepeatExpression,
23
30
  EnableWhenRepeatItemProperties,
24
31
  EnableWhenRepeatLinkedItem,
32
+ EnableWhenSingleExpression,
25
33
  EnableWhenSingleItemProperties,
26
34
  EnableWhenSingleLinkedItem
27
35
  } from '../../interfaces';
@@ -32,11 +40,15 @@ import { getTerminologyServerUrl, getValueSetPromise } from '../valueSet';
32
40
  import type { Variables } from '../../interfaces/variables.interface';
33
41
  import { getFhirPathVariables, getXFhirQueryVariables } from './extractVariables';
34
42
  import { getRepeatGroupParentItem } from '../misc';
43
+ import { checkItemIsEnabledRepeat } from '../enableWhen';
44
+ import cloneDeep from 'lodash.clonedeep';
45
+ import { emptyResponse } from '../emptyResource';
46
+ import { evaluateEnableWhenRepeatExpressionInstance } from '../enableWhenExpression';
35
47
 
36
48
  interface ReturnParamsRecursive {
37
49
  variables: Variables;
38
50
  enableWhenItems: EnableWhenItems;
39
- enableWhenExpressions: Record<string, EnableWhenExpression>;
51
+ enableWhenExpressions: EnableWhenExpressions;
40
52
  calculatedExpressions: Record<string, CalculatedExpression>;
41
53
  answerExpressions: Record<string, AnswerExpression>;
42
54
  valueSetPromises: Record<string, ValueSetPromise>;
@@ -49,7 +61,10 @@ export function extractOtherExtensions(
49
61
  terminologyServerUrl: string
50
62
  ): ReturnParamsRecursive {
51
63
  const enableWhenItems: EnableWhenItems = { singleItems: {}, repeatItems: {} };
52
- const enableWhenExpressions: Record<string, EnableWhenExpression> = {};
64
+ const enableWhenExpressions: EnableWhenExpressions = {
65
+ singleExpressions: {},
66
+ repeatExpressions: {}
67
+ };
53
68
  const calculatedExpressions: Record<string, CalculatedExpression> = {};
54
69
  const answerExpressions: Record<string, AnswerExpression> = {};
55
70
 
@@ -57,7 +72,10 @@ export function extractOtherExtensions(
57
72
  return {
58
73
  variables: variables,
59
74
  enableWhenItems: { singleItems: {}, repeatItems: {} },
60
- enableWhenExpressions: {},
75
+ enableWhenExpressions: {
76
+ singleExpressions: {},
77
+ repeatExpressions: {}
78
+ },
61
79
  calculatedExpressions: {},
62
80
  answerExpressions: {},
63
81
  valueSetPromises: valueSetPromises
@@ -95,7 +113,7 @@ interface extractExtensionsFromItemRecursiveParams {
95
113
  item: QuestionnaireItem;
96
114
  variables: Variables;
97
115
  enableWhenItems: EnableWhenItems;
98
- enableWhenExpressions: Record<string, EnableWhenExpression>;
116
+ enableWhenExpressions: EnableWhenExpressions;
99
117
  calculatedExpressions: Record<string, CalculatedExpression>;
100
118
  answerExpressions: Record<string, AnswerExpression>;
101
119
  valueSetPromises: Record<string, ValueSetPromise>;
@@ -149,11 +167,21 @@ function extractExtensionsFromItemRecursive(
149
167
  }
150
168
  }
151
169
 
152
- const enableWhenExpression = getEnableWhenExpression(item);
153
- if (enableWhenExpression) {
154
- enableWhenExpressions[item.linkId] = {
155
- expression: `${enableWhenExpression.expression}`
156
- };
170
+ const initialisedEnableWhenExpressions = initialiseEnableWhenExpression(
171
+ item,
172
+ questionnaire,
173
+ parentRepeatGroupLinkId
174
+ );
175
+ if (initialisedEnableWhenExpressions) {
176
+ const { enableWhenExpressionType, enableWhenExpression } = initialisedEnableWhenExpressions;
177
+
178
+ if (enableWhenExpressionType === 'single') {
179
+ enableWhenExpressions.singleExpressions[item.linkId] =
180
+ enableWhenExpression as EnableWhenSingleExpression;
181
+ } else if (enableWhenExpressionType === 'repeat') {
182
+ enableWhenExpressions.repeatExpressions[item.linkId] =
183
+ enableWhenExpression as EnableWhenRepeatExpression;
184
+ }
157
185
  }
158
186
 
159
187
  const calculatedExpression = getCalculatedExpression(item);
@@ -215,10 +243,16 @@ export function initialiseEnableWhenItemProperties(
215
243
  enableWhenItemType: 'single' | 'repeat';
216
244
  enableWhenItemProperties: EnableWhenSingleItemProperties | EnableWhenRepeatItemProperties;
217
245
  } | null {
246
+ const enableWhen = qItem.enableWhen;
247
+ if (!enableWhen) {
248
+ return null;
249
+ }
250
+
218
251
  // Parent repeat group linkId exist, try to classify this item as a repeat enableWhen item
219
252
  if (parentLinkId) {
220
253
  const enableWhenRepeatItemProperties = initialiseEnableWhenRepeatItemProperties(
221
254
  qItem,
255
+ enableWhen,
222
256
  questionnaire,
223
257
  parentLinkId
224
258
  );
@@ -232,28 +266,23 @@ export function initialiseEnableWhenItemProperties(
232
266
  }
233
267
 
234
268
  // If parentLinkId is not provided or item cannot be classified as a repeat enableWhen item, classify it as a single enableWhen item
235
- const enableWhenSingleItemProperties = initialiseEnableWhenSingleItemProperties(qItem);
236
- if (enableWhenSingleItemProperties) {
237
- return {
238
- enableWhenItemType: 'single',
239
- enableWhenItemProperties: enableWhenSingleItemProperties
240
- };
241
- }
242
-
243
- return null;
269
+ const enableWhenSingleItemProperties = initialiseEnableWhenSingleItemProperties(
270
+ qItem,
271
+ enableWhen
272
+ );
273
+ return {
274
+ enableWhenItemType: 'single',
275
+ enableWhenItemProperties: enableWhenSingleItemProperties
276
+ };
244
277
  }
245
278
 
246
279
  export function initialiseEnableWhenRepeatItemProperties(
247
280
  qItem: QuestionnaireItem,
281
+ enableWhen: QuestionnaireItemEnableWhen[],
248
282
  questionnaire: Questionnaire,
249
283
  parentLinkId: string
250
284
  ): EnableWhenRepeatItemProperties | null {
251
- const enableWhen = qItem.enableWhen;
252
- if (!enableWhen) {
253
- return null;
254
- }
255
-
256
- const linkedItems = enableWhen.map((linkedItem): EnableWhenRepeatLinkedItem | null => {
285
+ const linkedItemsNullable = enableWhen.map((linkedItem): EnableWhenRepeatLinkedItem | null => {
257
286
  const linkedParentItem = getRepeatGroupParentItem(questionnaire, linkedItem.question);
258
287
  // Check if parentLinkId match the linked item's parent linkId
259
288
  if (parentLinkId === linkedParentItem?.linkId) {
@@ -265,16 +294,24 @@ export function initialiseEnableWhenRepeatItemProperties(
265
294
  });
266
295
 
267
296
  // If any linked item is not valid, exit early
268
- if (linkedItems.some((linkedItem) => linkedItem === null)) {
297
+ if (linkedItemsNullable.some((linkedItem) => linkedItem === null)) {
269
298
  return null;
270
299
  }
271
300
 
272
- return {
301
+ const linkedItems = linkedItemsNullable as EnableWhenRepeatLinkedItem[];
302
+ const enableWhenRepeatItemProperties = {
273
303
  linked: linkedItems as EnableWhenRepeatLinkedItem[],
274
304
  parentLinkId: parentLinkId,
275
305
  enabledIndexes: [false],
276
306
  enableBehavior: qItem.enableBehavior
277
307
  };
308
+
309
+ enableWhenRepeatItemProperties.enabledIndexes[0] = checkItemIsEnabledRepeat(
310
+ enableWhenRepeatItemProperties,
311
+ 0
312
+ );
313
+
314
+ return enableWhenRepeatItemProperties;
278
315
  }
279
316
 
280
317
  /**
@@ -283,22 +320,104 @@ export function initialiseEnableWhenRepeatItemProperties(
283
320
  * @author Sean Fong
284
321
  */
285
322
  export function initialiseEnableWhenSingleItemProperties(
286
- qItem: QuestionnaireItem
287
- ): EnableWhenSingleItemProperties | null {
288
- const enableWhen = qItem.enableWhen;
289
- if (enableWhen) {
290
- return {
291
- linked: enableWhen.map((linkedItem): EnableWhenSingleLinkedItem => {
292
- return { enableWhen: linkedItem };
293
- }),
294
- isEnabled: false,
295
- enableBehavior: qItem.enableBehavior
296
- };
323
+ qItem: QuestionnaireItem,
324
+ enableWhen: QuestionnaireItemEnableWhen[]
325
+ ): EnableWhenSingleItemProperties {
326
+ return {
327
+ linked: enableWhen.map((linkedItem): EnableWhenSingleLinkedItem => {
328
+ return { enableWhen: linkedItem };
329
+ }),
330
+ isEnabled: false,
331
+ enableBehavior: qItem.enableBehavior
332
+ };
333
+ }
334
+
335
+ function initialiseEnableWhenExpressionRepeat(
336
+ enableWhenExpression: Expression,
337
+ questionnaire: Questionnaire,
338
+ parentLinkId: string
339
+ ): Expression | null {
340
+ const expression = enableWhenExpression.expression;
341
+ if (!expression) {
342
+ return null;
343
+ }
344
+
345
+ // Get the last linkId in the expression
346
+ const regExpLinkId = /linkId\s*=\s*'([^']+)'/g;
347
+ const matches = expression.replace(' ', '').match(regExpLinkId);
348
+ if (!matches) {
349
+ return null;
350
+ }
351
+ const linkIdMatches = matches.map((match) =>
352
+ match.substring(match.indexOf("'") + 1, match.lastIndexOf("'"))
353
+ );
354
+ const lastLinkIdMatch = linkIdMatches[linkIdMatches.length - 1];
355
+
356
+ // Use the last linkId as the linkedItem, and get it's repeat group parent item's linkId
357
+ // If both parent linkId matches, this enableWhenExpression is a repeat enableWhenExpression
358
+ const linkedParentItem = getRepeatGroupParentItem(questionnaire, lastLinkIdMatch);
359
+ if (parentLinkId === linkedParentItem?.linkId) {
360
+ return enableWhenExpression;
297
361
  }
298
362
 
299
363
  return null;
300
364
  }
301
365
 
366
+ function initialiseEnableWhenExpression(
367
+ qItem: QuestionnaireItem,
368
+ questionnaire: Questionnaire,
369
+ parentLinkId?: string
370
+ ): {
371
+ enableWhenExpressionType: 'single' | 'repeat';
372
+ enableWhenExpression: EnableWhenSingleExpression | EnableWhenRepeatExpression;
373
+ } | null {
374
+ const enableWhenExpression = getEnableWhenExpression(qItem);
375
+ if (!enableWhenExpression) {
376
+ return null;
377
+ }
378
+
379
+ // Parent repeat group linkId exist, try to classify this item as a repeat enableWhen item
380
+ if (parentLinkId) {
381
+ const expressionRepeat = initialiseEnableWhenExpressionRepeat(
382
+ enableWhenExpression,
383
+ questionnaire,
384
+ parentLinkId
385
+ );
386
+
387
+ if (expressionRepeat) {
388
+ const enableWhenRepeatExpression = {
389
+ expression: `${expressionRepeat.expression}`,
390
+ parentLinkId: parentLinkId,
391
+ enabledIndexes: [false]
392
+ };
393
+
394
+ const { isEnabled } = evaluateEnableWhenRepeatExpressionInstance(
395
+ qItem.linkId,
396
+ { resource: cloneDeep(emptyResponse) },
397
+ enableWhenRepeatExpression,
398
+ enableWhenRepeatExpression.expression.lastIndexOf('.where(linkId'),
399
+ 0
400
+ );
401
+
402
+ if (typeof isEnabled === 'boolean') {
403
+ enableWhenRepeatExpression.enabledIndexes[0] = isEnabled;
404
+ }
405
+
406
+ return {
407
+ enableWhenExpressionType: 'repeat',
408
+ enableWhenExpression: enableWhenRepeatExpression
409
+ };
410
+ }
411
+ }
412
+
413
+ return {
414
+ enableWhenExpressionType: 'single',
415
+ enableWhenExpression: {
416
+ expression: `${enableWhenExpression.expression}`
417
+ }
418
+ };
419
+ }
420
+
302
421
  /**
303
422
  * Check if an enableWhenExpression extension is present
304
423
  *
@@ -21,7 +21,7 @@ import type {
21
21
  QuestionnaireResponse,
22
22
  QuestionnaireResponseItem
23
23
  } from 'fhir/r4';
24
- import type { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
24
+ import type { EnableWhenExpressions, EnableWhenItems } from '../interfaces';
25
25
  import { isHiddenByEnableWhen } from './qItem';
26
26
 
27
27
  interface removeEmptyAnswersParams {
@@ -29,7 +29,7 @@ interface removeEmptyAnswersParams {
29
29
  questionnaireResponse: QuestionnaireResponse;
30
30
  enableWhenIsActivated: boolean;
31
31
  enableWhenItems: EnableWhenItems;
32
- enableWhenExpressions: Record<string, EnableWhenExpression>;
32
+ enableWhenExpressions: EnableWhenExpressions;
33
33
  }
34
34
 
35
35
  /**
@@ -79,7 +79,7 @@ interface removeEmptyAnswersFromItemRecursiveParams {
79
79
  qrItem: QuestionnaireResponseItem;
80
80
  enableWhenIsActivated: boolean;
81
81
  enableWhenItems: EnableWhenItems;
82
- enableWhenExpressions: Record<string, EnableWhenExpression>;
82
+ enableWhenExpressions: EnableWhenExpressions;
83
83
  }
84
84
 
85
85
  function removeEmptyAnswersFromItemRecursive(
@@ -167,7 +167,7 @@ function answerIsEmpty(
167
167
  qrItem: QuestionnaireResponseItem,
168
168
  enableWhenIsActivated: boolean,
169
169
  enableWhenItems: EnableWhenItems,
170
- enableWhenExpressions: Record<string, EnableWhenExpression>
170
+ enableWhenExpressions: EnableWhenExpressions
171
171
  ) {
172
172
  if (
173
173
  isHiddenByEnableWhen({
@@ -26,7 +26,7 @@ import _isEqual from 'lodash/isEqual';
26
26
  import { containsTabs, isTabContainer } from './tabs';
27
27
  import { getShortText, isSpecificItemControl } from './itemControl';
28
28
  import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
29
- import type { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
29
+ import type { EnableWhenExpressions, EnableWhenItems } from '../interfaces';
30
30
  import { isHiddenByEnableWhen } from './qItem';
31
31
 
32
32
  export interface ItemToRepopulate {
@@ -49,7 +49,7 @@ interface getItemsToRepopulateParams {
49
49
  updatableResponse: QuestionnaireResponse;
50
50
  enableWhenIsActivated: boolean;
51
51
  enableWhenItems: EnableWhenItems;
52
- enableWhenExpressions: Record<string, EnableWhenExpression>;
52
+ enableWhenExpressions: EnableWhenExpressions;
53
53
  }
54
54
 
55
55
  export function getItemsToRepopulate(
@@ -135,7 +135,7 @@ interface getItemsToRepopulateRecursiveParams {
135
135
  itemsToRepopulate: Record<string, ItemToRepopulate>;
136
136
  enableWhenIsActivated: boolean;
137
137
  enableWhenItems: EnableWhenItems;
138
- enableWhenExpressions: Record<string, EnableWhenExpression>;
138
+ enableWhenExpressions: EnableWhenExpressions;
139
139
  }
140
140
 
141
141
  // 1. Get items to repopulate (only new items)
@@ -278,7 +278,7 @@ interface getGridTableToRepopulateParams {
278
278
  itemsToRepopulate: Record<string, ItemToRepopulate>;
279
279
  enableWhenIsActivated: boolean;
280
280
  enableWhenItems: EnableWhenItems;
281
- enableWhenExpressions: Record<string, EnableWhenExpression>;
281
+ enableWhenExpressions: EnableWhenExpressions;
282
282
  }
283
283
 
284
284
  function getGridTableToRepopulate(params: getGridTableToRepopulateParams) {
package/src/utils/tabs.ts CHANGED
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { Tabs } from '../interfaces/tab.interface';
19
- import type { EnableWhenExpression, EnableWhenItems } from '../interfaces';
19
+ import type { EnableWhenExpressions, EnableWhenItems } from '../interfaces';
20
20
  import type { Coding, QuestionnaireItem } from 'fhir/r4';
21
21
  import { isSpecificItemControl } from './itemControl';
22
22
  import { isHiddenByEnableWhen } from './qItem';
@@ -25,10 +25,11 @@ import { structuredDataCapture } from 'fhir-sdc-helpers';
25
25
  export function getFirstVisibleTab(
26
26
  tabs: Tabs,
27
27
  enableWhenItems: EnableWhenItems,
28
- enableWhenExpressions: Record<string, EnableWhenExpression>
28
+ enableWhenExpressions: EnableWhenExpressions
29
29
  ) {
30
30
  // Only singleEnableWhenItems are relevant for tab operations
31
31
  const { singleItems } = enableWhenItems;
32
+ const { singleExpressions } = enableWhenExpressions;
32
33
 
33
34
  return Object.entries(tabs)
34
35
  .sort(([, tabA], [, tabB]) => tabA.tabIndex - tabB.tabIndex)
@@ -41,29 +42,13 @@ export function getFirstVisibleTab(
41
42
  return singleItems[tabLinkId].isEnabled;
42
43
  }
43
44
 
44
- if (enableWhenExpressions[tabLinkId]) {
45
- return enableWhenExpressions[tabLinkId].isEnabledSingle;
45
+ if (singleExpressions[tabLinkId]) {
46
+ return singleExpressions[tabLinkId].isEnabled;
46
47
  }
47
48
 
48
49
  return true;
49
50
  });
50
51
  }
51
- /*
52
- * Copyright 2024 Commonwealth Scientific and Industrial Research
53
- * Organisation (CSIRO) ABN 41 687 119 230.
54
- *
55
- * Licensed under the Apache License, Version 2.0 (the "License");
56
- * you may not use this file except in compliance with the License.
57
- * You may obtain a copy of the License at
58
- *
59
- * http://www.apache.org/licenses/LICENSE-2.0
60
- *
61
- * Unless required by applicable law or agreed to in writing, software
62
- * distributed under the License is distributed on an "AS IS" BASIS,
63
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
64
- * See the License for the specific language governing permissions and
65
- * limitations under the License.
66
- */
67
52
 
68
53
  /**
69
54
  * Checks if any of the items in a qItem array is a tabbed item
@@ -148,7 +133,7 @@ interface constructTabsWithVisibilityParams {
148
133
  tabs: Tabs;
149
134
  enableWhenIsActivated: boolean;
150
135
  enableWhenItems: EnableWhenItems;
151
- enableWhenExpressions: Record<string, EnableWhenExpression>;
136
+ enableWhenExpressions: EnableWhenExpressions;
152
137
  }
153
138
 
154
139
  export function constructTabsWithVisibility(
@@ -176,7 +161,7 @@ interface getNextVisibleTabIndexParams {
176
161
  currentTabIndex: number;
177
162
  enableWhenIsActivated: boolean;
178
163
  enableWhenItems: EnableWhenItems;
179
- enableWhenExpressions: Record<string, EnableWhenExpression>;
164
+ enableWhenExpressions: EnableWhenExpressions;
180
165
  }
181
166
  /**
182
167
  * Get index of next visible tab
@@ -216,7 +201,7 @@ export function findNumOfVisibleTabs(
216
201
  tabs: Tabs,
217
202
  enableWhenIsActivated: boolean,
218
203
  enableWhenItems: EnableWhenItems,
219
- enableWhenExpressions: Record<string, EnableWhenExpression>
204
+ enableWhenExpressions: EnableWhenExpressions
220
205
  ): number {
221
206
  const tabsWithVisibility = constructTabsWithVisibility({
222
207
  tabs,
@@ -244,7 +229,7 @@ interface IsTabHiddenParams {
244
229
  isTab: boolean;
245
230
  enableWhenIsActivated: boolean;
246
231
  enableWhenItems: EnableWhenItems;
247
- enableWhenExpressions: Record<string, EnableWhenExpression>;
232
+ enableWhenExpressions: EnableWhenExpressions;
248
233
  completedTabsCollapsed: boolean;
249
234
  }
250
235
 
@@ -23,7 +23,7 @@ import type {
23
23
  QuestionnaireResponseItemAnswer
24
24
  } from 'fhir/r4';
25
25
  import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
26
- import type { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
26
+ import type { EnableWhenExpressions, EnableWhenItems } from '../interfaces';
27
27
  import { isHiddenByEnableWhen } from './qItem';
28
28
  import { getRegexValidation } from './itemControl';
29
29
  import { structuredDataCapture } from 'fhir-sdc-helpers';
@@ -37,7 +37,7 @@ interface ValidateQuestionnaireParams {
37
37
  invalidItems: Record<string, InvalidType>;
38
38
  enableWhenIsActivated: boolean;
39
39
  enableWhenItems: EnableWhenItems;
40
- enableWhenExpressions: Record<string, EnableWhenExpression>;
40
+ enableWhenExpressions: EnableWhenExpressions;
41
41
  }
42
42
 
43
43
  /**
@@ -107,7 +107,7 @@ interface ValidateItemRecursiveParams {
107
107
  invalidItems: Record<string, InvalidType>;
108
108
  enableWhenIsActivated: boolean;
109
109
  enableWhenItems: EnableWhenItems;
110
- enableWhenExpressions: Record<string, EnableWhenExpression>;
110
+ enableWhenExpressions: EnableWhenExpressions;
111
111
  }
112
112
 
113
113
  function validateItemRecursive(params: ValidateItemRecursiveParams) {
@@ -231,14 +231,6 @@ function validateSingleItem(
231
231
  return invalidItems;
232
232
  }
233
233
 
234
- // function validateRepeatGroup(
235
- // qItem: QuestionnaireItem,
236
- // qrItems: QuestionnaireResponseItem,
237
- // invalidLinkIds: Record<string, InvalidType>
238
- // ) {
239
- // return;
240
- // }
241
-
242
234
  function getInputInString(answer: QuestionnaireResponseItemAnswer) {
243
235
  if (answer.valueString) {
244
236
  return answer.valueString;