synapse-react-client 4.0.26 → 4.0.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 (357) hide show
  1. package/dist/SWC.index.d.ts +3 -2
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +4 -3
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/assets/icons/FileCopy.d.ts +5 -0
  6. package/dist/assets/icons/FileCopy.d.ts.map +1 -0
  7. package/dist/assets/icons/FileCopy.js +13 -0
  8. package/dist/assets/icons/FileCopy.js.map +1 -0
  9. package/dist/assets/icons/NIHIcon.d.ts +4 -0
  10. package/dist/assets/icons/NIHIcon.d.ts.map +1 -0
  11. package/dist/assets/icons/NIHIcon.js +14 -0
  12. package/dist/assets/icons/NIHIcon.js.map +1 -0
  13. package/dist/assets/icons/fileCopy.svg +8 -0
  14. package/dist/assets/icons/fileCopy2.js +33 -0
  15. package/dist/assets/icons/fileCopy2.js.map +1 -0
  16. package/dist/assets/icons/nih.js +35 -0
  17. package/dist/assets/icons/nih.js.map +1 -0
  18. package/dist/assets/icons/nih.svg +9 -0
  19. package/dist/assets/illustrations/compute_illustration.js +485 -0
  20. package/dist/assets/illustrations/compute_illustration.js.map +1 -0
  21. package/dist/assets/illustrations/compute_illustration.svg +204 -0
  22. package/dist/assets/illustrations/curate_data_illustration.js +479 -0
  23. package/dist/assets/illustrations/curate_data_illustration.js.map +1 -0
  24. package/dist/assets/illustrations/curate_data_illustration.svg +91 -0
  25. package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js +1 -1
  26. package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js +1 -1
  27. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts +1 -0
  28. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
  29. package/dist/components/Authentication/AuthenticationMethodSelection.js +17 -10
  30. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  31. package/dist/components/Authentication/LastLoginInfo.d.ts +2 -2
  32. package/dist/components/Authentication/LoginForm.d.ts +1 -0
  33. package/dist/components/Authentication/LoginForm.d.ts.map +1 -1
  34. package/dist/components/Authentication/LoginForm.js +3 -2
  35. package/dist/components/Authentication/LoginForm.js.map +1 -1
  36. package/dist/components/Authentication/LoginMethod.d.ts +2 -2
  37. package/dist/components/Authentication/LoginMethod.d.ts.map +1 -1
  38. package/dist/components/Authentication/LoginMethod.js +10 -8
  39. package/dist/components/Authentication/LoginMethod.js.map +1 -1
  40. package/dist/components/Authentication/StandaloneLoginForm.d.ts +1 -0
  41. package/dist/components/Authentication/StandaloneLoginForm.d.ts.map +1 -1
  42. package/dist/components/Authentication/StandaloneLoginForm.js +16 -15
  43. package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
  44. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +0 -2
  45. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  46. package/dist/components/Breadcrumbs/Breadcrumbs.js +24 -30
  47. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  48. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js +1 -1
  49. package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js +1 -1
  50. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +1 -1
  51. package/dist/components/ChangePassword/ChangePassword.js +1 -1
  52. package/dist/components/CopyToClipboardString/CopyToClipboardString.d.ts +3 -2
  53. package/dist/components/CopyToClipboardString/CopyToClipboardString.d.ts.map +1 -1
  54. package/dist/components/CopyToClipboardString/CopyToClipboardString.js +27 -18
  55. package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
  56. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  57. package/dist/components/DataGrid/SynapseGrid.js +2 -5
  58. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  59. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts +35 -0
  60. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -0
  61. package/dist/components/DataGrid/SyncGridWithSourceButton.js +115 -0
  62. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -0
  63. package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts +2 -0
  64. package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts.map +1 -1
  65. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  66. package/dist/components/DataGrid/useMergeGridWithSource.d.ts +12 -7
  67. package/dist/components/DataGrid/useMergeGridWithSource.d.ts.map +1 -1
  68. package/dist/components/DataGrid/useMergeGridWithSource.js +31 -25
  69. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  70. package/dist/components/DownloadCart/DownloadListTable.js +1 -1
  71. package/dist/components/DynamicForm/DynamicForm.js +1 -1
  72. package/dist/components/EntityAclEditor/EntityAclEditorModal.js +1 -1
  73. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js +1 -1
  74. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
  75. package/dist/components/EntityFinder/EntityIdTextField.d.ts +1 -0
  76. package/dist/components/EntityFinder/EntityIdTextField.d.ts.map +1 -1
  77. package/dist/components/EntityFinder/EntityIdTextField.js +7 -6
  78. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  79. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +1 -1
  80. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js +1 -1
  81. package/dist/components/EntitySidebar/EntitySidebar.css +1 -1
  82. package/dist/components/EntitySidebar/EntitySidebar.d.ts.map +1 -1
  83. package/dist/components/EntitySidebar/EntitySidebar.js +47 -39
  84. package/dist/components/EntitySidebar/EntitySidebar.js.map +1 -1
  85. package/dist/components/EntitySidebar/EntitySidebar.module.js +11 -11
  86. package/dist/components/EntitySidebar/EntitySidebar.module.js.map +1 -1
  87. package/dist/components/EntitySidebar/EntitySidebar.module.scss +6 -6
  88. package/dist/components/FieldDescription/FieldDescription.css +1 -0
  89. package/dist/components/FieldDescription/FieldDescription.d.ts +15 -0
  90. package/dist/components/FieldDescription/FieldDescription.d.ts.map +1 -0
  91. package/dist/components/FieldDescription/FieldDescription.js +13 -0
  92. package/dist/components/FieldDescription/FieldDescription.js.map +1 -0
  93. package/dist/components/FieldDescription/FieldDescription.module.js +5 -0
  94. package/dist/components/FieldDescription/FieldDescription.module.js.map +1 -0
  95. package/dist/components/FieldDescription/FieldDescription.module.scss +8 -0
  96. package/dist/components/FieldDescription/index.d.ts +3 -0
  97. package/dist/components/FieldDescription/index.d.ts.map +1 -0
  98. package/dist/components/FieldDescription/index.js +2 -0
  99. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  100. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  101. package/dist/components/IconSvg/IconSvg.js +216 -212
  102. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  103. package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js +1 -1
  104. package/dist/components/OAuthClientManagement/OAuthManagement.js +1 -1
  105. package/dist/components/PortalAclEditor/PortalAclEditorModal.js +1 -1
  106. package/dist/components/PortalList/CreatePortalModal.js +1 -1
  107. package/dist/components/PortalList/PortalCard.js +1 -1
  108. package/dist/components/ProjectInfo/ProjectInfo.css +1 -0
  109. package/dist/components/ProjectInfo/ProjectInfo.d.ts +5 -0
  110. package/dist/components/ProjectInfo/ProjectInfo.d.ts.map +1 -0
  111. package/dist/components/ProjectInfo/ProjectInfo.js +50 -0
  112. package/dist/components/ProjectInfo/ProjectInfo.js.map +1 -0
  113. package/dist/components/ProjectInfo/ProjectInfo.module.js +11 -0
  114. package/dist/components/ProjectInfo/ProjectInfo.module.js.map +1 -0
  115. package/dist/components/ProjectInfo/ProjectInfo.module.scss +35 -0
  116. package/dist/components/ProjectInfo/ProjectInfoPopover.d.ts +10 -0
  117. package/dist/components/ProjectInfo/ProjectInfoPopover.d.ts.map +1 -0
  118. package/dist/components/ProjectInfo/ProjectInfoPopover.js +94 -0
  119. package/dist/components/ProjectInfo/ProjectInfoPopover.js.map +1 -0
  120. package/dist/components/ProjectStorage/ProjectDataAvailability.d.ts +2 -1
  121. package/dist/components/ProjectStorage/ProjectDataAvailability.d.ts.map +1 -1
  122. package/dist/components/ProjectStorage/ProjectDataAvailability.js +67 -75
  123. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  124. package/dist/components/StorybookComponentWrapper.js +1 -1
  125. package/dist/components/SynapseChat/SynapseChat.js +1 -1
  126. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +1 -1
  127. package/dist/components/SynapseTable/table-top/DownloadOptions.js +1 -1
  128. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  129. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
  130. package/dist/components/TextField/TextField.css +1 -1
  131. package/dist/components/TextField/TextField.d.ts.map +1 -1
  132. package/dist/components/TextField/TextField.js +27 -25
  133. package/dist/components/TextField/TextField.js.map +1 -1
  134. package/dist/components/TextField/TextField.module.js +3 -3
  135. package/dist/components/TextField/TextField.module.js.map +1 -1
  136. package/dist/components/TextField/TextField.module.scss +2 -5
  137. package/dist/components/Webhook/WebhookVerificationDialog.js +1 -1
  138. package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js +1 -1
  139. package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js +1 -1
  140. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +1 -1
  141. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  142. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +66 -49
  143. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  144. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
  145. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  146. package/dist/components/error/SendMessageToEntityOwnerDialog.js +1 -1
  147. package/dist/components/index.js +1 -1
  148. package/dist/components/menu/ComplexMenu.d.ts.map +1 -1
  149. package/dist/components/menu/ComplexMenu.js +1 -4
  150. package/dist/components/menu/ComplexMenu.js.map +1 -1
  151. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js +1 -1
  152. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
  153. package/dist/features/curator/dashboard/CuratorDashboard.d.ts +1 -1
  154. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -1
  155. package/dist/features/curator/dashboard/CuratorDashboard.js +36 -35
  156. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  157. package/dist/features/curator/dashboard/CuratorDashboardRouter.d.ts +13 -0
  158. package/dist/features/curator/dashboard/CuratorDashboardRouter.d.ts.map +1 -0
  159. package/dist/features/curator/dashboard/CuratorDashboardRouter.js +37 -0
  160. package/dist/features/curator/dashboard/CuratorDashboardRouter.js.map +1 -0
  161. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -1
  162. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +3 -1
  163. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -1
  164. package/dist/features/curator/dashboard/components/CurationTaskCard.js +26 -157
  165. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  166. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +10 -6
  167. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -1
  168. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +31 -0
  169. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.d.ts +25 -0
  170. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.d.ts.map +1 -0
  171. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js +134 -0
  172. package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js.map +1 -0
  173. package/dist/features/curator/dashboard/components/ExecutableTaskCard.d.ts +10 -0
  174. package/dist/features/curator/dashboard/components/ExecutableTaskCard.d.ts.map +1 -0
  175. package/dist/features/curator/dashboard/components/ExecutableTaskCard.js +51 -0
  176. package/dist/features/curator/dashboard/components/ExecutableTaskCard.js.map +1 -0
  177. package/dist/features/curator/dashboard/components/GridTaskCard.d.ts +10 -0
  178. package/dist/features/curator/dashboard/components/GridTaskCard.d.ts.map +1 -0
  179. package/dist/features/curator/dashboard/components/GridTaskCard.js +35 -0
  180. package/dist/features/curator/dashboard/components/GridTaskCard.js.map +1 -0
  181. package/dist/features/curator/dashboard/components/NextStepButton.css +1 -1
  182. package/dist/features/curator/dashboard/components/NextStepButton.d.ts +3 -0
  183. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
  184. package/dist/features/curator/dashboard/components/NextStepButton.js +56 -26
  185. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  186. package/dist/features/curator/dashboard/components/NextStepButton.module.js +6 -5
  187. package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -1
  188. package/dist/features/curator/dashboard/components/NextStepButton.module.scss +28 -0
  189. package/dist/features/curator/dashboard/components/getExecutableTaskButtonState.d.ts +31 -0
  190. package/dist/features/curator/dashboard/components/getExecutableTaskButtonState.d.ts.map +1 -0
  191. package/dist/features/curator/dashboard/components/getExecutableTaskButtonState.js +32 -0
  192. package/dist/features/curator/dashboard/components/getExecutableTaskButtonState.js.map +1 -0
  193. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  194. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +213 -204
  195. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  196. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -1
  197. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  198. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +19 -39
  199. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  200. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts +9 -3
  201. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  202. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +37 -46
  203. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  204. package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.d.ts +17 -0
  205. package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.d.ts.map +1 -0
  206. package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js +43 -0
  207. package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js.map +1 -0
  208. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -1
  209. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +27 -26
  210. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  211. package/dist/features/entity/metadata-task/create-task/CommonTaskFields.d.ts +16 -0
  212. package/dist/features/entity/metadata-task/create-task/CommonTaskFields.d.ts.map +1 -0
  213. package/dist/features/entity/metadata-task/create-task/CommonTaskFields.js +64 -0
  214. package/dist/features/entity/metadata-task/create-task/CommonTaskFields.js.map +1 -0
  215. package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.d.ts +41 -0
  216. package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.d.ts.map +1 -0
  217. package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.js +165 -0
  218. package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.js.map +1 -0
  219. package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.d.ts +18 -0
  220. package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.d.ts.map +1 -0
  221. package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.js +78 -0
  222. package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.js.map +1 -0
  223. package/dist/features/entity/metadata-task/create-task/CreateTaskCategoryPicker.d.ts +10 -0
  224. package/dist/features/entity/metadata-task/create-task/CreateTaskCategoryPicker.d.ts.map +1 -0
  225. package/dist/features/entity/metadata-task/create-task/CreateTaskCategoryPicker.js +40 -0
  226. package/dist/features/entity/metadata-task/create-task/CreateTaskCategoryPicker.js.map +1 -0
  227. package/dist/features/entity/metadata-task/create-task/CreateTaskConfirmation.d.ts +13 -0
  228. package/dist/features/entity/metadata-task/create-task/CreateTaskConfirmation.d.ts.map +1 -0
  229. package/dist/features/entity/metadata-task/create-task/CreateTaskConfirmation.js +35 -0
  230. package/dist/features/entity/metadata-task/create-task/CreateTaskConfirmation.js.map +1 -0
  231. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.d.ts +41 -0
  232. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.d.ts.map +1 -0
  233. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +198 -0
  234. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -0
  235. package/dist/features/entity/metadata-task/create-task/EditCurationTaskPage.d.ts +8 -0
  236. package/dist/features/entity/metadata-task/create-task/EditCurationTaskPage.d.ts.map +1 -0
  237. package/dist/features/entity/metadata-task/create-task/EditCurationTaskPage.js +29 -0
  238. package/dist/features/entity/metadata-task/create-task/EditCurationTaskPage.js.map +1 -0
  239. package/dist/features/entity/metadata-task/create-task/FileBasedFields.d.ts +13 -0
  240. package/dist/features/entity/metadata-task/create-task/FileBasedFields.d.ts.map +1 -0
  241. package/dist/features/entity/metadata-task/create-task/FileBasedFields.js +65 -0
  242. package/dist/features/entity/metadata-task/create-task/FileBasedFields.js.map +1 -0
  243. package/dist/features/entity/metadata-task/create-task/ProjectSelectorField.d.ts +11 -0
  244. package/dist/features/entity/metadata-task/create-task/ProjectSelectorField.d.ts.map +1 -0
  245. package/dist/features/entity/metadata-task/create-task/ProjectSelectorField.js +33 -0
  246. package/dist/features/entity/metadata-task/create-task/ProjectSelectorField.js.map +1 -0
  247. package/dist/features/entity/metadata-task/create-task/RecordBasedFields.d.ts +13 -0
  248. package/dist/features/entity/metadata-task/create-task/RecordBasedFields.d.ts.map +1 -0
  249. package/dist/features/entity/metadata-task/create-task/RecordBasedFields.js +38 -0
  250. package/dist/features/entity/metadata-task/create-task/RecordBasedFields.js.map +1 -0
  251. package/dist/features/entity/metadata-task/create-task/RecordSetFields.d.ts +13 -0
  252. package/dist/features/entity/metadata-task/create-task/RecordSetFields.d.ts.map +1 -0
  253. package/dist/features/entity/metadata-task/create-task/RecordSetFields.js +72 -0
  254. package/dist/features/entity/metadata-task/create-task/RecordSetFields.js.map +1 -0
  255. package/dist/features/entity/metadata-task/create-task/SampleSheetFields.d.ts +11 -0
  256. package/dist/features/entity/metadata-task/create-task/SampleSheetFields.d.ts.map +1 -0
  257. package/dist/features/entity/metadata-task/create-task/SampleSheetFields.js +42 -0
  258. package/dist/features/entity/metadata-task/create-task/SampleSheetFields.js.map +1 -0
  259. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.d.ts +17 -0
  260. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.d.ts.map +1 -0
  261. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +70 -0
  262. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -0
  263. package/dist/features/entity/metadata-task/create-task/TaskFormActions.d.ts +23 -0
  264. package/dist/features/entity/metadata-task/create-task/TaskFormActions.d.ts.map +1 -0
  265. package/dist/features/entity/metadata-task/create-task/TaskFormActions.js +68 -0
  266. package/dist/features/entity/metadata-task/create-task/TaskFormActions.js.map +1 -0
  267. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.d.ts +17 -0
  268. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.d.ts.map +1 -0
  269. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +33 -0
  270. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -0
  271. package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.d.ts +50 -0
  272. package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.d.ts.map +1 -0
  273. package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.js +76 -0
  274. package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.js.map +1 -0
  275. package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.d.ts +36 -0
  276. package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.d.ts.map +1 -0
  277. package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.js +31 -0
  278. package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.js.map +1 -0
  279. package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.d.ts +32 -0
  280. package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.d.ts.map +1 -0
  281. package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.js +33 -0
  282. package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.js.map +1 -0
  283. package/dist/features/entity/metadata-task/create-task/utils/taskIdValidation.d.ts +10 -0
  284. package/dist/features/entity/metadata-task/create-task/utils/taskIdValidation.d.ts.map +1 -0
  285. package/dist/features/entity/metadata-task/create-task/utils/taskIdValidation.js +13 -0
  286. package/dist/features/entity/metadata-task/create-task/utils/taskIdValidation.js.map +1 -0
  287. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts.map +1 -1
  288. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js +24 -24
  289. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  290. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.d.ts.map +1 -1
  291. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js +2 -2
  292. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  293. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  294. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +33 -32
  295. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  296. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -1
  297. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +24 -21
  298. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  299. package/dist/features/entity/metadata-task/utils/constants.d.ts +84 -15
  300. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  301. package/dist/features/entity/metadata-task/utils/constants.js +47 -3
  302. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  303. package/dist/features/entity/metadata-task/utils/dueDate.d.ts +22 -0
  304. package/dist/features/entity/metadata-task/utils/dueDate.d.ts.map +1 -0
  305. package/dist/features/entity/metadata-task/utils/dueDate.js +24 -0
  306. package/dist/features/entity/metadata-task/utils/dueDate.js.map +1 -0
  307. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts +2 -2
  308. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts.map +1 -1
  309. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js +5 -6
  310. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  311. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.d.ts +4 -4
  312. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.d.ts.map +1 -1
  313. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js +5 -6
  314. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
  315. package/dist/features/entity/metadata-task/utils/types.d.ts +12 -0
  316. package/dist/features/entity/metadata-task/utils/types.d.ts.map +1 -0
  317. package/dist/features/entity/metadata-task/utils/types.js +18 -0
  318. package/dist/features/entity/metadata-task/utils/types.js.map +1 -0
  319. package/dist/mocks/curation/mockCurationTask.d.ts +6 -0
  320. package/dist/mocks/curation/mockCurationTask.d.ts.map +1 -1
  321. package/dist/mocks/curation/mockCurationTask.js +20 -3
  322. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  323. package/dist/mocks/msw/handlers/curationTaskExecutionHandlers.d.ts +16 -0
  324. package/dist/mocks/msw/handlers/curationTaskExecutionHandlers.d.ts.map +1 -0
  325. package/dist/mocks/msw/handlers/curationTaskExecutionHandlers.js +24 -0
  326. package/dist/mocks/msw/handlers/curationTaskExecutionHandlers.js.map +1 -0
  327. package/dist/synapse-client/SynapseClient.d.ts +7 -1
  328. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  329. package/dist/synapse-client/SynapseClient.js +493 -482
  330. package/dist/synapse-client/SynapseClient.js.map +1 -1
  331. package/dist/synapse-client/index.js +3 -3
  332. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +8 -1
  333. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  334. package/dist/synapse-queries/curation/task/useCurationTask.js +48 -34
  335. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  336. package/dist/theme/palette/Palettes.js +2 -2
  337. package/dist/theme/palette/Palettes.js.map +1 -1
  338. package/dist/tsconfig.build.tsbuildinfo +1 -1
  339. package/dist/utils/AppUtils/session/useSessionManager.d.ts.map +1 -1
  340. package/dist/utils/AppUtils/session/useSessionManager.js +50 -48
  341. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  342. package/dist/utils/SynapseConstants.d.ts +4 -1
  343. package/dist/utils/SynapseConstants.d.ts.map +1 -1
  344. package/dist/utils/SynapseConstants.js +86 -83
  345. package/dist/utils/SynapseConstants.js.map +1 -1
  346. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -2
  347. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  348. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  349. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  350. package/dist/utils/hooks/useDetectSSOCode.d.ts.map +1 -1
  351. package/dist/utils/hooks/useDetectSSOCode.js +37 -27
  352. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  353. package/package.json +5 -5
  354. package/dist/components/DataGrid/MergeGridWithSourceTableButton.d.ts +0 -8
  355. package/dist/components/DataGrid/MergeGridWithSourceTableButton.d.ts.map +0 -1
  356. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +0 -64
  357. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ import { COMPUTE_TASK_CATEGORY_TITLE as e, CURATE_TASK_CATEGORY_TITLE as t, SELECT_TASK_CATEGORY_DESCRIPTION as n } from "../utils/constants.js";
2
+ import r from "./TaskCategoryCard.js";
3
+ import { ForwardRef as i } from "../../../../assets/illustrations/curate_data_illustration.js";
4
+ import { ForwardRef as a } from "../../../../assets/illustrations/compute_illustration.js";
5
+ import { Stack as o, Typography as s } from "@mui/material";
6
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ //#region src/features/entity/metadata-task/create-task/CreateTaskCategoryPicker.tsx
8
+ function u(u) {
9
+ let { onSelectCompute: d, onSelectCurate: f } = u;
10
+ return /* @__PURE__ */ l(o, {
11
+ gap: 3,
12
+ alignItems: "center",
13
+ children: [/* @__PURE__ */ c(s, {
14
+ variant: "headline3",
15
+ component: "p",
16
+ color: "text.secondary",
17
+ children: n
18
+ }), /* @__PURE__ */ l(o, {
19
+ direction: {
20
+ xs: "column",
21
+ sm: "row"
22
+ },
23
+ gap: 3,
24
+ justifyContent: "center",
25
+ children: [/* @__PURE__ */ c(r, {
26
+ title: t,
27
+ Illustration: i,
28
+ onClick: f
29
+ }), /* @__PURE__ */ c(r, {
30
+ title: e,
31
+ Illustration: a,
32
+ onClick: d
33
+ })]
34
+ })]
35
+ });
36
+ }
37
+ //#endregion
38
+ export { u as default };
39
+
40
+ //# sourceMappingURL=CreateTaskCategoryPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTaskCategoryPicker.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/CreateTaskCategoryPicker.tsx"],"sourcesContent":["import { Stack, Typography } from '@mui/material'\nimport {\n COMPUTE_TASK_CATEGORY_TITLE,\n CURATE_TASK_CATEGORY_TITLE,\n SELECT_TASK_CATEGORY_DESCRIPTION,\n} from '../utils/constants'\nimport TaskCategoryCard from './TaskCategoryCard'\nimport { ReactComponent as CurateDataIllustration } from '@/assets/illustrations/curate_data_illustration.svg'\nimport { ReactComponent as ComputeIllustration } from '@/assets/illustrations/compute_illustration.svg'\n\nexport type CreateTaskCategoryPickerProps = {\n onSelectCompute: () => void\n onSelectCurate: () => void\n}\n\n/**\n * Step 1 of the create-task flow: lets the user pick which category of task to create, Compute Data or\n * Curate Data.\n */\nexport default function CreateTaskCategoryPicker(\n props: CreateTaskCategoryPickerProps,\n) {\n const { onSelectCompute, onSelectCurate } = props\n\n return (\n <Stack gap={3} alignItems=\"center\">\n <Typography variant=\"headline3\" component=\"p\" color=\"text.secondary\">\n {SELECT_TASK_CATEGORY_DESCRIPTION}\n </Typography>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n gap={3}\n justifyContent=\"center\"\n >\n <TaskCategoryCard\n title={CURATE_TASK_CATEGORY_TITLE}\n Illustration={CurateDataIllustration}\n onClick={onSelectCurate}\n />\n <TaskCategoryCard\n title={COMPUTE_TASK_CATEGORY_TITLE}\n Illustration={ComputeIllustration}\n onClick={onSelectCompute}\n />\n </Stack>\n </Stack>\n )\n}\n"],"mappings":";;;;;;;AAmBA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,oBAAiB,sBAAmB;CAE5C,OACE,kBAAC,GAAD;EAAO,KAAK;EAAG,YAAW;YAA1B,CACE,kBAAC,GAAD;GAAY,SAAQ;GAAY,WAAU;GAAI,OAAM;aACjD;EACS,CAAA,GACZ,kBAAC,GAAD;GACE,WAAW;IAAE,IAAI;IAAU,IAAI;GAAM;GACrC,KAAK;GACL,gBAAe;aAHjB,CAKE,kBAAC,GAAD;IACE,OAAO;IACP,cAAc;IACd,SAAS;GACV,CAAA,GACD,kBAAC,GAAD;IACE,OAAO;IACP,cAAc;IACd,SAAS;GACV,CAAA,CACI;IACF;;AAEX"}
@@ -0,0 +1,13 @@
1
+ export type CreateTaskConfirmationProps = {
2
+ taskId: number;
3
+ onDone: () => void;
4
+ };
5
+ /**
6
+ * Step 3 of the create-task flow: a simple confirmation shown after the task has been created (the task
7
+ * is created on the step-2-to-step-3 transition, so by the time this renders it already exists).
8
+ *
9
+ * TODO: Link directly to the new task in the task list once it can be filtered by task ID
10
+ * (see `ListCurationTaskRequest.taskIds`).
11
+ */
12
+ export default function CreateTaskConfirmation(props: CreateTaskConfirmationProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=CreateTaskConfirmation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTaskConfirmation.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/CreateTaskConfirmation.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,KAAK,EAAE,2BAA2B,2CAkBnC"}
@@ -0,0 +1,35 @@
1
+ import { BACK_TO_ALL_TASKS_LABEL as e, CREATE_TASK_CONFIRMATION_DESCRIPTION as t, CREATE_TASK_CONFIRMATION_TITLE as n } from "../utils/constants.js";
2
+ import { Button as r, Stack as i, Typography as a } from "@mui/material";
3
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
+ //#region src/features/entity/metadata-task/create-task/CreateTaskConfirmation.tsx
5
+ function c(c) {
6
+ let { taskId: l, onDone: u } = c;
7
+ return /* @__PURE__ */ s(i, {
8
+ gap: 3,
9
+ alignItems: "flex-start",
10
+ children: [
11
+ /* @__PURE__ */ o(a, {
12
+ variant: "headline3",
13
+ component: "h3",
14
+ children: n
15
+ }),
16
+ /* @__PURE__ */ o(a, {
17
+ variant: "body1",
18
+ children: t
19
+ }),
20
+ /* @__PURE__ */ s(a, {
21
+ variant: "body1",
22
+ children: ["Task ID: ", l]
23
+ }),
24
+ /* @__PURE__ */ o(r, {
25
+ variant: "contained",
26
+ onClick: u,
27
+ children: e
28
+ })
29
+ ]
30
+ });
31
+ }
32
+ //#endregion
33
+ export { c as default };
34
+
35
+ //# sourceMappingURL=CreateTaskConfirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTaskConfirmation.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/CreateTaskConfirmation.tsx"],"sourcesContent":["import { Button, Stack, Typography } from '@mui/material'\nimport {\n BACK_TO_ALL_TASKS_LABEL,\n CREATE_TASK_CONFIRMATION_DESCRIPTION,\n CREATE_TASK_CONFIRMATION_TITLE,\n} from '../utils/constants'\n\nexport type CreateTaskConfirmationProps = {\n taskId: number\n onDone: () => void\n}\n\n/**\n * Step 3 of the create-task flow: a simple confirmation shown after the task has been created (the task\n * is created on the step-2-to-step-3 transition, so by the time this renders it already exists).\n *\n * TODO: Link directly to the new task in the task list once it can be filtered by task ID\n * (see `ListCurationTaskRequest.taskIds`).\n */\nexport default function CreateTaskConfirmation(\n props: CreateTaskConfirmationProps,\n) {\n const { taskId, onDone } = props\n\n return (\n <Stack gap={3} alignItems=\"flex-start\">\n <Typography variant=\"headline3\" component=\"h3\">\n {CREATE_TASK_CONFIRMATION_TITLE}\n </Typography>\n <Typography variant=\"body1\">\n {CREATE_TASK_CONFIRMATION_DESCRIPTION}\n </Typography>\n <Typography variant=\"body1\">Task ID: {taskId}</Typography>\n <Button variant=\"contained\" onClick={onDone}>\n {BACK_TO_ALL_TASKS_LABEL}\n </Button>\n </Stack>\n )\n}\n"],"mappings":";;;;AAmBA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,WAAQ,cAAW;CAE3B,OACE,kBAAC,GAAD;EAAO,KAAK;EAAG,YAAW;YAA1B;GACE,kBAAC,GAAD;IAAY,SAAQ;IAAY,WAAU;cACvC;GACS,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAQ;cACjB;GACS,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAQ;cAApB,CAA4B,aAAU,CAAmB;;GACzD,kBAAC,GAAD;IAAQ,SAAQ;IAAY,SAAS;cAClC;GACK,CAAA;EACH;;AAEX"}
@@ -0,0 +1,41 @@
1
+ import { CurationTask } from '@sage-bionetworks/synapse-client';
2
+ export type CurateTaskFormProps = {
3
+ /**
4
+ * Present when the host page already has a project context (e.g. a project's Metadata Tasks page).
5
+ * Absent when creating from a context without one (e.g. the Curator Dashboard), in which case the user
6
+ * is prompted to choose a project. Ignored in edit mode -- the project is always derived from `task`.
7
+ */
8
+ projectId?: string;
9
+ /** The task being edited. Undefined when creating a new task. */
10
+ task?: CurationTask;
11
+ /** Called after a new task is successfully created. */
12
+ onCreated?: (task: CurationTask) => void;
13
+ /** Called after an existing task is successfully saved. */
14
+ onSaved?: (task: CurationTask) => void;
15
+ /** Called after the task is successfully deleted (edit mode only). */
16
+ onDeleted?: () => void;
17
+ /** Shows a "Back" button (create mode) that returns to the category picker. */
18
+ onBack?: () => void;
19
+ /** Shows a "Cancel" button (edit mode) that exits the page without saving. */
20
+ onCancel?: () => void;
21
+ /**
22
+ * Shows a "Back to All Tasks" button in the top-left of the page, which exits the entire
23
+ * create/edit flow back to the task list (as opposed to `onBack`/`onCancel`, which only move
24
+ * between steps within the flow).
25
+ */
26
+ onExit?: () => void;
27
+ /**
28
+ * When present, rendered as a centered page title above the form (e.g. "Create New Curate Task" or
29
+ * "Edit Task"). The host page is responsible for supplying this rather than rendering its own
30
+ * heading, so the title and the single-column form below it share one centered layout.
31
+ */
32
+ pageTitle?: string;
33
+ /** When present, rendered as a centered subtitle below `pageTitle`. */
34
+ pageDescription?: string;
35
+ };
36
+ /**
37
+ * The create/edit form for a Curate Data curation task (File-Based / Records-Based). Used as the
38
+ * `curate` step of the create wizard (`CreateCurationTaskFlow`) and directly by `EditCurationTaskPage`.
39
+ */
40
+ export default function CurateTaskForm(props: CurateTaskFormProps): import("react/jsx-runtime").JSX.Element;
41
+ //# sourceMappingURL=CurateTaskForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurateTaskForm.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/CurateTaskForm.tsx"],"names":[],"mappings":"AAaA,OAAO,EACL,YAAY,EAGb,MAAM,kCAAkC,CAAA;AAmDzC,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACxC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACtC,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAwOhE"}
@@ -0,0 +1,198 @@
1
+ import e from "../../../../components/FieldDescription/FieldDescription.js";
2
+ import "../../../../components/FieldDescription/index.js";
3
+ import { StyledFormControl as t } from "../../../../components/styled/StyledFormControl.js";
4
+ import "../../../../components/styled/index.js";
5
+ import { AUTH_MODE_CONFIG as n, AUTH_MODE_INPUT_DESCRIPTION as ee, AUTH_MODE_INPUT_LABEL as r, AUTH_MODE_OPTIONS as i, CURATE_TASK_TYPE_CONFIG as te, CURATE_TASK_TYPE_INPUT_LABEL as a, CURATE_TASK_TYPE_OPTIONS as o, DEFAULT_CURATE_TASK_TYPE as s, TASK_STATUS_CONFIG as c } from "../utils/constants.js";
6
+ import { getCurateTaskConcreteType as l, instanceOfGridSupportedTaskProperties as u } from "../utils/types.js";
7
+ import { useCurationTaskFormState as d } from "./useCurationTaskFormState.js";
8
+ import f from "./CommonTaskFields.js";
9
+ import p from "./ProjectSelectorField.js";
10
+ import m from "./TaskFormActions.js";
11
+ import h from "./TaskFormHeader.js";
12
+ import g from "./FileBasedFields.js";
13
+ import ne from "./RecordBasedFields.js";
14
+ import { buildCurateTaskPayload as re } from "./utils/buildCurateTaskPayload.js";
15
+ import { useState as _ } from "react";
16
+ import { Alert as v, Box as ie, InputLabel as y, MenuItem as b, Select as x, Stack as S, Tooltip as C, Typography as w } from "@mui/material";
17
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
18
+ import { FileBasedMetadataTaskPropertiesConcreteTypeEnum as D, TaskStatusStateEnum as O } from "@sage-bionetworks/synapse-client";
19
+ import { HelpTwoTone as k } from "@mui/icons-material";
20
+ import A from "lodash-es/noop";
21
+ //#region src/features/entity/metadata-task/create-task/CurateTaskForm.tsx
22
+ var j = {
23
+ uploadFolderId: "",
24
+ fileViewId: ""
25
+ }, M = { recordSetId: "" };
26
+ function N(e) {
27
+ return e === "SESSION_OWNER" || e === "SOURCE_BENEFACTOR" ? e : "NONE";
28
+ }
29
+ function P(P) {
30
+ let { projectId: F, task: I, onCreated: L, onSaved: R, onDeleted: ae, onBack: z, onCancel: B, onExit: V, pageTitle: H, pageDescription: U } = P, W = d({
31
+ projectId: F,
32
+ task: I,
33
+ onDeleted: ae
34
+ }), { isEditMode: G } = W, K = l(I?.taskProperties), [q, J] = _(() => K ?? s), [Y, oe] = _(() => {
35
+ let e = I?.taskProperties;
36
+ return e?.concreteType === o[0] ? {
37
+ uploadFolderId: e.uploadFolderId ?? "",
38
+ fileViewId: e.fileViewId ?? ""
39
+ } : j;
40
+ }), [X, se] = _(() => {
41
+ let e = I?.taskProperties;
42
+ return e?.concreteType === o[1] ? { recordSetId: e.recordSetId ?? "" } : M;
43
+ }), Z = N(u(I?.taskProperties) ? I.taskProperties.suggestedAuthorizationMode : void 0), [Q, ce] = _(Z), le = q === o[0] ? !!Y.uploadFolderId.trim() && !!Y.fileViewId.trim() : !!X.recordSetId.trim(), $ = W.isCommonFieldsValid && W.isProjectValid && le, ue = G && Q !== Z;
44
+ async function de() {
45
+ let e = re({
46
+ existingTask: G ? I : void 0,
47
+ projectId: W.effectiveProjectId,
48
+ dataType: W.dataType,
49
+ instructions: W.instructions,
50
+ assigneePrincipalId: W.assigneePrincipalId,
51
+ curateTypeFields: {
52
+ concreteType: q,
53
+ authorizationMode: Q,
54
+ fileBased: Y,
55
+ recordBased: X
56
+ }
57
+ }), t = await W.submitTaskAndStatus(e);
58
+ G ? R?.(t) : L?.(t);
59
+ }
60
+ return /* @__PURE__ */ E(S, {
61
+ gap: 3,
62
+ children: [
63
+ /* @__PURE__ */ T(h, {
64
+ onExit: V,
65
+ pageTitle: H,
66
+ pageDescription: U
67
+ }),
68
+ /* @__PURE__ */ E(S, {
69
+ gap: 3,
70
+ sx: {
71
+ width: "100%",
72
+ maxWidth: 700,
73
+ mx: "auto"
74
+ },
75
+ children: [
76
+ /* @__PURE__ */ E(t, {
77
+ fullWidth: !0,
78
+ children: [/* @__PURE__ */ T(y, {
79
+ id: "curate-task-type-label",
80
+ children: a
81
+ }), /* @__PURE__ */ T(x, {
82
+ labelId: "curate-task-type-label",
83
+ label: a,
84
+ value: q,
85
+ disabled: G,
86
+ onChange: (e) => J(e.target.value),
87
+ children: o.map((e) => /* @__PURE__ */ T(b, {
88
+ value: e,
89
+ children: te[e].label
90
+ }, e))
91
+ })]
92
+ }),
93
+ W.showProjectSelector && /* @__PURE__ */ T(p, {
94
+ value: W.selectedProjectId,
95
+ onChange: W.setSelectedProjectId
96
+ }),
97
+ /* @__PURE__ */ T(f, {
98
+ dataType: W.dataType,
99
+ onDataTypeChange: W.setDataType,
100
+ dueDate: W.displayedDueDate,
101
+ onDueDateChange: W.setPendingDueDate,
102
+ instructions: W.instructions,
103
+ onInstructionsChange: W.setInstructions,
104
+ assigneePrincipalId: W.assigneePrincipalId,
105
+ onAssigneePrincipalIdChange: W.setAssigneePrincipalId
106
+ }),
107
+ G && /* @__PURE__ */ E(t, {
108
+ fullWidth: !0,
109
+ children: [/* @__PURE__ */ T(y, {
110
+ id: "curate-task-status-label",
111
+ children: "Status"
112
+ }), /* @__PURE__ */ T(x, {
113
+ labelId: "curate-task-status-label",
114
+ value: W.displayedStatusState ?? "",
115
+ label: "Status",
116
+ disabled: W.isStatusFetching || W.currentTaskStatus == null,
117
+ onChange: (e) => W.setPendingStatusState(e.target.value),
118
+ children: Object.values(O).map((e) => /* @__PURE__ */ T(b, {
119
+ value: e,
120
+ children: c[e].label
121
+ }, e))
122
+ })]
123
+ }),
124
+ q === D.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties ? /* @__PURE__ */ T(g, {
125
+ value: Y,
126
+ onChange: oe,
127
+ disabled: G
128
+ }) : /* @__PURE__ */ T(ne, {
129
+ value: X,
130
+ onChange: se,
131
+ disabled: G
132
+ }),
133
+ /* @__PURE__ */ E(t, {
134
+ fullWidth: !0,
135
+ children: [
136
+ /* @__PURE__ */ T(y, {
137
+ id: "curate-task-auth-mode-label",
138
+ children: r
139
+ }),
140
+ /* @__PURE__ */ T(e, { children: ee }),
141
+ /* @__PURE__ */ T(x, {
142
+ labelId: "curate-task-auth-mode-label",
143
+ label: r,
144
+ value: Q,
145
+ onChange: (e) => ce(e.target.value),
146
+ children: i.map((e) => /* @__PURE__ */ T(b, {
147
+ value: e,
148
+ children: /* @__PURE__ */ E(ie, {
149
+ sx: {
150
+ display: "flex",
151
+ alignItems: "center",
152
+ gap: .5
153
+ },
154
+ children: [/* @__PURE__ */ T(w, {
155
+ variant: "body1",
156
+ children: n[e].label
157
+ }), /* @__PURE__ */ T(C, {
158
+ title: n[e].tooltip,
159
+ children: /* @__PURE__ */ T(k, { sx: { color: "grey.700" } })
160
+ })]
161
+ })
162
+ }, e))
163
+ })
164
+ ]
165
+ }),
166
+ ue && /* @__PURE__ */ T(v, {
167
+ severity: "warning",
168
+ children: "Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it."
169
+ }),
170
+ W.error && /* @__PURE__ */ T(v, {
171
+ severity: "error",
172
+ children: W.error.reason ?? "An error occurred. Please try again."
173
+ })
174
+ ]
175
+ }),
176
+ /* @__PURE__ */ T(m, {
177
+ isEditMode: G,
178
+ isPending: W.isPending,
179
+ isValid: $,
180
+ onSubmit: () => void de().catch(A),
181
+ onBack: z,
182
+ onCancel: B,
183
+ canDelete: W.canDelete,
184
+ showDeleteConfirmation: W.showDeleteConfirmation,
185
+ onRequestDelete: () => W.setShowDeleteConfirmation(!0),
186
+ onConfirmDelete: () => {
187
+ I?.taskId != null && W.deleteTask(I.taskId);
188
+ },
189
+ onCancelDelete: () => W.setShowDeleteConfirmation(!1),
190
+ isDeletePending: W.isDeletePending
191
+ })
192
+ ]
193
+ });
194
+ }
195
+ //#endregion
196
+ export { P as default };
197
+
198
+ //# sourceMappingURL=CurateTaskForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurateTaskForm.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/CurateTaskForm.tsx"],"sourcesContent":["import FieldDescription from '@/components/FieldDescription'\nimport { StyledFormControl } from '@/components/styled'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n TaskStatusStateEnum,\n} from '@sage-bionetworks/synapse-client'\nimport noop from 'lodash-es/noop'\nimport { useState } from 'react'\nimport {\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_CONFIG,\n AUTH_MODE_INPUT_DESCRIPTION,\n AUTH_MODE_INPUT_LABEL,\n AUTH_MODE_OPTIONS,\n CURATE_TASK_TYPE_CONFIG,\n CURATE_TASK_TYPE_INPUT_LABEL,\n CURATE_TASK_TYPE_OPTIONS,\n DEFAULT_CURATE_TASK_TYPE,\n GENERIC_SAVE_ERROR_MESSAGE,\n TASK_STATUS_CONFIG,\n TASK_STATUS_INPUT_LABEL,\n} from '../utils/constants'\nimport {\n CurateTaskConcreteType,\n getCurateTaskConcreteType,\n instanceOfGridSupportedTaskProperties,\n} from '../utils/types'\nimport CommonTaskFields from './CommonTaskFields'\nimport FileBasedFields from './FileBasedFields'\nimport ProjectSelectorField from './ProjectSelectorField'\nimport RecordBasedFields from './RecordBasedFields'\nimport TaskFormActions from './TaskFormActions'\nimport TaskFormHeader from './TaskFormHeader'\nimport { useCurationTaskFormState } from './useCurationTaskFormState'\nimport {\n AuthorizationModeOption,\n buildCurateTaskPayload,\n FileBasedFieldsValue,\n RecordBasedFieldsValue,\n} from './utils/buildCurateTaskPayload'\n\nconst EMPTY_FILE_BASED_VALUE: FileBasedFieldsValue = {\n uploadFolderId: '',\n fileViewId: '',\n}\nconst EMPTY_RECORD_BASED_VALUE: RecordBasedFieldsValue = {\n recordSetId: '',\n}\n\nfunction toAuthorizationModeOption(\n value: string | undefined,\n): AuthorizationModeOption {\n if (value === 'SESSION_OWNER' || value === 'SOURCE_BENEFACTOR') return value\n return 'NONE'\n}\n\nexport type CurateTaskFormProps = {\n /**\n * Present when the host page already has a project context (e.g. a project's Metadata Tasks page).\n * Absent when creating from a context without one (e.g. the Curator Dashboard), in which case the user\n * is prompted to choose a project. Ignored in edit mode -- the project is always derived from `task`.\n */\n projectId?: string\n /** The task being edited. Undefined when creating a new task. */\n task?: CurationTask\n /** Called after a new task is successfully created. */\n onCreated?: (task: CurationTask) => void\n /** Called after an existing task is successfully saved. */\n onSaved?: (task: CurationTask) => void\n /** Called after the task is successfully deleted (edit mode only). */\n onDeleted?: () => void\n /** Shows a \"Back\" button (create mode) that returns to the category picker. */\n onBack?: () => void\n /** Shows a \"Cancel\" button (edit mode) that exits the page without saving. */\n onCancel?: () => void\n /**\n * Shows a \"Back to All Tasks\" button in the top-left of the page, which exits the entire\n * create/edit flow back to the task list (as opposed to `onBack`/`onCancel`, which only move\n * between steps within the flow).\n */\n onExit?: () => void\n /**\n * When present, rendered as a centered page title above the form (e.g. \"Create New Curate Task\" or\n * \"Edit Task\"). The host page is responsible for supplying this rather than rendering its own\n * heading, so the title and the single-column form below it share one centered layout.\n */\n pageTitle?: string\n /** When present, rendered as a centered subtitle below `pageTitle`. */\n pageDescription?: string\n}\n\n/**\n * The create/edit form for a Curate Data curation task (File-Based / Records-Based). Used as the\n * `curate` step of the create wizard (`CreateCurationTaskFlow`) and directly by `EditCurationTaskPage`.\n */\nexport default function CurateTaskForm(props: CurateTaskFormProps) {\n const {\n projectId,\n task,\n onCreated,\n onSaved,\n onDeleted,\n onBack,\n onCancel,\n onExit,\n pageTitle,\n pageDescription,\n } = props\n\n const form = useCurationTaskFormState({ projectId, task, onDeleted })\n const { isEditMode } = form\n\n const existingCurateConcreteType = getCurateTaskConcreteType(\n task?.taskProperties,\n )\n\n const [selectedConcreteType, setSelectedConcreteType] =\n useState<CurateTaskConcreteType>(\n () => existingCurateConcreteType ?? DEFAULT_CURATE_TASK_TYPE,\n )\n\n const [fileBasedValue, setFileBasedValue] = useState<FileBasedFieldsValue>(\n () => {\n const tp = task?.taskProperties\n if (tp?.concreteType === CURATE_TASK_TYPE_OPTIONS[0]) {\n return {\n uploadFolderId: tp.uploadFolderId ?? '',\n fileViewId: tp.fileViewId ?? '',\n }\n }\n return EMPTY_FILE_BASED_VALUE\n },\n )\n const [recordBasedValue, setRecordBasedValue] =\n useState<RecordBasedFieldsValue>(() => {\n const tp = task?.taskProperties\n if (tp?.concreteType === CURATE_TASK_TYPE_OPTIONS[1]) {\n return { recordSetId: tp.recordSetId ?? '' }\n }\n return EMPTY_RECORD_BASED_VALUE\n })\n\n const initialAuthorizationMode = toAuthorizationModeOption(\n instanceOfGridSupportedTaskProperties(task?.taskProperties)\n ? task.taskProperties.suggestedAuthorizationMode\n : undefined,\n )\n const [authorizationMode, setAuthorizationMode] = useState(\n initialAuthorizationMode,\n )\n\n const isTypeSpecificValid =\n selectedConcreteType === CURATE_TASK_TYPE_OPTIONS[0]\n ? !!fileBasedValue.uploadFolderId.trim() &&\n !!fileBasedValue.fileViewId.trim()\n : !!recordBasedValue.recordSetId.trim()\n const isValid =\n form.isCommonFieldsValid && form.isProjectValid && isTypeSpecificValid\n\n const authModeChanged =\n isEditMode && authorizationMode !== initialAuthorizationMode\n\n async function handleSubmit() {\n const payload = buildCurateTaskPayload({\n existingTask: isEditMode ? task : undefined,\n projectId: form.effectiveProjectId,\n dataType: form.dataType,\n instructions: form.instructions,\n assigneePrincipalId: form.assigneePrincipalId,\n curateTypeFields: {\n concreteType: selectedConcreteType,\n authorizationMode,\n fileBased: fileBasedValue,\n recordBased: recordBasedValue,\n },\n })\n\n const result = await form.submitTaskAndStatus(payload)\n if (isEditMode) {\n onSaved?.(result)\n } else {\n onCreated?.(result)\n }\n }\n\n return (\n <Stack gap={3}>\n <TaskFormHeader\n onExit={onExit}\n pageTitle={pageTitle}\n pageDescription={pageDescription}\n />\n\n <Stack gap={3} sx={{ width: '100%', maxWidth: 700, mx: 'auto' }}>\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-type-label\">\n {CURATE_TASK_TYPE_INPUT_LABEL}\n </InputLabel>\n <Select\n labelId=\"curate-task-type-label\"\n label={CURATE_TASK_TYPE_INPUT_LABEL}\n value={selectedConcreteType}\n disabled={isEditMode}\n onChange={e => setSelectedConcreteType(e.target.value)}\n >\n {CURATE_TASK_TYPE_OPTIONS.map(concreteType => (\n <MenuItem key={concreteType} value={concreteType}>\n {CURATE_TASK_TYPE_CONFIG[concreteType].label}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n\n {form.showProjectSelector && (\n <ProjectSelectorField\n value={form.selectedProjectId}\n onChange={form.setSelectedProjectId}\n />\n )}\n\n <CommonTaskFields\n dataType={form.dataType}\n onDataTypeChange={form.setDataType}\n dueDate={form.displayedDueDate}\n onDueDateChange={form.setPendingDueDate}\n instructions={form.instructions}\n onInstructionsChange={form.setInstructions}\n assigneePrincipalId={form.assigneePrincipalId}\n onAssigneePrincipalIdChange={form.setAssigneePrincipalId}\n />\n\n {isEditMode && (\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-status-label\">\n {TASK_STATUS_INPUT_LABEL}\n </InputLabel>\n <Select\n labelId=\"curate-task-status-label\"\n value={form.displayedStatusState ?? ''}\n label={TASK_STATUS_INPUT_LABEL}\n disabled={form.isStatusFetching || form.currentTaskStatus == null}\n onChange={e =>\n form.setPendingStatusState(\n e.target.value as TaskStatusStateEnum,\n )\n }\n >\n {Object.values(TaskStatusStateEnum).map(state => (\n <MenuItem key={state} value={state}>\n {TASK_STATUS_CONFIG[state].label}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n )}\n\n {selectedConcreteType ===\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties ? (\n <FileBasedFields\n value={fileBasedValue}\n onChange={setFileBasedValue}\n disabled={isEditMode}\n />\n ) : (\n <RecordBasedFields\n value={recordBasedValue}\n onChange={setRecordBasedValue}\n disabled={isEditMode}\n />\n )}\n\n <StyledFormControl fullWidth>\n <InputLabel id=\"curate-task-auth-mode-label\">\n {AUTH_MODE_INPUT_LABEL}\n </InputLabel>\n <FieldDescription>{AUTH_MODE_INPUT_DESCRIPTION}</FieldDescription>\n <Select\n labelId=\"curate-task-auth-mode-label\"\n label={AUTH_MODE_INPUT_LABEL}\n value={authorizationMode}\n onChange={e =>\n setAuthorizationMode(e.target.value as AuthorizationModeOption)\n }\n >\n {AUTH_MODE_OPTIONS.map(mode => (\n <MenuItem key={mode} value={mode}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_CONFIG[mode].label}\n </Typography>\n <Tooltip title={AUTH_MODE_CONFIG[mode].tooltip}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n\n {authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {form.error && (\n <Alert severity=\"error\">\n {form.error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n\n <TaskFormActions\n isEditMode={isEditMode}\n isPending={form.isPending}\n isValid={isValid}\n onSubmit={() => void handleSubmit().catch(noop)}\n onBack={onBack}\n onCancel={onCancel}\n canDelete={form.canDelete}\n showDeleteConfirmation={form.showDeleteConfirmation}\n onRequestDelete={() => form.setShowDeleteConfirmation(true)}\n onConfirmDelete={() => {\n if (task?.taskId != null) form.deleteTask(task.taskId)\n }}\n onCancelDelete={() => form.setShowDeleteConfirmation(false)}\n isDeletePending={form.isDeletePending}\n />\n </Stack>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Page for editing an existing curation task, reached via `edit/:taskId` on a host page's router (see
3
+ * `MetadataTasksPageRouter`/`CuratorDashboardRouter`). Fetches the task and dispatches to either
4
+ * `ComputeTaskForm` or `CurateTaskForm` based on the task's category (falling back to `ComputeTaskForm`,
5
+ * which handles the "unrecognized category" case, for any task that is neither).
6
+ */
7
+ export default function EditCurationTaskPage(): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=EditCurationTaskPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditCurationTaskPage.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/EditCurationTaskPage.tsx"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,4CAyC3C"}
@@ -0,0 +1,29 @@
1
+ import { ErrorBanner as e } from "../../../../components/error/ErrorBanner.js";
2
+ import { SynapseSpinner as t } from "../../../../components/LoadingScreen/LoadingScreen.js";
3
+ import { useGetCurationTask as n } from "../../../../synapse-queries/curation/task/useCurationTask.js";
4
+ import { EDIT_CURATION_TASK_PAGE_DESCRIPTION as r, EDIT_CURATION_TASK_PAGE_TITLE as i } from "../utils/constants.js";
5
+ import { getCurateTaskConcreteType as a } from "../utils/types.js";
6
+ import o from "./ComputeTaskForm.js";
7
+ import s from "./CurateTaskForm.js";
8
+ import { jsx as c } from "react/jsx-runtime";
9
+ import { useNavigate as l, useParams as u } from "react-router";
10
+ //#region src/features/entity/metadata-task/create-task/EditCurationTaskPage.tsx
11
+ function d() {
12
+ let { taskId: d } = u(), f = d ? Number(d) : void 0, p = l(), { data: m, isLoading: h, error: g } = n(f ?? 0, { enabled: f != null });
13
+ function _() {
14
+ p("..");
15
+ }
16
+ return f == null || g ? /* @__PURE__ */ c(e, { error: g ?? "Invalid task ID" }) : h || m == null ? /* @__PURE__ */ c(t, { size: 50 }) : /* @__PURE__ */ c(a(m.taskProperties) === void 0 ? o : s, {
17
+ task: m,
18
+ pageTitle: i,
19
+ pageDescription: r,
20
+ onSaved: _,
21
+ onDeleted: _,
22
+ onCancel: _,
23
+ onExit: _
24
+ }, f);
25
+ }
26
+ //#endregion
27
+ export { d as default };
28
+
29
+ //# sourceMappingURL=EditCurationTaskPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditCurationTaskPage.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/EditCurationTaskPage.tsx"],"sourcesContent":["import { ErrorBanner } from '@/components/error/ErrorBanner'\nimport { SynapseSpinner } from '@/components/LoadingScreen/LoadingScreen'\nimport { useGetCurationTask } from '@/synapse-queries/curation/task/useCurationTask'\nimport { useNavigate, useParams } from 'react-router'\nimport {\n EDIT_CURATION_TASK_PAGE_DESCRIPTION,\n EDIT_CURATION_TASK_PAGE_TITLE,\n} from '../utils/constants'\nimport { getCurateTaskConcreteType } from '../utils/types'\nimport ComputeTaskForm from './ComputeTaskForm'\nimport CurateTaskForm from './CurateTaskForm'\n\n/**\n * Page for editing an existing curation task, reached via `edit/:taskId` on a host page's router (see\n * `MetadataTasksPageRouter`/`CuratorDashboardRouter`). Fetches the task and dispatches to either\n * `ComputeTaskForm` or `CurateTaskForm` based on the task's category (falling back to `ComputeTaskForm`,\n * which handles the \"unrecognized category\" case, for any task that is neither).\n */\nexport default function EditCurationTaskPage() {\n const { taskId } = useParams<{ taskId: string }>()\n const parsedTaskId = taskId ? Number(taskId) : undefined\n const navigate = useNavigate()\n\n const {\n data: task,\n isLoading,\n error,\n } = useGetCurationTask(parsedTaskId ?? 0, {\n enabled: parsedTaskId != null,\n })\n\n function exit() {\n navigate('..')\n }\n\n if (parsedTaskId == null || error) {\n return <ErrorBanner error={error ?? 'Invalid task ID'} />\n }\n\n if (isLoading || task == null) {\n return <SynapseSpinner size={50} />\n }\n\n const isCurateTask =\n getCurateTaskConcreteType(task.taskProperties) !== undefined\n const FormComponent = isCurateTask ? CurateTaskForm : ComputeTaskForm\n\n return (\n <FormComponent\n key={parsedTaskId}\n task={task}\n pageTitle={EDIT_CURATION_TASK_PAGE_TITLE}\n pageDescription={EDIT_CURATION_TASK_PAGE_DESCRIPTION}\n onSaved={exit}\n onDeleted={exit}\n onCancel={exit}\n onExit={exit}\n />\n )\n}\n"],"mappings":";;;;;;;;;;AAkBA,SAAwB,IAAuB;CAC7C,IAAM,EAAE,cAAW,EAA8B,GAC3C,IAAe,IAAS,OAAO,CAAM,IAAI,KAAA,GACzC,IAAW,EAAY,GAEvB,EACJ,MAAM,GACN,cACA,aACE,EAAmB,KAAgB,GAAG,EACxC,SAAS,KAAgB,KAC3B,CAAC;CAED,SAAS,IAAO;EACd,EAAS,IAAI;CACf;CAcA,OAZI,KAAgB,QAAQ,IACnB,kBAAC,GAAD,EAAa,OAAO,KAAS,kBAAoB,CAAA,IAGtD,KAAa,KAAQ,OAChB,kBAAC,GAAD,EAAgB,MAAM,GAAK,CAAA,IAQlC,kBAJA,EAA0B,EAAK,cAAc,MAAM,KAAA,IACC,IAAjB,GAGnC;EAEQ;EACN,WAAW;EACX,iBAAiB;EACjB,SAAS;EACT,WAAW;EACX,UAAU;EACV,QAAQ;CACT,GARM,CAQN;AAEL"}
@@ -0,0 +1,13 @@
1
+ import { FileBasedFieldsValue } from './utils/buildCurateTaskPayload';
2
+ export type FileBasedFieldsProps = {
3
+ value: FileBasedFieldsValue;
4
+ onChange: (value: FileBasedFieldsValue) => void;
5
+ /** True in edit mode, since these identity fields are immutable once the task is created. */
6
+ disabled?: boolean;
7
+ };
8
+ /**
9
+ * Fields specific to a File-Based Curate Data task (`FileBasedMetadataTaskProperties`): the folder
10
+ * files are uploaded to, and the FileView used to start grid sessions.
11
+ */
12
+ export default function FileBasedFields(props: FileBasedFieldsProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=FileBasedFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileBasedFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/FileBasedFields.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAErE,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC/C,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAiDlE"}
@@ -0,0 +1,65 @@
1
+ import { VersionSelectionType as e } from "../../../../components/EntityFinder/VersionSelectionType.js";
2
+ import { FinderScope as t } from "../../../../components/EntityFinder/tree/EntityTree.js";
3
+ import { FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION as n, FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION as r, FILE_VIEW_FINDER_PROMPT as i, FILE_VIEW_FINDER_TITLE as a, UPLOAD_FOLDER_FINDER_PROMPT as o, UPLOAD_FOLDER_FINDER_TITLE as s } from "../utils/constants.js";
4
+ import c from "../../../../components/EntityFinder/EntityIdTextField.js";
5
+ import { Stack as l } from "@mui/material";
6
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
7
+ import { EntityType as f } from "@sage-bionetworks/synapse-client";
8
+ //#region src/features/entity/metadata-task/create-task/FileBasedFields.tsx
9
+ function p(p) {
10
+ let { value: m, onChange: h, disabled: g = !1 } = p;
11
+ return /* @__PURE__ */ d(l, {
12
+ gap: 2,
13
+ children: [/* @__PURE__ */ u(c, {
14
+ label: "Upload Folder ID",
15
+ value: m.uploadFolderId,
16
+ description: r,
17
+ onChange: (e) => h({
18
+ ...m,
19
+ uploadFolderId: e
20
+ }),
21
+ disabled: g,
22
+ required: !0,
23
+ entityFinderModalProps: {
24
+ title: s,
25
+ promptCopy: o,
26
+ confirmButtonCopy: "Select",
27
+ configuration: {
28
+ initialScope: t.ALL_PROJECTS,
29
+ initialContainer: "root",
30
+ selectMultiple: !1,
31
+ treeOnly: !1,
32
+ versionSelection: e.DISALLOWED,
33
+ selectableTypes: [f.folder]
34
+ }
35
+ }
36
+ }), /* @__PURE__ */ u(c, {
37
+ label: "File View ID",
38
+ value: m.fileViewId,
39
+ description: n,
40
+ onChange: (e) => h({
41
+ ...m,
42
+ fileViewId: e
43
+ }),
44
+ disabled: g,
45
+ required: !0,
46
+ entityFinderModalProps: {
47
+ title: a,
48
+ promptCopy: i,
49
+ confirmButtonCopy: "Select",
50
+ configuration: {
51
+ initialScope: t.ALL_PROJECTS,
52
+ initialContainer: "root",
53
+ selectMultiple: !1,
54
+ treeOnly: !1,
55
+ versionSelection: e.DISALLOWED,
56
+ selectableTypes: [f.entityview]
57
+ }
58
+ }
59
+ })]
60
+ });
61
+ }
62
+ //#endregion
63
+ export { p as default };
64
+
65
+ //# sourceMappingURL=FileBasedFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileBasedFields.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/FileBasedFields.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { Stack } from '@mui/material'\nimport {\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\nimport { FileBasedFieldsValue } from './utils/buildCurateTaskPayload'\n\nexport type FileBasedFieldsProps = {\n value: FileBasedFieldsValue\n onChange: (value: FileBasedFieldsValue) => void\n /** True in edit mode, since these identity fields are immutable once the task is created. */\n disabled?: boolean\n}\n\n/**\n * Fields specific to a File-Based Curate Data task (`FileBasedMetadataTaskProperties`): the folder\n * files are uploaded to, and the FileView used to start grid sessions.\n */\nexport default function FileBasedFields(props: FileBasedFieldsProps) {\n const { value, onChange, disabled = false } = props\n\n return (\n <Stack gap={2}>\n <EntityIdTextField\n label=\"Upload Folder ID\"\n value={value.uploadFolderId}\n description={FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION}\n onChange={uploadFolderId => onChange({ ...value, uploadFolderId })}\n disabled={disabled}\n required\n entityFinderModalProps={{\n title: UPLOAD_FOLDER_FINDER_TITLE,\n promptCopy: UPLOAD_FOLDER_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.folder],\n },\n }}\n />\n <EntityIdTextField\n label=\"File View ID\"\n value={value.fileViewId}\n description={FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION}\n onChange={fileViewId => onChange({ ...value, fileViewId })}\n disabled={disabled}\n required\n entityFinderModalProps={{\n title: FILE_VIEW_FINDER_TITLE,\n promptCopy: FILE_VIEW_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.entityview],\n },\n }}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;AA0BA,SAAwB,EAAgB,GAA6B;CACnE,IAAM,EAAE,UAAO,aAAU,cAAW,OAAU;CAE9C,OACE,kBAAC,GAAD;EAAO,KAAK;YAAZ,CACE,kBAAC,GAAD;GACE,OAAM;GACN,OAAO,EAAM;GACb,aAAa;GACb,WAAU,MAAkB,EAAS;IAAE,GAAG;IAAO;GAAe,CAAC;GACvD;GACV,UAAA;GACA,wBAAwB;IACtB,OAAO;IACP,YAAY;IACZ,mBAAmB;IACnB,eAAe;KACb,cAAc,EAAY;KAC1B,kBAAkB;KAClB,gBAAgB;KAChB,UAAU;KACV,kBAAkB,EAAqB;KACvC,iBAAiB,CAAC,EAAW,MAAM;IACrC;GACF;EACD,CAAA,GACD,kBAAC,GAAD;GACE,OAAM;GACN,OAAO,EAAM;GACb,aAAa;GACb,WAAU,MAAc,EAAS;IAAE,GAAG;IAAO;GAAW,CAAC;GAC/C;GACV,UAAA;GACA,wBAAwB;IACtB,OAAO;IACP,YAAY;IACZ,mBAAmB;IACnB,eAAe;KACb,cAAc,EAAY;KAC1B,kBAAkB;KAClB,gBAAgB;KAChB,UAAU;KACV,kBAAkB,EAAqB;KACvC,iBAAiB,CAAC,EAAW,UAAU;IACzC;GACF;EACD,CAAA,CACI;;AAEX"}
@@ -0,0 +1,11 @@
1
+ export type ProjectSelectorFieldProps = {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ };
5
+ /**
6
+ * Lets the user choose which project a new task belongs to. Only shown when the host page did not already
7
+ * supply a `projectId` from its own context (e.g. when creating a task from the Curator Dashboard, which
8
+ * has no project context, as opposed to a project's Metadata Tasks page, which does).
9
+ */
10
+ export default function ProjectSelectorField(props: ProjectSelectorFieldProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=ProjectSelectorField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectSelectorField.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/ProjectSelectorField.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CAwB5E"}
@@ -0,0 +1,33 @@
1
+ import { VersionSelectionType as e } from "../../../../components/EntityFinder/VersionSelectionType.js";
2
+ import { FinderScope as t } from "../../../../components/EntityFinder/tree/EntityTree.js";
3
+ import { PROJECT_FINDER_PROMPT as n, PROJECT_FINDER_TITLE as r, PROJECT_SELECTOR_DESCRIPTION as i, PROJECT_SELECTOR_LABEL as a } from "../utils/constants.js";
4
+ import o from "../../../../components/EntityFinder/EntityIdTextField.js";
5
+ import { jsx as s } from "react/jsx-runtime";
6
+ import { EntityType as c } from "@sage-bionetworks/synapse-client";
7
+ //#region src/features/entity/metadata-task/create-task/ProjectSelectorField.tsx
8
+ function l(l) {
9
+ let { value: u, onChange: d } = l;
10
+ return /* @__PURE__ */ s(o, {
11
+ label: a,
12
+ value: u,
13
+ onChange: d,
14
+ description: i,
15
+ entityFinderModalProps: {
16
+ title: r,
17
+ promptCopy: n,
18
+ confirmButtonCopy: "Select",
19
+ configuration: {
20
+ initialScope: t.ALL_PROJECTS,
21
+ initialContainer: "root",
22
+ selectMultiple: !1,
23
+ treeOnly: !1,
24
+ versionSelection: e.DISALLOWED,
25
+ selectableTypes: [c.project]
26
+ }
27
+ }
28
+ });
29
+ }
30
+ //#endregion
31
+ export { l as default };
32
+
33
+ //# sourceMappingURL=ProjectSelectorField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectSelectorField.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/create-task/ProjectSelectorField.tsx"],"sourcesContent":["import EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n PROJECT_FINDER_PROMPT,\n PROJECT_FINDER_TITLE,\n PROJECT_SELECTOR_DESCRIPTION,\n PROJECT_SELECTOR_LABEL,\n} from '../utils/constants'\n\nexport type ProjectSelectorFieldProps = {\n value: string\n onChange: (value: string) => void\n}\n\n/**\n * Lets the user choose which project a new task belongs to. Only shown when the host page did not already\n * supply a `projectId` from its own context (e.g. when creating a task from the Curator Dashboard, which\n * has no project context, as opposed to a project's Metadata Tasks page, which does).\n */\nexport default function ProjectSelectorField(props: ProjectSelectorFieldProps) {\n const { value, onChange } = props\n\n return (\n <EntityIdTextField\n label={PROJECT_SELECTOR_LABEL}\n value={value}\n onChange={onChange}\n description={PROJECT_SELECTOR_DESCRIPTION}\n entityFinderModalProps={{\n title: PROJECT_FINDER_TITLE,\n promptCopy: PROJECT_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.project],\n },\n }}\n />\n )\n}\n"],"mappings":";;;;;;;AAqBA,SAAwB,EAAqB,GAAkC;CAC7E,IAAM,EAAE,UAAO,gBAAa;CAE5B,OACE,kBAAC,GAAD;EACE,OAAO;EACA;EACG;EACV,aAAa;EACb,wBAAwB;GACtB,OAAO;GACP,YAAY;GACZ,mBAAmB;GACnB,eAAe;IACb,cAAc,EAAY;IAC1B,kBAAkB;IAClB,gBAAgB;IAChB,UAAU;IACV,kBAAkB,EAAqB;IACvC,iBAAiB,CAAC,EAAW,OAAO;GACtC;EACF;CACD,CAAA;AAEL"}
@@ -0,0 +1,13 @@
1
+ import { RecordBasedFieldsValue } from './utils/buildCurateTaskPayload';
2
+ export type RecordBasedFieldsProps = {
3
+ value: RecordBasedFieldsValue;
4
+ onChange: (value: RecordBasedFieldsValue) => void;
5
+ /** True in edit mode, since this identity field is immutable once the task is created. */
6
+ disabled?: boolean;
7
+ };
8
+ /**
9
+ * Fields specific to a Records-Based Curate Data task (`RecordBasedMetadataTaskProperties`): the
10
+ * RecordSet used to start grid sessions.
11
+ */
12
+ export default function RecordBasedFields(props: RecordBasedFieldsProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=RecordBasedFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordBasedFields.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/RecordBasedFields.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,sBAAsB,CAAA;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;IACjD,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA0BtE"}