@aehrc/smart-forms-renderer 0.8.0 → 0.8.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 (264) hide show
  1. package/lib/components/Alert.styles.d.ts +2 -7
  2. package/lib/components/Box.styles.d.ts +6 -21
  3. package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
  4. package/lib/components/FormComponents/BooleanItem/BooleanItem.js +5 -4
  5. package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +6 -5
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +2 -2
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +7 -6
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +2 -2
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +7 -6
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -1
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +8 -8
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +2 -2
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +6 -6
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +2 -2
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +6 -5
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +1 -0
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +2 -2
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -1
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +8 -7
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +1 -0
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +2 -2
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -1
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -7
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  36. package/lib/components/FormComponents/DateItem/DateItem.d.ts +2 -1
  37. package/lib/components/FormComponents/DateItem/DateItem.js +5 -4
  38. package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -1
  39. package/lib/components/FormComponents/DateItem/DatePicker.d.ts +2 -0
  40. package/lib/components/FormComponents/DateItem/DatePicker.js +42 -0
  41. package/lib/components/FormComponents/DateItem/DatePicker.js.map +1 -0
  42. package/lib/components/FormComponents/DateItem/DatePickerField.d.ts +8 -0
  43. package/{src/components/FormComponents/Typography.styles.ts → lib/components/FormComponents/DateItem/DatePickerField.js} +8 -9
  44. package/lib/components/FormComponents/DateItem/DatePickerField.js.map +1 -0
  45. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
  46. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +5 -4
  47. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
  48. package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
  49. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +5 -4
  50. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  51. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +1 -0
  52. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +2 -2
  53. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
  54. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.d.ts +2 -7
  55. package/lib/components/FormComponents/DisplayItem/DisplayItem.js +2 -2
  56. package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -1
  57. package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +2 -2
  58. package/lib/components/FormComponents/GridGroup/GridGroup.js +6 -4
  59. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  60. package/lib/components/FormComponents/GridGroup/GridRow.d.ts +2 -1
  61. package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
  62. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  63. package/lib/components/FormComponents/GridGroup/GridTable.d.ts +2 -1
  64. package/lib/components/FormComponents/GridGroup/GridTable.js +2 -2
  65. package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
  66. package/lib/components/FormComponents/GroupItem/GroupHeading.d.ts +1 -0
  67. package/lib/components/FormComponents/GroupItem/GroupHeading.js +6 -5
  68. package/lib/components/FormComponents/GroupItem/GroupHeading.js.map +1 -1
  69. package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -3
  70. package/lib/components/FormComponents/GroupItem/GroupItem.js +5 -3
  71. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  72. package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +2 -6
  73. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
  74. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +10 -10
  75. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  76. package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
  77. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +5 -4
  78. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  79. package/lib/components/FormComponents/Item.styles.d.ts +0 -4
  80. package/lib/components/FormComponents/Item.styles.js +0 -4
  81. package/lib/components/FormComponents/Item.styles.js.map +1 -1
  82. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +1 -0
  83. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +3 -3
  84. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -1
  85. package/lib/components/FormComponents/ItemParts/ItemLabelText.d.ts +1 -0
  86. package/lib/components/FormComponents/ItemParts/ItemLabelText.js +4 -6
  87. package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +1 -1
  88. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +1 -0
  89. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +2 -2
  90. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +1 -1
  91. package/lib/components/FormComponents/Lists.styles.d.ts +2 -9
  92. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +3 -2
  93. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +2 -3
  94. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -1
  95. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
  96. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +8 -7
  97. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  98. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +2 -2
  99. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +8 -7
  100. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  101. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
  102. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +6 -6
  103. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  104. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +2 -2
  105. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +7 -6
  106. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  107. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +3 -2
  108. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +2 -2
  109. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -1
  110. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +2 -2
  111. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +7 -6
  112. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  113. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +3 -2
  114. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +2 -2
  115. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -1
  116. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
  117. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -7
  118. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  119. package/lib/components/FormComponents/RepeatGroup/AddItemButton.d.ts +1 -0
  120. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +2 -2
  121. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -1
  122. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +1 -0
  123. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +2 -2
  124. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +1 -1
  125. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
  126. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +8 -6
  127. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  128. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
  129. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +5 -3
  130. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
  131. package/lib/components/FormComponents/RepeatItem/AddItemButton.d.ts +1 -0
  132. package/lib/components/FormComponents/RepeatItem/AddItemButton.js +2 -2
  133. package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -1
  134. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +1 -0
  135. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +2 -2
  136. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +1 -1
  137. package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +2 -2
  138. package/lib/components/FormComponents/RepeatItem/RepeatField.js +5 -3
  139. package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
  140. package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +2 -2
  141. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +6 -5
  142. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  143. package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +4 -18
  144. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
  145. package/lib/components/FormComponents/SingleItem/SingleItem.js +4 -2
  146. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  147. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
  148. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +12 -12
  149. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  150. package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
  151. package/lib/components/FormComponents/StringItem/StringItem.js +5 -4
  152. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  153. package/lib/components/FormComponents/Tables/AddRowButton.d.ts +1 -0
  154. package/lib/components/FormComponents/Tables/AddRowButton.js +2 -2
  155. package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -1
  156. package/lib/components/FormComponents/Tables/DeleteRowButton.d.ts +1 -0
  157. package/lib/components/FormComponents/Tables/DeleteRowButton.js +2 -2
  158. package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +1 -1
  159. package/lib/components/FormComponents/Tables/GroupTable.d.ts +2 -2
  160. package/lib/components/FormComponents/Tables/GroupTable.js +8 -6
  161. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
  162. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +2 -1
  163. package/lib/components/FormComponents/Tables/GroupTableRow.js +2 -2
  164. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
  165. package/lib/components/FormComponents/Tables/QItemGroupTable.js +5 -7
  166. package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
  167. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
  168. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
  169. package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
  170. package/lib/components/FormComponents/TextItem/TextItem.js +5 -4
  171. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  172. package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
  173. package/lib/components/FormComponents/TimeItem/TimeItem.js +5 -4
  174. package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
  175. package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
  176. package/lib/components/FormComponents/UrlItem/UrlItem.js +5 -4
  177. package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
  178. package/lib/components/Lists.styles.d.ts +2 -9
  179. package/lib/components/Renderer/FormTopLevelItem.js +7 -5
  180. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  181. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  182. package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
  183. package/lib/components/Tabs/ShowCompletedTabsSection.js +1 -1
  184. package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -1
  185. package/lib/hooks/useMinimalStringCalculatedExpression.d.ts +11 -0
  186. package/lib/hooks/useMinimalStringCalculatedExpression.js +37 -0
  187. package/lib/hooks/useMinimalStringCalculatedExpression.js.map +1 -0
  188. package/lib/hooks/useReadOnly.d.ts +3 -0
  189. package/lib/hooks/useReadOnly.js +26 -0
  190. package/lib/hooks/useReadOnly.js.map +1 -0
  191. package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
  192. package/lib/interfaces/renderProps.interface.d.ts +3 -0
  193. package/lib/theme/overrides/Typography.d.ts +13 -0
  194. package/lib/theme/overrides/Typography.js +31 -0
  195. package/lib/theme/overrides/Typography.js.map +1 -0
  196. package/lib/theme/typography.d.ts +0 -2
  197. package/lib/theme/typography.js +3 -5
  198. package/lib/theme/typography.js.map +1 -1
  199. package/lib/utils/calculatedExpression.d.ts +12 -0
  200. package/lib/utils/calculatedExpression.js +54 -8
  201. package/lib/utils/calculatedExpression.js.map +1 -1
  202. package/package.json +12 -12
  203. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +8 -5
  204. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +9 -6
  205. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +18 -7
  206. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +18 -7
  207. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +17 -7
  208. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +9 -8
  209. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +10 -7
  210. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +3 -2
  211. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +14 -9
  212. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +3 -2
  213. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +12 -7
  214. package/src/components/FormComponents/DateItem/DateItem.tsx +8 -6
  215. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +8 -6
  216. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +7 -5
  217. package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +6 -2
  218. package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +2 -2
  219. package/src/components/FormComponents/GridGroup/GridGroup.tsx +13 -5
  220. package/src/components/FormComponents/GridGroup/GridRow.tsx +6 -2
  221. package/src/components/FormComponents/GridGroup/GridTable.tsx +6 -2
  222. package/src/components/FormComponents/GroupItem/GroupHeading.tsx +12 -6
  223. package/src/components/FormComponents/GroupItem/GroupItem.tsx +8 -2
  224. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +27 -4
  225. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +7 -5
  226. package/src/components/FormComponents/Item.styles.ts +0 -5
  227. package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +4 -3
  228. package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +10 -5
  229. package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +3 -2
  230. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +10 -4
  231. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +13 -7
  232. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +20 -9
  233. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +11 -2
  234. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +11 -8
  235. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +10 -4
  236. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +10 -5
  237. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +10 -4
  238. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +12 -7
  239. package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +3 -2
  240. package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +3 -2
  241. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +17 -9
  242. package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -2
  243. package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +3 -2
  244. package/src/components/FormComponents/RepeatItem/DeleteItemButton.tsx +3 -2
  245. package/src/components/FormComponents/RepeatItem/RepeatField.tsx +21 -3
  246. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +13 -6
  247. package/src/components/FormComponents/SingleItem/SingleItem.tsx +8 -2
  248. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +16 -2
  249. package/src/components/FormComponents/StringItem/StringItem.tsx +7 -5
  250. package/src/components/FormComponents/Tables/AddRowButton.tsx +3 -2
  251. package/src/components/FormComponents/Tables/DeleteRowButton.tsx +3 -2
  252. package/src/components/FormComponents/Tables/GroupTable.tsx +17 -6
  253. package/src/components/FormComponents/Tables/GroupTableRow.tsx +6 -2
  254. package/src/components/FormComponents/TextItem/TextItem.tsx +7 -5
  255. package/src/components/FormComponents/TimeItem/TimeItem.tsx +8 -6
  256. package/src/components/FormComponents/UrlItem/UrlItem.tsx +7 -5
  257. package/src/components/Renderer/FormTopLevelItem.tsx +9 -4
  258. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  259. package/src/components/Tabs/ShowCompletedTabsSection.tsx +1 -1
  260. package/src/hooks/useReadOnly.ts +30 -0
  261. package/src/interfaces/calculatedExpression.interface.ts +1 -1
  262. package/src/interfaces/renderProps.interface.ts +4 -0
  263. package/src/theme/typography.ts +3 -5
  264. package/src/utils/calculatedExpression.ts +68 -12
@@ -26,22 +26,28 @@ import useValueSetCodings from '../../../hooks/useValueSetCodings';
26
26
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
27
27
  import type {
28
28
  PropsWithIsRepeatedAttribute,
29
+ PropsWithParentIsReadOnlyAttribute,
29
30
  PropsWithQrItemChangeHandler
30
31
  } from '../../../interfaces/renderProps.interface';
31
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
32
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
33
34
  import ChoiceRadioAnswerValueSetFields from './ChoiceRadioAnswerValueSetFields';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
34
36
 
35
37
  interface ChoiceRadioAnswerValueSetItemProps
36
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
- PropsWithIsRepeatedAttribute {
39
+ PropsWithIsRepeatedAttribute,
40
+ PropsWithParentIsReadOnlyAttribute {
38
41
  qItem: QuestionnaireItem;
39
42
  qrItem: QuestionnaireResponseItem;
40
43
  orientation: ChoiceItemOrientation;
41
44
  }
42
45
 
43
46
  function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps) {
44
- const { qItem, qrItem, isRepeated, onQrItemChange, orientation } = props;
47
+ const { qItem, qrItem, orientation, isRepeated, parentIsReadOnly, onQrItemChange } = props;
48
+
49
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
50
+ const { displayInstructions } = useRenderingExtensions(qItem);
45
51
 
46
52
  // Init input value
47
53
  const qrChoiceRadio = qrItem ?? createEmptyQrItem(qItem);
@@ -51,9 +57,6 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
51
57
  valueRadio = qrChoiceRadio.answer[0].valueCoding?.code ?? null;
52
58
  }
53
59
 
54
- // Get additional rendering extensions
55
- const { displayInstructions, readOnly } = useRenderingExtensions(qItem);
56
-
57
60
  // Get codings/options from valueSet
58
61
  const { codings, serverError } = useValueSetCodings(qItem);
59
62
 
@@ -87,7 +90,7 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
87
90
  <FullWidthFormComponentBox data-test="q-item-choice-radio-answer-value-set-box">
88
91
  <Grid container columnSpacing={6}>
89
92
  <Grid item xs={5}>
90
- <LabelWrapper qItem={qItem} />
93
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
91
94
  </Grid>
92
95
  <Grid item xs={7}>
93
96
  <ChoiceRadioAnswerValueSetFields
@@ -99,7 +102,7 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
99
102
  serverError={serverError}
100
103
  onCheckedChange={handleChange}
101
104
  />
102
- <DisplayInstructions displayInstructions={displayInstructions} />
105
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
103
106
  </Grid>
104
107
  </Grid>
105
108
  </FullWidthFormComponentBox>
@@ -26,13 +26,14 @@ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps
26
26
  interface ChoiceSelectAnswerOptionFieldsProps extends PropsWithIsTabledAttribute {
27
27
  qItem: QuestionnaireItem;
28
28
  valueSelect: string;
29
+ readOnly: boolean;
29
30
  onSelectChange: (newValue: string) => void;
30
31
  }
31
32
 
32
33
  function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsProps) {
33
- const { qItem, valueSelect, isTabled, onSelectChange } = props;
34
+ const { qItem, valueSelect, readOnly, isTabled, onSelectChange } = props;
34
35
 
35
- const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
36
+ const { displayUnit, displayPrompt, entryFormat } = useRenderingExtensions(qItem);
36
37
 
37
38
  return (
38
39
  <Select
@@ -26,22 +26,28 @@ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
26
26
  import type {
27
27
  PropsWithIsRepeatedAttribute,
28
28
  PropsWithIsTabledAttribute,
29
+ PropsWithParentIsReadOnlyAttribute,
29
30
  PropsWithQrItemChangeHandler
30
31
  } from '../../../interfaces/renderProps.interface';
31
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
32
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
33
34
  import ChoiceSelectAnswerOptionFields from './ChoiceSelectAnswerOptionFields';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
34
36
 
35
37
  interface ChoiceSelectAnswerOptionItemProps
36
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
39
  PropsWithIsRepeatedAttribute,
38
- PropsWithIsTabledAttribute {
40
+ PropsWithIsTabledAttribute,
41
+ PropsWithParentIsReadOnlyAttribute {
39
42
  qItem: QuestionnaireItem;
40
43
  qrItem: QuestionnaireResponseItem;
41
44
  }
42
45
 
43
46
  function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps) {
44
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
47
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
48
+
49
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
50
+ const { displayInstructions } = useRenderingExtensions(qItem);
45
51
 
46
52
  // Init input value
47
53
  const qrChoiceSelect = qrItem ?? createEmptyQrItem(qItem);
@@ -50,9 +56,6 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
50
56
  valueSelect = '';
51
57
  }
52
58
 
53
- // Get additional rendering extensions
54
- const { displayInstructions } = useRenderingExtensions(qItem);
55
-
56
59
  // Event handlers
57
60
  function handleChange(newValue: string) {
58
61
  if (qItem.answerOption) {
@@ -70,8 +73,9 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
70
73
  <ChoiceSelectAnswerOptionFields
71
74
  qItem={qItem}
72
75
  valueSelect={valueSelect}
73
- onSelectChange={handleChange}
76
+ readOnly={readOnly}
74
77
  isTabled={isTabled}
78
+ onSelectChange={handleChange}
75
79
  />
76
80
  );
77
81
  }
@@ -80,16 +84,17 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
80
84
  <FullWidthFormComponentBox data-test="q-item-choice-select-answer-option-box">
81
85
  <Grid container columnSpacing={6}>
82
86
  <Grid item xs={5}>
83
- <LabelWrapper qItem={qItem} />
87
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
84
88
  </Grid>
85
89
  <Grid item xs={7}>
86
90
  <ChoiceSelectAnswerOptionFields
87
91
  qItem={qItem}
88
92
  valueSelect={valueSelect}
89
- onSelectChange={handleChange}
93
+ readOnly={readOnly}
90
94
  isTabled={isTabled}
95
+ onSelectChange={handleChange}
91
96
  />
92
- <DisplayInstructions displayInstructions={displayInstructions} />
97
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
93
98
  </Grid>
94
99
  </Grid>
95
100
  </FullWidthFormComponentBox>
@@ -30,13 +30,14 @@ interface ChoiceSelectAnswerValueSetFieldsProps extends PropsWithIsTabledAttribu
30
30
  codings: Coding[];
31
31
  valueCoding: Coding | null;
32
32
  serverError: Error | null;
33
+ readOnly: boolean;
33
34
  onSelectChange: (newValue: Coding | null) => void;
34
35
  }
35
36
 
36
37
  function ChoiceSelectAnswerValueSetFields(props: ChoiceSelectAnswerValueSetFieldsProps) {
37
- const { qItem, codings, valueCoding, serverError, isTabled, onSelectChange } = props;
38
+ const { qItem, codings, valueCoding, serverError, readOnly, isTabled, onSelectChange } = props;
38
39
 
39
- const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
40
+ const { displayUnit, displayPrompt, entryFormat } = useRenderingExtensions(qItem);
40
41
 
41
42
  if (codings.length > 0) {
42
43
  return (
@@ -26,22 +26,28 @@ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
26
26
  import type {
27
27
  PropsWithIsRepeatedAttribute,
28
28
  PropsWithIsTabledAttribute,
29
+ PropsWithParentIsReadOnlyAttribute,
29
30
  PropsWithQrItemChangeHandler
30
31
  } from '../../../interfaces/renderProps.interface';
31
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
32
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
33
34
  import ChoiceSelectAnswerValueSetFields from './ChoiceSelectAnswerValueSetFields';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
34
36
 
35
37
  interface ChoiceSelectAnswerValueSetItemProps
36
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
39
  PropsWithIsRepeatedAttribute,
38
- PropsWithIsTabledAttribute {
40
+ PropsWithIsTabledAttribute,
41
+ PropsWithParentIsReadOnlyAttribute {
39
42
  qItem: QuestionnaireItem;
40
43
  qrItem: QuestionnaireResponseItem;
41
44
  }
42
45
 
43
46
  function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemProps) {
44
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
47
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
48
+
49
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
50
+ const { displayInstructions } = useRenderingExtensions(qItem);
45
51
 
46
52
  // Init input value
47
53
  const qrChoiceSelect = qrItem ?? createEmptyQrItem(qItem);
@@ -50,9 +56,6 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
50
56
  valueCoding = qrChoiceSelect.answer[0].valueCoding ?? null;
51
57
  }
52
58
 
53
- // Get additional rendering extensions
54
- const { displayInstructions } = useRenderingExtensions(qItem);
55
-
56
59
  // Get codings/options from valueSet
57
60
  const { codings, serverError } = useValueSetCodings(qItem);
58
61
 
@@ -96,6 +99,7 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
96
99
  codings={codings}
97
100
  valueCoding={valueCoding}
98
101
  serverError={serverError}
102
+ readOnly={readOnly}
99
103
  isTabled={isTabled}
100
104
  onSelectChange={handleChange}
101
105
  />
@@ -106,7 +110,7 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
106
110
  <FullWidthFormComponentBox data-test="q-item-choice-dropdown-answer-value-set-box">
107
111
  <Grid container columnSpacing={6}>
108
112
  <Grid item xs={5}>
109
- <LabelWrapper qItem={qItem} />
113
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
110
114
  </Grid>
111
115
  <Grid item xs={7}>
112
116
  <ChoiceSelectAnswerValueSetFields
@@ -114,10 +118,11 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
114
118
  codings={codings}
115
119
  valueCoding={valueCoding}
116
120
  serverError={serverError}
121
+ readOnly={readOnly}
117
122
  isTabled={isTabled}
118
123
  onSelectChange={handleChange}
119
124
  />
120
- <DisplayInstructions displayInstructions={displayInstructions} />
125
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
121
126
  </Grid>
122
127
  </Grid>
123
128
  </FullWidthFormComponentBox>
@@ -21,6 +21,7 @@ import type {
21
21
  PropsWithIsTabledAttribute,
22
22
  PropsWithQrItemChangeHandler
23
23
  } from '../../../interfaces/renderProps.interface';
24
+ import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
24
25
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
25
26
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
26
27
  import { createEmptyQrItem } from '../../../utils/qrItem';
@@ -29,21 +30,22 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
29
30
  import DateField from './DateField';
30
31
  import type { Dayjs } from 'dayjs';
31
32
  import dayjs from 'dayjs';
33
+ import useReadOnly from '../../../hooks/useReadOnly';
32
34
 
33
35
  interface DateItemProps
34
36
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
35
37
  PropsWithIsRepeatedAttribute,
36
- PropsWithIsTabledAttribute {
38
+ PropsWithIsTabledAttribute,
39
+ PropsWithParentIsReadOnlyAttribute {
37
40
  qItem: QuestionnaireItem;
38
41
  qrItem: QuestionnaireResponseItem;
39
42
  }
40
43
 
41
44
  function DateItem(props: DateItemProps) {
42
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
45
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
43
46
 
44
- // Get additional rendering extensions
45
- const { displayPrompt, displayInstructions, readOnly, entryFormat } =
46
- useRenderingExtensions(qItem);
47
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
48
+ const { displayPrompt, displayInstructions, entryFormat } = useRenderingExtensions(qItem);
47
49
 
48
50
  // Init input value
49
51
  let dateString: string | null = null;
@@ -83,7 +85,7 @@ function DateItem(props: DateItemProps) {
83
85
 
84
86
  return (
85
87
  <FullWidthFormComponentBox data-test="q-item-date-box">
86
- <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions}>
88
+ <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
87
89
  <DateField
88
90
  value={dateDayJs}
89
91
  displayPrompt={displayPrompt}
@@ -19,6 +19,7 @@ import React from 'react';
19
19
  import type {
20
20
  PropsWithIsRepeatedAttribute,
21
21
  PropsWithIsTabledAttribute,
22
+ PropsWithParentIsReadOnlyAttribute,
22
23
  PropsWithQrItemChangeHandler
23
24
  } from '../../../interfaces/renderProps.interface';
24
25
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
@@ -29,21 +30,22 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
29
30
  import DateTimeField from './DateTimeField';
30
31
  import type { Dayjs } from 'dayjs';
31
32
  import dayjs from 'dayjs';
33
+ import useReadOnly from '../../../hooks/useReadOnly';
32
34
 
33
35
  interface DateTimeItemProps
34
36
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
35
37
  PropsWithIsRepeatedAttribute,
36
- PropsWithIsTabledAttribute {
38
+ PropsWithIsTabledAttribute,
39
+ PropsWithParentIsReadOnlyAttribute {
37
40
  qItem: QuestionnaireItem;
38
41
  qrItem: QuestionnaireResponseItem;
39
42
  }
40
43
 
41
44
  function DateTimeItem(props: DateTimeItemProps) {
42
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
45
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
43
46
 
44
- // Get additional rendering extensions
45
- const { displayPrompt, displayInstructions, readOnly, entryFormat } =
46
- useRenderingExtensions(qItem);
47
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
48
+ const { displayPrompt, displayInstructions, entryFormat } = useRenderingExtensions(qItem);
47
49
 
48
50
  // Init input value
49
51
  let dateTimeString: string | null = null;
@@ -81,7 +83,7 @@ function DateTimeItem(props: DateTimeItemProps) {
81
83
 
82
84
  return (
83
85
  <FullWidthFormComponentBox data-test="q-item-date-time-box">
84
- <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions}>
86
+ <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
85
87
  <DateTimeField
86
88
  value={dateTimeDayJs}
87
89
  displayPrompt={displayPrompt}
@@ -19,6 +19,7 @@ import React, { useCallback } from 'react';
19
19
  import type {
20
20
  PropsWithIsRepeatedAttribute,
21
21
  PropsWithIsTabledAttribute,
22
+ PropsWithParentIsReadOnlyAttribute,
22
23
  PropsWithQrItemChangeHandler
23
24
  } from '../../../interfaces/renderProps.interface';
24
25
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
@@ -37,25 +38,26 @@ import {
37
38
  import { getDecimalPrecision } from '../../../utils/itemControl';
38
39
  import useDecimalCalculatedExpression from '../../../hooks/useDecimalCalculatedExpression';
39
40
  import useStringInput from '../../../hooks/useStringInput';
41
+ import useReadOnly from '../../../hooks/useReadOnly';
40
42
 
41
43
  interface DecimalItemProps
42
44
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
43
45
  PropsWithIsRepeatedAttribute,
44
- PropsWithIsTabledAttribute {
46
+ PropsWithIsTabledAttribute,
47
+ PropsWithParentIsReadOnlyAttribute {
45
48
  qItem: QuestionnaireItem;
46
49
  qrItem: QuestionnaireResponseItem;
47
50
  }
48
51
 
49
52
  function DecimalItem(props: DecimalItemProps) {
50
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
53
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
51
54
 
52
- // Get additional rendering extensions
55
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
53
56
  const precision = getDecimalPrecision(qItem);
54
57
  const {
55
58
  displayUnit,
56
59
  displayPrompt,
57
60
  displayInstructions,
58
- readOnly,
59
61
  entryFormat,
60
62
  regexValidation,
61
63
  maxLength
@@ -132,7 +134,7 @@ function DecimalItem(props: DecimalItemProps) {
132
134
 
133
135
  return (
134
136
  <FullWidthFormComponentBox data-test="q-item-decimal-box">
135
- <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions}>
137
+ <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
136
138
  <DecimalField
137
139
  linkId={qItem.linkId}
138
140
  input={input}
@@ -21,14 +21,18 @@ import { DisplayInstructionsWrapper } from './DisplayInstructions.styles';
21
21
 
22
22
  interface DisplayInstructionsProps {
23
23
  displayInstructions: string;
24
+ readOnly: boolean;
24
25
  }
25
26
 
26
27
  const DisplayInstructions = memo(function DisplayInstructions(props: DisplayInstructionsProps) {
27
- const { displayInstructions } = props;
28
+ const { displayInstructions, readOnly } = props;
28
29
 
29
30
  return displayInstructions ? (
30
31
  <DisplayInstructionsWrapper>
31
- <Typography variant="caption" fontSize={10.5}>
32
+ <Typography
33
+ variant="caption"
34
+ fontSize={10.5}
35
+ color={readOnly ? 'text.secondary' : 'text.primary'}>
32
36
  {displayInstructions}
33
37
  </Typography>
34
38
  </DisplayInstructionsWrapper>
@@ -18,7 +18,7 @@
18
18
  import React, { memo } from 'react';
19
19
  import type { QuestionnaireItem } from 'fhir/r4';
20
20
  import { FullWidthFormComponentBox } from '../../Box.styles';
21
- import { isSpecificItemControl } from '../../../utils/itemControl';
21
+ import { isSpecificItemControl } from '../../../utils';
22
22
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
23
23
 
24
24
  interface DisplayItemProps {
@@ -35,7 +35,7 @@ const DisplayItem = memo(function DisplayItem(props: DisplayItemProps) {
35
35
 
36
36
  return (
37
37
  <FullWidthFormComponentBox>
38
- <LabelWrapper qItem={qItem} />
38
+ <LabelWrapper qItem={qItem} readOnly={false} />
39
39
  </FullWidthFormComponentBox>
40
40
  );
41
41
  });
@@ -17,7 +17,10 @@
17
17
 
18
18
  import React, { useMemo } from 'react';
19
19
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
- import type { PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
20
+ import type {
21
+ PropsWithParentIsReadOnlyAttribute,
22
+ PropsWithQrItemChangeHandler
23
+ } from '../../../interfaces/renderProps.interface';
21
24
  import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
22
25
  import useHidden from '../../../hooks/useHidden';
23
26
  import { QGroupContainerBox } from '../../Box.styles';
@@ -28,15 +31,18 @@ import Typography from '@mui/material/Typography';
28
31
  import { mapQItemsIndex } from '../../../utils/mapItem';
29
32
  import GridTable from './GridTable';
30
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
34
+ import useReadOnly from '../../../hooks/useReadOnly';
31
35
 
32
- interface GridGroupProps extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem> {
36
+ interface GridGroupProps
37
+ extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
38
+ PropsWithParentIsReadOnlyAttribute {
33
39
  qItem: QuestionnaireItem;
34
40
  qrItem: QuestionnaireResponseItem;
35
41
  groupCardElevation: number;
36
42
  }
37
43
 
38
44
  function GridGroup(props: GridGroupProps) {
39
- const { qItem, qrItem, groupCardElevation, onQrItemChange } = props;
45
+ const { qItem, qrItem, groupCardElevation, parentIsReadOnly, onQrItemChange } = props;
40
46
 
41
47
  const qRowItems = qItem.item;
42
48
  const qrGroup = qrItem && qrItem.item ? qrItem : createQrGroup(qItem);
@@ -49,6 +55,7 @@ function GridGroup(props: GridGroupProps) {
49
55
  [qRowItems]
50
56
  );
51
57
 
58
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
52
59
  const itemIsHidden = useHidden(qItem);
53
60
  if (itemIsHidden) {
54
61
  return null;
@@ -73,8 +80,8 @@ function GridGroup(props: GridGroupProps) {
73
80
  return (
74
81
  <>
75
82
  <QGroupContainerBox cardElevation={groupCardElevation} isRepeated={false} py={3}>
76
- <Typography fontSize={13} variant="h6">
77
- <LabelWrapper qItem={qItem} />
83
+ <Typography fontSize={13} variant="h6" color={readOnly ? 'text.secondary' : 'text.primary'}>
84
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
78
85
  </Typography>
79
86
  <Divider sx={{ my: 1 }} light />
80
87
 
@@ -84,6 +91,7 @@ function GridGroup(props: GridGroupProps) {
84
91
  qrItems={qrRowItems}
85
92
  qItemsIndexMap={qItemsIndexMap}
86
93
  columnLabels={columnLabels}
94
+ parentIsReadOnly={parentIsReadOnly}
87
95
  onQrItemChange={handleRowChange}
88
96
  />
89
97
  </TableContainer>
@@ -18,6 +18,7 @@
18
18
  import React, { useMemo } from 'react';
19
19
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
20
  import type { PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
21
+ import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
21
22
  import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
22
23
  import { GridAnswerTableCell, GridTextTableCell } from '../Tables/Table.styles';
23
24
  import SingleItem from '../SingleItem/SingleItem';
@@ -25,7 +26,9 @@ import { getQrItemsIndex, mapQItemsIndex } from '../../../utils/mapItem';
25
26
  import Typography from '@mui/material/Typography';
26
27
  import useHidden from '../../../hooks/useHidden';
27
28
 
28
- interface GridRowProps extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem> {
29
+ interface GridRowProps
30
+ extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
31
+ PropsWithParentIsReadOnlyAttribute {
29
32
  qItem: QuestionnaireItem;
30
33
  qrItem: QuestionnaireResponseItem;
31
34
  columnLabels: string[];
@@ -33,7 +36,7 @@ interface GridRowProps extends PropsWithQrItemChangeHandler<QuestionnaireRespons
33
36
  }
34
37
 
35
38
  function GridRow(props: GridRowProps) {
36
- const { qItem, qrItem, columnLabels, numOfColumns, onQrItemChange } = props;
39
+ const { qItem, qrItem, columnLabels, numOfColumns, parentIsReadOnly, onQrItemChange } = props;
37
40
 
38
41
  const rowQItems = qItem.item;
39
42
  const row = qrItem && qrItem.item ? qrItem : createQrGroup(qItem);
@@ -82,6 +85,7 @@ function GridRow(props: GridRowProps) {
82
85
  qrItem={cellQrItem}
83
86
  isRepeated={true}
84
87
  isTabled={true}
88
+ parentIsReadOnly={parentIsReadOnly}
85
89
  onQrItemChange={handleQrRowItemChange}
86
90
  />
87
91
  </GridAnswerTableCell>
@@ -26,8 +26,11 @@ import GridRow from './GridRow';
26
26
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
27
27
  import { getQrItemsIndex } from '../../../utils/mapItem';
28
28
  import type { PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
29
+ import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
29
30
 
30
- interface GridTableProps extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem> {
31
+ interface GridTableProps
32
+ extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
33
+ PropsWithParentIsReadOnlyAttribute {
31
34
  qItems: QuestionnaireItem[];
32
35
  qrItems: QuestionnaireResponseItem[];
33
36
  qItemsIndexMap: Record<string, number>;
@@ -35,7 +38,7 @@ interface GridTableProps extends PropsWithQrItemChangeHandler<QuestionnaireRespo
35
38
  }
36
39
 
37
40
  function GridTable(props: GridTableProps) {
38
- const { qItems, qrItems, qItemsIndexMap, columnLabels, onQrItemChange } = props;
41
+ const { qItems, qrItems, qItemsIndexMap, columnLabels, parentIsReadOnly, onQrItemChange } = props;
39
42
 
40
43
  const qrItemsByIndex: (QuestionnaireResponseItem | QuestionnaireResponseItem[])[] =
41
44
  getQrItemsIndex(qItems, qrItems, qItemsIndexMap);
@@ -68,6 +71,7 @@ function GridTable(props: GridTableProps) {
68
71
  qrItem={qrItem}
69
72
  columnLabels={columnLabels}
70
73
  numOfColumns={numOfColumns}
74
+ parentIsReadOnly={parentIsReadOnly}
71
75
  onQrItemChange={onQrItemChange}
72
76
  />
73
77
  </TableRow>
@@ -18,20 +18,21 @@
18
18
  import React, { memo } from 'react';
19
19
  import Box from '@mui/material/Box';
20
20
  import Divider from '@mui/material/Divider';
21
- import { QGroupHeadingTypography } from '../Typography.styles';
21
+ import Typography from '@mui/material/Typography';
22
22
  import type { PropsWithIsRepeatedAttribute } from '../../../interfaces/renderProps.interface';
23
23
  import type { QuestionnaireItem } from 'fhir/r4';
24
24
  import { getContextDisplays } from '../../../utils/tabs';
25
25
  import ContextDisplayItem from '../ItemParts/ContextDisplayItem';
26
- import LabelText from '../ItemParts/ItemLabelText';
26
+ import ItemLabelText from '../ItemParts/ItemLabelText';
27
27
 
28
28
  interface GroupHeadingProps extends PropsWithIsRepeatedAttribute {
29
29
  qItem: QuestionnaireItem;
30
+ readOnly: boolean;
30
31
  tabIsMarkedAsComplete?: boolean;
31
32
  }
32
33
 
33
34
  const GroupHeading = memo(function GroupHeading(props: GroupHeadingProps) {
34
- const { qItem, tabIsMarkedAsComplete, isRepeated } = props;
35
+ const { qItem, readOnly, tabIsMarkedAsComplete, isRepeated } = props;
35
36
 
36
37
  const contextDisplayItems = getContextDisplays(qItem);
37
38
 
@@ -39,12 +40,17 @@ const GroupHeading = memo(function GroupHeading(props: GroupHeadingProps) {
39
40
  return null;
40
41
  }
41
42
 
43
+ const isTabHeading = tabIsMarkedAsComplete !== undefined;
44
+
42
45
  return (
43
46
  <>
44
47
  <Box display="flex" alignItems="center" justifyContent="space-between">
45
- <QGroupHeadingTypography variant="h6" isTabHeading={tabIsMarkedAsComplete !== undefined}>
46
- <LabelText qItem={qItem} />
47
- </QGroupHeadingTypography>
48
+ <Typography
49
+ variant="h6"
50
+ fontSize={isTabHeading ? 16 : 15}
51
+ color={readOnly && !isTabHeading ? 'text.secondary' : 'text.primary'}>
52
+ <ItemLabelText qItem={qItem} />
53
+ </Typography>
48
54
 
49
55
  <Box display="flex" columnGap={0.5}>
50
56
  {contextDisplayItems.map((item) => {
@@ -22,6 +22,7 @@ import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
22
22
  import { QGroupContainerBox } from '../../Box.styles';
23
23
  import type {
24
24
  PropsWithIsRepeatedAttribute,
25
+ PropsWithParentIsReadOnlyAttribute,
25
26
  PropsWithQrItemChangeHandler
26
27
  } from '../../../interfaces/renderProps.interface';
27
28
  import type { QrRepeatGroup } from '../../../interfaces/repeatGroup.interface';
@@ -31,17 +32,18 @@ import GroupHeading from './GroupHeading';
31
32
  import { GroupCard } from './GroupItem.styles';
32
33
  import NextTabButtonWrapper from './NextTabButtonWrapper';
33
34
  import GroupItemSwitcher from './GroupItemSwitcher';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
34
36
 
35
37
  interface GroupItemProps
36
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
- PropsWithIsRepeatedAttribute {
39
+ PropsWithIsRepeatedAttribute,
40
+ PropsWithParentIsReadOnlyAttribute {
38
41
  qItem: QuestionnaireItem;
39
42
  qrItem: QuestionnaireResponseItem;
40
43
  groupCardElevation: number;
41
44
  tabIsMarkedAsComplete?: boolean;
42
45
  tabs?: Tabs;
43
46
  currentTabIndex?: number;
44
- goToNextTab?: (nextTabIndex: number) => unknown;
45
47
  }
46
48
 
47
49
  function GroupItem(props: GroupItemProps) {
@@ -53,11 +55,13 @@ function GroupItem(props: GroupItemProps) {
53
55
  tabIsMarkedAsComplete,
54
56
  tabs,
55
57
  currentTabIndex,
58
+ parentIsReadOnly,
56
59
  onQrItemChange
57
60
  } = props;
58
61
 
59
62
  const qItemsIndexMap = useMemo(() => mapQItemsIndex(qItem), [qItem]);
60
63
 
64
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
61
65
  const itemIsHidden = useHidden(qItem);
62
66
  if (itemIsHidden) {
63
67
  return null;
@@ -96,6 +100,7 @@ function GroupItem(props: GroupItemProps) {
96
100
  <GroupCard elevation={groupCardElevation} isRepeated={isRepeated}>
97
101
  <GroupHeading
98
102
  qItem={qItem}
103
+ readOnly={readOnly}
99
104
  tabIsMarkedAsComplete={tabIsMarkedAsComplete}
100
105
  isRepeated={isRepeated}
101
106
  />
@@ -108,6 +113,7 @@ function GroupItem(props: GroupItemProps) {
108
113
  qItem={qItem}
109
114
  qrItemOrItems={qrItemOrItems}
110
115
  groupCardElevation={groupCardElevation}
116
+ parentIsReadOnly={readOnly}
111
117
  onQrItemChange={handleQrItemChange}
112
118
  onQrRepeatGroupChange={handleQrRepeatGroupChange}
113
119
  />