@medplum/react 0.9.24 → 0.9.27

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 (408) hide show
  1. package/dist/cjs/index.js +24 -9
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/index.min.js +1 -1
  4. package/dist/cjs/index.min.js.map +1 -1
  5. package/dist/{types → esm}/AddressDisplay.d.ts +0 -0
  6. package/dist/esm/AddressDisplay.js +13 -0
  7. package/dist/esm/AddressDisplay.js.map +1 -0
  8. package/dist/{types → esm}/AddressInput.d.ts +0 -0
  9. package/dist/esm/AddressInput.js +69 -0
  10. package/dist/esm/AddressInput.js.map +1 -0
  11. package/dist/{types → esm}/AnnotationInput.d.ts +0 -0
  12. package/dist/esm/AnnotationInput.js +28 -0
  13. package/dist/esm/AnnotationInput.js.map +1 -0
  14. package/dist/{types → esm}/AttachmentArrayDisplay.d.ts +0 -0
  15. package/dist/esm/AttachmentArrayDisplay.js +11 -0
  16. package/dist/esm/AttachmentArrayDisplay.js.map +1 -0
  17. package/dist/{types → esm}/AttachmentArrayInput.d.ts +0 -0
  18. package/dist/esm/AttachmentArrayInput.js +42 -0
  19. package/dist/esm/AttachmentArrayInput.js.map +1 -0
  20. package/dist/{types → esm}/AttachmentDisplay.d.ts +0 -0
  21. package/dist/esm/AttachmentDisplay.js +20 -0
  22. package/dist/esm/AttachmentDisplay.js.map +1 -0
  23. package/dist/{types → esm}/AttachmentInput.d.ts +0 -0
  24. package/dist/esm/AttachmentInput.js +27 -0
  25. package/dist/esm/AttachmentInput.js.map +1 -0
  26. package/dist/{types → esm}/Autocomplete.d.ts +0 -0
  27. package/dist/esm/Autocomplete.js +284 -0
  28. package/dist/esm/Autocomplete.js.map +1 -0
  29. package/dist/{types → esm}/Avatar.d.ts +0 -0
  30. package/dist/esm/Avatar.js +24 -0
  31. package/dist/esm/Avatar.js.map +1 -0
  32. package/dist/{types → esm}/BackboneElementDisplay.d.ts +0 -0
  33. package/dist/esm/BackboneElementDisplay.js +43 -0
  34. package/dist/esm/BackboneElementDisplay.js.map +1 -0
  35. package/dist/{types → esm}/BackboneElementInput.d.ts +0 -0
  36. package/dist/esm/BackboneElementInput.js +51 -0
  37. package/dist/esm/BackboneElementInput.js.map +1 -0
  38. package/dist/{types → esm}/Button.d.ts +0 -0
  39. package/dist/esm/Button.js +13 -0
  40. package/dist/esm/Button.js.map +1 -0
  41. package/dist/{types → esm}/CalendarInput.d.ts +0 -0
  42. package/dist/esm/CalendarInput.js +96 -0
  43. package/dist/esm/CalendarInput.js.map +1 -0
  44. package/dist/{types → esm}/Checkbox.d.ts +0 -0
  45. package/dist/esm/Checkbox.js +13 -0
  46. package/dist/esm/Checkbox.js.map +1 -0
  47. package/dist/{types → esm}/CheckboxFormSection.d.ts +0 -0
  48. package/dist/esm/CheckboxFormSection.js +12 -0
  49. package/dist/esm/CheckboxFormSection.js.map +1 -0
  50. package/dist/{types → esm}/CodeInput.d.ts +0 -0
  51. package/dist/esm/CodeInput.js +28 -0
  52. package/dist/esm/CodeInput.js.map +1 -0
  53. package/dist/{types → esm}/CodeableConceptDisplay.d.ts +0 -0
  54. package/dist/esm/CodeableConceptDisplay.js +19 -0
  55. package/dist/esm/CodeableConceptDisplay.js.map +1 -0
  56. package/dist/{types → esm}/CodeableConceptInput.d.ts +0 -0
  57. package/dist/esm/CodeableConceptInput.js +52 -0
  58. package/dist/esm/CodeableConceptInput.js.map +1 -0
  59. package/dist/{types → esm}/CodingDisplay.d.ts +0 -0
  60. package/dist/esm/CodingDisplay.js +9 -0
  61. package/dist/esm/CodingDisplay.js.map +1 -0
  62. package/dist/{types → esm}/CodingInput.d.ts +0 -0
  63. package/dist/esm/CodingInput.js +30 -0
  64. package/dist/esm/CodingInput.js.map +1 -0
  65. package/dist/{types → esm}/ContactDetailDisplay.d.ts +0 -0
  66. package/dist/esm/ContactDetailDisplay.js +17 -0
  67. package/dist/esm/ContactDetailDisplay.js.map +1 -0
  68. package/dist/{types → esm}/ContactDetailInput.d.ts +0 -0
  69. package/dist/esm/ContactDetailInput.js +37 -0
  70. package/dist/esm/ContactDetailInput.js.map +1 -0
  71. package/dist/{types → esm}/ContactPointDisplay.d.ts +0 -0
  72. package/dist/esm/ContactPointDisplay.js +29 -0
  73. package/dist/esm/ContactPointDisplay.js.map +1 -0
  74. package/dist/{types → esm}/ContactPointInput.d.ts +0 -0
  75. package/dist/esm/ContactPointInput.js +60 -0
  76. package/dist/esm/ContactPointInput.js.map +1 -0
  77. package/dist/{types → esm}/DateTimeDisplay.d.ts +0 -0
  78. package/dist/esm/DateTimeDisplay.js +11 -0
  79. package/dist/esm/DateTimeDisplay.js.map +1 -0
  80. package/dist/{types → esm}/DateTimeInput.d.ts +0 -0
  81. package/dist/esm/DateTimeInput.js +62 -0
  82. package/dist/esm/DateTimeInput.js.map +1 -0
  83. package/dist/{types → esm}/DefaultResourceTimeline.d.ts +0 -0
  84. package/dist/esm/DefaultResourceTimeline.js +27 -0
  85. package/dist/esm/DefaultResourceTimeline.js.map +1 -0
  86. package/dist/{types → esm}/DescriptionList.d.ts +0 -0
  87. package/dist/esm/DescriptionList.js +13 -0
  88. package/dist/esm/DescriptionList.js.map +1 -0
  89. package/dist/{types → esm}/DiagnosticReportDisplay.d.ts +0 -0
  90. package/dist/esm/DiagnosticReportDisplay.js +103 -0
  91. package/dist/esm/DiagnosticReportDisplay.js.map +1 -0
  92. package/dist/{types → esm}/Dialog.d.ts +0 -0
  93. package/dist/esm/Dialog.js +43 -0
  94. package/dist/esm/Dialog.js.map +1 -0
  95. package/dist/{types → esm}/Document.d.ts +0 -0
  96. package/dist/esm/Document.js +9 -0
  97. package/dist/esm/Document.js.map +1 -0
  98. package/dist/{types → esm}/EncounterTimeline.d.ts +0 -0
  99. package/dist/esm/EncounterTimeline.js +47 -0
  100. package/dist/esm/EncounterTimeline.js.map +1 -0
  101. package/dist/{types → esm}/ErrorBoundary.d.ts +0 -0
  102. package/dist/esm/ErrorBoundary.js +27 -0
  103. package/dist/esm/ErrorBoundary.js.map +1 -0
  104. package/dist/{types → esm}/ExtensionInput.d.ts +0 -0
  105. package/dist/esm/ExtensionInput.js +14 -0
  106. package/dist/esm/ExtensionInput.js.map +1 -0
  107. package/dist/{types → esm}/FhirPathDisplay.d.ts +0 -0
  108. package/dist/esm/FhirPathDisplay.js +23 -0
  109. package/dist/esm/FhirPathDisplay.js.map +1 -0
  110. package/dist/{types → esm}/FhirPathTable.d.ts +0 -0
  111. package/dist/esm/FhirPathTable.js +117 -0
  112. package/dist/esm/FhirPathTable.js.map +1 -0
  113. package/dist/{types → esm}/FooterLinks.d.ts +0 -0
  114. package/dist/esm/FooterLinks.js +8 -0
  115. package/dist/esm/FooterLinks.js.map +1 -0
  116. package/dist/{types → esm}/Form.d.ts +0 -0
  117. package/dist/esm/Form.js +15 -0
  118. package/dist/esm/Form.js.map +1 -0
  119. package/dist/{types → esm}/FormSection.d.ts +0 -0
  120. package/dist/esm/FormSection.js +18 -0
  121. package/dist/esm/FormSection.js.map +1 -0
  122. package/dist/{types → esm}/FormUtils.d.ts +0 -0
  123. package/dist/esm/FormUtils.js +49 -0
  124. package/dist/esm/FormUtils.js.map +1 -0
  125. package/dist/{types → esm}/GoogleButton.d.ts +0 -0
  126. package/dist/esm/GoogleButton.js +48 -0
  127. package/dist/esm/GoogleButton.js.map +1 -0
  128. package/dist/{types → esm}/Header.d.ts +0 -0
  129. package/dist/esm/Header.js +95 -0
  130. package/dist/esm/Header.js.map +1 -0
  131. package/dist/{types → esm}/HeaderSearchInput.d.ts +0 -0
  132. package/dist/esm/HeaderSearchInput.js +181 -0
  133. package/dist/esm/HeaderSearchInput.js.map +1 -0
  134. package/dist/{types → esm}/HumanNameDisplay.d.ts +0 -0
  135. package/dist/esm/HumanNameDisplay.js +13 -0
  136. package/dist/esm/HumanNameDisplay.js.map +1 -0
  137. package/dist/{types → esm}/HumanNameInput.d.ts +0 -0
  138. package/dist/esm/HumanNameInput.js +49 -0
  139. package/dist/esm/HumanNameInput.js.map +1 -0
  140. package/dist/{types → esm}/IdentifierDisplay.d.ts +0 -0
  141. package/dist/esm/IdentifierDisplay.js +12 -0
  142. package/dist/esm/IdentifierDisplay.js.map +1 -0
  143. package/dist/{types → esm}/IdentifierInput.d.ts +0 -0
  144. package/dist/esm/IdentifierInput.js +19 -0
  145. package/dist/esm/IdentifierInput.js.map +1 -0
  146. package/dist/{types → esm}/Input.d.ts +0 -0
  147. package/dist/esm/Input.js +26 -0
  148. package/dist/esm/Input.js.map +1 -0
  149. package/dist/{types → esm}/InputRow.d.ts +0 -0
  150. package/dist/esm/InputRow.js +8 -0
  151. package/dist/esm/InputRow.js.map +1 -0
  152. package/dist/{types → esm}/Loading.d.ts +0 -0
  153. package/dist/esm/Loading.js +11 -0
  154. package/dist/esm/Loading.js.map +1 -0
  155. package/dist/{types → esm}/Logo.d.ts +0 -0
  156. package/dist/esm/Logo.js +14 -0
  157. package/dist/esm/Logo.js.map +1 -0
  158. package/dist/{types → esm}/MedplumLink.d.ts +0 -0
  159. package/dist/esm/MedplumLink.js +34 -0
  160. package/dist/esm/MedplumLink.js.map +1 -0
  161. package/dist/{types → esm}/MedplumProvider.d.ts +0 -0
  162. package/dist/esm/MedplumProvider.js +50 -0
  163. package/dist/esm/MedplumProvider.js.map +1 -0
  164. package/dist/{types → esm}/MenuItem.d.ts +0 -0
  165. package/dist/esm/MenuItem.js +8 -0
  166. package/dist/esm/MenuItem.js.map +1 -0
  167. package/dist/{types → esm}/MenuSeparator.d.ts +0 -0
  168. package/dist/esm/MenuSeparator.js +8 -0
  169. package/dist/esm/MenuSeparator.js.map +1 -0
  170. package/dist/{types → esm}/PatientTimeline.d.ts +0 -0
  171. package/dist/esm/PatientTimeline.js +40 -0
  172. package/dist/esm/PatientTimeline.js.map +1 -0
  173. package/dist/{types → esm}/PeriodDisplay.d.ts +0 -0
  174. package/dist/esm/PeriodDisplay.js +16 -0
  175. package/dist/esm/PeriodDisplay.js.map +1 -0
  176. package/dist/{types → esm}/PeriodInput.d.ts +0 -0
  177. package/dist/esm/PeriodInput.js +19 -0
  178. package/dist/esm/PeriodInput.js.map +1 -0
  179. package/dist/{types → esm}/PlanDefinitionBuilder.d.ts +0 -0
  180. package/dist/esm/PlanDefinitionBuilder.js +155 -0
  181. package/dist/esm/PlanDefinitionBuilder.js.map +1 -0
  182. package/dist/{types → esm}/Popup.d.ts +0 -0
  183. package/dist/esm/Popup.js +64 -0
  184. package/dist/esm/Popup.js.map +1 -0
  185. package/dist/{types → esm}/QuantityDisplay.d.ts +0 -0
  186. package/dist/esm/QuantityDisplay.js +28 -0
  187. package/dist/esm/QuantityDisplay.js.map +1 -0
  188. package/dist/{types → esm}/QuantityInput.d.ts +0 -0
  189. package/dist/esm/QuantityInput.js +33 -0
  190. package/dist/esm/QuantityInput.js.map +1 -0
  191. package/dist/{types → esm}/QuestionnaireBuilder.d.ts +0 -0
  192. package/dist/esm/QuestionnaireBuilder.js +217 -0
  193. package/dist/esm/QuestionnaireBuilder.js.map +1 -0
  194. package/dist/{types → esm}/QuestionnaireForm.d.ts +0 -0
  195. package/dist/esm/QuestionnaireForm.js +215 -0
  196. package/dist/esm/QuestionnaireForm.js.map +1 -0
  197. package/dist/{types → esm}/QuestionnaireUtils.d.ts +0 -0
  198. package/dist/esm/QuestionnaireUtils.js +103 -0
  199. package/dist/esm/QuestionnaireUtils.js.map +1 -0
  200. package/dist/{types → esm}/RangeDisplay.d.ts +0 -0
  201. package/dist/esm/RangeDisplay.js +21 -0
  202. package/dist/esm/RangeDisplay.js.map +1 -0
  203. package/dist/{types → esm}/RangeInput.d.ts +0 -0
  204. package/dist/esm/RangeInput.js +25 -0
  205. package/dist/esm/RangeInput.js.map +1 -0
  206. package/dist/{types → esm}/RatioDisplay.d.ts +0 -0
  207. package/dist/esm/RatioDisplay.js +16 -0
  208. package/dist/esm/RatioDisplay.js.map +1 -0
  209. package/dist/{types → esm}/RatioInput.d.ts +0 -0
  210. package/dist/esm/RatioInput.js +25 -0
  211. package/dist/esm/RatioInput.js.map +1 -0
  212. package/dist/{types → esm}/ReferenceDisplay.d.ts +0 -0
  213. package/dist/esm/ReferenceDisplay.js +21 -0
  214. package/dist/esm/ReferenceDisplay.js.map +1 -0
  215. package/dist/{types → esm}/ReferenceInput.d.ts +0 -0
  216. package/dist/esm/ReferenceInput.js +42 -0
  217. package/dist/esm/ReferenceInput.js.map +1 -0
  218. package/dist/{types → esm}/RegisterForm.d.ts +1 -0
  219. package/dist/esm/RegisterForm.js +121 -0
  220. package/dist/esm/RegisterForm.js.map +1 -0
  221. package/dist/{types → esm}/RequestGroupDisplay.d.ts +0 -0
  222. package/dist/esm/RequestGroupDisplay.js +73 -0
  223. package/dist/esm/RequestGroupDisplay.js.map +1 -0
  224. package/dist/{types → esm}/ResourceArrayDisplay.d.ts +0 -0
  225. package/dist/esm/ResourceArrayDisplay.js +14 -0
  226. package/dist/esm/ResourceArrayDisplay.js.map +1 -0
  227. package/dist/{types → esm}/ResourceArrayInput.d.ts +0 -0
  228. package/dist/esm/ResourceArrayInput.js +48 -0
  229. package/dist/esm/ResourceArrayInput.js.map +1 -0
  230. package/dist/{types → esm}/ResourceBadge.d.ts +0 -0
  231. package/dist/esm/ResourceBadge.js +13 -0
  232. package/dist/esm/ResourceBadge.js.map +1 -0
  233. package/dist/{types → esm}/ResourceBlame.d.ts +0 -0
  234. package/dist/esm/ResourceBlame.js +65 -0
  235. package/dist/esm/ResourceBlame.js.map +1 -0
  236. package/dist/{types → esm}/ResourceDiff.d.ts +0 -0
  237. package/dist/esm/ResourceDiff.js +28 -0
  238. package/dist/esm/ResourceDiff.js.map +1 -0
  239. package/dist/{types → esm}/ResourceDiffTable.d.ts +0 -0
  240. package/dist/esm/ResourceDiffTable.js +58 -0
  241. package/dist/esm/ResourceDiffTable.js.map +1 -0
  242. package/dist/{types → esm}/ResourceForm.d.ts +0 -0
  243. package/dist/esm/ResourceForm.js +55 -0
  244. package/dist/esm/ResourceForm.js.map +1 -0
  245. package/dist/{types → esm}/ResourceHistoryTable.d.ts +0 -0
  246. package/dist/esm/ResourceHistoryTable.js +46 -0
  247. package/dist/esm/ResourceHistoryTable.js.map +1 -0
  248. package/dist/{types → esm}/ResourceInput.d.ts +0 -0
  249. package/dist/esm/ResourceInput.js +40 -0
  250. package/dist/esm/ResourceInput.js.map +1 -0
  251. package/dist/{types → esm}/ResourceName.d.ts +0 -0
  252. package/dist/esm/ResourceName.js +16 -0
  253. package/dist/esm/ResourceName.js.map +1 -0
  254. package/dist/{types → esm}/ResourcePropertyDisplay.d.ts +0 -0
  255. package/dist/esm/ResourcePropertyDisplay.js +107 -0
  256. package/dist/esm/ResourcePropertyDisplay.js.map +1 -0
  257. package/dist/{types → esm}/ResourcePropertyInput.d.ts +0 -0
  258. package/dist/esm/ResourcePropertyInput.js +151 -0
  259. package/dist/esm/ResourcePropertyInput.js.map +1 -0
  260. package/dist/{types → esm}/ResourceTable.d.ts +0 -0
  261. package/dist/esm/ResourceTable.js +22 -0
  262. package/dist/esm/ResourceTable.js.map +1 -0
  263. package/dist/{types → esm}/ResourceTimeline.d.ts +0 -0
  264. package/dist/esm/ResourceTimeline.js +221 -0
  265. package/dist/esm/ResourceTimeline.js.map +1 -0
  266. package/dist/{types → esm}/Scheduler.d.ts +0 -0
  267. package/dist/esm/Scheduler.js +82 -0
  268. package/dist/esm/Scheduler.js.map +1 -0
  269. package/dist/{types → esm}/Scrollable.d.ts +0 -0
  270. package/dist/esm/Scrollable.js +12 -0
  271. package/dist/esm/Scrollable.js.map +1 -0
  272. package/dist/{types → esm}/SearchControl.d.ts +0 -0
  273. package/dist/esm/SearchControl.js +268 -0
  274. package/dist/esm/SearchControl.js.map +1 -0
  275. package/dist/{types → esm}/SearchControlField.d.ts +0 -0
  276. package/dist/esm/SearchControlField.js +98 -0
  277. package/dist/esm/SearchControlField.js.map +1 -0
  278. package/dist/{types → esm}/SearchFieldEditor.d.ts +0 -0
  279. package/dist/esm/SearchFieldEditor.js +192 -0
  280. package/dist/esm/SearchFieldEditor.js.map +1 -0
  281. package/dist/{types → esm}/SearchFilterEditor.d.ts +0 -0
  282. package/dist/esm/SearchFilterEditor.js +103 -0
  283. package/dist/esm/SearchFilterEditor.js.map +1 -0
  284. package/dist/{types → esm}/SearchFilterValueDialog.d.ts +0 -0
  285. package/dist/esm/SearchFilterValueDialog.js +22 -0
  286. package/dist/esm/SearchFilterValueDialog.js.map +1 -0
  287. package/dist/{types → esm}/SearchFilterValueDisplay.d.ts +0 -0
  288. package/dist/esm/SearchFilterValueDisplay.js +22 -0
  289. package/dist/esm/SearchFilterValueDisplay.js.map +1 -0
  290. package/dist/{types → esm}/SearchFilterValueInput.d.ts +0 -0
  291. package/dist/esm/SearchFilterValueInput.js +59 -0
  292. package/dist/esm/SearchFilterValueInput.js.map +1 -0
  293. package/dist/{types → esm}/SearchPopupMenu.d.ts +0 -0
  294. package/dist/esm/SearchPopupMenu.js +135 -0
  295. package/dist/esm/SearchPopupMenu.js.map +1 -0
  296. package/dist/{types → esm}/SearchUtils.d.ts +0 -0
  297. package/dist/esm/SearchUtils.js +488 -0
  298. package/dist/esm/SearchUtils.js.map +1 -0
  299. package/dist/{types → esm}/Select.d.ts +0 -0
  300. package/dist/esm/Select.js +16 -0
  301. package/dist/esm/Select.js.map +1 -0
  302. package/dist/{types → esm}/ServiceRequestTimeline.d.ts +0 -0
  303. package/dist/esm/ServiceRequestTimeline.js +53 -0
  304. package/dist/esm/ServiceRequestTimeline.js.map +1 -0
  305. package/dist/{types → esm}/SignInForm.d.ts +0 -0
  306. package/dist/esm/SignInForm.js +130 -0
  307. package/dist/esm/SignInForm.js.map +1 -0
  308. package/dist/{types → esm}/StatusBadge.d.ts +0 -0
  309. package/dist/esm/StatusBadge.js +8 -0
  310. package/dist/esm/StatusBadge.js.map +1 -0
  311. package/dist/{types → esm}/SubMenu.d.ts +0 -0
  312. package/dist/esm/SubMenu.js +38 -0
  313. package/dist/esm/SubMenu.js.map +1 -0
  314. package/dist/{types → esm}/Tab.d.ts +0 -0
  315. package/dist/esm/Tab.js +19 -0
  316. package/dist/esm/Tab.js.map +1 -0
  317. package/dist/{types → esm}/TabList.d.ts +0 -0
  318. package/dist/esm/TabList.js +23 -0
  319. package/dist/esm/TabList.js.map +1 -0
  320. package/dist/{types → esm}/TabPanel.d.ts +0 -0
  321. package/dist/esm/TabPanel.js +8 -0
  322. package/dist/esm/TabPanel.js.map +1 -0
  323. package/dist/{types → esm}/TabSwitch.d.ts +0 -0
  324. package/dist/esm/TabSwitch.js +16 -0
  325. package/dist/esm/TabSwitch.js.map +1 -0
  326. package/dist/{types → esm}/TextArea.d.ts +0 -0
  327. package/dist/esm/TextArea.js +16 -0
  328. package/dist/esm/TextArea.js.map +1 -0
  329. package/dist/{types → esm}/Timeline.d.ts +0 -0
  330. package/dist/esm/Timeline.js +50 -0
  331. package/dist/esm/Timeline.js.map +1 -0
  332. package/dist/{types → esm}/TitleBar.d.ts +0 -0
  333. package/dist/esm/TitleBar.js +8 -0
  334. package/dist/esm/TitleBar.js.map +1 -0
  335. package/dist/{types → esm}/UploadButton.d.ts +0 -0
  336. package/dist/esm/UploadButton.js +55 -0
  337. package/dist/esm/UploadButton.js.map +1 -0
  338. package/dist/{types → esm}/constants.d.ts +0 -0
  339. package/dist/esm/constants.js +12 -0
  340. package/dist/esm/constants.js.map +1 -0
  341. package/dist/{types → esm}/index.d.ts +1 -0
  342. package/dist/esm/index.js +87 -5811
  343. package/dist/esm/index.js.map +1 -1
  344. package/dist/esm/index.min.js +1 -1
  345. package/dist/esm/index.min.js.map +1 -1
  346. package/dist/esm/node_modules/tslib/tslib.es6.js +27 -0
  347. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  348. package/dist/{types → esm}/stories/AddressInput.stories.d.ts +0 -0
  349. package/dist/{types → esm}/stories/AttachmentArrayInput.stories.d.ts +0 -0
  350. package/dist/{types → esm}/stories/AttachmentInput.stories.d.ts +0 -0
  351. package/dist/{types → esm}/stories/Autocomplete.stories.d.ts +0 -0
  352. package/dist/{types → esm}/stories/Avatar.stories.d.ts +0 -0
  353. package/dist/{types → esm}/stories/Button.stories.d.ts +0 -0
  354. package/dist/{types → esm}/stories/DiagnosticReportDisplay.stories.d.ts +0 -0
  355. package/dist/{types → esm}/stories/Dialog.stories.d.ts +0 -0
  356. package/dist/{types → esm}/stories/EncounterTimeline.stories.d.ts +0 -0
  357. package/dist/{types → esm}/stories/FhirPathDisplay.stories.d.ts +0 -0
  358. package/dist/{types → esm}/stories/FormSection.stories.d.ts +0 -0
  359. package/dist/{types → esm}/stories/Header.stories.d.ts +0 -0
  360. package/dist/{types → esm}/stories/Input.stories.d.ts +0 -0
  361. package/dist/{types → esm}/stories/Loading.stories.d.ts +0 -0
  362. package/dist/{types → esm}/stories/Logo.stories.d.ts +0 -0
  363. package/dist/{types → esm}/stories/PatientTimeline.stories.d.ts +0 -0
  364. package/dist/{types → esm}/stories/PlanDefinitionBuilder.stories.d.ts +0 -0
  365. package/dist/{types → esm}/stories/QuestionnaireBuilder.stories.d.ts +0 -0
  366. package/dist/{types → esm}/stories/QuestionnaireForm.stories.d.ts +0 -0
  367. package/dist/{types → esm}/stories/ReferenceInput.stories.d.ts +0 -0
  368. package/dist/{types → esm}/stories/RegisterForm.stories.d.ts +0 -0
  369. package/dist/{types → esm}/stories/RequestGroupDisplay.stories.d.ts +0 -0
  370. package/dist/{types → esm}/stories/ResourceBlame.stories.d.ts +0 -0
  371. package/dist/{types → esm}/stories/ResourceForm.stories.d.ts +0 -0
  372. package/dist/{types → esm}/stories/ResourceHistoryTable.stories.d.ts +0 -0
  373. package/dist/{types → esm}/stories/ResourceTable.stories.d.ts +0 -0
  374. package/dist/{types → esm}/stories/Scheduler.stories.d.ts +0 -0
  375. package/dist/{types → esm}/stories/SearchControl.stories.d.ts +0 -0
  376. package/dist/{types → esm}/stories/Select.stories.d.ts +0 -0
  377. package/dist/{types → esm}/stories/SignInForm.stories.d.ts +0 -0
  378. package/dist/{types → esm}/stories/StatusBadge.stories.d.ts +0 -0
  379. package/dist/{types → esm}/stories/Tabs.stories.d.ts +0 -0
  380. package/dist/{types → esm}/stories/Timeline.stories.d.ts +0 -0
  381. package/dist/{types → esm}/stories/UploadButton.stories.d.ts +0 -0
  382. package/dist/{types → esm}/test.setup.d.ts +0 -0
  383. package/dist/{types → esm}/useResource.d.ts +0 -0
  384. package/dist/esm/useResource.js +65 -0
  385. package/dist/esm/useResource.js.map +1 -0
  386. package/dist/{types → esm}/utils/blame.d.ts +0 -0
  387. package/dist/esm/utils/blame.js +74 -0
  388. package/dist/esm/utils/blame.js.map +1 -0
  389. package/dist/{types → esm}/utils/date.d.ts +0 -0
  390. package/dist/esm/utils/date.js +48 -0
  391. package/dist/esm/utils/date.js.map +1 -0
  392. package/dist/{types → esm}/utils/diff.d.ts +0 -0
  393. package/dist/esm/utils/diff.js +118 -0
  394. package/dist/esm/utils/diff.js.map +1 -0
  395. package/dist/{types → esm}/utils/dom.d.ts +0 -0
  396. package/dist/esm/utils/dom.js +34 -0
  397. package/dist/esm/utils/dom.js.map +1 -0
  398. package/dist/{types → esm}/utils/outcomes.d.ts +0 -0
  399. package/dist/esm/utils/outcomes.js +7 -0
  400. package/dist/esm/utils/outcomes.js.map +1 -0
  401. package/dist/esm/utils/recaptcha.d.ts +12 -0
  402. package/dist/esm/utils/recaptcha.js +27 -0
  403. package/dist/esm/utils/recaptcha.js.map +1 -0
  404. package/dist/{types → esm}/utils.d.ts +0 -0
  405. package/dist/esm/utils.js +15 -0
  406. package/dist/esm/utils.js.map +1 -0
  407. package/package.json +11 -11
  408. package/dist/types/utils/recaptcha.d.ts +0 -10
@@ -0,0 +1,217 @@
1
+ import { globalSchema } from '@medplum/core';
2
+ import React, { useState, useEffect, useRef } from 'react';
3
+ import { Button } from './Button.js';
4
+ import { Form } from './Form.js';
5
+ import { Input } from './Input.js';
6
+ import { useMedplum } from './MedplumProvider.js';
7
+ import { QuestionnaireFormItem } from './QuestionnaireForm.js';
8
+ import { QuestionnaireItemType, isChoiceQuestion } from './QuestionnaireUtils.js';
9
+ import { getValueAndType } from './ResourcePropertyDisplay.js';
10
+ import { ResourcePropertyInput } from './ResourcePropertyInput.js';
11
+ import { Select } from './Select.js';
12
+ import { TextArea } from './TextArea.js';
13
+ import { useResource } from './useResource.js';
14
+ import { killEvent } from './utils/dom.js';
15
+
16
+ function QuestionnaireBuilder(props) {
17
+ const medplum = useMedplum();
18
+ const defaultValue = useResource(props.questionnaire);
19
+ const [schema, setSchema] = useState();
20
+ const [value, setValue] = useState();
21
+ const [selectedKey, setSelectedKey] = useState();
22
+ const [hoverKey, setHoverKey] = useState();
23
+ function handleDocumentMouseOver() {
24
+ setHoverKey(undefined);
25
+ }
26
+ function handleDocumentClick() {
27
+ setSelectedKey(undefined);
28
+ }
29
+ useEffect(() => {
30
+ medplum.requestSchema('Questionnaire').then(setSchema);
31
+ }, [medplum]);
32
+ useEffect(() => {
33
+ setValue(ensureQuestionnaireKeys(defaultValue !== null && defaultValue !== void 0 ? defaultValue : { resourceType: 'Questionnaire' }));
34
+ document.addEventListener('mouseover', handleDocumentMouseOver);
35
+ document.addEventListener('click', handleDocumentClick);
36
+ return () => {
37
+ document.removeEventListener('mouseover', handleDocumentMouseOver);
38
+ document.removeEventListener('click', handleDocumentClick);
39
+ };
40
+ }, [defaultValue]);
41
+ if (!schema || !value) {
42
+ return null;
43
+ }
44
+ return (React.createElement("div", { className: "medplum-questionnaire-builder" },
45
+ React.createElement(Form, { testid: "questionnaire-form", onSubmit: () => props.onSubmit(value) },
46
+ React.createElement(ItemBuilder, { item: value, selectedKey: selectedKey, setSelectedKey: setSelectedKey, hoverKey: hoverKey, setHoverKey: setHoverKey, onChange: setValue }),
47
+ React.createElement(Button, { type: "submit", size: "large" }, "Save"))));
48
+ }
49
+ function ItemBuilder(props) {
50
+ var _a;
51
+ const resource = props.item;
52
+ const item = props.item;
53
+ const isResource = 'resourceType' in props.item;
54
+ const isContainer = isResource || item.type === QuestionnaireItemType.group;
55
+ const linkId = (_a = item.linkId) !== null && _a !== void 0 ? _a : '[untitled]';
56
+ const editing = props.selectedKey === props.item.id;
57
+ const hovering = props.hoverKey === props.item.id;
58
+ const itemRef = useRef();
59
+ itemRef.current = props.item;
60
+ function onClick(e) {
61
+ killEvent(e);
62
+ props.setSelectedKey(props.item.id);
63
+ }
64
+ function onHover(e) {
65
+ killEvent(e);
66
+ props.setHoverKey(props.item.id);
67
+ }
68
+ function changeItem(changedItem) {
69
+ var _a;
70
+ const curr = itemRef.current;
71
+ props.onChange(Object.assign(Object.assign({}, curr), { item: (_a = curr.item) === null || _a === void 0 ? void 0 : _a.map((i) => (i.id === changedItem.id ? changedItem : i)) }));
72
+ }
73
+ function addItem(addedItem) {
74
+ var _a, _b;
75
+ props.onChange(Object.assign(Object.assign({}, props.item), { item: [...((_b = (_a = props.item) === null || _a === void 0 ? void 0 : _a.item) !== null && _b !== void 0 ? _b : []), addedItem] }));
76
+ }
77
+ function removeItem(removedItem) {
78
+ var _a, _b;
79
+ props.onChange(Object.assign(Object.assign({}, props.item), { item: (_b = (_a = props.item) === null || _a === void 0 ? void 0 : _a.item) === null || _b === void 0 ? void 0 : _b.filter((i) => i !== removedItem) }));
80
+ }
81
+ function changeProperty(property, value) {
82
+ props.onChange(Object.assign(Object.assign({}, itemRef.current), { [property]: value }));
83
+ }
84
+ const className = editing ? 'section editing' : hovering ? 'section hovering' : 'section';
85
+ return (React.createElement("div", { "data-testid": item.linkId, className: className, onClick: onClick, onMouseOver: onHover },
86
+ editing ? (React.createElement(React.Fragment, null,
87
+ isResource && (React.createElement("div", null,
88
+ React.createElement(Input, { defaultValue: resource.title, onChange: (newValue) => changeProperty('title', newValue) }))),
89
+ !isContainer && (React.createElement("div", null,
90
+ React.createElement(Select, { defaultValue: item.type, onChange: (newValue) => changeProperty('type', newValue) },
91
+ React.createElement("option", { value: "display" }, "Display"),
92
+ React.createElement("optgroup", { label: "Question" },
93
+ React.createElement("option", { value: "boolean" }, "Boolean"),
94
+ React.createElement("option", { value: "decimal" }, "Decimal"),
95
+ React.createElement("option", { value: "integer" }, "Integer"),
96
+ React.createElement("option", { value: "date" }, "Date"),
97
+ React.createElement("option", { value: "dateTime" }, "Date/Time"),
98
+ React.createElement("option", { value: "time" }, "Time"),
99
+ React.createElement("option", { value: "string" }, "String"),
100
+ React.createElement("option", { value: "text" }, "Text"),
101
+ React.createElement("option", { value: "url" }, "URL"),
102
+ React.createElement("option", { value: "choice" }, "Choice"),
103
+ React.createElement("option", { value: "open-choice" }, "Open Choice"),
104
+ React.createElement("option", { value: "attachment" }, "Attachment"),
105
+ React.createElement("option", { value: "reference" }, "Reference"),
106
+ React.createElement("option", { value: "quantity" }, "Quantity"))))),
107
+ !isResource && (React.createElement(TextArea, { style: { width: '95%', height: '100px', minHeight: '100px', margin: '8px 4px 4px 4px' }, defaultValue: item.text, onChange: (newValue) => changeProperty('text', newValue) })),
108
+ isChoiceQuestion(item) && (React.createElement(AnswerBuilder, { options: item.answerOption, onChange: (newOptions) => changeProperty('answerOption', newOptions) })))) : (React.createElement(React.Fragment, null,
109
+ resource.title && React.createElement("h1", null, resource.title),
110
+ item.text && React.createElement("p", null, item.text),
111
+ !isContainer && React.createElement(QuestionnaireFormItem, { item: item, onChange: () => undefined }))),
112
+ item.item &&
113
+ item.item.map((i) => (React.createElement("div", { key: i.id },
114
+ React.createElement(ItemBuilder, { item: i, selectedKey: props.selectedKey, setSelectedKey: props.setSelectedKey, hoverKey: props.hoverKey, setHoverKey: props.setHoverKey, onChange: changeItem, onRemove: () => removeItem(i) })))),
115
+ !isContainer && (React.createElement("div", { className: "top-actions" }, editing ? (React.createElement(Input, { defaultValue: item.linkId, onChange: (newValue) => changeProperty('linkId', newValue), size: 4 })) : (React.createElement("div", null, linkId)))),
116
+ React.createElement("div", { className: "bottom-actions" },
117
+ isContainer && (React.createElement(React.Fragment, null,
118
+ React.createElement("a", { href: "#", onClick: (e) => {
119
+ e.preventDefault();
120
+ addItem({
121
+ id: generateId(),
122
+ linkId: generateLinkId('q'),
123
+ type: 'string',
124
+ text: 'Question',
125
+ });
126
+ } }, "Add item"),
127
+ React.createElement("a", { href: "#", onClick: (e) => {
128
+ e.preventDefault();
129
+ addItem({
130
+ id: generateId(),
131
+ linkId: generateLinkId('g'),
132
+ type: 'group',
133
+ text: 'Group',
134
+ });
135
+ } }, "Add group"))),
136
+ !isResource && (React.createElement("a", { href: "#", onClick: (e) => {
137
+ e.preventDefault();
138
+ if (props.onRemove) {
139
+ props.onRemove();
140
+ }
141
+ } }, "Remove")))));
142
+ }
143
+ function AnswerBuilder(props) {
144
+ var _a;
145
+ const property = globalSchema.types['QuestionnaireItemAnswerOption'].properties['value[x]'];
146
+ const options = (_a = props.options) !== null && _a !== void 0 ? _a : [];
147
+ return (React.createElement("div", null,
148
+ options.map((option) => {
149
+ const [propertyValue, propertyType] = getValueAndType({ type: 'QuestionnaireItemAnswerOption', value: option }, 'value');
150
+ return (React.createElement("div", { key: option.id, style: {
151
+ display: 'flex',
152
+ flexDirection: 'row',
153
+ justifyContent: 'space-between',
154
+ alignItems: 'center',
155
+ width: '80%',
156
+ } },
157
+ React.createElement("div", null,
158
+ React.createElement(ResourcePropertyInput, { key: option.id, name: "value[x]", property: property, defaultPropertyType: propertyType, defaultValue: propertyValue, onChange: (newValue, propName) => {
159
+ const newOptions = [...options];
160
+ const index = newOptions.findIndex((o) => o.id === option.id);
161
+ newOptions[index] = { id: option.id, [propName]: newValue };
162
+ props.onChange(newOptions);
163
+ } })),
164
+ React.createElement("div", null,
165
+ React.createElement("a", { href: "#", onClick: (e) => {
166
+ killEvent(e);
167
+ props.onChange(options.filter((o) => o.id !== option.id));
168
+ } }, "Remove"))));
169
+ }),
170
+ React.createElement("a", { href: "#", onClick: (e) => {
171
+ killEvent(e);
172
+ props.onChange([
173
+ ...options,
174
+ {
175
+ id: generateId(),
176
+ },
177
+ ]);
178
+ } }, "Add choice")));
179
+ }
180
+ let nextLinkId = 1;
181
+ let nextId = 1;
182
+ /**
183
+ * Generates a link ID for an item.
184
+ * Link IDs are required properties on QuestionnaireItem objects.
185
+ * @return A unique link ID.
186
+ */
187
+ function generateLinkId(prefix) {
188
+ return prefix + nextLinkId++;
189
+ }
190
+ /**
191
+ * Generates a unique ID.
192
+ * React needs unique IDs for components for rendering performance.
193
+ * All of the important components in the questionnaire builder have id properties for this:
194
+ * Questionnaire, QuestionnaireItem, and QuestionnaireItemAnswerOption.
195
+ * @return A unique key.
196
+ */
197
+ function generateId() {
198
+ return 'id-' + nextId++;
199
+ }
200
+ function ensureQuestionnaireKeys(questionnaire) {
201
+ return Object.assign(Object.assign({}, questionnaire), { id: questionnaire.id || generateId(), item: ensureQuestionnaireItemKeys(questionnaire.item) });
202
+ }
203
+ function ensureQuestionnaireItemKeys(items) {
204
+ if (!items) {
205
+ return undefined;
206
+ }
207
+ return items.map((item) => (Object.assign(Object.assign({}, item), { id: item.id || generateId(), item: ensureQuestionnaireItemKeys(item.item), answerOption: ensureQuestionnaireOptionKeys(item.answerOption) })));
208
+ }
209
+ function ensureQuestionnaireOptionKeys(options) {
210
+ if (!options) {
211
+ return undefined;
212
+ }
213
+ return options.map((option) => (Object.assign(Object.assign({}, option), { id: option.id || generateId() })));
214
+ }
215
+
216
+ export { QuestionnaireBuilder };
217
+ //# sourceMappingURL=QuestionnaireBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuestionnaireBuilder.js","sources":["../../src/QuestionnaireBuilder.tsx"],"sourcesContent":["import { globalSchema, IndexedStructureDefinition } from '@medplum/core';\nimport { Questionnaire, QuestionnaireItem, QuestionnaireItemAnswerOption, Reference } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Button } from './Button';\nimport { Form } from './Form';\nimport { Input } from './Input';\nimport { useMedplum } from './MedplumProvider';\nimport { QuestionnaireFormItem } from './QuestionnaireForm';\nimport { isChoiceQuestion, QuestionnaireItemType } from './QuestionnaireUtils';\nimport { getValueAndType } from './ResourcePropertyDisplay';\nimport { ResourcePropertyInput } from './ResourcePropertyInput';\nimport { Select } from './Select';\nimport { TextArea } from './TextArea';\nimport { useResource } from './useResource';\nimport { killEvent } from './utils/dom';\nimport './QuestionnaireBuilder.css';\n\nexport interface QuestionnaireBuilderProps {\n questionnaire: Questionnaire | Reference<Questionnaire>;\n onSubmit: (result: Questionnaire) => void;\n}\n\nexport function QuestionnaireBuilder(props: QuestionnaireBuilderProps): JSX.Element | null {\n const medplum = useMedplum();\n const defaultValue = useResource(props.questionnaire);\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>();\n const [value, setValue] = useState<Questionnaire>();\n const [selectedKey, setSelectedKey] = useState<string>();\n const [hoverKey, setHoverKey] = useState<string>();\n\n function handleDocumentMouseOver(): void {\n setHoverKey(undefined);\n }\n\n function handleDocumentClick(): void {\n setSelectedKey(undefined);\n }\n\n useEffect(() => {\n medplum.requestSchema('Questionnaire').then(setSchema);\n }, [medplum]);\n\n useEffect(() => {\n setValue(ensureQuestionnaireKeys(defaultValue ?? { resourceType: 'Questionnaire' }));\n document.addEventListener('mouseover', handleDocumentMouseOver);\n document.addEventListener('click', handleDocumentClick);\n return () => {\n document.removeEventListener('mouseover', handleDocumentMouseOver);\n document.removeEventListener('click', handleDocumentClick);\n };\n }, [defaultValue]);\n\n if (!schema || !value) {\n return null;\n }\n\n return (\n <div className=\"medplum-questionnaire-builder\">\n <Form testid=\"questionnaire-form\" onSubmit={() => props.onSubmit(value)}>\n <ItemBuilder\n item={value}\n selectedKey={selectedKey}\n setSelectedKey={setSelectedKey}\n hoverKey={hoverKey}\n setHoverKey={setHoverKey}\n onChange={setValue}\n />\n <Button type=\"submit\" size=\"large\">\n Save\n </Button>\n </Form>\n </div>\n );\n}\n\ninterface ItemBuilderProps<T extends Questionnaire | QuestionnaireItem> {\n item: T;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (item: T) => void;\n onRemove?: () => void;\n}\n\nfunction ItemBuilder<T extends Questionnaire | QuestionnaireItem>(props: ItemBuilderProps<T>): JSX.Element {\n const resource = props.item as Questionnaire;\n const item = props.item as QuestionnaireItem;\n const isResource = 'resourceType' in props.item;\n const isContainer = isResource || item.type === QuestionnaireItemType.group;\n const linkId = item.linkId ?? '[untitled]';\n const editing = props.selectedKey === props.item.id;\n const hovering = props.hoverKey === props.item.id;\n\n const itemRef = useRef<T>();\n itemRef.current = props.item;\n\n function onClick(e: React.SyntheticEvent): void {\n killEvent(e);\n props.setSelectedKey(props.item.id);\n }\n\n function onHover(e: React.SyntheticEvent): void {\n killEvent(e);\n props.setHoverKey(props.item.id);\n }\n\n function changeItem(changedItem: QuestionnaireItem): void {\n const curr = itemRef.current as T;\n props.onChange({\n ...curr,\n item: curr.item?.map((i) => (i.id === changedItem.id ? changedItem : i)),\n } as T);\n }\n\n function addItem(addedItem: QuestionnaireItem): void {\n props.onChange({\n ...props.item,\n item: [...(props.item?.item ?? []), addedItem],\n });\n }\n\n function removeItem(removedItem: QuestionnaireItem): void {\n props.onChange({\n ...props.item,\n item: props.item?.item?.filter((i) => i !== removedItem),\n });\n }\n\n function changeProperty(property: string, value: any): void {\n props.onChange({\n ...itemRef.current,\n [property]: value,\n } as T);\n }\n\n const className = editing ? 'section editing' : hovering ? 'section hovering' : 'section';\n return (\n <div data-testid={item.linkId} className={className} onClick={onClick} onMouseOver={onHover}>\n {editing ? (\n <>\n {isResource && (\n <div>\n <Input defaultValue={resource.title} onChange={(newValue) => changeProperty('title', newValue)} />\n </div>\n )}\n {!isContainer && (\n <div>\n <Select defaultValue={item.type} onChange={(newValue) => changeProperty('type', newValue)}>\n <option value=\"display\">Display</option>\n <optgroup label=\"Question\">\n <option value=\"boolean\">Boolean</option>\n <option value=\"decimal\">Decimal</option>\n <option value=\"integer\">Integer</option>\n <option value=\"date\">Date</option>\n <option value=\"dateTime\">Date/Time</option>\n <option value=\"time\">Time</option>\n <option value=\"string\">String</option>\n <option value=\"text\">Text</option>\n <option value=\"url\">URL</option>\n <option value=\"choice\">Choice</option>\n <option value=\"open-choice\">Open Choice</option>\n <option value=\"attachment\">Attachment</option>\n <option value=\"reference\">Reference</option>\n <option value=\"quantity\">Quantity</option>\n </optgroup>\n </Select>\n </div>\n )}\n {!isResource && (\n <TextArea\n style={{ width: '95%', height: '100px', minHeight: '100px', margin: '8px 4px 4px 4px' }}\n defaultValue={item.text}\n onChange={(newValue) => changeProperty('text', newValue)}\n />\n )}\n {isChoiceQuestion(item) && (\n <AnswerBuilder\n options={item.answerOption}\n onChange={(newOptions) => changeProperty('answerOption', newOptions)}\n />\n )}\n </>\n ) : (\n <>\n {resource.title && <h1>{resource.title}</h1>}\n {item.text && <p>{item.text}</p>}\n {!isContainer && <QuestionnaireFormItem item={item} onChange={() => undefined} />}\n </>\n )}\n {item.item &&\n item.item.map((i) => (\n <div key={i.id}>\n <ItemBuilder\n item={i}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={changeItem}\n onRemove={() => removeItem(i)}\n />\n </div>\n ))}\n {!isContainer && (\n <div className=\"top-actions\">\n {editing ? (\n <Input defaultValue={item.linkId} onChange={(newValue) => changeProperty('linkId', newValue)} size={4} />\n ) : (\n <div>{linkId}</div>\n )}\n </div>\n )}\n <div className=\"bottom-actions\">\n {isContainer && (\n <>\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n addItem({\n id: generateId(),\n linkId: generateLinkId('q'),\n type: 'string',\n text: 'Question',\n } as QuestionnaireItem);\n }}\n >\n Add item\n </a>\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n addItem({\n id: generateId(),\n linkId: generateLinkId('g'),\n type: 'group',\n text: 'Group',\n } as QuestionnaireItem);\n }}\n >\n Add group\n </a>\n </>\n )}\n {!isResource && (\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (props.onRemove) {\n props.onRemove();\n }\n }}\n >\n Remove\n </a>\n )}\n </div>\n </div>\n );\n}\n\ninterface AnswerBuilderProps {\n options?: QuestionnaireItemAnswerOption[];\n onChange: (newOptions: QuestionnaireItemAnswerOption[]) => void;\n}\n\nfunction AnswerBuilder(props: AnswerBuilderProps): JSX.Element {\n const property = globalSchema.types['QuestionnaireItemAnswerOption'].properties['value[x]'];\n const options = props.options ?? [];\n return (\n <div>\n {options.map((option: QuestionnaireItemAnswerOption) => {\n const [propertyValue, propertyType] = getValueAndType(\n { type: 'QuestionnaireItemAnswerOption', value: option },\n 'value'\n );\n return (\n <div\n key={option.id}\n style={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '80%',\n }}\n >\n <div>\n <ResourcePropertyInput\n key={option.id}\n name=\"value[x]\"\n property={property}\n defaultPropertyType={propertyType}\n defaultValue={propertyValue}\n onChange={(newValue: any, propName?: string) => {\n const newOptions = [...options];\n const index = newOptions.findIndex((o) => o.id === option.id);\n newOptions[index] = { id: option.id, [propName as string]: newValue };\n props.onChange(newOptions);\n }}\n />\n </div>\n <div>\n <a\n href=\"#\"\n onClick={(e: React.SyntheticEvent) => {\n killEvent(e);\n props.onChange(options.filter((o) => o.id !== option.id));\n }}\n >\n Remove\n </a>\n </div>\n </div>\n );\n })}\n <a\n href=\"#\"\n onClick={(e: React.SyntheticEvent) => {\n killEvent(e);\n props.onChange([\n ...options,\n {\n id: generateId(),\n },\n ]);\n }}\n >\n Add choice\n </a>\n </div>\n );\n}\n\nlet nextLinkId = 1;\nlet nextId = 1;\n\n/**\n * Generates a link ID for an item.\n * Link IDs are required properties on QuestionnaireItem objects.\n * @return A unique link ID.\n */\nfunction generateLinkId(prefix: string): string {\n return prefix + nextLinkId++;\n}\n\n/**\n * Generates a unique ID.\n * React needs unique IDs for components for rendering performance.\n * All of the important components in the questionnaire builder have id properties for this:\n * Questionnaire, QuestionnaireItem, and QuestionnaireItemAnswerOption.\n * @return A unique key.\n */\nfunction generateId(): string {\n return 'id-' + nextId++;\n}\n\nfunction ensureQuestionnaireKeys(questionnaire: Questionnaire): Questionnaire {\n return {\n ...questionnaire,\n id: questionnaire.id || generateId(),\n item: ensureQuestionnaireItemKeys(questionnaire.item),\n } as Questionnaire;\n}\n\nfunction ensureQuestionnaireItemKeys(items: QuestionnaireItem[] | undefined): QuestionnaireItem[] | undefined {\n if (!items) {\n return undefined;\n }\n return items.map((item) => ({\n ...item,\n id: item.id || generateId(),\n item: ensureQuestionnaireItemKeys(item.item),\n answerOption: ensureQuestionnaireOptionKeys(item.answerOption),\n }));\n}\n\nfunction ensureQuestionnaireOptionKeys(\n options: QuestionnaireItemAnswerOption[] | undefined\n): QuestionnaireItemAnswerOption[] | undefined {\n if (!options) {\n return undefined;\n }\n return options.map((option) => ({\n ...option,\n id: option.id || generateId(),\n }));\n}\n"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,215 @@
1
+ import { getReferenceString, createReference, globalSchema, getTypedPropertyValue, capitalize, stringify } from '@medplum/core';
2
+ import React, { useState, useEffect } from 'react';
3
+ import { AttachmentInput } from './AttachmentInput.js';
4
+ import { Button } from './Button.js';
5
+ import { Checkbox } from './Checkbox.js';
6
+ import { CheckboxFormSection } from './CheckboxFormSection.js';
7
+ import { DateTimeInput } from './DateTimeInput.js';
8
+ import { Form } from './Form.js';
9
+ import { FormSection } from './FormSection.js';
10
+ import { Input } from './Input.js';
11
+ import { useMedplum } from './MedplumProvider.js';
12
+ import { QuantityInput } from './QuantityInput.js';
13
+ import { QuestionnaireItemType } from './QuestionnaireUtils.js';
14
+ import { ReferenceInput } from './ReferenceInput.js';
15
+ import { ResourcePropertyDisplay } from './ResourcePropertyDisplay.js';
16
+ import { TextArea } from './TextArea.js';
17
+ import { useResource } from './useResource.js';
18
+
19
+ function QuestionnaireForm(props) {
20
+ const medplum = useMedplum();
21
+ const source = medplum.getProfile();
22
+ const [schema, setSchema] = useState();
23
+ const questionnaire = useResource(props.questionnaire);
24
+ const [response, setResponse] = useState();
25
+ useEffect(() => {
26
+ medplum.requestSchema('Questionnaire').then(setSchema);
27
+ }, [medplum]);
28
+ useEffect(() => {
29
+ setResponse(questionnaire ? buildInitialResponse(questionnaire) : undefined);
30
+ }, [questionnaire]);
31
+ function setItems(newResponseItems) {
32
+ setResponse({
33
+ resourceType: 'QuestionnaireResponse',
34
+ item: newResponseItems,
35
+ });
36
+ }
37
+ if (!schema || !questionnaire) {
38
+ return null;
39
+ }
40
+ return (React.createElement(Form, { testid: "questionnaire-form", onSubmit: () => {
41
+ if (props.onSubmit && response) {
42
+ props.onSubmit(Object.assign(Object.assign({}, response), { questionnaire: getReferenceString(questionnaire), subject: props.subject, source: createReference(source), authored: new Date().toISOString() }));
43
+ }
44
+ } },
45
+ questionnaire.title && React.createElement("h1", null, questionnaire.title),
46
+ questionnaire.item && React.createElement(QuestionnaireFormItemArray, { items: questionnaire.item, onChange: setItems }),
47
+ React.createElement(Button, { type: "submit", size: "large" }, "OK")));
48
+ }
49
+ function QuestionnaireFormItemArray(props) {
50
+ const [responseItems, setResponseItems] = useState(buildInitialResponseItems(props.items));
51
+ function setResponseItem(index, newResponseItem) {
52
+ const newResponseItems = responseItems.slice();
53
+ newResponseItems[index] = newResponseItem;
54
+ setResponseItems(newResponseItems);
55
+ props.onChange(newResponseItems);
56
+ }
57
+ return (React.createElement(React.Fragment, null, props.items.map((item, index) => {
58
+ if (item.type === QuestionnaireItemType.display) {
59
+ return React.createElement("p", { key: item.linkId }, item.text);
60
+ }
61
+ if (item.type === QuestionnaireItemType.group) {
62
+ return (React.createElement(QuestionnaireFormItem, { key: item.linkId, item: item, onChange: (newResponseItem) => setResponseItem(index, newResponseItem) }));
63
+ }
64
+ if (item.type === QuestionnaireItemType.boolean) {
65
+ const initial = item.initial && item.initial.length > 0 ? item.initial[0] : undefined;
66
+ return (React.createElement(CheckboxFormSection, { key: item.linkId, title: item.text, htmlFor: item.linkId },
67
+ React.createElement(Checkbox, { name: item.linkId, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueBoolean, onChange: (newValue) => setResponseItem(index, {
68
+ linkId: item.linkId,
69
+ answer: [{ valueBoolean: newValue }],
70
+ }) })));
71
+ }
72
+ return (React.createElement(FormSection, { key: item.linkId, htmlFor: item.linkId, title: item.text || '' },
73
+ React.createElement(QuestionnaireFormItem, { item: item, onChange: (newResponseItem) => setResponseItem(index, newResponseItem) })));
74
+ })));
75
+ }
76
+ function QuestionnaireFormItem(props) {
77
+ const item = props.item;
78
+ const type = item.type;
79
+ if (!type) {
80
+ return null;
81
+ }
82
+ const name = item.linkId;
83
+ if (!name) {
84
+ return null;
85
+ }
86
+ const initial = item.initial && item.initial.length > 0 ? item.initial[0] : undefined;
87
+ function onChangeItem(newResponseItems) {
88
+ props.onChange({
89
+ linkId: item.linkId,
90
+ item: newResponseItems,
91
+ });
92
+ }
93
+ function onChangeAnswer(newResponseAnswer) {
94
+ props.onChange({
95
+ linkId: item.linkId,
96
+ answer: [newResponseAnswer],
97
+ });
98
+ }
99
+ switch (type) {
100
+ case QuestionnaireItemType.group:
101
+ return (React.createElement("div", null,
102
+ React.createElement("h3", null, item.text),
103
+ item.item && React.createElement(QuestionnaireFormItemArray, { items: item.item, onChange: onChangeItem })));
104
+ case QuestionnaireItemType.boolean:
105
+ return (React.createElement(Checkbox, { name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueBoolean, onChange: (newValue) => onChangeAnswer({ valueBoolean: newValue }) }));
106
+ case QuestionnaireItemType.decimal:
107
+ return (React.createElement(Input, { type: "number", step: "any", name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueDecimal, onChange: (newValue) => onChangeAnswer({ valueDecimal: parseFloat(newValue) }) }));
108
+ case QuestionnaireItemType.integer:
109
+ return (React.createElement(Input, { type: "number", step: 1, name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueInteger, onChange: (newValue) => onChangeAnswer({ valueInteger: parseInt(newValue) }) }));
110
+ case QuestionnaireItemType.date:
111
+ return (React.createElement(Input, { type: "date", name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueDate, onChange: (newValue) => onChangeAnswer({ valueDate: newValue }) }));
112
+ case QuestionnaireItemType.dateTime:
113
+ return (React.createElement(DateTimeInput, { type: "datetime-local", name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueDateTime, onChange: (newValue) => onChangeAnswer({ valueDateTime: newValue }) }));
114
+ case QuestionnaireItemType.time:
115
+ return (React.createElement(Input, { type: "time", name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueTime, onChange: (newValue) => onChangeAnswer({ valueTime: newValue }) }));
116
+ case QuestionnaireItemType.string:
117
+ return (React.createElement(Input, { type: "text", name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueString, onChange: (newValue) => onChangeAnswer({ valueString: newValue }) }));
118
+ case QuestionnaireItemType.text:
119
+ return (React.createElement(TextArea, { name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueString, onChange: (newValue) => onChangeAnswer({ valueString: newValue }) }));
120
+ case QuestionnaireItemType.url:
121
+ return (React.createElement(Input, { type: "url", name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueUri, onChange: (newValue) => onChangeAnswer({ valueUri: newValue }) }));
122
+ case QuestionnaireItemType.attachment:
123
+ return (React.createElement(AttachmentInput, { name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueAttachment, onChange: (newValue) => onChangeAnswer({ valueAttachment: newValue }) }));
124
+ case QuestionnaireItemType.reference:
125
+ return (React.createElement(ReferenceInput, { name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueReference, onChange: (newValue) => onChangeAnswer({ valueReference: newValue }) }));
126
+ case QuestionnaireItemType.quantity:
127
+ return (React.createElement(QuantityInput, { name: name, defaultValue: initial === null || initial === void 0 ? void 0 : initial.valueQuantity, onChange: (newValue) => onChangeAnswer({ valueQuantity: newValue }) }));
128
+ case QuestionnaireItemType.choice:
129
+ case QuestionnaireItemType.openChoice:
130
+ if (isDropDownChoice(item)) {
131
+ return (React.createElement(QuestionnaireChoiceDropDownInput, { name: name, item: item, initial: initial, onChangeAnswer: onChangeAnswer }));
132
+ }
133
+ else {
134
+ return (React.createElement(QuestionnaireChoiceRadioInput, { name: name, item: item, initial: initial, onChangeAnswer: onChangeAnswer }));
135
+ }
136
+ }
137
+ return null;
138
+ }
139
+ function QuestionnaireChoiceDropDownInput(props) {
140
+ const { name, item, initial } = props;
141
+ const valueElementDefinition = globalSchema.types['QuestionnaireItemAnswerOption'].properties['value[x]'];
142
+ const initialValue = getTypedPropertyValue({ type: 'QuestionnaireItemInitial', value: initial }, 'value');
143
+ return (React.createElement("select", { id: name, name: name, className: "medplum-select", onChange: (e) => {
144
+ const index = e.currentTarget.selectedIndex;
145
+ if (index === 0) {
146
+ props.onChangeAnswer({});
147
+ return;
148
+ }
149
+ const option = item.answerOption[index - 1];
150
+ const optionValue = getTypedPropertyValue({ type: 'QuestionnaireItemAnswerOption', value: option }, 'value');
151
+ const propertyName = 'value' + capitalize(optionValue.type);
152
+ props.onChangeAnswer({ [propertyName]: optionValue.value });
153
+ } },
154
+ React.createElement("option", null),
155
+ item.answerOption &&
156
+ item.answerOption.map((option, index) => {
157
+ const optionValue = getTypedPropertyValue({ type: 'QuestionnaireItemAnswerOption', value: option }, 'value');
158
+ const optionName = `${name}-option-${index}`;
159
+ return (React.createElement("option", { key: optionName, value: optionValue.value, selected: initialValue && stringify(optionValue) === stringify(initialValue) },
160
+ React.createElement(ResourcePropertyDisplay, { property: valueElementDefinition, propertyType: optionValue.type, value: optionValue.value })));
161
+ })));
162
+ }
163
+ function QuestionnaireChoiceRadioInput(props) {
164
+ const { name, item, initial, onChangeAnswer } = props;
165
+ const valueElementDefinition = globalSchema.types['QuestionnaireItemAnswerOption'].properties['value[x]'];
166
+ const initialValue = getTypedPropertyValue({ type: 'QuestionnaireItemInitial', value: initial }, 'value');
167
+ return (React.createElement(React.Fragment, null, item.answerOption &&
168
+ item.answerOption.map((option, index) => {
169
+ const optionValue = getTypedPropertyValue({ type: 'QuestionnaireItemAnswerOption', value: option }, 'value');
170
+ const propertyName = 'value' + capitalize(optionValue.type);
171
+ const optionName = `${name}-option-${index}`;
172
+ return (React.createElement("div", { key: optionName, className: "medplum-questionnaire-option-row" },
173
+ React.createElement("div", { className: "medplum-questionnaire-option-checkbox" },
174
+ React.createElement("input", { type: "radio", id: optionName, name: name, value: optionValue.value, defaultChecked: initialValue && stringify(optionValue) === stringify(initialValue), onChange: () => onChangeAnswer({ [propertyName]: optionValue.value }) })),
175
+ React.createElement("div", null,
176
+ React.createElement("label", { htmlFor: optionName },
177
+ React.createElement(ResourcePropertyDisplay, { property: valueElementDefinition, propertyType: optionValue.type, value: optionValue.value })))));
178
+ })));
179
+ }
180
+ function buildInitialResponse(questionnaire) {
181
+ const response = {
182
+ resourceType: 'QuestionnaireResponse',
183
+ questionnaire: getReferenceString(questionnaire),
184
+ item: buildInitialResponseItems(questionnaire.item),
185
+ };
186
+ return response;
187
+ }
188
+ function buildInitialResponseItems(items) {
189
+ var _a;
190
+ return (_a = items === null || items === void 0 ? void 0 : items.map(buildInitialResponseItem)) !== null && _a !== void 0 ? _a : [];
191
+ }
192
+ function buildInitialResponseItem(item) {
193
+ var _a, _b;
194
+ return {
195
+ linkId: item.linkId,
196
+ item: buildInitialResponseItems(item.item),
197
+ answer: (_b = (_a = item.initial) === null || _a === void 0 ? void 0 : _a.map(buildInitialResponseAnswer)) !== null && _b !== void 0 ? _b : [],
198
+ };
199
+ }
200
+ function buildInitialResponseAnswer(answer) {
201
+ // This works because QuestionnaireItemInitial and QuestionnaireResponseItemAnswer
202
+ // have the same properties.
203
+ return Object.assign({}, answer);
204
+ }
205
+ function isDropDownChoice(item) {
206
+ var _a;
207
+ return !!((_a = item.extension) === null || _a === void 0 ? void 0 : _a.some((e) => {
208
+ var _a, _b, _c;
209
+ return e.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl' &&
210
+ ((_c = (_b = (_a = e.valueCodeableConcept) === null || _a === void 0 ? void 0 : _a.coding) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.code) === 'drop-down';
211
+ }));
212
+ }
213
+
214
+ export { QuestionnaireForm, QuestionnaireFormItem };
215
+ //# sourceMappingURL=QuestionnaireForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuestionnaireForm.js","sources":["../../src/QuestionnaireForm.tsx"],"sourcesContent":["import {\n capitalize,\n createReference,\n getReferenceString,\n getTypedPropertyValue,\n globalSchema,\n IndexedStructureDefinition,\n ProfileResource,\n PropertyType,\n stringify,\n TypedValue,\n} from '@medplum/core';\nimport {\n Questionnaire,\n QuestionnaireItem,\n QuestionnaireItemAnswerOption,\n QuestionnaireItemInitial,\n QuestionnaireResponse,\n QuestionnaireResponseItem,\n QuestionnaireResponseItemAnswer,\n Reference,\n} from '@medplum/fhirtypes';\nimport React, { ChangeEvent, useEffect, useState } from 'react';\nimport { AttachmentInput } from './AttachmentInput';\nimport { Button } from './Button';\nimport { Checkbox } from './Checkbox';\nimport { CheckboxFormSection } from './CheckboxFormSection';\nimport { DateTimeInput } from './DateTimeInput';\nimport { Form } from './Form';\nimport { FormSection } from './FormSection';\nimport { Input } from './Input';\nimport { useMedplum } from './MedplumProvider';\nimport { QuantityInput } from './QuantityInput';\nimport { QuestionnaireItemType } from './QuestionnaireUtils';\nimport { ReferenceInput } from './ReferenceInput';\nimport { ResourcePropertyDisplay } from './ResourcePropertyDisplay';\nimport { TextArea } from './TextArea';\nimport { useResource } from './useResource';\nimport './QuestionnaireForm.css';\n\nexport interface QuestionnaireFormProps {\n questionnaire: Questionnaire | Reference<Questionnaire>;\n subject?: Reference;\n onSubmit: (response: QuestionnaireResponse) => void;\n}\n\nexport function QuestionnaireForm(props: QuestionnaireFormProps): JSX.Element | null {\n const medplum = useMedplum();\n const source = medplum.getProfile();\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>();\n const questionnaire = useResource(props.questionnaire);\n const [response, setResponse] = useState<QuestionnaireResponse | undefined>();\n\n useEffect(() => {\n medplum.requestSchema('Questionnaire').then(setSchema);\n }, [medplum]);\n\n useEffect(() => {\n setResponse(questionnaire ? buildInitialResponse(questionnaire) : undefined);\n }, [questionnaire]);\n\n function setItems(newResponseItems: QuestionnaireResponseItem[]): void {\n setResponse({\n resourceType: 'QuestionnaireResponse',\n item: newResponseItems,\n });\n }\n\n if (!schema || !questionnaire) {\n return null;\n }\n\n return (\n <Form\n testid=\"questionnaire-form\"\n onSubmit={() => {\n if (props.onSubmit && response) {\n props.onSubmit({\n ...response,\n questionnaire: getReferenceString(questionnaire),\n subject: props.subject,\n source: createReference(source as ProfileResource),\n authored: new Date().toISOString(),\n });\n }\n }}\n >\n {questionnaire.title && <h1>{questionnaire.title}</h1>}\n {questionnaire.item && <QuestionnaireFormItemArray items={questionnaire.item} onChange={setItems} />}\n <Button type=\"submit\" size=\"large\">\n OK\n </Button>\n </Form>\n );\n}\n\ninterface QuestionnaireFormItemArrayProps {\n items: QuestionnaireItem[];\n onChange: (newResponseItems: QuestionnaireResponseItem[]) => void;\n}\n\nfunction QuestionnaireFormItemArray(props: QuestionnaireFormItemArrayProps): JSX.Element {\n const [responseItems, setResponseItems] = useState<QuestionnaireResponseItem[]>(\n buildInitialResponseItems(props.items)\n );\n\n function setResponseItem(index: number, newResponseItem: QuestionnaireResponseItem): void {\n const newResponseItems = responseItems.slice();\n newResponseItems[index] = newResponseItem;\n setResponseItems(newResponseItems);\n props.onChange(newResponseItems);\n }\n\n return (\n <>\n {props.items.map((item, index) => {\n if (item.type === QuestionnaireItemType.display) {\n return <p key={item.linkId}>{item.text}</p>;\n }\n if (item.type === QuestionnaireItemType.group) {\n return (\n <QuestionnaireFormItem\n key={item.linkId}\n item={item}\n onChange={(newResponseItem) => setResponseItem(index, newResponseItem)}\n />\n );\n }\n if (item.type === QuestionnaireItemType.boolean) {\n const initial = item.initial && item.initial.length > 0 ? item.initial[0] : undefined;\n return (\n <CheckboxFormSection key={item.linkId} title={item.text} htmlFor={item.linkId}>\n <Checkbox\n name={item.linkId}\n defaultValue={initial?.valueBoolean}\n onChange={(newValue) =>\n setResponseItem(index, {\n linkId: item.linkId,\n answer: [{ valueBoolean: newValue }],\n })\n }\n />\n </CheckboxFormSection>\n );\n }\n return (\n <FormSection key={item.linkId} htmlFor={item.linkId} title={item.text || ''}>\n <QuestionnaireFormItem\n item={item}\n onChange={(newResponseItem) => setResponseItem(index, newResponseItem)}\n />\n </FormSection>\n );\n })}\n </>\n );\n}\n\nexport interface QuestionnaireFormItemProps {\n item: QuestionnaireItem;\n onChange: (newResponseItem: QuestionnaireResponseItem) => void;\n}\n\nexport function QuestionnaireFormItem(props: QuestionnaireFormItemProps): JSX.Element | null {\n const item = props.item;\n\n const type = item.type as QuestionnaireItemType;\n if (!type) {\n return null;\n }\n\n const name = item.linkId;\n if (!name) {\n return null;\n }\n\n const initial = item.initial && item.initial.length > 0 ? item.initial[0] : undefined;\n\n function onChangeItem(newResponseItems: QuestionnaireResponseItem[]): void {\n props.onChange({\n linkId: item.linkId,\n item: newResponseItems,\n });\n }\n\n function onChangeAnswer(newResponseAnswer: QuestionnaireResponseItemAnswer): void {\n props.onChange({\n linkId: item.linkId,\n answer: [newResponseAnswer],\n });\n }\n\n switch (type) {\n case QuestionnaireItemType.group:\n return (\n <div>\n <h3>{item.text}</h3>\n {item.item && <QuestionnaireFormItemArray items={item.item} onChange={onChangeItem} />}\n </div>\n );\n case QuestionnaireItemType.boolean:\n return (\n <Checkbox\n name={name}\n defaultValue={initial?.valueBoolean}\n onChange={(newValue) => onChangeAnswer({ valueBoolean: newValue })}\n />\n );\n case QuestionnaireItemType.decimal:\n return (\n <Input\n type=\"number\"\n step=\"any\"\n name={name}\n defaultValue={initial?.valueDecimal}\n onChange={(newValue) => onChangeAnswer({ valueDecimal: parseFloat(newValue) })}\n />\n );\n case QuestionnaireItemType.integer:\n return (\n <Input\n type=\"number\"\n step={1}\n name={name}\n defaultValue={initial?.valueInteger}\n onChange={(newValue) => onChangeAnswer({ valueInteger: parseInt(newValue) })}\n />\n );\n case QuestionnaireItemType.date:\n return (\n <Input\n type=\"date\"\n name={name}\n defaultValue={initial?.valueDate}\n onChange={(newValue) => onChangeAnswer({ valueDate: newValue })}\n />\n );\n case QuestionnaireItemType.dateTime:\n return (\n <DateTimeInput\n type=\"datetime-local\"\n name={name}\n defaultValue={initial?.valueDateTime}\n onChange={(newValue) => onChangeAnswer({ valueDateTime: newValue })}\n />\n );\n case QuestionnaireItemType.time:\n return (\n <Input\n type=\"time\"\n name={name}\n defaultValue={initial?.valueTime}\n onChange={(newValue) => onChangeAnswer({ valueTime: newValue })}\n />\n );\n case QuestionnaireItemType.string:\n return (\n <Input\n type=\"text\"\n name={name}\n defaultValue={initial?.valueString}\n onChange={(newValue) => onChangeAnswer({ valueString: newValue })}\n />\n );\n case QuestionnaireItemType.text:\n return (\n <TextArea\n name={name}\n defaultValue={initial?.valueString}\n onChange={(newValue) => onChangeAnswer({ valueString: newValue })}\n />\n );\n case QuestionnaireItemType.url:\n return (\n <Input\n type=\"url\"\n name={name}\n defaultValue={initial?.valueUri}\n onChange={(newValue) => onChangeAnswer({ valueUri: newValue })}\n />\n );\n case QuestionnaireItemType.attachment:\n return (\n <AttachmentInput\n name={name}\n defaultValue={initial?.valueAttachment}\n onChange={(newValue) => onChangeAnswer({ valueAttachment: newValue })}\n />\n );\n case QuestionnaireItemType.reference:\n return (\n <ReferenceInput\n name={name}\n defaultValue={initial?.valueReference}\n onChange={(newValue) => onChangeAnswer({ valueReference: newValue })}\n />\n );\n case QuestionnaireItemType.quantity:\n return (\n <QuantityInput\n name={name}\n defaultValue={initial?.valueQuantity}\n onChange={(newValue) => onChangeAnswer({ valueQuantity: newValue })}\n />\n );\n case QuestionnaireItemType.choice:\n case QuestionnaireItemType.openChoice:\n if (isDropDownChoice(item)) {\n return (\n <QuestionnaireChoiceDropDownInput name={name} item={item} initial={initial} onChangeAnswer={onChangeAnswer} />\n );\n } else {\n return (\n <QuestionnaireChoiceRadioInput name={name} item={item} initial={initial} onChangeAnswer={onChangeAnswer} />\n );\n }\n }\n\n return null;\n}\n\ninterface QuestionnaireChoiceInputProps {\n name: string;\n item: QuestionnaireItem;\n initial: QuestionnaireItemInitial | undefined;\n onChangeAnswer: (newResponseAnswer: QuestionnaireResponseItemAnswer) => void;\n}\n\nfunction QuestionnaireChoiceDropDownInput(props: QuestionnaireChoiceInputProps): JSX.Element {\n const { name, item, initial } = props;\n const valueElementDefinition = globalSchema.types['QuestionnaireItemAnswerOption'].properties['value[x]'];\n const initialValue = getTypedPropertyValue({ type: 'QuestionnaireItemInitial', value: initial }, 'value') as\n | TypedValue\n | undefined;\n\n return (\n <select\n id={name}\n name={name}\n className=\"medplum-select\"\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n const index = e.currentTarget.selectedIndex;\n if (index === 0) {\n props.onChangeAnswer({});\n return;\n }\n const option = (item.answerOption as QuestionnaireItemAnswerOption[])[index - 1];\n const optionValue = getTypedPropertyValue(\n { type: 'QuestionnaireItemAnswerOption', value: option },\n 'value'\n ) as TypedValue;\n const propertyName = 'value' + capitalize(optionValue.type);\n props.onChangeAnswer({ [propertyName]: optionValue.value });\n }}\n >\n <option></option>\n {item.answerOption &&\n item.answerOption.map((option: QuestionnaireItemAnswerOption, index: number) => {\n const optionValue = getTypedPropertyValue(\n { type: 'QuestionnaireItemAnswerOption', value: option },\n 'value'\n ) as TypedValue;\n const optionName = `${name}-option-${index}`;\n return (\n <option\n key={optionName}\n value={optionValue.value}\n selected={initialValue && stringify(optionValue) === stringify(initialValue)}\n >\n <ResourcePropertyDisplay\n property={valueElementDefinition}\n propertyType={optionValue.type as PropertyType}\n value={optionValue.value}\n />\n </option>\n );\n })}\n </select>\n );\n}\n\nfunction QuestionnaireChoiceRadioInput(props: QuestionnaireChoiceInputProps): JSX.Element {\n const { name, item, initial, onChangeAnswer } = props;\n const valueElementDefinition = globalSchema.types['QuestionnaireItemAnswerOption'].properties['value[x]'];\n const initialValue = getTypedPropertyValue({ type: 'QuestionnaireItemInitial', value: initial }, 'value') as\n | TypedValue\n | undefined;\n return (\n <>\n {item.answerOption &&\n item.answerOption.map((option: QuestionnaireItemAnswerOption, index: number) => {\n const optionValue = getTypedPropertyValue(\n { type: 'QuestionnaireItemAnswerOption', value: option },\n 'value'\n ) as TypedValue;\n const propertyName = 'value' + capitalize(optionValue.type);\n const optionName = `${name}-option-${index}`;\n return (\n <div key={optionName} className=\"medplum-questionnaire-option-row\">\n <div className=\"medplum-questionnaire-option-checkbox\">\n <input\n type=\"radio\"\n id={optionName}\n name={name}\n value={optionValue.value}\n defaultChecked={initialValue && stringify(optionValue) === stringify(initialValue)}\n onChange={() => onChangeAnswer({ [propertyName]: optionValue.value })}\n />\n </div>\n <div>\n <label htmlFor={optionName}>\n <ResourcePropertyDisplay\n property={valueElementDefinition}\n propertyType={optionValue.type as PropertyType}\n value={optionValue.value}\n />\n </label>\n </div>\n </div>\n );\n })}\n </>\n );\n}\n\nfunction buildInitialResponse(questionnaire: Questionnaire): QuestionnaireResponse {\n const response: QuestionnaireResponse = {\n resourceType: 'QuestionnaireResponse',\n questionnaire: getReferenceString(questionnaire),\n item: buildInitialResponseItems(questionnaire.item),\n };\n\n return response;\n}\n\nfunction buildInitialResponseItems(items: QuestionnaireItem[] | undefined): QuestionnaireResponseItem[] {\n return items?.map(buildInitialResponseItem) ?? [];\n}\n\nfunction buildInitialResponseItem(item: QuestionnaireItem): QuestionnaireResponseItem {\n return {\n linkId: item.linkId,\n item: buildInitialResponseItems(item.item),\n answer: item.initial?.map(buildInitialResponseAnswer) ?? [],\n };\n}\n\nfunction buildInitialResponseAnswer(answer: QuestionnaireItemInitial): QuestionnaireResponseItemAnswer {\n // This works because QuestionnaireItemInitial and QuestionnaireResponseItemAnswer\n // have the same properties.\n return { ...answer };\n}\n\nfunction isDropDownChoice(item: QuestionnaireItem): boolean {\n return !!item.extension?.some(\n (e) =>\n e.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl' &&\n e.valueCodeableConcept?.coding?.[0]?.code === 'drop-down'\n );\n}\n"],"names":[],"mappings":"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"}
File without changes