@aehrc/smart-forms-renderer 0.16.2 → 0.17.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 (89) hide show
  1. package/lib/components/FormComponents/AttachmentItem/AttachmentFieldWrapper.js +3 -1
  2. package/lib/components/FormComponents/AttachmentItem/AttachmentFieldWrapper.js.map +1 -1
  3. package/lib/components/FormComponents/BooleanItem/BooleanItem.js +3 -1
  4. package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +3 -1
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +3 -1
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +3 -1
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +3 -1
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +3 -1
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +3 -1
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +3 -1
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  19. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js +3 -1
  20. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +1 -1
  21. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +3 -1
  22. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
  23. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +3 -1
  24. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  25. package/lib/components/FormComponents/DisplayItem/DisplayItem.js +3 -1
  26. package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -1
  27. package/lib/components/FormComponents/GridGroup/GridGroup.js +3 -1
  28. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  29. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +3 -1
  30. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  31. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +3 -1
  32. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  33. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +3 -1
  34. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  35. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -1
  36. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  37. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +3 -1
  38. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  39. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +3 -1
  40. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  41. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +3 -1
  42. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  43. package/lib/components/FormComponents/SliderItem/SliderItem.js +3 -1
  44. package/lib/components/FormComponents/SliderItem/SliderItem.js.map +1 -1
  45. package/lib/components/FormComponents/StringItem/StringItem.js +3 -1
  46. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  47. package/lib/components/FormComponents/Tables/GroupTableView.js +3 -1
  48. package/lib/components/FormComponents/Tables/GroupTableView.js.map +1 -1
  49. package/lib/components/FormComponents/TextItem/TextItem.js +3 -1
  50. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  51. package/lib/components/FormComponents/TimeItem/TimeItem.js +3 -1
  52. package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
  53. package/lib/components/FormComponents/UrlItem/UrlItem.js +3 -1
  54. package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
  55. package/lib/stores/questionnaireStore.d.ts +4 -0
  56. package/lib/stores/questionnaireStore.js +5 -1
  57. package/lib/stores/questionnaireStore.js.map +1 -1
  58. package/lib/utils/fhirpath.js +3 -1
  59. package/lib/utils/fhirpath.js.map +1 -1
  60. package/package.json +2 -2
  61. package/src/components/FormComponents/AttachmentItem/AttachmentFieldWrapper.tsx +7 -1
  62. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +7 -1
  63. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +5 -1
  64. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +5 -1
  65. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +5 -1
  66. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +5 -1
  67. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +5 -1
  68. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +5 -1
  69. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +5 -1
  70. package/src/components/FormComponents/CustomDateItem/CustomDateItem.tsx +7 -1
  71. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +7 -1
  72. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +7 -1
  73. package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +7 -1
  74. package/src/components/FormComponents/GridGroup/GridGroup.tsx +5 -1
  75. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +7 -1
  76. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +5 -1
  77. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +5 -1
  78. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +5 -1
  79. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +5 -1
  80. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +5 -1
  81. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +7 -1
  82. package/src/components/FormComponents/SliderItem/SliderItem.tsx +7 -1
  83. package/src/components/FormComponents/StringItem/StringItem.tsx +7 -1
  84. package/src/components/FormComponents/Tables/GroupTableView.tsx +5 -1
  85. package/src/components/FormComponents/TextItem/TextItem.tsx +7 -1
  86. package/src/components/FormComponents/TimeItem/TimeItem.tsx +7 -1
  87. package/src/components/FormComponents/UrlItem/UrlItem.tsx +7 -1
  88. package/src/stores/questionnaireStore.ts +8 -1
  89. package/src/utils/fhirpath.ts +4 -1
@@ -33,6 +33,7 @@ import useStringCalculatedExpression from '../../../hooks/useStringCalculatedExp
33
33
  import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
34
34
  import useStringInput from '../../../hooks/useStringInput';
35
35
  import useReadOnly from '../../../hooks/useReadOnly';
36
+ import { useQuestionnaireStore } from '../../../stores';
36
37
 
37
38
  interface TextItemProps
38
39
  extends PropsWithQrItemChangeHandler,
@@ -45,6 +46,8 @@ interface TextItemProps
45
46
  function TextItem(props: TextItemProps) {
46
47
  const { qItem, qrItem, isRepeated, parentIsReadOnly, onQrItemChange } = props;
47
48
 
49
+ const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
50
+
48
51
  const readOnly = useReadOnly(qItem, parentIsReadOnly);
49
52
  const { displayUnit, displayPrompt, entryFormat, regexValidation, minLength, maxLength } =
50
53
  useRenderingExtensions(qItem);
@@ -104,7 +107,10 @@ function TextItem(props: TextItemProps) {
104
107
  );
105
108
  }
106
109
  return (
107
- <FullWidthFormComponentBox data-test="q-item-text-box" data-linkid={qItem.linkId}>
110
+ <FullWidthFormComponentBox
111
+ data-test="q-item-text-box"
112
+ data-linkid={qItem.linkId}
113
+ onClick={() => onFocusLinkId(qItem.linkId)}>
108
114
  <ItemFieldGrid qItem={qItem} readOnly={readOnly}>
109
115
  <TextField
110
116
  linkId={qItem.linkId}
@@ -31,6 +31,7 @@ import type { Dayjs } from 'dayjs';
31
31
  import dayjs from 'dayjs';
32
32
  import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
33
33
  import useReadOnly from '../../../hooks/useReadOnly';
34
+ import { useQuestionnaireStore } from '../../../stores';
34
35
 
35
36
  interface TimeItemProps
36
37
  extends PropsWithQrItemChangeHandler,
@@ -44,6 +45,8 @@ interface TimeItemProps
44
45
  function TimeItem(props: TimeItemProps) {
45
46
  const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
46
47
 
48
+ const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
49
+
47
50
  const readOnly = useReadOnly(qItem, parentIsReadOnly);
48
51
  const { displayPrompt, entryFormat } = useRenderingExtensions(qItem);
49
52
 
@@ -78,7 +81,10 @@ function TimeItem(props: TimeItemProps) {
78
81
  }
79
82
 
80
83
  return (
81
- <FullWidthFormComponentBox data-test="q-item-time-box" data-linkid={qItem.linkId}>
84
+ <FullWidthFormComponentBox
85
+ data-test="q-item-time-box"
86
+ data-linkid={qItem.linkId}
87
+ onClick={() => onFocusLinkId(qItem.linkId)}>
82
88
  <ItemFieldGrid qItem={qItem} readOnly={readOnly}>
83
89
  <TimeField
84
90
  value={timeDayJs}
@@ -32,6 +32,7 @@ import { FullWidthFormComponentBox } from '../../Box.styles';
32
32
  import UrlField from './UrlField';
33
33
  import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
34
34
  import useReadOnly from '../../../hooks/useReadOnly';
35
+ import { useQuestionnaireStore } from '../../../stores';
35
36
 
36
37
  interface UrlItemProps
37
38
  extends PropsWithQrItemChangeHandler,
@@ -44,6 +45,8 @@ interface UrlItemProps
44
45
  function UrlItem(props: UrlItemProps) {
45
46
  const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
46
47
 
48
+ const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
49
+
47
50
  const readOnly = useReadOnly(qItem, parentIsReadOnly);
48
51
  const { displayUnit, displayPrompt, entryFormat, regexValidation, minLength, maxLength } =
49
52
  useRenderingExtensions(qItem);
@@ -93,7 +96,10 @@ function UrlItem(props: UrlItemProps) {
93
96
  );
94
97
  }
95
98
  return (
96
- <FullWidthFormComponentBox data-test="q-item-string-box" data-linkid={qItem.linkId}>
99
+ <FullWidthFormComponentBox
100
+ data-test="q-item-string-box"
101
+ data-linkid={qItem.linkId}
102
+ onClick={() => onFocusLinkId(qItem.linkId)}>
97
103
  <ItemFieldGrid qItem={qItem} readOnly={readOnly}>
98
104
  <UrlField
99
105
  linkId={qItem.linkId}
@@ -58,6 +58,7 @@ interface QuestionnaireStoreType {
58
58
  processedValueSetUrls: Record<string, string>;
59
59
  cachedValueSetCodings: Record<string, Coding[]>;
60
60
  fhirPathContext: Record<string, any>;
61
+ focusedLinkId: string;
61
62
  readOnly: boolean;
62
63
  buildSourceQuestionnaire: (
63
64
  questionnaire: Questionnaire,
@@ -77,6 +78,7 @@ interface QuestionnaireStoreType {
77
78
  populatedResponse: QuestionnaireResponse,
78
79
  persistTabIndex?: boolean
79
80
  ) => QuestionnaireResponse;
81
+ onFocusLinkId: (linkId: string) => void;
80
82
  }
81
83
 
82
84
  export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, get) => ({
@@ -96,6 +98,7 @@ export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, ge
96
98
  processedValueSetUrls: {},
97
99
  cachedValueSetCodings: {},
98
100
  fhirPathContext: {},
101
+ focusedLinkId: '',
99
102
  readOnly: false,
100
103
  buildSourceQuestionnaire: async (
101
104
  questionnaire,
@@ -269,7 +272,11 @@ export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, ge
269
272
  }));
270
273
 
271
274
  return updatedResponse;
272
- }
275
+ },
276
+ onFocusLinkId: (linkId: string) =>
277
+ set(() => ({
278
+ focusedLinkId: linkId
279
+ }))
273
280
  }));
274
281
 
275
282
  export const useQuestionnaireStore = createSelectors(questionnaireStore);
@@ -90,11 +90,14 @@ export function createFhirPathContext(
90
90
  variablesFhirPath: Record<string, Expression[]>,
91
91
  existingFhirPathContext: Record<string, any>
92
92
  ): Record<string, any> {
93
- let fhirPathContext: Record<string, any> = { resource: questionnaireResponse };
93
+ let fhirPathContext = {};
94
94
  if (Object.keys(existingFhirPathContext).length > 0) {
95
95
  fhirPathContext = { ...fhirPathContext, ...existingFhirPathContext };
96
96
  }
97
97
 
98
+ // Add latest resource to fhirPathContext
99
+ fhirPathContext = { ...fhirPathContext, resource: questionnaireResponse };
100
+
98
101
  if (!questionnaireResponse.item || questionnaireResponse.item.length === 0) {
99
102
  return fhirPathContext;
100
103
  }