synapse-react-client 4.0.45 → 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 (319) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
  3. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
  4. package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
  6. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  7. package/dist/aridhia-queries/index.d.ts +1 -0
  8. package/dist/aridhia-queries/index.d.ts.map +1 -1
  9. package/dist/aridhia-queries/index.js +11 -10
  10. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
  11. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
  12. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
  13. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
  14. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
  16. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  27. package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
  28. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  29. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
  30. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  31. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
  32. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
  33. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
  34. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
  35. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
  36. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
  37. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  38. package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
  39. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
  40. package/dist/components/Authentication/LastLoginInfo.js +1 -1
  41. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  42. package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
  43. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  44. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
  45. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  46. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
  47. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  48. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
  49. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  50. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
  51. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
  52. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  53. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
  54. package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
  55. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  56. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  57. package/dist/components/ComponentCollapse.js +2 -1
  58. package/dist/components/ComponentCollapse.js.map +1 -1
  59. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  60. package/dist/components/DataGrid/SynapseGrid.js +231 -219
  61. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  62. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  63. package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
  64. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  65. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  66. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
  67. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  68. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
  69. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  70. package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
  71. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  72. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  73. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
  74. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  75. package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
  76. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  77. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +5 -5
  78. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  79. package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
  80. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  81. package/dist/components/DataGrid/utils/columnFactory.js +1 -1
  82. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  83. package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
  84. package/dist/components/DataGrid/utils/splitPatch.js +22 -13
  85. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  86. package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
  87. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  88. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  89. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +2 -1
  90. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  91. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
  92. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
  93. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  94. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
  95. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  96. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
  97. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  98. package/dist/components/EntityFinder/EntityFinder.js +4 -4
  99. package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
  100. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  101. package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
  102. package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
  103. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  104. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +1 -1
  105. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  106. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  107. package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
  108. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  109. package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
  110. package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
  111. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  112. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
  113. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
  114. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  115. package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
  116. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  117. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
  118. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  119. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
  120. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
  121. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
  122. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  123. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
  124. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  125. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
  126. package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
  127. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
  128. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
  129. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
  130. package/dist/components/FormTemplateEditor/FormStructurePanel.js +1 -1
  131. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
  132. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
  133. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
  134. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
  135. package/dist/components/FormTemplateEditor/StepCard.js +15 -10
  136. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
  137. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
  138. package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
  139. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
  140. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
  141. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
  142. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
  143. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +45 -45
  144. package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
  145. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  146. package/dist/components/GenericCard/TableRowGenericCard.js +1 -1
  147. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  148. package/dist/components/HelpPopover/HelpPopover.js +1 -1
  149. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  150. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  151. package/dist/components/IconSvg/IconSvg.js +154 -47
  152. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  153. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
  154. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
  155. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  156. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  157. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
  158. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  159. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
  160. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
  161. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
  162. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
  163. package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
  164. package/dist/components/Markdown/MarkdownCollapse.js +3 -1
  165. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  166. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
  167. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  168. package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
  169. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  170. package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
  171. package/dist/components/PortalList/PortalCard.js +6 -5
  172. package/dist/components/PortalList/PortalCard.js.map +1 -1
  173. package/dist/components/PortalList/PortalList.js +4 -4
  174. package/dist/components/PortalList/PortalList.js.map +1 -1
  175. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
  176. package/dist/components/QueryBuilder/FilterConditionRow.js +4 -4
  177. package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
  178. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  179. package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
  180. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  181. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +1 -1
  182. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  183. package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
  184. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  185. package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
  186. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  187. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
  188. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  189. package/dist/components/SynapseChat/SynapseChat.js +1 -1
  190. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  191. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  192. package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
  193. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  194. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
  195. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
  196. package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
  197. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  198. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
  199. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  200. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
  201. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
  202. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  203. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
  204. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  205. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
  206. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  207. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  208. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
  209. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  210. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  211. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  212. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
  213. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  214. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  215. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
  216. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  217. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  218. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  219. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +140 -140
  220. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  221. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  222. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  223. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
  224. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  225. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  226. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  227. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  228. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  229. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
  230. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
  231. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  232. package/dist/components/TanStackTable/ColumnHeader.js +1 -1
  233. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  234. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
  235. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  236. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
  237. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
  238. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  239. package/dist/components/Webhook/WebhookDashboard.js +1 -1
  240. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  241. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  242. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  243. package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
  244. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  245. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
  246. package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
  247. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
  248. package/dist/components/dataaccess/FormTemplateTable.js +6 -6
  249. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
  250. package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
  251. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  252. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
  253. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  254. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  255. package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
  256. package/dist/components/download_list/DownloadDetails.js +12 -10
  257. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  258. package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
  259. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  260. package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
  261. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  262. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  263. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  264. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
  265. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  266. package/dist/components/error/ErrorChip.d.ts.map +1 -1
  267. package/dist/components/error/ErrorChip.js +2 -1
  268. package/dist/components/error/ErrorChip.js.map +1 -1
  269. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
  270. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
  271. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  272. package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
  273. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  274. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
  275. package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
  276. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  277. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
  278. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  279. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
  280. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  281. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
  282. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  283. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  284. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  285. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
  286. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
  287. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
  288. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
  289. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
  290. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
  291. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
  292. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
  293. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
  294. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  295. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +8 -0
  296. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  297. package/dist/mocks/msw/handlers/aridhiaHandlers.js +52 -41
  298. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  299. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  300. package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
  301. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  302. package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
  303. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  304. package/dist/mocks/msw/server.d.ts.map +1 -1
  305. package/dist/mocks/msw/server.js +4 -2
  306. package/dist/mocks/msw/server.js.map +1 -1
  307. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  308. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  309. package/dist/theme/DefaultTheme.d.ts.map +1 -1
  310. package/dist/theme/DefaultTheme.js +4 -1
  311. package/dist/theme/DefaultTheme.js.map +1 -1
  312. package/dist/tsconfig.build.tsbuildinfo +1 -1
  313. package/dist/utils/APIConstants.d.ts.map +1 -1
  314. package/dist/utils/APIConstants.js.map +1 -1
  315. package/dist/utils/AppUtils/AppUtils.js +1 -1
  316. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  317. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  318. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  319. package/package.json +7 -6
package/dist/SWC.index.js CHANGED
@@ -117,7 +117,7 @@ var x = { BackendDestinationEnum: r }, S = {
117
117
  sendSearchResultsReturnedEvent: y,
118
118
  sendSearchResultReturnedEvent: v,
119
119
  sendSearchResultClickedEvent: _
120
- }, T = "4.0.45";
120
+ }, T = "4.0.46";
121
121
  //#endregion
122
122
  export { w as Analytics, a as HttpClient, d as Palettes, o as SynapseClient, C as SynapseComponents, n as SynapseConstants, S as SynapseContext, x as SynapseEnums, m as SynapseQueries, T as SynapseReactClientVersion, p as SynapseSessionManager, i as xssOptions };
123
123
 
@@ -20,5 +20,6 @@ export declare class AridhiaKeyFactory {
20
20
  catalogue(datasetCode: string): QueryKey;
21
21
  workflow(workflowKey: string): QueryKey;
22
22
  workspaceRequestForm(): QueryKey;
23
+ vocabularyTerm(code: string): QueryKey;
23
24
  }
24
25
  //# sourceMappingURL=AridhiaKeyFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AridhiaKeyFactory.d.ts","sourceRoot":"","sources":["../../src/aridhia-queries/AridhiaKeyFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;gBAEpC,WAAW,EAAE,MAAM,GAAG,SAAS;IAI3C,OAAO,CAAC,MAAM;IAUP,GAAG,IAAI,QAAQ;IAIf,QAAQ,IAAI,QAAQ;IAIpB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI/B,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAI9C,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAI3C,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAIjD,UAAU,CACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,QAAQ;IAIJ,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAIxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAIvC,oBAAoB,IAAI,QAAQ;CAGxC"}
1
+ {"version":3,"file":"AridhiaKeyFactory.d.ts","sourceRoot":"","sources":["../../src/aridhia-queries/AridhiaKeyFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;gBAEpC,WAAW,EAAE,MAAM,GAAG,SAAS;IAI3C,OAAO,CAAC,MAAM;IAUP,GAAG,IAAI,QAAQ;IAIf,QAAQ,IAAI,QAAQ;IAIpB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI/B,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAI9C,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAI3C,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAIjD,UAAU,CACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,QAAQ;IAIJ,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAIxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAIvC,oBAAoB,IAAI,QAAQ;IAIhC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;CAG9C"}
@@ -42,6 +42,9 @@ var t = class {
42
42
  workspaceRequestForm() {
43
43
  return this.getKey("workspaces-forms", "workspace_request");
44
44
  }
45
+ vocabularyTerm(e) {
46
+ return this.getKey("vocabularies", e);
47
+ }
45
48
  };
46
49
  //#endregion
47
50
  export { t as AridhiaKeyFactory };
@@ -1 +1 @@
1
- {"version":3,"file":"AridhiaKeyFactory.js","names":[],"sources":["../../src/aridhia-queries/AridhiaKeyFactory.ts"],"sourcesContent":["import { hashCode } from '@/utils/functions/StringUtils'\nimport { QueryKey } from '@tanstack/react-query'\n\n/**\n * Co-location of react-query keys for Aridhia (C-Path FAIR / RDCA-DAP) queries.\n *\n * Mirrors the session-isolation convention in `synapse-queries/KeyFactory.ts`: every key is\n * prefixed with a hash of the current Synapse access token (or the literal `'anonymous'`), so\n * one user's cached Aridhia data can never leak to the next user of the same browser tab.\n */\nexport class AridhiaKeyFactory {\n private readonly accessToken: string | undefined\n\n constructor(accessToken: string | undefined) {\n this.accessToken = accessToken\n }\n\n private getKey(...args: unknown[]): QueryKey {\n return [\n 'aridhia',\n this.accessToken == null\n ? 'anonymous'\n : btoa(String(hashCode(this.accessToken))),\n ...args,\n ]\n }\n\n public all(): QueryKey {\n return this.getKey()\n }\n\n public requests(): QueryKey {\n return this.getKey('requests')\n }\n\n public request(code: string): QueryKey {\n return this.getKey('requests', code)\n }\n\n public datasetSettings(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'settings')\n }\n\n public dictionaries(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'dictionaries')\n }\n\n public workspaceLocations(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'workspaces-locations')\n }\n\n public workspaces(\n datasetCode: string,\n location: string | undefined,\n ): QueryKey {\n return this.getKey('dataset', datasetCode, 'workspaces', location)\n }\n\n public catalogue(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'catalogue')\n }\n\n public workflow(workflowKey: string): QueryKey {\n return this.getKey('workflow', workflowKey)\n }\n\n public workspaceRequestForm(): QueryKey {\n return this.getKey('workspaces-forms', 'workspace_request')\n }\n}\n"],"mappings":";;AAUA,IAAa,IAAb,MAA+B;CAC7B;CAEA,YAAY,GAAiC;EAC3C,KAAK,cAAc;CACrB;CAEA,OAAe,GAAG,GAA2B;EAC3C,OAAO;GACL;GACA,KAAK,eAAe,OAChB,cACA,KAAK,OAAO,EAAS,KAAK,WAAW,CAAC,CAAC;GAC3C,GAAG;EACL;CACF;CAEA,MAAuB;EACrB,OAAO,KAAK,OAAO;CACrB;CAEA,WAA4B;EAC1B,OAAO,KAAK,OAAO,UAAU;CAC/B;CAEA,QAAe,GAAwB;EACrC,OAAO,KAAK,OAAO,YAAY,CAAI;CACrC;CAEA,gBAAuB,GAA+B;EACpD,OAAO,KAAK,OAAO,WAAW,GAAa,UAAU;CACvD;CAEA,aAAoB,GAA+B;EACjD,OAAO,KAAK,OAAO,WAAW,GAAa,cAAc;CAC3D;CAEA,mBAA0B,GAA+B;EACvD,OAAO,KAAK,OAAO,WAAW,GAAa,sBAAsB;CACnE;CAEA,WACE,GACA,GACU;EACV,OAAO,KAAK,OAAO,WAAW,GAAa,cAAc,CAAQ;CACnE;CAEA,UAAiB,GAA+B;EAC9C,OAAO,KAAK,OAAO,WAAW,GAAa,WAAW;CACxD;CAEA,SAAgB,GAA+B;EAC7C,OAAO,KAAK,OAAO,YAAY,CAAW;CAC5C;CAEA,uBAAwC;EACtC,OAAO,KAAK,OAAO,oBAAoB,mBAAmB;CAC5D;AACF"}
1
+ {"version":3,"file":"AridhiaKeyFactory.js","names":[],"sources":["../../src/aridhia-queries/AridhiaKeyFactory.ts"],"sourcesContent":["import { hashCode } from '@/utils/functions/StringUtils'\nimport { QueryKey } from '@tanstack/react-query'\n\n/**\n * Co-location of react-query keys for Aridhia (C-Path FAIR / RDCA-DAP) queries.\n *\n * Mirrors the session-isolation convention in `synapse-queries/KeyFactory.ts`: every key is\n * prefixed with a hash of the current Synapse access token (or the literal `'anonymous'`), so\n * one user's cached Aridhia data can never leak to the next user of the same browser tab.\n */\nexport class AridhiaKeyFactory {\n private readonly accessToken: string | undefined\n\n constructor(accessToken: string | undefined) {\n this.accessToken = accessToken\n }\n\n private getKey(...args: unknown[]): QueryKey {\n return [\n 'aridhia',\n this.accessToken == null\n ? 'anonymous'\n : btoa(String(hashCode(this.accessToken))),\n ...args,\n ]\n }\n\n public all(): QueryKey {\n return this.getKey()\n }\n\n public requests(): QueryKey {\n return this.getKey('requests')\n }\n\n public request(code: string): QueryKey {\n return this.getKey('requests', code)\n }\n\n public datasetSettings(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'settings')\n }\n\n public dictionaries(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'dictionaries')\n }\n\n public workspaceLocations(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'workspaces-locations')\n }\n\n public workspaces(\n datasetCode: string,\n location: string | undefined,\n ): QueryKey {\n return this.getKey('dataset', datasetCode, 'workspaces', location)\n }\n\n public catalogue(datasetCode: string): QueryKey {\n return this.getKey('dataset', datasetCode, 'catalogue')\n }\n\n public workflow(workflowKey: string): QueryKey {\n return this.getKey('workflow', workflowKey)\n }\n\n public workspaceRequestForm(): QueryKey {\n return this.getKey('workspaces-forms', 'workspace_request')\n }\n\n public vocabularyTerm(code: string): QueryKey {\n return this.getKey('vocabularies', code)\n }\n}\n"],"mappings":";;AAUA,IAAa,IAAb,MAA+B;CAC7B;CAEA,YAAY,GAAiC;EAC3C,KAAK,cAAc;CACrB;CAEA,OAAe,GAAG,GAA2B;EAC3C,OAAO;GACL;GACA,KAAK,eAAe,OAChB,cACA,KAAK,OAAO,EAAS,KAAK,WAAW,CAAC,CAAC;GAC3C,GAAG;EACL;CACF;CAEA,MAAuB;EACrB,OAAO,KAAK,OAAO;CACrB;CAEA,WAA4B;EAC1B,OAAO,KAAK,OAAO,UAAU;CAC/B;CAEA,QAAe,GAAwB;EACrC,OAAO,KAAK,OAAO,YAAY,CAAI;CACrC;CAEA,gBAAuB,GAA+B;EACpD,OAAO,KAAK,OAAO,WAAW,GAAa,UAAU;CACvD;CAEA,aAAoB,GAA+B;EACjD,OAAO,KAAK,OAAO,WAAW,GAAa,cAAc;CAC3D;CAEA,mBAA0B,GAA+B;EACvD,OAAO,KAAK,OAAO,WAAW,GAAa,sBAAsB;CACnE;CAEA,WACE,GACA,GACU;EACV,OAAO,KAAK,OAAO,WAAW,GAAa,cAAc,CAAQ;CACnE;CAEA,UAAiB,GAA+B;EAC9C,OAAO,KAAK,OAAO,WAAW,GAAa,WAAW;CACxD;CAEA,SAAgB,GAA+B;EAC7C,OAAO,KAAK,OAAO,YAAY,CAAW;CAC5C;CAEA,uBAAwC;EACtC,OAAO,KAAK,OAAO,oBAAoB,mBAAmB;CAC5D;CAEA,eAAsB,GAAwB;EAC5C,OAAO,KAAK,OAAO,gBAAgB,CAAI;CACzC;AACF"}
@@ -1,18 +1,18 @@
1
- import { Configuration as e } from "@sage-bionetworks/aridhia-client/generated/runtime";
2
- import { AuthenticationApi as t } from "@sage-bionetworks/aridhia-client/generated/apis";
1
+ import { AuthenticationApi as e } from "@sage-bionetworks/aridhia-client/generated/apis";
2
+ import { Configuration as t } from "@sage-bionetworks/aridhia-client/generated/runtime";
3
3
  //#region src/aridhia-queries/aridhiaTokenExchange.ts
4
4
  async function n(n, r, i) {
5
- let a = await new t(new e({ basePath: r })).authenticatePost({ authenticationRequest: {
5
+ let a = await new e(new t({ basePath: r })).authenticatePost({ authenticationRequest: {
6
6
  ...i,
7
7
  subject_token: n
8
8
  } });
9
9
  if (!a.access_token) throw Error("Failed to obtain Aridhia access token");
10
10
  return a;
11
11
  }
12
- async function r(t, r, i) {
13
- return new e({
12
+ async function r(e, r, i) {
13
+ return new t({
14
14
  basePath: r,
15
- accessToken: (await n(t, r, i)).access_token
15
+ accessToken: (await n(e, r, i)).access_token
16
16
  });
17
17
  }
18
18
  //#endregion
@@ -10,5 +10,6 @@ export * from './useGetAridhiaWorkspaceLocations';
10
10
  export * from './useGetAridhiaWorkspaces';
11
11
  export * from './useGetAridhiaDatasetCatalogue';
12
12
  export * from './useGetAridhiaWorkspaceRequestForm';
13
+ export * from './useGetAridhiaVocabularyTerm';
13
14
  export * from './useSubmitAridhiaDar';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aridhia-queries/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aridhia-queries/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA"}
@@ -1,12 +1,13 @@
1
1
  import { AridhiaKeyFactory as e } from "./AridhiaKeyFactory.js";
2
2
  import { AridhiaError as t, toAridhiaError as n, useAridhiaMutation as r, useAridhiaQuery as i } from "./useAridhiaQuery.js";
3
- import { useGetAridhiaRequests as a } from "./useGetAridhiaRequests.js";
4
- import { useGetAridhiaDatasetSettings as o } from "./useGetAridhiaDatasetSettings.js";
5
- import { useGetAridhiaWorkflow as s } from "./useGetAridhiaWorkflow.js";
6
- import { useGetAridhiaDictionaries as c } from "./useGetAridhiaDictionaries.js";
7
- import { useGetAridhiaWorkspaceLocations as l } from "./useGetAridhiaWorkspaceLocations.js";
8
- import { useGetAridhiaWorkspaces as u } from "./useGetAridhiaWorkspaces.js";
9
- import { useGetAridhiaDatasetCatalogue as d } from "./useGetAridhiaDatasetCatalogue.js";
10
- import { useGetAridhiaWorkspaceRequestForm as f } from "./useGetAridhiaWorkspaceRequestForm.js";
11
- import { useSubmitAridhiaDar as p } from "./useSubmitAridhiaDar.js";
12
- export { t as AridhiaError, e as AridhiaKeyFactory, n as toAridhiaError, r as useAridhiaMutation, i as useAridhiaQuery, d as useGetAridhiaDatasetCatalogue, o as useGetAridhiaDatasetSettings, c as useGetAridhiaDictionaries, a as useGetAridhiaRequests, s as useGetAridhiaWorkflow, l as useGetAridhiaWorkspaceLocations, f as useGetAridhiaWorkspaceRequestForm, u as useGetAridhiaWorkspaces, p as useSubmitAridhiaDar };
3
+ import { DAR_MESSAGE_VOCABULARY_CODE as a, useGetAridhiaVocabularyTerm as o } from "./useGetAridhiaVocabularyTerm.js";
4
+ import { useGetAridhiaRequests as s } from "./useGetAridhiaRequests.js";
5
+ import { useGetAridhiaDatasetSettings as c } from "./useGetAridhiaDatasetSettings.js";
6
+ import { useGetAridhiaWorkflow as l } from "./useGetAridhiaWorkflow.js";
7
+ import { useGetAridhiaDictionaries as u } from "./useGetAridhiaDictionaries.js";
8
+ import { useGetAridhiaWorkspaceLocations as d } from "./useGetAridhiaWorkspaceLocations.js";
9
+ import { useGetAridhiaWorkspaces as f } from "./useGetAridhiaWorkspaces.js";
10
+ import { useGetAridhiaDatasetCatalogue as p } from "./useGetAridhiaDatasetCatalogue.js";
11
+ import { useGetAridhiaWorkspaceRequestForm as m } from "./useGetAridhiaWorkspaceRequestForm.js";
12
+ import { useSubmitAridhiaDar as h } from "./useSubmitAridhiaDar.js";
13
+ export { t as AridhiaError, e as AridhiaKeyFactory, a as DAR_MESSAGE_VOCABULARY_CODE, n as toAridhiaError, r as useAridhiaMutation, i as useAridhiaQuery, p as useGetAridhiaDatasetCatalogue, c as useGetAridhiaDatasetSettings, u as useGetAridhiaDictionaries, s as useGetAridhiaRequests, o as useGetAridhiaVocabularyTerm, l as useGetAridhiaWorkflow, d as useGetAridhiaWorkspaceLocations, m as useGetAridhiaWorkspaceRequestForm, f as useGetAridhiaWorkspaces, h as useSubmitAridhiaDar };
@@ -0,0 +1,19 @@
1
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
2
+ import { AridhiaError } from './useAridhiaQuery';
3
+ /** Vocabulary term holding the confirmation shown after a data access request is submitted. */
4
+ export declare const DAR_MESSAGE_VOCABULARY_CODE = "data-access-request-message";
5
+ /**
6
+ * A FAIR vocabulary term, as returned by `GET /vocabularies/{code}`. The OpenAPI spec types the
7
+ * response as a bare `object`, so the generated client returns `object`; this type documents
8
+ * the properties the portal relies on.
9
+ */
10
+ export type AridhiaVocabularyTerm = {
11
+ code: string;
12
+ name: string;
13
+ /** How `value` should be interpreted, e.g. `markdown`. */
14
+ grouping?: string;
15
+ value: string;
16
+ };
17
+ /** A single FAIR vocabulary term (UI copy that C-Path maintains in the FAIR portal) by code. */
18
+ export declare function useGetAridhiaVocabularyTerm(code: string, options?: Partial<UseQueryOptions<AridhiaVocabularyTerm, AridhiaError, AridhiaVocabularyTerm>>): UseQueryResult<AridhiaVocabularyTerm, AridhiaError>;
19
+ //# sourceMappingURL=useGetAridhiaVocabularyTerm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetAridhiaVocabularyTerm.d.ts","sourceRoot":"","sources":["../../src/aridhia-queries/useGetAridhiaVocabularyTerm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAIvE,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAA;AAEjE,+FAA+F;AAC/F,eAAO,MAAM,2BAA2B,gCAAgC,CAAA;AAExE;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,gGAAgG;AAChG,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CACf,eAAe,CAAC,qBAAqB,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAC5E,GACA,cAAc,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAcrD"}
@@ -0,0 +1,14 @@
1
+ import { useSynapseContext as e } from "../utils/context/SynapseContext.js";
2
+ import { AridhiaKeyFactory as t } from "./AridhiaKeyFactory.js";
3
+ import { useAridhiaQuery as n } from "./useAridhiaQuery.js";
4
+ import { PersonalisationApi as r } from "@sage-bionetworks/aridhia-client/generated/apis";
5
+ //#region src/aridhia-queries/useGetAridhiaVocabularyTerm.ts
6
+ var i = "data-access-request-message";
7
+ function a(i, a) {
8
+ let { accessToken: o } = e();
9
+ return n(new t(o).vocabularyTerm(i), async (e) => await new r(e).fairVocabulariesCodeGet({ code: i }), a);
10
+ }
11
+ //#endregion
12
+ export { i as DAR_MESSAGE_VOCABULARY_CODE, a as useGetAridhiaVocabularyTerm };
13
+
14
+ //# sourceMappingURL=useGetAridhiaVocabularyTerm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetAridhiaVocabularyTerm.js","names":[],"sources":["../../src/aridhia-queries/useGetAridhiaVocabularyTerm.ts"],"sourcesContent":["import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'\nimport { PersonalisationApi } from '@sage-bionetworks/aridhia-client/generated/apis'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { AridhiaKeyFactory } from './AridhiaKeyFactory'\nimport { AridhiaError, useAridhiaQuery } from './useAridhiaQuery'\n\n/** Vocabulary term holding the confirmation shown after a data access request is submitted. */\nexport const DAR_MESSAGE_VOCABULARY_CODE = 'data-access-request-message'\n\n/**\n * A FAIR vocabulary term, as returned by `GET /vocabularies/{code}`. The OpenAPI spec types the\n * response as a bare `object`, so the generated client returns `object`; this type documents\n * the properties the portal relies on.\n */\nexport type AridhiaVocabularyTerm = {\n code: string\n name: string\n /** How `value` should be interpreted, e.g. `markdown`. */\n grouping?: string\n value: string\n}\n\n/** A single FAIR vocabulary term (UI copy that C-Path maintains in the FAIR portal) by code. */\nexport function useGetAridhiaVocabularyTerm(\n code: string,\n options?: Partial<\n UseQueryOptions<AridhiaVocabularyTerm, AridhiaError, AridhiaVocabularyTerm>\n >,\n): UseQueryResult<AridhiaVocabularyTerm, AridhiaError> {\n const { accessToken: synapseAccessToken } = useSynapseContext()\n const keyFactory = new AridhiaKeyFactory(synapseAccessToken)\n\n return useAridhiaQuery<AridhiaVocabularyTerm>(\n keyFactory.vocabularyTerm(code),\n async configuration => {\n const personalisationApi = new PersonalisationApi(configuration)\n return (await personalisationApi.fairVocabulariesCodeGet({\n code,\n })) as AridhiaVocabularyTerm\n },\n options,\n )\n}\n"],"mappings":";;;;;AAOA,IAAa,IAA8B;AAgB3C,SAAgB,EACd,GACA,GAGqD;CACrD,IAAM,EAAE,aAAa,MAAuB,EAAkB;CAG9D,OAAO,EACL,IAHqB,EAAkB,CAGvC,EAAW,eAAe,CAAI,GAC9B,OAAM,MAEI,MAAM,IADiB,EAAmB,CACpC,EAAmB,wBAAwB,EACvD,QACF,CAAC,GAEH,CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"AccessApprovalCheckMark.d.ts","sourceRoot":"","sources":["../../../src/components/AccessRequirementList/AccessApprovalCheckMark.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAkB,OAAO,EAAY,MAAM,eAAe,CAAA;AAIjE,oBAAY,qBAAqB;IAC/B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,EAAE,CAAC,EAAE,OAAO,CAAA;CACb,CAAA;AAcD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,MAAM,EACN,EAAE,GACH,EAAE,cAAc,2CAmDhB"}
1
+ {"version":3,"file":"AccessApprovalCheckMark.d.ts","sourceRoot":"","sources":["../../../src/components/AccessRequirementList/AccessApprovalCheckMark.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAkB,OAAO,EAAY,MAAM,eAAe,CAAA;AAIjE,oBAAY,qBAAqB;IAC/B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,EAAE,CAAC,EAAE,OAAO,CAAA;CACb,CAAA;AAcD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,MAAM,EACN,EAAE,GACH,EAAE,cAAc,2CAmDhB"}
@@ -3,7 +3,9 @@ import t from "../utils/ConditionalWrapper.js";
3
3
  import { Avatar as n, styled as r, useTheme as i } from "@mui/material";
4
4
  import { Fragment as a, jsx as o } from "react/jsx-runtime";
5
5
  import s from "@mui/material/Skeleton";
6
- import { AccessTimeFilled as c, CheckTwoTone as l, LockTwoTone as u } from "@mui/icons-material";
6
+ import c from "@mui/icons-material/LockTwoTone";
7
+ import l from "@mui/icons-material/AccessTimeFilled";
8
+ import u from "@mui/icons-material/CheckTwoTone";
7
9
  //#region src/components/AccessRequirementList/AccessApprovalCheckMark.tsx
8
10
  var d = /* @__PURE__ */ function(e) {
9
11
  return e.COMPLETE = "COMPLETE", e.PENDING = "PENDING", e.LOCKED = "LOCKED", e.LOADING = "LOADING", e;
@@ -16,13 +18,13 @@ function m({ status: n, sx: r }) {
16
18
  let d = i(), m, h = /* @__PURE__ */ o(a, {});
17
19
  switch (n) {
18
20
  case "COMPLETE":
19
- m = d.palette.success.main, h = /* @__PURE__ */ o(l, { sx: f });
21
+ m = d.palette.success.main, h = /* @__PURE__ */ o(u, { sx: f });
20
22
  break;
21
23
  case "PENDING":
22
- m = "#395979", h = /* @__PURE__ */ o(c, { sx: f });
24
+ m = "#395979", h = /* @__PURE__ */ o(l, { sx: f });
23
25
  break;
24
26
  case "LOCKED":
25
- m = "#FF9B00", h = /* @__PURE__ */ o(u, { sx: f });
27
+ m = "#FF9B00", h = /* @__PURE__ */ o(c, { sx: f });
26
28
  break;
27
29
  default: break;
28
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AccessApprovalCheckMark.js","names":[],"sources":["../../../src/components/AccessRequirementList/AccessApprovalCheckMark.tsx"],"sourcesContent":["import ConditionalWrapper from '@/components/utils/ConditionalWrapper'\nimport { spreadSx } from '@/theme/spreadSx'\nimport {\n AccessTimeFilled,\n CheckTwoTone,\n LockTwoTone,\n} from '@mui/icons-material'\nimport { Avatar, styled, SxProps, useTheme } from '@mui/material'\nimport Skeleton from '@mui/material/Skeleton'\nimport { ReactNode } from 'react'\n\nexport enum RequirementItemStatus {\n COMPLETE = 'COMPLETE',\n PENDING = 'PENDING',\n LOCKED = 'LOCKED',\n LOADING = 'LOADING',\n}\n\nexport type CheckMarkProps = {\n status: RequirementItemStatus\n sx?: SxProps\n}\n\nconst iconSx: SxProps = {\n width: '20px',\n}\n\nconst AccessApprovalCheckMarkContainer = styled(Avatar, {\n label: 'AccessApprovalCheckMarkContainer',\n})({\n color: 'white',\n height: '30px',\n width: '30px',\n})\n\n/**\n * Renders an icon for a RequirementItem based on the status prop.\n */\nexport default function AccessApprovalCheckMark({\n status,\n sx,\n}: CheckMarkProps) {\n const theme = useTheme()\n let backgroundColor: string | undefined = undefined\n let icon: ReactNode = <></>\n\n switch (status) {\n case RequirementItemStatus.COMPLETE:\n backgroundColor = theme.palette.success.main\n icon = <CheckTwoTone sx={iconSx} />\n break\n case RequirementItemStatus.PENDING:\n // TODO: Use theme to provide this color\n // Should always be Sapphire 500, not the primary color of the current app\n backgroundColor = '#395979'\n icon = <AccessTimeFilled sx={iconSx} />\n break\n case RequirementItemStatus.LOCKED:\n // TODO: Use theme to provide this color\n backgroundColor = '#FF9B00'\n icon = <LockTwoTone sx={iconSx} />\n break\n case RequirementItemStatus.LOADING:\n default:\n break\n }\n\n return (\n <AccessApprovalCheckMarkContainer\n data-testid={`AccessApprovalCheckMark-${status}`}\n sx={spreadSx(\n {\n backgroundColor: backgroundColor,\n },\n sx,\n )}\n >\n <ConditionalWrapper\n condition={status === RequirementItemStatus.LOADING}\n wrapper={Skeleton}\n wrapperProps={{\n variant: 'circular',\n sx: {\n minHeight: '30px',\n minWidth: '30px',\n },\n }}\n >\n {icon}\n </ConditionalWrapper>\n </AccessApprovalCheckMarkContainer>\n )\n}\n"],"mappings":";;;;;;;AAWA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,WAAA,YACA,EAAA,UAAA,WACA,EAAA,SAAA,UACA,EAAA,UAAA;AACF,EAAA,CAAA,CAAA,GAOM,IAAkB,EACtB,OAAO,OACT,GAEM,IAAmC,EAAO,GAAQ,EACtD,OAAO,mCACT,CAAC,EAAE;CACD,OAAO;CACP,QAAQ;CACR,OAAO;AACT,CAAC;AAKD,SAAwB,EAAwB,EAC9C,WACA,SACiB;CACjB,IAAM,IAAQ,EAAS,GACnB,GACA,IAAkB,kBAAA,GAAA,CAAI,CAAA;CAE1B,QAAQ,GAAR;EACE,KAAA;GAEE,AADA,IAAkB,EAAM,QAAQ,QAAQ,MACxC,IAAO,kBAAC,GAAD,EAAc,IAAI,EAAS,CAAA;GAClC;EACF,KAAA;GAIE,AADA,IAAkB,WAClB,IAAO,kBAAC,GAAD,EAAkB,IAAI,EAAS,CAAA;GACtC;EACF,KAAA;GAGE,AADA,IAAkB,WAClB,IAAO,kBAAC,GAAD,EAAa,IAAI,EAAS,CAAA;GACjC;EAEF,SACE;CACJ;CAEA,OACE,kBAAC,GAAD;EACE,eAAa,2BAA2B;EACxC,IAAI,EACF,EACmB,mBACnB,GACA,CACF;YAEA,kBAAC,GAAD;GACE,WAAW,MAAA;GACX,SAAS;GACT,cAAc;IACZ,SAAS;IACT,IAAI;KACF,WAAW;KACX,UAAU;IACZ;GACF;aAEC;EACiB,CAAA;CACY,CAAA;AAEtC"}
1
+ {"version":3,"file":"AccessApprovalCheckMark.js","names":[],"sources":["../../../src/components/AccessRequirementList/AccessApprovalCheckMark.tsx"],"sourcesContent":["import ConditionalWrapper from '@/components/utils/ConditionalWrapper'\nimport { spreadSx } from '@/theme/spreadSx'\nimport AccessTimeFilled from '@mui/icons-material/AccessTimeFilled'\nimport CheckTwoTone from '@mui/icons-material/CheckTwoTone'\nimport LockTwoTone from '@mui/icons-material/LockTwoTone'\nimport { Avatar, styled, SxProps, useTheme } from '@mui/material'\nimport Skeleton from '@mui/material/Skeleton'\nimport { ReactNode } from 'react'\n\nexport enum RequirementItemStatus {\n COMPLETE = 'COMPLETE',\n PENDING = 'PENDING',\n LOCKED = 'LOCKED',\n LOADING = 'LOADING',\n}\n\nexport type CheckMarkProps = {\n status: RequirementItemStatus\n sx?: SxProps\n}\n\nconst iconSx: SxProps = {\n width: '20px',\n}\n\nconst AccessApprovalCheckMarkContainer = styled(Avatar, {\n label: 'AccessApprovalCheckMarkContainer',\n})({\n color: 'white',\n height: '30px',\n width: '30px',\n})\n\n/**\n * Renders an icon for a RequirementItem based on the status prop.\n */\nexport default function AccessApprovalCheckMark({\n status,\n sx,\n}: CheckMarkProps) {\n const theme = useTheme()\n let backgroundColor: string | undefined = undefined\n let icon: ReactNode = <></>\n\n switch (status) {\n case RequirementItemStatus.COMPLETE:\n backgroundColor = theme.palette.success.main\n icon = <CheckTwoTone sx={iconSx} />\n break\n case RequirementItemStatus.PENDING:\n // TODO: Use theme to provide this color\n // Should always be Sapphire 500, not the primary color of the current app\n backgroundColor = '#395979'\n icon = <AccessTimeFilled sx={iconSx} />\n break\n case RequirementItemStatus.LOCKED:\n // TODO: Use theme to provide this color\n backgroundColor = '#FF9B00'\n icon = <LockTwoTone sx={iconSx} />\n break\n case RequirementItemStatus.LOADING:\n default:\n break\n }\n\n return (\n <AccessApprovalCheckMarkContainer\n data-testid={`AccessApprovalCheckMark-${status}`}\n sx={spreadSx(\n {\n backgroundColor: backgroundColor,\n },\n sx,\n )}\n >\n <ConditionalWrapper\n condition={status === RequirementItemStatus.LOADING}\n wrapper={Skeleton}\n wrapperProps={{\n variant: 'circular',\n sx: {\n minHeight: '30px',\n minWidth: '30px',\n },\n }}\n >\n {icon}\n </ConditionalWrapper>\n </AccessApprovalCheckMarkContainer>\n )\n}\n"],"mappings":";;;;;;;;;AASA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,WAAA,YACA,EAAA,UAAA,WACA,EAAA,SAAA,UACA,EAAA,UAAA;AACF,EAAA,CAAA,CAAA,GAOM,IAAkB,EACtB,OAAO,OACT,GAEM,IAAmC,EAAO,GAAQ,EACtD,OAAO,mCACT,CAAC,EAAE;CACD,OAAO;CACP,QAAQ;CACR,OAAO;AACT,CAAC;AAKD,SAAwB,EAAwB,EAC9C,WACA,SACiB;CACjB,IAAM,IAAQ,EAAS,GACnB,GACA,IAAkB,kBAAA,GAAA,CAAI,CAAA;CAE1B,QAAQ,GAAR;EACE,KAAA;GAEE,AADA,IAAkB,EAAM,QAAQ,QAAQ,MACxC,IAAO,kBAAC,GAAD,EAAc,IAAI,EAAS,CAAA;GAClC;EACF,KAAA;GAIE,AADA,IAAkB,WAClB,IAAO,kBAAC,GAAD,EAAkB,IAAI,EAAS,CAAA;GACtC;EACF,KAAA;GAGE,AADA,IAAkB,WAClB,IAAO,kBAAC,GAAD,EAAa,IAAI,EAAS,CAAA;GACjC;EAEF,SACE;CACJ;CAEA,OACE,kBAAC,GAAD;EACE,eAAa,2BAA2B;EACxC,IAAI,EACF,EACmB,mBACnB,GACA,CACF;YAEA,kBAAC,GAAD;GACE,WAAW,MAAA;GACX,SAAS;GACT,cAAc;IACZ,SAAS;IACT,IAAI;KACF,WAAW;KACX,UAAU;IACZ;GACF;aAEC;EACiB,CAAA;CACY,CAAA;AAEtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AccessRequirementList.js","names":[],"sources":["../../../src/components/AccessRequirementList/AccessRequirementList.tsx"],"sourcesContent":["import {\n useGetAccessRequirementsForEntity,\n useGetAccessRequirementsForTeam,\n useSortAccessRequirementIdsByCompletion,\n} from '@/synapse-queries'\nimport {\n storeRedirectURLForOneSageLoginAndGotoURL,\n useSynapseContext,\n} from '@/utils'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n styled,\n Typography,\n TypographyProps,\n} from '@mui/material'\nimport {\n AccessRequirement,\n ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n LOCK_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n Renewal,\n Request,\n RestrictableObjectType,\n SELF_SIGN_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n} from '@sage-bionetworks/synapse-types'\nimport noop from 'lodash-es/noop'\nimport groupBy from 'lodash-es/groupBy'\nimport { ReactNode, useMemo, useState } from 'react'\nimport { DialogBaseTitle } from '../DialogBase'\nimport { EntityLink } from '../EntityLink'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { displayToast } from '../ToastMessage/ToastMessage'\nimport UserOrTeamBadge from '../UserOrTeamBadge'\nimport { AccessRequirementListItem } from './AccessRequirementListItem'\nimport { useShowAccessRequirementWikiInWizard } from './AccessRequirementListUtils'\nimport { hasAccessorRequirement } from '../SetBasicAccessRequirementFields/GovernanceUtils'\nimport {\n isRequestableAccessRequirement,\n RequestableAccessRequirement,\n} from '@/utils/types/RequestableAccessRequirement'\nimport {\n getFirstRequestStep,\n getNextRequestStep,\n getPreviousRequestStep,\n RequestDataStep,\n} from './RequestDataStep'\nimport CancelRequestDataAccess from './ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess'\nimport DataAccessRequestAccessorsFilesForm from './ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm'\nimport JsonSchemaRequestWizard from './JsonSchemaAccessRequirementRequestFlow/JsonSchemaRequestWizard'\nimport RequestDataAccessSuccess from './ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess'\nimport ResearchProjectForm from './ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm'\nimport ReviewDucStep from './ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep'\nimport EDucPreviewStep from './ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep'\nimport ManualUploadDucStep from './ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep'\nimport SignatureStatusStep from './ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep'\nimport AuthenticatedRequirement from './RequirementItem/AuthenticatedRequirement'\nimport CertificationRequirement from './RequirementItem/CertificationRequirement'\nimport TwoFactorAuthEnabledRequirement from './RequirementItem/TwoFactorAuthEnabledRequirement'\nimport ValidationRequirement from './RequirementItem/ValidationRequirement'\nimport { useOneSageURL } from '@/utils/hooks'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\n\nexport type AccessRequirementListProps = {\n /* if provided, will show this instead of the entity information */\n numberOfFilesAffected?: number\n /* if provided, will show this instead of the entity information or numberOfFilesAffected */\n requestObjectName?: string\n /* If true, this component will render in its own modal */\n renderAsModal?: boolean\n /* Overrides the default dialog title. This only applies if renderAsModal is true */\n dialogTitle?: string\n /* Called when the user rejects the terms of a listed AccessRequirement. If renderAsModal is true, this is also called when the user closes the modal. */\n onHide: () => void\n /* Displays the provided list of access requirements, instead of the ones fetched using the subject ID */\n accessRequirementFromProps?: Array<AccessRequirement>\n /* If provided, displays these actions on when viewing all ARs */\n customDialogActions?: ReactNode\n /* Optional callback invoked if a submission is created via this component */\n onSubmissionCreated?: (submissionId: string) => void\n /**\n * Optionally open the wizard directly at a specific ManagedACTAccessRequirement step instead of\n * the default access requirement list. Useful for deep-link routes and for resuming an in-progress\n * eDUC signature flow (jump straight to `RequestDataStep.SIGNATURE_STATUS`).\n *\n * The `accessRequirement` is bundled with the step because every wizard step\n * requires it — passing them together prevents entering a step with no AR selected.\n *\n * Does not affect the traditional-DUC (non-eDUC) flow, which is entered from the AR list.\n */\n initialWizardEntry?: {\n step: RequestDataStep\n accessRequirement: RequestableAccessRequirement\n }\n} & (\n | {\n /**\n * Fetches the access requirements associated with an entity\n * @deprecated Please use `subjectId` and `subjectType`\n */\n entityId: string\n }\n | {\n /**\n * Fetches the access requirements associated with a team\n * @deprecated Please use `subjectId` and `subjectType`\n */\n teamId: string\n }\n | {\n /* The ID of the object for which access is being requested */\n subjectId?: string\n /* The type of the object for which access is being requested */\n subjectType?: RestrictableObjectType\n }\n)\n\nconst SUPPORTED_ACCESS_REQUIREMENT_TYPES_SORTED: AccessRequirement['concreteType'][] =\n [\n SELF_SIGN_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n LOCK_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n ]\n\nconst SUPPORTED_ACCESS_REQUIREMENT_TYPES = new Set<\n AccessRequirement['concreteType']\n>(SUPPORTED_ACCESS_REQUIREMENT_TYPES_SORTED)\n\nconst DialogSubsectionHeader: StyledComponent<TypographyProps> = styled(\n Typography,\n {\n label: 'DialogSubsectionHeader',\n },\n)(({ theme }) => ({\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(2),\n paddingBottom: theme.spacing(1),\n fontSize: '18px',\n fontWeight: 'bold',\n borderBottom: '1px solid',\n borderColor: theme.palette.grey['200'],\n}))\n\nexport const checkHasUnsupportedRequirement = (\n accessRequirements: Array<AccessRequirement>,\n): boolean => {\n return accessRequirements.some(isARUnsupported)\n}\n\nconst isARUnsupported = (accessRequirement: AccessRequirement) => {\n return !SUPPORTED_ACCESS_REQUIREMENT_TYPES.has(accessRequirement.concreteType)\n}\n\nexport type RequestDataStepCallbackArgs = {\n step: RequestDataStep\n accessRequirement?: RequestableAccessRequirement\n researchProjectId?: string\n dataAccessRequest?: Request | Renewal\n}\n\n/**\n * The AccessRequirementListV2 component renders a set of {@link AccessRequirement}s (either pre-defined, or those applied\n * to an entity, based on provided props).\n *\n * The component shows the user the approval status of each AR and provides a workflow for accepting the terms of or\n * creating a submission for any of the Access Requirements.\n *\n * ### Wizard entry\n *\n * By default the component opens on the AR list ({@link RequestDataStep.SHOW_ALL_ARS}) and the user\n * navigates into the ManagedACT wizard by clicking Request Access on a specific AR.\n *\n * To open the wizard directly at a specific step (for example, to resume an in-progress eDUC signature\n * flow or to serve a deep-link route), pass {@link AccessRequirementListProps.initialWizardEntry} with\n * the target step and the {@link RequestableAccessRequirement} the wizard should operate on.\n */\nexport default function AccessRequirementList(\n props: AccessRequirementListProps,\n) {\n const {\n onHide = noop,\n renderAsModal = false,\n numberOfFilesAffected,\n requestObjectName,\n customDialogActions,\n onSubmissionCreated = noop,\n initialWizardEntry,\n } = props\n\n const isShowingRequirementsForEntity = 'entityId' in props\n const isShowingRequirementsForTeam = 'teamId' in props\n const isShowingRequirementsFromProps = 'accessRequirementFromProps' in props\n\n const subjectId =\n 'subjectId' in props\n ? props.subjectId\n : isShowingRequirementsForEntity\n ? props.entityId\n : isShowingRequirementsForTeam\n ? props.teamId\n : undefined\n\n const subjectType =\n 'subjectType' in props\n ? props.subjectType\n : isShowingRequirementsForEntity\n ? RestrictableObjectType.ENTITY\n : isShowingRequirementsForTeam\n ? RestrictableObjectType.TEAM\n : undefined\n\n let { dialogTitle = 'Data Access Request' } = props\n const { isAuthenticated } = useSynapseContext()\n const [requestDataStep, setRequestDataStep] = useState<RequestDataStep>(\n initialWizardEntry?.step ?? RequestDataStep.SHOW_ALL_ARS,\n )\n const oneSageURL = useOneSageURL()\n const [accessRequirementInWizard, setAccessRequirementInWizard] = useState<\n RequestableAccessRequirement | undefined\n >(initialWizardEntry?.accessRequirement)\n const managedACTAccessRequirement =\n accessRequirementInWizard?.concreteType ===\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE\n ? accessRequirementInWizard\n : undefined\n const jsonSchemaAccessRequirement =\n accessRequirementInWizard?.concreteType ===\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE\n ? accessRequirementInWizard\n : undefined\n const [researchProjectId, setResearchProjectId] = useState<string>('')\n const [dataAccessRequest, setDataAccessRequest] = useState<\n Request | Renewal | undefined\n >()\n\n const showAccessRequirementWikiInWizard =\n useShowAccessRequirementWikiInWizard(accessRequirementInWizard)\n\n const { data: fetchedRequirementsForTeam } = useGetAccessRequirementsForTeam(\n subjectId!,\n {\n enabled:\n subjectId !== undefined && subjectType === RestrictableObjectType.TEAM,\n },\n )\n const { data: fetchedRequirementsForEntity } =\n useGetAccessRequirementsForEntity(subjectId!, {\n enabled:\n subjectId !== undefined &&\n subjectType === RestrictableObjectType.ENTITY,\n })\n\n const requirementsFromProps = isShowingRequirementsFromProps\n ? props.accessRequirementFromProps\n : undefined\n\n const accessRequirements =\n requirementsFromProps ??\n fetchedRequirementsForEntity ??\n fetchedRequirementsForTeam\n\n /**\n * Set the initial ordering of the Access Requirements to show complete ARs first. The individual AR Item components\n * retrieve and render status independently, so this data only determines ordering. For this reason, the query data\n * should not be invalidated or updated as the user progresses through the workflow.\n */\n const { data: sortedAccessRequirementIds } =\n useSortAccessRequirementIdsByCompletion(\n (accessRequirements ?? []).map(ar => String(ar.id)),\n {\n enabled: !!accessRequirements,\n // Set the stale time to infinity because we don't want to refetch this and change the order\n staleTime: Infinity,\n },\n )\n\n const sortedGroupedAccessRequirementsByType = useMemo(() => {\n if (accessRequirements && sortedAccessRequirementIds) {\n // SWC-7218: Group by access requirement type\n const groupedAccessRequirementsByType = groupBy(\n accessRequirements,\n 'concreteType',\n )\n const sortedByTypeAndStatus =\n SUPPORTED_ACCESS_REQUIREMENT_TYPES_SORTED.map(type => {\n const arsOfType = groupedAccessRequirementsByType[type]\n if (arsOfType) {\n return sortedAccessRequirementIds.map(\n id => arsOfType.find(ar => id === String(ar.id))!,\n )\n }\n return []\n })\n .flat()\n .filter((item): item is AccessRequirement => item !== undefined)\n return sortedByTypeAndStatus\n }\n return undefined\n }, [accessRequirements, sortedAccessRequirementIds])\n\n const requestDataStepCallback = (props: RequestDataStepCallbackArgs) => {\n const {\n accessRequirement,\n step,\n researchProjectId,\n dataAccessRequest: newDataAccessRequest,\n } = props\n if (accessRequirement) {\n // required for every wizard step\n setAccessRequirementInWizard(accessRequirement)\n }\n if (researchProjectId) {\n setResearchProjectId(researchProjectId)\n }\n if (newDataAccessRequest) {\n setDataAccessRequest(newDataAccessRequest)\n }\n setRequestDataStep(step)\n }\n\n // Each callback is invoked from the step being rendered, so `requestDataStep` is the step being navigated away from\n const goToNextRequestStep = () =>\n requestDataStepCallback({\n step: getNextRequestStep(accessRequirementInWizard!, requestDataStep),\n })\n const goToPreviousRequestStep = () =>\n requestDataStepCallback({\n step: getPreviousRequestStep(accessRequirementInWizard!, requestDataStep),\n })\n\n const anyARsRequireTwoFactorAuth = accessRequirements?.some(\n accessRequirement =>\n isRequestableAccessRequirement(accessRequirement) &&\n accessRequirement.isTwoFaRequired,\n )\n\n const anyARsRequireCertification = accessRequirements?.some(\n accessRequirement =>\n hasAccessorRequirement(accessRequirement) &&\n accessRequirement.isCertifiedUserRequired,\n )\n\n const anyARsRequireProfileValidation = accessRequirements?.some(\n accessRequirement =>\n hasAccessorRequirement(accessRequirement) &&\n accessRequirement.isValidatedProfileRequired,\n )\n\n const requestDetails = useMemo(() => {\n // Prioritize requestObjectName, then the number of files affected, then the entity/team name\n if (requestObjectName) return requestObjectName\n if (numberOfFilesAffected)\n return (\n <>\n <IconSvg icon=\"file\" sx={{ width: '30px' }} /> {numberOfFilesAffected}{' '}\n File(s)\n </>\n )\n if (\n subjectId !== undefined &&\n subjectType === RestrictableObjectType.ENTITY\n ) {\n return <EntityLink entity={subjectId} />\n } else if (subjectType === RestrictableObjectType.TEAM) {\n return <UserOrTeamBadge principalId={subjectId} />\n } else {\n console.warn(\n `Unhandled case for AccessRequirementList requestDetails: ${subjectType}: ${subjectId}`,\n )\n return <></>\n }\n }, [numberOfFilesAffected, requestObjectName, subjectId, subjectType])\n\n const dialogWidth =\n [\n RequestDataStep.UPDATE_ACCESSORS_AND_FILES,\n RequestDataStep.UPDATE_RESEARCH_PROJECT,\n RequestDataStep.REVIEW_DUC,\n RequestDataStep.EDUC_PREVIEW,\n ].includes(requestDataStep) && showAccessRequirementWikiInWizard\n ? 'xl'\n : 'md'\n\n let renderContent = <></>\n switch (requestDataStep) {\n case RequestDataStep.UPDATE_RESEARCH_PROJECT:\n renderContent = (\n <ResearchProjectForm\n managedACTAccessRequirement={managedACTAccessRequirement!}\n onSave={researchProject => {\n requestDataStepCallback({\n step: getNextRequestStep(\n managedACTAccessRequirement!,\n requestDataStep,\n ),\n researchProjectId: researchProject.id,\n })\n }}\n onHide={onHide}\n />\n )\n break\n case RequestDataStep.UPDATE_ACCESSORS_AND_FILES:\n renderContent = (\n <DataAccessRequestAccessorsFilesForm\n researchProjectId={researchProjectId}\n managedACTAccessRequirement={managedACTAccessRequirement!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onCancel={dataAccessRequestInProgress => {\n requestDataStepCallback({\n step: RequestDataStep.PROMPT_CANCEL,\n dataAccessRequest: dataAccessRequestInProgress,\n })\n }}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n onBackClicked={goToPreviousRequestStep}\n onEDucContinue={\n managedACTAccessRequirement?.eDucTemplateId\n ? goToNextRequestStep\n : undefined\n }\n />\n )\n break\n case RequestDataStep.REVIEW_DUC:\n renderContent = (\n <ReviewDucStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n onHide={onHide}\n onBackClicked={goToPreviousRequestStep}\n onCreateDuc={goToNextRequestStep}\n />\n )\n break\n case RequestDataStep.EDUC_PREVIEW:\n renderContent = (\n <EDucPreviewStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n onHide={onHide}\n onBackClicked={goToPreviousRequestStep}\n onSendForSignature={() => {\n // The signature-status step isn't useful right after routing (0 signatures collected,\n // Submit necessarily disabled), so surface a toast and close the wizard. The user can\n // resume from their in-flight requests table when signatures are ready.\n displayToast(\n 'Your DUC has been emailed to your collaborators. You can check signature progress in your access request history.',\n 'info',\n {\n primaryButtonConfig: {\n text: 'View Request History',\n // Resolves to a same-origin path on synapse.org and to the absolute synapse.org URL when embedded in a portal.\n href: `${getEndpoint(BackendDestinationEnum.PORTAL_ENDPOINT)}RequestHistory:default`,\n },\n dismissOnPrimaryButtonClick: true,\n },\n )\n onHide()\n }}\n onManualUpload={goToNextRequestStep}\n />\n )\n break\n case RequestDataStep.MANUAL_UPLOAD_DUC:\n renderContent = (\n <ManualUploadDucStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onBackClicked={goToPreviousRequestStep}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n />\n )\n break\n case RequestDataStep.SIGNATURE_STATUS:\n renderContent = (\n <SignatureStatusStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onBackClicked={() => {\n // Back from SIGNATURE_STATUS returns to the first step of the request so the user can\n // modify the request. EDUC_PREVIEW is skipped because Send-for-signature toasts and\n // closes the wizard, so users only reach this step from the row-level \"Review\n // Signatures and Submit\" entry point.\n requestDataStepCallback({\n step: getFirstRequestStep(accessRequirementInWizard!),\n })\n }}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n />\n )\n break\n case RequestDataStep.SCHEMA_DRIVEN_REQUEST:\n renderContent = (\n <JsonSchemaRequestWizard\n accessRequirement={jsonSchemaAccessRequirement!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onCancel={dataAccessRequestInProgress => {\n requestDataStepCallback({\n step: RequestDataStep.PROMPT_CANCEL,\n dataAccessRequest: dataAccessRequestInProgress,\n })\n }}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n onEDucContinue={\n jsonSchemaAccessRequirement?.eDucTemplateId\n ? goToNextRequestStep\n : undefined\n }\n />\n )\n break\n case RequestDataStep.PROMPT_CANCEL:\n renderContent = (\n <CancelRequestDataAccess\n modifiedDataAccessRequest={dataAccessRequest}\n onHide={onHide} // for closing dialogs\n />\n )\n break\n case RequestDataStep.PROMPT_LOGIN:\n // Send to OneSage login page\n storeRedirectURLForOneSageLoginAndGotoURL(oneSageURL.toString())\n dialogTitle = 'Please Log In'\n renderContent = <></>\n break\n case RequestDataStep.COMPLETE:\n renderContent = <RequestDataAccessSuccess onHide={onHide} />\n break\n case RequestDataStep.SHOW_ALL_ARS:\n default:\n renderContent = (\n <>\n {renderAsModal ? (\n <DialogBaseTitle title={dialogTitle} onCancel={onHide} />\n ) : (\n <Typography variant=\"h5\" sx={{ mb: 2 }}>\n {dialogTitle}\n </Typography>\n )}\n <DialogContent>\n <DialogSubsectionHeader variant={'h4'} sx={{ mt: 0 }}>\n What is this request for?\n </DialogSubsectionHeader>\n <Typography variant={'body1'} component={'span'}>\n {requestDetails}\n </Typography>\n <DialogSubsectionHeader variant={'h4'}>\n What do I need to do?\n </DialogSubsectionHeader>\n <AuthenticatedRequirement />\n {anyARsRequireCertification && <CertificationRequirement />}\n {anyARsRequireProfileValidation && <ValidationRequirement />}\n {anyARsRequireTwoFactorAuth && <TwoFactorAuthEnabledRequirement />}\n {sortedGroupedAccessRequirementsByType?.map(accessRequirement => {\n return (\n <AccessRequirementListItem\n key={accessRequirement.id}\n accessRequirement={accessRequirement}\n subjectId={subjectId}\n subjectType={subjectType}\n onHide={onHide}\n onRequestAccess={accessRequirement => {\n const nextStep = isAuthenticated\n ? getFirstRequestStep(accessRequirement)\n : RequestDataStep.PROMPT_LOGIN\n requestDataStepCallback({\n accessRequirement,\n step: nextStep,\n })\n }}\n />\n )\n })}\n </DialogContent>\n <DialogActions>\n {customDialogActions ? (\n customDialogActions\n ) : (\n <>\n {renderAsModal && (\n <Button variant=\"contained\" onClick={onHide}>\n Close\n </Button>\n )}\n </>\n )}\n </DialogActions>\n </>\n )\n }\n\n if (renderAsModal) {\n return (\n <Dialog maxWidth={dialogWidth} fullWidth open={true} onClose={onHide}>\n {renderContent}\n </Dialog>\n )\n }\n\n return <>{renderContent}</>\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AccessRequirementList.js","names":[],"sources":["../../../src/components/AccessRequirementList/AccessRequirementList.tsx"],"sourcesContent":["import {\n useGetAccessRequirementsForEntity,\n useGetAccessRequirementsForTeam,\n useSortAccessRequirementIdsByCompletion,\n} from '@/synapse-queries'\nimport {\n storeRedirectURLForOneSageLoginAndGotoURL,\n useSynapseContext,\n} from '@/utils'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n styled,\n Typography,\n TypographyProps,\n} from '@mui/material'\nimport {\n AccessRequirement,\n ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n LOCK_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n Renewal,\n Request,\n RestrictableObjectType,\n SELF_SIGN_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n} from '@sage-bionetworks/synapse-types'\nimport noop from 'lodash-es/noop'\nimport groupBy from 'lodash-es/groupBy'\nimport { ReactNode, useMemo, useState } from 'react'\nimport { DialogBaseTitle } from '../DialogBase'\nimport { EntityLink } from '../EntityLink'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { displayToast } from '../ToastMessage/ToastMessage'\nimport UserOrTeamBadge from '../UserOrTeamBadge'\nimport { AccessRequirementListItem } from './AccessRequirementListItem'\nimport { useShowAccessRequirementWikiInWizard } from './AccessRequirementListUtils'\nimport { hasAccessorRequirement } from '../SetBasicAccessRequirementFields/GovernanceUtils'\nimport {\n isRequestableAccessRequirement,\n RequestableAccessRequirement,\n} from '@/utils/types/RequestableAccessRequirement'\nimport {\n getFirstRequestStep,\n getNextRequestStep,\n getPreviousRequestStep,\n RequestDataStep,\n} from './RequestDataStep'\nimport CancelRequestDataAccess from './ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess'\nimport DataAccessRequestAccessorsFilesForm from './ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm'\nimport JsonSchemaRequestWizard from './JsonSchemaAccessRequirementRequestFlow/JsonSchemaRequestWizard'\nimport RequestDataAccessSuccess from './ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess'\nimport ResearchProjectForm from './ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm'\nimport ReviewDucStep from './ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep'\nimport EDucPreviewStep from './ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep'\nimport ManualUploadDucStep from './ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep'\nimport SignatureStatusStep from './ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep'\nimport AuthenticatedRequirement from './RequirementItem/AuthenticatedRequirement'\nimport CertificationRequirement from './RequirementItem/CertificationRequirement'\nimport TwoFactorAuthEnabledRequirement from './RequirementItem/TwoFactorAuthEnabledRequirement'\nimport ValidationRequirement from './RequirementItem/ValidationRequirement'\nimport { useOneSageURL } from '@/utils/hooks'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\n\nexport type AccessRequirementListProps = {\n /* if provided, will show this instead of the entity information */\n numberOfFilesAffected?: number\n /* if provided, will show this instead of the entity information or numberOfFilesAffected */\n requestObjectName?: string\n /* If true, this component will render in its own modal */\n renderAsModal?: boolean\n /* Overrides the default dialog title. This only applies if renderAsModal is true */\n dialogTitle?: string\n /* Called when the user rejects the terms of a listed AccessRequirement. If renderAsModal is true, this is also called when the user closes the modal. */\n onHide: () => void\n /* Displays the provided list of access requirements, instead of the ones fetched using the subject ID */\n accessRequirementFromProps?: Array<AccessRequirement>\n /* If provided, displays these actions on when viewing all ARs */\n customDialogActions?: ReactNode\n /* Optional callback invoked if a submission is created via this component */\n onSubmissionCreated?: (submissionId: string) => void\n /**\n * Optionally open the wizard directly at a specific ManagedACTAccessRequirement step instead of\n * the default access requirement list. Useful for deep-link routes and for resuming an in-progress\n * eDUC signature flow (jump straight to `RequestDataStep.SIGNATURE_STATUS`).\n *\n * The `accessRequirement` is bundled with the step because every wizard step\n * requires it — passing them together prevents entering a step with no AR selected.\n *\n * Does not affect the traditional-DUC (non-eDUC) flow, which is entered from the AR list.\n */\n initialWizardEntry?: {\n step: RequestDataStep\n accessRequirement: RequestableAccessRequirement\n }\n} & (\n | {\n /**\n * Fetches the access requirements associated with an entity\n * @deprecated Please use `subjectId` and `subjectType`\n */\n entityId: string\n }\n | {\n /**\n * Fetches the access requirements associated with a team\n * @deprecated Please use `subjectId` and `subjectType`\n */\n teamId: string\n }\n | {\n /* The ID of the object for which access is being requested */\n subjectId?: string\n /* The type of the object for which access is being requested */\n subjectType?: RestrictableObjectType\n }\n)\n\nconst SUPPORTED_ACCESS_REQUIREMENT_TYPES_SORTED: AccessRequirement['concreteType'][] =\n [\n SELF_SIGN_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n LOCK_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n ]\n\nconst SUPPORTED_ACCESS_REQUIREMENT_TYPES = new Set<\n AccessRequirement['concreteType']\n>(SUPPORTED_ACCESS_REQUIREMENT_TYPES_SORTED)\n\nconst DialogSubsectionHeader: StyledComponent<TypographyProps> = styled(\n Typography,\n {\n label: 'DialogSubsectionHeader',\n },\n)(({ theme }) => ({\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(2),\n paddingBottom: theme.spacing(1),\n fontSize: '18px',\n fontWeight: 'bold',\n borderBottom: '1px solid',\n borderColor: theme.palette.grey['200'],\n}))\n\nexport const checkHasUnsupportedRequirement = (\n accessRequirements: Array<AccessRequirement>,\n): boolean => {\n return accessRequirements.some(isARUnsupported)\n}\n\nconst isARUnsupported = (accessRequirement: AccessRequirement) => {\n return !SUPPORTED_ACCESS_REQUIREMENT_TYPES.has(accessRequirement.concreteType)\n}\n\nexport type RequestDataStepCallbackArgs = {\n step: RequestDataStep\n accessRequirement?: RequestableAccessRequirement\n researchProjectId?: string\n dataAccessRequest?: Request | Renewal\n}\n\n/**\n * The AccessRequirementListV2 component renders a set of {@link AccessRequirement}s (either pre-defined, or those applied\n * to an entity, based on provided props).\n *\n * The component shows the user the approval status of each AR and provides a workflow for accepting the terms of or\n * creating a submission for any of the Access Requirements.\n *\n * ### Wizard entry\n *\n * By default the component opens on the AR list ({@link RequestDataStep.SHOW_ALL_ARS}) and the user\n * navigates into the ManagedACT wizard by clicking Request Access on a specific AR.\n *\n * To open the wizard directly at a specific step (for example, to resume an in-progress eDUC signature\n * flow or to serve a deep-link route), pass {@link AccessRequirementListProps.initialWizardEntry} with\n * the target step and the {@link RequestableAccessRequirement} the wizard should operate on.\n */\nexport default function AccessRequirementList(\n props: AccessRequirementListProps,\n) {\n const {\n onHide = noop,\n renderAsModal = false,\n numberOfFilesAffected,\n requestObjectName,\n customDialogActions,\n onSubmissionCreated = noop,\n initialWizardEntry,\n } = props\n\n const isShowingRequirementsForEntity = 'entityId' in props\n const isShowingRequirementsForTeam = 'teamId' in props\n const isShowingRequirementsFromProps = 'accessRequirementFromProps' in props\n\n const subjectId =\n 'subjectId' in props\n ? props.subjectId\n : isShowingRequirementsForEntity\n ? props.entityId\n : isShowingRequirementsForTeam\n ? props.teamId\n : undefined\n\n const subjectType =\n 'subjectType' in props\n ? props.subjectType\n : isShowingRequirementsForEntity\n ? RestrictableObjectType.ENTITY\n : isShowingRequirementsForTeam\n ? RestrictableObjectType.TEAM\n : undefined\n\n let { dialogTitle = 'Data Access Request' } = props\n const { isAuthenticated } = useSynapseContext()\n const [requestDataStep, setRequestDataStep] = useState<RequestDataStep>(\n initialWizardEntry?.step ?? RequestDataStep.SHOW_ALL_ARS,\n )\n const oneSageURL = useOneSageURL()\n const [accessRequirementInWizard, setAccessRequirementInWizard] = useState<\n RequestableAccessRequirement | undefined\n >(initialWizardEntry?.accessRequirement)\n const managedACTAccessRequirement =\n accessRequirementInWizard?.concreteType ===\n MANAGED_ACT_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE\n ? accessRequirementInWizard\n : undefined\n const jsonSchemaAccessRequirement =\n accessRequirementInWizard?.concreteType ===\n JSON_SCHEMA_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE\n ? accessRequirementInWizard\n : undefined\n const [researchProjectId, setResearchProjectId] = useState<string>('')\n const [dataAccessRequest, setDataAccessRequest] = useState<\n Request | Renewal | undefined\n >()\n\n const showAccessRequirementWikiInWizard =\n useShowAccessRequirementWikiInWizard(accessRequirementInWizard)\n\n const { data: fetchedRequirementsForTeam } = useGetAccessRequirementsForTeam(\n subjectId!,\n {\n enabled:\n subjectId !== undefined && subjectType === RestrictableObjectType.TEAM,\n },\n )\n const { data: fetchedRequirementsForEntity } =\n useGetAccessRequirementsForEntity(subjectId!, {\n enabled:\n subjectId !== undefined &&\n subjectType === RestrictableObjectType.ENTITY,\n })\n\n const requirementsFromProps = isShowingRequirementsFromProps\n ? props.accessRequirementFromProps\n : undefined\n\n const accessRequirements =\n requirementsFromProps ??\n fetchedRequirementsForEntity ??\n fetchedRequirementsForTeam\n\n /**\n * Set the initial ordering of the Access Requirements to show complete ARs first. The individual AR Item components\n * retrieve and render status independently, so this data only determines ordering. For this reason, the query data\n * should not be invalidated or updated as the user progresses through the workflow.\n */\n const { data: sortedAccessRequirementIds } =\n useSortAccessRequirementIdsByCompletion(\n (accessRequirements ?? []).map(ar => String(ar.id)),\n {\n enabled: !!accessRequirements,\n // Set the stale time to infinity because we don't want to refetch this and change the order\n staleTime: Infinity,\n },\n )\n\n const sortedGroupedAccessRequirementsByType = useMemo(() => {\n if (accessRequirements && sortedAccessRequirementIds) {\n // SWC-7218: Group by access requirement type\n const groupedAccessRequirementsByType = groupBy(\n accessRequirements,\n 'concreteType',\n )\n const sortedByTypeAndStatus =\n SUPPORTED_ACCESS_REQUIREMENT_TYPES_SORTED.map(type => {\n const arsOfType = groupedAccessRequirementsByType[type]\n if (arsOfType) {\n return sortedAccessRequirementIds.map(id =>\n arsOfType.find(ar => id === String(ar.id))!,\n )\n }\n return []\n })\n .flat()\n .filter((item): item is AccessRequirement => item !== undefined)\n return sortedByTypeAndStatus\n }\n return undefined\n }, [accessRequirements, sortedAccessRequirementIds])\n\n const requestDataStepCallback = (props: RequestDataStepCallbackArgs) => {\n const {\n accessRequirement,\n step,\n researchProjectId,\n dataAccessRequest: newDataAccessRequest,\n } = props\n if (accessRequirement) {\n // required for every wizard step\n setAccessRequirementInWizard(accessRequirement)\n }\n if (researchProjectId) {\n setResearchProjectId(researchProjectId)\n }\n if (newDataAccessRequest) {\n setDataAccessRequest(newDataAccessRequest)\n }\n setRequestDataStep(step)\n }\n\n // Each callback is invoked from the step being rendered, so `requestDataStep` is the step being navigated away from\n const goToNextRequestStep = () =>\n requestDataStepCallback({\n step: getNextRequestStep(accessRequirementInWizard!, requestDataStep),\n })\n const goToPreviousRequestStep = () =>\n requestDataStepCallback({\n step: getPreviousRequestStep(accessRequirementInWizard!, requestDataStep),\n })\n\n const anyARsRequireTwoFactorAuth = accessRequirements?.some(\n accessRequirement =>\n isRequestableAccessRequirement(accessRequirement) &&\n accessRequirement.isTwoFaRequired,\n )\n\n const anyARsRequireCertification = accessRequirements?.some(\n accessRequirement =>\n hasAccessorRequirement(accessRequirement) &&\n accessRequirement.isCertifiedUserRequired,\n )\n\n const anyARsRequireProfileValidation = accessRequirements?.some(\n accessRequirement =>\n hasAccessorRequirement(accessRequirement) &&\n accessRequirement.isValidatedProfileRequired,\n )\n\n const requestDetails = useMemo(() => {\n // Prioritize requestObjectName, then the number of files affected, then the entity/team name\n if (requestObjectName) return requestObjectName\n if (numberOfFilesAffected)\n return (\n <>\n <IconSvg icon=\"file\" sx={{ width: '30px' }} /> {numberOfFilesAffected}{' '}\n File(s)\n </>\n )\n if (\n subjectId !== undefined &&\n subjectType === RestrictableObjectType.ENTITY\n ) {\n return <EntityLink entity={subjectId} />\n } else if (subjectType === RestrictableObjectType.TEAM) {\n return <UserOrTeamBadge principalId={subjectId} />\n } else {\n console.warn(\n `Unhandled case for AccessRequirementList requestDetails: ${subjectType}: ${subjectId}`,\n )\n return <></>\n }\n }, [numberOfFilesAffected, requestObjectName, subjectId, subjectType])\n\n const dialogWidth =\n [\n RequestDataStep.UPDATE_ACCESSORS_AND_FILES,\n RequestDataStep.UPDATE_RESEARCH_PROJECT,\n RequestDataStep.REVIEW_DUC,\n RequestDataStep.EDUC_PREVIEW,\n ].includes(requestDataStep) && showAccessRequirementWikiInWizard\n ? 'xl'\n : 'md'\n\n let renderContent = <></>\n switch (requestDataStep) {\n case RequestDataStep.UPDATE_RESEARCH_PROJECT:\n renderContent = (\n <ResearchProjectForm\n managedACTAccessRequirement={managedACTAccessRequirement!}\n onSave={researchProject => {\n requestDataStepCallback({\n step: getNextRequestStep(\n managedACTAccessRequirement!,\n requestDataStep,\n ),\n researchProjectId: researchProject.id,\n })\n }}\n onHide={onHide}\n />\n )\n break\n case RequestDataStep.UPDATE_ACCESSORS_AND_FILES:\n renderContent = (\n <DataAccessRequestAccessorsFilesForm\n researchProjectId={researchProjectId}\n managedACTAccessRequirement={managedACTAccessRequirement!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onCancel={dataAccessRequestInProgress => {\n requestDataStepCallback({\n step: RequestDataStep.PROMPT_CANCEL,\n dataAccessRequest: dataAccessRequestInProgress,\n })\n }}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n onBackClicked={goToPreviousRequestStep}\n onEDucContinue={\n managedACTAccessRequirement?.eDucTemplateId\n ? goToNextRequestStep\n : undefined\n }\n />\n )\n break\n case RequestDataStep.REVIEW_DUC:\n renderContent = (\n <ReviewDucStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n onHide={onHide}\n onBackClicked={goToPreviousRequestStep}\n onCreateDuc={goToNextRequestStep}\n />\n )\n break\n case RequestDataStep.EDUC_PREVIEW:\n renderContent = (\n <EDucPreviewStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n onHide={onHide}\n onBackClicked={goToPreviousRequestStep}\n onSendForSignature={() => {\n // The signature-status step isn't useful right after routing (0 signatures collected,\n // Submit necessarily disabled), so surface a toast and close the wizard. The user can\n // resume from their in-flight requests table when signatures are ready.\n displayToast(\n 'Your DUC has been emailed to your collaborators. You can check signature progress in your access request history.',\n 'info',\n {\n primaryButtonConfig: {\n text: 'View Request History',\n // Resolves to a same-origin path on synapse.org and to the absolute synapse.org URL when embedded in a portal.\n href: `${getEndpoint(BackendDestinationEnum.PORTAL_ENDPOINT)}RequestHistory:default`,\n },\n dismissOnPrimaryButtonClick: true,\n },\n )\n onHide()\n }}\n onManualUpload={goToNextRequestStep}\n />\n )\n break\n case RequestDataStep.MANUAL_UPLOAD_DUC:\n renderContent = (\n <ManualUploadDucStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onBackClicked={goToPreviousRequestStep}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n />\n )\n break\n case RequestDataStep.SIGNATURE_STATUS:\n renderContent = (\n <SignatureStatusStep\n managedACTAccessRequirement={accessRequirementInWizard!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onBackClicked={() => {\n // Back from SIGNATURE_STATUS returns to the first step of the request so the user can\n // modify the request. EDUC_PREVIEW is skipped because Send-for-signature toasts and\n // closes the wizard, so users only reach this step from the row-level \"Review\n // Signatures and Submit\" entry point.\n requestDataStepCallback({\n step: getFirstRequestStep(accessRequirementInWizard!),\n })\n }}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n />\n )\n break\n case RequestDataStep.SCHEMA_DRIVEN_REQUEST:\n renderContent = (\n <JsonSchemaRequestWizard\n accessRequirement={jsonSchemaAccessRequirement!}\n subjectId={subjectId ?? ''}\n subjectType={subjectType ?? RestrictableObjectType.ENTITY}\n onHide={onHide}\n onCancel={dataAccessRequestInProgress => {\n requestDataStepCallback({\n step: RequestDataStep.PROMPT_CANCEL,\n dataAccessRequest: dataAccessRequestInProgress,\n })\n }}\n onSubmissionCreated={submissionId => {\n requestDataStepCallback({ step: RequestDataStep.COMPLETE })\n onSubmissionCreated(submissionId)\n }}\n onEDucContinue={\n jsonSchemaAccessRequirement?.eDucTemplateId\n ? goToNextRequestStep\n : undefined\n }\n />\n )\n break\n case RequestDataStep.PROMPT_CANCEL:\n renderContent = (\n <CancelRequestDataAccess\n modifiedDataAccessRequest={dataAccessRequest}\n onHide={onHide} // for closing dialogs\n />\n )\n break\n case RequestDataStep.PROMPT_LOGIN:\n // Send to OneSage login page\n storeRedirectURLForOneSageLoginAndGotoURL(oneSageURL.toString())\n dialogTitle = 'Please Log In'\n renderContent = <></>\n break\n case RequestDataStep.COMPLETE:\n renderContent = <RequestDataAccessSuccess onHide={onHide} />\n break\n case RequestDataStep.SHOW_ALL_ARS:\n default:\n renderContent = (\n <>\n {renderAsModal ? (\n <DialogBaseTitle title={dialogTitle} onCancel={onHide} />\n ) : (\n <Typography variant=\"h5\" sx={{ mb: 2 }}>\n {dialogTitle}\n </Typography>\n )}\n <DialogContent>\n <DialogSubsectionHeader variant={'h4'} sx={{ mt: 0 }}>\n What is this request for?\n </DialogSubsectionHeader>\n <Typography variant={'body1'} component={'span'}>\n {requestDetails}\n </Typography>\n <DialogSubsectionHeader variant={'h4'}>\n What do I need to do?\n </DialogSubsectionHeader>\n <AuthenticatedRequirement />\n {anyARsRequireCertification && <CertificationRequirement />}\n {anyARsRequireProfileValidation && <ValidationRequirement />}\n {anyARsRequireTwoFactorAuth && <TwoFactorAuthEnabledRequirement />}\n {sortedGroupedAccessRequirementsByType?.map(accessRequirement => {\n return (\n <AccessRequirementListItem\n key={accessRequirement.id}\n accessRequirement={accessRequirement}\n subjectId={subjectId}\n subjectType={subjectType}\n onHide={onHide}\n onRequestAccess={accessRequirement => {\n const nextStep = isAuthenticated\n ? getFirstRequestStep(accessRequirement)\n : RequestDataStep.PROMPT_LOGIN\n requestDataStepCallback({\n accessRequirement,\n step: nextStep,\n })\n }}\n />\n )\n })}\n </DialogContent>\n <DialogActions>\n {customDialogActions ? (\n customDialogActions\n ) : (\n <>\n {renderAsModal && (\n <Button variant=\"contained\" onClick={onHide}>\n Close\n </Button>\n )}\n </>\n )}\n </DialogActions>\n </>\n )\n }\n\n if (renderAsModal) {\n return (\n <Dialog maxWidth={dialogWidth} fullWidth open={true} onClose={onHide}>\n {renderContent}\n </Dialog>\n )\n }\n\n return <>{renderContent}</>\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Box as e, Link as t } from "@mui/material";
2
2
  import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
3
- import { NewReleasesOutlined as a } from "@mui/icons-material";
3
+ import a from "@mui/icons-material/NewReleasesOutlined";
4
4
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.tsx
5
5
  function o(o) {
6
6
  let { accessRequirement: s, isEDucEnabled: c } = o, l = "", u = "";
@@ -1 +1 @@
1
- {"version":3,"file":"AccessorRequirementHelpText.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.tsx"],"sourcesContent":["import { NewReleasesOutlined } from '@mui/icons-material'\nimport { Box, Link } from '@mui/material'\nimport { AccessorStepAccessRequirement } from './requestFlowTypes'\n\nexport type AccessorRequirementHelpTextProps = {\n accessRequirement: AccessorStepAccessRequirement\n isEDucEnabled: boolean\n}\n\nexport default function AccessorRequirementHelpText(\n props: AccessorRequirementHelpTextProps,\n) {\n const { accessRequirement, isEDucEnabled } = props\n let link: string = ''\n let msg: string = ''\n\n if (\n accessRequirement.isCertifiedUserRequired &&\n accessRequirement.isValidatedProfileRequired\n ) {\n link = 'https://help.synapse.org/docs/User-Types.2007072795.html'\n msg =\n 'All data requesters must be certified users and have a validated user profile.'\n } else if (accessRequirement.isCertifiedUserRequired) {\n link =\n 'https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-CertifiedUsers'\n msg = 'All data requesters must be a certified user.'\n } else if (accessRequirement.isValidatedProfileRequired) {\n link =\n 'https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-ValidatedUsers'\n msg = 'All data requesters must have a validated user profile.'\n }\n return (\n <>\n {accessRequirement.isDUCRequired && !isEDucEnabled ? (\n <Box sx={{ display: 'flex', gap: 2, alignItems: 'center', py: 1 }}>\n <NewReleasesOutlined sx={{ color: 'error.main' }} />\n <div>\n You must list the Synapse user names of all collaborators listed in\n your Data Use Certificate (DUC).\n </div>\n </Box>\n ) : (\n ''\n )}\n {msg}{' '}\n {link && (\n <Link href={link} target={'_blank'} rel={'noreferrer'}>\n Learn more\n </Link>\n )}\n </>\n )\n}\n"],"mappings":";;;;AASA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,sBAAmB,qBAAkB,GACzC,IAAe,IACf,IAAc;CAkBlB,OAfE,EAAkB,2BAClB,EAAkB,8BAElB,IAAO,4DACP,IACE,oFACO,EAAkB,2BAC3B,IACE,4FACF,IAAM,mDACG,EAAkB,+BAC3B,IACE,4FACF,IAAM,4DAGN,kBAAA,GAAA,EAAA,UAAA;EACG,EAAkB,iBAAiB,CAAC,IACnC,kBAAC,GAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,KAAK;IAAG,YAAY;IAAU,IAAI;GAAE;aAAhE,CACE,kBAAC,GAAD,EAAqB,IAAI,EAAE,OAAO,aAAa,EAAI,CAAA,GACnD,kBAAC,OAAD,EAAA,UAAK,uGAGA,CAAA,CACF;OAEL;EAED;EAAK;EACL,KACC,kBAAC,GAAD;GAAM,MAAM;GAAM,QAAQ;GAAU,KAAK;aAAc;EAEjD,CAAA;CAER,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"AccessorRequirementHelpText.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.tsx"],"sourcesContent":["import NewReleasesOutlined from '@mui/icons-material/NewReleasesOutlined'\nimport { Box, Link } from '@mui/material'\nimport { AccessorStepAccessRequirement } from './requestFlowTypes'\n\nexport type AccessorRequirementHelpTextProps = {\n accessRequirement: AccessorStepAccessRequirement\n isEDucEnabled: boolean\n}\n\nexport default function AccessorRequirementHelpText(\n props: AccessorRequirementHelpTextProps,\n) {\n const { accessRequirement, isEDucEnabled } = props\n let link: string = ''\n let msg: string = ''\n\n if (\n accessRequirement.isCertifiedUserRequired &&\n accessRequirement.isValidatedProfileRequired\n ) {\n link = 'https://help.synapse.org/docs/User-Types.2007072795.html'\n msg =\n 'All data requesters must be certified users and have a validated user profile.'\n } else if (accessRequirement.isCertifiedUserRequired) {\n link =\n 'https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-CertifiedUsers'\n msg = 'All data requesters must be a certified user.'\n } else if (accessRequirement.isValidatedProfileRequired) {\n link =\n 'https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-ValidatedUsers'\n msg = 'All data requesters must have a validated user profile.'\n }\n return (\n <>\n {accessRequirement.isDUCRequired && !isEDucEnabled ? (\n <Box sx={{ display: 'flex', gap: 2, alignItems: 'center', py: 1 }}>\n <NewReleasesOutlined sx={{ color: 'error.main' }} />\n <div>\n You must list the Synapse user names of all collaborators listed in\n your Data Use Certificate (DUC).\n </div>\n </Box>\n ) : (\n ''\n )}\n {msg}{' '}\n {link && (\n <Link href={link} target={'_blank'} rel={'noreferrer'}>\n Learn more\n </Link>\n )}\n </>\n )\n}\n"],"mappings":";;;;AASA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,sBAAmB,qBAAkB,GACzC,IAAe,IACf,IAAc;CAkBlB,OAfE,EAAkB,2BAClB,EAAkB,8BAElB,IAAO,4DACP,IACE,oFACO,EAAkB,2BAC3B,IACE,4FACF,IAAM,mDACG,EAAkB,+BAC3B,IACE,4FACF,IAAM,4DAGN,kBAAA,GAAA,EAAA,UAAA;EACG,EAAkB,iBAAiB,CAAC,IACnC,kBAAC,GAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,KAAK;IAAG,YAAY;IAAU,IAAI;GAAE;aAAhE,CACE,kBAAC,GAAD,EAAqB,IAAI,EAAE,OAAO,aAAa,EAAI,CAAA,GACnD,kBAAC,OAAD,EAAA,UAAK,uGAGA,CAAA,CACF;OAEL;EAED;EAAK;EACL,KACC,kBAAC,GAAD;GAAM,MAAM;GAAM,QAAQ;GAAU,KAAK;aAAc;EAEjD,CAAA;CAER,EAAA,CAAA;AAEN"}
@@ -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"}