synapse-react-client 4.0.44 → 4.0.46

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 (415) hide show
  1. package/dist/SWC.index.d.ts +1 -1
  2. package/dist/SWC.index.js +2 -2
  3. package/dist/SWC.index.js.map +1 -1
  4. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
  6. package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
  7. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
  8. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  9. package/dist/aridhia-queries/index.d.ts +1 -0
  10. package/dist/aridhia-queries/index.d.ts.map +1 -1
  11. package/dist/aridhia-queries/index.js +11 -10
  12. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
  13. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
  14. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
  15. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
  16. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
  18. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  19. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +2 -1
  20. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  21. package/dist/components/AccessRequirementList/AccessRequirementList.js +126 -125
  22. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  23. package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts +1 -1
  24. package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts.map +1 -1
  25. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +28 -16
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +99 -97
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +1 -1
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -1
  43. package/dist/components/AccessRequirementList/RequestDataStep.d.ts +1 -4
  44. package/dist/components/AccessRequirementList/RequestDataStep.d.ts.map +1 -1
  45. package/dist/components/AccessRequirementList/RequestDataStep.js +15 -18
  46. package/dist/components/AccessRequirementList/RequestDataStep.js.map +1 -1
  47. package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
  48. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  49. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
  50. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  51. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
  52. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
  53. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
  54. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
  55. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
  56. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
  57. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  58. package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
  59. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
  60. package/dist/components/Authentication/LastLoginInfo.js +1 -1
  61. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  62. package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
  63. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  64. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
  65. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  66. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
  67. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  68. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
  69. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  70. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
  71. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
  72. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  73. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
  74. package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
  75. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  76. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  77. package/dist/components/ComponentCollapse.js +2 -1
  78. package/dist/components/ComponentCollapse.js.map +1 -1
  79. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.d.ts.map +1 -1
  80. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +52 -49
  81. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  82. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  83. package/dist/components/DataGrid/SynapseGrid.js +231 -219
  84. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  85. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  86. package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
  87. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  88. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  89. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
  90. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  91. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
  92. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  93. package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
  94. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  95. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  96. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
  97. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  98. package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
  99. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  100. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +5 -5
  101. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  102. package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
  103. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  104. package/dist/components/DataGrid/utils/columnFactory.js +1 -1
  105. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  106. package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
  107. package/dist/components/DataGrid/utils/splitPatch.js +22 -13
  108. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  109. package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
  110. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  111. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  112. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +2 -1
  113. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  114. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
  115. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
  116. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  117. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
  118. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  119. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
  120. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  121. package/dist/components/EntityFinder/EntityFinder.js +4 -4
  122. package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
  123. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  124. package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
  125. package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
  126. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  127. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +1 -1
  128. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  129. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  130. package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
  131. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  132. package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
  133. package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
  134. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  135. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
  136. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
  137. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  138. package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
  139. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  140. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
  141. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  142. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
  143. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
  144. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
  145. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  146. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
  147. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  148. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
  149. package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
  150. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
  151. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
  152. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
  153. package/dist/components/FormTemplateEditor/FormStructurePanel.js +1 -1
  154. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
  155. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
  156. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
  157. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
  158. package/dist/components/FormTemplateEditor/StepCard.js +15 -10
  159. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
  160. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
  161. package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
  162. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
  163. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
  164. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
  165. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
  166. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -1
  167. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -1
  168. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.d.ts +9 -0
  169. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.d.ts.map +1 -0
  170. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.js +45 -0
  171. package/dist/components/FormTemplateReferenceField/FormTemplatePreviewDialog.js.map +1 -0
  172. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.d.ts +22 -0
  173. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.d.ts.map +1 -0
  174. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.js +139 -0
  175. package/dist/components/FormTemplateReferenceField/FormTemplateReferenceField.js.map +1 -0
  176. package/dist/components/Forum/ForumTable.d.ts +17 -5
  177. package/dist/components/Forum/ForumTable.d.ts.map +1 -1
  178. package/dist/components/Forum/ForumTable.js +94 -77
  179. package/dist/components/Forum/ForumTable.js.map +1 -1
  180. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +45 -45
  181. package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
  182. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  183. package/dist/components/GenericCard/TableRowGenericCard.js +1 -1
  184. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  185. package/dist/components/HelpPopover/HelpPopover.js +1 -1
  186. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  187. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  188. package/dist/components/IconSvg/IconSvg.js +154 -47
  189. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  190. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
  191. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
  192. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  193. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  194. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
  195. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  196. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
  197. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
  198. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
  199. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
  200. package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
  201. package/dist/components/Markdown/MarkdownCollapse.js +3 -1
  202. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  203. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
  204. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  205. package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
  206. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  207. package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
  208. package/dist/components/PortalList/PortalCard.js +6 -5
  209. package/dist/components/PortalList/PortalCard.js.map +1 -1
  210. package/dist/components/PortalList/PortalList.js +4 -4
  211. package/dist/components/PortalList/PortalList.js.map +1 -1
  212. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
  213. package/dist/components/QueryBuilder/FilterConditionRow.js +4 -4
  214. package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
  215. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  216. package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
  217. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  218. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.d.ts.map +1 -1
  219. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +142 -108
  220. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  221. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.d.ts.map +1 -1
  222. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js +15 -15
  223. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  224. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  225. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js +57 -55
  226. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  227. package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
  228. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  229. package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
  230. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  231. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
  232. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  233. package/dist/components/SynapseChat/SynapseChat.js +1 -1
  234. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  235. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  236. package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
  237. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  238. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
  239. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
  240. package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
  241. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  242. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
  243. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  244. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
  245. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
  246. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  247. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
  248. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  249. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
  250. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  251. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  252. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
  253. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  254. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  255. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  256. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
  257. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  258. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  259. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
  260. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  261. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  262. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  263. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +140 -140
  264. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  265. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  266. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  267. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
  268. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  269. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  270. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  271. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  272. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  273. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
  274. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
  275. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  276. package/dist/components/TanStackTable/ColumnHeader.js +1 -1
  277. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  278. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
  279. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  280. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
  281. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
  282. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  283. package/dist/components/Webhook/WebhookDashboard.js +1 -1
  284. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  285. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  286. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  287. package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
  288. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  289. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
  290. package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
  291. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
  292. package/dist/components/dataaccess/FormTemplateTable.js +6 -6
  293. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
  294. package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
  295. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  296. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
  297. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  298. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +4 -1
  299. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  300. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  301. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  302. package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
  303. package/dist/components/download_list/DownloadDetails.js +12 -10
  304. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  305. package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
  306. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  307. package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
  308. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  309. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  310. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  311. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
  312. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  313. package/dist/components/error/ErrorChip.d.ts.map +1 -1
  314. package/dist/components/error/ErrorChip.js +2 -1
  315. package/dist/components/error/ErrorChip.js.map +1 -1
  316. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
  317. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
  318. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  319. package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
  320. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  321. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
  322. package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
  323. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  324. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
  325. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  326. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
  327. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  328. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
  329. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  330. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  331. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  332. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
  333. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
  334. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
  335. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
  336. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
  337. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
  338. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
  339. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
  340. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
  341. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  342. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +5 -0
  343. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -1
  344. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +37 -26
  345. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -1
  346. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +8 -0
  347. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  348. package/dist/mocks/msw/handlers/aridhiaHandlers.js +52 -41
  349. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  350. package/dist/mocks/msw/handlers/discussionHandlers.d.ts.map +1 -1
  351. package/dist/mocks/msw/handlers/discussionHandlers.js +40 -33
  352. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  353. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  354. package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
  355. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  356. package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
  357. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  358. package/dist/mocks/msw/server.d.ts.map +1 -1
  359. package/dist/mocks/msw/server.js +4 -2
  360. package/dist/mocks/msw/server.js.map +1 -1
  361. package/dist/synapse-client/SynapseClient.d.ts +10 -0
  362. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  363. package/dist/synapse-client/SynapseClient.js +486 -482
  364. package/dist/synapse-client/SynapseClient.js.map +1 -1
  365. package/dist/synapse-client/index.js +3 -3
  366. package/dist/synapse-queries/KeyFactory.d.ts +13 -1
  367. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  368. package/dist/synapse-queries/KeyFactory.js +11 -1
  369. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  370. package/dist/synapse-queries/dataaccess/index.js +4 -4
  371. package/dist/synapse-queries/dataaccess/useAccessRequirements.d.ts.map +1 -1
  372. package/dist/synapse-queries/dataaccess/useAccessRequirements.js +4 -1
  373. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  374. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +19 -5
  375. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  376. package/dist/synapse-queries/dataaccess/useEDuc.js +29 -21
  377. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  378. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts +12 -0
  379. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts.map +1 -1
  380. package/dist/synapse-queries/dataaccess/useFormTemplate.js +52 -30
  381. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
  382. package/dist/synapse-queries/forum/useForum.d.ts +5 -1
  383. package/dist/synapse-queries/forum/useForum.d.ts.map +1 -1
  384. package/dist/synapse-queries/forum/useForum.js +23 -1
  385. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  386. package/dist/synapse-queries/index.js +185 -184
  387. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +5 -3
  388. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -1
  389. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +12 -15
  390. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -1
  391. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  392. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  393. package/dist/theme/DefaultTheme.d.ts.map +1 -1
  394. package/dist/theme/DefaultTheme.js +4 -1
  395. package/dist/theme/DefaultTheme.js.map +1 -1
  396. package/dist/tsconfig.build.tsbuildinfo +1 -1
  397. package/dist/utils/APIConstants.d.ts.map +1 -1
  398. package/dist/utils/APIConstants.js.map +1 -1
  399. package/dist/utils/AppUtils/AppUtils.js +1 -1
  400. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  401. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  402. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  403. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  404. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  405. package/dist/utils/functions/getEndpoint.d.ts +1 -0
  406. package/dist/utils/functions/getEndpoint.d.ts.map +1 -1
  407. package/dist/utils/functions/getEndpoint.js +3 -3
  408. package/dist/utils/functions/getEndpoint.js.map +1 -1
  409. package/dist/utils/types/RequestableAccessRequirement.d.ts +8 -0
  410. package/dist/utils/types/RequestableAccessRequirement.d.ts.map +1 -0
  411. package/dist/utils/types/RequestableAccessRequirement.js +9 -0
  412. package/dist/utils/types/RequestableAccessRequirement.js.map +1 -0
  413. package/package.json +6 -5
  414. package/dist/testutils/ReactQueryMockUtils.js +0 -676
  415. package/dist/testutils/ReactQueryMockUtils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ManualUploadDucStep.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetDataAccessRequestPreview,\n useSubmitDataAccessRequest,\n useUpdateDataAccessRequest,\n useVoidDataAccessRequestSignature,\n} from '@/synapse-queries'\nimport SynapseClient from '@/synapse-client'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n Skeleton,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n RestrictableObjectType,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport IconSvg from '../../../IconSvg/IconSvg'\nimport { DialogBaseTitle } from '../../../DialogBase'\nimport { ReviewCollaboratorsAndSigningOfficialAccordion } from '../ReviewCollaboratorsAndSigningOfficialAccordion'\nimport { UploadDocumentField } from '../UploadDocumentField'\nimport { longFieldLabelSx } from '../styles'\nimport { RequestFlowAccessRequirement } from '../requestFlowTypes'\n\nexport type ManualUploadDucStepProps = {\n managedACTAccessRequirement: RequestFlowAccessRequirement\n subjectId: string\n subjectType: RestrictableObjectType\n onHide: () => void\n onBackClicked: () => void\n onSubmissionCreated: (submissionId: string) => void\n /**\n * Optional href override for the \"Download DUC for Signatures\" anchor. When set, the preview\n * file handle fetch is skipped and this URL is used directly. Used by stories and tests where\n * the portal servlet is not available.\n */\n downloadHrefOverride?: string\n}\n\n/**\n * Wizard step shown after the eDUC preview (PORTALS-4377) when the user chooses to manually\n * print, sign, and upload a PDF instead of using electronic signatures. Lets the user download\n * the partially-populated DUC, upload a signed copy, and submit the request.\n */\nexport default function ManualUploadDucStep(props: ManualUploadDucStepProps) {\n const {\n managedACTAccessRequirement,\n subjectId,\n subjectType,\n onHide,\n onBackClicked,\n onSubmissionCreated,\n downloadHrefOverride,\n } = props\n\n const {\n data: dataAccessRequest,\n isLoading: isLoadingDar,\n refetch: refetchDar,\n } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n staleTime: Infinity,\n throwOnError: true,\n })\n\n // Once we start the void → refetch → updateDar sequence, the preview query must not run again:\n // GET /dataAccessRequest/{id}/preview has server-side side effects (creates a new signature\n // envelope, resets DAR to draft) that repopulate `eDucSignatureEnvelopeId` on the DAR. The\n // backend then rejects the follow-up updateDar because we're trying to set a manually-uploaded\n // `ducFileHandleId` on a DAR that still has an active signature envelope. Because\n // `useVoidDataAccessRequestSignature` invalidates the root DAR query key on success, an active\n // preview observer would otherwise be auto-refetched.\n const [isSubmittingSignedDuc, setIsSubmittingSignedDuc] = useState(false)\n\n const {\n data: previewFileHandle,\n isLoading: isLoadingPreview,\n error: previewError,\n } = useGetDataAccessRequestPreview(dataAccessRequest?.id ?? '', {\n enabled:\n Boolean(dataAccessRequest?.id) &&\n !downloadHrefOverride &&\n !isSubmittingSignedDuc,\n })\n\n const previewFileHandleId = previewFileHandle?.fileHandleId\n const downloadHref =\n downloadHrefOverride ??\n (previewFileHandleId && dataAccessRequest?.id\n ? SynapseClient.getPortalFileHandleServletUrl(\n previewFileHandleId,\n dataAccessRequest.id,\n FileHandleAssociateType.DataAccessRequestAttachment,\n )\n : undefined)\n\n const [updateDarError, setUpdateDarError] = useState<string | undefined>()\n const [submitDarError, setSubmitDarError] = useState<string | undefined>()\n\n const {\n mutate: updateDar,\n mutateAsync: updateDarAsync,\n isPending: isUpdating,\n } = useUpdateDataAccessRequest({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutateAsync: voidSignatureAsync, isPending: isVoidingSignature } =\n useVoidDataAccessRequestSignature({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutate: submit, isPending: isSubmitting } =\n useSubmitDataAccessRequest({\n onSuccess: submission => onSubmissionCreated(submission.submissionId),\n onError: e => setSubmitDarError(e.reason),\n })\n\n const accessorChanges = dataAccessRequest?.accessorChanges ?? []\n const pi = dataAccessRequest?.principalInvestigator\n const so = dataAccessRequest?.signingOfficial\n const signedDucFileHandleId = dataAccessRequest?.ducFileHandleId\n const signedDucFileHandleAssociations: FileHandleAssociation[] =\n signedDucFileHandleId && dataAccessRequest?.id\n ? [\n {\n fileHandleId: signedDucFileHandleId,\n associateObjectType:\n FileHandleAssociateType.DataAccessRequestAttachment,\n associateObjectId: dataAccessRequest.id,\n },\n ]\n : []\n\n const isDownloadDisabled = isLoadingDar || isLoadingPreview || !downloadHref\n const isSubmitDisabled =\n isLoadingDar ||\n !dataAccessRequest ||\n !signedDucFileHandleId ||\n isUpdating ||\n isVoidingSignature ||\n isSubmitting\n\n const handleUpload = async (resp: UploadCallbackResp) => {\n if (!resp.success || !resp.resp || !dataAccessRequest) {\n const errorObj = resp.error as { reason?: unknown } | undefined\n const reason =\n errorObj && typeof errorObj.reason === 'string'\n ? errorObj.reason\n : undefined\n if (reason) {\n setUpdateDarError(reason)\n }\n return\n }\n setUpdateDarError(undefined)\n // Only void a prior eDUC signature routing if one was actually sent. If the user ejected\n // from EDucPreviewStep before sending for signature, there's nothing to void.\n const hasSignatureEnvelope = Boolean(\n dataAccessRequest.eDucSignatureEnvelopeId,\n )\n let latestDar = dataAccessRequest\n if (hasSignatureEnvelope) {\n // Freeze the preview query before voiding — see the comment above the `isSubmittingSignedDuc` state.\n setIsSubmittingSignedDuc(true)\n try {\n await voidSignatureAsync(dataAccessRequest.id)\n } catch {\n return\n }\n const refreshed = await refetchDar()\n latestDar = refreshed.data ?? dataAccessRequest\n }\n updateDar({\n ...latestDar,\n ducFileHandleId: resp.resp.fileHandleId,\n })\n }\n\n const handleSubmit = async () => {\n if (!dataAccessRequest) return\n setSubmitDarError(undefined)\n // Persist the DAR once more so the submission uses the latest etag.\n const latest = await updateDarAsync(dataAccessRequest).catch(() => null)\n if (!latest) return\n submit({\n request: {\n requestId: latest.id,\n requestEtag: latest.etag,\n subjectId,\n subjectType,\n },\n accessRequirementId: String(managedACTAccessRequirement.id),\n })\n }\n\n return (\n <>\n <DialogBaseTitle title={'Request Access'} onCancel={onHide} />\n <DialogContent>\n <Box>\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Submit a signed PDF instead of e-signatures\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n Instead of signing the Data Use Certificate (DUC) using DocuSign,\n you can download the DUC as a PDF and then upload it after it has\n been signed by your collaborators, your project lead, and your\n Signing Official.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 3 }}>\n However, we recommend using e-signatures, as it is usually faster,\n and prevents common errors which can result in your request being\n rejected.\n </Typography>\n\n <Box sx={{ mb: 3 }}>\n <ReviewCollaboratorsAndSigningOfficialAccordion\n accessorChanges={accessorChanges}\n principalInvestigator={pi}\n signingOfficial={so}\n isLoading={isLoadingDar}\n />\n </Box>\n\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Instructions\n </Typography>\n <Stack\n direction={{ xs: 'column', md: 'row' }}\n sx={{ gap: 4, alignItems: 'flex-start' }}\n >\n <Box sx={{ flex: 1 }}>\n <Typography variant={'body1'} sx={{ fontWeight: 700, mb: 1 }}>\n Step 1. Download your Data Use Certificate\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n As a first step, you will need to download a PDF of the Data Use\n Certificate with the names of your Collaborators and Signing\n Official. Make sure the names are correct and complete before\n downloading.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n If needed, you can modify the printed list of collaborators by\n adding or removing names on the paper copy before uploading.\n </Typography>\n {previewError ? (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn&apos;t prepare your DUC for download.\n </strong>\n <br />\n {previewError.reason}\n </Alert>\n ) : (\n <Button\n component=\"a\"\n href={downloadHref ?? undefined}\n target=\"_blank\"\n rel=\"noopener\"\n variant={'outlined'}\n disabled={isDownloadDisabled}\n endIcon={<IconSvg icon={'download'} wrap={false} />}\n >\n Download DUC for Signatures\n </Button>\n )}\n </Box>\n <Box sx={{ flex: 1 }}>\n <Typography variant={'body1'} sx={{ fontWeight: 700, mb: 1 }}>\n Step 2. Fill out and upload a Data Use Certificate\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n You must download and fill out a Data Use Certificate (DUC). Be\n sure to upload the completed DUC below.\n </Typography>\n <Typography\n variant={'body1'}\n component={'ol'}\n sx={{ ...longFieldLabelSx, mb: 2, pl: 3 }}\n >\n <li>Download the DUC document.</li>\n <li>\n Fill out the DUC, following the instructions in the PDF.\n </li>\n <li>\n Upload the completed certificate using the button below:\n </li>\n </Typography>\n {isLoadingDar ? (\n <Skeleton variant={'rectangular'} width={200} height={36} />\n ) : (\n <UploadDocumentField\n id={'signed-duc'}\n documentName={'Signed DUC'}\n isLoading={isUpdating || isVoidingSignature}\n uploadCallback={resp => {\n handleUpload(resp)\n }}\n fileHandleAssociations={signedDucFileHandleAssociations}\n />\n )}\n </Box>\n </Stack>\n\n {updateDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t save your change.</strong>\n <br />\n {updateDarError}\n </Alert>\n )}\n {submitDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t submit your request.</strong>\n <br />\n {submitDarError}\n </Alert>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant={'outlined'} onClick={onBackClicked}>\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }} />\n <Button\n variant={'contained'}\n disabled={isSubmitDisabled}\n loading={isSubmitting}\n onClick={() => {\n handleSubmit()\n }}\n >\n Submit Request\n </Button>\n </DialogActions>\n </>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ManualUploadDucStep.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetDataAccessRequestPreview,\n useSubmitDataAccessRequest,\n useUpdateDataAccessRequest,\n useVoidDataAccessRequestSignature,\n} from '@/synapse-queries'\nimport SynapseClient from '@/synapse-client'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n Skeleton,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n RestrictableObjectType,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport IconSvg from '../../../IconSvg/IconSvg'\nimport { DialogBaseTitle } from '../../../DialogBase'\nimport { ReviewCollaboratorsAndSigningOfficialAccordion } from '../ReviewCollaboratorsAndSigningOfficialAccordion'\nimport { UploadDocumentField } from '../UploadDocumentField'\nimport { longFieldLabelSx } from '../styles'\nimport { RequestFlowAccessRequirement } from '../requestFlowTypes'\n\nexport type ManualUploadDucStepProps = {\n managedACTAccessRequirement: RequestFlowAccessRequirement\n subjectId: string\n subjectType: RestrictableObjectType\n onHide: () => void\n onBackClicked: () => void\n onSubmissionCreated: (submissionId: string) => void\n /**\n * Optional href override for the \"Download DUC for Signatures\" anchor. When set, the preview\n * file handle fetch is skipped and this URL is used directly. Used by stories and tests where\n * the portal servlet is not available.\n */\n downloadHrefOverride?: string\n}\n\n/**\n * Wizard step shown after the eDUC preview (PORTALS-4377) when the user chooses to manually\n * print, sign, and upload a PDF instead of using electronic signatures. Lets the user download\n * the partially-populated DUC, upload a signed copy, and submit the request.\n */\nexport default function ManualUploadDucStep(props: ManualUploadDucStepProps) {\n const {\n managedACTAccessRequirement,\n subjectId,\n subjectType,\n onHide,\n onBackClicked,\n onSubmissionCreated,\n downloadHrefOverride,\n } = props\n\n const {\n data: dataAccessRequest,\n isLoading: isLoadingDar,\n refetch: refetchDar,\n } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n staleTime: Infinity,\n throwOnError: true,\n })\n\n const {\n data: previewFileHandle,\n isLoading: isLoadingPreview,\n error: previewError,\n } = useGetDataAccessRequestPreview(dataAccessRequest?.id ?? '', {\n enabled: Boolean(dataAccessRequest?.id) && !downloadHrefOverride,\n })\n\n const previewFileHandleId = previewFileHandle?.fileHandleId\n const downloadHref =\n downloadHrefOverride ??\n (previewFileHandleId && dataAccessRequest?.id\n ? SynapseClient.getPortalFileHandleServletUrl(\n previewFileHandleId,\n dataAccessRequest.id,\n FileHandleAssociateType.DataAccessRequestAttachment,\n )\n : undefined)\n\n const [updateDarError, setUpdateDarError] = useState<string | undefined>()\n const [submitDarError, setSubmitDarError] = useState<string | undefined>()\n\n const {\n mutate: updateDar,\n mutateAsync: updateDarAsync,\n isPending: isUpdating,\n } = useUpdateDataAccessRequest({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutateAsync: voidSignatureAsync, isPending: isVoidingSignature } =\n useVoidDataAccessRequestSignature({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutate: submit, isPending: isSubmitting } =\n useSubmitDataAccessRequest({\n onSuccess: submission => onSubmissionCreated(submission.submissionId),\n onError: e => setSubmitDarError(e.reason),\n })\n\n const accessorChanges = dataAccessRequest?.accessorChanges ?? []\n const pi = dataAccessRequest?.principalInvestigator\n const so = dataAccessRequest?.signingOfficial\n const signedDucFileHandleId = dataAccessRequest?.ducFileHandleId\n const signedDucFileHandleAssociations: FileHandleAssociation[] =\n signedDucFileHandleId && dataAccessRequest?.id\n ? [\n {\n fileHandleId: signedDucFileHandleId,\n associateObjectType:\n FileHandleAssociateType.DataAccessRequestAttachment,\n associateObjectId: dataAccessRequest.id,\n },\n ]\n : []\n\n const isDownloadDisabled = isLoadingDar || isLoadingPreview || !downloadHref\n const isSubmitDisabled =\n isLoadingDar ||\n !dataAccessRequest ||\n !signedDucFileHandleId ||\n isUpdating ||\n isVoidingSignature ||\n isSubmitting\n\n const handleUpload = async (resp: UploadCallbackResp) => {\n if (!resp.success || !resp.resp || !dataAccessRequest) {\n const errorObj = resp.error as { reason?: unknown } | undefined\n const reason =\n errorObj && typeof errorObj.reason === 'string'\n ? errorObj.reason\n : undefined\n if (reason) {\n setUpdateDarError(reason)\n }\n return\n }\n setUpdateDarError(undefined)\n // The server rejects a manually-uploaded `ducFileHandleId` while a routing is still in flight,\n // so an existing envelope has to be voided first. Generating the preview never creates one, so\n // this only fires for users who actually sent the DUC for signature and then changed their mind.\n const hasSignatureEnvelope = Boolean(\n dataAccessRequest.eDucSignatureEnvelopeId,\n )\n let latestDar = dataAccessRequest\n if (hasSignatureEnvelope) {\n try {\n await voidSignatureAsync({\n requestId: dataAccessRequest.id,\n accessRequirementId: String(managedACTAccessRequirement.id),\n })\n } catch {\n return\n }\n const refreshed = await refetchDar()\n latestDar = refreshed.data ?? dataAccessRequest\n }\n updateDar({\n ...latestDar,\n ducFileHandleId: resp.resp.fileHandleId,\n })\n }\n\n const handleSubmit = async () => {\n if (!dataAccessRequest) return\n setSubmitDarError(undefined)\n // Persist the DAR once more so the submission uses the latest etag.\n const latest = await updateDarAsync(dataAccessRequest).catch(() => null)\n if (!latest) return\n submit({\n request: {\n requestId: latest.id,\n requestEtag: latest.etag,\n subjectId,\n subjectType,\n },\n accessRequirementId: String(managedACTAccessRequirement.id),\n })\n }\n\n return (\n <>\n <DialogBaseTitle title={'Request Access'} onCancel={onHide} />\n <DialogContent>\n <Box>\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Submit a signed PDF instead of e-signatures\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n Instead of signing the Data Use Certificate (DUC) using DocuSign,\n you can download the DUC as a PDF and then upload it after it has\n been signed by your collaborators, your project lead, and your\n Signing Official.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 3 }}>\n However, we recommend using e-signatures, as it is usually faster,\n and prevents common errors which can result in your request being\n rejected.\n </Typography>\n\n <Box sx={{ mb: 3 }}>\n <ReviewCollaboratorsAndSigningOfficialAccordion\n accessorChanges={accessorChanges}\n principalInvestigator={pi}\n signingOfficial={so}\n isLoading={isLoadingDar}\n />\n </Box>\n\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Instructions\n </Typography>\n <Stack\n direction={{ xs: 'column', md: 'row' }}\n sx={{ gap: 4, alignItems: 'flex-start' }}\n >\n <Box sx={{ flex: 1 }}>\n <Typography variant={'body1'} sx={{ fontWeight: 700, mb: 1 }}>\n Step 1. Download your Data Use Certificate\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n As a first step, you will need to download a PDF of the Data Use\n Certificate with the names of your Collaborators and Signing\n Official. Make sure the names are correct and complete before\n downloading.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n If needed, you can modify the printed list of collaborators by\n adding or removing names on the paper copy before uploading.\n </Typography>\n {previewError ? (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn&apos;t prepare your DUC for download.\n </strong>\n <br />\n {previewError.reason}\n </Alert>\n ) : (\n <Button\n component=\"a\"\n href={downloadHref ?? undefined}\n target=\"_blank\"\n rel=\"noopener\"\n variant={'outlined'}\n disabled={isDownloadDisabled}\n endIcon={<IconSvg icon={'download'} wrap={false} />}\n >\n Download DUC for Signatures\n </Button>\n )}\n </Box>\n <Box sx={{ flex: 1 }}>\n <Typography variant={'body1'} sx={{ fontWeight: 700, mb: 1 }}>\n Step 2. Fill out and upload a Data Use Certificate\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n You must download and fill out a Data Use Certificate (DUC). Be\n sure to upload the completed DUC below.\n </Typography>\n <Typography\n variant={'body1'}\n component={'ol'}\n sx={{ ...longFieldLabelSx, mb: 2, pl: 3 }}\n >\n <li>Download the DUC document.</li>\n <li>\n Fill out the DUC, following the instructions in the PDF.\n </li>\n <li>\n Upload the completed certificate using the button below:\n </li>\n </Typography>\n {isLoadingDar ? (\n <Skeleton variant={'rectangular'} width={200} height={36} />\n ) : (\n <UploadDocumentField\n id={'signed-duc'}\n documentName={'Signed DUC'}\n isLoading={isUpdating || isVoidingSignature}\n uploadCallback={resp => {\n handleUpload(resp)\n }}\n fileHandleAssociations={signedDucFileHandleAssociations}\n />\n )}\n </Box>\n </Stack>\n\n {updateDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t save your change.</strong>\n <br />\n {updateDarError}\n </Alert>\n )}\n {submitDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t submit your request.</strong>\n <br />\n {submitDarError}\n </Alert>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant={'outlined'} onClick={onBackClicked}>\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }} />\n <Button\n variant={'contained'}\n disabled={isSubmitDisabled}\n loading={isSubmitting}\n onClick={() => {\n handleSubmit()\n }}\n >\n Submit Request\n </Button>\n </DialogActions>\n </>\n )\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { useEffect as u, useRef as te, useState as d } from "react";
10
10
  import { Alert as f, Box as p, Button as m, DialogActions as ne, DialogContent as h, TextField as g, Typography as _ } from "@mui/material";
11
11
  import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
12
12
  import x from "lodash-es/isEmpty";
13
- import { InfoTwoTone as S } from "@mui/icons-material";
13
+ import S from "@mui/icons-material/InfoTwoTone";
14
14
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.tsx
15
15
  var C = 50, w = 750;
16
16
  function T(_) {
@@ -1 +1 @@
1
- {"version":3,"file":"ResearchProjectForm.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetResearchProject,\n useGetUserProfile,\n useUpdateDataAccessRequest,\n useUpdateResearchProject,\n} from '@/synapse-queries'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ManagedACTAccessRequirement,\n PrincipalInvestigator,\n Renewal,\n Request,\n ResearchProject,\n} from '@sage-bionetworks/synapse-types'\nimport isEmpty from 'lodash-es/isEmpty'\nimport { FormEvent, useEffect, useRef, useState } from 'react'\nimport HelpPopover from '../../../HelpPopover'\nimport { DialogBaseTitle } from '../../../DialogBase'\nimport TextFieldWithWordLimit, {\n getWordCount,\n} from '../../../TextField/TextFieldWithWordLimit'\nimport { AlertProps } from '../DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm'\nimport ManagedACTAccessRequirementFormWikiWrapper from '../ManagedACTAccessRequirementFormWikiWrapper'\nimport PrincipalInvestigatorFields from '../PrincipalInvestigatorFields'\n\nconst INTENDED_DATA_USE_MIN_WORD_COUNT = 50\nconst INTENDED_DATA_USE_MAX_WORD_COUNT = 750 // SWC-7526\n\nexport type ResearchProjectFormProps = {\n /* The access requirement to which the research project refers */\n managedACTAccessRequirement: ManagedACTAccessRequirement\n onSave?: (researchProject: ResearchProject) => void\n onHide?: () => void\n}\n\n/**\n * Step 1 of the Data Access Request/Renewal flow prompts the user to provide information about their ResearchProject.\n */\nexport default function ResearchProjectForm(props: ResearchProjectFormProps) {\n const { onSave, managedACTAccessRequirement, onHide } = props\n const isEDucEnabled = Boolean(managedACTAccessRequirement.eDucTemplateId)\n const [projectLead, setProjectLead] = useState<string>('')\n const [institution, setInstitution] = useState<string>('')\n const [intendedDataUseStatement, setIntendedDataUseStatement] =\n useState<string>('')\n const [piUserId, setPiUserId] = useState<string | null>(null)\n const [piEmail, setPiEmail] = useState<string>('')\n const [alert, setAlert] = useState<AlertProps | undefined>()\n\n const [showConfirmationScreen, setShowConfirmationScreen] = useState(false)\n\n const { data: existingResearchProject, isLoading: isLoadingInitialData } =\n useGetResearchProject(String(managedACTAccessRequirement.id), {\n // Infinite staleTime ensures this won't be refetched unless explicitly invalidated by the mutation\n staleTime: Infinity,\n })\n\n const {\n data: existingDataAccessRequest,\n isLoading: isLoadingDataAccessRequest,\n } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n enabled: isEDucEnabled,\n staleTime: Infinity,\n })\n const existingDarRef = useRef(existingDataAccessRequest)\n useEffect(() => {\n existingDarRef.current = existingDataAccessRequest\n }, [existingDataAccessRequest])\n\n // Populate the form with existing data if it exists\n useEffect(() => {\n if (isEmpty(projectLead) && existingResearchProject?.projectLead) {\n setProjectLead(existingResearchProject?.projectLead)\n }\n if (isEmpty(institution) && existingResearchProject?.institution) {\n setInstitution(existingResearchProject?.institution)\n }\n if (\n isEmpty(intendedDataUseStatement) &&\n existingResearchProject?.intendedDataUseStatement\n ) {\n setIntendedDataUseStatement(\n existingResearchProject?.intendedDataUseStatement,\n )\n }\n }, [\n existingResearchProject?.institution,\n existingResearchProject?.intendedDataUseStatement,\n existingResearchProject?.projectLead,\n // PORTALS-3774: initialize from existingResearchProject, but do not reset institution,\n // projectLead, or intendedDataUseStatement if they have been modified\n ])\n\n // Prefill eDUC-only PI fields from any previously-saved DAR values.\n useEffect(() => {\n if (!isEDucEnabled || !existingDataAccessRequest) return\n const pi = existingDataAccessRequest.principalInvestigator\n if (piUserId === null && pi?.userId) {\n setPiUserId(pi.userId)\n }\n if (isEmpty(piEmail) && pi?.institutionalEmail) {\n setPiEmail(pi.institutionalEmail)\n }\n // PORTALS-4375: initialize from existingDataAccessRequest, but do not reset\n // fields once the user has interacted with them.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isEDucEnabled,\n existingDataAccessRequest?.principalInvestigator?.userId,\n existingDataAccessRequest?.principalInvestigator?.institutionalEmail,\n ])\n\n const { data: piUserProfile } = useGetUserProfile(piUserId ?? '', {\n enabled: Boolean(piUserId),\n })\n\n useEffect(() => {\n if (!piUserProfile || !isEmpty(projectLead)) return\n const fullName = [piUserProfile.firstName, piUserProfile.lastName]\n .filter(Boolean)\n .join(' ')\n .trim()\n if (fullName) {\n setProjectLead(fullName)\n }\n // Only populate when projectLead is empty; do not overwrite user edits.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [piUserProfile])\n\n const { mutateAsync: updateResearchProject, isPending: updateIsPending } =\n useUpdateResearchProject({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating research project data: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const {\n mutateAsync: updateDataAccessRequest,\n isPending: updateDarIsPending,\n } = useUpdateDataAccessRequest({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating data access request: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const isLoading =\n isLoadingInitialData ||\n (isEDucEnabled && isLoadingDataAccessRequest) ||\n updateIsPending ||\n updateDarIsPending\n\n const getErrorMessage = (reason: string = '') => {\n return (\n <>\n <strong>Unable to update research project data.</strong>\n <br />\n {reason}\n </>\n )\n }\n\n const handleSubmit = async (e: FormEvent<HTMLElement>) => {\n e.preventDefault()\n if (!showConfirmationScreen) {\n setShowConfirmationScreen(true)\n return\n }\n let updatedResearchProject: ResearchProject\n try {\n updatedResearchProject = await updateResearchProject({\n ...existingResearchProject,\n accessRequirementId: String(managedACTAccessRequirement.id),\n institution: institution,\n projectLead: projectLead,\n intendedDataUseStatement: intendedDataUseStatement || undefined,\n })\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n if (isEDucEnabled && existingDarRef.current) {\n const existingDar = existingDarRef.current\n const nextPi: PrincipalInvestigator = {\n ...existingDar.principalInvestigator,\n userId: piUserId ?? undefined,\n name: projectLead || undefined,\n institutionalEmail: piEmail || undefined,\n }\n try {\n await updateDataAccessRequest({\n ...existingDar,\n // The DAR is fetched before the ResearchProject exists, so it may not have an id yet\n researchProjectId:\n existingDar.researchProjectId ?? updatedResearchProject.id,\n institution: institution,\n principalInvestigator: nextPi,\n } as Request | Renewal)\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n }\n if (onSave) {\n onSave(updatedResearchProject)\n }\n }\n\n const formIsValid =\n projectLead &&\n institution &&\n (!isEDucEnabled || (piUserId && piEmail)) &&\n (!managedACTAccessRequirement.isIDURequired ||\n (intendedDataUseStatement &&\n getWordCount(intendedDataUseStatement) >=\n INTENDED_DATA_USE_MIN_WORD_COUNT &&\n getWordCount(intendedDataUseStatement) <=\n INTENDED_DATA_USE_MAX_WORD_COUNT))\n\n return (\n <>\n <DialogBaseTitle title={'Request Access'} onCancel={() => onHide?.()} />\n {showConfirmationScreen && (\n <ConfirmationScreenContent\n isIDURequired={managedACTAccessRequirement.isIDURequired}\n />\n )}\n {!showConfirmationScreen && (\n <DialogContent>\n {alert && (\n <Alert severity={alert.key} sx={{ mb: 2 }}>\n {alert.message}\n </Alert>\n )}\n <ManagedACTAccessRequirementFormWikiWrapper\n accessRequirement={managedACTAccessRequirement}\n >\n <Box\n component={'form'}\n onSubmit={e => {\n void handleSubmit(e)\n }}\n sx={{\n '& .MuiTextField-root': {\n marginBottom: '20px',\n },\n }}\n >\n <TextField\n id={'project-lead'}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>First and last names of your Project Lead or PI</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nProvide the name of one person who serves as the project leader or PI.`}\n />\n </Box>\n }\n placeholder={\n 'First and last name of individual leading the project, ex: Jane Smith'\n }\n fullWidth\n disabled={isLoading}\n type=\"text\"\n value={projectLead}\n required\n onChange={e => setProjectLead(e.target.value)}\n slotProps={{\n inputLabel: {\n // allows floating the help popover all the way to the right\n sx: { width: '100%' },\n },\n }}\n />\n {isEDucEnabled && (\n <PrincipalInvestigatorFields\n userId={piUserId}\n email={piEmail}\n disabled={isLoading}\n onUserIdChange={setPiUserId}\n onEmailChange={setPiEmail}\n />\n )}\n\n <TextField\n id={'institution'}\n label={'Your Institution'}\n placeholder={\n 'Full, unabbreviated name of the institution you are affiliated with'\n }\n fullWidth\n type=\"text\"\n disabled={isLoading}\n value={institution}\n required\n onChange={e => setInstitution(e.target.value)}\n />\n\n {managedACTAccessRequirement.isIDURequired && (\n <TextFieldWithWordLimit\n id={'data-use'}\n minWords={INTENDED_DATA_USE_MIN_WORD_COUNT}\n maxWords={INTENDED_DATA_USE_MAX_WORD_COUNT}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>Intended Data Use (IDU)</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nCheck the instructions for data access for information on completing the IDU statement.`}\n />\n </Box>\n }\n helperText={\n managedACTAccessRequirement.isIDUPublic\n ? 'This will be visible to the public'\n : undefined\n }\n placeholder={\n 'Outline the objectives of your proposed research involving this data, and your study design and analysis plan.'\n }\n fullWidth\n required\n multiline\n rows={9}\n disabled={isLoading}\n value={intendedDataUseStatement}\n onChange={e => setIntendedDataUseStatement(e.target.value)}\n />\n )}\n </Box>\n </ManagedACTAccessRequirementFormWikiWrapper>\n </DialogContent>\n )}\n <DialogActions>\n {showConfirmationScreen && (\n <>\n <Button\n variant={'outlined'}\n onClick={() => {\n setShowConfirmationScreen(false)\n }}\n >\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }}>{/* spacer */}</Box>\n </>\n )}\n <Button variant=\"outlined\" disabled={isLoading} onClick={onHide}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n type=\"submit\"\n disabled={isLoading || !formIsValid}\n onClick={e => {\n void handleSubmit(e)\n }}\n >\n {updateIsPending ? 'Saving...' : 'Save and Continue'}\n </Button>\n </DialogActions>\n </>\n )\n}\n\nfunction ConfirmationScreenContent(props: { isIDURequired: boolean }) {\n const { isIDURequired } = props\n return (\n <DialogContent>\n <Typography\n variant=\"body1\"\n gutterBottom\n sx={{\n fontWeight: 700,\n }}\n >\n Double-check your submission before continuing!\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Here are some common reasons a request is rejected:\n </Typography>\n <Box component=\"ul\">\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is your <i>Project Lead</i> a full name (first and last)?\n </Typography>\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is the <i>Institution</i> name you provided unabbreviated and\n verifiable? You must give the full name of your institution, so we can\n look it up.\n </Typography>\n {isIDURequired && (\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Did you provide clear <i>study objectives</i> and your{' '}\n <i>study design</i> and <i>analysis plan</i> in the IDU section?\n </Typography>\n )}\n </Box>\n <Typography variant=\"body1\" gutterBottom>\n Please take a minute to make sure your submission is correct. If your\n submission is rejected, you’ll have to resubmit after a few days!\n </Typography>\n </DialogContent>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResearchProjectForm.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetResearchProject,\n useGetUserProfile,\n useUpdateDataAccessRequest,\n useUpdateResearchProject,\n} from '@/synapse-queries'\nimport InfoTwoTone from '@mui/icons-material/InfoTwoTone'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ManagedACTAccessRequirement,\n PrincipalInvestigator,\n Renewal,\n Request,\n ResearchProject,\n} from '@sage-bionetworks/synapse-types'\nimport isEmpty from 'lodash-es/isEmpty'\nimport { FormEvent, useEffect, useRef, useState } from 'react'\nimport HelpPopover from '../../../HelpPopover'\nimport { DialogBaseTitle } from '../../../DialogBase'\nimport TextFieldWithWordLimit, {\n getWordCount,\n} from '../../../TextField/TextFieldWithWordLimit'\nimport { AlertProps } from '../DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm'\nimport ManagedACTAccessRequirementFormWikiWrapper from '../ManagedACTAccessRequirementFormWikiWrapper'\nimport PrincipalInvestigatorFields from '../PrincipalInvestigatorFields'\n\nconst INTENDED_DATA_USE_MIN_WORD_COUNT = 50\nconst INTENDED_DATA_USE_MAX_WORD_COUNT = 750 // SWC-7526\n\nexport type ResearchProjectFormProps = {\n /* The access requirement to which the research project refers */\n managedACTAccessRequirement: ManagedACTAccessRequirement\n onSave?: (researchProject: ResearchProject) => void\n onHide?: () => void\n}\n\n/**\n * Step 1 of the Data Access Request/Renewal flow prompts the user to provide information about their ResearchProject.\n */\nexport default function ResearchProjectForm(props: ResearchProjectFormProps) {\n const { onSave, managedACTAccessRequirement, onHide } = props\n const isEDucEnabled = Boolean(managedACTAccessRequirement.eDucTemplateId)\n const [projectLead, setProjectLead] = useState<string>('')\n const [institution, setInstitution] = useState<string>('')\n const [intendedDataUseStatement, setIntendedDataUseStatement] =\n useState<string>('')\n const [piUserId, setPiUserId] = useState<string | null>(null)\n const [piEmail, setPiEmail] = useState<string>('')\n const [alert, setAlert] = useState<AlertProps | undefined>()\n\n const [showConfirmationScreen, setShowConfirmationScreen] = useState(false)\n\n const { data: existingResearchProject, isLoading: isLoadingInitialData } =\n useGetResearchProject(String(managedACTAccessRequirement.id), {\n // Infinite staleTime ensures this won't be refetched unless explicitly invalidated by the mutation\n staleTime: Infinity,\n })\n\n const {\n data: existingDataAccessRequest,\n isLoading: isLoadingDataAccessRequest,\n } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n enabled: isEDucEnabled,\n staleTime: Infinity,\n })\n const existingDarRef = useRef(existingDataAccessRequest)\n useEffect(() => {\n existingDarRef.current = existingDataAccessRequest\n }, [existingDataAccessRequest])\n\n // Populate the form with existing data if it exists\n useEffect(() => {\n if (isEmpty(projectLead) && existingResearchProject?.projectLead) {\n setProjectLead(existingResearchProject?.projectLead)\n }\n if (isEmpty(institution) && existingResearchProject?.institution) {\n setInstitution(existingResearchProject?.institution)\n }\n if (\n isEmpty(intendedDataUseStatement) &&\n existingResearchProject?.intendedDataUseStatement\n ) {\n setIntendedDataUseStatement(\n existingResearchProject?.intendedDataUseStatement,\n )\n }\n }, [\n existingResearchProject?.institution,\n existingResearchProject?.intendedDataUseStatement,\n existingResearchProject?.projectLead,\n // PORTALS-3774: initialize from existingResearchProject, but do not reset institution,\n // projectLead, or intendedDataUseStatement if they have been modified\n ])\n\n // Prefill eDUC-only PI fields from any previously-saved DAR values.\n useEffect(() => {\n if (!isEDucEnabled || !existingDataAccessRequest) return\n const pi = existingDataAccessRequest.principalInvestigator\n if (piUserId === null && pi?.userId) {\n setPiUserId(pi.userId)\n }\n if (isEmpty(piEmail) && pi?.institutionalEmail) {\n setPiEmail(pi.institutionalEmail)\n }\n // PORTALS-4375: initialize from existingDataAccessRequest, but do not reset\n // fields once the user has interacted with them.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isEDucEnabled,\n existingDataAccessRequest?.principalInvestigator?.userId,\n existingDataAccessRequest?.principalInvestigator?.institutionalEmail,\n ])\n\n const { data: piUserProfile } = useGetUserProfile(piUserId ?? '', {\n enabled: Boolean(piUserId),\n })\n\n useEffect(() => {\n if (!piUserProfile || !isEmpty(projectLead)) return\n const fullName = [piUserProfile.firstName, piUserProfile.lastName]\n .filter(Boolean)\n .join(' ')\n .trim()\n if (fullName) {\n setProjectLead(fullName)\n }\n // Only populate when projectLead is empty; do not overwrite user edits.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [piUserProfile])\n\n const { mutateAsync: updateResearchProject, isPending: updateIsPending } =\n useUpdateResearchProject({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating research project data: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const {\n mutateAsync: updateDataAccessRequest,\n isPending: updateDarIsPending,\n } = useUpdateDataAccessRequest({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating data access request: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const isLoading =\n isLoadingInitialData ||\n (isEDucEnabled && isLoadingDataAccessRequest) ||\n updateIsPending ||\n updateDarIsPending\n\n const getErrorMessage = (reason: string = '') => {\n return (\n <>\n <strong>Unable to update research project data.</strong>\n <br />\n {reason}\n </>\n )\n }\n\n const handleSubmit = async (e: FormEvent<HTMLElement>) => {\n e.preventDefault()\n if (!showConfirmationScreen) {\n setShowConfirmationScreen(true)\n return\n }\n let updatedResearchProject: ResearchProject\n try {\n updatedResearchProject = await updateResearchProject({\n ...existingResearchProject,\n accessRequirementId: String(managedACTAccessRequirement.id),\n institution: institution,\n projectLead: projectLead,\n intendedDataUseStatement: intendedDataUseStatement || undefined,\n })\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n if (isEDucEnabled && existingDarRef.current) {\n const existingDar = existingDarRef.current\n const nextPi: PrincipalInvestigator = {\n ...existingDar.principalInvestigator,\n userId: piUserId ?? undefined,\n name: projectLead || undefined,\n institutionalEmail: piEmail || undefined,\n }\n try {\n await updateDataAccessRequest({\n ...existingDar,\n // The DAR is fetched before the ResearchProject exists, so it may not have an id yet\n researchProjectId:\n existingDar.researchProjectId ?? updatedResearchProject.id,\n institution: institution,\n principalInvestigator: nextPi,\n } as Request | Renewal)\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n }\n if (onSave) {\n onSave(updatedResearchProject)\n }\n }\n\n const formIsValid =\n projectLead &&\n institution &&\n (!isEDucEnabled || (piUserId && piEmail)) &&\n (!managedACTAccessRequirement.isIDURequired ||\n (intendedDataUseStatement &&\n getWordCount(intendedDataUseStatement) >=\n INTENDED_DATA_USE_MIN_WORD_COUNT &&\n getWordCount(intendedDataUseStatement) <=\n INTENDED_DATA_USE_MAX_WORD_COUNT))\n\n return (\n <>\n <DialogBaseTitle title={'Request Access'} onCancel={() => onHide?.()} />\n {showConfirmationScreen && (\n <ConfirmationScreenContent\n isIDURequired={managedACTAccessRequirement.isIDURequired}\n />\n )}\n {!showConfirmationScreen && (\n <DialogContent>\n {alert && (\n <Alert severity={alert.key} sx={{ mb: 2 }}>\n {alert.message}\n </Alert>\n )}\n <ManagedACTAccessRequirementFormWikiWrapper\n accessRequirement={managedACTAccessRequirement}\n >\n <Box\n component={'form'}\n onSubmit={e => {\n void handleSubmit(e)\n }}\n sx={{\n '& .MuiTextField-root': {\n marginBottom: '20px',\n },\n }}\n >\n <TextField\n id={'project-lead'}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>First and last names of your Project Lead or PI</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nProvide the name of one person who serves as the project leader or PI.`}\n />\n </Box>\n }\n placeholder={\n 'First and last name of individual leading the project, ex: Jane Smith'\n }\n fullWidth\n disabled={isLoading}\n type=\"text\"\n value={projectLead}\n required\n onChange={e => setProjectLead(e.target.value)}\n slotProps={{\n inputLabel: {\n // allows floating the help popover all the way to the right\n sx: { width: '100%' },\n },\n }}\n />\n {isEDucEnabled && (\n <PrincipalInvestigatorFields\n userId={piUserId}\n email={piEmail}\n disabled={isLoading}\n onUserIdChange={setPiUserId}\n onEmailChange={setPiEmail}\n />\n )}\n\n <TextField\n id={'institution'}\n label={'Your Institution'}\n placeholder={\n 'Full, unabbreviated name of the institution you are affiliated with'\n }\n fullWidth\n type=\"text\"\n disabled={isLoading}\n value={institution}\n required\n onChange={e => setInstitution(e.target.value)}\n />\n\n {managedACTAccessRequirement.isIDURequired && (\n <TextFieldWithWordLimit\n id={'data-use'}\n minWords={INTENDED_DATA_USE_MIN_WORD_COUNT}\n maxWords={INTENDED_DATA_USE_MAX_WORD_COUNT}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>Intended Data Use (IDU)</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nCheck the instructions for data access for information on completing the IDU statement.`}\n />\n </Box>\n }\n helperText={\n managedACTAccessRequirement.isIDUPublic\n ? 'This will be visible to the public'\n : undefined\n }\n placeholder={\n 'Outline the objectives of your proposed research involving this data, and your study design and analysis plan.'\n }\n fullWidth\n required\n multiline\n rows={9}\n disabled={isLoading}\n value={intendedDataUseStatement}\n onChange={e => setIntendedDataUseStatement(e.target.value)}\n />\n )}\n </Box>\n </ManagedACTAccessRequirementFormWikiWrapper>\n </DialogContent>\n )}\n <DialogActions>\n {showConfirmationScreen && (\n <>\n <Button\n variant={'outlined'}\n onClick={() => {\n setShowConfirmationScreen(false)\n }}\n >\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }}>{/* spacer */}</Box>\n </>\n )}\n <Button variant=\"outlined\" disabled={isLoading} onClick={onHide}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n type=\"submit\"\n disabled={isLoading || !formIsValid}\n onClick={e => {\n void handleSubmit(e)\n }}\n >\n {updateIsPending ? 'Saving...' : 'Save and Continue'}\n </Button>\n </DialogActions>\n </>\n )\n}\n\nfunction ConfirmationScreenContent(props: { isIDURequired: boolean }) {\n const { isIDURequired } = props\n return (\n <DialogContent>\n <Typography\n variant=\"body1\"\n gutterBottom\n sx={{\n fontWeight: 700,\n }}\n >\n Double-check your submission before continuing!\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Here are some common reasons a request is rejected:\n </Typography>\n <Box component=\"ul\">\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is your <i>Project Lead</i> a full name (first and last)?\n </Typography>\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is the <i>Institution</i> name you provided unabbreviated and\n verifiable? You must give the full name of your institution, so we can\n look it up.\n </Typography>\n {isIDURequired && (\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Did you provide clear <i>study objectives</i> and your{' '}\n <i>study design</i> and <i>analysis plan</i> in the IDU section?\n </Typography>\n )}\n </Box>\n <Typography variant=\"body1\" gutterBottom>\n Please take a minute to make sure your submission is correct. If your\n submission is rejected, you’ll have to resubmit after a few days!\n </Typography>\n </DialogContent>\n )\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { UserBadge as e } from "../../UserCard/UserBadge.js";
2
2
  import { longFieldLabelSx as t } from "./styles.js";
3
3
  import { Accordion as n, AccordionDetails as r, AccordionSummary as i, Box as a, Stack as o, Typography as s } from "@mui/material";
4
4
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
- import { ExpandMore as u } from "@mui/icons-material";
5
+ import u from "@mui/icons-material/ExpandMore";
6
6
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.tsx
7
7
  function d(d) {
8
8
  let { accessorChanges: f, principalInvestigator: p, signingOfficial: m, isLoading: h = !1 } = d;
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewCollaboratorsAndSigningOfficialAccordion.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.tsx"],"sourcesContent":["import { ExpandMore } from '@mui/icons-material'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessorChange,\n PrincipalInvestigator,\n SigningOfficial,\n} from '@sage-bionetworks/synapse-types'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport { longFieldLabelSx } from './styles'\n\nexport type ReviewCollaboratorsAndSigningOfficialAccordionProps = {\n accessorChanges: AccessorChange[]\n principalInvestigator?: PrincipalInvestigator\n signingOfficial?: SigningOfficial\n isLoading?: boolean\n}\n\n/**\n * Collapsible summary of the DAR's collaborators, PI, and signing official.\n * Shared by ReviewDucStep and ManualUploadDucStep.\n */\nexport function ReviewCollaboratorsAndSigningOfficialAccordion(\n props: ReviewCollaboratorsAndSigningOfficialAccordionProps,\n) {\n const {\n accessorChanges,\n principalInvestigator: pi,\n signingOfficial: so,\n isLoading = false,\n } = props\n\n return (\n <Accordion\n defaultExpanded={false}\n disableGutters\n sx={{\n boxShadow: 'none',\n border: '1px solid',\n borderColor: 'grey.300',\n '&:before': { display: 'none' },\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"review-collaborators-so-content\"\n id=\"review-collaborators-so-header\"\n >\n <Typography variant={'headline3'}>\n Review your collaborators &amp; signing official\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your collaborators:\n </Typography>\n <Stack sx={{ mb: 3, gap: 1 }}>\n {accessorChanges.length === 0 && !isLoading && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n No collaborators added.\n </Typography>\n )}\n {accessorChanges.map(ac => (\n <UserBadge\n key={ac.userId}\n userId={ac.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n ))}\n </Stack>\n\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your Project Lead or PI:\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n Your Project Lead or PI will also receive access to the requested\n data.\n </Typography>\n <Box sx={{ mb: 3 }}>\n {pi?.userId && (\n <UserBadge\n userId={pi.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n )}\n {pi?.name && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {pi.name}\n </Typography>\n )}\n {pi?.institutionalEmail && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {pi.institutionalEmail}\n </Typography>\n )}\n </Box>\n\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your signing official:\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n A member of your institution who is NOT part of the study team (i.e.,\n not the Project Lead, not a Data Requester or Collaborator, and not\n the Project Lead or PI).\n </Typography>\n <Box>\n {so?.name && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {so.name}\n </Typography>\n )}\n {so?.institutionalEmail && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {so.institutionalEmail}\n </Typography>\n )}\n </Box>\n </AccordionDetails>\n </Accordion>\n )\n}\n"],"mappings":";;;;;;AA4BA,SAAgB,EACd,GACA;CACA,IAAM,EACJ,oBACA,uBAAuB,GACvB,iBAAiB,GACjB,eAAY,OACV;CAEJ,OACE,kBAAC,GAAD;EACE,iBAAiB;EACjB,gBAAA;EACA,IAAI;GACF,WAAW;GACX,QAAQ;GACR,aAAa;GACb,YAAY,EAAE,SAAS,OAAO;EAChC;YARF,CAUE,kBAAC,GAAD;GACE,YAAY,kBAAC,GAAD,CAAa,CAAA;GACzB,iBAAc;GACd,IAAG;aAEH,kBAAC,GAAD;IAAY,SAAS;cAAa;GAEtB,CAAA;EACI,CAAA,GAClB,kBAAC,GAAD,EAAA,UAAA;GACE,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAO,IAAI;KAAE,IAAI;KAAG,KAAK;IAAE;cAA3B,CACG,EAAgB,WAAW,KAAK,CAAC,KAChC,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;eAAkB;IAExC,CAAA,GAEb,EAAgB,KAAI,MACnB,kBAAC,GAAD;KAEE,QAAQ,EAAG;KACX,sBAAsB;KACtB,aAAa;KACb,cAAc;IACf,GALM,EAAG,MAKT,CACF,CACI;;GAEP,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;KAAE,GAAG;KAAkB,IAAI;IAAE;cAAG;GAGtD,CAAA;GACZ,kBAAC,GAAD;IAAK,IAAI,EAAE,IAAI,EAAE;cAAjB;KACG,GAAI,UACH,kBAAC,GAAD;MACE,QAAQ,EAAG;MACX,sBAAsB;MACtB,aAAa;MACb,cAAc;KACf,CAAA;KAEF,GAAI,QACH,kBAAC,GAAD;MAAY,SAAS;MAAS,IAAI;gBAC/B,EAAG;KACM,CAAA;KAEb,GAAI,sBACH,kBAAC,GAAD;MAAY,SAAS;MAAS,IAAI;gBAC/B,EAAG;KACM,CAAA;IAEX;;GAEL,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;KAAE,GAAG;KAAkB,IAAI;IAAE;cAAG;GAItD,CAAA;GACZ,kBAAC,GAAD,EAAA,UAAA,CACG,GAAI,QACH,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;cAC/B,EAAG;GACM,CAAA,GAEb,GAAI,sBACH,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;cAC/B,EAAG;GACM,CAAA,CAEX,EAAA,CAAA;EACW,EAAA,CAAA,CACT;;AAEf"}
1
+ {"version":3,"file":"ReviewCollaboratorsAndSigningOfficialAccordion.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.tsx"],"sourcesContent":["import ExpandMore from '@mui/icons-material/ExpandMore'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessorChange,\n PrincipalInvestigator,\n SigningOfficial,\n} from '@sage-bionetworks/synapse-types'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport { longFieldLabelSx } from './styles'\n\nexport type ReviewCollaboratorsAndSigningOfficialAccordionProps = {\n accessorChanges: AccessorChange[]\n principalInvestigator?: PrincipalInvestigator\n signingOfficial?: SigningOfficial\n isLoading?: boolean\n}\n\n/**\n * Collapsible summary of the DAR's collaborators, PI, and signing official.\n * Shared by ReviewDucStep and ManualUploadDucStep.\n */\nexport function ReviewCollaboratorsAndSigningOfficialAccordion(\n props: ReviewCollaboratorsAndSigningOfficialAccordionProps,\n) {\n const {\n accessorChanges,\n principalInvestigator: pi,\n signingOfficial: so,\n isLoading = false,\n } = props\n\n return (\n <Accordion\n defaultExpanded={false}\n disableGutters\n sx={{\n boxShadow: 'none',\n border: '1px solid',\n borderColor: 'grey.300',\n '&:before': { display: 'none' },\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"review-collaborators-so-content\"\n id=\"review-collaborators-so-header\"\n >\n <Typography variant={'headline3'}>\n Review your collaborators &amp; signing official\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your collaborators:\n </Typography>\n <Stack sx={{ mb: 3, gap: 1 }}>\n {accessorChanges.length === 0 && !isLoading && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n No collaborators added.\n </Typography>\n )}\n {accessorChanges.map(ac => (\n <UserBadge\n key={ac.userId}\n userId={ac.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n ))}\n </Stack>\n\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your Project Lead or PI:\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n Your Project Lead or PI will also receive access to the requested\n data.\n </Typography>\n <Box sx={{ mb: 3 }}>\n {pi?.userId && (\n <UserBadge\n userId={pi.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n )}\n {pi?.name && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {pi.name}\n </Typography>\n )}\n {pi?.institutionalEmail && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {pi.institutionalEmail}\n </Typography>\n )}\n </Box>\n\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your signing official:\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n A member of your institution who is NOT part of the study team (i.e.,\n not the Project Lead, not a Data Requester or Collaborator, and not\n the Project Lead or PI).\n </Typography>\n <Box>\n {so?.name && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {so.name}\n </Typography>\n )}\n {so?.institutionalEmail && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {so.institutionalEmail}\n </Typography>\n )}\n </Box>\n </AccordionDetails>\n </Accordion>\n )\n}\n"],"mappings":";;;;;;AA4BA,SAAgB,EACd,GACA;CACA,IAAM,EACJ,oBACA,uBAAuB,GACvB,iBAAiB,GACjB,eAAY,OACV;CAEJ,OACE,kBAAC,GAAD;EACE,iBAAiB;EACjB,gBAAA;EACA,IAAI;GACF,WAAW;GACX,QAAQ;GACR,aAAa;GACb,YAAY,EAAE,SAAS,OAAO;EAChC;YARF,CAUE,kBAAC,GAAD;GACE,YAAY,kBAAC,GAAD,CAAa,CAAA;GACzB,iBAAc;GACd,IAAG;aAEH,kBAAC,GAAD;IAAY,SAAS;cAAa;GAEtB,CAAA;EACI,CAAA,GAClB,kBAAC,GAAD,EAAA,UAAA;GACE,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAO,IAAI;KAAE,IAAI;KAAG,KAAK;IAAE;cAA3B,CACG,EAAgB,WAAW,KAAK,CAAC,KAChC,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;eAAkB;IAExC,CAAA,GAEb,EAAgB,KAAI,MACnB,kBAAC,GAAD;KAEE,QAAQ,EAAG;KACX,sBAAsB;KACtB,aAAa;KACb,cAAc;IACf,GALM,EAAG,MAKT,CACF,CACI;;GAEP,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;KAAE,GAAG;KAAkB,IAAI;IAAE;cAAG;GAGtD,CAAA;GACZ,kBAAC,GAAD;IAAK,IAAI,EAAE,IAAI,EAAE;cAAjB;KACG,GAAI,UACH,kBAAC,GAAD;MACE,QAAQ,EAAG;MACX,sBAAsB;MACtB,aAAa;MACb,cAAc;KACf,CAAA;KAEF,GAAI,QACH,kBAAC,GAAD;MAAY,SAAS;MAAS,IAAI;gBAC/B,EAAG;KACM,CAAA;KAEb,GAAI,sBACH,kBAAC,GAAD;MAAY,SAAS;MAAS,IAAI;gBAC/B,EAAG;KACM,CAAA;IAEX;;GAEL,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;KAAE,GAAG;KAAkB,IAAI;IAAE;cAAG;GAItD,CAAA;GACZ,kBAAC,GAAD,EAAA,UAAA,CACG,GAAI,QACH,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;cAC/B,EAAG;GACM,CAAA,GAEb,GAAI,sBACH,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;cAC/B,EAAG;GACM,CAAA,CAEX,EAAA,CAAA;EACW,EAAA,CAAA,CACT;;AAEf"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureStatusStep.d.ts","sourceRoot":"","sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx"],"names":[],"mappings":"AAkCA,OAAO,EAEL,sBAAsB,EACvB,MAAM,iCAAiC,CAAA;AAKxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAYlE,MAAM,MAAM,wBAAwB,GAAG;IACrC,2BAA2B,EAAE,4BAA4B,CAAA;IACzD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,sBAAsB,CAAA;IACnC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CA0P1E"}
1
+ {"version":3,"file":"SignatureStatusStep.d.ts","sourceRoot":"","sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx"],"names":[],"mappings":"AAgCA,OAAO,EAEL,sBAAsB,EACvB,MAAM,iCAAiC,CAAA;AAKxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAYlE,MAAM,MAAM,wBAAwB,GAAG;IACrC,2BAA2B,EAAE,4BAA4B,CAAA;IACzD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,sBAAsB,CAAA;IACnC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CA0P1E"}
@@ -12,8 +12,11 @@ import { Alert as u, Box as d, Button as f, DialogActions as p, DialogContent as
12
12
  import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
13
13
  import { FileHandleAssociateType as x } from "@sage-bionetworks/synapse-types";
14
14
  import { EDucSignerStatusStatusEnum as S } from "@sage-bionetworks/synapse-client";
15
- import { CheckCircleOutline as C, HourglassEmpty as w, OpenInNew as T, Refresh as E } from "@mui/icons-material";
16
- import D from "dayjs";
15
+ import C from "dayjs";
16
+ import w from "@mui/icons-material/OpenInNew";
17
+ import T from "@mui/icons-material/CheckCircleOutline";
18
+ import E from "@mui/icons-material/HourglassEmpty";
19
+ import D from "@mui/icons-material/Refresh";
17
20
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx
18
21
  var O = {
19
22
  mx: 0,
@@ -24,7 +27,7 @@ var O = {
24
27
  color: "grey.700"
25
28
  };
26
29
  function k(e) {
27
- let { managedACTAccessRequirement: s, subjectId: S, subjectType: D, onHide: O, onBackClicked: k, onSubmissionCreated: A, viewDucHrefOverride: j } = e, { data: M, isLoading: ae } = r(String(s.id), {
30
+ let { managedACTAccessRequirement: s, subjectId: S, subjectType: C, onHide: O, onBackClicked: k, onSubmissionCreated: A, viewDucHrefOverride: j } = e, { data: M, isLoading: ae } = r(String(s.id), {
28
31
  staleTime: Infinity,
29
32
  throwOnError: !0
30
33
  }), N = M?.id ?? "", { data: P, isLoading: F, isRefetching: I, error: L, refetch: R } = te(N, { enabled: !!N }), z = P?.signerStatus ?? [], B = z.filter((e) => e.status === "done").length, V = z.length, H = V > 0 && B === V, U = z.filter((e) => e.status !== "done"), { data: W } = ne(N, { enabled: !!N && !H }), { data: G } = ee(N, { enabled: !!N && !j }), K = j ?? (G?.fileHandleId && N ? t.getPortalFileHandleServletUrl(G.fileHandleId, N, x.DataAccessRequestAttachment) : void 0), { data: q } = a(N, { enabled: !!N && H }), [J, Y] = l(), [X, Z] = l(), { mutateAsync: oe, isPending: se } = i({ onError: (e) => Y(e.reason) }), { mutate: ce, isPending: Q } = n({
@@ -42,7 +45,7 @@ function k(e) {
42
45
  requestId: e.id,
43
46
  requestEtag: e.etag,
44
47
  subjectId: S,
45
- subjectType: D
48
+ subjectType: C
46
49
  },
47
50
  accessRequirementId: String(s.id)
48
51
  });
@@ -102,7 +105,7 @@ function k(e) {
102
105
  mb: 1
103
106
  },
104
107
  children: [
105
- H ? /* @__PURE__ */ y(C, { color: "success" }) : /* @__PURE__ */ y(w, { sx: { color: "grey.700" } }),
108
+ H ? /* @__PURE__ */ y(T, { color: "success" }) : /* @__PURE__ */ y(E, { sx: { color: "grey.700" } }),
106
109
  /* @__PURE__ */ y(_, {
107
110
  variant: "body1",
108
111
  sx: { fontWeight: 700 },
@@ -118,7 +121,7 @@ function k(e) {
118
121
  alignItems: "center",
119
122
  gap: .5
120
123
  },
121
- children: ["View DUC", /* @__PURE__ */ y(T, { fontSize: "small" })]
124
+ children: ["View DUC", /* @__PURE__ */ y(w, { fontSize: "small" })]
122
125
  })
123
126
  ]
124
127
  }),
@@ -137,7 +140,7 @@ function k(e) {
137
140
  })] }),
138
141
  /* @__PURE__ */ y(f, {
139
142
  variant: "outlined",
140
- startIcon: /* @__PURE__ */ y(E, {}),
143
+ startIcon: /* @__PURE__ */ y(D, {}),
141
144
  loading: I,
142
145
  onClick: () => {
143
146
  R();
@@ -184,7 +187,7 @@ function k(e) {
184
187
  ] });
185
188
  }
186
189
  function A(e) {
187
- return !e.status || e.status === S.pending || e.status === S.done ? "" : e.status === S.declined && e.declinedOn ? ` (declined ${s(D(e.declinedOn))})` : ` (${e.status})`;
190
+ return !e.status || e.status === S.pending || e.status === S.done ? "" : e.status === S.declined && e.declinedOn ? ` (declined ${s(C(e.declinedOn))})` : ` (${e.status})`;
188
191
  }
189
192
  function ie(t) {
190
193
  let { signer: n } = t, r = n.name ?? "Unnamed signer";
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureStatusStep.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetDataAccessRequestPreview,\n useGetDataAccessRequestSignatureStatus,\n useGetDataAccessRequestSignatureUpdatable,\n useGetDataAccessRequestSignedFileHandleId,\n useSubmitDataAccessRequest,\n useUpdateDataAccessRequest,\n} from '@/synapse-queries'\nimport SynapseClient from '@/synapse-client'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport {\n CheckCircleOutline,\n HourglassEmpty,\n OpenInNew,\n Refresh,\n} from '@mui/icons-material'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n Link,\n Skeleton,\n Stack,\n SxProps,\n Typography,\n} from '@mui/material'\nimport {\n EDucSignerStatus,\n EDucSignerStatusStatusEnum,\n} from '@sage-bionetworks/synapse-client'\nimport {\n FileHandleAssociateType,\n RestrictableObjectType,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport { DialogBaseTitle } from '../../../DialogBase'\nimport { longFieldLabelSx } from '../styles'\nimport { RequestFlowAccessRequirement } from '../requestFlowTypes'\n\n/** Browser defaults indent a blockquote far too much for a nested list item. */\nconst declinedReasonSx: SxProps = {\n mx: 0,\n my: 0.5,\n pl: 1.5,\n borderLeft: '3px solid',\n borderColor: 'grey.300',\n color: 'grey.700',\n}\n\nexport type SignatureStatusStepProps = {\n managedACTAccessRequirement: RequestFlowAccessRequirement\n subjectId: string\n subjectType: RestrictableObjectType\n onHide: () => void\n /**\n * Called when the user clicks the Back button. When omitted, the Back button is hidden —\n * used when the step is reached via direct entry (e.g. a deep-link route) rather than\n * through the wizard flow, so there is no meaningful previous step to return to.\n */\n onBackClicked?: () => void\n onSubmissionCreated: (submissionId: string) => void\n /**\n * Optional href override for the \"View DUC\" link. When set, the preview file handle fetch\n * is skipped and this URL is used directly. Used by stories and tests where the portal\n * servlet is not available.\n */\n viewDucHrefOverride?: string\n}\n\n/**\n * Wizard step shown after the user has routed the eDUC for electronic signature\n * (PORTALS-4380). Polls the DocuSign envelope status, lists the pending signers,\n * and enables submission once every signer has signed.\n */\nexport default function SignatureStatusStep(props: SignatureStatusStepProps) {\n const {\n managedACTAccessRequirement,\n subjectId,\n subjectType,\n onHide,\n onBackClicked,\n onSubmissionCreated,\n viewDucHrefOverride,\n } = props\n\n const { data: dataAccessRequest, isLoading: isLoadingDar } =\n useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n staleTime: Infinity,\n throwOnError: true,\n })\n\n const requestId = dataAccessRequest?.id ?? ''\n\n const {\n data: signatureStatus,\n isLoading: isLoadingStatus,\n isRefetching: isRefetchingStatus,\n error: statusError,\n refetch: refetchStatus,\n } = useGetDataAccessRequestSignatureStatus(requestId, {\n enabled: Boolean(requestId),\n })\n\n const signers: EDucSignerStatus[] = signatureStatus?.signerStatus ?? []\n const collectedCount = signers.filter(s => s.status === 'done').length\n const totalCount = signers.length\n const allCollected = totalCount > 0 && collectedCount === totalCount\n const outstandingSigners = signers.filter(s => s.status !== 'done')\n\n // Whether going Back could still deliver edits to this envelope is the server's call -- it knows\n // every state DocuSign will refuse to correct. Only the copy below depends on it, so a stale or\n // failed answer simply withholds the guidance rather than blocking the step.\n const { data: isEnvelopeUpdatable } =\n useGetDataAccessRequestSignatureUpdatable(requestId, {\n enabled: Boolean(requestId) && !allCollected,\n })\n\n const { data: previewFileHandle } = useGetDataAccessRequestPreview(\n requestId,\n { enabled: Boolean(requestId) && !viewDucHrefOverride },\n )\n const viewDucHref =\n viewDucHrefOverride ??\n (previewFileHandle?.fileHandleId && requestId\n ? SynapseClient.getPortalFileHandleServletUrl(\n previewFileHandle.fileHandleId,\n requestId,\n FileHandleAssociateType.DataAccessRequestAttachment,\n )\n : undefined)\n\n const { data: signedFileHandle } = useGetDataAccessRequestSignedFileHandleId(\n requestId,\n { enabled: Boolean(requestId) && allCollected },\n )\n\n const [updateDarError, setUpdateDarError] = useState<string | undefined>()\n const [submitDarError, setSubmitDarError] = useState<string | undefined>()\n\n const { mutateAsync: updateDarAsync, isPending: isUpdating } =\n useUpdateDataAccessRequest({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutate: submit, isPending: isSubmitting } =\n useSubmitDataAccessRequest({\n onSuccess: submission => onSubmissionCreated(submission.submissionId),\n onError: e => setSubmitDarError(e.reason),\n })\n\n const isSubmitDisabled =\n isLoadingDar ||\n isLoadingStatus ||\n isRefetchingStatus ||\n !dataAccessRequest ||\n !allCollected ||\n !signedFileHandle?.fileHandleId ||\n isUpdating ||\n isSubmitting\n\n const handleSubmit = async () => {\n if (!dataAccessRequest || !signedFileHandle?.fileHandleId) return\n setUpdateDarError(undefined)\n setSubmitDarError(undefined)\n const updated = await updateDarAsync({\n ...dataAccessRequest,\n ducFileHandleId: signedFileHandle.fileHandleId,\n }).catch(() => null)\n if (!updated) return\n submit({\n request: {\n requestId: updated.id,\n requestEtag: updated.etag,\n subjectId,\n subjectType,\n },\n accessRequirementId: String(managedACTAccessRequirement.id),\n })\n }\n\n return (\n <>\n <DialogBaseTitle title={'Request Access'} onCancel={onHide} />\n <DialogContent>\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Sign a Data Use Certificate (DUC)\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n Your DUC has been emailed to your Collaborators. Once all signatures\n (including the Signing Official) have been collected, you can submit\n the Data Access Request.\n </Typography>\n {/* Editing is only worth offering while signatures are still outstanding -- once every\n signer is done the user should simply submit. Withheld until both the status and the\n precheck resolve, so the copy neither appears and then vanishes nor promises that\n existing signatures carry over when the server has already ruled that out. */}\n {onBackClicked &&\n signatureStatus &&\n !allCollected &&\n isEnvelopeUpdatable && (\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 3 }}>\n You can update the list of Collaborators by pressing{' '}\n <strong>Back</strong>. Your changes will be applied to this\n signature request, so anyone who has already signed will not need\n to sign again.\n </Typography>\n )}\n\n {isLoadingStatus && (\n <Skeleton\n variant={'rectangular'}\n width={'100%'}\n height={120}\n data-testid={'SignatureStatusStep-loading'}\n />\n )}\n\n {statusError && (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn&apos;t load the current signature status.\n </strong>\n <br />\n {statusError.reason}\n </Alert>\n )}\n\n {!isLoadingStatus && !statusError && signatureStatus && (\n <>\n <Stack\n direction={'row'}\n sx={{ alignItems: 'center', gap: 1, mb: 1 }}\n >\n {allCollected ? (\n <CheckCircleOutline color={'success'} />\n ) : (\n <HourglassEmpty sx={{ color: 'grey.700' }} />\n )}\n <Typography variant={'body1'} sx={{ fontWeight: 700 }}>\n {allCollected\n ? 'All signatures collected.'\n : `${collectedCount} out of ${totalCount} signatures collected.`}\n </Typography>\n <Box sx={{ flexGrow: 1 }} />\n {viewDucHref && (\n <Link\n href={viewDucHref}\n target={'_blank'}\n rel={'noopener'}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n }}\n >\n View DUC\n <OpenInNew fontSize={'small'} />\n </Link>\n )}\n </Stack>\n\n {outstandingSigners.length > 0 && (\n <>\n <Typography variant={'body1'} sx={{ mb: 1 }}>\n You&apos;re still waiting for signatures from\n </Typography>\n <Box component={'ul'} sx={{ mt: 0, mb: 2, pl: 3 }}>\n {outstandingSigners.map((signer, index) => (\n <li key={signer.userId ?? `${signer.name}-${index}`}>\n <SignerLine signer={signer} />\n </li>\n ))}\n </Box>\n </>\n )}\n\n <Button\n variant={'outlined'}\n startIcon={<Refresh />}\n loading={isRefetchingStatus}\n onClick={() => {\n refetchStatus()\n }}\n >\n Refresh\n </Button>\n </>\n )}\n\n {updateDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t save your change.</strong>\n <br />\n {updateDarError}\n </Alert>\n )}\n {submitDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t submit your request.</strong>\n <br />\n {submitDarError}\n </Alert>\n )}\n </DialogContent>\n <DialogActions>\n {onBackClicked && (\n <Button variant={'outlined'} onClick={onBackClicked}>\n Back\n </Button>\n )}\n <Box sx={{ flexGrow: 1 }} />\n <Button\n variant={'contained'}\n disabled={isSubmitDisabled}\n loading={isSubmitting}\n onClick={() => {\n handleSubmit()\n }}\n >\n Submit\n </Button>\n </DialogActions>\n </>\n )\n}\n\n/**\n * Only surface non-pending problem states inline; pending is implied by the section header. A\n * decline carries a timestamp, which folds into the label so the row doesn't read \"(declined)\"\n * and then repeat itself underneath.\n */\nfunction getSignerStatusLabel(signer: EDucSignerStatus): string {\n if (\n !signer.status ||\n signer.status === EDucSignerStatusStatusEnum.pending ||\n signer.status === EDucSignerStatusStatusEnum.done\n ) {\n return ''\n }\n if (\n signer.status === EDucSignerStatusStatusEnum.declined &&\n signer.declinedOn\n ) {\n return ` (declined ${formatDate(dayjs(signer.declinedOn))})`\n }\n return ` (${signer.status})`\n}\n\nfunction SignerLine(props: { signer: EDucSignerStatus }) {\n const { signer } = props\n const displayName = signer.name ?? 'Unnamed signer'\n const nameNode = signer.userId ? (\n <Link\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Profile:${signer.userId}`}\n target={'_blank'}\n rel={'noopener'}\n >\n {displayName}\n </Link>\n ) : (\n <>{displayName}</>\n )\n return (\n <>\n <Typography variant={'body1'} component={'span'}>\n {nameNode}\n {getSignerStatusLabel(signer)}\n </Typography>\n {/* The reason is the signer's own words, so it is quoted rather than restated as UI copy. */}\n {signer.declinedReason && (\n <Typography\n variant={'body1'}\n component={'blockquote'}\n sx={declinedReasonSx}\n >\n {signer.declinedReason}\n </Typography>\n )}\n </>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SignatureStatusStep.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetDataAccessRequestPreview,\n useGetDataAccessRequestSignatureStatus,\n useGetDataAccessRequestSignatureUpdatable,\n useGetDataAccessRequestSignedFileHandleId,\n useSubmitDataAccessRequest,\n useUpdateDataAccessRequest,\n} from '@/synapse-queries'\nimport SynapseClient from '@/synapse-client'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport CheckCircleOutline from '@mui/icons-material/CheckCircleOutline'\nimport HourglassEmpty from '@mui/icons-material/HourglassEmpty'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport Refresh from '@mui/icons-material/Refresh'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n Link,\n Skeleton,\n Stack,\n SxProps,\n Typography,\n} from '@mui/material'\nimport {\n EDucSignerStatus,\n EDucSignerStatusStatusEnum,\n} from '@sage-bionetworks/synapse-client'\nimport {\n FileHandleAssociateType,\n RestrictableObjectType,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport { DialogBaseTitle } from '../../../DialogBase'\nimport { longFieldLabelSx } from '../styles'\nimport { RequestFlowAccessRequirement } from '../requestFlowTypes'\n\n/** Browser defaults indent a blockquote far too much for a nested list item. */\nconst declinedReasonSx: SxProps = {\n mx: 0,\n my: 0.5,\n pl: 1.5,\n borderLeft: '3px solid',\n borderColor: 'grey.300',\n color: 'grey.700',\n}\n\nexport type SignatureStatusStepProps = {\n managedACTAccessRequirement: RequestFlowAccessRequirement\n subjectId: string\n subjectType: RestrictableObjectType\n onHide: () => void\n /**\n * Called when the user clicks the Back button. When omitted, the Back button is hidden —\n * used when the step is reached via direct entry (e.g. a deep-link route) rather than\n * through the wizard flow, so there is no meaningful previous step to return to.\n */\n onBackClicked?: () => void\n onSubmissionCreated: (submissionId: string) => void\n /**\n * Optional href override for the \"View DUC\" link. When set, the preview file handle fetch\n * is skipped and this URL is used directly. Used by stories and tests where the portal\n * servlet is not available.\n */\n viewDucHrefOverride?: string\n}\n\n/**\n * Wizard step shown after the user has routed the eDUC for electronic signature\n * (PORTALS-4380). Polls the DocuSign envelope status, lists the pending signers,\n * and enables submission once every signer has signed.\n */\nexport default function SignatureStatusStep(props: SignatureStatusStepProps) {\n const {\n managedACTAccessRequirement,\n subjectId,\n subjectType,\n onHide,\n onBackClicked,\n onSubmissionCreated,\n viewDucHrefOverride,\n } = props\n\n const { data: dataAccessRequest, isLoading: isLoadingDar } =\n useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n staleTime: Infinity,\n throwOnError: true,\n })\n\n const requestId = dataAccessRequest?.id ?? ''\n\n const {\n data: signatureStatus,\n isLoading: isLoadingStatus,\n isRefetching: isRefetchingStatus,\n error: statusError,\n refetch: refetchStatus,\n } = useGetDataAccessRequestSignatureStatus(requestId, {\n enabled: Boolean(requestId),\n })\n\n const signers: EDucSignerStatus[] = signatureStatus?.signerStatus ?? []\n const collectedCount = signers.filter(s => s.status === 'done').length\n const totalCount = signers.length\n const allCollected = totalCount > 0 && collectedCount === totalCount\n const outstandingSigners = signers.filter(s => s.status !== 'done')\n\n // Whether going Back could still deliver edits to this envelope is the server's call -- it knows\n // every state DocuSign will refuse to correct. Only the copy below depends on it, so a stale or\n // failed answer simply withholds the guidance rather than blocking the step.\n const { data: isEnvelopeUpdatable } =\n useGetDataAccessRequestSignatureUpdatable(requestId, {\n enabled: Boolean(requestId) && !allCollected,\n })\n\n const { data: previewFileHandle } = useGetDataAccessRequestPreview(\n requestId,\n { enabled: Boolean(requestId) && !viewDucHrefOverride },\n )\n const viewDucHref =\n viewDucHrefOverride ??\n (previewFileHandle?.fileHandleId && requestId\n ? SynapseClient.getPortalFileHandleServletUrl(\n previewFileHandle.fileHandleId,\n requestId,\n FileHandleAssociateType.DataAccessRequestAttachment,\n )\n : undefined)\n\n const { data: signedFileHandle } = useGetDataAccessRequestSignedFileHandleId(\n requestId,\n { enabled: Boolean(requestId) && allCollected },\n )\n\n const [updateDarError, setUpdateDarError] = useState<string | undefined>()\n const [submitDarError, setSubmitDarError] = useState<string | undefined>()\n\n const { mutateAsync: updateDarAsync, isPending: isUpdating } =\n useUpdateDataAccessRequest({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutate: submit, isPending: isSubmitting } =\n useSubmitDataAccessRequest({\n onSuccess: submission => onSubmissionCreated(submission.submissionId),\n onError: e => setSubmitDarError(e.reason),\n })\n\n const isSubmitDisabled =\n isLoadingDar ||\n isLoadingStatus ||\n isRefetchingStatus ||\n !dataAccessRequest ||\n !allCollected ||\n !signedFileHandle?.fileHandleId ||\n isUpdating ||\n isSubmitting\n\n const handleSubmit = async () => {\n if (!dataAccessRequest || !signedFileHandle?.fileHandleId) return\n setUpdateDarError(undefined)\n setSubmitDarError(undefined)\n const updated = await updateDarAsync({\n ...dataAccessRequest,\n ducFileHandleId: signedFileHandle.fileHandleId,\n }).catch(() => null)\n if (!updated) return\n submit({\n request: {\n requestId: updated.id,\n requestEtag: updated.etag,\n subjectId,\n subjectType,\n },\n accessRequirementId: String(managedACTAccessRequirement.id),\n })\n }\n\n return (\n <>\n <DialogBaseTitle title={'Request Access'} onCancel={onHide} />\n <DialogContent>\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Sign a Data Use Certificate (DUC)\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n Your DUC has been emailed to your Collaborators. Once all signatures\n (including the Signing Official) have been collected, you can submit\n the Data Access Request.\n </Typography>\n {/* Editing is only worth offering while signatures are still outstanding -- once every\n signer is done the user should simply submit. Withheld until both the status and the\n precheck resolve, so the copy neither appears and then vanishes nor promises that\n existing signatures carry over when the server has already ruled that out. */}\n {onBackClicked &&\n signatureStatus &&\n !allCollected &&\n isEnvelopeUpdatable && (\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 3 }}>\n You can update the list of Collaborators by pressing{' '}\n <strong>Back</strong>. Your changes will be applied to this\n signature request, so anyone who has already signed will not need\n to sign again.\n </Typography>\n )}\n\n {isLoadingStatus && (\n <Skeleton\n variant={'rectangular'}\n width={'100%'}\n height={120}\n data-testid={'SignatureStatusStep-loading'}\n />\n )}\n\n {statusError && (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn&apos;t load the current signature status.\n </strong>\n <br />\n {statusError.reason}\n </Alert>\n )}\n\n {!isLoadingStatus && !statusError && signatureStatus && (\n <>\n <Stack\n direction={'row'}\n sx={{ alignItems: 'center', gap: 1, mb: 1 }}\n >\n {allCollected ? (\n <CheckCircleOutline color={'success'} />\n ) : (\n <HourglassEmpty sx={{ color: 'grey.700' }} />\n )}\n <Typography variant={'body1'} sx={{ fontWeight: 700 }}>\n {allCollected\n ? 'All signatures collected.'\n : `${collectedCount} out of ${totalCount} signatures collected.`}\n </Typography>\n <Box sx={{ flexGrow: 1 }} />\n {viewDucHref && (\n <Link\n href={viewDucHref}\n target={'_blank'}\n rel={'noopener'}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n }}\n >\n View DUC\n <OpenInNew fontSize={'small'} />\n </Link>\n )}\n </Stack>\n\n {outstandingSigners.length > 0 && (\n <>\n <Typography variant={'body1'} sx={{ mb: 1 }}>\n You&apos;re still waiting for signatures from\n </Typography>\n <Box component={'ul'} sx={{ mt: 0, mb: 2, pl: 3 }}>\n {outstandingSigners.map((signer, index) => (\n <li key={signer.userId ?? `${signer.name}-${index}`}>\n <SignerLine signer={signer} />\n </li>\n ))}\n </Box>\n </>\n )}\n\n <Button\n variant={'outlined'}\n startIcon={<Refresh />}\n loading={isRefetchingStatus}\n onClick={() => {\n refetchStatus()\n }}\n >\n Refresh\n </Button>\n </>\n )}\n\n {updateDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t save your change.</strong>\n <br />\n {updateDarError}\n </Alert>\n )}\n {submitDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t submit your request.</strong>\n <br />\n {submitDarError}\n </Alert>\n )}\n </DialogContent>\n <DialogActions>\n {onBackClicked && (\n <Button variant={'outlined'} onClick={onBackClicked}>\n Back\n </Button>\n )}\n <Box sx={{ flexGrow: 1 }} />\n <Button\n variant={'contained'}\n disabled={isSubmitDisabled}\n loading={isSubmitting}\n onClick={() => {\n handleSubmit()\n }}\n >\n Submit\n </Button>\n </DialogActions>\n </>\n )\n}\n\n/**\n * Only surface non-pending problem states inline; pending is implied by the section header. A\n * decline carries a timestamp, which folds into the label so the row doesn't read \"(declined)\"\n * and then repeat itself underneath.\n */\nfunction getSignerStatusLabel(signer: EDucSignerStatus): string {\n if (\n !signer.status ||\n signer.status === EDucSignerStatusStatusEnum.pending ||\n signer.status === EDucSignerStatusStatusEnum.done\n ) {\n return ''\n }\n if (\n signer.status === EDucSignerStatusStatusEnum.declined &&\n signer.declinedOn\n ) {\n return ` (declined ${formatDate(dayjs(signer.declinedOn))})`\n }\n return ` (${signer.status})`\n}\n\nfunction SignerLine(props: { signer: EDucSignerStatus }) {\n const { signer } = props\n const displayName = signer.name ?? 'Unnamed signer'\n const nameNode = signer.userId ? (\n <Link\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Profile:${signer.userId}`}\n target={'_blank'}\n rel={'noopener'}\n >\n {displayName}\n </Link>\n ) : (\n <>{displayName}</>\n )\n return (\n <>\n <Typography variant={'body1'} component={'span'}>\n {nameNode}\n {getSignerStatusLabel(signer)}\n </Typography>\n {/* The reason is the signer's own words, so it is quoted rather than restated as UI copy. */}\n {signer.declinedReason && (\n <Typography\n variant={'body1'}\n component={'blockquote'}\n sx={declinedReasonSx}\n >\n {signer.declinedReason}\n </Typography>\n )}\n </>\n )\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types';
2
- import { RequestableAccessRequirement } from '../RequestDataStep';
2
+ import { RequestableAccessRequirement } from '@/utils/types/RequestableAccessRequirement';
3
3
  /**
4
4
  * The part of an access requirement that every data access request step needs. Satisfied by any access requirement
5
5
  * type that supports the data access request flow.
@@ -1 +1 @@
1
- {"version":3,"file":"requestFlowTypes.d.ts","sourceRoot":"","sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AAEjE;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,4BAA4B,EAC5B,IAAI,GAAG,cAAc,CACtB,GACC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAE9D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,4BAA4B,GACtE,OAAO,CACL,IAAI,CACF,2BAA2B,EACzB,yBAAyB,GACzB,4BAA4B,GAC5B,eAAe,GACf,yBAAyB,CAC5B,CACF,CAAA"}
1
+ {"version":3,"file":"requestFlowTypes.d.ts","sourceRoot":"","sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAA;AAEzF;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,4BAA4B,EAC5B,IAAI,GAAG,cAAc,CACtB,GACC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAE9D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,4BAA4B,GACtE,OAAO,CACL,IAAI,CACF,2BAA2B,EACzB,yBAAyB,GACzB,4BAA4B,GAC5B,eAAe,GACf,yBAAyB,CAC5B,CACF,CAAA"}
@@ -1,7 +1,4 @@
1
- import { AccessRequirement, JsonSchemaAccessRequirement, ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types';
2
- /** The access requirement types that a user can request access to through the request wizard */
3
- export type RequestableAccessRequirement = ManagedACTAccessRequirement | JsonSchemaAccessRequirement;
4
- export declare function isRequestableAccessRequirement(accessRequirement: AccessRequirement): accessRequirement is RequestableAccessRequirement;
1
+ import { RequestableAccessRequirement } from '@/utils/types/RequestableAccessRequirement';
5
2
  /**
6
3
  * Represents a distinct screen in the wizard used to request access to a {@link RequestableAccessRequirement}
7
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RequestDataStep.d.ts","sourceRoot":"","sources":["../../../src/components/AccessRequirementList/RequestDataStep.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,2BAA2B,EAE3B,2BAA2B,EAC5B,MAAM,iCAAiC,CAAA;AAExC,gGAAgG;AAChG,MAAM,MAAM,4BAA4B,GACpC,2BAA2B,GAC3B,2BAA2B,CAAA;AAE/B,wBAAgB,8BAA8B,CAC5C,iBAAiB,EAAE,iBAAiB,GACnC,iBAAiB,IAAI,4BAA4B,CAOnD;AAED;;GAEG;AACH,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,uBAAuB,IAAA;IACvB,0BAA0B,IAAA;IAC1B,aAAa,IAAA;IACb,YAAY,IAAA;IACZ,QAAQ,IAAA;IACR,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,iBAAiB,IAAA;IACjB,gBAAgB,IAAA;IAChB,gGAAgG;IAChG,qBAAqB,KAAA;CACtB;AAyBD,mGAAmG;AACnG,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,GACpE,eAAe,CAEjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,EACrE,WAAW,EAAE,eAAe,GAC3B,eAAe,CAEjB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,EACrE,WAAW,EAAE,eAAe,GAC3B,eAAe,CAEjB"}
1
+ {"version":3,"file":"RequestDataStep.d.ts","sourceRoot":"","sources":["../../../src/components/AccessRequirementList/RequestDataStep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAA;AAMzF;;GAEG;AACH,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,uBAAuB,IAAA;IACvB,0BAA0B,IAAA;IAC1B,aAAa,IAAA;IACb,YAAY,IAAA;IACZ,QAAQ,IAAA;IACR,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,iBAAiB,IAAA;IACjB,gBAAgB,IAAA;IAChB,gGAAgG;IAChG,qBAAqB,KAAA;CACtB;AAyBD,mGAAmG;AACnG,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,GACpE,eAAe,CAEjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,EACrE,WAAW,EAAE,eAAe,GAC3B,eAAe,CAEjB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,CAAC,EACrE,WAAW,EAAE,eAAe,GAC3B,eAAe,CAEjB"}
@@ -1,37 +1,34 @@
1
1
  import { JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE as e, MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE as t } from "@sage-bionetworks/synapse-types";
2
2
  //#region src/components/AccessRequirementList/RequestDataStep.ts
3
- function n(n) {
4
- return n.concreteType === t || n.concreteType === e;
5
- }
6
- var r = /* @__PURE__ */ function(e) {
3
+ var n = /* @__PURE__ */ function(e) {
7
4
  return e[e.SHOW_ALL_ARS = 0] = "SHOW_ALL_ARS", e[e.UPDATE_RESEARCH_PROJECT = 1] = "UPDATE_RESEARCH_PROJECT", e[e.UPDATE_ACCESSORS_AND_FILES = 2] = "UPDATE_ACCESSORS_AND_FILES", e[e.PROMPT_CANCEL = 3] = "PROMPT_CANCEL", e[e.PROMPT_LOGIN = 4] = "PROMPT_LOGIN", e[e.COMPLETE = 5] = "COMPLETE", e[e.REVIEW_DUC = 6] = "REVIEW_DUC", e[e.EDUC_PREVIEW = 7] = "EDUC_PREVIEW", e[e.MANUAL_UPLOAD_DUC = 8] = "MANUAL_UPLOAD_DUC", e[e.SIGNATURE_STATUS = 9] = "SIGNATURE_STATUS", e[e.SCHEMA_DRIVEN_REQUEST = 10] = "SCHEMA_DRIVEN_REQUEST", e;
8
- }({}), i = [
5
+ }({}), r = [
9
6
  6,
10
7
  7,
11
8
  8
12
- ], a = {
9
+ ], i = {
13
10
  [t]: [
14
11
  1,
15
12
  2,
16
- ...i
13
+ ...r
17
14
  ],
18
- [e]: [10, ...i]
15
+ [e]: [10, ...r]
19
16
  };
20
- function o(e) {
21
- return a[e.concreteType][0];
17
+ function a(e) {
18
+ return i[e.concreteType][0];
22
19
  }
23
- function s(e, t) {
24
- return l(e, t, 1);
20
+ function o(e, t) {
21
+ return c(e, t, 1);
25
22
  }
26
- function c(e, t) {
27
- return l(e, t, -1);
23
+ function s(e, t) {
24
+ return c(e, t, -1);
28
25
  }
29
- function l(e, t, n) {
30
- let i = a[e.concreteType], o = i.indexOf(t), s = o === -1 ? void 0 : i[o + n];
31
- if (s === void 0) throw Error(`There is no ${n === 1 ? "next" : "previous"} step for ${r[t]} in the request wizard of ${e.concreteType}`);
26
+ function c(e, t, r) {
27
+ let a = i[e.concreteType], o = a.indexOf(t), s = o === -1 ? void 0 : a[o + r];
28
+ if (s === void 0) throw Error(`There is no ${r === 1 ? "next" : "previous"} step for ${n[t]} in the request wizard of ${e.concreteType}`);
32
29
  return s;
33
30
  }
34
31
  //#endregion
35
- export { r as RequestDataStep, o as getFirstRequestStep, s as getNextRequestStep, c as getPreviousRequestStep, n as isRequestableAccessRequirement };
32
+ export { n as RequestDataStep, a as getFirstRequestStep, o as getNextRequestStep, s as getPreviousRequestStep };
36
33
 
37
34
  //# sourceMappingURL=RequestDataStep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestDataStep.js","names":[],"sources":["../../../src/components/AccessRequirementList/RequestDataStep.ts"],"sourcesContent":["import {\n AccessRequirement,\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n JsonSchemaAccessRequirement,\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n ManagedACTAccessRequirement,\n} from '@sage-bionetworks/synapse-types'\n\n/** The access requirement types that a user can request access to through the request wizard */\nexport type RequestableAccessRequirement =\n | ManagedACTAccessRequirement\n | JsonSchemaAccessRequirement\n\nexport function isRequestableAccessRequirement(\n accessRequirement: AccessRequirement,\n): accessRequirement is RequestableAccessRequirement {\n return (\n accessRequirement.concreteType ===\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE ||\n accessRequirement.concreteType ===\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE\n )\n}\n\n/**\n * Represents a distinct screen in the wizard used to request access to a {@link RequestableAccessRequirement}\n */\nexport enum RequestDataStep {\n SHOW_ALL_ARS,\n UPDATE_RESEARCH_PROJECT,\n UPDATE_ACCESSORS_AND_FILES,\n PROMPT_CANCEL,\n PROMPT_LOGIN,\n COMPLETE,\n REVIEW_DUC,\n EDUC_PREVIEW,\n MANUAL_UPLOAD_DUC,\n SIGNATURE_STATUS,\n /** The request wizard of a JsonSchemaAccessRequirement, which owns its own sequence of steps */\n SCHEMA_DRIVEN_REQUEST,\n}\n\n// Only ARs with an eDUC template continue to these steps; others submit from the last step before them.\n// MANUAL_UPLOAD_DUC is the alternative to sending the eDUC for signature from EDUC_PREVIEW.\nconst EDUC_STEPS = [\n RequestDataStep.REVIEW_DUC,\n RequestDataStep.EDUC_PREVIEW,\n RequestDataStep.MANUAL_UPLOAD_DUC,\n] as const\n\nconst REQUEST_STEP_ORDER: Record<\n RequestableAccessRequirement['concreteType'],\n readonly RequestDataStep[]\n> = {\n [MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE]: [\n RequestDataStep.UPDATE_RESEARCH_PROJECT,\n RequestDataStep.UPDATE_ACCESSORS_AND_FILES,\n ...EDUC_STEPS,\n ],\n [JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE]: [\n RequestDataStep.SCHEMA_DRIVEN_REQUEST,\n ...EDUC_STEPS,\n ],\n}\n\n/** The first step of the wizard in which a user requests access to the given access requirement */\nexport function getFirstRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n): RequestDataStep {\n return REQUEST_STEP_ORDER[accessRequirement.concreteType][0]\n}\n\n/**\n * The step that follows `currentStep` in the request wizard of the given access requirement.\n * @throws if `currentStep` is the last step of, or not a step of, the access requirement's request wizard\n */\nexport function getNextRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n currentStep: RequestDataStep,\n): RequestDataStep {\n return getAdjacentRequestStep(accessRequirement, currentStep, 1)\n}\n\n/**\n * The step that precedes `currentStep` in the request wizard of the given access requirement.\n * @throws if `currentStep` is the first step of, or not a step of, the access requirement's request wizard\n */\nexport function getPreviousRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n currentStep: RequestDataStep,\n): RequestDataStep {\n return getAdjacentRequestStep(accessRequirement, currentStep, -1)\n}\n\nfunction getAdjacentRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n currentStep: RequestDataStep,\n offset: 1 | -1,\n): RequestDataStep {\n const stepOrder = REQUEST_STEP_ORDER[accessRequirement.concreteType]\n const currentIndex = stepOrder.indexOf(currentStep)\n const adjacentStep =\n currentIndex === -1 ? undefined : stepOrder[currentIndex + offset]\n if (adjacentStep === undefined) {\n throw new Error(\n `There is no ${offset === 1 ? 'next' : 'previous'} step for ${RequestDataStep[currentStep]} in the request wizard of ${accessRequirement.concreteType}`,\n )\n }\n return adjacentStep\n}\n"],"mappings":";;AAaA,SAAgB,EACd,GACmD;CACnD,OACE,EAAkB,iBAChB,KACF,EAAkB,iBAChB;AAEN;AAKA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,0BAAA,KAAA,2BACA,EAAA,EAAA,6BAAA,KAAA,8BACA,EAAA,EAAA,gBAAA,KAAA,iBACA,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,WAAA,KAAA,YACA,EAAA,EAAA,aAAA,KAAA,cACA,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,oBAAA,KAAA,qBACA,EAAA,EAAA,mBAAA,KAAA,oBAEA,EAAA,EAAA,wBAAA,MAAA;AACF,EAAA,CAAA,CAAA,GAIM,IAAa;;;;AAInB,GAEM,IAGF;EACD,IAAqD;;;EAGpD,GAAG;CACL;EACC,IAAqD,CAAA,IAEpD,GAAG,CACL;AACF;AAGA,SAAgB,EACd,GACiB;CACjB,OAAO,EAAmB,EAAkB,cAAc;AAC5D;AAMA,SAAgB,EACd,GACA,GACiB;CACjB,OAAO,EAAuB,GAAmB,GAAa,CAAC;AACjE;AAMA,SAAgB,EACd,GACA,GACiB;CACjB,OAAO,EAAuB,GAAmB,GAAa,EAAE;AAClE;AAEA,SAAS,EACP,GACA,GACA,GACiB;CACjB,IAAM,IAAY,EAAmB,EAAkB,eACjD,IAAe,EAAU,QAAQ,CAAW,GAC5C,IACJ,MAAiB,KAAK,KAAA,IAAY,EAAU,IAAe;CAC7D,IAAI,MAAiB,KAAA,GACnB,MAAU,MACR,eAAe,MAAW,IAAI,SAAS,WAAW,YAAY,EAAgB,GAAa,4BAA4B,EAAkB,cAC3I;CAEF,OAAO;AACT"}
1
+ {"version":3,"file":"RequestDataStep.js","names":[],"sources":["../../../src/components/AccessRequirementList/RequestDataStep.ts"],"sourcesContent":["import { RequestableAccessRequirement } from '@/utils/types/RequestableAccessRequirement'\nimport {\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n} from '@sage-bionetworks/synapse-types'\n\n/**\n * Represents a distinct screen in the wizard used to request access to a {@link RequestableAccessRequirement}\n */\nexport enum RequestDataStep {\n SHOW_ALL_ARS,\n UPDATE_RESEARCH_PROJECT,\n UPDATE_ACCESSORS_AND_FILES,\n PROMPT_CANCEL,\n PROMPT_LOGIN,\n COMPLETE,\n REVIEW_DUC,\n EDUC_PREVIEW,\n MANUAL_UPLOAD_DUC,\n SIGNATURE_STATUS,\n /** The request wizard of a JsonSchemaAccessRequirement, which owns its own sequence of steps */\n SCHEMA_DRIVEN_REQUEST,\n}\n\n// Only ARs with an eDUC template continue to these steps; others submit from the last step before them.\n// MANUAL_UPLOAD_DUC is the alternative to sending the eDUC for signature from EDUC_PREVIEW.\nconst EDUC_STEPS = [\n RequestDataStep.REVIEW_DUC,\n RequestDataStep.EDUC_PREVIEW,\n RequestDataStep.MANUAL_UPLOAD_DUC,\n] as const\n\nconst REQUEST_STEP_ORDER: Record<\n RequestableAccessRequirement['concreteType'],\n readonly RequestDataStep[]\n> = {\n [MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE]: [\n RequestDataStep.UPDATE_RESEARCH_PROJECT,\n RequestDataStep.UPDATE_ACCESSORS_AND_FILES,\n ...EDUC_STEPS,\n ],\n [JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE]: [\n RequestDataStep.SCHEMA_DRIVEN_REQUEST,\n ...EDUC_STEPS,\n ],\n}\n\n/** The first step of the wizard in which a user requests access to the given access requirement */\nexport function getFirstRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n): RequestDataStep {\n return REQUEST_STEP_ORDER[accessRequirement.concreteType][0]\n}\n\n/**\n * The step that follows `currentStep` in the request wizard of the given access requirement.\n * @throws if `currentStep` is the last step of, or not a step of, the access requirement's request wizard\n */\nexport function getNextRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n currentStep: RequestDataStep,\n): RequestDataStep {\n return getAdjacentRequestStep(accessRequirement, currentStep, 1)\n}\n\n/**\n * The step that precedes `currentStep` in the request wizard of the given access requirement.\n * @throws if `currentStep` is the first step of, or not a step of, the access requirement's request wizard\n */\nexport function getPreviousRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n currentStep: RequestDataStep,\n): RequestDataStep {\n return getAdjacentRequestStep(accessRequirement, currentStep, -1)\n}\n\nfunction getAdjacentRequestStep(\n accessRequirement: Pick<RequestableAccessRequirement, 'concreteType'>,\n currentStep: RequestDataStep,\n offset: 1 | -1,\n): RequestDataStep {\n const stepOrder = REQUEST_STEP_ORDER[accessRequirement.concreteType]\n const currentIndex = stepOrder.indexOf(currentStep)\n const adjacentStep =\n currentIndex === -1 ? undefined : stepOrder[currentIndex + offset]\n if (adjacentStep === undefined) {\n throw new Error(\n `There is no ${offset === 1 ? 'next' : 'previous'} step for ${RequestDataStep[currentStep]} in the request wizard of ${accessRequirement.concreteType}`,\n )\n }\n return adjacentStep\n}\n"],"mappings":";;AASA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,0BAAA,KAAA,2BACA,EAAA,EAAA,6BAAA,KAAA,8BACA,EAAA,EAAA,gBAAA,KAAA,iBACA,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,WAAA,KAAA,YACA,EAAA,EAAA,aAAA,KAAA,cACA,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,oBAAA,KAAA,qBACA,EAAA,EAAA,mBAAA,KAAA,oBAEA,EAAA,EAAA,wBAAA,MAAA;AACF,EAAA,CAAA,CAAA,GAIM,IAAa;;;;AAInB,GAEM,IAGF;EACD,IAAqD;;;EAGpD,GAAG;CACL;EACC,IAAqD,CAAA,IAEpD,GAAG,CACL;AACF;AAGA,SAAgB,EACd,GACiB;CACjB,OAAO,EAAmB,EAAkB,cAAc;AAC5D;AAMA,SAAgB,EACd,GACA,GACiB;CACjB,OAAO,EAAuB,GAAmB,GAAa,CAAC;AACjE;AAMA,SAAgB,EACd,GACA,GACiB;CACjB,OAAO,EAAuB,GAAmB,GAAa,EAAE;AAClE;AAEA,SAAS,EACP,GACA,GACA,GACiB;CACjB,IAAM,IAAY,EAAmB,EAAkB,eACjD,IAAe,EAAU,QAAQ,CAAW,GAC5C,IACJ,MAAiB,KAAK,KAAA,IAAY,EAAU,IAAe;CAC7D,IAAI,MAAiB,KAAA,GACnB,MAAU,MACR,eAAe,MAAW,IAAI,SAAS,WAAW,YAAY,EAAgB,GAAa,4BAA4B,EAAkB,cAC3I;CAEF,OAAO;AACT"}
@@ -6,7 +6,7 @@ import { CreateAccessTokenModal as a } from "./CreateAccessTokenModal.js";
6
6
  import { useState as o } from "react";
7
7
  import { Box as s, Button as c, Typography as l } from "@mui/material";
8
8
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
- import { AddCircleTwoTone as f } from "@mui/icons-material";
9
+ import f from "@mui/icons-material/AddCircleTwoTone";
10
10
  //#region src/components/AccessTokenPage/AccessTokenPage.tsx
11
11
  function p({ title: p, body: m }) {
12
12
  let [h, g] = o(!1), { data: _, isLoading: v, error: y, fetchNextPage: b, hasNextPage: x } = r(), S = _?.pages.flatMap((e) => e.results) ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"AccessTokenPage.js","names":[],"sources":["../../../src/components/AccessTokenPage/AccessTokenPage.tsx"],"sourcesContent":["import { useGetPersonalAccessTokensInfinite } from '@/synapse-queries/user/usePersonalAccessToken'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { Box, Button, Typography } from '@mui/material'\nimport { ReactNode, useState } from 'react'\nimport { ErrorBanner, SynapseErrorBoundary } from '../error/ErrorBanner'\nimport loadingScreen from '../LoadingScreen/LoadingScreen'\nimport { AccessTokenCard } from './AccessTokenCard/AccessTokenCard'\nimport { CreateAccessTokenModal } from './CreateAccessTokenModal'\n\nexport type AccessTokenPageProps = {\n title: string\n body: ReactNode\n}\n\nexport function AccessTokenPage({ title, body }: AccessTokenPageProps) {\n const [showCreateTokenModal, setShowCreateTokenModal] = useState(false)\n\n const {\n data: infiniteData,\n isLoading,\n error,\n fetchNextPage,\n hasNextPage,\n } = useGetPersonalAccessTokensInfinite()\n\n const tokenRecords = infiniteData?.pages.flatMap(page => page.results) ?? []\n\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n justifyContent: 'space-between',\n flexDirection: { xs: 'column', md: 'row' },\n }}\n >\n <Box\n sx={{\n flexGrow: 1,\n }}\n >\n <h1>{title}</h1>\n {body}\n </Box>\n <Box\n sx={theme => ({\n flexShrink: 0,\n alignSelf: 'end',\n [theme.breakpoints.down('md')]: { width: '100%' },\n })}\n >\n <Button\n sx={theme => ({\n [theme.breakpoints.down('md')]: { width: '100%' },\n })}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setShowCreateTokenModal(true)}\n startIcon={<AddCircleTwoTone />}\n >\n Create New Token\n </Button>\n </Box>\n </Box>\n <SynapseErrorBoundary>\n {showCreateTokenModal && (\n <CreateAccessTokenModal\n onClose={() => setShowCreateTokenModal(false)}\n />\n )}\n\n <div>\n {!isLoading && !error && tokenRecords.length === 0 && (\n <Typography\n variant={'headline2'}\n sx={{\n m: 5,\n textAlign: 'center',\n }}\n >\n You currently have no personal access tokens.\n </Typography>\n )}\n <Box\n sx={{\n maxWidth: '800px',\n mx: 'auto',\n my: 2.5,\n }}\n >\n {tokenRecords.map(accessToken => {\n return (\n <AccessTokenCard\n key={accessToken.id}\n accessToken={accessToken}\n />\n )\n })}\n {isLoading && loadingScreen}\n {!isLoading && hasNextPage && !error && (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'flex-end',\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n fetchNextPage()\n }}\n >\n Load More\n </Button>\n </Box>\n )}\n </Box>\n {error && <ErrorBanner error={error}></ErrorBanner>}\n </div>\n </SynapseErrorBoundary>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;AAcA,SAAgB,EAAgB,EAAE,UAAO,WAA8B;CACrE,IAAM,CAAC,GAAsB,KAA2B,EAAS,EAAK,GAEhE,EACJ,MAAM,GACN,cACA,UACA,kBACA,mBACE,EAAmC,GAEjC,IAAe,GAAc,MAAM,SAAQ,MAAQ,EAAK,OAAO,KAAK,CAAC;CAE3E,OACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,KAAK;GACL,gBAAgB;GAChB,eAAe;IAAE,IAAI;IAAU,IAAI;GAAM;EAC3C;YANF,CAQE,kBAAC,GAAD;GACE,IAAI,EACF,UAAU,EACZ;aAHF,CAKE,kBAAC,MAAD,EAAA,UAAK,EAAU,CAAA,GACd,CACE;MACL,kBAAC,GAAD;GACE,KAAI,OAAU;IACZ,YAAY;IACZ,WAAW;KACV,EAAM,YAAY,KAAK,IAAI,IAAI,EAAE,OAAO,OAAO;GAClD;aAEA,kBAAC,GAAD;IACE,KAAI,OAAU,GACX,EAAM,YAAY,KAAK,IAAI,IAAI,EAAE,OAAO,OAAO,EAClD;IACA,SAAQ;IACR,OAAM;IACN,eAAe,EAAwB,EAAI;IAC3C,WAAW,kBAAC,GAAD,CAAmB,CAAA;cAC/B;GAEO,CAAA;EACL,CAAA,CACF;KACL,kBAAC,GAAD,EAAA,UAAA,CACG,KACC,kBAAC,GAAD,EACE,eAAe,EAAwB,EAAK,EAC7C,CAAA,GAGH,kBAAC,OAAD,EAAA,UAAA;EACG,CAAC,KAAa,CAAC,KAAS,EAAa,WAAW,KAC/C,kBAAC,GAAD;GACE,SAAS;GACT,IAAI;IACF,GAAG;IACH,WAAW;GACb;aACD;EAEW,CAAA;EAEd,kBAAC,GAAD;GACE,IAAI;IACF,UAAU;IACV,IAAI;IACJ,IAAI;GACN;aALF;IAOG,EAAa,KAAI,MAEd,kBAAC,GAAD,EAEe,eACd,GAFM,EAAY,EAElB,CAEJ;IACA,KAAa;IACb,CAAC,KAAa,KAAe,CAAC,KAC7B,kBAAC,GAAD;KACE,IAAI;MACF,SAAS;MACT,gBAAgB;KAClB;eAEA,kBAAC,GAAD;MACE,SAAQ;MACR,OAAM;MACN,eAAe;OACb,EAAc;MAChB;gBACD;KAEO,CAAA;IACL,CAAA;GAEJ;;EACJ,KAAS,kBAAC,GAAD,EAAoB,SAAoB,CAAA;CAC/C,EAAA,CAAA,CACe,EAAA,CAAA,CACnB,EAAA,CAAA;AAET"}
1
+ {"version":3,"file":"AccessTokenPage.js","names":[],"sources":["../../../src/components/AccessTokenPage/AccessTokenPage.tsx"],"sourcesContent":["import { useGetPersonalAccessTokensInfinite } from '@/synapse-queries/user/usePersonalAccessToken'\nimport AddCircleTwoTone from '@mui/icons-material/AddCircleTwoTone'\nimport { Box, Button, Typography } from '@mui/material'\nimport { ReactNode, useState } from 'react'\nimport { ErrorBanner, SynapseErrorBoundary } from '../error/ErrorBanner'\nimport loadingScreen from '../LoadingScreen/LoadingScreen'\nimport { AccessTokenCard } from './AccessTokenCard/AccessTokenCard'\nimport { CreateAccessTokenModal } from './CreateAccessTokenModal'\n\nexport type AccessTokenPageProps = {\n title: string\n body: ReactNode\n}\n\nexport function AccessTokenPage({ title, body }: AccessTokenPageProps) {\n const [showCreateTokenModal, setShowCreateTokenModal] = useState(false)\n\n const {\n data: infiniteData,\n isLoading,\n error,\n fetchNextPage,\n hasNextPage,\n } = useGetPersonalAccessTokensInfinite()\n\n const tokenRecords = infiniteData?.pages.flatMap(page => page.results) ?? []\n\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n justifyContent: 'space-between',\n flexDirection: { xs: 'column', md: 'row' },\n }}\n >\n <Box\n sx={{\n flexGrow: 1,\n }}\n >\n <h1>{title}</h1>\n {body}\n </Box>\n <Box\n sx={theme => ({\n flexShrink: 0,\n alignSelf: 'end',\n [theme.breakpoints.down('md')]: { width: '100%' },\n })}\n >\n <Button\n sx={theme => ({\n [theme.breakpoints.down('md')]: { width: '100%' },\n })}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setShowCreateTokenModal(true)}\n startIcon={<AddCircleTwoTone />}\n >\n Create New Token\n </Button>\n </Box>\n </Box>\n <SynapseErrorBoundary>\n {showCreateTokenModal && (\n <CreateAccessTokenModal\n onClose={() => setShowCreateTokenModal(false)}\n />\n )}\n\n <div>\n {!isLoading && !error && tokenRecords.length === 0 && (\n <Typography\n variant={'headline2'}\n sx={{\n m: 5,\n textAlign: 'center',\n }}\n >\n You currently have no personal access tokens.\n </Typography>\n )}\n <Box\n sx={{\n maxWidth: '800px',\n mx: 'auto',\n my: 2.5,\n }}\n >\n {tokenRecords.map(accessToken => {\n return (\n <AccessTokenCard\n key={accessToken.id}\n accessToken={accessToken}\n />\n )\n })}\n {isLoading && loadingScreen}\n {!isLoading && hasNextPage && !error && (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'flex-end',\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n fetchNextPage()\n }}\n >\n Load More\n </Button>\n </Box>\n )}\n </Box>\n {error && <ErrorBanner error={error}></ErrorBanner>}\n </div>\n </SynapseErrorBoundary>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;AAcA,SAAgB,EAAgB,EAAE,UAAO,WAA8B;CACrE,IAAM,CAAC,GAAsB,KAA2B,EAAS,EAAK,GAEhE,EACJ,MAAM,GACN,cACA,UACA,kBACA,mBACE,EAAmC,GAEjC,IAAe,GAAc,MAAM,SAAQ,MAAQ,EAAK,OAAO,KAAK,CAAC;CAE3E,OACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,KAAK;GACL,gBAAgB;GAChB,eAAe;IAAE,IAAI;IAAU,IAAI;GAAM;EAC3C;YANF,CAQE,kBAAC,GAAD;GACE,IAAI,EACF,UAAU,EACZ;aAHF,CAKE,kBAAC,MAAD,EAAA,UAAK,EAAU,CAAA,GACd,CACE;MACL,kBAAC,GAAD;GACE,KAAI,OAAU;IACZ,YAAY;IACZ,WAAW;KACV,EAAM,YAAY,KAAK,IAAI,IAAI,EAAE,OAAO,OAAO;GAClD;aAEA,kBAAC,GAAD;IACE,KAAI,OAAU,GACX,EAAM,YAAY,KAAK,IAAI,IAAI,EAAE,OAAO,OAAO,EAClD;IACA,SAAQ;IACR,OAAM;IACN,eAAe,EAAwB,EAAI;IAC3C,WAAW,kBAAC,GAAD,CAAmB,CAAA;cAC/B;GAEO,CAAA;EACL,CAAA,CACF;KACL,kBAAC,GAAD,EAAA,UAAA,CACG,KACC,kBAAC,GAAD,EACE,eAAe,EAAwB,EAAK,EAC7C,CAAA,GAGH,kBAAC,OAAD,EAAA,UAAA;EACG,CAAC,KAAa,CAAC,KAAS,EAAa,WAAW,KAC/C,kBAAC,GAAD;GACE,SAAS;GACT,IAAI;IACF,GAAG;IACH,WAAW;GACb;aACD;EAEW,CAAA;EAEd,kBAAC,GAAD;GACE,IAAI;IACF,UAAU;IACV,IAAI;IACJ,IAAI;GACN;aALF;IAOG,EAAa,KAAI,MAEd,kBAAC,GAAD,EAEe,eACd,GAFM,EAAY,EAElB,CAEJ;IACA,KAAa;IACb,CAAC,KAAa,KAAe,CAAC,KAC7B,kBAAC,GAAD;KACE,IAAI;MACF,SAAS;MACT,gBAAgB;KAClB;eAEA,kBAAC,GAAD;MACE,SAAQ;MACR,OAAM;MACN,eAAe;OACb,EAAc;MAChB;gBACD;KAEO,CAAA;IACL,CAAA;GAEJ;;EACJ,KAAS,kBAAC,GAAD,EAAoB,SAAoB,CAAA;CAC/C,EAAA,CAAA,CACe,EAAA,CAAA,CACnB,EAAA,CAAA;AAET"}
@@ -6,7 +6,7 @@ import { StudyAcknowledgements as i } from "./StudyAcknowledgements.js";
6
6
  import { useCallback as a, useState as o } from "react";
7
7
  import { Box as s, Button as c, Container as l, Link as u, Typography as d } from "@mui/material";
8
8
  import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
9
- import { LaunchTwoTone as h } from "@mui/icons-material";
9
+ import h from "@mui/icons-material/LaunchTwoTone";
10
10
  //#region src/components/AcknowledgementsPage/AcknowledgementsPage.tsx
11
11
  function g(g) {
12
12
  let { portalName: _, createDoiHelpUrl: v, portalAcknowledgementProps: y, dataAvailabilityProps: b, studyAcknowledgementSql: x } = g, [S, C] = o(!1), [w, T] = o(), [E, D] = o(), [O, k] = o([]), A = a(() => C(!1), []);