@medplum/react 0.9.38 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/dist/cjs/AttachmentButton.d.ts +9 -0
  2. package/dist/cjs/CodeInput.d.ts +2 -1
  3. package/dist/cjs/CodeableConceptInput.d.ts +1 -0
  4. package/dist/cjs/CodingInput.d.ts +1 -0
  5. package/dist/cjs/DateTimeInput.d.ts +9 -2
  6. package/dist/cjs/ReferenceInput.d.ts +1 -0
  7. package/dist/cjs/ResourceAvatar.d.ts +8 -0
  8. package/dist/cjs/ResourceBadge.d.ts +0 -1
  9. package/dist/cjs/ResourceInput.d.ts +2 -3
  10. package/dist/cjs/SearchPopupMenu.d.ts +0 -4
  11. package/dist/cjs/SearchUtils.d.ts +5 -5
  12. package/dist/cjs/ValueSetAutocomplete.d.ts +10 -0
  13. package/dist/cjs/auth/RegisterForm.d.ts +0 -1
  14. package/dist/cjs/auth/SignInForm.d.ts +0 -1
  15. package/dist/cjs/defaulttheme.css +0 -51
  16. package/dist/cjs/index.d.ts +3 -14
  17. package/dist/cjs/index.js +793 -1493
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/index.min.js +1 -1
  20. package/dist/cjs/index.min.js.map +1 -1
  21. package/dist/cjs/stories/{UploadButton.stories.d.ts → AttachmentButton.stories.d.ts} +1 -0
  22. package/dist/cjs/stories/{Input.stories.d.ts → PeriodInput.stories.d.ts} +1 -1
  23. package/dist/cjs/stories/{Avatar.stories.d.ts → ResourceAvatar.stories.d.ts} +0 -0
  24. package/dist/cjs/stories/ResourceForm.stories.d.ts +1 -0
  25. package/dist/cjs/stories/{Dialog.stories.d.ts → ResourceInput.stories.d.ts} +2 -1
  26. package/dist/cjs/stories/SearchControl.stories.d.ts +1 -0
  27. package/dist/cjs/styles.css +70 -1053
  28. package/dist/cjs/utils/outcomes.d.ts +1 -0
  29. package/dist/esm/AddressInput.js +9 -21
  30. package/dist/esm/AddressInput.js.map +1 -1
  31. package/dist/esm/AnnotationInput.js +2 -2
  32. package/dist/esm/AnnotationInput.js.map +1 -1
  33. package/dist/esm/AttachmentArrayInput.js +11 -8
  34. package/dist/esm/AttachmentArrayInput.js.map +1 -1
  35. package/dist/esm/AttachmentButton.d.ts +9 -0
  36. package/dist/esm/{UploadButton.js → AttachmentButton.js} +9 -9
  37. package/dist/esm/AttachmentButton.js.map +1 -0
  38. package/dist/esm/AttachmentInput.js +3 -3
  39. package/dist/esm/AttachmentInput.js.map +1 -1
  40. package/dist/esm/CalendarInput.js +6 -7
  41. package/dist/esm/CalendarInput.js.map +1 -1
  42. package/dist/esm/CodeInput.d.ts +2 -1
  43. package/dist/esm/CodeInput.js +16 -21
  44. package/dist/esm/CodeInput.js.map +1 -1
  45. package/dist/esm/CodeableConceptInput.d.ts +1 -0
  46. package/dist/esm/CodeableConceptInput.js +18 -33
  47. package/dist/esm/CodeableConceptInput.js.map +1 -1
  48. package/dist/esm/CodingInput.d.ts +1 -0
  49. package/dist/esm/CodingInput.js +24 -23
  50. package/dist/esm/CodingInput.js.map +1 -1
  51. package/dist/esm/ContactDetailInput.js +3 -4
  52. package/dist/esm/ContactDetailInput.js.map +1 -1
  53. package/dist/esm/ContactPointInput.js +5 -21
  54. package/dist/esm/ContactPointInput.js.map +1 -1
  55. package/dist/esm/DateTimeInput.d.ts +9 -2
  56. package/dist/esm/DateTimeInput.js +13 -3
  57. package/dist/esm/DateTimeInput.js.map +1 -1
  58. package/dist/esm/DiagnosticReportDisplay.js +16 -1
  59. package/dist/esm/DiagnosticReportDisplay.js.map +1 -1
  60. package/dist/esm/EncounterTimeline.js +2 -0
  61. package/dist/esm/EncounterTimeline.js.map +1 -1
  62. package/dist/esm/ExtensionInput.js +2 -2
  63. package/dist/esm/ExtensionInput.js.map +1 -1
  64. package/dist/esm/FhirPathTable.js +4 -5
  65. package/dist/esm/FhirPathTable.js.map +1 -1
  66. package/dist/esm/HumanNameInput.js +7 -17
  67. package/dist/esm/HumanNameInput.js.map +1 -1
  68. package/dist/esm/IdentifierInput.js +4 -5
  69. package/dist/esm/IdentifierInput.js.map +1 -1
  70. package/dist/esm/Logo.js +4 -4
  71. package/dist/esm/Logo.js.map +1 -1
  72. package/dist/esm/PatientTimeline.js +2 -0
  73. package/dist/esm/PatientTimeline.js.map +1 -1
  74. package/dist/esm/PeriodInput.js +5 -5
  75. package/dist/esm/PeriodInput.js.map +1 -1
  76. package/dist/esm/PlanDefinitionBuilder.js +17 -29
  77. package/dist/esm/PlanDefinitionBuilder.js.map +1 -1
  78. package/dist/esm/QuantityInput.js +5 -12
  79. package/dist/esm/QuantityInput.js.map +1 -1
  80. package/dist/esm/QuestionnaireBuilder.js +22 -25
  81. package/dist/esm/QuestionnaireBuilder.js.map +1 -1
  82. package/dist/esm/QuestionnaireForm.js +35 -29
  83. package/dist/esm/QuestionnaireForm.js.map +1 -1
  84. package/dist/esm/RangeInput.js +2 -2
  85. package/dist/esm/RangeInput.js.map +1 -1
  86. package/dist/esm/RatioInput.js +2 -2
  87. package/dist/esm/RatioInput.js.map +1 -1
  88. package/dist/esm/ReferenceInput.d.ts +1 -0
  89. package/dist/esm/ReferenceInput.js +4 -6
  90. package/dist/esm/ReferenceInput.js.map +1 -1
  91. package/dist/esm/RequestGroupDisplay.js +1 -1
  92. package/dist/esm/RequestGroupDisplay.js.map +1 -1
  93. package/dist/esm/ResourceArrayInput.js +10 -7
  94. package/dist/esm/ResourceArrayInput.js.map +1 -1
  95. package/dist/esm/ResourceAvatar.d.ts +8 -0
  96. package/dist/esm/ResourceAvatar.js +24 -0
  97. package/dist/esm/ResourceAvatar.js.map +1 -0
  98. package/dist/esm/ResourceBadge.d.ts +0 -1
  99. package/dist/esm/ResourceBadge.js +2 -3
  100. package/dist/esm/ResourceBadge.js.map +1 -1
  101. package/dist/esm/ResourceBlame.js +3 -3
  102. package/dist/esm/ResourceBlame.js.map +1 -1
  103. package/dist/esm/ResourceForm.js +10 -10
  104. package/dist/esm/ResourceForm.js.map +1 -1
  105. package/dist/esm/ResourceInput.d.ts +2 -3
  106. package/dist/esm/ResourceInput.js +37 -29
  107. package/dist/esm/ResourceInput.js.map +1 -1
  108. package/dist/esm/ResourcePropertyInput.js +30 -18
  109. package/dist/esm/ResourcePropertyInput.js.map +1 -1
  110. package/dist/esm/ResourceTimeline.js +19 -15
  111. package/dist/esm/ResourceTimeline.js.map +1 -1
  112. package/dist/esm/Scheduler.js +7 -7
  113. package/dist/esm/Scheduler.js.map +1 -1
  114. package/dist/esm/SearchControl.js +76 -58
  115. package/dist/esm/SearchControl.js.map +1 -1
  116. package/dist/esm/SearchControlField.js.map +1 -1
  117. package/dist/esm/SearchFieldEditor.js +7 -7
  118. package/dist/esm/SearchFieldEditor.js.map +1 -1
  119. package/dist/esm/SearchFilterEditor.js +10 -15
  120. package/dist/esm/SearchFilterEditor.js.map +1 -1
  121. package/dist/esm/SearchFilterValueDialog.js +4 -3
  122. package/dist/esm/SearchFilterValueDialog.js.map +1 -1
  123. package/dist/esm/SearchFilterValueInput.js +6 -7
  124. package/dist/esm/SearchFilterValueInput.js.map +1 -1
  125. package/dist/esm/SearchPopupMenu.d.ts +0 -4
  126. package/dist/esm/SearchPopupMenu.js +59 -73
  127. package/dist/esm/SearchPopupMenu.js.map +1 -1
  128. package/dist/esm/SearchUtils.d.ts +5 -5
  129. package/dist/esm/SearchUtils.js +11 -12
  130. package/dist/esm/SearchUtils.js.map +1 -1
  131. package/dist/esm/ServiceRequestTimeline.js +2 -0
  132. package/dist/esm/ServiceRequestTimeline.js.map +1 -1
  133. package/dist/esm/Timeline.js +12 -20
  134. package/dist/esm/Timeline.js.map +1 -1
  135. package/dist/esm/TimingInput.js +14 -17
  136. package/dist/esm/TimingInput.js.map +1 -1
  137. package/dist/esm/ValueSetAutocomplete.d.ts +10 -0
  138. package/dist/esm/ValueSetAutocomplete.js +57 -0
  139. package/dist/esm/ValueSetAutocomplete.js.map +1 -0
  140. package/dist/esm/auth/AuthenticationForm.js +12 -20
  141. package/dist/esm/auth/AuthenticationForm.js.map +1 -1
  142. package/dist/esm/auth/ChooseProfileForm.js +10 -10
  143. package/dist/esm/auth/ChooseProfileForm.js.map +1 -1
  144. package/dist/esm/auth/NewProjectForm.js +12 -15
  145. package/dist/esm/auth/NewProjectForm.js.map +1 -1
  146. package/dist/esm/auth/NewUserForm.js +25 -33
  147. package/dist/esm/auth/NewUserForm.js.map +1 -1
  148. package/dist/esm/auth/RegisterForm.d.ts +0 -1
  149. package/dist/esm/auth/RegisterForm.js.map +1 -1
  150. package/dist/esm/auth/SignInForm.d.ts +0 -1
  151. package/dist/esm/auth/SignInForm.js.map +1 -1
  152. package/dist/esm/defaulttheme.css +0 -51
  153. package/dist/esm/index.d.ts +3 -14
  154. package/dist/esm/index.js +4 -15
  155. package/dist/esm/index.js.map +1 -1
  156. package/dist/esm/index.min.js +1 -1
  157. package/dist/esm/index.min.js.map +1 -1
  158. package/dist/esm/node_modules/tslib/tslib.es6.js +13 -1
  159. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
  160. package/dist/esm/stories/{UploadButton.stories.d.ts → AttachmentButton.stories.d.ts} +1 -0
  161. package/dist/{cjs/stories/Select.stories.d.ts → esm/stories/PeriodInput.stories.d.ts} +1 -1
  162. package/dist/esm/stories/{Avatar.stories.d.ts → ResourceAvatar.stories.d.ts} +0 -0
  163. package/dist/esm/stories/ResourceForm.stories.d.ts +1 -0
  164. package/dist/{cjs/stories/FormSection.stories.d.ts → esm/stories/ResourceInput.stories.d.ts} +2 -2
  165. package/dist/esm/stories/SearchControl.stories.d.ts +1 -0
  166. package/dist/esm/styles.css +70 -1053
  167. package/dist/esm/utils/outcomes.d.ts +1 -0
  168. package/dist/esm/utils/outcomes.js +5 -1
  169. package/dist/esm/utils/outcomes.js.map +1 -1
  170. package/package.json +27 -19
  171. package/dist/cjs/Autocomplete.d.ts +0 -20
  172. package/dist/cjs/Avatar.d.ts +0 -12
  173. package/dist/cjs/Button.d.ts +0 -15
  174. package/dist/cjs/Checkbox.d.ts +0 -12
  175. package/dist/cjs/Dialog.d.ts +0 -10
  176. package/dist/cjs/Header.d.ts +0 -12
  177. package/dist/cjs/HeaderSearchInput.d.ts +0 -10
  178. package/dist/cjs/Input.d.ts +0 -22
  179. package/dist/cjs/InputRow.d.ts +0 -7
  180. package/dist/cjs/Loading.d.ts +0 -3
  181. package/dist/cjs/MenuItem.d.ts +0 -9
  182. package/dist/cjs/MenuSeparator.d.ts +0 -3
  183. package/dist/cjs/Popup.d.ts +0 -14
  184. package/dist/cjs/Select.d.ts +0 -16
  185. package/dist/cjs/SubMenu.d.ts +0 -7
  186. package/dist/cjs/TextArea.d.ts +0 -18
  187. package/dist/cjs/UploadButton.d.ts +0 -7
  188. package/dist/cjs/stories/Autocomplete.stories.d.ts +0 -9
  189. package/dist/cjs/stories/Button.stories.d.ts +0 -9
  190. package/dist/cjs/stories/Header.stories.d.ts +0 -8
  191. package/dist/cjs/stories/Loading.stories.d.ts +0 -5
  192. package/dist/esm/Autocomplete.d.ts +0 -20
  193. package/dist/esm/Autocomplete.js +0 -281
  194. package/dist/esm/Autocomplete.js.map +0 -1
  195. package/dist/esm/Avatar.d.ts +0 -12
  196. package/dist/esm/Avatar.js +0 -24
  197. package/dist/esm/Avatar.js.map +0 -1
  198. package/dist/esm/Button.d.ts +0 -15
  199. package/dist/esm/Button.js +0 -13
  200. package/dist/esm/Button.js.map +0 -1
  201. package/dist/esm/Checkbox.d.ts +0 -12
  202. package/dist/esm/Checkbox.js +0 -13
  203. package/dist/esm/Checkbox.js.map +0 -1
  204. package/dist/esm/Dialog.d.ts +0 -10
  205. package/dist/esm/Dialog.js +0 -43
  206. package/dist/esm/Dialog.js.map +0 -1
  207. package/dist/esm/Header.d.ts +0 -12
  208. package/dist/esm/Header.js +0 -99
  209. package/dist/esm/Header.js.map +0 -1
  210. package/dist/esm/HeaderSearchInput.d.ts +0 -10
  211. package/dist/esm/HeaderSearchInput.js +0 -181
  212. package/dist/esm/HeaderSearchInput.js.map +0 -1
  213. package/dist/esm/Input.d.ts +0 -22
  214. package/dist/esm/Input.js +0 -26
  215. package/dist/esm/Input.js.map +0 -1
  216. package/dist/esm/InputRow.d.ts +0 -7
  217. package/dist/esm/InputRow.js +0 -8
  218. package/dist/esm/InputRow.js.map +0 -1
  219. package/dist/esm/Loading.d.ts +0 -3
  220. package/dist/esm/Loading.js +0 -11
  221. package/dist/esm/Loading.js.map +0 -1
  222. package/dist/esm/MenuItem.d.ts +0 -9
  223. package/dist/esm/MenuItem.js +0 -8
  224. package/dist/esm/MenuItem.js.map +0 -1
  225. package/dist/esm/MenuSeparator.d.ts +0 -3
  226. package/dist/esm/MenuSeparator.js +0 -8
  227. package/dist/esm/MenuSeparator.js.map +0 -1
  228. package/dist/esm/Popup.d.ts +0 -14
  229. package/dist/esm/Popup.js +0 -78
  230. package/dist/esm/Popup.js.map +0 -1
  231. package/dist/esm/Select.d.ts +0 -16
  232. package/dist/esm/Select.js +0 -16
  233. package/dist/esm/Select.js.map +0 -1
  234. package/dist/esm/SubMenu.d.ts +0 -7
  235. package/dist/esm/SubMenu.js +0 -38
  236. package/dist/esm/SubMenu.js.map +0 -1
  237. package/dist/esm/TextArea.d.ts +0 -18
  238. package/dist/esm/TextArea.js +0 -16
  239. package/dist/esm/TextArea.js.map +0 -1
  240. package/dist/esm/UploadButton.d.ts +0 -7
  241. package/dist/esm/UploadButton.js.map +0 -1
  242. package/dist/esm/stories/Autocomplete.stories.d.ts +0 -9
  243. package/dist/esm/stories/Button.stories.d.ts +0 -9
  244. package/dist/esm/stories/Dialog.stories.d.ts +0 -5
  245. package/dist/esm/stories/FormSection.stories.d.ts +0 -6
  246. package/dist/esm/stories/Header.stories.d.ts +0 -8
  247. package/dist/esm/stories/Input.stories.d.ts +0 -6
  248. package/dist/esm/stories/Loading.stories.d.ts +0 -5
  249. package/dist/esm/stories/Select.stories.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"HumanNameInput.js","sources":["../../src/HumanNameInput.tsx"],"sourcesContent":["import { HumanName } from '@medplum/fhirtypes';\nimport React, { useRef, useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\nimport { Select } from './Select';\n\nexport interface HumanNameInputProps {\n name: string;\n defaultValue?: HumanName;\n onChange?: (value: HumanName) => void;\n}\n\nexport function HumanNameInput(props: HumanNameInputProps): JSX.Element {\n const [value, setValue] = useState<HumanName | undefined>(props.defaultValue);\n\n const valueRef = useRef<HumanName>();\n valueRef.current = value;\n\n function setValueWrapper(newValue: HumanName): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n function setUse(use: 'temp' | 'old' | 'usual' | 'official' | 'nickname' | 'anonymous' | 'maiden' | undefined): void {\n setValueWrapper({ ...valueRef.current, use: use ? use : undefined });\n }\n\n function setPrefix(prefix: string): void {\n setValueWrapper({\n ...valueRef.current,\n prefix: prefix ? prefix.split(' ') : undefined,\n });\n }\n\n function setGiven(given: string): void {\n setValueWrapper({\n ...valueRef.current,\n given: given ? given.split(' ') : undefined,\n });\n }\n\n function setFamily(family: string): void {\n setValueWrapper({\n ...valueRef.current,\n family: family ? family : undefined,\n });\n }\n\n function setSuffix(suffix: string): void {\n setValueWrapper({\n ...valueRef.current,\n suffix: suffix ? suffix.split(' ') : undefined,\n });\n }\n\n return (\n <InputRow>\n <Select defaultValue={value?.use} onChange={setUse as (use: string) => void} testid=\"use\">\n <option></option>\n <option>usual</option>\n <option>official</option>\n <option>temp</option>\n <option>nickname</option>\n <option>anonymous</option>\n <option>old</option>\n <option>maiden</option>\n </Select>\n <Input placeholder=\"Prefix\" defaultValue={value?.prefix?.join(' ')} onChange={setPrefix} />\n <Input placeholder=\"Given\" defaultValue={value?.given?.join(' ')} onChange={setGiven} />\n <Input placeholder=\"Family\" defaultValue={value?.family} onChange={setFamily} />\n <Input placeholder=\"Suffix\" defaultValue={value?.suffix?.join(' ')} onChange={setSuffix} />\n </InputRow>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HumanNameInput.js","sources":["../../src/HumanNameInput.tsx"],"sourcesContent":["import { Group, NativeSelect, TextInput } from '@mantine/core';\nimport { HumanName } from '@medplum/fhirtypes';\nimport React, { useRef, useState } from 'react';\n\nexport interface HumanNameInputProps {\n name: string;\n defaultValue?: HumanName;\n onChange?: (value: HumanName) => void;\n}\n\nexport function HumanNameInput(props: HumanNameInputProps): JSX.Element {\n const [value, setValue] = useState<HumanName | undefined>(props.defaultValue);\n\n const valueRef = useRef<HumanName>();\n valueRef.current = value;\n\n function setValueWrapper(newValue: HumanName): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n function setUse(use: 'temp' | 'old' | 'usual' | 'official' | 'nickname' | 'anonymous' | 'maiden' | undefined): void {\n setValueWrapper({ ...valueRef.current, use: use ? use : undefined });\n }\n\n function setPrefix(prefix: string): void {\n setValueWrapper({\n ...valueRef.current,\n prefix: prefix ? prefix.split(' ') : undefined,\n });\n }\n\n function setGiven(given: string): void {\n setValueWrapper({\n ...valueRef.current,\n given: given ? given.split(' ') : undefined,\n });\n }\n\n function setFamily(family: string): void {\n setValueWrapper({\n ...valueRef.current,\n family: family ? family : undefined,\n });\n }\n\n function setSuffix(suffix: string): void {\n setValueWrapper({\n ...valueRef.current,\n suffix: suffix ? suffix.split(' ') : undefined,\n });\n }\n\n return (\n <Group spacing=\"xs\" grow noWrap>\n <NativeSelect\n defaultValue={value?.use}\n data-testid=\"use\"\n onChange={(e) =>\n setUse(e.currentTarget.value as 'temp' | 'old' | 'usual' | 'official' | 'nickname' | 'anonymous' | 'maiden')\n }\n data={['', 'temp', 'old', 'usual', 'official', 'nickname', 'anonymous', 'maiden']}\n />\n <TextInput\n placeholder=\"Prefix\"\n defaultValue={value?.prefix?.join(' ')}\n onChange={(e) => setPrefix(e.currentTarget.value)}\n />\n <TextInput\n placeholder=\"Given\"\n defaultValue={value?.given?.join(' ')}\n onChange={(e) => setGiven(e.currentTarget.value)}\n />\n <TextInput placeholder=\"Family\" defaultValue={value?.family} onChange={(e) => setFamily(e.currentTarget.value)} />\n <TextInput\n placeholder=\"Suffix\"\n defaultValue={value?.suffix?.join(' ')}\n onChange={(e) => setSuffix(e.currentTarget.value)}\n />\n </Group>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
+ import { Group, TextInput } from '@mantine/core';
1
2
  import React, { useState } from 'react';
2
- import { Input } from './Input.js';
3
- import { InputRow } from './InputRow.js';
4
3
 
5
4
  function IdentifierInput(props) {
6
5
  const [value, setValue] = useState(props.defaultValue);
@@ -10,9 +9,9 @@ function IdentifierInput(props) {
10
9
  props.onChange(newValue);
11
10
  }
12
11
  }
13
- return (React.createElement(InputRow, null,
14
- React.createElement(Input, { placeholder: "System", defaultValue: value === null || value === void 0 ? void 0 : value.system, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { system: newValue })) }),
15
- React.createElement(Input, { placeholder: "Value", defaultValue: value === null || value === void 0 ? void 0 : value.value, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { value: newValue })) })));
12
+ return (React.createElement(Group, { spacing: "xs", grow: true, noWrap: true },
13
+ React.createElement(TextInput, { placeholder: "System", defaultValue: value === null || value === void 0 ? void 0 : value.system, onChange: (e) => setValueWrapper(Object.assign(Object.assign({}, value), { system: e.currentTarget.value })) }),
14
+ React.createElement(TextInput, { placeholder: "Value", defaultValue: value === null || value === void 0 ? void 0 : value.value, onChange: (e) => setValueWrapper(Object.assign(Object.assign({}, value), { value: e.currentTarget.value })) })));
16
15
  }
17
16
 
18
17
  export { IdentifierInput };
@@ -1 +1 @@
1
- {"version":3,"file":"IdentifierInput.js","sources":["../../src/IdentifierInput.tsx"],"sourcesContent":["import { Identifier } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\n\nexport interface IdentifierInputProps {\n name: string;\n defaultValue?: Identifier;\n onChange?: (value: Identifier) => void;\n}\n\nexport function IdentifierInput(props: IdentifierInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Identifier): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <InputRow>\n <Input\n placeholder=\"System\"\n defaultValue={value?.system}\n onChange={(newValue) => setValueWrapper({ ...value, system: newValue })}\n />\n <Input\n placeholder=\"Value\"\n defaultValue={value?.value}\n onChange={(newValue) => setValueWrapper({ ...value, value: newValue })}\n />\n </InputRow>\n );\n}\n"],"names":[],"mappings":";;;;AAWM,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAoB,EAAA;QAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,oBAAC,QAAQ,EAAA,IAAA;AACP,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,QAAQ,EACpB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,EAC3B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAE,EAAA,EAAA,MAAM,EAAE,QAAQ,IAAG,EACvE,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,KAAK,EAC1B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAE,EAAA,EAAA,KAAK,EAAE,QAAQ,EAAA,CAAA,CAAG,EACtE,CAAA,CACO,EACX;AACJ;;;;"}
1
+ {"version":3,"file":"IdentifierInput.js","sources":["../../src/IdentifierInput.tsx"],"sourcesContent":["import { Group, TextInput } from '@mantine/core';\nimport { Identifier } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\n\nexport interface IdentifierInputProps {\n name: string;\n defaultValue?: Identifier;\n onChange?: (value: Identifier) => void;\n}\n\nexport function IdentifierInput(props: IdentifierInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Identifier): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <Group spacing=\"xs\" grow noWrap>\n <TextInput\n placeholder=\"System\"\n defaultValue={value?.system}\n onChange={(e) => setValueWrapper({ ...value, system: e.currentTarget.value })}\n />\n <TextInput\n placeholder=\"Value\"\n defaultValue={value?.value}\n onChange={(e) => setValueWrapper({ ...value, value: e.currentTarget.value })}\n />\n </Group>\n );\n}\n"],"names":[],"mappings":";;;AAUM,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAoB,EAAA;QAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,KAAC,CAAA,aAAA,CAAA,KAAK,EAAC,EAAA,OAAO,EAAC,IAAI,EAAC,IAAI,EAAA,IAAA,EAAC,MAAM,EAAA,IAAA,EAAA;AAC7B,QAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EACR,WAAW,EAAC,QAAQ,EACpB,YAAY,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,EAC3B,QAAQ,EAAE,CAAC,CAAC,KAAK,eAAe,iCAAM,KAAK,CAAA,EAAA,EAAE,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,IAAG,EAC7E,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EACR,EAAA,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,KAAK,EAC1B,QAAQ,EAAE,CAAC,CAAC,KAAK,eAAe,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,IAAG,EAC5E,CAAA,CACI,EACR;AACJ;;;;"}
package/dist/esm/Logo.js CHANGED
@@ -4,10 +4,10 @@ function Logo(props) {
4
4
  return (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 491 491", style: { width: props.size, height: props.size } },
5
5
  React.createElement("title", null, "Medplum Logo"),
6
6
  React.createElement("path", { fill: props.fill || '#ad7136', d: "M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z" }),
7
- React.createElement("path", { fill: props.fill || '#654b87', d: "M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z" }),
8
- React.createElement("path", { fill: props.fill || '#463068', d: "M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z" }),
9
- React.createElement("path", { fill: props.fill || '#70d65b', d: "M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z" }),
10
- React.createElement("path", { fill: props.fill || '#58b741', d: "M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z" })));
7
+ React.createElement("path", { fill: props.fill || '#946af9', d: "M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z" }),
8
+ React.createElement("path", { fill: props.fill || '#7857c5', d: "M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z" }),
9
+ React.createElement("path", { fill: props.fill || '#40bc26', d: "M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z" }),
10
+ React.createElement("path", { fill: props.fill || '#33961e', d: "M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z" })));
11
11
  }
12
12
 
13
13
  export { Logo };
@@ -1 +1 @@
1
- {"version":3,"file":"Logo.js","sources":["../../src/Logo.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface LogoProps {\n size: number;\n fill?: string;\n}\n\nexport function Logo(props: LogoProps): JSX.Element {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 491 491\" style={{ width: props.size, height: props.size }}>\n <title>Medplum Logo</title>\n <path fill={props.fill || '#ad7136'} d=\"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z\" />\n <path\n fill={props.fill || '#654b87'}\n d=\"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z\"\n />\n <path\n fill={props.fill || '#463068'}\n d=\"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z\"\n />\n <path\n fill={props.fill || '#70d65b'}\n d=\"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z\"\n />\n <path fill={props.fill || '#58b741'} d=\"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z\" />\n </svg>\n );\n}\n"],"names":[],"mappings":";;AAOM,SAAU,IAAI,CAAC,KAAgB,EAAA;IACnC,QACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,4BAA4B,EAAC,OAAO,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAA;QAC5G,KAA2B,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAA,cAAA,CAAA;QAC3B,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,EAAC,gEAAgE,EAAG,CAAA;QAC1G,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,kJAAkJ,EACpJ,CAAA;QACF,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,4FAA4F,EAC9F,CAAA;QACF,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,yEAAyE,EAC3E,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,EAAC,0DAA0D,EAAG,CAAA,CAChG,EACN;AACJ;;;;"}
1
+ {"version":3,"file":"Logo.js","sources":["../../src/Logo.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface LogoProps {\n size: number;\n fill?: string;\n}\n\nexport function Logo(props: LogoProps): JSX.Element {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 491 491\" style={{ width: props.size, height: props.size }}>\n <title>Medplum Logo</title>\n <path fill={props.fill || '#ad7136'} d=\"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z\" />\n <path\n fill={props.fill || '#946af9'}\n d=\"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z\"\n />\n <path\n fill={props.fill || '#7857c5'}\n d=\"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z\"\n />\n <path\n fill={props.fill || '#40bc26'}\n d=\"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z\"\n />\n <path fill={props.fill || '#33961e'} d=\"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z\" />\n </svg>\n );\n}\n"],"names":[],"mappings":";;AAOM,SAAU,IAAI,CAAC,KAAgB,EAAA;IACnC,QACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,4BAA4B,EAAC,OAAO,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAA;QAC5G,KAA2B,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAA,cAAA,CAAA;QAC3B,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,EAAC,gEAAgE,EAAG,CAAA;QAC1G,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,kJAAkJ,EACpJ,CAAA;QACF,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,4FAA4F,EAC9F,CAAA;QACF,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,yEAAyE,EAC3E,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,EAAC,0DAA0D,EAAG,CAAA,CAChG,EACN;AACJ;;;;"}
@@ -23,12 +23,14 @@ function PatientTimeline(props) {
23
23
  })),
24
24
  }), createCommunication: (resource, sender, text) => ({
25
25
  resourceType: 'Communication',
26
+ status: 'completed',
26
27
  subject: createReference(resource),
27
28
  sender: createReference(sender),
28
29
  sent: new Date().toISOString(),
29
30
  payload: [{ contentString: text }],
30
31
  }), createMedia: (resource, operator, content) => ({
31
32
  resourceType: 'Media',
33
+ status: 'completed',
32
34
  subject: createReference(resource),
33
35
  operator: createReference(operator),
34
36
  issued: new Date().toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"PatientTimeline.js","sources":["../../src/PatientTimeline.tsx"],"sourcesContent":["import { createReference, getReferenceString, ProfileResource } from '@medplum/core';\nimport { Attachment, Patient, Reference, Resource } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { ResourceTimeline } from './ResourceTimeline';\n\nexport interface PatientTimelineProps {\n patient: Patient | Reference<Patient>;\n}\n\nconst searches = [\n '$/_history',\n 'Communication?subject=$',\n 'Device?patient=$',\n 'DeviceRequest?patient=$',\n 'DiagnosticReport?subject=$',\n 'Media?subject=$',\n 'ServiceRequest?subject=$',\n];\n\nexport function PatientTimeline(props: PatientTimelineProps): JSX.Element {\n return (\n <ResourceTimeline\n value={props.patient}\n buildSearchRequests={(resource: Resource) => ({\n resourceType: 'Bundle',\n type: 'batch',\n entry: searches.map((search) => ({\n request: {\n method: 'GET',\n url: search.replaceAll('$', getReferenceString(resource)),\n },\n })),\n })}\n createCommunication={(resource: Patient, sender: ProfileResource, text: string) => ({\n resourceType: 'Communication',\n subject: createReference(resource),\n sender: createReference(sender),\n sent: new Date().toISOString(),\n payload: [{ contentString: text }],\n })}\n createMedia={(resource: Patient, operator: ProfileResource, content: Attachment) => ({\n resourceType: 'Media',\n subject: createReference(resource),\n operator: createReference(operator),\n issued: new Date().toISOString(),\n content,\n })}\n />\n );\n}\n"],"names":[],"mappings":";;;;AASA,MAAM,QAAQ,GAAG;IACf,YAAY;IACZ,yBAAyB;IACzB,kBAAkB;IAClB,yBAAyB;IACzB,4BAA4B;IAC5B,iBAAiB;IACjB,0BAA0B;CAC3B,CAAC;AAEI,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,gBAAgB,EACf,EAAA,KAAK,EAAE,KAAK,CAAC,OAAO,EACpB,mBAAmB,EAAE,CAAC,QAAkB,MAAM;AAC5C,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC/B,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC1D,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA,CAAC,EACF,mBAAmB,EAAE,CAAC,QAAiB,EAAE,MAAuB,EAAE,IAAY,MAAM;AAClF,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;AAClC,YAAA,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC9B,YAAA,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA,CAAC,EACF,WAAW,EAAE,CAAC,QAAiB,EAAE,QAAyB,EAAE,OAAmB,MAAM;AACnF,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;AAClC,YAAA,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;AACnC,YAAA,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAChC,OAAO;SACR,CAAC,EAAA,CACF,EACF;AACJ;;;;"}
1
+ {"version":3,"file":"PatientTimeline.js","sources":["../../src/PatientTimeline.tsx"],"sourcesContent":["import { createReference, getReferenceString, ProfileResource } from '@medplum/core';\nimport { Attachment, Patient, Reference, Resource } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { ResourceTimeline } from './ResourceTimeline';\n\nexport interface PatientTimelineProps {\n patient: Patient | Reference<Patient>;\n}\n\nconst searches = [\n '$/_history',\n 'Communication?subject=$',\n 'Device?patient=$',\n 'DeviceRequest?patient=$',\n 'DiagnosticReport?subject=$',\n 'Media?subject=$',\n 'ServiceRequest?subject=$',\n];\n\nexport function PatientTimeline(props: PatientTimelineProps): JSX.Element {\n return (\n <ResourceTimeline\n value={props.patient}\n buildSearchRequests={(resource: Resource) => ({\n resourceType: 'Bundle',\n type: 'batch',\n entry: searches.map((search) => ({\n request: {\n method: 'GET',\n url: search.replaceAll('$', getReferenceString(resource)),\n },\n })),\n })}\n createCommunication={(resource: Patient, sender: ProfileResource, text: string) => ({\n resourceType: 'Communication',\n status: 'completed',\n subject: createReference(resource),\n sender: createReference(sender),\n sent: new Date().toISOString(),\n payload: [{ contentString: text }],\n })}\n createMedia={(resource: Patient, operator: ProfileResource, content: Attachment) => ({\n resourceType: 'Media',\n status: 'completed',\n subject: createReference(resource),\n operator: createReference(operator),\n issued: new Date().toISOString(),\n content,\n })}\n />\n );\n}\n"],"names":[],"mappings":";;;;AASA,MAAM,QAAQ,GAAG;IACf,YAAY;IACZ,yBAAyB;IACzB,kBAAkB;IAClB,yBAAyB;IACzB,4BAA4B;IAC5B,iBAAiB;IACjB,0BAA0B;CAC3B,CAAC;AAEI,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,gBAAgB,EACf,EAAA,KAAK,EAAE,KAAK,CAAC,OAAO,EACpB,mBAAmB,EAAE,CAAC,QAAkB,MAAM;AAC5C,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC/B,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC1D,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA,CAAC,EACF,mBAAmB,EAAE,CAAC,QAAiB,EAAE,MAAuB,EAAE,IAAY,MAAM;AAClF,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;AAClC,YAAA,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC9B,YAAA,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA,CAAC,EACF,WAAW,EAAE,CAAC,QAAiB,EAAE,QAAyB,EAAE,OAAmB,MAAM;AACnF,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;AAClC,YAAA,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;AACnC,YAAA,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAChC,OAAO;SACR,CAAC,EAAA,CACF,EACF;AACJ;;;;"}
@@ -1,6 +1,6 @@
1
+ import { Group } from '@mantine/core';
1
2
  import React, { useState } from 'react';
2
- import { Input } from './Input.js';
3
- import { InputRow } from './InputRow.js';
3
+ import { DateTimeInput } from './DateTimeInput.js';
4
4
 
5
5
  function PeriodInput(props) {
6
6
  const [value, setValue] = useState(props.defaultValue);
@@ -10,9 +10,9 @@ function PeriodInput(props) {
10
10
  props.onChange(newValue);
11
11
  }
12
12
  }
13
- return (React.createElement(InputRow, null,
14
- React.createElement(Input, { type: "datetime-local", placeholder: "Start", defaultValue: value === null || value === void 0 ? void 0 : value.start, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { start: newValue })) }),
15
- React.createElement(Input, { type: "datetime-local", placeholder: "End", defaultValue: value === null || value === void 0 ? void 0 : value.end, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { end: newValue })) })));
13
+ return (React.createElement(Group, { spacing: "xs", grow: true, noWrap: true },
14
+ React.createElement(DateTimeInput, { name: props.name + '.start', placeholder: "Start", defaultValue: value === null || value === void 0 ? void 0 : value.start, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { start: newValue })) }),
15
+ React.createElement(DateTimeInput, { name: props.name + '.end', placeholder: "End", defaultValue: value === null || value === void 0 ? void 0 : value.end, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { end: newValue })) })));
16
16
  }
17
17
 
18
18
  export { PeriodInput };
@@ -1 +1 @@
1
- {"version":3,"file":"PeriodInput.js","sources":["../../src/PeriodInput.tsx"],"sourcesContent":["import { Period } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\n\nexport interface PeriodInputProps {\n name: string;\n defaultValue?: Period;\n onChange?: (value: Period) => void;\n}\n\nexport function PeriodInput(props: PeriodInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Period): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <InputRow>\n <Input\n type=\"datetime-local\"\n placeholder=\"Start\"\n defaultValue={value?.start}\n onChange={(newValue) => setValueWrapper({ ...value, start: newValue })}\n />\n <Input\n type=\"datetime-local\"\n placeholder=\"End\"\n defaultValue={value?.end}\n onChange={(newValue) => setValueWrapper({ ...value, end: newValue })}\n />\n </InputRow>\n );\n}\n"],"names":[],"mappings":";;;;AAWM,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAgB,EAAA;QACvC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,oBAAC,QAAQ,EAAA,IAAA;AACP,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAC,gBAAgB,EACrB,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,KAAK,EAC1B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,KAAK,CAAE,EAAA,EAAA,KAAK,EAAE,QAAQ,IAAG,EACtE,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EACJ,EAAA,IAAI,EAAC,gBAAgB,EACrB,WAAW,EAAC,KAAK,EACjB,YAAY,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,GAAG,EACxB,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,KAAK,CAAA,EAAA,EAAE,GAAG,EAAE,QAAQ,IAAG,EACpE,CAAA,CACO,EACX;AACJ;;;;"}
1
+ {"version":3,"file":"PeriodInput.js","sources":["../../src/PeriodInput.tsx"],"sourcesContent":["import { Group } from '@mantine/core';\nimport { Period } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { DateTimeInput } from './DateTimeInput';\n\nexport interface PeriodInputProps {\n name: string;\n defaultValue?: Period;\n onChange?: (value: Period) => void;\n}\n\nexport function PeriodInput(props: PeriodInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Period): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <Group spacing=\"xs\" grow noWrap>\n <DateTimeInput\n name={props.name + '.start'}\n placeholder=\"Start\"\n defaultValue={value?.start}\n onChange={(newValue) => setValueWrapper({ ...value, start: newValue })}\n />\n <DateTimeInput\n name={props.name + '.end'}\n placeholder=\"End\"\n defaultValue={value?.end}\n onChange={(newValue) => setValueWrapper({ ...value, end: newValue })}\n />\n </Group>\n );\n}\n"],"names":[],"mappings":";;;;AAWM,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAgB,EAAA;QACvC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,KAAC,CAAA,aAAA,CAAA,KAAK,EAAC,EAAA,OAAO,EAAC,IAAI,EAAC,IAAI,EAAA,IAAA,EAAC,MAAM,EAAA,IAAA,EAAA;AAC7B,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EACZ,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,EAC3B,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,KAAK,EAC1B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,iCAAM,KAAK,CAAA,EAAA,EAAE,KAAK,EAAE,QAAQ,IAAG,EACtE,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EACZ,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,MAAM,EACzB,WAAW,EAAC,KAAK,EACjB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,GAAG,EACxB,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,iCAAM,KAAK,CAAA,EAAA,EAAE,GAAG,EAAE,QAAQ,IAAG,EACpE,CAAA,CACI,EACR;AACJ;;;;"}
@@ -1,16 +1,13 @@
1
+ import { TextInput, Button, NativeSelect } from '@mantine/core';
1
2
  import { getReferenceString } from '@medplum/core';
2
3
  import React, { useState, useRef, useEffect } from 'react';
3
- import { Button } from './Button.js';
4
4
  import { Form } from './Form.js';
5
- import { FormSection } from './FormSection.js';
6
- import { Input } from './Input.js';
7
5
  import { useMedplum } from './MedplumProvider.js';
8
6
  import { ReferenceDisplay } from './ReferenceDisplay.js';
9
7
  import { setPropertyValue } from './ResourceForm.js';
10
8
  import { ResourceInput } from './ResourceInput.js';
11
9
  import { ResourcePropertyDisplay, getValueAndType } from './ResourcePropertyDisplay.js';
12
10
  import { ResourcePropertyInput } from './ResourcePropertyInput.js';
13
- import { Select } from './Select.js';
14
11
  import { useResource } from './useResource.js';
15
12
  import { killEvent } from './utils/dom.js';
16
13
 
@@ -49,10 +46,9 @@ function PlanDefinitionBuilder(props) {
49
46
  }
50
47
  return (React.createElement("div", { className: "medplum-questionnaire-builder" },
51
48
  React.createElement(Form, { testid: "questionnaire-form", onSubmit: () => props.onSubmit(value) },
52
- React.createElement(FormSection, { title: "Plan Title", htmlFor: "title" },
53
- React.createElement(Input, { defaultValue: value.title, onChange: (newValue) => changeProperty('title', newValue) })),
49
+ React.createElement(TextInput, { label: "Plan Title", defaultValue: value.title, onChange: (e) => changeProperty('title', e.currentTarget.value) }),
54
50
  React.createElement(ActionArrayBuilder, { actions: value.action || [], selectedKey: selectedKey, setSelectedKey: setSelectedKey, hoverKey: hoverKey, setHoverKey: setHoverKey, onChange: (x) => changeProperty('action', x) }),
55
- React.createElement(Button, { type: "submit", size: "large" }, "Save"))));
51
+ React.createElement(Button, { type: "submit" }, "Save"))));
56
52
  }
57
53
  function ActionArrayBuilder(props) {
58
54
  const actionsRef = useRef();
@@ -124,17 +120,9 @@ function ActionEditor(props) {
124
120
  props.onChange(Object.assign(Object.assign({}, action), { [property]: value }));
125
121
  }
126
122
  return (React.createElement(React.Fragment, null,
127
- React.createElement(FormSection, { title: "Title", htmlFor: `actionTitle-${action.id}` },
128
- React.createElement(Input, { name: `actionTitle-${action.id}`, defaultValue: action.title, onChange: (newValue) => changeProperty('title', newValue) })),
129
- React.createElement(FormSection, { title: "Description", htmlFor: `actionDescription-${action.id}` },
130
- React.createElement(Input, { name: `actionDescription-${action.id}`, defaultValue: action.description, onChange: (newValue) => changeProperty('description', newValue) })),
131
- React.createElement(FormSection, { title: "Type of Action", description: "The type of the action to be performed.", htmlFor: `actionType-${action.id}` },
132
- React.createElement(Select, { name: `actionType-${action.id}`, defaultValue: actionType, onChange: setActionType },
133
- React.createElement("option", null),
134
- React.createElement("option", { value: "appointment" }, "Appointment"),
135
- React.createElement("option", { value: "lab" }, "Lab"),
136
- React.createElement("option", { value: "questionnaire" }, "Questionnaire"),
137
- React.createElement("option", { value: "task" }, "Task"))),
123
+ React.createElement(TextInput, { name: `actionTitle-${action.id}`, label: "Title", defaultValue: action.title, onChange: (e) => changeProperty('title', e.currentTarget.value) }),
124
+ React.createElement(TextInput, { name: `actionDescription-${action.id}`, label: "Description", defaultValue: action.description, onChange: (e) => changeProperty('description', e.currentTarget.value) }),
125
+ React.createElement(NativeSelect, { label: "Type of Action", description: "The type of the action to be performed.", name: `actionType-${action.id}`, defaultValue: actionType, onChange: (e) => setActionType(e.currentTarget.value), data: ['', 'appointment', 'lab', 'questionnaire', 'task'] }),
138
126
  action.action && action.action.length > 0 && (React.createElement(ActionArrayBuilder, { actions: action.action, selectedKey: props.selectedKey, setSelectedKey: props.setSelectedKey, hoverKey: props.hoverKey, setHoverKey: props.setHoverKey, onChange: (x) => changeProperty('action', x) })),
139
127
  (() => {
140
128
  switch (actionType) {
@@ -150,23 +138,23 @@ function ActionEditor(props) {
150
138
  return null;
151
139
  }
152
140
  })(),
153
- React.createElement(FormSection, { title: "Timing", description: "When the action should take place.", htmlFor: 'timing-' + action.id },
154
- React.createElement(ActionTimingInput, { name: 'timing-' + action.id, action: action, onChange: props.onChange }))));
141
+ React.createElement("p", null, "Timing"),
142
+ React.createElement("p", null, "When the action should take place."),
143
+ React.createElement(ActionTimingInput, { name: 'timing-' + action.id, action: action, onChange: props.onChange })));
155
144
  }
156
145
  function ActionResourceTypeBuilder(props) {
157
146
  const { id, definitionCanonical } = props.action;
158
147
  const reference = (definitionCanonical === null || definitionCanonical === void 0 ? void 0 : definitionCanonical.startsWith(props.resourceType + '/'))
159
148
  ? { reference: definitionCanonical }
160
149
  : undefined;
161
- return (React.createElement(FormSection, { title: props.title, description: props.description, htmlFor: id },
162
- React.createElement(ResourceInput, { name: id, resourceType: props.resourceType, defaultValue: reference, loadOnFocus: true, onChange: (newValue) => {
163
- if (newValue) {
164
- props.onChange(Object.assign(Object.assign({}, props.action), { definitionCanonical: getReferenceString(newValue) }));
165
- }
166
- else {
167
- props.onChange(Object.assign(Object.assign({}, props.action), { definitionCanonical: undefined }));
168
- }
169
- } })));
150
+ return (React.createElement(ResourceInput, { name: id, resourceType: props.resourceType, defaultValue: reference, loadOnFocus: true, onChange: (newValue) => {
151
+ if (newValue) {
152
+ props.onChange(Object.assign(Object.assign({}, props.action), { definitionCanonical: getReferenceString(newValue) }));
153
+ }
154
+ else {
155
+ props.onChange(Object.assign(Object.assign({}, props.action), { definitionCanonical: undefined }));
156
+ }
157
+ } }));
170
158
  }
171
159
  function ActionTimingInput(props) {
172
160
  const value = props.action;
@@ -1 +1 @@
1
- {"version":3,"file":"PlanDefinitionBuilder.js","sources":["../../src/PlanDefinitionBuilder.tsx"],"sourcesContent":["import { getReferenceString, IndexedStructureDefinition, PropertyType } from '@medplum/core';\nimport { ElementDefinition, PlanDefinition, PlanDefinitionAction, Reference } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Button } from './Button';\nimport { Form } from './Form';\nimport { FormSection } from './FormSection';\nimport { Input } from './Input';\nimport { useMedplum } from './MedplumProvider';\nimport { ReferenceDisplay } from './ReferenceDisplay';\nimport { setPropertyValue } from './ResourceForm';\nimport { ResourceInput } from './ResourceInput';\nimport { getValueAndType, ResourcePropertyDisplay } from './ResourcePropertyDisplay';\nimport { ResourcePropertyInput } from './ResourcePropertyInput';\nimport { Select } from './Select';\nimport { useResource } from './useResource';\nimport { killEvent } from './utils/dom';\n\nexport interface PlanDefinitionBuilderProps {\n value: PlanDefinition | Reference<PlanDefinition>;\n onSubmit: (result: PlanDefinition) => void;\n}\n\nexport function PlanDefinitionBuilder(props: PlanDefinitionBuilderProps): JSX.Element | null {\n const medplum = useMedplum();\n const defaultValue = useResource(props.value);\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>(undefined);\n const [selectedKey, setSelectedKey] = useState<string>();\n const [hoverKey, setHoverKey] = useState<string>();\n const [value, setValue] = useState<PlanDefinition>();\n\n function handleDocumentMouseOver(): void {\n setHoverKey(undefined);\n }\n\n function handleDocumentClick(): void {\n setSelectedKey(undefined);\n }\n\n const valueRef = useRef<PlanDefinition>();\n valueRef.current = value;\n\n useEffect(() => {\n medplum.requestSchema('PlanDefinition').then(setSchema).catch(console.log);\n }, [medplum]);\n\n useEffect(() => {\n setValue(ensurePlanDefinitionKeys(defaultValue ?? { resourceType: 'PlanDefinition' }));\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 function changeProperty(property: string, newValue: any): void {\n setValue({\n ...valueRef.current,\n [property]: newValue,\n } as PlanDefinition);\n }\n\n return (\n <div className=\"medplum-questionnaire-builder\">\n <Form testid=\"questionnaire-form\" onSubmit={() => props.onSubmit(value)}>\n <FormSection title=\"Plan Title\" htmlFor=\"title\">\n <Input defaultValue={value.title} onChange={(newValue) => changeProperty('title', newValue)} />\n </FormSection>\n <ActionArrayBuilder\n actions={value.action || []}\n selectedKey={selectedKey}\n setSelectedKey={setSelectedKey}\n hoverKey={hoverKey}\n setHoverKey={setHoverKey}\n onChange={(x) => changeProperty('action', x)}\n />\n <Button type=\"submit\" size=\"large\">\n Save\n </Button>\n </Form>\n </div>\n );\n}\n\ninterface ActionArrayBuilderProps {\n actions: PlanDefinitionAction[];\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (actions: PlanDefinitionAction[]) => void;\n}\n\nfunction ActionArrayBuilder(props: ActionArrayBuilderProps): JSX.Element {\n const actionsRef = useRef<PlanDefinitionAction[]>();\n actionsRef.current = props.actions;\n\n function changeAction(changedAction: PlanDefinitionAction): void {\n props.onChange(\n (actionsRef.current as PlanDefinition[]).map((i) => (i.id === changedAction.id ? changedAction : i))\n );\n }\n\n function addAction(addedAction: PlanDefinitionAction): void {\n props.onChange([...(actionsRef.current as PlanDefinition[]), addedAction]);\n props.setSelectedKey(addedAction.id);\n }\n\n function removeAction(removedAction: PlanDefinitionAction): void {\n props.onChange((actionsRef.current as PlanDefinition[]).filter((i) => i !== removedAction));\n }\n\n return (\n <div className=\"section\">\n {props.actions.map((action) => (\n <div key={action.id}>\n <ActionBuilder\n action={action}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={changeAction}\n onRemove={() => removeAction(action)}\n />\n </div>\n ))}\n <div className=\"bottom-actions\">\n <a\n href=\"#\"\n onClick={(e) => {\n killEvent(e);\n addAction({ id: generateId() });\n }}\n >\n Add action\n </a>\n </div>\n </div>\n );\n}\n\ninterface ActionBuilderProps {\n action: PlanDefinitionAction;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (action: PlanDefinitionAction) => void;\n onRemove: () => void;\n}\n\nfunction ActionBuilder(props: ActionBuilderProps): JSX.Element {\n const { action } = props;\n const actionType = getInitialActionType(action);\n const editing = props.selectedKey === props.action.id;\n const hovering = props.hoverKey === props.action.id;\n\n function onClick(e: React.SyntheticEvent): void {\n e.stopPropagation();\n props.setSelectedKey(props.action.id);\n }\n\n function onHover(e: React.SyntheticEvent): void {\n killEvent(e);\n props.setHoverKey(props.action.id);\n }\n\n const className = editing ? 'section editing' : hovering ? 'section hovering' : 'section';\n return (\n <div data-testid={action.id} className={className} onClick={onClick} onMouseOver={onHover}>\n {editing ? (\n <ActionEditor\n action={action}\n actionType={actionType}\n onChange={props.onChange}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onRemove={props.onRemove}\n />\n ) : (\n <ActionDisplay action={action} actionType={actionType} />\n )}\n <div className=\"bottom-actions\">\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n props.onRemove();\n }}\n >\n Remove\n </a>\n </div>\n </div>\n );\n}\n\nconst timingProperty: ElementDefinition = {\n path: 'PlanDefinition.action.timing[x]',\n min: 0,\n max: '1',\n type: [{ code: 'dateTime' }, { code: 'Period' }, { code: 'Range' }, { code: 'Timing' }],\n};\n\ninterface ActionDisplayProps {\n action: PlanDefinitionAction;\n actionType: string | undefined;\n}\n\nfunction ActionDisplay(props: ActionDisplayProps): JSX.Element {\n const { action, actionType } = props;\n const [propertyValue, propertyType] = getActionTiming(action);\n return (\n <div>\n <div>\n {action.title || 'Untitled'} {actionType && `(${actionType})`}\n </div>\n {action.definitionCanonical && (\n <div>\n <ReferenceDisplay value={{ reference: action.definitionCanonical }} />\n </div>\n )}\n {propertyValue && (\n <div>\n <ResourcePropertyDisplay property={timingProperty} propertyType={propertyType} value={propertyValue} />\n </div>\n )}\n </div>\n );\n}\n\ninterface ActionEditorProps {\n action: PlanDefinitionAction;\n actionType: string | undefined;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (action: PlanDefinitionAction) => void;\n onRemove: () => void;\n}\n\nfunction ActionEditor(props: ActionEditorProps): JSX.Element {\n const { action } = props;\n const [actionType, setActionType] = useState<string | undefined>(props.actionType);\n\n function changeProperty(property: string, value: any): void {\n props.onChange({\n ...action,\n [property]: value,\n } as PlanDefinitionAction);\n }\n\n return (\n <>\n <FormSection title=\"Title\" htmlFor={`actionTitle-${action.id}`}>\n <Input\n name={`actionTitle-${action.id}`}\n defaultValue={action.title}\n onChange={(newValue) => changeProperty('title', newValue)}\n />\n </FormSection>\n <FormSection title=\"Description\" htmlFor={`actionDescription-${action.id}`}>\n <Input\n name={`actionDescription-${action.id}`}\n defaultValue={action.description}\n onChange={(newValue) => changeProperty('description', newValue)}\n />\n </FormSection>\n <FormSection\n title=\"Type of Action\"\n description=\"The type of the action to be performed.\"\n htmlFor={`actionType-${action.id}`}\n >\n <Select name={`actionType-${action.id}`} defaultValue={actionType} onChange={setActionType}>\n <option></option>\n <option value=\"appointment\">Appointment</option>\n <option value=\"lab\">Lab</option>\n <option value=\"questionnaire\">Questionnaire</option>\n <option value=\"task\">Task</option>\n </Select>\n </FormSection>\n {action.action && action.action.length > 0 && (\n <ActionArrayBuilder\n actions={action.action}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={(x) => changeProperty('action', x)}\n />\n )}\n {(() => {\n switch (actionType) {\n case 'appointment':\n return (\n <ActionResourceTypeBuilder\n title=\"Appointment\"\n description=\"The subject must schedule an appointment from the schedule.\"\n resourceType=\"Schedule\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'lab':\n return (\n <ActionResourceTypeBuilder\n title=\"Lab\"\n description=\"The subject must complete the following lab panel.\"\n resourceType=\"ActivityDefinition\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'questionnaire':\n return (\n <ActionResourceTypeBuilder\n title=\"Questionnaire\"\n description=\"The subject must complete the selected questionnaire.\"\n resourceType=\"Questionnaire\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'task':\n return (\n <ActionResourceTypeBuilder\n title=\"Task\"\n description=\"The subject must complete the following task.\"\n resourceType=\"ActivityDefinition\"\n action={action}\n onChange={props.onChange}\n />\n );\n default:\n return null;\n }\n })()}\n <FormSection title=\"Timing\" description=\"When the action should take place.\" htmlFor={'timing-' + action.id}>\n <ActionTimingInput name={'timing-' + action.id} action={action} onChange={props.onChange} />\n </FormSection>\n </>\n );\n}\n\ninterface ActionResourceTypeBuilderProps {\n action: PlanDefinitionAction;\n title: string;\n description: string;\n resourceType: string;\n onChange: (action: PlanDefinitionAction) => void;\n}\n\nfunction ActionResourceTypeBuilder(props: ActionResourceTypeBuilderProps): JSX.Element {\n const { id, definitionCanonical } = props.action;\n const reference = definitionCanonical?.startsWith(props.resourceType + '/')\n ? { reference: definitionCanonical }\n : undefined;\n return (\n <FormSection title={props.title} description={props.description} htmlFor={id}>\n <ResourceInput\n name={id as string}\n resourceType={props.resourceType}\n defaultValue={reference}\n loadOnFocus={true}\n onChange={(newValue) => {\n if (newValue) {\n props.onChange({ ...props.action, definitionCanonical: getReferenceString(newValue) });\n } else {\n props.onChange({ ...props.action, definitionCanonical: undefined });\n }\n }}\n />\n </FormSection>\n );\n}\n\ninterface ActionTimingInputProps {\n name: string;\n action: PlanDefinitionAction;\n onChange: (action: PlanDefinitionAction) => void;\n}\n\nfunction ActionTimingInput(props: ActionTimingInputProps): JSX.Element {\n const value = props.action;\n const key = 'timing';\n const [propertyValue, propertyType] = getActionTiming(value);\n return (\n <ResourcePropertyInput\n property={timingProperty}\n name=\"timing[x]\"\n defaultValue={propertyValue}\n defaultPropertyType={propertyType}\n onChange={(newValue: any, propName?: string) => {\n props.onChange(setPropertyValue(value, key, propName ?? key, timingProperty, newValue));\n }}\n />\n );\n}\n\nfunction getInitialActionType(action: PlanDefinitionAction): string | undefined {\n if (action.definitionCanonical?.startsWith('Schedule')) {\n return 'appointment';\n }\n\n if (action.definitionCanonical?.startsWith('Questionnaire/')) {\n return 'questionnaire';\n }\n\n if (action.definitionCanonical?.startsWith('ActivityDefinition/')) {\n return 'task';\n }\n\n return undefined;\n}\n\nfunction getActionTiming(action: PlanDefinitionAction): [any, PropertyType] {\n return getValueAndType({ type: 'PlanDefinitionAction', value: action }, 'timing');\n}\n\nlet nextId = 1;\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(existing?: string): string {\n if (existing) {\n if (existing.startsWith('id-')) {\n const existingNum = parseInt(existing.substring(3));\n if (!isNaN(existingNum)) {\n nextId = Math.max(nextId, existingNum + 1);\n }\n }\n return existing;\n }\n return 'id-' + nextId++;\n}\n\nfunction ensurePlanDefinitionKeys(planDefinition: PlanDefinition): PlanDefinition {\n return {\n ...planDefinition,\n action: ensurePlanDefinitionActionKeys(planDefinition.action),\n } as PlanDefinition;\n}\n\nfunction ensurePlanDefinitionActionKeys(\n actions: PlanDefinitionAction[] | undefined\n): PlanDefinitionAction[] | undefined {\n if (!actions) {\n return undefined;\n }\n return actions.map((action) => ({\n ...action,\n id: generateId(action.id),\n action: ensurePlanDefinitionActionKeys(action.action),\n }));\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlanDefinitionBuilder.js","sources":["../../src/PlanDefinitionBuilder.tsx"],"sourcesContent":["import { Button, NativeSelect, TextInput } from '@mantine/core';\nimport { getReferenceString, IndexedStructureDefinition, PropertyType } from '@medplum/core';\nimport { ElementDefinition, PlanDefinition, PlanDefinitionAction, Reference, ResourceType } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Form } from './Form';\nimport { useMedplum } from './MedplumProvider';\nimport { ReferenceDisplay } from './ReferenceDisplay';\nimport { setPropertyValue } from './ResourceForm';\nimport { ResourceInput } from './ResourceInput';\nimport { getValueAndType, ResourcePropertyDisplay } from './ResourcePropertyDisplay';\nimport { ResourcePropertyInput } from './ResourcePropertyInput';\nimport { useResource } from './useResource';\nimport { killEvent } from './utils/dom';\n\nexport interface PlanDefinitionBuilderProps {\n value: PlanDefinition | Reference<PlanDefinition>;\n onSubmit: (result: PlanDefinition) => void;\n}\n\nexport function PlanDefinitionBuilder(props: PlanDefinitionBuilderProps): JSX.Element | null {\n const medplum = useMedplum();\n const defaultValue = useResource(props.value);\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>(undefined);\n const [selectedKey, setSelectedKey] = useState<string>();\n const [hoverKey, setHoverKey] = useState<string>();\n const [value, setValue] = useState<PlanDefinition>();\n\n function handleDocumentMouseOver(): void {\n setHoverKey(undefined);\n }\n\n function handleDocumentClick(): void {\n setSelectedKey(undefined);\n }\n\n const valueRef = useRef<PlanDefinition>();\n valueRef.current = value;\n\n useEffect(() => {\n medplum.requestSchema('PlanDefinition').then(setSchema).catch(console.log);\n }, [medplum]);\n\n useEffect(() => {\n setValue(ensurePlanDefinitionKeys(defaultValue ?? { resourceType: 'PlanDefinition' }));\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 function changeProperty(property: string, newValue: any): void {\n setValue({\n ...valueRef.current,\n [property]: newValue,\n } as PlanDefinition);\n }\n\n return (\n <div className=\"medplum-questionnaire-builder\">\n <Form testid=\"questionnaire-form\" onSubmit={() => props.onSubmit(value)}>\n <TextInput\n label=\"Plan Title\"\n defaultValue={value.title}\n onChange={(e) => changeProperty('title', e.currentTarget.value)}\n />\n <ActionArrayBuilder\n actions={value.action || []}\n selectedKey={selectedKey}\n setSelectedKey={setSelectedKey}\n hoverKey={hoverKey}\n setHoverKey={setHoverKey}\n onChange={(x) => changeProperty('action', x)}\n />\n <Button type=\"submit\">Save</Button>\n </Form>\n </div>\n );\n}\n\ninterface ActionArrayBuilderProps {\n actions: PlanDefinitionAction[];\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (actions: PlanDefinitionAction[]) => void;\n}\n\nfunction ActionArrayBuilder(props: ActionArrayBuilderProps): JSX.Element {\n const actionsRef = useRef<PlanDefinitionAction[]>();\n actionsRef.current = props.actions;\n\n function changeAction(changedAction: PlanDefinitionAction): void {\n props.onChange(\n (actionsRef.current as PlanDefinition[]).map((i) => (i.id === changedAction.id ? changedAction : i))\n );\n }\n\n function addAction(addedAction: PlanDefinitionAction): void {\n props.onChange([...(actionsRef.current as PlanDefinition[]), addedAction]);\n props.setSelectedKey(addedAction.id);\n }\n\n function removeAction(removedAction: PlanDefinitionAction): void {\n props.onChange((actionsRef.current as PlanDefinition[]).filter((i) => i !== removedAction));\n }\n\n return (\n <div className=\"section\">\n {props.actions.map((action) => (\n <div key={action.id}>\n <ActionBuilder\n action={action}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={changeAction}\n onRemove={() => removeAction(action)}\n />\n </div>\n ))}\n <div className=\"bottom-actions\">\n <a\n href=\"#\"\n onClick={(e) => {\n killEvent(e);\n addAction({ id: generateId() });\n }}\n >\n Add action\n </a>\n </div>\n </div>\n );\n}\n\ninterface ActionBuilderProps {\n action: PlanDefinitionAction;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (action: PlanDefinitionAction) => void;\n onRemove: () => void;\n}\n\nfunction ActionBuilder(props: ActionBuilderProps): JSX.Element {\n const { action } = props;\n const actionType = getInitialActionType(action);\n const editing = props.selectedKey === props.action.id;\n const hovering = props.hoverKey === props.action.id;\n\n function onClick(e: React.SyntheticEvent): void {\n e.stopPropagation();\n props.setSelectedKey(props.action.id);\n }\n\n function onHover(e: React.SyntheticEvent): void {\n killEvent(e);\n props.setHoverKey(props.action.id);\n }\n\n const className = editing ? 'section editing' : hovering ? 'section hovering' : 'section';\n return (\n <div data-testid={action.id} className={className} onClick={onClick} onMouseOver={onHover}>\n {editing ? (\n <ActionEditor\n action={action}\n actionType={actionType}\n onChange={props.onChange}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onRemove={props.onRemove}\n />\n ) : (\n <ActionDisplay action={action} actionType={actionType} />\n )}\n <div className=\"bottom-actions\">\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n props.onRemove();\n }}\n >\n Remove\n </a>\n </div>\n </div>\n );\n}\n\nconst timingProperty: ElementDefinition = {\n path: 'PlanDefinition.action.timing[x]',\n min: 0,\n max: '1',\n type: [{ code: 'dateTime' }, { code: 'Period' }, { code: 'Range' }, { code: 'Timing' }],\n};\n\ninterface ActionDisplayProps {\n action: PlanDefinitionAction;\n actionType: string | undefined;\n}\n\nfunction ActionDisplay(props: ActionDisplayProps): JSX.Element {\n const { action, actionType } = props;\n const [propertyValue, propertyType] = getActionTiming(action);\n return (\n <div>\n <div>\n {action.title || 'Untitled'} {actionType && `(${actionType})`}\n </div>\n {action.definitionCanonical && (\n <div>\n <ReferenceDisplay value={{ reference: action.definitionCanonical }} />\n </div>\n )}\n {propertyValue && (\n <div>\n <ResourcePropertyDisplay property={timingProperty} propertyType={propertyType} value={propertyValue} />\n </div>\n )}\n </div>\n );\n}\n\ninterface ActionEditorProps {\n action: PlanDefinitionAction;\n actionType: string | undefined;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (action: PlanDefinitionAction) => void;\n onRemove: () => void;\n}\n\nfunction ActionEditor(props: ActionEditorProps): JSX.Element {\n const { action } = props;\n const [actionType, setActionType] = useState<string | undefined>(props.actionType);\n\n function changeProperty(property: string, value: any): void {\n props.onChange({\n ...action,\n [property]: value,\n } as PlanDefinitionAction);\n }\n\n return (\n <>\n <TextInput\n name={`actionTitle-${action.id}`}\n label=\"Title\"\n defaultValue={action.title}\n onChange={(e) => changeProperty('title', e.currentTarget.value)}\n />\n <TextInput\n name={`actionDescription-${action.id}`}\n label=\"Description\"\n defaultValue={action.description}\n onChange={(e) => changeProperty('description', e.currentTarget.value)}\n />\n <NativeSelect\n label=\"Type of Action\"\n description=\"The type of the action to be performed.\"\n name={`actionType-${action.id}`}\n defaultValue={actionType}\n onChange={(e) => setActionType(e.currentTarget.value)}\n data={['', 'appointment', 'lab', 'questionnaire', 'task']}\n />\n {action.action && action.action.length > 0 && (\n <ActionArrayBuilder\n actions={action.action}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={(x) => changeProperty('action', x)}\n />\n )}\n {(() => {\n switch (actionType) {\n case 'appointment':\n return (\n <ActionResourceTypeBuilder\n title=\"Appointment\"\n description=\"The subject must schedule an appointment from the schedule.\"\n resourceType=\"Schedule\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'lab':\n return (\n <ActionResourceTypeBuilder\n title=\"Lab\"\n description=\"The subject must complete the following lab panel.\"\n resourceType=\"ActivityDefinition\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'questionnaire':\n return (\n <ActionResourceTypeBuilder\n title=\"Questionnaire\"\n description=\"The subject must complete the selected questionnaire.\"\n resourceType=\"Questionnaire\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'task':\n return (\n <ActionResourceTypeBuilder\n title=\"Task\"\n description=\"The subject must complete the following task.\"\n resourceType=\"ActivityDefinition\"\n action={action}\n onChange={props.onChange}\n />\n );\n default:\n return null;\n }\n })()}\n <p>Timing</p>\n <p>When the action should take place.</p>\n <ActionTimingInput name={'timing-' + action.id} action={action} onChange={props.onChange} />\n </>\n );\n}\n\ninterface ActionResourceTypeBuilderProps {\n action: PlanDefinitionAction;\n title: string;\n description: string;\n resourceType: ResourceType;\n onChange: (action: PlanDefinitionAction) => void;\n}\n\nfunction ActionResourceTypeBuilder(props: ActionResourceTypeBuilderProps): JSX.Element {\n const { id, definitionCanonical } = props.action;\n const reference = definitionCanonical?.startsWith(props.resourceType + '/')\n ? { reference: definitionCanonical }\n : undefined;\n return (\n <ResourceInput\n name={id as string}\n resourceType={props.resourceType}\n defaultValue={reference}\n loadOnFocus={true}\n onChange={(newValue) => {\n if (newValue) {\n props.onChange({ ...props.action, definitionCanonical: getReferenceString(newValue) });\n } else {\n props.onChange({ ...props.action, definitionCanonical: undefined });\n }\n }}\n />\n );\n}\n\ninterface ActionTimingInputProps {\n name: string;\n action: PlanDefinitionAction;\n onChange: (action: PlanDefinitionAction) => void;\n}\n\nfunction ActionTimingInput(props: ActionTimingInputProps): JSX.Element {\n const value = props.action;\n const key = 'timing';\n const [propertyValue, propertyType] = getActionTiming(value);\n return (\n <ResourcePropertyInput\n property={timingProperty}\n name=\"timing[x]\"\n defaultValue={propertyValue}\n defaultPropertyType={propertyType}\n onChange={(newValue: any, propName?: string) => {\n props.onChange(setPropertyValue(value, key, propName ?? key, timingProperty, newValue));\n }}\n />\n );\n}\n\nfunction getInitialActionType(action: PlanDefinitionAction): string | undefined {\n if (action.definitionCanonical?.startsWith('Schedule')) {\n return 'appointment';\n }\n\n if (action.definitionCanonical?.startsWith('Questionnaire/')) {\n return 'questionnaire';\n }\n\n if (action.definitionCanonical?.startsWith('ActivityDefinition/')) {\n return 'task';\n }\n\n return undefined;\n}\n\nfunction getActionTiming(action: PlanDefinitionAction): [any, PropertyType] {\n return getValueAndType({ type: 'PlanDefinitionAction', value: action }, 'timing');\n}\n\nlet nextId = 1;\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(existing?: string): string {\n if (existing) {\n if (existing.startsWith('id-')) {\n const existingNum = parseInt(existing.substring(3));\n if (!isNaN(existingNum)) {\n nextId = Math.max(nextId, existingNum + 1);\n }\n }\n return existing;\n }\n return 'id-' + nextId++;\n}\n\nfunction ensurePlanDefinitionKeys(planDefinition: PlanDefinition): PlanDefinition {\n return {\n ...planDefinition,\n action: ensurePlanDefinitionActionKeys(planDefinition.action),\n } as PlanDefinition;\n}\n\nfunction ensurePlanDefinitionActionKeys(\n actions: PlanDefinitionAction[] | undefined\n): PlanDefinitionAction[] | undefined {\n if (!actions) {\n return undefined;\n }\n return actions.map((action) => ({\n ...action,\n id: generateId(action.id),\n action: ensurePlanDefinitionActionKeys(action.action),\n }));\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
+ import { Group, NativeSelect, TextInput } from '@mantine/core';
1
2
  import React, { useState } from 'react';
2
- import { Input } from './Input.js';
3
- import { InputRow } from './InputRow.js';
4
- import { Select } from './Select.js';
5
3
 
6
4
  function QuantityInput(props) {
7
5
  var _a;
@@ -12,15 +10,10 @@ function QuantityInput(props) {
12
10
  props.onChange(newValue);
13
11
  }
14
12
  }
15
- return (React.createElement(InputRow, null,
16
- React.createElement(Select, { style: { width: 80 }, testid: props.name + '-comparator', defaultValue: value === null || value === void 0 ? void 0 : value.comparator, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { comparator: newValue })) },
17
- React.createElement("option", null),
18
- React.createElement("option", null, "<"),
19
- React.createElement("option", null, "<="),
20
- React.createElement("option", null, ">="),
21
- React.createElement("option", null, ">")),
22
- React.createElement(Input, { name: props.name, type: "number", step: "any", placeholder: "Value", defaultValue: (_a = value === null || value === void 0 ? void 0 : value.value) === null || _a === void 0 ? void 0 : _a.toString(), onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { value: tryParseNumber(newValue) })) }),
23
- React.createElement(Input, { placeholder: "Unit", defaultValue: value === null || value === void 0 ? void 0 : value.unit, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { unit: newValue })) })));
13
+ return (React.createElement(Group, { spacing: "xs", grow: true, noWrap: true },
14
+ React.createElement(NativeSelect, { style: { width: 80 }, "data-testid": props.name + '-comparator', defaultValue: value === null || value === void 0 ? void 0 : value.comparator, data: ['', '<', '<=', '>=', '>'], onChange: (e) => setValueWrapper(Object.assign(Object.assign({}, value), { comparator: e.currentTarget.value })) }),
15
+ React.createElement(TextInput, { id: props.name, name: props.name, "data-testid": props.name, type: "number", step: "any", placeholder: "Value", defaultValue: (_a = value === null || value === void 0 ? void 0 : value.value) === null || _a === void 0 ? void 0 : _a.toString(), onChange: (e) => setValueWrapper(Object.assign(Object.assign({}, value), { value: tryParseNumber(e.currentTarget.value) })) }),
16
+ React.createElement(TextInput, { placeholder: "Unit", defaultValue: value === null || value === void 0 ? void 0 : value.unit, onChange: (e) => setValueWrapper(Object.assign(Object.assign({}, value), { unit: e.currentTarget.value })) })));
24
17
  }
25
18
  function tryParseNumber(str) {
26
19
  if (!str) {
@@ -1 +1 @@
1
- {"version":3,"file":"QuantityInput.js","sources":["../../src/QuantityInput.tsx"],"sourcesContent":["import { Quantity } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\nimport { Select } from './Select';\n\nexport interface QuantityInputProps {\n name: string;\n defaultValue?: Quantity;\n onChange?: (value: Quantity) => void;\n}\n\nexport function QuantityInput(props: QuantityInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Quantity): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <InputRow>\n <Select\n style={{ width: 80 }}\n testid={props.name + '-comparator'}\n defaultValue={value?.comparator}\n onChange={(newValue) =>\n setValueWrapper({\n ...value,\n comparator: newValue as '<' | '<=' | '>=' | '>',\n })\n }\n >\n <option></option>\n <option>&lt;</option>\n <option>&lt;=</option>\n <option>&gt;=</option>\n <option>&gt;</option>\n </Select>\n <Input\n name={props.name}\n type=\"number\"\n step=\"any\"\n placeholder=\"Value\"\n defaultValue={value?.value?.toString()}\n onChange={(newValue) =>\n setValueWrapper({\n ...value,\n value: tryParseNumber(newValue),\n })\n }\n />\n <Input\n placeholder=\"Unit\"\n defaultValue={value?.unit}\n onChange={(newValue) =>\n setValueWrapper({\n ...value,\n unit: newValue,\n })\n }\n />\n </InputRow>\n );\n}\n\nfunction tryParseNumber(str: string): number | undefined {\n if (!str) {\n return undefined;\n }\n return parseFloat(str);\n}\n"],"names":[],"mappings":";;;;;AAYM,SAAU,aAAa,CAAC,KAAyB,EAAA;;AACrD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAkB,EAAA;QACzC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,oBAAC,QAAQ,EAAA,IAAA;AACP,QAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EACL,EAAA,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACpB,MAAM,EAAE,KAAK,CAAC,IAAI,GAAG,aAAa,EAClC,YAAY,EAAE,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,UAAU,EAC/B,QAAQ,EAAE,CAAC,QAAQ,KACjB,eAAe,CACV,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KACR,UAAU,EAAE,QAAmC,EAC/C,CAAA,CAAA,EAAA;YAGJ,KAAiB,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,CAAA;YACjB,KAAqB,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,GAAA,CAAA;YACrB,KAAsB,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,IAAA,CAAA;YACtB,KAAsB,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,IAAA,CAAA;AACtB,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,GAAA,CAAqB,CACd;QACT,KAAC,CAAA,aAAA,CAAA,KAAK,EACJ,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,EACV,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,EAAE,EACtC,QAAQ,EAAE,CAAC,QAAQ,KACjB,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,KAAK,CAAA,EAAA,EACR,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAA,CAAA,CAC/B,EAEJ,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,MAAM,EAClB,YAAY,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,IAAI,EACzB,QAAQ,EAAE,CAAC,QAAQ,KACjB,eAAe,CACV,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CACR,EAAA,EAAA,IAAI,EAAE,QAAQ,EAAA,CAAA,CACd,EAEJ,CAAA,CACO,EACX;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAA;IACjC,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;AACD,IAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB;;;;"}
1
+ {"version":3,"file":"QuantityInput.js","sources":["../../src/QuantityInput.tsx"],"sourcesContent":["import { Group, NativeSelect, TextInput } from '@mantine/core';\nimport { Quantity } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\n\nexport interface QuantityInputProps {\n name: string;\n defaultValue?: Quantity;\n onChange?: (value: Quantity) => void;\n}\n\nexport function QuantityInput(props: QuantityInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Quantity): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <Group spacing=\"xs\" grow noWrap>\n <NativeSelect\n style={{ width: 80 }}\n data-testid={props.name + '-comparator'}\n defaultValue={value?.comparator}\n data={['', '<', '<=', '>=', '>']}\n onChange={(e) =>\n setValueWrapper({\n ...value,\n comparator: e.currentTarget.value as '<' | '<=' | '>=' | '>',\n })\n }\n />\n <TextInput\n id={props.name}\n name={props.name}\n data-testid={props.name}\n type=\"number\"\n step=\"any\"\n placeholder=\"Value\"\n defaultValue={value?.value?.toString()}\n onChange={(e) =>\n setValueWrapper({\n ...value,\n value: tryParseNumber(e.currentTarget.value),\n })\n }\n />\n <TextInput\n placeholder=\"Unit\"\n defaultValue={value?.unit}\n onChange={(e) =>\n setValueWrapper({\n ...value,\n unit: e.currentTarget.value,\n })\n }\n />\n </Group>\n );\n}\n\nfunction tryParseNumber(str: string): number | undefined {\n if (!str) {\n return undefined;\n }\n return parseFloat(str);\n}\n"],"names":[],"mappings":";;;AAUM,SAAU,aAAa,CAAC,KAAyB,EAAA;;AACrD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAkB,EAAA;QACzC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,KAAC,CAAA,aAAA,CAAA,KAAK,EAAC,EAAA,OAAO,EAAC,IAAI,EAAC,IAAI,EAAA,IAAA,EAAC,MAAM,EAAA,IAAA,EAAA;QAC7B,KAAC,CAAA,aAAA,CAAA,YAAY,EACX,EAAA,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EACP,aAAA,EAAA,KAAK,CAAC,IAAI,GAAG,aAAa,EACvC,YAAY,EAAE,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,UAAU,EAC/B,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAChC,QAAQ,EAAE,CAAC,CAAC,KACV,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,KAAK,CAAA,EAAA,EACR,UAAU,EAAE,CAAC,CAAC,aAAa,CAAC,KAAgC,EAAA,CAAA,CAC5D,EAEJ,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EACR,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EACH,aAAA,EAAA,KAAK,CAAC,IAAI,EACvB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,EACV,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,CAAA,EAAA,GAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,EAAE,EACtC,QAAQ,EAAE,CAAC,CAAC,KACV,eAAe,CACV,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CACR,EAAA,EAAA,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAC5C,EAEJ,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EACR,EAAA,WAAW,EAAC,MAAM,EAClB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,IAAI,EACzB,QAAQ,EAAE,CAAC,CAAC,KACV,eAAe,CACV,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KACR,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,IAC3B,EAEJ,CAAA,CACI,EACR;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAA;IACjC,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;AACD,IAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB;;;;"}
@@ -1,15 +1,12 @@
1
+ import { Button, TextInput, NativeSelect, Textarea } from '@mantine/core';
1
2
  import { globalSchema } from '@medplum/core';
2
3
  import React, { useState, useEffect, useRef } from 'react';
3
- import { Button } from './Button.js';
4
4
  import { Form } from './Form.js';
5
- import { Input } from './Input.js';
6
5
  import { useMedplum } from './MedplumProvider.js';
7
6
  import { QuestionnaireFormItem } from './QuestionnaireForm.js';
8
7
  import { QuestionnaireItemType, isChoiceQuestion } from './QuestionnaireUtils.js';
9
8
  import { getValueAndType } from './ResourcePropertyDisplay.js';
10
9
  import { ResourcePropertyInput } from './ResourcePropertyInput.js';
11
- import { Select } from './Select.js';
12
- import { TextArea } from './TextArea.js';
13
10
  import { useResource } from './useResource.js';
14
11
  import { killEvent } from './utils/dom.js';
15
12
 
@@ -44,7 +41,7 @@ function QuestionnaireBuilder(props) {
44
41
  return (React.createElement("div", { className: "medplum-questionnaire-builder" },
45
42
  React.createElement(Form, { testid: "questionnaire-form", onSubmit: () => props.onSubmit(value) },
46
43
  React.createElement(ItemBuilder, { item: value, selectedKey: selectedKey, setSelectedKey: setSelectedKey, hoverKey: hoverKey, setHoverKey: setHoverKey, onChange: setValue }),
47
- React.createElement(Button, { type: "submit", size: "large" }, "Save"))));
44
+ React.createElement(Button, { type: "submit" }, "Save"))));
48
45
  }
49
46
  function ItemBuilder(props) {
50
47
  var _a;
@@ -85,26 +82,26 @@ function ItemBuilder(props) {
85
82
  return (React.createElement("div", { "data-testid": item.linkId, className: className, onClick: onClick, onMouseOver: onHover },
86
83
  editing ? (React.createElement(React.Fragment, null,
87
84
  isResource && (React.createElement("div", null,
88
- React.createElement(Input, { defaultValue: resource.title, onChange: (newValue) => changeProperty('title', newValue) }))),
85
+ React.createElement(TextInput, { defaultValue: resource.title, onChange: (e) => changeProperty('title', e.currentTarget.value) }))),
89
86
  !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) })),
87
+ React.createElement(NativeSelect, { defaultValue: item.type, onChange: (e) => changeProperty('type', e.currentTarget.value), data: [
88
+ { value: 'display', label: 'Display' },
89
+ { value: 'boolean', label: 'Boolean' },
90
+ { value: 'decimal', label: 'Decimal' },
91
+ { value: 'integer', label: 'Integer' },
92
+ { value: 'date', label: 'Date' },
93
+ { value: 'dateTime', label: 'Date/Time' },
94
+ { value: 'time', label: 'Time' },
95
+ { value: 'string', label: 'String' },
96
+ { value: 'text', label: 'Text' },
97
+ { value: 'url', label: 'URL' },
98
+ { value: 'choice', label: 'Choice' },
99
+ { value: 'open-choice', label: 'Open Choice' },
100
+ { value: 'attachment', label: 'Attachment' },
101
+ { value: 'reference', label: 'Reference' },
102
+ { value: 'quantity', label: 'Quantity' },
103
+ ] }))),
104
+ !isResource && (React.createElement(Textarea, { style: { width: '95%', height: '100px', minHeight: '100px', margin: '8px 4px 4px 4px' }, defaultValue: item.text, onChange: (e) => changeProperty('text', e.currentTarget.value) })),
108
105
  isChoiceQuestion(item) && (React.createElement(AnswerBuilder, { options: item.answerOption, onChange: (newOptions) => changeProperty('answerOption', newOptions) })))) : (React.createElement(React.Fragment, null,
109
106
  resource.title && React.createElement("h1", null, resource.title),
110
107
  item.text && React.createElement("p", null, item.text),
@@ -112,7 +109,7 @@ function ItemBuilder(props) {
112
109
  item.item &&
113
110
  item.item.map((i) => (React.createElement("div", { key: i.id },
114
111
  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)))),
112
+ !isContainer && (React.createElement("div", { className: "top-actions" }, editing ? (React.createElement(TextInput, { defaultValue: item.linkId, onChange: (e) => changeProperty('linkId', e.currentTarget.value) })) : (React.createElement("div", null, linkId)))),
116
113
  React.createElement("div", { className: "bottom-actions" },
117
114
  isContainer && (React.createElement(React.Fragment, null,
118
115
  React.createElement("a", { href: "#", onClick: (e) => {