@aehrc/smart-forms-renderer 0.43.1 → 0.44.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 (36) hide show
  1. package/.storybook/preview.tsx +1 -1
  2. package/lib/hooks/useTerminologyServerQuery.js +5 -3
  3. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  4. package/lib/hooks/useValueSetCodings.js +4 -2
  5. package/lib/hooks/useValueSetCodings.js.map +1 -1
  6. package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
  7. package/lib/stores/questionnaireStore.d.ts +3 -0
  8. package/lib/stores/questionnaireStore.js +3 -0
  9. package/lib/stores/questionnaireStore.js.map +1 -1
  10. package/lib/stories/storybookWrappers/iframeResizerChild.d.ts +1 -0
  11. package/lib/stories/storybookWrappers/iframeResizerChild.js +849 -0
  12. package/lib/stories/storybookWrappers/iframeResizerChild.js.map +1 -0
  13. package/lib/utils/qItem.d.ts +1 -0
  14. package/lib/utils/qItem.js +38 -0
  15. package/lib/utils/qItem.js.map +1 -1
  16. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +5 -2
  17. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  18. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.d.ts +1 -1
  19. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js +6 -4
  20. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js.map +1 -1
  21. package/lib/utils/valueSet.js +1 -0
  22. package/lib/utils/valueSet.js.map +1 -1
  23. package/package.json +2 -3
  24. package/src/hooks/useTerminologyServerQuery.ts +5 -1
  25. package/src/hooks/useValueSetCodings.ts +7 -1
  26. package/src/interfaces/questionnaireStore.interface.ts +1 -0
  27. package/src/stores/questionnaireStore.ts +5 -0
  28. package/src/stories/assets/questionnaires/QTerminologyControl.ts +59 -0
  29. package/src/stories/assets/questionnaires/index.ts +1 -0
  30. package/src/stories/sdc/OtherExtensions.stories.tsx +39 -0
  31. package/src/stories/storybookWrappers/BuildFormWrapperForStorybook.tsx +3 -0
  32. package/src/utils/qItem.ts +68 -1
  33. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +7 -1
  34. package/src/utils/questionnaireStoreUtils/extractOtherExtensions.ts +10 -1
  35. package/src/utils/valueSet.ts +1 -0
  36. /package/{.storybook → src/stories/storybookWrappers}/iframeResizerChild.js +0 -0
@@ -29,7 +29,7 @@ import { extractOtherExtensions } from './extractOtherExtensions';
29
29
  import type { Variables } from '../../interfaces/variables.interface';
30
30
  import { resolveValueSets } from './resolveValueSets';
31
31
  import { addAdditionalVariables } from './addAdditionalVariables';
32
- import { getLinkIdTypeTuples } from '../qItem';
32
+ import { getLinkIdPreferredTerminologyServerTuples, getLinkIdTypeTuples } from '../qItem';
33
33
  import { addDisplayToAnswerOptions, addDisplayToProcessedCodings } from './addDisplayToCodings';
34
34
 
35
35
  export async function createQuestionnaireModel(
@@ -42,6 +42,9 @@ export async function createQuestionnaireModel(
42
42
  }
43
43
 
44
44
  const itemTypes: Record<string, string> = Object.fromEntries(getLinkIdTypeTuples(questionnaire));
45
+ const itemPreferredTerminologyServers: Record<string, string> = Object.fromEntries(
46
+ getLinkIdPreferredTerminologyServerTuples(questionnaire)
47
+ );
45
48
  const tabs: Tabs = extractTabs(questionnaire);
46
49
  const pages: Pages = extractPages(questionnaire);
47
50
 
@@ -62,6 +65,7 @@ export async function createQuestionnaireModel(
62
65
  questionnaire,
63
66
  variables,
64
67
  valueSetPromises,
68
+ itemPreferredTerminologyServers,
65
69
  terminologyServerUrl
66
70
  );
67
71
 
@@ -100,6 +104,7 @@ export async function createQuestionnaireModel(
100
104
 
101
105
  return {
102
106
  itemTypes,
107
+ itemPreferredTerminologyServers,
103
108
  tabs,
104
109
  pages,
105
110
  variables,
@@ -119,6 +124,7 @@ export async function createQuestionnaireModel(
119
124
  function createEmptyModel(): QuestionnaireModel {
120
125
  return {
121
126
  itemTypes: {},
127
+ itemPreferredTerminologyServers: {},
122
128
  tabs: {},
123
129
  pages: {},
124
130
  variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
@@ -65,6 +65,7 @@ export function extractOtherExtensions(
65
65
  questionnaire: Questionnaire,
66
66
  variables: Variables,
67
67
  valueSetPromises: Record<string, ValueSetPromise>,
68
+ itemPreferredTerminologyServers: Record<string, string>,
68
69
  terminologyServerUrl: string
69
70
  ): ReturnParamsRecursive {
70
71
  const enableWhenItems: EnableWhenItems = { singleItems: {}, repeatItems: {} };
@@ -106,6 +107,7 @@ export function extractOtherExtensions(
106
107
  answerExpressions,
107
108
  answerOptions,
108
109
  valueSetPromises,
110
+ itemPreferredTerminologyServers,
109
111
  defaultTerminologyServerUrl: terminologyServerUrl,
110
112
  parentRepeatGroupLinkId: isRepeatGroup ? topLevelItem.linkId : undefined
111
113
  });
@@ -134,6 +136,7 @@ interface extractExtensionsFromItemRecursiveParams {
134
136
  answerExpressions: Record<string, AnswerExpression>;
135
137
  answerOptions: Record<string, QuestionnaireItemAnswerOption[]>;
136
138
  valueSetPromises: Record<string, ValueSetPromise>;
139
+ itemPreferredTerminologyServers: Record<string, string>;
137
140
  defaultTerminologyServerUrl: string;
138
141
  parentRepeatGroupLinkId?: string;
139
142
  }
@@ -152,6 +155,7 @@ function extractExtensionsFromItemRecursive(
152
155
  answerExpressions,
153
156
  answerOptions,
154
157
  valueSetPromises,
158
+ itemPreferredTerminologyServers,
155
159
  defaultTerminologyServerUrl,
156
160
  parentRepeatGroupLinkId
157
161
  } = params;
@@ -234,7 +238,12 @@ function extractExtensionsFromItemRecursive(
234
238
  const valueSetUrl = item.answerValueSet;
235
239
  if (valueSetUrl) {
236
240
  if (!valueSetPromises[valueSetUrl] && !valueSetUrl.startsWith('#')) {
237
- const terminologyServerUrl = getTerminologyServerUrl(item) ?? defaultTerminologyServerUrl;
241
+ const preferredTerminologyServerUrl = itemPreferredTerminologyServers[item.linkId];
242
+ const terminologyServerUrl =
243
+ getTerminologyServerUrl(item) ??
244
+ preferredTerminologyServerUrl ??
245
+ defaultTerminologyServerUrl;
246
+
238
247
  valueSetPromises[valueSetUrl] = {
239
248
  promise: getValueSetPromise(valueSetUrl, terminologyServerUrl)
240
249
  };
@@ -36,6 +36,7 @@ const VALID_VALUE_SET_URL_REGEX =
36
36
 
37
37
  const VALID_FHIRPATH_VARIABLE_REGEX = /%(.*?)\./;
38
38
 
39
+ // Mainly for backwards compatibility, doesn't exist in the SDC spec anymore
39
40
  export function getTerminologyServerUrl(qItem: QuestionnaireItem): string | undefined {
40
41
  const itemControl = qItem.extension?.find(
41
42
  (extension: Extension) =>