synapse-react-client 4.0.35 → 4.0.37

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 (511) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +24 -0
  3. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -0
  4. package/dist/aridhia-queries/AridhiaKeyFactory.js +49 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -0
  6. package/dist/aridhia-queries/FairFormPayload.d.ts +45 -0
  7. package/dist/aridhia-queries/FairFormPayload.d.ts.map +1 -0
  8. package/dist/aridhia-queries/FairFormPayload.js +0 -0
  9. package/dist/aridhia-queries/TransferType.d.ts +10 -0
  10. package/dist/aridhia-queries/TransferType.d.ts.map +1 -0
  11. package/dist/aridhia-queries/TransferType.js +0 -0
  12. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  13. package/dist/aridhia-queries/index.d.ts +12 -0
  14. package/dist/aridhia-queries/index.d.ts.map +1 -1
  15. package/dist/aridhia-queries/index.js +12 -2
  16. package/dist/aridhia-queries/useAridhiaQuery.d.ts +38 -0
  17. package/dist/aridhia-queries/useAridhiaQuery.d.ts.map +1 -0
  18. package/dist/aridhia-queries/useAridhiaQuery.js +78 -0
  19. package/dist/aridhia-queries/useAridhiaQuery.js.map +1 -0
  20. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.d.ts +6 -0
  21. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.d.ts.map +1 -0
  22. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.js +13 -0
  23. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.js.map +1 -0
  24. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.d.ts +6 -0
  25. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.d.ts.map +1 -0
  26. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.js +13 -0
  27. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.js.map +1 -0
  28. package/dist/aridhia-queries/useGetAridhiaDictionaries.d.ts +6 -0
  29. package/dist/aridhia-queries/useGetAridhiaDictionaries.d.ts.map +1 -0
  30. package/dist/aridhia-queries/useGetAridhiaDictionaries.js +13 -0
  31. package/dist/aridhia-queries/useGetAridhiaDictionaries.js.map +1 -0
  32. package/dist/aridhia-queries/useGetAridhiaRequests.d.ts +5 -4
  33. package/dist/aridhia-queries/useGetAridhiaRequests.d.ts.map +1 -1
  34. package/dist/aridhia-queries/useGetAridhiaRequests.js +11 -18
  35. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  36. package/dist/aridhia-queries/useGetAridhiaWorkflow.d.ts +13 -0
  37. package/dist/aridhia-queries/useGetAridhiaWorkflow.d.ts.map +1 -0
  38. package/dist/aridhia-queries/useGetAridhiaWorkflow.js +19 -0
  39. package/dist/aridhia-queries/useGetAridhiaWorkflow.js.map +1 -0
  40. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.d.ts +6 -0
  41. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.d.ts.map +1 -0
  42. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.js +13 -0
  43. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.js.map +1 -0
  44. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.d.ts +19 -0
  45. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.d.ts.map +1 -0
  46. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.js +17 -0
  47. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.js.map +1 -0
  48. package/dist/aridhia-queries/useGetAridhiaWorkspaces.d.ts +6 -0
  49. package/dist/aridhia-queries/useGetAridhiaWorkspaces.d.ts.map +1 -0
  50. package/dist/aridhia-queries/useGetAridhiaWorkspaces.js +19 -0
  51. package/dist/aridhia-queries/useGetAridhiaWorkspaces.js.map +1 -0
  52. package/dist/aridhia-queries/useSubmitAridhiaDar.d.ts +27 -0
  53. package/dist/aridhia-queries/useSubmitAridhiaDar.d.ts.map +1 -0
  54. package/dist/aridhia-queries/useSubmitAridhiaDar.js +38 -0
  55. package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -0
  56. package/dist/assets/icons/emailWithNotification.js +15 -15
  57. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  58. package/dist/assets/icons/emailWithNotification.svg +13 -13
  59. package/dist/components/AccessRequirement/EntityActionsRequired.d.ts +0 -1
  60. package/dist/components/AccessRequirement/EntityActionsRequired.d.ts.map +1 -1
  61. package/dist/components/AccessRequirement/EntityActionsRequired.js +3 -6
  62. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  63. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  64. package/dist/components/AccessRequirementList/AccessRequirementList.js +65 -57
  65. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  66. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  67. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +1 -1
  68. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  69. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  70. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +67 -57
  71. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  72. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  73. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +33 -32
  74. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  75. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  76. package/dist/components/Aridhia/AridhiaAccessStatus.js +39 -18
  77. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  78. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts +32 -0
  79. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts.map +1 -0
  80. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js +285 -0
  81. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js.map +1 -0
  82. package/dist/components/Aridhia/DarWizard/DarAboutStep.d.ts +4 -0
  83. package/dist/components/Aridhia/DarWizard/DarAboutStep.d.ts.map +1 -0
  84. package/dist/components/Aridhia/DarWizard/DarAboutStep.js +17 -0
  85. package/dist/components/Aridhia/DarWizard/DarAboutStep.js.map +1 -0
  86. package/dist/components/Aridhia/DarWizard/DarCompleteStep.d.ts +27 -0
  87. package/dist/components/Aridhia/DarWizard/DarCompleteStep.d.ts.map +1 -0
  88. package/dist/components/Aridhia/DarWizard/DarCompleteStep.js +96 -0
  89. package/dist/components/Aridhia/DarWizard/DarCompleteStep.js.map +1 -0
  90. package/dist/components/Aridhia/DarWizard/DarDestinationStep.d.ts +28 -0
  91. package/dist/components/Aridhia/DarWizard/DarDestinationStep.d.ts.map +1 -0
  92. package/dist/components/Aridhia/DarWizard/DarDestinationStep.js +128 -0
  93. package/dist/components/Aridhia/DarWizard/DarDestinationStep.js.map +1 -0
  94. package/dist/components/Aridhia/DarWizard/DarProjectStep.d.ts +4 -0
  95. package/dist/components/Aridhia/DarWizard/DarProjectStep.d.ts.map +1 -0
  96. package/dist/components/Aridhia/DarWizard/DarProjectStep.js +17 -0
  97. package/dist/components/Aridhia/DarWizard/DarProjectStep.js.map +1 -0
  98. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts +13 -0
  99. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -0
  100. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +23 -0
  101. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -0
  102. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +11 -0
  103. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -0
  104. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +47 -0
  105. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -0
  106. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.d.ts +16 -0
  107. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.d.ts.map +1 -0
  108. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.js +33 -0
  109. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.js.map +1 -0
  110. package/dist/components/Aridhia/DarWizard/useDarDraft.d.ts +32 -0
  111. package/dist/components/Aridhia/DarWizard/useDarDraft.d.ts.map +1 -0
  112. package/dist/components/Aridhia/DarWizard/useDarDraft.js +44 -0
  113. package/dist/components/Aridhia/DarWizard/useDarDraft.js.map +1 -0
  114. package/dist/components/Aridhia/FairLabelField.d.ts +8 -0
  115. package/dist/components/Aridhia/FairLabelField.d.ts.map +1 -0
  116. package/dist/components/Aridhia/FairLabelField.js +13 -0
  117. package/dist/components/Aridhia/FairLabelField.js.map +1 -0
  118. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +3 -3
  119. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
  120. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +1 -1
  121. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  122. package/dist/components/Aridhia/fairFormToRjsf.d.ts +36 -0
  123. package/dist/components/Aridhia/fairFormToRjsf.d.ts.map +1 -0
  124. package/dist/components/Aridhia/fairFormToRjsf.js +137 -0
  125. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -0
  126. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.d.ts.map +1 -1
  127. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +2 -2
  128. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  129. package/dist/components/CardContainer/CardConfiguration.d.ts +8 -0
  130. package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
  131. package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
  132. package/dist/components/CardContainer/CardContainer.js +1 -1
  133. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  134. package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
  135. package/dist/components/ChallengeSubmission/ChallengeSubmission.js +2 -2
  136. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  137. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.d.ts.map +1 -1
  138. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +3 -3
  139. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  140. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +1 -1
  141. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  142. package/dist/components/ChangePassword/ChangePasswordWithToken.d.ts.map +1 -1
  143. package/dist/components/ChangePassword/ChangePasswordWithToken.js +58 -23
  144. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  145. package/dist/components/ChangePassword/useChangePasswordFormState.d.ts.map +1 -1
  146. package/dist/components/ChangePassword/useChangePasswordFormState.js +13 -3
  147. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  148. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js +2 -2
  149. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  150. package/dist/components/CreateTableViewWizard/TableNameForm.d.ts.map +1 -1
  151. package/dist/components/CreateTableViewWizard/TableNameForm.js +11 -14
  152. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  153. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  154. package/dist/components/DataGrid/SynapseGrid.js +121 -117
  155. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  156. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts +1 -1
  157. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  158. package/dist/components/DataGrid/SyncGridWithSourceButton.js +55 -61
  159. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  160. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts +21 -1
  161. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts.map +1 -1
  162. package/dist/components/DataGrid/columns/DateTimeColumn.js +73 -29
  163. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  164. package/dist/components/DataGrid/columns/NumberColumn.d.ts +31 -0
  165. package/dist/components/DataGrid/columns/NumberColumn.d.ts.map +1 -0
  166. package/dist/components/DataGrid/columns/NumberColumn.js +27 -0
  167. package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -0
  168. package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts +1 -0
  169. package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts.map +1 -1
  170. package/dist/components/DataGrid/components/ReorderColumnsButton.js +17 -16
  171. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  172. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts +2 -0
  173. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  174. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +104 -65
  175. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  176. package/dist/components/DataGrid/components/contextMenu.d.ts.map +1 -1
  177. package/dist/components/DataGrid/components/contextMenu.js +15 -15
  178. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  179. package/dist/components/DataGrid/useDataGridWebsocket.js +1 -1
  180. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  181. package/dist/components/DataGrid/useMergeGridWithSource.d.ts +1 -5
  182. package/dist/components/DataGrid/useMergeGridWithSource.d.ts.map +1 -1
  183. package/dist/components/DataGrid/useMergeGridWithSource.js +21 -28
  184. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  185. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  186. package/dist/components/DataGrid/utils/columnFactory.js +55 -51
  187. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  188. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.d.ts.map +1 -1
  189. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js +9 -8
  190. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js.map +1 -1
  191. package/dist/components/DatasetHosting/DatasetDownloadButton.d.ts +40 -0
  192. package/dist/components/DatasetHosting/DatasetDownloadButton.d.ts.map +1 -0
  193. package/dist/components/DatasetHosting/DatasetDownloadButton.js +124 -0
  194. package/dist/components/DatasetHosting/DatasetDownloadButton.js.map +1 -0
  195. package/dist/components/DatasetHosting/DatasetHosting.d.ts +97 -0
  196. package/dist/components/DatasetHosting/DatasetHosting.d.ts.map +1 -0
  197. package/dist/components/DatasetHosting/DatasetHosting.js +64 -0
  198. package/dist/components/DatasetHosting/DatasetHosting.js.map +1 -0
  199. package/dist/components/DatasetHosting/DatasetHostingAdornment.d.ts +15 -0
  200. package/dist/components/DatasetHosting/DatasetHostingAdornment.d.ts.map +1 -0
  201. package/dist/components/DatasetHosting/DatasetHostingAdornment.js +23 -0
  202. package/dist/components/DatasetHosting/DatasetHostingAdornment.js.map +1 -0
  203. package/dist/components/DatasetHosting/index.d.ts +7 -0
  204. package/dist/components/DatasetHosting/index.d.ts.map +1 -0
  205. package/dist/components/DatasetHosting/index.js +4 -0
  206. package/dist/components/DownloadCart/ActionRequiredListItem.d.ts +0 -2
  207. package/dist/components/DownloadCart/ActionRequiredListItem.d.ts.map +1 -1
  208. package/dist/components/DownloadCart/ActionRequiredListItem.js +2 -3
  209. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  210. package/dist/components/DownloadCart/DownloadCartPage.d.ts +1 -2
  211. package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
  212. package/dist/components/DownloadCart/DownloadCartPage.js +49 -49
  213. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  214. package/dist/components/DownloadCart/DownloadListActionsRequired.d.ts +1 -5
  215. package/dist/components/DownloadCart/DownloadListActionsRequired.d.ts.map +1 -1
  216. package/dist/components/DownloadCart/DownloadListActionsRequired.js +5 -6
  217. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  218. package/dist/components/DownloadCart/RequestDownloadCard.d.ts +0 -2
  219. package/dist/components/DownloadCart/RequestDownloadCard.d.ts.map +1 -1
  220. package/dist/components/DownloadCart/RequestDownloadCard.js +28 -32
  221. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  222. package/dist/components/DownloadCart/TableQueryActionsRequired.d.ts +0 -2
  223. package/dist/components/DownloadCart/TableQueryActionsRequired.d.ts.map +1 -1
  224. package/dist/components/DownloadCart/TableQueryActionsRequired.js +7 -8
  225. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  226. package/dist/components/DownloadCart/index.d.ts +1 -2
  227. package/dist/components/DownloadCart/index.d.ts.map +1 -1
  228. package/dist/components/DropdownSelect/DropdownSelect.d.ts.map +1 -1
  229. package/dist/components/DropdownSelect/DropdownSelect.js +1 -1
  230. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  231. package/dist/components/EntityFinder/tree/EntityTree.d.ts.map +1 -1
  232. package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
  233. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  234. package/dist/components/EntityFinder/tree/VirtualizedTree.js +1 -1
  235. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  236. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +1 -1
  237. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  238. package/dist/components/GenericCard/CardActionButtonStyleContext.d.ts +10 -0
  239. package/dist/components/GenericCard/CardActionButtonStyleContext.d.ts.map +1 -0
  240. package/dist/components/GenericCard/CardActionButtonStyleContext.js +10 -0
  241. package/dist/components/GenericCard/CardActionButtonStyleContext.js.map +1 -0
  242. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +41 -41
  243. package/dist/components/GenericCard/GenericCardActionButton.d.ts +5 -0
  244. package/dist/components/GenericCard/GenericCardActionButton.d.ts.map +1 -1
  245. package/dist/components/GenericCard/GenericCardActionButton.js +28 -11
  246. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  247. package/dist/components/GenericCard/TableRowGenericCard.d.ts +24 -0
  248. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  249. package/dist/components/GenericCard/TableRowGenericCard.js +158 -137
  250. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  251. package/dist/components/JSONArrayEditor/JSONArrayEditor.d.ts.map +1 -1
  252. package/dist/components/JSONArrayEditor/JSONArrayEditor.js +42 -42
  253. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  254. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +9 -0
  255. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
  256. package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -0
  257. package/dist/components/JsonSchemaForm/JsonSchemaForm.d.ts.map +1 -1
  258. package/dist/components/JsonSchemaForm/JsonSchemaForm.js +15 -13
  259. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  260. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +5 -0
  261. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -0
  262. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +109 -0
  263. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.d.ts.map +1 -1
  264. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js +1 -1
  265. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  266. package/dist/components/JsonSchemaForm/templates/FieldTemplate.d.ts.map +1 -1
  267. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js +6 -6
  268. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  269. package/dist/components/JsonSchemaForm/widgets/DateWidget.d.ts +9 -0
  270. package/dist/components/JsonSchemaForm/widgets/DateWidget.d.ts.map +1 -0
  271. package/dist/components/JsonSchemaForm/widgets/DateWidget.js +23 -0
  272. package/dist/components/JsonSchemaForm/widgets/DateWidget.js.map +1 -0
  273. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.css +1 -1
  274. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.d.ts +3 -2
  275. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.d.ts.map +1 -1
  276. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js +10 -12
  277. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  278. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.js +8 -7
  279. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.js.map +1 -1
  280. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.scss +12 -2
  281. package/dist/components/Markdown/MarkdownEditor.js +1 -1
  282. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  283. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  284. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +46 -46
  285. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  286. package/dist/components/QueryBuilder/QueryBuilderTypes.d.ts +39 -0
  287. package/dist/components/QueryBuilder/QueryBuilderTypes.d.ts.map +1 -0
  288. package/dist/components/QueryBuilder/QueryBuilderTypes.js +11 -0
  289. package/dist/components/QueryBuilder/QueryBuilderTypes.js.map +1 -0
  290. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +48 -0
  291. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -0
  292. package/dist/components/QueryBuilder/queryBuilderTranslation.js +256 -0
  293. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -0
  294. package/dist/components/QueryContext/QueryContext.d.ts +0 -1
  295. package/dist/components/QueryContext/QueryContext.d.ts.map +1 -1
  296. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  297. package/dist/components/QueryWrapper/QueryWrapper.d.ts +0 -1
  298. package/dist/components/QueryWrapper/QueryWrapper.d.ts.map +1 -1
  299. package/dist/components/QueryWrapper/QueryWrapper.js +52 -53
  300. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  301. package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
  302. package/dist/components/QueryWrapperErrorBoundary.js +4 -11
  303. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  304. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +1 -1
  305. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  306. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -2
  307. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  308. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +27 -25
  309. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  310. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.d.ts +0 -9
  311. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.d.ts.map +1 -1
  312. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js +23 -31
  313. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  314. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.d.ts.map +1 -1
  315. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js +126 -125
  316. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  317. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.d.ts.map +1 -1
  318. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js +6 -5
  319. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  320. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +2 -0
  321. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  322. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +18 -13
  323. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  324. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.d.ts.map +1 -1
  325. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js +0 -1
  326. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  327. package/dist/components/ShareThisPage/ShareThisPage.js +30 -29
  328. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  329. package/dist/components/StatisticsPlot.d.ts.map +1 -1
  330. package/dist/components/StatisticsPlot.js +1 -1
  331. package/dist/components/StatisticsPlot.js.map +1 -1
  332. package/dist/components/SynapseChat/GridAgentChat.d.ts.map +1 -1
  333. package/dist/components/SynapseChat/GridAgentChat.js +29 -31
  334. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  335. package/dist/components/SynapseForm/SynapseFormWrapper.js +1 -1
  336. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  337. package/dist/components/SynapseHomepageV2/HotdropsAndNews.css +1 -1
  338. package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.js +9 -9
  339. package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.js.map +1 -1
  340. package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.scss +14 -0
  341. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +1 -1
  342. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  343. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js +1 -1
  344. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  345. package/dist/components/SynapseTable/SynapseTable.d.ts.map +1 -1
  346. package/dist/components/SynapseTable/SynapseTable.js +2 -1
  347. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  348. package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
  349. package/dist/components/SynapseTable/SynapseTableRenderers.js +1 -1
  350. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  351. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts +4 -0
  352. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  353. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +71 -69
  354. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  355. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.d.ts.map +1 -1
  356. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +29 -30
  357. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  358. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +4 -0
  359. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
  360. package/dist/components/SynapseTable/table-top/DownloadOptions.js +14 -13
  361. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  362. package/dist/components/SynapseTable/usePrefetchTableData.js +1 -1
  363. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  364. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js +4 -4
  365. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  366. package/dist/components/TanStackTable/StyledTanStackTable.d.ts +7 -0
  367. package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
  368. package/dist/components/TanStackTable/StyledTanStackTable.js +68 -48
  369. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  370. package/dist/components/TanStackTable/TableCellRenderer.d.ts.map +1 -1
  371. package/dist/components/TanStackTable/TableCellRenderer.js +1 -1
  372. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  373. package/dist/components/TanStackTable/useSyncedTopScrollbar.d.ts +13 -0
  374. package/dist/components/TanStackTable/useSyncedTopScrollbar.d.ts.map +1 -0
  375. package/dist/components/TanStackTable/useSyncedTopScrollbar.js +32 -0
  376. package/dist/components/TanStackTable/useSyncedTopScrollbar.js.map +1 -0
  377. package/dist/components/TermsAndConditions/TermsAndConditions.js +1 -1
  378. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  379. package/dist/components/Webhook/CreateWebhookModal.d.ts.map +1 -1
  380. package/dist/components/Webhook/CreateWebhookModal.js +1 -1
  381. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  382. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  383. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +172 -61
  384. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  385. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.d.ts +3 -0
  386. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.d.ts.map +1 -1
  387. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.js +2 -2
  388. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.js.map +1 -1
  389. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map +1 -1
  390. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js +11 -9
  391. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  392. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.d.ts.map +1 -1
  393. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +74 -43
  394. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  395. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.d.ts.map +1 -1
  396. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js +2 -2
  397. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  398. package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
  399. package/dist/components/doi/CreateOrUpdateDoiModal.js +15 -18
  400. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  401. package/dist/components/entity/metadata/EntityModal.js +1 -1
  402. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  403. package/dist/components/entity/page/action_menu/EntityActionMenu.js +2 -2
  404. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  405. package/dist/components/index.d.ts +1 -0
  406. package/dist/components/index.d.ts.map +1 -1
  407. package/dist/components/index.js +144 -140
  408. package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
  409. package/dist/components/menu/DropdownMenu.js +7 -7
  410. package/dist/components/menu/DropdownMenu.js.map +1 -1
  411. package/dist/components/row_renderers/Dataset.js +1 -1
  412. package/dist/components/row_renderers/Dataset.js.map +1 -1
  413. package/dist/components/styled/LeftRightPanel.d.ts +8 -0
  414. package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
  415. package/dist/components/styled/LeftRightPanel.js +10 -1
  416. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  417. package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
  418. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  419. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  420. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +1 -1
  421. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  422. package/dist/components/widgets/query-filter/FacetFilterControls.js +1 -1
  423. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  424. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  425. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +1 -1
  426. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  427. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +5 -5
  428. package/dist/index.js +174 -171
  429. package/dist/index.js.map +1 -1
  430. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +73 -0
  431. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -0
  432. package/dist/mocks/msw/handlers/aridhiaHandlers.js +119 -0
  433. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -0
  434. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  435. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +31 -27
  436. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  437. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  438. package/dist/mocks/msw/handlers/entityHandlers.js +4 -4
  439. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  440. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.d.ts +1 -0
  441. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.d.ts.map +1 -1
  442. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js +7 -1
  443. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  444. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  445. package/dist/mocks/msw/handlers/userProfileHandlers.js +6 -2
  446. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  447. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  448. package/dist/mocks/msw/handlers.js +72 -69
  449. package/dist/mocks/msw/handlers.js.map +1 -1
  450. package/dist/style/components/_all.scss +0 -1
  451. package/dist/style/components/_cards.scss +4 -2
  452. package/dist/style/components/_terms-and-conditions.scss +25 -3
  453. package/dist/style/main.css +1 -1
  454. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  455. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  456. package/dist/synapse-queries/KeyFactory.js +3 -0
  457. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  458. package/dist/synapse-queries/dataaccess/index.js +4 -4
  459. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +7 -0
  460. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  461. package/dist/synapse-queries/dataaccess/useEDuc.js +11 -3
  462. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  463. package/dist/synapse-queries/index.js +190 -189
  464. package/dist/testutils/RjsfFormTestUtils.js +12 -0
  465. package/dist/testutils/RjsfFormTestUtils.js.map +1 -0
  466. package/dist/tsconfig.build.tsbuildinfo +1 -1
  467. package/dist/utils/APIConstants.d.ts +1 -0
  468. package/dist/utils/APIConstants.d.ts.map +1 -1
  469. package/dist/utils/APIConstants.js +2 -2
  470. package/dist/utils/APIConstants.js.map +1 -1
  471. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -4
  472. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  473. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  474. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  475. package/dist/utils/functions/QueryFilterUtils.js +1 -1
  476. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  477. package/dist/utils/functions/RegularExpressions.d.ts +10 -0
  478. package/dist/utils/functions/RegularExpressions.d.ts.map +1 -1
  479. package/dist/utils/functions/RegularExpressions.js +7 -1
  480. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  481. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  482. package/dist/utils/functions/SqlFunctions.js +20 -4
  483. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  484. package/dist/utils/functions/queryUtils.js +1 -1
  485. package/dist/utils/functions/queryUtils.js.map +1 -1
  486. package/dist/utils/hooks/useDetectSSOCode.d.ts.map +1 -1
  487. package/dist/utils/hooks/useDetectSSOCode.js +1 -1
  488. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  489. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js +1 -1
  490. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  491. package/dist/utils/index.js +16 -16
  492. package/dist/utils/jsonschema/SchemaAnnotationUtils.js +1 -1
  493. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  494. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +22 -0
  495. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -0
  496. package/dist/utils/jsonschema/collectTopLevelProperties.js +31 -0
  497. package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -0
  498. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
  499. package/dist/utils/jsonschema/getSchemaPropertyInfo.js +1 -1
  500. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  501. package/dist/utils/types/IsType.d.ts +4 -1
  502. package/dist/utils/types/IsType.d.ts.map +1 -1
  503. package/dist/utils/types/IsType.js +4 -4
  504. package/dist/utils/types/IsType.js.map +1 -1
  505. package/dist/utils/types/index.js +2 -2
  506. package/package.json +5 -5
  507. package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts +0 -12
  508. package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts.map +0 -1
  509. package/dist/components/DataGrid/useMergeGridWithRecordSet.js +0 -25
  510. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +0 -1
  511. package/dist/style/components/_annotations.scss +0 -110
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeTeamWizard.js","names":[],"sources":["../../../src/components/ChallengeTeamWizard/ChallengeTeamWizard.tsx"],"sourcesContent":["import {\n useAddMemberToTeam,\n useGetCurrentUserProfile,\n useGetEntityChallenge,\n useGetMembershipStatus,\n useGetUserSubmissionTeams,\n} from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport { Alert, Box, Button, Tooltip, Typography } from '@mui/material'\nimport { noop } from 'lodash-es'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { DialogBase } from '../DialogBase'\nimport { SignInPrompt, SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport {\n CreateChallengeTeam,\n CreateChallengeTeamHandle,\n} from './CreateChallengeTeam'\nimport {\n MembershipRequestForm,\n MembershipRequestFormHandle,\n} from './MembershipRequestForm'\nimport {\n AcceptMembershipInvitationButton,\n OpenMembershipInvitation,\n} from './OpenMembershipInvitation'\nimport { RegistrationSuccessful } from './RegistrationSuccessful'\nimport { SelectChallengeTeam } from './SelectChallengeTeam'\n\nenum ChallengeTeamWizardStep {\n SELECT_YOUR_CHALLENGE_TEAM = 'SELECT_YOUR_CHALLENGE_TEAM',\n ACCEPT_INVITATION = 'ACCEPT_INVITATION',\n JOIN_REQUEST_FORM = 'JOIN_REQUEST_FORM',\n JOIN_REQUEST_SENT = 'JOIN_REQUEST_SENT',\n CREATE_NEW_TEAM = 'CREATE_NEW_TEAM',\n REGISTRATION_SUCCESSFUL = 'REGISTRATION_SUCCESSFUL',\n}\n\nfunction getStepDialogTitle(step: ChallengeTeamWizardStep) {\n switch (step) {\n case ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM:\n return 'Select Your Submission Team'\n case ChallengeTeamWizardStep.ACCEPT_INVITATION:\n return 'Invitation to Join Team'\n case ChallengeTeamWizardStep.JOIN_REQUEST_FORM:\n return 'Request Team Membership'\n case ChallengeTeamWizardStep.JOIN_REQUEST_SENT:\n return 'Request Sent'\n case ChallengeTeamWizardStep.CREATE_NEW_TEAM:\n return 'Create Team'\n case ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL:\n return 'Registration Successful!'\n }\n}\n\nexport type ChallengeTeamWizardProps = {\n projectId: string\n isShowingModal?: boolean\n onClose: () => void\n}\n\n/**\n * The ChallengeTeamWizard is used to guide a user through the process of joining or creating a team for a challenge.\n *\n * A required precondition is that the user is NOT on any registered submission team for the challenge.\n */\nfunction ChallengeTeamWizard(props: ChallengeTeamWizardProps) {\n const { projectId, isShowingModal = false, onClose } = props\n const { isAuthenticated } = useSynapseContext()\n\n const [step, setStep] = useState<ChallengeTeamWizardStep>(\n ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM,\n )\n const [selectedTeamId, setSelectedTeamId] = useState<string | undefined>()\n\n // Tracks if the form to create a new team is valid, so the wizard can control the `disabled` status of the confirm button\n const [canCreateNewTeam, setCanCreateNewTeam] = useState(false)\n // true if the user has created a new team to register for the challenge\n const [hasCreatedNewTeam, setHasCreatedNewTeam] = useState<boolean>(false)\n\n const membershipRequestFormRef = useRef<MembershipRequestFormHandle>(null)\n const createTeamRef = useRef<CreateChallengeTeamHandle>(null)\n\n const { data: userProfile, isLoading: isLoadingUserProfile } =\n useGetCurrentUserProfile({\n enabled: isAuthenticated,\n })\n\n // Retrieve the challenge associated with the projectId passed through props\n const { data: challenge, isLoading: isLoadingChallenge } =\n useGetEntityChallenge(projectId)\n\n const {\n mutateAsync: addTeamMember,\n isPending: addMemberToTeamIsPending,\n error: addUserToTeamError,\n } = useAddMemberToTeam()\n\n // Determine whether the given user belongs to any submission teams\n const { data: userSubmissionTeams, error: userSubmissionTeamError } =\n useGetUserSubmissionTeams(challenge?.id!, 1, 0, {\n enabled: Boolean(isAuthenticated && challenge),\n })\n\n const isMemberOfSubmissionTeam =\n userSubmissionTeams && userSubmissionTeams.results.length > 0\n\n const {\n data: selectedTeamMembershipStatus,\n isLoading: selectedTeamMembershipStatusIsLoading,\n error: selectedTeamMembershipStatusError,\n } = useGetMembershipStatus(selectedTeamId!, String(userProfile?.ownerId), {\n enabled: isAuthenticated && !!selectedTeamId && !!userProfile,\n })\n\n const addUserToTeam = useCallback(async () => {\n if (!selectedTeamId || !userProfile) return\n await addTeamMember({\n teamId: selectedTeamId,\n userId: userProfile.ownerId,\n })\n setStep(ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL)\n }, [addTeamMember, setStep, selectedTeamId, userProfile])\n\n const hide = useCallback(() => {\n setHasCreatedNewTeam(false)\n setSelectedTeamId(undefined)\n onClose()\n }, [onClose])\n\n const isLoading = isLoadingUserProfile || isLoadingChallenge\n\n const backButton = useMemo(() => {\n switch (step) {\n case ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM:\n case ChallengeTeamWizardStep.JOIN_REQUEST_SENT:\n case ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL:\n // Cannot go back from these steps\n return <></>\n case ChallengeTeamWizardStep.ACCEPT_INVITATION:\n case ChallengeTeamWizardStep.JOIN_REQUEST_FORM:\n case ChallengeTeamWizardStep.CREATE_NEW_TEAM:\n default:\n // All the other steps go back to team selection\n return (\n <Button\n variant={'outlined'}\n onClick={() => {\n setStep(ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM)\n setSelectedTeamId(undefined)\n }}\n >\n Back\n </Button>\n )\n }\n }, [step])\n\n const closeButton = useMemo(() => {\n return (\n <Button\n variant={'contained'}\n onClick={() => {\n onClose()\n }}\n >\n Close\n </Button>\n )\n }, [onClose])\n\n // Determine modal content based on step.id\n const { actions = <></>, content = <></> } = useMemo(() => {\n if (!isAuthenticated) {\n return {\n content: (\n <Alert severity={'error'}>\n <SignInPrompt />\n </Alert>\n ),\n }\n }\n\n if (isMemberOfSubmissionTeam) {\n return {\n content: (\n <Alert severity={'error'}>\n <Typography>\n You are already a member of a registered submission team for this\n Challenge.\n </Typography>\n </Alert>\n ),\n }\n }\n\n switch (step) {\n case ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM: {\n let buttonText = 'Join Team'\n let disableJoiningSelectedTeam = false\n let buttonOnClickBehavior: () => void = noop\n let buttonTooltip = ''\n if (\n selectedTeamMembershipStatus &&\n selectedTeamMembershipStatus.hasOpenInvitation\n ) {\n // The user has been invited to join the selected team\n buttonText = 'View Invitation to Join Team'\n buttonOnClickBehavior = () => {\n setStep(ChallengeTeamWizardStep.ACCEPT_INVITATION)\n }\n } else if (\n selectedTeamMembershipStatus &&\n selectedTeamMembershipStatus.hasOpenRequest\n ) {\n // User already has an open request to join the selected team, disable button to avoid request spamming\n buttonText = 'Join Request Pending'\n disableJoiningSelectedTeam = true\n buttonTooltip =\n 'You have already submitted a request to join this team.'\n } else if (\n selectedTeamMembershipStatus &&\n selectedTeamMembershipStatus.membershipApprovalRequired\n ) {\n // The user has to send a request to join the selected team\n buttonText = 'Request to Join Team'\n buttonOnClickBehavior = () => {\n setStep(ChallengeTeamWizardStep.JOIN_REQUEST_FORM)\n }\n } else if (\n selectedTeamMembershipStatus &&\n selectedTeamMembershipStatus.canJoin\n ) {\n // The user can freely join the selected team\n buttonText = 'Join Team'\n buttonOnClickBehavior = () => {\n void addUserToTeam()\n }\n }\n return {\n content: challenge && !isMemberOfSubmissionTeam && (\n <SelectChallengeTeam\n challengeId={challenge.id}\n onCreateTeam={() =>\n setStep(ChallengeTeamWizardStep.CREATE_NEW_TEAM)\n }\n selectedTeamId={selectedTeamId}\n onSelectTeam={teamId => setSelectedTeamId(teamId)}\n />\n ),\n actions: (\n <>\n {backButton}\n <Tooltip title={buttonTooltip}>\n {/* Wrap button in span to show tooltip when button is disabled */}\n <span>\n <Button\n onClick={buttonOnClickBehavior}\n startIcon={\n addMemberToTeamIsPending ? <SynapseSpinner /> : undefined\n }\n disabled={\n !selectedTeamId ||\n selectedTeamMembershipStatusIsLoading ||\n addMemberToTeamIsPending ||\n disableJoiningSelectedTeam\n }\n variant={'contained'}\n >\n {buttonText}\n </Button>\n </span>\n </Tooltip>\n </>\n ),\n }\n }\n case ChallengeTeamWizardStep.ACCEPT_INVITATION:\n return {\n content: <OpenMembershipInvitation teamId={selectedTeamId!} />,\n actions: (\n <>\n {backButton}\n <AcceptMembershipInvitationButton\n teamId={selectedTeamId!}\n onSuccess={() => {\n setStep(ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL)\n }}\n />\n </>\n ),\n }\n case ChallengeTeamWizardStep.JOIN_REQUEST_FORM:\n return {\n content: (\n <MembershipRequestForm\n ref={membershipRequestFormRef}\n teamId={selectedTeamId!}\n onRequestSubmitted={() => {\n setStep(ChallengeTeamWizardStep.JOIN_REQUEST_SENT)\n }}\n />\n ),\n actions: (\n <>\n {backButton}\n <Button\n variant={'contained'}\n onClick={() => {\n membershipRequestFormRef?.current?.submit()\n }}\n >\n Send Request\n </Button>\n </>\n ),\n }\n\n case ChallengeTeamWizardStep.JOIN_REQUEST_SENT:\n return {\n content: (\n <Typography variant=\"body1\" sx={{ lineHeight: '20px' }}>\n Team Manager(s) have received your request. Check your Synapse\n email address for status of your request.\n </Typography>\n ),\n actions: (\n <>\n {backButton}\n {closeButton}\n </>\n ),\n }\n case ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL:\n return {\n content: (\n <RegistrationSuccessful\n createdNewTeam={hasCreatedNewTeam}\n teamId={selectedTeamId}\n />\n ),\n actions: (\n <>\n {backButton}\n {closeButton}\n </>\n ),\n }\n case ChallengeTeamWizardStep.CREATE_NEW_TEAM: {\n return {\n content: (\n <CreateChallengeTeam\n ref={createTeamRef}\n challengeId={challenge?.id!}\n onCanSubmitChange={canSubmit => setCanCreateNewTeam(canSubmit)}\n onFinished={teamId => {\n setHasCreatedNewTeam(true)\n setSelectedTeamId(teamId)\n setStep(ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL)\n }}\n />\n ),\n actions: (\n <>\n {backButton}\n <Button\n variant={'contained'}\n disabled={!canCreateNewTeam}\n onClick={() => {\n createTeamRef?.current?.submit()\n }}\n >\n Create Team\n </Button>\n </>\n ),\n }\n }\n }\n }, [\n isAuthenticated,\n isMemberOfSubmissionTeam,\n step,\n selectedTeamId,\n backButton,\n closeButton,\n hasCreatedNewTeam,\n selectedTeamMembershipStatus,\n challenge,\n addMemberToTeamIsPending,\n selectedTeamMembershipStatusIsLoading,\n addUserToTeam,\n canCreateNewTeam,\n ])\n\n const errorMessage =\n addUserToTeamError?.message ||\n selectedTeamMembershipStatusError?.message ||\n userSubmissionTeamError?.message\n\n return (\n <DialogBase\n onCancel={hide}\n open={isShowingModal}\n actions={actions}\n title={`Challenge Registration (Step 2 of 2): ${getStepDialogTitle(\n step,\n )}`}\n content={\n <SynapseErrorBoundary>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n }}\n >\n {isLoading ? (\n <SynapseSpinner size={40} />\n ) : (\n <>\n {content}\n {errorMessage && (\n <Alert severity={'error'}>{errorMessage}</Alert>\n )}\n </>\n )}\n </Box>\n </SynapseErrorBoundary>\n }\n />\n )\n}\n\nexport default ChallengeTeamWizard\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChallengeTeamWizard.js","names":[],"sources":["../../../src/components/ChallengeTeamWizard/ChallengeTeamWizard.tsx"],"sourcesContent":["import {\n useAddMemberToTeam,\n useGetCurrentUserProfile,\n useGetEntityChallenge,\n useGetMembershipStatus,\n useGetUserSubmissionTeams,\n} from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport { Alert, Box, Button, Tooltip, Typography } from '@mui/material'\nimport { noop } from 'lodash-es'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { DialogBase } from '../DialogBase'\nimport { SignInPrompt, SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport {\n CreateChallengeTeam,\n CreateChallengeTeamHandle,\n} from './CreateChallengeTeam'\nimport {\n MembershipRequestForm,\n MembershipRequestFormHandle,\n} from './MembershipRequestForm'\nimport {\n AcceptMembershipInvitationButton,\n OpenMembershipInvitation,\n} from './OpenMembershipInvitation'\nimport { RegistrationSuccessful } from './RegistrationSuccessful'\nimport { SelectChallengeTeam } from './SelectChallengeTeam'\n\nenum ChallengeTeamWizardStep {\n SELECT_YOUR_CHALLENGE_TEAM = 'SELECT_YOUR_CHALLENGE_TEAM',\n ACCEPT_INVITATION = 'ACCEPT_INVITATION',\n JOIN_REQUEST_FORM = 'JOIN_REQUEST_FORM',\n JOIN_REQUEST_SENT = 'JOIN_REQUEST_SENT',\n CREATE_NEW_TEAM = 'CREATE_NEW_TEAM',\n REGISTRATION_SUCCESSFUL = 'REGISTRATION_SUCCESSFUL',\n}\n\nfunction getStepDialogTitle(step: ChallengeTeamWizardStep) {\n switch (step) {\n case ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM:\n return 'Select Your Submission Team'\n case ChallengeTeamWizardStep.ACCEPT_INVITATION:\n return 'Invitation to Join Team'\n case ChallengeTeamWizardStep.JOIN_REQUEST_FORM:\n return 'Request Team Membership'\n case ChallengeTeamWizardStep.JOIN_REQUEST_SENT:\n return 'Request Sent'\n case ChallengeTeamWizardStep.CREATE_NEW_TEAM:\n return 'Create Team'\n case ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL:\n return 'Registration Successful!'\n }\n}\n\nexport type ChallengeTeamWizardProps = {\n projectId: string\n isShowingModal?: boolean\n onClose: () => void\n}\n\n/**\n * The ChallengeTeamWizard is used to guide a user through the process of joining or creating a team for a challenge.\n *\n * A required precondition is that the user is NOT on any registered submission team for the challenge.\n */\nfunction ChallengeTeamWizard(props: ChallengeTeamWizardProps) {\n const { projectId, isShowingModal = false, onClose } = props\n const { isAuthenticated } = useSynapseContext()\n\n const [step, setStep] = useState<ChallengeTeamWizardStep>(\n ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM,\n )\n const [selectedTeamId, setSelectedTeamId] = useState<string | undefined>()\n\n // Tracks if the form to create a new team is valid, so the wizard can control the `disabled` status of the confirm button\n const [canCreateNewTeam, setCanCreateNewTeam] = useState(false)\n // true if the user has created a new team to register for the challenge\n const [hasCreatedNewTeam, setHasCreatedNewTeam] = useState<boolean>(false)\n\n const membershipRequestFormRef = useRef<MembershipRequestFormHandle>(null)\n const createTeamRef = useRef<CreateChallengeTeamHandle>(null)\n\n const { data: userProfile, isLoading: isLoadingUserProfile } =\n useGetCurrentUserProfile({\n enabled: isAuthenticated,\n })\n\n // Retrieve the challenge associated with the projectId passed through props\n const { data: challenge, isLoading: isLoadingChallenge } =\n useGetEntityChallenge(projectId)\n\n const {\n mutateAsync: addTeamMember,\n isPending: addMemberToTeamIsPending,\n error: addUserToTeamError,\n } = useAddMemberToTeam()\n\n // Determine whether the given user belongs to any submission teams\n const { data: userSubmissionTeams, error: userSubmissionTeamError } =\n useGetUserSubmissionTeams(challenge?.id!, 1, 0, {\n enabled: Boolean(isAuthenticated && challenge),\n })\n\n const isMemberOfSubmissionTeam =\n userSubmissionTeams && userSubmissionTeams.results.length > 0\n\n const {\n data: selectedTeamMembershipStatus,\n isLoading: selectedTeamMembershipStatusIsLoading,\n error: selectedTeamMembershipStatusError,\n } = useGetMembershipStatus(selectedTeamId!, String(userProfile?.ownerId), {\n enabled: isAuthenticated && !!selectedTeamId && !!userProfile,\n })\n\n const addUserToTeam = useCallback(async () => {\n if (!selectedTeamId || !userProfile) return\n await addTeamMember({\n teamId: selectedTeamId,\n userId: userProfile.ownerId,\n })\n setStep(ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL)\n }, [addTeamMember, setStep, selectedTeamId, userProfile])\n\n const hide = useCallback(() => {\n setHasCreatedNewTeam(false)\n setSelectedTeamId(undefined)\n onClose()\n }, [onClose])\n\n const isLoading = isLoadingUserProfile || isLoadingChallenge\n\n const backButton = useMemo(() => {\n switch (step) {\n case ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM:\n case ChallengeTeamWizardStep.JOIN_REQUEST_SENT:\n case ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL:\n // Cannot go back from these steps\n return <></>\n case ChallengeTeamWizardStep.ACCEPT_INVITATION:\n case ChallengeTeamWizardStep.JOIN_REQUEST_FORM:\n case ChallengeTeamWizardStep.CREATE_NEW_TEAM:\n default:\n // All the other steps go back to team selection\n return (\n <Button\n variant={'outlined'}\n onClick={() => {\n setStep(ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM)\n setSelectedTeamId(undefined)\n }}\n >\n Back\n </Button>\n )\n }\n }, [step])\n\n const closeButton = useMemo(() => {\n return (\n <Button\n variant={'contained'}\n onClick={() => {\n onClose()\n }}\n >\n Close\n </Button>\n )\n }, [onClose])\n\n // Determine modal content based on step.id\n const { actions = <></>, content = <></> } = useMemo(() => {\n if (!isAuthenticated) {\n return {\n content: (\n <Alert severity={'error'}>\n <SignInPrompt />\n </Alert>\n ),\n }\n }\n\n if (isMemberOfSubmissionTeam) {\n return {\n content: (\n <Alert severity={'error'}>\n <Typography>\n You are already a member of a registered submission team for this\n Challenge.\n </Typography>\n </Alert>\n ),\n }\n }\n\n switch (step) {\n case ChallengeTeamWizardStep.SELECT_YOUR_CHALLENGE_TEAM: {\n let buttonText = 'Join Team'\n let disableJoiningSelectedTeam = false\n let buttonOnClickBehavior: () => void = noop\n let buttonTooltip = ''\n if (selectedTeamMembershipStatus?.hasOpenInvitation) {\n // The user has been invited to join the selected team\n buttonText = 'View Invitation to Join Team'\n buttonOnClickBehavior = () => {\n setStep(ChallengeTeamWizardStep.ACCEPT_INVITATION)\n }\n } else if (selectedTeamMembershipStatus?.hasOpenRequest) {\n // User already has an open request to join the selected team, disable button to avoid request spamming\n buttonText = 'Join Request Pending'\n disableJoiningSelectedTeam = true\n buttonTooltip =\n 'You have already submitted a request to join this team.'\n } else if (selectedTeamMembershipStatus?.membershipApprovalRequired) {\n // The user has to send a request to join the selected team\n buttonText = 'Request to Join Team'\n buttonOnClickBehavior = () => {\n setStep(ChallengeTeamWizardStep.JOIN_REQUEST_FORM)\n }\n } else if (selectedTeamMembershipStatus?.canJoin) {\n // The user can freely join the selected team\n buttonText = 'Join Team'\n buttonOnClickBehavior = () => {\n void addUserToTeam()\n }\n }\n return {\n content: challenge && !isMemberOfSubmissionTeam && (\n <SelectChallengeTeam\n challengeId={challenge.id}\n onCreateTeam={() =>\n setStep(ChallengeTeamWizardStep.CREATE_NEW_TEAM)\n }\n selectedTeamId={selectedTeamId}\n onSelectTeam={teamId => setSelectedTeamId(teamId)}\n />\n ),\n actions: (\n <>\n {backButton}\n <Tooltip title={buttonTooltip}>\n {/* Wrap button in span to show tooltip when button is disabled */}\n <span>\n <Button\n onClick={buttonOnClickBehavior}\n startIcon={\n addMemberToTeamIsPending ? <SynapseSpinner /> : undefined\n }\n disabled={\n !selectedTeamId ||\n selectedTeamMembershipStatusIsLoading ||\n addMemberToTeamIsPending ||\n disableJoiningSelectedTeam\n }\n variant={'contained'}\n >\n {buttonText}\n </Button>\n </span>\n </Tooltip>\n </>\n ),\n }\n }\n case ChallengeTeamWizardStep.ACCEPT_INVITATION:\n return {\n content: <OpenMembershipInvitation teamId={selectedTeamId!} />,\n actions: (\n <>\n {backButton}\n <AcceptMembershipInvitationButton\n teamId={selectedTeamId!}\n onSuccess={() => {\n setStep(ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL)\n }}\n />\n </>\n ),\n }\n case ChallengeTeamWizardStep.JOIN_REQUEST_FORM:\n return {\n content: (\n <MembershipRequestForm\n ref={membershipRequestFormRef}\n teamId={selectedTeamId!}\n onRequestSubmitted={() => {\n setStep(ChallengeTeamWizardStep.JOIN_REQUEST_SENT)\n }}\n />\n ),\n actions: (\n <>\n {backButton}\n <Button\n variant={'contained'}\n onClick={() => {\n membershipRequestFormRef?.current?.submit()\n }}\n >\n Send Request\n </Button>\n </>\n ),\n }\n\n case ChallengeTeamWizardStep.JOIN_REQUEST_SENT:\n return {\n content: (\n <Typography variant=\"body1\" sx={{ lineHeight: '20px' }}>\n Team Manager(s) have received your request. Check your Synapse\n email address for status of your request.\n </Typography>\n ),\n actions: (\n <>\n {backButton}\n {closeButton}\n </>\n ),\n }\n case ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL:\n return {\n content: (\n <RegistrationSuccessful\n createdNewTeam={hasCreatedNewTeam}\n teamId={selectedTeamId}\n />\n ),\n actions: (\n <>\n {backButton}\n {closeButton}\n </>\n ),\n }\n case ChallengeTeamWizardStep.CREATE_NEW_TEAM: {\n return {\n content: (\n <CreateChallengeTeam\n ref={createTeamRef}\n challengeId={challenge?.id!}\n onCanSubmitChange={canSubmit => setCanCreateNewTeam(canSubmit)}\n onFinished={teamId => {\n setHasCreatedNewTeam(true)\n setSelectedTeamId(teamId)\n setStep(ChallengeTeamWizardStep.REGISTRATION_SUCCESSFUL)\n }}\n />\n ),\n actions: (\n <>\n {backButton}\n <Button\n variant={'contained'}\n disabled={!canCreateNewTeam}\n onClick={() => {\n createTeamRef?.current?.submit()\n }}\n >\n Create Team\n </Button>\n </>\n ),\n }\n }\n }\n }, [\n isAuthenticated,\n isMemberOfSubmissionTeam,\n step,\n selectedTeamId,\n backButton,\n closeButton,\n hasCreatedNewTeam,\n selectedTeamMembershipStatus,\n challenge,\n addMemberToTeamIsPending,\n selectedTeamMembershipStatusIsLoading,\n addUserToTeam,\n canCreateNewTeam,\n ])\n\n const errorMessage =\n addUserToTeamError?.message ||\n selectedTeamMembershipStatusError?.message ||\n userSubmissionTeamError?.message\n\n return (\n <DialogBase\n onCancel={hide}\n open={isShowingModal}\n actions={actions}\n title={`Challenge Registration (Step 2 of 2): ${getStepDialogTitle(\n step,\n )}`}\n content={\n <SynapseErrorBoundary>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n }}\n >\n {isLoading ? (\n <SynapseSpinner size={40} />\n ) : (\n <>\n {content}\n {errorMessage && (\n <Alert severity={'error'}>{errorMessage}</Alert>\n )}\n </>\n )}\n </Box>\n </SynapseErrorBoundary>\n }\n />\n )\n}\n\nexport default ChallengeTeamWizard\n"],"mappings":"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"}
@@ -26,7 +26,7 @@ var { parse: g } = h, _ = 3, v = "Please limit the initial number of invited mem
26
26
  inviteesParseResult: e,
27
27
  parsedInvitees: e.data[0] || []
28
28
  };
29
- }, [T]), A = k.length > _, j = !!(x && x.name && x.name.length > 1 && !A);
29
+ }, [T]), A = k.length > _, j = !!(x?.name && x.name.length > 1 && !A);
30
30
  r(() => {
31
31
  y(j);
32
32
  }, [j, y]);
@@ -1 +1 @@
1
- {"version":3,"file":"CreateChallengeTeam.js","names":[],"sources":["../../../src/components/ChallengeTeamWizard/CreateChallengeTeam.tsx"],"sourcesContent":["import {\n ForwardedRef,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { Alert, Box, Stack, Typography } from '@mui/material'\nimport TextField from '../TextField'\nimport { CreateTeamRequest, Team } from '@sage-bionetworks/synapse-types'\nimport useCreateAndRegisterChallengeTeam from './useCreateAndRegisterChallengeTeam'\nimport { isEmpty, noop } from 'lodash-es'\nimport papaparseLib from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse } = papaparseLib\n\nexport type CreateChallengeTeamProps = {\n challengeId: string\n onCanSubmitChange?: (canSubmit: boolean) => void\n onFinished?: (teamId: string) => void\n}\n\nconst INVITEE_LIMIT = 3\nexport const TOO_MANY_INVITEES_ERROR =\n 'Please limit the initial number of invited members to three. You may add additional members after the team has been created.'\n\nexport type CreateChallengeTeamHandle = {\n // Allow the parent component to trigger a submit of the form, so this may be embedded in an arbitrary modal.\n submit: () => void\n}\n\nexport const CreateChallengeTeam = forwardRef(function CreateChallengeTeam(\n props: CreateChallengeTeamProps,\n ref: ForwardedRef<CreateChallengeTeamHandle>,\n) {\n const { challengeId, onCanSubmitChange = noop, onFinished = noop } = props\n const [team, setTeam] = useState<CreateTeamRequest>({\n name: '',\n description: '',\n })\n const [invitationMessage, setInvitationMessage] = useState('')\n const [rawInvitees, setRawInvitees] = useState('')\n\n const handleTeamUpdate = (update: Partial<Team>) => {\n const updatedTeam: CreateTeamRequest = { ...team, ...update }\n setTeam(updatedTeam)\n }\n\n const { inviteesParseResult, parsedInvitees } = useMemo(() => {\n const inviteesParseResult = parse<string[]>(rawInvitees, {\n delimiter: ',',\n transform(value) {\n return value.trim()\n },\n })\n const parsedInvitees: string[] = inviteesParseResult.data[0] || []\n\n return { inviteesParseResult, parsedInvitees }\n }, [rawInvitees])\n\n const numberOfInvitees = parsedInvitees.length\n const tooManyInvitees = numberOfInvitees > INVITEE_LIMIT\n\n const formDataIsValid = Boolean(\n team && team.name && team.name.length > 1 && !tooManyInvitees,\n )\n\n useEffect(() => {\n onCanSubmitChange(formDataIsValid)\n }, [formDataIsValid, onCanSubmitChange])\n\n const {\n createAndRegisterTeam,\n isPending: mutationIsPending,\n errors,\n } = useCreateAndRegisterChallengeTeam()\n\n useImperativeHandle(ref, () => {\n return {\n submit() {\n if (!formDataIsValid) {\n console.warn(\n 'Attempted to submit when form data was not valid. Nothing will happen.',\n )\n return\n }\n createAndRegisterTeam(\n team,\n challengeId,\n parsedInvitees,\n invitationMessage,\n )\n .then(([newTeam]) => {\n onFinished(newTeam.id)\n })\n .catch(() => {\n // The hook will return errors, so no need to handle them here\n })\n },\n }\n }, [\n formDataIsValid,\n parsedInvitees,\n createAndRegisterTeam,\n team,\n challengeId,\n invitationMessage,\n onFinished,\n ])\n\n return (\n <Stack gap={2}>\n <Typography variant=\"body1\" sx={{ lineHeight: '20px' }}>\n Create a new team for this Challenge!\n </Typography>\n <TextField\n id=\"name\"\n label=\"Team Name\"\n value={team.name}\n fullWidth\n autoFocus\n required\n onChange={event => handleTeamUpdate({ name: event.target.value })}\n disabled={mutationIsPending}\n />\n <Box\n sx={{\n display: 'flex',\n }}\n >\n <TextField\n id=\"description\"\n label={\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n }}\n >\n <Box>Team Description</Box>\n </Box>\n }\n value={team.description}\n fullWidth\n multiline\n rows={4}\n onChange={event =>\n handleTeamUpdate({ description: event.target.value })\n }\n disabled={mutationIsPending}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n }}\n >\n <TextField\n id=\"message\"\n label={\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n }}\n >\n <Box>Recruitment Message</Box>\n </Box>\n }\n value={invitationMessage}\n fullWidth\n multiline\n rows={4}\n onChange={event => setInvitationMessage(event.target.value)}\n disabled={mutationIsPending}\n />\n </Box>\n <TextField\n id=\"invitees\"\n label=\"Emails of Additional Members to Invite (max 3)\"\n placeholder=\"Enter emails separated by comma\"\n value={rawInvitees}\n fullWidth\n onChange={event => setRawInvitees(event.target.value)}\n disabled={mutationIsPending}\n />\n {(tooManyInvitees || !isEmpty(inviteesParseResult.errors) || errors) && (\n <Alert severity=\"error\">\n {tooManyInvitees && (\n <Typography variant={'body1'}>{TOO_MANY_INVITEES_ERROR}</Typography>\n )}\n {inviteesParseResult.errors.map((error, index) => (\n <Typography key={index} variant={'body1'}>\n {error.message}\n </Typography>\n ))}\n {errors &&\n errors.map(error => (\n <Typography key={error.reason} variant={'body1'}>\n {error.reason}\n </Typography>\n ))}\n </Alert>\n )}\n </Stack>\n )\n})\n"],"mappings":";;;;;;;;AAeA,IAAM,EAAE,aAAU,GAQZ,IAAgB,GACT,IACX,gIAOW,IAAsB,EAAW,SAC5C,GACA,GACA;CACA,IAAM,EAAE,gBAAa,uBAAoB,GAAM,gBAAa,MAAS,GAC/D,CAAC,GAAM,KAAW,EAA4B;EAClD,MAAM;EACN,aAAa;CACf,CAAC,GACK,CAAC,GAAmB,KAAwB,EAAS,EAAE,GACvD,CAAC,GAAa,KAAkB,EAAS,EAAE,GAE3C,KAAoB,MAA0B;EAElD,EAAQ;GADiC,GAAG;GAAM,GAAG;EAC7C,CAAW;CACrB,GAEM,EAAE,wBAAqB,sBAAmB,QAAc;EAC5D,IAAM,IAAsB,EAAgB,GAAa;GACvD,WAAW;GACX,UAAU,GAAO;IACf,OAAO,EAAM,KAAK;GACpB;EACF,CAAC;EAGD,OAAO;GAAE;GAAqB,gBAFG,EAAoB,KAAK,MAAM,CAAC;EAEpB;CAC/C,GAAG,CAAC,CAAW,CAAC,GAGV,IADmB,EAAe,SACG,GAErC,IAAkB,GACtB,KAAQ,EAAK,QAAQ,EAAK,KAAK,SAAS,KAAK,CAAC;CAGhD,QAAgB;EACd,EAAkB,CAAe;CACnC,GAAG,CAAC,GAAiB,CAAiB,CAAC;CAEvC,IAAM,EACJ,0BACA,WAAW,GACX,cACE,EAAkC;CAmCtC,OAjCA,EAAoB,UACX,EACL,SAAS;EACP,IAAI,CAAC,GAAiB;GACpB,QAAQ,KACN,wEACF;GACA;EACF;EACA,EACE,GACA,GACA,GACA,CACF,EACG,MAAM,CAAC,OAAa;GACnB,EAAW,EAAQ,EAAE;EACvB,CAAC,EACA,YAAY,CAEb,CAAC;CACL,EACF,IACC;EACD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAGC,kBAAC,GAAD;EAAO,KAAK;YAAZ;GACE,kBAAC,GAAD;IAAY,SAAQ;IAAQ,IAAI,EAAE,YAAY,OAAO;cAAG;GAE5C,CAAA;GACZ,kBAAC,GAAD;IACE,IAAG;IACH,OAAM;IACN,OAAO,EAAK;IACZ,WAAA;IACA,WAAA;IACA,UAAA;IACA,WAAU,MAAS,EAAiB,EAAE,MAAM,EAAM,OAAO,MAAM,CAAC;IAChE,UAAU;GACX,CAAA;GACD,kBAAC,GAAD;IACE,IAAI,EACF,SAAS,OACX;cAEA,kBAAC,GAAD;KACE,IAAG;KACH,OACE,kBAAC,GAAD;MACE,IAAI;OACF,SAAS;OACT,KAAK;MACP;gBAEA,kBAAC,GAAD,EAAA,UAAK,mBAAqB,CAAA;KACvB,CAAA;KAEP,OAAO,EAAK;KACZ,WAAA;KACA,WAAA;KACA,MAAM;KACN,WAAU,MACR,EAAiB,EAAE,aAAa,EAAM,OAAO,MAAM,CAAC;KAEtD,UAAU;IACX,CAAA;GACE,CAAA;GACL,kBAAC,GAAD;IACE,IAAI,EACF,SAAS,OACX;cAEA,kBAAC,GAAD;KACE,IAAG;KACH,OACE,kBAAC,GAAD;MACE,IAAI;OACF,SAAS;OACT,KAAK;MACP;gBAEA,kBAAC,GAAD,EAAA,UAAK,sBAAwB,CAAA;KAC1B,CAAA;KAEP,OAAO;KACP,WAAA;KACA,WAAA;KACA,MAAM;KACN,WAAU,MAAS,EAAqB,EAAM,OAAO,KAAK;KAC1D,UAAU;IACX,CAAA;GACE,CAAA;GACL,kBAAC,GAAD;IACE,IAAG;IACH,OAAM;IACN,aAAY;IACZ,OAAO;IACP,WAAA;IACA,WAAU,MAAS,EAAe,EAAM,OAAO,KAAK;IACpD,UAAU;GACX,CAAA;IACC,KAAmB,CAAC,EAAQ,EAAoB,MAAM,KAAK,MAC3D,kBAAC,GAAD;IAAO,UAAS;cAAhB;KACG,KACC,kBAAC,GAAD;MAAY,SAAS;;KAA8C,CAAA;KAEpE,EAAoB,OAAO,KAAK,GAAO,MACtC,kBAAC,GAAD;MAAwB,SAAS;gBAC9B,EAAM;KACG,GAFK,CAEL,CACb;KACA,KACC,EAAO,KAAI,MACT,kBAAC,GAAD;MAA+B,SAAS;gBACrC,EAAM;KACG,GAFK,EAAM,MAEX,CACb;IACE;;EAEJ;;AAEX,CAAC"}
1
+ {"version":3,"file":"CreateChallengeTeam.js","names":[],"sources":["../../../src/components/ChallengeTeamWizard/CreateChallengeTeam.tsx"],"sourcesContent":["import {\n ForwardedRef,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { Alert, Box, Stack, Typography } from '@mui/material'\nimport TextField from '../TextField'\nimport { CreateTeamRequest, Team } from '@sage-bionetworks/synapse-types'\nimport useCreateAndRegisterChallengeTeam from './useCreateAndRegisterChallengeTeam'\nimport { isEmpty, noop } from 'lodash-es'\nimport papaparseLib from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse } = papaparseLib\n\nexport type CreateChallengeTeamProps = {\n challengeId: string\n onCanSubmitChange?: (canSubmit: boolean) => void\n onFinished?: (teamId: string) => void\n}\n\nconst INVITEE_LIMIT = 3\nexport const TOO_MANY_INVITEES_ERROR =\n 'Please limit the initial number of invited members to three. You may add additional members after the team has been created.'\n\nexport type CreateChallengeTeamHandle = {\n // Allow the parent component to trigger a submit of the form, so this may be embedded in an arbitrary modal.\n submit: () => void\n}\n\nexport const CreateChallengeTeam = forwardRef(function CreateChallengeTeam(\n props: CreateChallengeTeamProps,\n ref: ForwardedRef<CreateChallengeTeamHandle>,\n) {\n const { challengeId, onCanSubmitChange = noop, onFinished = noop } = props\n const [team, setTeam] = useState<CreateTeamRequest>({\n name: '',\n description: '',\n })\n const [invitationMessage, setInvitationMessage] = useState('')\n const [rawInvitees, setRawInvitees] = useState('')\n\n const handleTeamUpdate = (update: Partial<Team>) => {\n const updatedTeam: CreateTeamRequest = { ...team, ...update }\n setTeam(updatedTeam)\n }\n\n const { inviteesParseResult, parsedInvitees } = useMemo(() => {\n const inviteesParseResult = parse<string[]>(rawInvitees, {\n delimiter: ',',\n transform(value) {\n return value.trim()\n },\n })\n const parsedInvitees: string[] = inviteesParseResult.data[0] || []\n\n return { inviteesParseResult, parsedInvitees }\n }, [rawInvitees])\n\n const numberOfInvitees = parsedInvitees.length\n const tooManyInvitees = numberOfInvitees > INVITEE_LIMIT\n\n const formDataIsValid = Boolean(\n team?.name && team.name.length > 1 && !tooManyInvitees,\n )\n\n useEffect(() => {\n onCanSubmitChange(formDataIsValid)\n }, [formDataIsValid, onCanSubmitChange])\n\n const {\n createAndRegisterTeam,\n isPending: mutationIsPending,\n errors,\n } = useCreateAndRegisterChallengeTeam()\n\n useImperativeHandle(ref, () => {\n return {\n submit() {\n if (!formDataIsValid) {\n console.warn(\n 'Attempted to submit when form data was not valid. Nothing will happen.',\n )\n return\n }\n createAndRegisterTeam(\n team,\n challengeId,\n parsedInvitees,\n invitationMessage,\n )\n .then(([newTeam]) => {\n onFinished(newTeam.id)\n })\n .catch(() => {\n // The hook will return errors, so no need to handle them here\n })\n },\n }\n }, [\n formDataIsValid,\n parsedInvitees,\n createAndRegisterTeam,\n team,\n challengeId,\n invitationMessage,\n onFinished,\n ])\n\n return (\n <Stack gap={2}>\n <Typography variant=\"body1\" sx={{ lineHeight: '20px' }}>\n Create a new team for this Challenge!\n </Typography>\n <TextField\n id=\"name\"\n label=\"Team Name\"\n value={team.name}\n fullWidth\n autoFocus\n required\n onChange={event => handleTeamUpdate({ name: event.target.value })}\n disabled={mutationIsPending}\n />\n <Box\n sx={{\n display: 'flex',\n }}\n >\n <TextField\n id=\"description\"\n label={\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n }}\n >\n <Box>Team Description</Box>\n </Box>\n }\n value={team.description}\n fullWidth\n multiline\n rows={4}\n onChange={event =>\n handleTeamUpdate({ description: event.target.value })\n }\n disabled={mutationIsPending}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n }}\n >\n <TextField\n id=\"message\"\n label={\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n }}\n >\n <Box>Recruitment Message</Box>\n </Box>\n }\n value={invitationMessage}\n fullWidth\n multiline\n rows={4}\n onChange={event => setInvitationMessage(event.target.value)}\n disabled={mutationIsPending}\n />\n </Box>\n <TextField\n id=\"invitees\"\n label=\"Emails of Additional Members to Invite (max 3)\"\n placeholder=\"Enter emails separated by comma\"\n value={rawInvitees}\n fullWidth\n onChange={event => setRawInvitees(event.target.value)}\n disabled={mutationIsPending}\n />\n {(tooManyInvitees || !isEmpty(inviteesParseResult.errors) || errors) && (\n <Alert severity=\"error\">\n {tooManyInvitees && (\n <Typography variant={'body1'}>{TOO_MANY_INVITEES_ERROR}</Typography>\n )}\n {inviteesParseResult.errors.map((error, index) => (\n <Typography key={index} variant={'body1'}>\n {error.message}\n </Typography>\n ))}\n {errors &&\n errors.map(error => (\n <Typography key={error.reason} variant={'body1'}>\n {error.reason}\n </Typography>\n ))}\n </Alert>\n )}\n </Stack>\n )\n})\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChangePasswordWithToken.d.ts","sourceRoot":"","sources":["../../../src/components/ChangePassword/ChangePasswordWithToken.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAK1E,KAAK,4BAA4B,GAAG;IAClC,mBAAmB,EAAE,wBAAwB,CAAA;IAC7C,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CA0FpC"}
1
+ {"version":3,"file":"ChangePasswordWithToken.d.ts","sourceRoot":"","sources":["../../../src/components/ChangePassword/ChangePasswordWithToken.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAM1E,KAAK,4BAA4B,GAAG;IAClC,mBAAmB,EAAE,wBAAwB,CAAA;IAC7C,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CAsIpC"}
@@ -1,52 +1,87 @@
1
1
  import { displayToast as e } from "../ToastMessage/ToastMessage.js";
2
2
  import { validatePassword as t } from "../../utils/functions/StringUtils.js";
3
3
  import "../ToastMessage/index.js";
4
- import n from "./useChangePasswordFormState.js";
5
- import { useState as r } from "react";
6
- import { Alert as i, Button as a, TextField as o } from "@mui/material";
7
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ import { BEGIN_RESET_2FA_BUTTON_TEXT as n } from "../Authentication/OneTimePasswordForm.js";
5
+ import r from "./useChangePasswordFormState.js";
6
+ import { useState as i } from "react";
7
+ import { Alert as a, Button as o, Link as s, TextField as c, Typography as l } from "@mui/material";
8
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
8
9
  //#region src/components/ChangePassword/ChangePasswordWithToken.tsx
9
- function l(l) {
10
- let { passwordChangeToken: u, onSuccess: d } = l, [f, p] = r(""), [m, h] = r(""), [g, _] = r(void 0), { promptForTwoFactorAuth: v, TwoFactorAuthPrompt: y, isPending: b, handleChangePasswordWithResetToken: x, error: S } = n({ onChangePasswordSuccess: () => {
11
- p(""), h(""), e("Password successfully changed.", "success"), d();
12
- } }), C = (t) => {
13
- t.preventDefault(), f === m ? x(f, u) : e("Passwords do not match.", "danger");
10
+ function p(p) {
11
+ let { passwordChangeToken: m, onSuccess: h } = p, [g, _] = i(""), [v, y] = i(""), [b, x] = i(void 0), [S, C] = i(!1), { promptForTwoFactorAuth: w, TwoFactorAuthPrompt: T, isPending: E, handleChangePasswordWithResetToken: D, error: O } = r({
12
+ hideReset2FA: !0,
13
+ onChangePasswordSuccess: () => {
14
+ _(""), y(""), e("Password successfully changed.", "success"), h();
15
+ }
16
+ }), k = (t) => {
17
+ t.preventDefault(), g === v ? D(g, m) : e("Passwords do not match.", "danger");
14
18
  };
15
- return /* @__PURE__ */ c("div", { children: [v ? /* @__PURE__ */ s(y, {}) : /* @__PURE__ */ c("form", {
19
+ return /* @__PURE__ */ f("div", { children: [w ? /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d(T, {}), S ? /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ f(l, {
20
+ variant: "body1",
21
+ sx: { my: 2 },
22
+ align: "center",
23
+ children: [
24
+ "Because you're resetting your password by email, we can't verify your identity strongly enough to reset two-factor authentication here. Please contact the",
25
+ " ",
26
+ /* @__PURE__ */ d(s, {
27
+ target: "_blank",
28
+ rel: "noopener noreferrer",
29
+ href: "https://sagebionetworks.jira.com/servicedesk/customer/portal/9",
30
+ children: "Synapse Service Desk"
31
+ }),
32
+ " ",
33
+ "for help recovering your account."
34
+ ]
35
+ }), /* @__PURE__ */ d(l, {
36
+ variant: "body1",
37
+ sx: { my: 2 },
38
+ align: "center",
39
+ children: "If you have a Google or ORCID account linked to your Synapse account, you may also be able to regain access by signing in with that account instead."
40
+ })] }) : /* @__PURE__ */ d(s, {
41
+ align: "center",
42
+ color: "grey.700",
43
+ sx: {
44
+ display: "block",
45
+ mx: "auto",
46
+ my: 2
47
+ },
48
+ onClick: () => C(!0),
49
+ children: n
50
+ })] }) : /* @__PURE__ */ f("form", {
16
51
  onSubmit: (e) => {
17
- C(e);
52
+ k(e);
18
53
  },
19
54
  children: [
20
- /* @__PURE__ */ s(o, {
55
+ /* @__PURE__ */ d(c, {
21
56
  fullWidth: !0,
22
57
  required: !0,
23
- helperText: g,
58
+ helperText: b,
24
59
  type: "password",
25
60
  id: "newPassword",
26
61
  name: "newPassword",
27
62
  label: "New password",
28
63
  onChange: (e) => {
29
- _(t(e.target.value)), p(e.target.value);
64
+ x(t(e.target.value)), _(e.target.value);
30
65
  },
31
- value: f || "",
66
+ value: g || "",
32
67
  sx: { mb: 2 }
33
68
  }),
34
- /* @__PURE__ */ s(o, {
69
+ /* @__PURE__ */ d(c, {
35
70
  fullWidth: !0,
36
71
  required: !0,
37
72
  type: "password",
38
73
  id: "confirmPassword",
39
74
  name: "confirmPassword",
40
75
  label: "Confirm password",
41
- onChange: (e) => h(e.target.value),
42
- value: m || "",
76
+ onChange: (e) => y(e.target.value),
77
+ value: v || "",
43
78
  sx: { mb: 2 }
44
79
  }),
45
- /* @__PURE__ */ s(a, {
80
+ /* @__PURE__ */ d(o, {
46
81
  variant: "contained",
47
82
  type: "submit",
48
83
  fullWidth: !0,
49
- disabled: !f || !m || b,
84
+ disabled: !g || !v || E,
50
85
  sx: {
51
86
  mt: 3,
52
87
  py: 2
@@ -54,13 +89,13 @@ function l(l) {
54
89
  children: "Change Password"
55
90
  })
56
91
  ]
57
- }), S && /* @__PURE__ */ s(i, {
92
+ }), O && /* @__PURE__ */ d(a, {
58
93
  severity: "error",
59
94
  sx: { my: 2 },
60
- children: S.reason
95
+ children: O.reason
61
96
  })] });
62
97
  }
63
98
  //#endregion
64
- export { l as default };
99
+ export { p as default };
65
100
 
66
101
  //# sourceMappingURL=ChangePasswordWithToken.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangePasswordWithToken.js","names":[],"sources":["../../../src/components/ChangePassword/ChangePasswordWithToken.tsx"],"sourcesContent":["import { validatePassword } from '@/utils/functions/StringUtils'\nimport { Alert, Button, TextField } from '@mui/material'\nimport { PasswordResetSignedToken } from '@sage-bionetworks/synapse-types'\nimport { FormEvent, useState } from 'react'\nimport { displayToast } from '../ToastMessage'\nimport useChangePasswordFormState from './useChangePasswordFormState'\n\ntype ChangePasswordWithTokenProps = {\n passwordChangeToken: PasswordResetSignedToken\n onSuccess: () => void\n}\n\nexport default function ChangePasswordWithToken(\n props: ChangePasswordWithTokenProps,\n) {\n const { passwordChangeToken, onSuccess } = props\n const [newPassword, setNewPassword] = useState<string>('')\n const [confirmPassword, setConfirmPassword] = useState<string>('')\n const [newPasswordError, setNewPasswordError] = useState<string | undefined>(\n undefined,\n )\n\n const {\n promptForTwoFactorAuth,\n TwoFactorAuthPrompt,\n isPending: changePasswordIsPending,\n handleChangePasswordWithResetToken,\n error,\n } = useChangePasswordFormState({\n onChangePasswordSuccess: () => {\n setNewPassword('')\n setConfirmPassword('')\n displayToast('Password successfully changed.', 'success')\n onSuccess()\n },\n })\n\n const handleChangePassword = (clickEvent: FormEvent<HTMLElement>) => {\n clickEvent.preventDefault()\n if (newPassword !== confirmPassword) {\n displayToast('Passwords do not match.', 'danger')\n } else {\n handleChangePasswordWithResetToken(newPassword, passwordChangeToken)\n }\n }\n\n return (\n <div>\n {promptForTwoFactorAuth ? (\n <TwoFactorAuthPrompt />\n ) : (\n <form\n onSubmit={e => {\n handleChangePassword(e)\n }}\n >\n <TextField\n fullWidth\n required\n helperText={newPasswordError}\n type=\"password\"\n id=\"newPassword\"\n name=\"newPassword\"\n label={'New password'}\n onChange={e => {\n const error = validatePassword(e.target.value)\n setNewPasswordError(error)\n setNewPassword(e.target.value)\n }}\n value={newPassword || ''}\n sx={{ mb: 2 }}\n />\n <TextField\n fullWidth\n required\n type=\"password\"\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n label={'Confirm password'}\n onChange={e => setConfirmPassword(e.target.value)}\n value={confirmPassword || ''}\n sx={{ mb: 2 }}\n />\n <Button\n variant=\"contained\"\n type=\"submit\"\n fullWidth\n disabled={\n !newPassword || !confirmPassword || changePasswordIsPending\n }\n sx={{ mt: 3, py: 2 }}\n >\n Change Password\n </Button>\n </form>\n )}\n {error && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n {error.reason}\n </Alert>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;AAYA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,wBAAqB,iBAAc,GACrC,CAAC,GAAa,KAAkB,EAAiB,EAAE,GACnD,CAAC,GAAiB,KAAsB,EAAiB,EAAE,GAC3D,CAAC,GAAkB,KAAuB,EAC9C,KAAA,CACF,GAEM,EACJ,2BACA,wBACA,WAAW,GACX,uCACA,aACE,EAA2B,EAC7B,+BAA+B;EAI7B,AAHA,EAAe,EAAE,GACjB,EAAmB,EAAE,GACrB,EAAa,kCAAkC,SAAS,GACxD,EAAU;CACZ,EACF,CAAC,GAEK,KAAwB,MAAuC;EAEnE,AADA,EAAW,eAAe,GACtB,MAAgB,IAGlB,EAAmC,GAAa,CAAmB,IAFnE,EAAa,2BAA2B,QAAQ;CAIpD;CAEA,OACE,kBAAC,OAAD,EAAA,UAAA,CACG,IACC,kBAAC,GAAD,CAAsB,CAAA,IAEtB,kBAAC,QAAD;EACE,WAAU,MAAK;GACb,EAAqB,CAAC;EACxB;YAHF;GAKE,kBAAC,GAAD;IACE,WAAA;IACA,UAAA;IACA,YAAY;IACZ,MAAK;IACL,IAAG;IACH,MAAK;IACL,OAAO;IACP,WAAU,MAAK;KAGb,AADA,EADc,EAAiB,EAAE,OAAO,KACpB,CAAK,GACzB,EAAe,EAAE,OAAO,KAAK;IAC/B;IACA,OAAO,KAAe;IACtB,IAAI,EAAE,IAAI,EAAE;GACb,CAAA;GACD,kBAAC,GAAD;IACE,WAAA;IACA,UAAA;IACA,MAAK;IACL,IAAG;IACH,MAAK;IACL,OAAO;IACP,WAAU,MAAK,EAAmB,EAAE,OAAO,KAAK;IAChD,OAAO,KAAmB;IAC1B,IAAI,EAAE,IAAI,EAAE;GACb,CAAA;GACD,kBAAC,GAAD;IACE,SAAQ;IACR,MAAK;IACL,WAAA;IACA,UACE,CAAC,KAAe,CAAC,KAAmB;IAEtC,IAAI;KAAE,IAAI;KAAG,IAAI;IAAE;cACpB;GAEO,CAAA;EACJ;KAEP,KACC,kBAAC,GAAD;EAAO,UAAU;EAAS,IAAI,EAAE,IAAI,EAAE;YACnC,EAAM;CACF,CAAA,CAEN,EAAA,CAAA;AAET"}
1
+ {"version":3,"file":"ChangePasswordWithToken.js","names":[],"sources":["../../../src/components/ChangePassword/ChangePasswordWithToken.tsx"],"sourcesContent":["import { validatePassword } from '@/utils/functions/StringUtils'\nimport { Alert, Button, Link, TextField, Typography } from '@mui/material'\nimport { PasswordResetSignedToken } from '@sage-bionetworks/synapse-types'\nimport { FormEvent, useState } from 'react'\nimport { BEGIN_RESET_2FA_BUTTON_TEXT } from '../Authentication/OneTimePasswordForm'\nimport { displayToast } from '../ToastMessage'\nimport useChangePasswordFormState from './useChangePasswordFormState'\n\ntype ChangePasswordWithTokenProps = {\n passwordChangeToken: PasswordResetSignedToken\n onSuccess: () => void\n}\n\nexport default function ChangePasswordWithToken(\n props: ChangePasswordWithTokenProps,\n) {\n const { passwordChangeToken, onSuccess } = props\n const [newPassword, setNewPassword] = useState<string>('')\n const [confirmPassword, setConfirmPassword] = useState<string>('')\n const [newPasswordError, setNewPasswordError] = useState<string | undefined>(\n undefined,\n )\n const [\n showTwoFactorAuthRecoveryGuidance,\n setShowTwoFactorAuthRecoveryGuidance,\n ] = useState(false)\n\n const {\n promptForTwoFactorAuth,\n TwoFactorAuthPrompt,\n isPending: changePasswordIsPending,\n handleChangePasswordWithResetToken,\n error,\n } = useChangePasswordFormState({\n // This flow authenticates via an emailed password-reset token: the user has no current\n // password, and their 2FA challenge token is scoped to PASSWORD_CHANGE, which the 2fa/reset\n // endpoint rejects (it only accepts a token from an AUTHENTICATION/login challenge, e.g. one\n // obtained by signing in with a linked SSO provider). There is no credential this flow can\n // offer to self-service reset 2FA, so we hide the interactive reset option (it would only\n // fail) and instead show guidance below.\n hideReset2FA: true,\n onChangePasswordSuccess: () => {\n setNewPassword('')\n setConfirmPassword('')\n displayToast('Password successfully changed.', 'success')\n onSuccess()\n },\n })\n\n const handleChangePassword = (clickEvent: FormEvent<HTMLElement>) => {\n clickEvent.preventDefault()\n if (newPassword !== confirmPassword) {\n displayToast('Passwords do not match.', 'danger')\n } else {\n handleChangePasswordWithResetToken(newPassword, passwordChangeToken)\n }\n }\n\n return (\n <div>\n {promptForTwoFactorAuth ? (\n <>\n <TwoFactorAuthPrompt />\n {!showTwoFactorAuthRecoveryGuidance ? (\n <Link\n align={'center'}\n color={'grey.700'}\n sx={{ display: 'block', mx: 'auto', my: 2 }}\n onClick={() => setShowTwoFactorAuthRecoveryGuidance(true)}\n >\n {BEGIN_RESET_2FA_BUTTON_TEXT}\n </Link>\n ) : (\n <>\n <Typography variant={'body1'} sx={{ my: 2 }} align={'center'}>\n Because you're resetting your password by email, we can't verify\n your identity strongly enough to reset two-factor authentication\n here. Please contact the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://sagebionetworks.jira.com/servicedesk/customer/portal/9\"\n >\n Synapse Service Desk\n </Link>{' '}\n for help recovering your account.\n </Typography>\n <Typography variant={'body1'} sx={{ my: 2 }} align={'center'}>\n If you have a Google or ORCID account linked to your Synapse\n account, you may also be able to regain access by signing in\n with that account instead.\n </Typography>\n </>\n )}\n </>\n ) : (\n <form\n onSubmit={e => {\n handleChangePassword(e)\n }}\n >\n <TextField\n fullWidth\n required\n helperText={newPasswordError}\n type=\"password\"\n id=\"newPassword\"\n name=\"newPassword\"\n label={'New password'}\n onChange={e => {\n const error = validatePassword(e.target.value)\n setNewPasswordError(error)\n setNewPassword(e.target.value)\n }}\n value={newPassword || ''}\n sx={{ mb: 2 }}\n />\n <TextField\n fullWidth\n required\n type=\"password\"\n id=\"confirmPassword\"\n name=\"confirmPassword\"\n label={'Confirm password'}\n onChange={e => setConfirmPassword(e.target.value)}\n value={confirmPassword || ''}\n sx={{ mb: 2 }}\n />\n <Button\n variant=\"contained\"\n type=\"submit\"\n fullWidth\n disabled={\n !newPassword || !confirmPassword || changePasswordIsPending\n }\n sx={{ mt: 3, py: 2 }}\n >\n Change Password\n </Button>\n </form>\n )}\n {error && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n {error.reason}\n </Alert>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;AAaA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,wBAAqB,iBAAc,GACrC,CAAC,GAAa,KAAkB,EAAiB,EAAE,GACnD,CAAC,GAAiB,KAAsB,EAAiB,EAAE,GAC3D,CAAC,GAAkB,KAAuB,EAC9C,KAAA,CACF,GACM,CACJ,GACA,KACE,EAAS,EAAK,GAEZ,EACJ,2BACA,wBACA,WAAW,GACX,uCACA,aACE,EAA2B;EAO7B,cAAc;EACd,+BAA+B;GAI7B,AAHA,EAAe,EAAE,GACjB,EAAmB,EAAE,GACrB,EAAa,kCAAkC,SAAS,GACxD,EAAU;EACZ;CACF,CAAC,GAEK,KAAwB,MAAuC;EAEnE,AADA,EAAW,eAAe,GACtB,MAAgB,IAGlB,EAAmC,GAAa,CAAmB,IAFnE,EAAa,2BAA2B,QAAQ;CAIpD;CAEA,OACE,kBAAC,OAAD,EAAA,UAAA,CACG,IACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,CAAsB,CAAA,GACpB,IAUA,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EAAY,SAAS;EAAS,IAAI,EAAE,IAAI,EAAE;EAAG,OAAO;YAApD;GAA8D;GAGnC;GACzB,kBAAC,GAAD;IACE,QAAO;IACP,KAAI;IACJ,MAAK;cACN;GAEK,CAAA;GAAE;GAAI;EAEF;KACZ,kBAAC,GAAD;EAAY,SAAS;EAAS,IAAI,EAAE,IAAI,EAAE;EAAG,OAAO;YAAU;CAIlD,CAAA,CACZ,EAAA,CAAA,IA5BF,kBAAC,GAAD;EACE,OAAO;EACP,OAAO;EACP,IAAI;GAAE,SAAS;GAAS,IAAI;GAAQ,IAAI;EAAE;EAC1C,eAAe,EAAqC,EAAI;YAEvD;CACG,CAAA,CAuBR,EAAA,CAAA,IAEF,kBAAC,QAAD;EACE,WAAU,MAAK;GACb,EAAqB,CAAC;EACxB;YAHF;GAKE,kBAAC,GAAD;IACE,WAAA;IACA,UAAA;IACA,YAAY;IACZ,MAAK;IACL,IAAG;IACH,MAAK;IACL,OAAO;IACP,WAAU,MAAK;KAGb,AADA,EADc,EAAiB,EAAE,OAAO,KACpB,CAAK,GACzB,EAAe,EAAE,OAAO,KAAK;IAC/B;IACA,OAAO,KAAe;IACtB,IAAI,EAAE,IAAI,EAAE;GACb,CAAA;GACD,kBAAC,GAAD;IACE,WAAA;IACA,UAAA;IACA,MAAK;IACL,IAAG;IACH,MAAK;IACL,OAAO;IACP,WAAU,MAAK,EAAmB,EAAE,OAAO,KAAK;IAChD,OAAO,KAAmB;IAC1B,IAAI,EAAE,IAAI,EAAE;GACb,CAAA;GACD,kBAAC,GAAD;IACE,SAAQ;IACR,MAAK;IACL,WAAA;IACA,UACE,CAAC,KAAe,CAAC,KAAmB;IAEtC,IAAI;KAAE,IAAI;KAAG,IAAI;IAAE;cACpB;GAEO,CAAA;EACJ;KAEP,KACC,kBAAC,GAAD;EAAO,UAAU;EAAS,IAAI,EAAE,IAAI,EAAE;YACnC,EAAM;CACF,CAAA,CAEN,EAAA,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"useChangePasswordFormState.d.ts","sourceRoot":"","sources":["../../../src/components/ChangePassword/useChangePasswordFormState.tsx"],"names":[],"mappings":"AAKA,OAAO,EAIL,wBAAwB,EAGzB,MAAM,iCAAiC,CAAA;AAQxC,eAAO,MAAM,sCAAsC,2GACuD,CAAA;AAE1G,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAA;CACrC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,OAAO,CAAC,EAAE,iCAAiC;;;;;;wDAuC9B,MAAM,mBAAmB,MAAM,eAAe,MAAM;sDAgBjD,MAAM,uBAAuB,wBAAwB;EA8HtE"}
1
+ {"version":3,"file":"useChangePasswordFormState.d.ts","sourceRoot":"","sources":["../../../src/components/ChangePassword/useChangePasswordFormState.tsx"],"names":[],"mappings":"AAKA,OAAO,EAIL,wBAAwB,EAGzB,MAAM,iCAAiC,CAAA;AAQxC,eAAO,MAAM,sCAAsC,2GACuD,CAAA;AAE1G,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAA;CACrC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,OAAO,CAAC,EAAE,iCAAiC;;;;;;wDAuC9B,MAAM,mBAAmB,MAAM,eAAe,MAAM;sDAgBjD,MAAM,uBAAuB,wBAAwB;EAwItE"}
@@ -37,7 +37,7 @@ function p(f) {
37
37
  otpType: n,
38
38
  otpCode: t
39
39
  });
40
- }, [w, v]), A = !!v, { mutate: j, isSuccess: M, isPending: N } = r(), P = a((e) => {
40
+ }, [w, v]), A = !!v, { mutate: j, isSuccess: M, isPending: N, error: P } = r(), F = a((e) => {
41
41
  v && j({
42
42
  userId: v.userId,
43
43
  twoFaResetEndpoint: e,
@@ -81,7 +81,7 @@ function p(f) {
81
81
  x("DISABLE_2FA_PROMPT");
82
82
  },
83
83
  onClickReset2FA: () => {
84
- P(p);
84
+ F(p);
85
85
  },
86
86
  twoFactorAuthResetIsPending: N,
87
87
  twoFactorAuthResetIsSuccess: M
@@ -95,15 +95,25 @@ function p(f) {
95
95
  severity: "warning",
96
96
  sx: { my: 2 },
97
97
  children: [/* @__PURE__ */ u("strong", { children: "Your password has not been changed." }), " To disable two-factor authentication, you may be required to enter your current password after clicking the link sent to your email address."]
98
+ }),
99
+ b === "DISABLE_2FA_PROMPT" && P && /* @__PURE__ */ d(s, {
100
+ severity: "error",
101
+ sx: { my: 2 },
102
+ children: [
103
+ "Failed to reset two-factor authentication:",
104
+ " ",
105
+ P.reason
106
+ ]
98
107
  })
99
108
  ] }) : /* @__PURE__ */ u(l, {}), [
100
- P,
109
+ F,
101
110
  k,
102
111
  T,
103
112
  g,
104
113
  f?.hideReset2FA,
105
114
  b,
106
115
  A,
116
+ P,
107
117
  N,
108
118
  M,
109
119
  p
@@ -1 +1 @@
1
- {"version":3,"file":"useChangePasswordFormState.js","names":[],"sources":["../../../src/components/ChangePassword/useChangePasswordFormState.tsx"],"sourcesContent":["import { useChangePassword, useResetTwoFactorAuth } from '@/synapse-queries'\nimport appendFinalQueryParamKey from '@/utils/appendFinalQueryParamKey'\nimport { useOneSageURL } from '@/utils/hooks'\nimport { Alert, Typography } from '@mui/material'\nimport { TwoFactorAuthErrorResponse } from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport {\n ChangePasswordWithCurrentPassword,\n ChangePasswordWithToken as ChangePasswordWithTokenObject,\n ChangePasswordWithTwoFactorAuthToken,\n PasswordResetSignedToken,\n TwoFactorAuthOtpType,\n TwoFactorAuthResetRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { useCallback, useState } from 'react'\nimport { ONE_TIME_PASSWORD_STEP, OneTimePasswordForm } from '../Authentication'\nimport {\n RECOVERY_CODE_GUIDANCE_TEXT_SHORT,\n TOTP_GUIDANCE_TEXT,\n} from '../Authentication/Constants'\n\nexport const TWO_FACTOR_AUTH_CHANGE_PASSWORD_PROMPT =\n 'Two-factor authentication is required to change your password. Your password has not yet been changed.'\n\nexport type UseChangePasswordFormStateOptions = {\n hideReset2FA?: boolean\n onChangePasswordSuccess?: () => void\n}\n\n/**\n * Hook that handles submitting a change password request and prompting the user for 2FA if necessary.\n * @param options\n */\nexport default function useChangePasswordFormState(\n options?: UseChangePasswordFormStateOptions,\n) {\n const defaultTwoFactorAuthResetUrl = useOneSageURL('/reset2FA')\n const twoFactorAuthResetUri = appendFinalQueryParamKey(\n defaultTwoFactorAuthResetUrl,\n 'twoFAResetToken',\n )\n\n // Store current and new password in state so that we can re-use it if 2FA is required\n const [currentPassword, setCurrentPassword] = useState<string>('')\n const [newPassword, setNewPassword] = useState<string>('')\n const [twoFactorAuthErrorResponse, setTwoFactorAuthErrorResponse] = useState<\n TwoFactorAuthErrorResponse | undefined\n >()\n const [otpStep, setOtpStep] =\n useState<ONE_TIME_PASSWORD_STEP>('VERIFICATION_CODE')\n const [successfullyChangedPassword, setSuccessfullyChangedPassword] =\n useState(false)\n const {\n mutate: changePassword,\n isPending,\n error,\n } = useChangePassword({\n onSuccess: maybeTwoFactorResponse => {\n if (maybeTwoFactorResponse) {\n // We store the 2FA Error Response in state because the `changePasswordResult` may change before we are done with the 2FA code,\n // e.g. if the user enters the wrong 2FA code\n setTwoFactorAuthErrorResponse(maybeTwoFactorResponse)\n } else {\n setSuccessfullyChangedPassword(true)\n setTwoFactorAuthErrorResponse(undefined)\n if (options?.onChangePasswordSuccess) {\n options.onChangePasswordSuccess()\n }\n }\n },\n })\n\n const handleChangePasswordWithCurrentPassword = useCallback(\n (username: string, currentPassword: string, newPassword: string) => {\n setCurrentPassword(currentPassword)\n setNewPassword(newPassword)\n const changeRequest: ChangePasswordWithCurrentPassword = {\n username,\n currentPassword,\n newPassword,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.ChangePasswordWithCurrentPassword',\n }\n changePassword(changeRequest)\n },\n [changePassword],\n )\n\n const handleChangePasswordWithResetToken = useCallback(\n (newPassword: string, passwordChangeToken: PasswordResetSignedToken) => {\n setNewPassword(newPassword)\n const changeRequest: ChangePasswordWithTokenObject = {\n newPassword,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.ChangePasswordWithToken',\n passwordChangeToken: passwordChangeToken,\n }\n changePassword(changeRequest)\n },\n [changePassword],\n )\n\n const handleChangePasswordWithOtp = useCallback(\n (newPassword: string, code: string, otpType: TwoFactorAuthOtpType) => {\n if (twoFactorAuthErrorResponse) {\n const changeRequest: ChangePasswordWithTwoFactorAuthToken = {\n newPassword,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.ChangePasswordWithTwoFactorAuthToken',\n userId: twoFactorAuthErrorResponse.userId!,\n twoFaToken: twoFactorAuthErrorResponse.twoFaToken!,\n otpType: otpType,\n otpCode: code,\n }\n changePassword(changeRequest)\n }\n },\n [changePassword, twoFactorAuthErrorResponse],\n )\n const promptForTwoFactorAuth = Boolean(twoFactorAuthErrorResponse)\n const {\n mutate: resetTwoFactorAuth,\n isSuccess: twoFactorAuthResetIsSuccess,\n isPending: twoFactorAuthResetIsPending,\n } = useResetTwoFactorAuth()\n\n const beginTwoFactorAuthReset = useCallback(\n (twoFaResetEndpoint: string) => {\n if (twoFactorAuthErrorResponse) {\n const request: TwoFactorAuthResetRequest = {\n userId: twoFactorAuthErrorResponse.userId!,\n twoFaResetEndpoint: twoFaResetEndpoint,\n // When attempting to reset 2FA while resetting a password, the current password must be used to request 2FA reset\n password: currentPassword,\n }\n resetTwoFactorAuth(request)\n }\n },\n [currentPassword, resetTwoFactorAuth, twoFactorAuthErrorResponse],\n )\n\n const TwoFactorAuthPrompt = useCallback(() => {\n if (!promptForTwoFactorAuth) {\n return <></>\n }\n return (\n <>\n {otpStep === 'VERIFICATION_CODE' && (\n <Typography variant={'body1'} sx={{ my: 2 }} align={'center'}>\n {TOTP_GUIDANCE_TEXT}\n </Typography>\n )}\n {otpStep === 'RECOVERY_CODE' && (\n <Typography variant={'body1'} sx={{ my: 2 }} align={'center'}>\n {RECOVERY_CODE_GUIDANCE_TEXT_SHORT}\n </Typography>\n )}\n <OneTimePasswordForm\n step={otpStep}\n onClickUseTOTP={() => {\n setOtpStep('VERIFICATION_CODE')\n }}\n onClickUseBackupCode={() => {\n setOtpStep('RECOVERY_CODE')\n }}\n loginIsPending={isPending}\n onSubmit={(code, otpType) =>\n handleChangePasswordWithOtp(newPassword, code, otpType)\n }\n hideReset2FA={options?.hideReset2FA}\n onClickPromptReset2FA={() => {\n setOtpStep('DISABLE_2FA_PROMPT')\n }}\n onClickReset2FA={() => {\n beginTwoFactorAuthReset(twoFactorAuthResetUri)\n }}\n twoFactorAuthResetIsPending={twoFactorAuthResetIsPending}\n twoFactorAuthResetIsSuccess={twoFactorAuthResetIsSuccess}\n />\n {(otpStep === 'RECOVERY_CODE' || otpStep === 'VERIFICATION_CODE') && (\n <Alert severity={'info'} sx={{ my: 2 }}>\n {TWO_FACTOR_AUTH_CHANGE_PASSWORD_PROMPT}\n </Alert>\n )}\n {otpStep === 'DISABLE_2FA_PROMPT' && twoFactorAuthResetIsSuccess && (\n <Alert severity={'warning'} sx={{ my: 2 }}>\n <strong>Your password has not been changed.</strong> To disable\n two-factor authentication, you may be required to enter your current\n password after clicking the link sent to your email address.\n </Alert>\n )}\n </>\n )\n }, [\n beginTwoFactorAuthReset,\n handleChangePasswordWithOtp,\n isPending,\n newPassword,\n options?.hideReset2FA,\n otpStep,\n promptForTwoFactorAuth,\n twoFactorAuthResetIsPending,\n twoFactorAuthResetIsSuccess,\n twoFactorAuthResetUri,\n ])\n\n return {\n successfullyChangedPassword,\n isPending,\n error,\n promptForTwoFactorAuth,\n TwoFactorAuthPrompt: TwoFactorAuthPrompt,\n handleChangePasswordWithCurrentPassword,\n handleChangePasswordWithResetToken,\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,IAAa,IACX;AAWF,SAAwB,EACtB,GACA;CAEA,IAAM,IAAwB,EADO,EAAc,WAEjD,GACA,iBACF,GAGM,CAAC,GAAiB,KAAsB,EAAiB,EAAE,GAC3D,CAAC,GAAa,KAAkB,EAAiB,EAAE,GACnD,CAAC,GAA4B,KAAiC,EAElE,GACI,CAAC,GAAS,KACd,EAAiC,mBAAmB,GAChD,CAAC,GAA6B,KAClC,EAAS,EAAK,GACV,EACJ,QAAQ,GACR,cACA,aACE,EAAkB,EACpB,YAAW,MAA0B;EACnC,AAAI,IAGF,EAA8B,CAAsB,KAEpD,EAA+B,EAAI,GACnC,EAA8B,KAAA,CAAS,GACnC,GAAS,2BACX,EAAQ,wBAAwB;CAGtC,EACF,CAAC,GAEK,IAA0C,GAC7C,GAAkB,GAAyB,MAAwB;EAUlE,AATA,EAAmB,CAAe,GAClC,EAAe,CAAW,GAQ1B,EAAe;GANb;GACA;GACA;GACA,cACE;EAEW,CAAa;CAC9B,GACA,CAAC,CAAc,CACjB,GAEM,IAAqC,GACxC,GAAqB,MAAkD;EAQtE,AAPA,EAAe,CAAW,GAO1B,EAAe;GALb;GACA,cACE;GACmB;EAER,CAAa;CAC9B,GACA,CAAC,CAAc,CACjB,GAEM,IAA8B,GACjC,GAAqB,GAAc,MAAkC;EACpE,AAAI,KAUF,EAAe;GARb;GACA,cACE;GACF,QAAQ,EAA2B;GACnC,YAAY,EAA2B;GAC9B;GACT,SAAS;EAEI,CAAa;CAEhC,GACA,CAAC,GAAgB,CAA0B,CAC7C,GACM,IAAyB,EAAQ,GACjC,EACJ,QAAQ,GACR,WAAW,GACX,WAAW,MACT,EAAsB,GAEpB,IAA0B,GAC7B,MAA+B;EAC9B,AAAI,KAOF,EAAmB;GALjB,QAAQ,EAA2B;GACf;GAEpB,UAAU;EAEO,CAAO;CAE9B,GACA;EAAC;EAAiB;EAAoB;CAA0B,CAClE;CAmEA,OAAO;EACL;EACA;EACA;EACA;EACqB,qBAtEK,QACrB,IAIH,kBAAA,GAAA,EAAA,UAAA;GACG,MAAY,uBACX,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI,EAAE,IAAI,EAAE;IAAG,OAAO;;GAExC,CAAA;GAEb,MAAY,mBACX,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI,EAAE,IAAI,EAAE;IAAG,OAAO;;GAExC,CAAA;GAEd,kBAAC,GAAD;IACE,MAAM;IACN,sBAAsB;KACpB,EAAW,mBAAmB;IAChC;IACA,4BAA4B;KAC1B,EAAW,eAAe;IAC5B;IACA,gBAAgB;IAChB,WAAW,GAAM,MACf,EAA4B,GAAa,GAAM,CAAO;IAExD,cAAc,GAAS;IACvB,6BAA6B;KAC3B,EAAW,oBAAoB;IACjC;IACA,uBAAuB;KACrB,EAAwB,CAAqB;IAC/C;IAC6B;IACA;GAC9B,CAAA;IACC,MAAY,mBAAmB,MAAY,wBAC3C,kBAAC,GAAD;IAAO,UAAU;IAAQ,IAAI,EAAE,IAAI,EAAE;;GAE9B,CAAA;GAER,MAAY,wBAAwB,KACnC,kBAAC,GAAD;IAAO,UAAU;IAAW,IAAI,EAAE,IAAI,EAAE;cAAxC,CACE,kBAAC,UAAD,EAAA,UAAQ,sCAA2C,CAAA,GAAC,+IAG/C;;EAET,EAAA,CAAA,IAhDK,kBAAA,GAAA,CAAI,CAAA,GAkDZ;GACD;GACA;GACA;GACA;GACA,GAAS;GACT;GACA;GACA;GACA;GACA;EACF,CAOuB;EACrB;EACA;CACF;AACF"}
1
+ {"version":3,"file":"useChangePasswordFormState.js","names":[],"sources":["../../../src/components/ChangePassword/useChangePasswordFormState.tsx"],"sourcesContent":["import { useChangePassword, useResetTwoFactorAuth } from '@/synapse-queries'\nimport appendFinalQueryParamKey from '@/utils/appendFinalQueryParamKey'\nimport { useOneSageURL } from '@/utils/hooks'\nimport { Alert, Typography } from '@mui/material'\nimport { TwoFactorAuthErrorResponse } from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport {\n ChangePasswordWithCurrentPassword,\n ChangePasswordWithToken as ChangePasswordWithTokenObject,\n ChangePasswordWithTwoFactorAuthToken,\n PasswordResetSignedToken,\n TwoFactorAuthOtpType,\n TwoFactorAuthResetRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { useCallback, useState } from 'react'\nimport { ONE_TIME_PASSWORD_STEP, OneTimePasswordForm } from '../Authentication'\nimport {\n RECOVERY_CODE_GUIDANCE_TEXT_SHORT,\n TOTP_GUIDANCE_TEXT,\n} from '../Authentication/Constants'\n\nexport const TWO_FACTOR_AUTH_CHANGE_PASSWORD_PROMPT =\n 'Two-factor authentication is required to change your password. Your password has not yet been changed.'\n\nexport type UseChangePasswordFormStateOptions = {\n hideReset2FA?: boolean\n onChangePasswordSuccess?: () => void\n}\n\n/**\n * Hook that handles submitting a change password request and prompting the user for 2FA if necessary.\n * @param options\n */\nexport default function useChangePasswordFormState(\n options?: UseChangePasswordFormStateOptions,\n) {\n const defaultTwoFactorAuthResetUrl = useOneSageURL('/reset2FA')\n const twoFactorAuthResetUri = appendFinalQueryParamKey(\n defaultTwoFactorAuthResetUrl,\n 'twoFAResetToken',\n )\n\n // Store current and new password in state so that we can re-use the current password if 2FA is required\n const [currentPassword, setCurrentPassword] = useState<string>('')\n const [newPassword, setNewPassword] = useState<string>('')\n const [twoFactorAuthErrorResponse, setTwoFactorAuthErrorResponse] = useState<\n TwoFactorAuthErrorResponse | undefined\n >()\n const [otpStep, setOtpStep] =\n useState<ONE_TIME_PASSWORD_STEP>('VERIFICATION_CODE')\n const [successfullyChangedPassword, setSuccessfullyChangedPassword] =\n useState(false)\n const {\n mutate: changePassword,\n isPending,\n error,\n } = useChangePassword({\n onSuccess: maybeTwoFactorResponse => {\n if (maybeTwoFactorResponse) {\n // We store the 2FA Error Response in state because the `changePasswordResult` may change before we are done with the 2FA code,\n // e.g. if the user enters the wrong 2FA code\n setTwoFactorAuthErrorResponse(maybeTwoFactorResponse)\n } else {\n setSuccessfullyChangedPassword(true)\n setTwoFactorAuthErrorResponse(undefined)\n if (options?.onChangePasswordSuccess) {\n options.onChangePasswordSuccess()\n }\n }\n },\n })\n\n const handleChangePasswordWithCurrentPassword = useCallback(\n (username: string, currentPassword: string, newPassword: string) => {\n setCurrentPassword(currentPassword)\n setNewPassword(newPassword)\n const changeRequest: ChangePasswordWithCurrentPassword = {\n username,\n currentPassword,\n newPassword,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.ChangePasswordWithCurrentPassword',\n }\n changePassword(changeRequest)\n },\n [changePassword],\n )\n\n const handleChangePasswordWithResetToken = useCallback(\n (newPassword: string, passwordChangeToken: PasswordResetSignedToken) => {\n setNewPassword(newPassword)\n const changeRequest: ChangePasswordWithTokenObject = {\n newPassword,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.ChangePasswordWithToken',\n passwordChangeToken: passwordChangeToken,\n }\n changePassword(changeRequest)\n },\n [changePassword],\n )\n\n const handleChangePasswordWithOtp = useCallback(\n (newPassword: string, code: string, otpType: TwoFactorAuthOtpType) => {\n if (twoFactorAuthErrorResponse) {\n const changeRequest: ChangePasswordWithTwoFactorAuthToken = {\n newPassword,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.ChangePasswordWithTwoFactorAuthToken',\n userId: twoFactorAuthErrorResponse.userId!,\n twoFaToken: twoFactorAuthErrorResponse.twoFaToken!,\n otpType: otpType,\n otpCode: code,\n }\n changePassword(changeRequest)\n }\n },\n [changePassword, twoFactorAuthErrorResponse],\n )\n const promptForTwoFactorAuth = Boolean(twoFactorAuthErrorResponse)\n const {\n mutate: resetTwoFactorAuth,\n isSuccess: twoFactorAuthResetIsSuccess,\n isPending: twoFactorAuthResetIsPending,\n error: twoFactorAuthResetError,\n } = useResetTwoFactorAuth()\n\n const beginTwoFactorAuthReset = useCallback(\n (twoFaResetEndpoint: string) => {\n if (twoFactorAuthErrorResponse) {\n const request: TwoFactorAuthResetRequest = {\n userId: twoFactorAuthErrorResponse.userId!,\n twoFaResetEndpoint: twoFaResetEndpoint,\n // The 2fa/reset endpoint only accepts a twoFaToken minted for an AUTHENTICATION (login) challenge;\n // the token from a change-password 2FA challenge is scoped to PASSWORD_CHANGE and is rejected there.\n // The current password is therefore the only credential this flow can present.\n password: currentPassword,\n }\n resetTwoFactorAuth(request)\n }\n },\n [currentPassword, resetTwoFactorAuth, twoFactorAuthErrorResponse],\n )\n\n const TwoFactorAuthPrompt = useCallback(() => {\n if (!promptForTwoFactorAuth) {\n return <></>\n }\n return (\n <>\n {otpStep === 'VERIFICATION_CODE' && (\n <Typography variant={'body1'} sx={{ my: 2 }} align={'center'}>\n {TOTP_GUIDANCE_TEXT}\n </Typography>\n )}\n {otpStep === 'RECOVERY_CODE' && (\n <Typography variant={'body1'} sx={{ my: 2 }} align={'center'}>\n {RECOVERY_CODE_GUIDANCE_TEXT_SHORT}\n </Typography>\n )}\n <OneTimePasswordForm\n step={otpStep}\n onClickUseTOTP={() => {\n setOtpStep('VERIFICATION_CODE')\n }}\n onClickUseBackupCode={() => {\n setOtpStep('RECOVERY_CODE')\n }}\n loginIsPending={isPending}\n onSubmit={(code, otpType) =>\n handleChangePasswordWithOtp(newPassword, code, otpType)\n }\n hideReset2FA={options?.hideReset2FA}\n onClickPromptReset2FA={() => {\n setOtpStep('DISABLE_2FA_PROMPT')\n }}\n onClickReset2FA={() => {\n beginTwoFactorAuthReset(twoFactorAuthResetUri)\n }}\n twoFactorAuthResetIsPending={twoFactorAuthResetIsPending}\n twoFactorAuthResetIsSuccess={twoFactorAuthResetIsSuccess}\n />\n {(otpStep === 'RECOVERY_CODE' || otpStep === 'VERIFICATION_CODE') && (\n <Alert severity={'info'} sx={{ my: 2 }}>\n {TWO_FACTOR_AUTH_CHANGE_PASSWORD_PROMPT}\n </Alert>\n )}\n {otpStep === 'DISABLE_2FA_PROMPT' && twoFactorAuthResetIsSuccess && (\n <Alert severity={'warning'} sx={{ my: 2 }}>\n <strong>Your password has not been changed.</strong> To disable\n two-factor authentication, you may be required to enter your current\n password after clicking the link sent to your email address.\n </Alert>\n )}\n {otpStep === 'DISABLE_2FA_PROMPT' && twoFactorAuthResetError && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n Failed to reset two-factor authentication:{' '}\n {twoFactorAuthResetError.reason}\n </Alert>\n )}\n </>\n )\n }, [\n beginTwoFactorAuthReset,\n handleChangePasswordWithOtp,\n isPending,\n newPassword,\n options?.hideReset2FA,\n otpStep,\n promptForTwoFactorAuth,\n twoFactorAuthResetError,\n twoFactorAuthResetIsPending,\n twoFactorAuthResetIsSuccess,\n twoFactorAuthResetUri,\n ])\n\n return {\n successfullyChangedPassword,\n isPending,\n error,\n promptForTwoFactorAuth,\n TwoFactorAuthPrompt: TwoFactorAuthPrompt,\n handleChangePasswordWithCurrentPassword,\n handleChangePasswordWithResetToken,\n }\n}\n"],"mappings":"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"}
@@ -42,8 +42,8 @@ function g(g) {
42
42
  }), { mutateAsync: B, error: V } = t({ onSuccess: (e) => {
43
43
  Se(e.id);
44
44
  } }), { mutate: H, data: U, error: W } = ne({ onSuccess: (e) => {
45
- e && e.isValid && b("TABLE_NAME");
46
- } }), G = o(() => W ? W.reason : U && U.invalidReason ? U.invalidReason : null, [W, U]), { mutateAsync: K, error: q } = ee(), J = a((e, t) => {
45
+ e?.isValid && b("TABLE_NAME");
46
+ } }), G = o(() => W ? W.reason : U?.invalidReason ? U.invalidReason : null, [W, U]), { mutateAsync: K, error: q } = ee(), J = a((e, t) => {
47
47
  we(e), t != null && A(t), b(le(e));
48
48
  }, []), Y = a(() => {
49
49
  b("CHOOSE_VIEW_TYPE");
@@ -1 +1 @@
1
- {"version":3,"file":"CreateTableViewWizard.js","names":[],"sources":["../../../src/components/CreateTableViewWizard/CreateTableViewWizard.tsx"],"sourcesContent":["import { useCreateEntity } from '@/synapse-queries'\nimport {\n useCreateColumnModels,\n useGetDefaultColumnModels,\n} from '@/synapse-queries/table/useColumnModel'\nimport { useValidateDefiningSql } from '@/synapse-queries/table/useDefiningSql'\nimport { convertToConcreteEntityType } from '@/utils/functions/EntityTypeUtils'\nimport { Alert, Box, Button } from '@mui/material'\nimport { EntityType, ViewEntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n Entity,\n ENTITY_VIEW_TYPE_MASK_FILE,\n ENTITY_VIEW_TYPE_MASK_PROJECT,\n ValidateDefiningSqlResponse,\n ViewScope,\n} from '@sage-bionetworks/synapse-types'\nimport { isUndefined, omitBy } from 'lodash-es'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { SetOptional } from 'type-fest'\nimport { DialogBase } from '../DialogBase'\nimport EntityViewMaskEditor from '../EntityViewScopeEditor/EntityViewMaskEditor'\nimport EntityViewScopeEditor from '../EntityViewScopeEditor/EntityViewScopeEditor'\nimport SqlDefinedTableEditor from '../SqlDefinedTableEditor/SqlDefinedTableEditor'\nimport SubmissionViewScopeEditor from '../SubmissionViewScopeEditor/SubmissionViewScopeEditor'\nimport TableColumnSchemaForm, {\n SubmitHandle,\n} from '../TableColumnSchemaEditor/TableColumnSchemaForm'\nimport {\n CreateTableViewWizardStep,\n getModalTitle,\n getPreviousStep,\n getStepAfterTypeSelection,\n isLastStep,\n maybeSetColumnIds,\n maybeSetDefiningSQL,\n maybeSetScopeIds,\n maybeSetViewTypeMask,\n} from './CreateTableViewWizardUtils'\nimport TableNameForm from './TableNameForm'\nimport TableTypeSelection from './TableTypeSelection'\nimport ViewTypeSelection from './ViewTypeSelection'\n\nexport type CreateTableViewWizardProps = {\n open: boolean\n parentId: string\n onCancel: () => void\n onComplete: (newEntityId: string) => void\n}\n\n/**\n * Wizard to create a Synapse table, view, or other table type.\n *\n * See the README.md in this folder for a visualization of the flowchart\n *\n * @param props\n * @constructor\n */\nexport default function CreateTableViewWizard(\n props: CreateTableViewWizardProps,\n) {\n const { open, parentId, onComplete, onCancel } = props\n const [step, setStep] =\n useState<CreateTableViewWizardStep>('CHOOSE_TABLE_TYPE')\n\n const [name, setName] = useState('')\n const [description, setDescription] = useState<string | undefined>(undefined)\n\n const [entityType, setEntityType] = useState<EntityType | undefined>(\n undefined,\n )\n\n const [entityViewScopeIds, setEntityViewScopeIds] = useState<string[]>([])\n const [submissionViewScopeIds, setSubmissionViewScopeIds] = useState<\n string[]\n >([])\n const [viewTypeMask, setViewTypeMask] = useState<number>(\n ENTITY_VIEW_TYPE_MASK_FILE,\n )\n const isProjectView = viewTypeMask === ENTITY_VIEW_TYPE_MASK_PROJECT\n\n const [columnModels, setColumnModels] = useState<\n SetOptional<ColumnModel, 'id'>[]\n >([])\n const columnSchemaFormRef = useRef<SubmitHandle>(null)\n\n const [sql, setSql] = useState('')\n\n const viewScope: ViewScope | undefined = useMemo(() => {\n if (entityType === EntityType.entityview) {\n return {\n scope: entityViewScopeIds,\n viewTypeMask,\n viewEntityType: entityType as ViewEntityType,\n }\n } else if (entityType === EntityType.submissionview) {\n return {\n scope: submissionViewScopeIds,\n viewEntityType: entityType as ViewEntityType,\n }\n }\n return undefined\n }, [entityType, entityViewScopeIds, submissionViewScopeIds, viewTypeMask])\n\n const {\n data: defaultColumnModels,\n isLoading: isLoadingDefaultColumns,\n isError: errorFetchingDefaultColumns,\n } = useGetDefaultColumnModels(\n viewScope?.viewEntityType!,\n viewScope?.viewTypeMask,\n {\n // Fetch the default columns when the user is determining scope\n // This way we can pre-fill the columns right before they go to the columns step\n // We will prevent clicking \"Next\" before this is loaded\n enabled: step === 'ENTITY_VIEW_SCOPE' || step === 'SUBMISSION_VIEW_SCOPE',\n staleTime: Infinity, // The default column models will never change\n },\n )\n\n const { mutateAsync: createEntity, error: createEntityError } =\n useCreateEntity({\n onSuccess: entity => {\n onComplete(entity.id!)\n },\n })\n\n const {\n mutate: validateSql,\n data: isSqlValid,\n error: definingSqlValidationError,\n } = useValidateDefiningSql({\n onSuccess: (isSqlValid: ValidateDefiningSqlResponse) => {\n if (isSqlValid && isSqlValid.isValid) {\n setStep('TABLE_NAME')\n }\n },\n })\n\n const sqlValidationError: string | null = useMemo(() => {\n if (definingSqlValidationError) {\n return definingSqlValidationError.reason\n } else if (isSqlValid && isSqlValid.invalidReason) {\n return isSqlValid.invalidReason\n } else {\n return null\n }\n }, [definingSqlValidationError, isSqlValid])\n\n const { mutateAsync: createColumnModels, error: createColumnModelsError } =\n useCreateColumnModels()\n\n const onTableTypeSelected = useCallback(\n (entityType: EntityType, viewTypeMask?: number) => {\n setEntityType(entityType)\n if (viewTypeMask != null) {\n setViewTypeMask(viewTypeMask)\n }\n setStep(getStepAfterTypeSelection(entityType))\n },\n [],\n )\n\n const onViewSelected = useCallback(() => {\n setStep('CHOOSE_VIEW_TYPE')\n }, [])\n\n const onFinish = useCallback(async () => {\n if (!entityType) {\n console.error('entityType was not defined!')\n setStep('CHOOSE_TABLE_TYPE')\n return\n }\n // Create the column models\n let createdColumnModels: ColumnModel[] = []\n if (\n columnModels &&\n // Do not create columns if this is a SQL-defined view\n entityType !== EntityType.materializedview &&\n entityType !== EntityType.virtualtable\n ) {\n try {\n createdColumnModels = await createColumnModels(\n columnModels.map(cm => omitBy(cm, isUndefined)) as SetOptional<\n ColumnModel,\n 'id'\n >[],\n )\n } catch (e) {\n // Error will be handled by the hook, exit early if we encountered one\n return\n }\n }\n // Create the entity\n const entityToCreate: Entity = {\n name,\n description,\n parentId: parentId,\n concreteType: convertToConcreteEntityType(entityType),\n }\n\n maybeSetColumnIds(entityToCreate, entityType, createdColumnModels)\n maybeSetScopeIds(\n entityToCreate,\n entityType,\n entityType === EntityType.submissionview\n ? submissionViewScopeIds\n : entityViewScopeIds,\n )\n maybeSetViewTypeMask(entityToCreate, entityType, viewTypeMask)\n maybeSetDefiningSQL(entityToCreate, entityType, sql)\n\n try {\n await createEntity(entityToCreate)\n } catch (e) {\n // Error will be handled by the hook\n return\n }\n }, [\n columnModels,\n createColumnModels,\n createEntity,\n description,\n entityType,\n name,\n parentId,\n entityViewScopeIds,\n submissionViewScopeIds,\n sql,\n viewTypeMask,\n ])\n\n const onColumnSchemaSubmit = useCallback(\n (columnModels: SetOptional<ColumnModel, 'id'>[]) => {\n setColumnModels(columnModels)\n setStep('TABLE_NAME')\n },\n [],\n )\n\n const onColumnSchemaNextClicked = useCallback(() => {\n if (columnSchemaFormRef.current != null) {\n columnSchemaFormRef.current.submit()\n }\n }, [])\n\n const showBackButton = step !== 'CHOOSE_TABLE_TYPE'\n const showNextButton =\n step !== 'CHOOSE_TABLE_TYPE' && step !== 'CHOOSE_VIEW_TYPE'\n\n const onBackButtonClicked = useCallback(() => {\n const previousStep = getPreviousStep(step, entityType)\n // Clear the columns if the user changed their mind on the type of table they want to create\n // e.g. if you pick file view, add columns, go back, switch to a submission view, the columns should reset.\n if (['CHOOSE_TABLE_TYPE', 'CHOOSE_VIEW_TYPE'].includes(previousStep)) {\n setColumnModels([])\n }\n setStep(previousStep)\n }, [step, entityType])\n\n const onNextButtonClicked = useCallback(() => {\n if (isLastStep(step)) {\n void onFinish()\n } else if (step === 'TABLE_SQL' && entityType) {\n validateSql({ sql, entityType })\n } else if (step === 'TABLE_COLUMNS') {\n onColumnSchemaNextClicked()\n } else if (\n step === 'ENTITY_VIEW_SCOPE' ||\n step === 'SUBMISSION_VIEW_SCOPE'\n ) {\n // We make sure that the default column models are loaded before the user gets to this step by disabling the \"Next\" button while we are fetching them (unless there's an error)\n // So we can assume that defaultColumnModels is safely loaded. If not, user will just start with 0 columns, which is acceptable.\n if (columnModels.length == 0 && defaultColumnModels) {\n setColumnModels(\n defaultColumnModels.map(cm => ({ ...cm, id: undefined })),\n )\n }\n setStep('TABLE_COLUMNS')\n }\n }, [\n step,\n onFinish,\n onColumnSchemaNextClicked,\n columnModels.length,\n defaultColumnModels,\n validateSql,\n entityType,\n sql,\n ])\n\n const isNextButtonDisabled = useMemo(() => {\n if (step === 'ENTITY_VIEW_SCOPE') {\n return (\n entityViewScopeIds.length === 0 ||\n viewTypeMask === 0 ||\n (isLoadingDefaultColumns && !errorFetchingDefaultColumns)\n )\n }\n if (step === 'SUBMISSION_VIEW_SCOPE') {\n return (\n submissionViewScopeIds.length === 0 ||\n viewTypeMask === 0 ||\n (isLoadingDefaultColumns && !errorFetchingDefaultColumns)\n )\n }\n return false\n }, [\n entityViewScopeIds.length,\n submissionViewScopeIds.length,\n step,\n viewTypeMask,\n isLoadingDefaultColumns,\n errorFetchingDefaultColumns,\n ])\n\n const errorContent = useMemo(() => {\n return (\n <>\n {createEntityError && (\n <Alert sx={{ my: 2 }} severity=\"error\">\n {createEntityError.message}\n </Alert>\n )}\n {createColumnModelsError && (\n <Alert sx={{ my: 2 }} severity=\"error\">\n {createColumnModelsError.message}\n </Alert>\n )}\n {sqlValidationError && (\n <Alert sx={{ my: 2 }} severity=\"error\">\n {sqlValidationError}\n </Alert>\n )}\n </>\n )\n }, [createColumnModelsError, createEntityError, sqlValidationError])\n\n const stepContent = useMemo(() => {\n switch (step) {\n case 'CHOOSE_TABLE_TYPE':\n return (\n <TableTypeSelection\n onTableSelected={() => {\n onTableTypeSelected(EntityType.table)\n }}\n onViewSelected={onViewSelected}\n />\n )\n case 'CHOOSE_VIEW_TYPE':\n return <ViewTypeSelection onTypeSelected={onTableTypeSelected} />\n case 'ENTITY_VIEW_SCOPE':\n return (\n <>\n <EntityViewScopeEditor\n scopeIds={entityViewScopeIds}\n onChange={setEntityViewScopeIds}\n isProjectView={isProjectView}\n />\n {!isProjectView && (\n <EntityViewMaskEditor\n value={viewTypeMask}\n onChange={setViewTypeMask}\n />\n )}\n </>\n )\n case 'SUBMISSION_VIEW_SCOPE':\n return (\n <SubmissionViewScopeEditor\n evaluationIds={submissionViewScopeIds}\n onChange={setSubmissionViewScopeIds}\n />\n )\n case 'TABLE_SQL':\n return (\n <>\n <Box\n sx={{\n mt: 1.25,\n }}\n >\n <SqlDefinedTableEditor\n value={sql}\n onChange={e => setSql(e.target.value)}\n entityType={entityType}\n />\n </Box>\n {errorContent}\n </>\n )\n case 'TABLE_COLUMNS':\n return (\n <TableColumnSchemaForm\n initialData={columnModels}\n entityType={entityType!}\n ref={columnSchemaFormRef}\n onSubmit={onColumnSchemaSubmit}\n viewScope={viewScope}\n />\n )\n case 'TABLE_NAME':\n return (\n <>\n <TableNameForm\n name={name}\n setName={setName}\n description={description}\n setDescription={setDescription}\n />\n {errorContent}\n </>\n )\n }\n }, [\n step,\n onViewSelected,\n onTableTypeSelected,\n entityViewScopeIds,\n isProjectView,\n viewTypeMask,\n submissionViewScopeIds,\n name,\n description,\n sql,\n entityType,\n errorContent,\n columnModels,\n onColumnSchemaSubmit,\n viewScope,\n ])\n\n return (\n <DialogBase\n open={open}\n onCancel={onCancel}\n maxWidth={'md'}\n title={getModalTitle(step, entityType)}\n content={stepContent}\n actions={\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n gap: 2.25,\n mt: 2,\n }}\n >\n {showBackButton && (\n <Button variant={'outlined'} onClick={onBackButtonClicked}>\n Back\n </Button>\n )}\n <Box\n sx={{\n m: 'auto',\n }}\n />\n <Button variant={'outlined'} onClick={onCancel}>\n Cancel\n </Button>\n {showNextButton && (\n <Button\n variant={'contained'}\n onClick={onNextButtonClicked}\n disabled={isNextButtonDisabled}\n >\n {isLastStep(step) ? 'Finish' : 'Next'}\n </Button>\n )}\n </Box>\n }\n />\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateTableViewWizard.js","names":[],"sources":["../../../src/components/CreateTableViewWizard/CreateTableViewWizard.tsx"],"sourcesContent":["import { useCreateEntity } from '@/synapse-queries'\nimport {\n useCreateColumnModels,\n useGetDefaultColumnModels,\n} from '@/synapse-queries/table/useColumnModel'\nimport { useValidateDefiningSql } from '@/synapse-queries/table/useDefiningSql'\nimport { convertToConcreteEntityType } from '@/utils/functions/EntityTypeUtils'\nimport { Alert, Box, Button } from '@mui/material'\nimport { EntityType, ViewEntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n Entity,\n ENTITY_VIEW_TYPE_MASK_FILE,\n ENTITY_VIEW_TYPE_MASK_PROJECT,\n ValidateDefiningSqlResponse,\n ViewScope,\n} from '@sage-bionetworks/synapse-types'\nimport { isUndefined, omitBy } from 'lodash-es'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { SetOptional } from 'type-fest'\nimport { DialogBase } from '../DialogBase'\nimport EntityViewMaskEditor from '../EntityViewScopeEditor/EntityViewMaskEditor'\nimport EntityViewScopeEditor from '../EntityViewScopeEditor/EntityViewScopeEditor'\nimport SqlDefinedTableEditor from '../SqlDefinedTableEditor/SqlDefinedTableEditor'\nimport SubmissionViewScopeEditor from '../SubmissionViewScopeEditor/SubmissionViewScopeEditor'\nimport TableColumnSchemaForm, {\n SubmitHandle,\n} from '../TableColumnSchemaEditor/TableColumnSchemaForm'\nimport {\n CreateTableViewWizardStep,\n getModalTitle,\n getPreviousStep,\n getStepAfterTypeSelection,\n isLastStep,\n maybeSetColumnIds,\n maybeSetDefiningSQL,\n maybeSetScopeIds,\n maybeSetViewTypeMask,\n} from './CreateTableViewWizardUtils'\nimport TableNameForm from './TableNameForm'\nimport TableTypeSelection from './TableTypeSelection'\nimport ViewTypeSelection from './ViewTypeSelection'\n\nexport type CreateTableViewWizardProps = {\n open: boolean\n parentId: string\n onCancel: () => void\n onComplete: (newEntityId: string) => void\n}\n\n/**\n * Wizard to create a Synapse table, view, or other table type.\n *\n * See the README.md in this folder for a visualization of the flowchart\n *\n * @param props\n * @constructor\n */\nexport default function CreateTableViewWizard(\n props: CreateTableViewWizardProps,\n) {\n const { open, parentId, onComplete, onCancel } = props\n const [step, setStep] =\n useState<CreateTableViewWizardStep>('CHOOSE_TABLE_TYPE')\n\n const [name, setName] = useState('')\n const [description, setDescription] = useState<string | undefined>(undefined)\n\n const [entityType, setEntityType] = useState<EntityType | undefined>(\n undefined,\n )\n\n const [entityViewScopeIds, setEntityViewScopeIds] = useState<string[]>([])\n const [submissionViewScopeIds, setSubmissionViewScopeIds] = useState<\n string[]\n >([])\n const [viewTypeMask, setViewTypeMask] = useState<number>(\n ENTITY_VIEW_TYPE_MASK_FILE,\n )\n const isProjectView = viewTypeMask === ENTITY_VIEW_TYPE_MASK_PROJECT\n\n const [columnModels, setColumnModels] = useState<\n SetOptional<ColumnModel, 'id'>[]\n >([])\n const columnSchemaFormRef = useRef<SubmitHandle>(null)\n\n const [sql, setSql] = useState('')\n\n const viewScope: ViewScope | undefined = useMemo(() => {\n if (entityType === EntityType.entityview) {\n return {\n scope: entityViewScopeIds,\n viewTypeMask,\n viewEntityType: entityType as ViewEntityType,\n }\n } else if (entityType === EntityType.submissionview) {\n return {\n scope: submissionViewScopeIds,\n viewEntityType: entityType as ViewEntityType,\n }\n }\n return undefined\n }, [entityType, entityViewScopeIds, submissionViewScopeIds, viewTypeMask])\n\n const {\n data: defaultColumnModels,\n isLoading: isLoadingDefaultColumns,\n isError: errorFetchingDefaultColumns,\n } = useGetDefaultColumnModels(\n viewScope?.viewEntityType!,\n viewScope?.viewTypeMask,\n {\n // Fetch the default columns when the user is determining scope\n // This way we can pre-fill the columns right before they go to the columns step\n // We will prevent clicking \"Next\" before this is loaded\n enabled: step === 'ENTITY_VIEW_SCOPE' || step === 'SUBMISSION_VIEW_SCOPE',\n staleTime: Infinity, // The default column models will never change\n },\n )\n\n const { mutateAsync: createEntity, error: createEntityError } =\n useCreateEntity({\n onSuccess: entity => {\n onComplete(entity.id!)\n },\n })\n\n const {\n mutate: validateSql,\n data: isSqlValid,\n error: definingSqlValidationError,\n } = useValidateDefiningSql({\n onSuccess: (isSqlValid: ValidateDefiningSqlResponse) => {\n if (isSqlValid?.isValid) {\n setStep('TABLE_NAME')\n }\n },\n })\n\n const sqlValidationError: string | null = useMemo(() => {\n if (definingSqlValidationError) {\n return definingSqlValidationError.reason\n } else if (isSqlValid?.invalidReason) {\n return isSqlValid.invalidReason\n } else {\n return null\n }\n }, [definingSqlValidationError, isSqlValid])\n\n const { mutateAsync: createColumnModels, error: createColumnModelsError } =\n useCreateColumnModels()\n\n const onTableTypeSelected = useCallback(\n (entityType: EntityType, viewTypeMask?: number) => {\n setEntityType(entityType)\n if (viewTypeMask != null) {\n setViewTypeMask(viewTypeMask)\n }\n setStep(getStepAfterTypeSelection(entityType))\n },\n [],\n )\n\n const onViewSelected = useCallback(() => {\n setStep('CHOOSE_VIEW_TYPE')\n }, [])\n\n const onFinish = useCallback(async () => {\n if (!entityType) {\n console.error('entityType was not defined!')\n setStep('CHOOSE_TABLE_TYPE')\n return\n }\n // Create the column models\n let createdColumnModels: ColumnModel[] = []\n if (\n columnModels &&\n // Do not create columns if this is a SQL-defined view\n entityType !== EntityType.materializedview &&\n entityType !== EntityType.virtualtable\n ) {\n try {\n createdColumnModels = await createColumnModels(\n columnModels.map(cm => omitBy(cm, isUndefined)) as SetOptional<\n ColumnModel,\n 'id'\n >[],\n )\n } catch (e) {\n // Error will be handled by the hook, exit early if we encountered one\n return\n }\n }\n // Create the entity\n const entityToCreate: Entity = {\n name,\n description,\n parentId: parentId,\n concreteType: convertToConcreteEntityType(entityType),\n }\n\n maybeSetColumnIds(entityToCreate, entityType, createdColumnModels)\n maybeSetScopeIds(\n entityToCreate,\n entityType,\n entityType === EntityType.submissionview\n ? submissionViewScopeIds\n : entityViewScopeIds,\n )\n maybeSetViewTypeMask(entityToCreate, entityType, viewTypeMask)\n maybeSetDefiningSQL(entityToCreate, entityType, sql)\n\n try {\n await createEntity(entityToCreate)\n } catch (e) {\n // Error will be handled by the hook\n return\n }\n }, [\n columnModels,\n createColumnModels,\n createEntity,\n description,\n entityType,\n name,\n parentId,\n entityViewScopeIds,\n submissionViewScopeIds,\n sql,\n viewTypeMask,\n ])\n\n const onColumnSchemaSubmit = useCallback(\n (columnModels: SetOptional<ColumnModel, 'id'>[]) => {\n setColumnModels(columnModels)\n setStep('TABLE_NAME')\n },\n [],\n )\n\n const onColumnSchemaNextClicked = useCallback(() => {\n if (columnSchemaFormRef.current != null) {\n columnSchemaFormRef.current.submit()\n }\n }, [])\n\n const showBackButton = step !== 'CHOOSE_TABLE_TYPE'\n const showNextButton =\n step !== 'CHOOSE_TABLE_TYPE' && step !== 'CHOOSE_VIEW_TYPE'\n\n const onBackButtonClicked = useCallback(() => {\n const previousStep = getPreviousStep(step, entityType)\n // Clear the columns if the user changed their mind on the type of table they want to create\n // e.g. if you pick file view, add columns, go back, switch to a submission view, the columns should reset.\n if (['CHOOSE_TABLE_TYPE', 'CHOOSE_VIEW_TYPE'].includes(previousStep)) {\n setColumnModels([])\n }\n setStep(previousStep)\n }, [step, entityType])\n\n const onNextButtonClicked = useCallback(() => {\n if (isLastStep(step)) {\n void onFinish()\n } else if (step === 'TABLE_SQL' && entityType) {\n validateSql({ sql, entityType })\n } else if (step === 'TABLE_COLUMNS') {\n onColumnSchemaNextClicked()\n } else if (\n step === 'ENTITY_VIEW_SCOPE' ||\n step === 'SUBMISSION_VIEW_SCOPE'\n ) {\n // We make sure that the default column models are loaded before the user gets to this step by disabling the \"Next\" button while we are fetching them (unless there's an error)\n // So we can assume that defaultColumnModels is safely loaded. If not, user will just start with 0 columns, which is acceptable.\n if (columnModels.length == 0 && defaultColumnModels) {\n setColumnModels(\n defaultColumnModels.map(cm => ({ ...cm, id: undefined })),\n )\n }\n setStep('TABLE_COLUMNS')\n }\n }, [\n step,\n onFinish,\n onColumnSchemaNextClicked,\n columnModels.length,\n defaultColumnModels,\n validateSql,\n entityType,\n sql,\n ])\n\n const isNextButtonDisabled = useMemo(() => {\n if (step === 'ENTITY_VIEW_SCOPE') {\n return (\n entityViewScopeIds.length === 0 ||\n viewTypeMask === 0 ||\n (isLoadingDefaultColumns && !errorFetchingDefaultColumns)\n )\n }\n if (step === 'SUBMISSION_VIEW_SCOPE') {\n return (\n submissionViewScopeIds.length === 0 ||\n viewTypeMask === 0 ||\n (isLoadingDefaultColumns && !errorFetchingDefaultColumns)\n )\n }\n return false\n }, [\n entityViewScopeIds.length,\n submissionViewScopeIds.length,\n step,\n viewTypeMask,\n isLoadingDefaultColumns,\n errorFetchingDefaultColumns,\n ])\n\n const errorContent = useMemo(() => {\n return (\n <>\n {createEntityError && (\n <Alert sx={{ my: 2 }} severity=\"error\">\n {createEntityError.message}\n </Alert>\n )}\n {createColumnModelsError && (\n <Alert sx={{ my: 2 }} severity=\"error\">\n {createColumnModelsError.message}\n </Alert>\n )}\n {sqlValidationError && (\n <Alert sx={{ my: 2 }} severity=\"error\">\n {sqlValidationError}\n </Alert>\n )}\n </>\n )\n }, [createColumnModelsError, createEntityError, sqlValidationError])\n\n const stepContent = useMemo(() => {\n switch (step) {\n case 'CHOOSE_TABLE_TYPE':\n return (\n <TableTypeSelection\n onTableSelected={() => {\n onTableTypeSelected(EntityType.table)\n }}\n onViewSelected={onViewSelected}\n />\n )\n case 'CHOOSE_VIEW_TYPE':\n return <ViewTypeSelection onTypeSelected={onTableTypeSelected} />\n case 'ENTITY_VIEW_SCOPE':\n return (\n <>\n <EntityViewScopeEditor\n scopeIds={entityViewScopeIds}\n onChange={setEntityViewScopeIds}\n isProjectView={isProjectView}\n />\n {!isProjectView && (\n <EntityViewMaskEditor\n value={viewTypeMask}\n onChange={setViewTypeMask}\n />\n )}\n </>\n )\n case 'SUBMISSION_VIEW_SCOPE':\n return (\n <SubmissionViewScopeEditor\n evaluationIds={submissionViewScopeIds}\n onChange={setSubmissionViewScopeIds}\n />\n )\n case 'TABLE_SQL':\n return (\n <>\n <Box\n sx={{\n mt: 1.25,\n }}\n >\n <SqlDefinedTableEditor\n value={sql}\n onChange={e => setSql(e.target.value)}\n entityType={entityType}\n />\n </Box>\n {errorContent}\n </>\n )\n case 'TABLE_COLUMNS':\n return (\n <TableColumnSchemaForm\n initialData={columnModels}\n entityType={entityType!}\n ref={columnSchemaFormRef}\n onSubmit={onColumnSchemaSubmit}\n viewScope={viewScope}\n />\n )\n case 'TABLE_NAME':\n return (\n <>\n <TableNameForm\n name={name}\n setName={setName}\n description={description}\n setDescription={setDescription}\n />\n {errorContent}\n </>\n )\n }\n }, [\n step,\n onViewSelected,\n onTableTypeSelected,\n entityViewScopeIds,\n isProjectView,\n viewTypeMask,\n submissionViewScopeIds,\n name,\n description,\n sql,\n entityType,\n errorContent,\n columnModels,\n onColumnSchemaSubmit,\n viewScope,\n ])\n\n return (\n <DialogBase\n open={open}\n onCancel={onCancel}\n maxWidth={'md'}\n title={getModalTitle(step, entityType)}\n content={stepContent}\n actions={\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n gap: 2.25,\n mt: 2,\n }}\n >\n {showBackButton && (\n <Button variant={'outlined'} onClick={onBackButtonClicked}>\n Back\n </Button>\n )}\n <Box\n sx={{\n m: 'auto',\n }}\n />\n <Button variant={'outlined'} onClick={onCancel}>\n Cancel\n </Button>\n {showNextButton && (\n <Button\n variant={'contained'}\n onClick={onNextButtonClicked}\n disabled={isNextButtonDisabled}\n >\n {isLastStep(step) ? 'Finish' : 'Next'}\n </Button>\n )}\n </Box>\n }\n />\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableNameForm.d.ts","sourceRoot":"","sources":["../../../src/components/CreateTableViewWizard/TableNameForm.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAEhD,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;CAC7D,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CA6B9D"}
1
+ {"version":3,"file":"TableNameForm.d.ts","sourceRoot":"","sources":["../../../src/components/CreateTableViewWizard/TableNameForm.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAEhD,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IACzC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;CAC7D,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CA0B9D"}
@@ -1,24 +1,21 @@
1
- import { useGetFeatureFlag as e } from "../../synapse-queries/featureflags/useGetFeatureFlag.js";
2
- import "../../synapse-queries/index.js";
3
- import { FeatureFlagEnum as t } from "../../utils/featureflag/FeatureFlags.js";
4
- import { TextField as n } from "@mui/material";
5
- import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
1
+ import { TextField as e } from "@mui/material";
2
+ import { Fragment as t, jsx as n, jsxs as r } from "react/jsx-runtime";
6
3
  //#region src/components/CreateTableViewWizard/TableNameForm.tsx
7
- function o(o) {
8
- let { name: s, setName: c, description: l, setDescription: u } = o, d = e(t.DESCRIPTION_FIELD);
9
- return /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(n, {
4
+ function i(i) {
5
+ let { name: a, setName: o, description: s, setDescription: c } = i;
6
+ return /* @__PURE__ */ r(t, { children: [/* @__PURE__ */ n(e, {
10
7
  required: !0,
11
8
  label: "Name",
12
- value: s,
9
+ value: a,
13
10
  onChange: (e) => {
14
- c(e.target.value);
11
+ o(e.target.value);
15
12
  },
16
13
  fullWidth: !0
17
- }), d && /* @__PURE__ */ i(n, {
14
+ }), /* @__PURE__ */ n(e, {
18
15
  label: "Description",
19
- value: l,
16
+ value: s,
20
17
  onChange: (e) => {
21
- u(e.target.value || void 0);
18
+ c(e.target.value || void 0);
22
19
  },
23
20
  fullWidth: !0,
24
21
  multiline: !0,
@@ -27,6 +24,6 @@ function o(o) {
27
24
  })] });
28
25
  }
29
26
  //#endregion
30
- export { o as default };
27
+ export { i as default };
31
28
 
32
29
  //# sourceMappingURL=TableNameForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableNameForm.js","names":[],"sources":["../../../src/components/CreateTableViewWizard/TableNameForm.tsx"],"sourcesContent":["import { useGetFeatureFlag } from '@/synapse-queries'\nimport { TextField } from '@mui/material'\nimport { FeatureFlagEnum } from '@/utils/featureflag/FeatureFlags'\nimport { Dispatch, SetStateAction } from 'react'\n\ntype TableNameFormProps = {\n name: string\n setName: Dispatch<SetStateAction<string>>\n description: string | undefined\n setDescription: Dispatch<SetStateAction<string | undefined>>\n}\n\n/**\n * React component for the naming a new table or view.\n * Renders UI to provide the name and description of a table or view.\n */\nexport default function TableNameForm(props: TableNameFormProps) {\n const { name, setName, description, setDescription } = props\n const isFeatureEnabled = useGetFeatureFlag(FeatureFlagEnum.DESCRIPTION_FIELD)\n return (\n <>\n <TextField\n required\n label={'Name'}\n value={name}\n onChange={e => {\n setName(e.target.value)\n }}\n fullWidth\n />\n {isFeatureEnabled && (\n <TextField\n label={'Description'}\n value={description}\n onChange={e => {\n setDescription(e.target.value || undefined)\n }}\n fullWidth\n multiline\n rows={3}\n sx={{ my: 2 }}\n />\n )}\n </>\n )\n}\n"],"mappings":";;;;;;AAgBA,SAAwB,EAAc,GAA2B;CAC/D,IAAM,EAAE,SAAM,YAAS,gBAAa,sBAAmB,GACjD,IAAmB,EAAkB,EAAgB,iBAAiB;CAC5E,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,UAAA;EACA,OAAO;EACP,OAAO;EACP,WAAU,MAAK;GACb,EAAQ,EAAE,OAAO,KAAK;EACxB;EACA,WAAA;CACD,CAAA,GACA,KACC,kBAAC,GAAD;EACE,OAAO;EACP,OAAO;EACP,WAAU,MAAK;GACb,EAAe,EAAE,OAAO,SAAS,KAAA,CAAS;EAC5C;EACA,WAAA;EACA,WAAA;EACA,MAAM;EACN,IAAI,EAAE,IAAI,EAAE;CACb,CAAA,CAEH,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"TableNameForm.js","names":[],"sources":["../../../src/components/CreateTableViewWizard/TableNameForm.tsx"],"sourcesContent":["import { TextField } from '@mui/material'\nimport { Dispatch, SetStateAction } from 'react'\n\ntype TableNameFormProps = {\n name: string\n setName: Dispatch<SetStateAction<string>>\n description: string | undefined\n setDescription: Dispatch<SetStateAction<string | undefined>>\n}\n\n/**\n * React component for the naming a new table or view.\n * Renders UI to provide the name and description of a table or view.\n */\nexport default function TableNameForm(props: TableNameFormProps) {\n const { name, setName, description, setDescription } = props\n return (\n <>\n <TextField\n required\n label={'Name'}\n value={name}\n onChange={e => {\n setName(e.target.value)\n }}\n fullWidth\n />\n <TextField\n label={'Description'}\n value={description}\n onChange={e => {\n setDescription(e.target.value || undefined)\n }}\n fullWidth\n multiline\n rows={3}\n sx={{ my: 2 }}\n />\n </>\n )\n}\n"],"mappings":";;;AAcA,SAAwB,EAAc,GAA2B;CAC/D,IAAM,EAAE,SAAM,YAAS,gBAAa,sBAAmB;CACvD,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,UAAA;EACA,OAAO;EACP,OAAO;EACP,WAAU,MAAK;GACb,EAAQ,EAAE,OAAO,KAAK;EACxB;EACA,WAAA;CACD,CAAA,GACD,kBAAC,GAAD;EACE,OAAO;EACP,OAAO;EACP,WAAU,MAAK;GACb,EAAe,EAAE,OAAO,SAAS,KAAA,CAAS;EAC5C;EACA,WAAA;EACA,WAAA;EACA,MAAM;EACN,IAAI,EAAE,IAAI,EAAE;CACb,CAAA,CACD,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAsBA,OAAO,EACL,iBAAiB,EAElB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,GAAG,EAOJ,MAAM,OAAO,CAAA;AAkBd,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACpD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AA6gBD,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAM3C;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAsBA,OAAO,EACL,iBAAiB,EAGlB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,GAAG,EAOJ,MAAM,OAAO,CAAA;AAkBd,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACpD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AAghBD,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAM3C;AAED,eAAe,WAAW,CAAA"}