synapse-react-client 4.0.16 → 4.0.18

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 (229) hide show
  1. package/README.md +5 -3
  2. package/dist/SWC.index.d.ts +1 -0
  3. package/dist/SWC.index.d.ts.map +1 -1
  4. package/dist/SWC.index.js +2 -1
  5. package/dist/SWC.index.js.map +1 -1
  6. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  7. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  8. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  9. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  10. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  11. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  12. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  13. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  14. package/dist/components/AccessTokenPage/CreateAccessTokenModal.d.ts.map +1 -1
  15. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +56 -54
  16. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  17. package/dist/components/Authentication/PasswordField.d.ts +1 -1
  18. package/dist/components/Authentication/PasswordField.d.ts.map +1 -1
  19. package/dist/components/Authentication/PasswordField.js.map +1 -1
  20. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  21. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +1 -2
  22. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  23. package/dist/components/Authentication/UsernamePasswordForm.d.ts.map +1 -1
  24. package/dist/components/Authentication/UsernamePasswordForm.js +32 -29
  25. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  26. package/dist/components/CardContainer/CardLink.d.ts +2 -2
  27. package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
  28. package/dist/components/CardDeck/CardDeckCardProps.d.ts.map +1 -1
  29. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  30. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
  31. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +106 -103
  32. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  33. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.d.ts.map +1 -1
  34. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  35. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.d.ts.map +1 -1
  36. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  37. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts.map +1 -1
  38. package/dist/components/CreateProjectModal/CreateProjectModal.js +4 -4
  39. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  40. package/dist/components/CreateTableViewWizard/TableNameForm.js +6 -6
  41. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  42. package/dist/components/CrispChat/CrispChat.js +4 -4
  43. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  44. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  45. package/dist/components/DownloadCart/RequestDownloadCard.js +14 -14
  46. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  47. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  48. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  49. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  50. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  51. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  52. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  53. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  54. package/dist/components/EntityFinder/EntityIdTextField.d.ts +17 -0
  55. package/dist/components/EntityFinder/EntityIdTextField.d.ts.map +1 -0
  56. package/dist/components/EntityFinder/EntityIdTextField.js +35 -0
  57. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -0
  58. package/dist/components/EntityIcon.d.ts.map +1 -1
  59. package/dist/components/EntityIcon.js +2 -1
  60. package/dist/components/EntityIcon.js.map +1 -1
  61. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.d.ts.map +1 -1
  62. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js +22 -16
  63. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  64. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  65. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  66. package/dist/components/FullWidthAlert/FullWidthAlert.d.ts.map +1 -1
  67. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  68. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.d.ts.map +1 -1
  69. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  70. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  71. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  72. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  73. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  74. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  75. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts +1 -1
  76. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts.map +1 -1
  77. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js +1 -1
  78. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  79. package/dist/components/PortalList/CreatePortalModal.d.ts.map +1 -1
  80. package/dist/components/PortalList/CreatePortalModal.js +34 -33
  81. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  82. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts.map +1 -1
  83. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  84. package/dist/components/QueryWrapperPlotNav/RowSetView.d.ts.map +1 -1
  85. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  86. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  87. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  88. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.d.ts.map +1 -1
  89. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  90. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.d.ts.map +1 -1
  91. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  92. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  93. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  94. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  95. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.d.ts.map +1 -1
  96. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  97. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  98. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  99. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  100. package/dist/components/SynapseTable/SynapseTableUtils.d.ts.map +1 -1
  101. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  102. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  103. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  104. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.d.ts.map +1 -1
  105. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  106. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  107. package/dist/components/TextField/TextField.css +1 -1
  108. package/dist/components/TextField/TextField.d.ts +14 -3
  109. package/dist/components/TextField/TextField.d.ts.map +1 -1
  110. package/dist/components/TextField/TextField.js +41 -43
  111. package/dist/components/TextField/TextField.js.map +1 -1
  112. package/dist/components/TextField/TextField.module.js +3 -4
  113. package/dist/components/TextField/TextField.module.js.map +1 -1
  114. package/dist/components/TextField/TextField.module.scss +18 -10
  115. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.d.ts.map +1 -1
  116. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +20 -16
  117. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  118. package/dist/components/UserCardList/UserCardList.d.ts.map +1 -1
  119. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  120. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  121. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  122. package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -1
  123. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  124. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  125. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  126. package/dist/components/doi/CreateOrUpdateDoiModal.js +13 -13
  127. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  128. package/dist/components/entity/page/title_bar/TitleBarProperties.js +23 -23
  129. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  130. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  131. package/dist/components/index.js +17 -17
  132. package/dist/components/styled/StyledFormControl.d.ts +15 -0
  133. package/dist/components/styled/StyledFormControl.d.ts.map +1 -1
  134. package/dist/components/styled/StyledFormControl.js +1 -0
  135. package/dist/components/styled/StyledFormControl.js.map +1 -1
  136. package/dist/components/styled/index.js +3 -3
  137. package/dist/components/utils/ConditionalWrapper.d.ts.map +1 -1
  138. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  139. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  140. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  141. package/dist/components/widgets/facet-nav/FacetNavPanel.js +69 -62
  142. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  143. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +1 -0
  144. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  145. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +27 -26
  146. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  147. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.d.ts +1 -0
  148. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.d.ts.map +1 -1
  149. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js +2 -1
  150. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  151. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
  152. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
  153. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +44 -43
  154. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  155. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +13 -0
  156. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -0
  157. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +398 -0
  158. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -0
  159. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  160. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +49 -19
  161. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  162. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  163. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +46 -25
  164. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  165. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts +0 -1
  166. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts.map +1 -1
  167. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js +20 -22
  168. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  169. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -1
  170. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +25 -27
  171. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  172. package/dist/features/entity/metadata-task/utils/constants.d.ts +26 -0
  173. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  174. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  175. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  176. package/dist/index.js +17 -17
  177. package/dist/mockServiceWorker.js +6 -8
  178. package/dist/mocks/curation/mockCurationTask.d.ts +2 -2
  179. package/dist/mocks/curation/mockCurationTask.d.ts.map +1 -1
  180. package/dist/mocks/curation/mockCurationTask.js +9 -5
  181. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  182. package/dist/mocks/msw/handlers/featureFlagHandlers.d.ts +1 -1
  183. package/dist/mocks/msw/handlers/featureFlagHandlers.d.ts.map +1 -1
  184. package/dist/mocks/msw/handlers/featureFlagHandlers.js +1 -1
  185. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  186. package/dist/style/components/_cards.scss +0 -3
  187. package/dist/style/components/_data-grid-extra.scss +2 -2
  188. package/dist/style/components/_login.scss +6 -2
  189. package/dist/style/main.css +1 -1
  190. package/dist/synapse-client/SynapseClient.d.ts +2 -1
  191. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  192. package/dist/synapse-client/SynapseClient.js.map +1 -1
  193. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  194. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  195. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  196. package/dist/synapse-queries/curation/task/useCurationTask.js +16 -6
  197. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  198. package/dist/synapse-queries/dataaccess/useAccessRequirements.d.ts.map +1 -1
  199. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  200. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  201. package/dist/synapse-queries/featureflags/useGetFeatureFlag.d.ts +1 -1
  202. package/dist/synapse-queries/featureflags/useGetFeatureFlag.d.ts.map +1 -1
  203. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  204. package/dist/synapse-queries/file/useFiles.d.ts.map +1 -1
  205. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  206. package/dist/synapse-queries/termsOfService/useTermsOfService.d.ts.map +1 -1
  207. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  208. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  209. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  210. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  211. package/dist/theme/palette/Palettes.d.ts +2 -2
  212. package/dist/theme/palette/Palettes.d.ts.map +1 -1
  213. package/dist/theme/palette/Palettes.js +2 -2
  214. package/dist/theme/palette/Palettes.js.map +1 -1
  215. package/dist/tsconfig.build.tsbuildinfo +1 -1
  216. package/dist/types/ThemeTypes.d.ts +5 -6
  217. package/dist/utils/AppUtils/session/SynapseSessionManager.d.ts.map +1 -1
  218. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  219. package/dist/utils/featureflag/FeatureFlags.d.ts +12 -0
  220. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -0
  221. package/dist/utils/featureflag/FeatureFlags.js +8 -0
  222. package/dist/utils/featureflag/FeatureFlags.js.map +1 -0
  223. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  224. package/dist/utils/functions/queryUtils.js.map +1 -1
  225. package/dist/utils/hooks/useGetInfoFromIds.d.ts.map +1 -1
  226. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  227. package/dist/utils/slots/SlotUtils.d.ts.map +1 -1
  228. package/dist/utils/slots/SlotUtils.js.map +1 -1
  229. package/package.json +5 -6
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordField.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/PasswordField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,cAAc,2CAY1D"}
1
+ {"version":3,"file":"PasswordField.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/PasswordField.tsx"],"names":[],"mappings":"AAAA,OAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,cAAc,2CAY1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordField.js","names":[],"sources":["../../../src/components/Authentication/PasswordField.tsx"],"sourcesContent":["import TextField from '../TextField'\nimport { TextFieldProps } from '@mui/material'\n\nexport default function PasswordField(props: TextFieldProps) {\n return (\n <TextField\n required\n fullWidth\n autoComplete=\"current-password\"\n label=\"Password\"\n id=\"current-password\"\n type=\"password\"\n {...props}\n />\n )\n}\n"],"mappings":";;;AAGA,SAAwB,EAAc,GAAuB;AAC3D,QACE,kBAAC,GAAD;EACE,UAAA;EACA,WAAA;EACA,cAAa;EACb,OAAM;EACN,IAAG;EACH,MAAK;EACL,GAAI;EACJ,CAAA"}
1
+ {"version":3,"file":"PasswordField.js","names":[],"sources":["../../../src/components/Authentication/PasswordField.tsx"],"sourcesContent":["import TextField, { TextFieldProps } from '../TextField'\n\nexport default function PasswordField(props: TextFieldProps) {\n return (\n <TextField\n required\n fullWidth\n autoComplete=\"current-password\"\n label=\"Password\"\n id=\"current-password\"\n type=\"password\"\n {...props}\n />\n )\n}\n"],"mappings":";;;AAEA,SAAwB,EAAc,GAAuB;AAC3D,QACE,kBAAC,GAAD;EACE,UAAA;EACA,WAAA;EACA,cAAa;EACb,OAAM;EACN,IAAG;EACH,MAAK;EACL,GAAI;EACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorEnrollmentForm.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAW5D;;;;GAIG;AACH,iBAAS,YAAY,CAAC,MAAM,EAAE,UAAU,UAEvC;AA6BD,eAAO,MAAM,oBAAoB,+HAC6F,CAAA;AAE9H,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,UAAU,CAAA;IACtB,4BAA4B,EAAE,MAAM,IAAI,CAAA;IACxC,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CAiOpC;AAED,eAAO,MAAM,yBAAyB;;CAAmB,CAAA"}
1
+ {"version":3,"file":"TwoFactorEnrollmentForm.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAW5D;;;;GAIG;AACH,iBAAS,YAAY,CAAC,MAAM,EAAE,UAAU,UAEvC;AA6BD,eAAO,MAAM,oBAAoB,+HAC6F,CAAA;AAE9H,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,UAAU,CAAA;IACtB,4BAA4B,EAAE,MAAM,IAAI,CAAA;IACxC,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CAgOpC;AAED,eAAO,MAAM,yBAAyB;;CAAmB,CAAA"}
@@ -188,9 +188,8 @@ function D(v) {
188
188
  height: "48px"
189
189
  },
190
190
  children: [/* @__PURE__ */ y(i, {
191
- noWrapInFormControl: !0,
192
191
  autoFocus: !0,
193
- inputProps: { maxLength: O?.digits },
192
+ slotProps: { htmlInput: { maxLength: O?.digits } },
194
193
  value: k,
195
194
  onChange: (e) => {
196
195
  A(e.target.value);
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorEnrollmentForm.js","names":[],"sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"sourcesContent":["import { StyledOuterContainer } from '@/components/styled/LeftRightPanel'\nimport { TOTP_CLOCK_SKEW_ERROR_APPENDAGE } from '@/components/Authentication/Constants'\nimport { useFinishTwoFactorEnrollment } from '@/synapse-queries/auth/useTwoFactorEnrollment'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n Box,\n BoxProps,\n Button,\n Divider,\n IconButton,\n Link,\n Paper,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { TotpSecret } from '@sage-bionetworks/synapse-types'\nimport * as qrcode from 'qrcode'\n// qrcode is CJS-only; use namespace import for Vite dev mode CJS interop.\nconst { toCanvas } = qrcode\nimport { useEffect, useRef, useState } from 'react'\nimport FullWidthAlert from '../FullWidthAlert/FullWidthAlert'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport TextField from '../TextField/TextField'\nimport TwoFactorSecretDialog from './TwoFactorSecretDialog'\n\n/**\n * Returns a URL that can be used to generate a QR code that 2FA authenticator apps can interpret.\n * This uses the username fro TotpSecret to create the friendly name for the account in the authenticator app.\n * @param secret\n */\nfunction toOtpAuthUrl(secret: TotpSecret) {\n return `otpauth://totp/Synapse:${secret.username}?secret=${secret.secret}&issuer=Sage%20Bionetworks&algorithm=${secret.alg}&digits=${secret.digits}&period=${secret.period}`\n}\n\nconst Section: StyledComponent<BoxProps> = styled(\n (props: BoxProps) => (\n <Box\n sx={{\n my: 3,\n ...props.sx,\n }}\n {...props}\n />\n ),\n {\n label: 'Section',\n },\n)(() => ({}))\n\nconst SectionInnerGrid = styled(Box, { label: 'SectionInnerGrid' })(\n ({ theme }) => ({\n display: 'grid',\n gridTemplateColumns: 'auto 200px',\n columnGap: theme.spacing(5),\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: '1fr',\n gap: '18px',\n },\n }),\n)\n\nexport const TWO_FACTOR_DOCS_LINK =\n 'https://help.synapse.org/docs/Managing-Your-Account.2055405596.html#Adding-Two-Factor-Authentication-(2FA)-to-your-account'\n\nexport type TwoFactorEnrollmentFormProps = {\n totpSecret: TotpSecret\n onTwoFactorEnrollmentSuccess: () => void\n onBackClicked: () => void\n}\n\nexport default function TwoFactorEnrollmentForm(\n props: TwoFactorEnrollmentFormProps,\n) {\n const { onTwoFactorEnrollmentSuccess, onBackClicked, totpSecret } = props\n\n const [totp, setTotp] = useState('')\n const [hasQrCode, setHasQrCode] = useState(false)\n const [showSecretInModal, setShowSecretInModal] = useState(false)\n const qrCodeCanvasElement = useRef<HTMLCanvasElement>(null)\n\n const {\n mutate: finishEnrollment,\n isPending: isFinishingEnrollment,\n error,\n } = useFinishTwoFactorEnrollment({\n onSuccess: onTwoFactorEnrollmentSuccess,\n })\n\n useEffect(() => {\n async function createQrCode() {\n if (totpSecret && qrCodeCanvasElement.current) {\n await toCanvas(qrCodeCanvasElement.current, toOtpAuthUrl(totpSecret), {\n version: 10,\n margin: 0,\n scale: 3.5,\n })\n setHasQrCode(true)\n }\n }\n void createQrCode()\n }, [totpSecret])\n\n return (\n <StyledOuterContainer>\n <Paper\n sx={{\n position: 'relative',\n width: { xs: '100%', md: '800px' },\n py: 6.5,\n px: 8,\n mx: 'auto',\n }}\n >\n {onBackClicked && (\n <IconButton\n type=\"button\"\n onClick={() => {\n onBackClicked()\n }}\n sx={theme => ({\n position: 'absolute',\n top: theme.spacing(2),\n left: theme.spacing(2),\n })}\n >\n <IconSvg\n icon=\"arrowBack\"\n wrap={false}\n sx={{ height: '24px', width: '24px' }}\n />\n </IconButton>\n )}\n <Section>\n <Typography variant=\"headline2\" sx={{ mb: 3 }}>\n Activate Two-factor Authentication\n </Typography>\n <Typography variant=\"body1\">\n After setting up 2FA, you’ll use an authenticator app as part of\n your login process, in addition to your existing password. If you\n log in using your Google\n {/* eslint-disable-next-line no-constant-binary-expression -- Remove conditionality when NIH RAS login is supported */}\n {false && ', NIH RAS,'} or ORCiD account, you may need to use 2FA as\n part of\n {/*those processes*/}\n that process as well.{' '}\n <Link href={TWO_FACTOR_DOCS_LINK}>Learn more about 2FA</Link>.\n </Typography>\n </Section>\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 1. Get one of these apps\n </Typography>\n <Typography variant=\"body1\">\n Download and install one of these authentication apps to set up\n 2FA on your mobile device, tablet, or desktop. If you have one\n of these apps already installed, you can skip this step.\n </Typography>\n </Box>\n <Stack\n sx={theme => ({\n justifyContent: 'space-between',\n flexShrink: 0,\n [theme.breakpoints.down('sm')]: {\n gap: '20px',\n },\n })}\n >\n <Link href={'https://authy.com/download/'}>Authy</Link>\n <Link\n href={\n 'https://duo.com/product/multi-factor-authentication-mfa/duo-mobile-app'\n }\n >\n DUO Mobile\n </Link>\n <Link href={'https://googleauthenticator.net/'}>\n Google Authenticator\n </Link>\n <Link\n href={\n 'https://www.microsoft.com/en-us/security/mobile-authenticator-app'\n }\n >\n Microsoft Authenticator\n </Link>\n </Stack>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 2. Scan the QR Code\n </Typography>\n <Typography component=\"ol\" variant=\"body1\" sx={{ pl: 2, my: 1 }}>\n <li>Open your authenticator app</li>\n <li>Tap the &quot;+&quot; button</li>\n <li>Use your camera to scan the image to the right</li>\n </Typography>\n <Link\n onClick={() => {\n setShowSecretInModal(true)\n }}\n >\n Can&apos;t use your camera?\n </Link>\n <TwoFactorSecretDialog\n secret={totpSecret?.secret ?? ''}\n open={showSecretInModal}\n onClose={() => setShowSecretInModal(false)}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'middle',\n height: 'auto',\n }}\n >\n {!hasQrCode && <SynapseSpinner size={50} />}\n <canvas\n style={{ display: hasQrCode ? undefined : 'none' }}\n ref={qrCodeCanvasElement}\n />\n </Box>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 3. Enter the Verification Code\n </Typography>\n <Typography variant=\"body1\">\n After scanning in the QR code in step 2, your app will provide a\n 6-digit code. Enter it in in the field to the right.\n </Typography>\n </Box>\n <form\n onSubmit={e => {\n e.preventDefault()\n finishEnrollment({\n secretId: totpSecret.secretId,\n totp,\n })\n }}\n >\n <Stack\n direction={'row'}\n sx={{\n gap: 2,\n height: '48px',\n }}\n >\n <TextField\n noWrapInFormControl\n autoFocus\n inputProps={{ maxLength: totpSecret?.digits }}\n value={totp}\n onChange={e => {\n setTotp(e.target.value)\n }}\n />\n <Button\n type={'submit'}\n variant={'contained'}\n sx={{ flexShrink: 0 }}\n disabled={\n isFinishingEnrollment || totp.length != totpSecret?.digits\n }\n >\n Activate\n </Button>\n </Stack>\n </form>\n </SectionInnerGrid>\n </Section>\n {error && (\n <FullWidthAlert\n variant={'danger'}\n isGlobal={false}\n description={\n error.reason.toLowerCase().includes('invalid totp code')\n ? `${error.reason}. ${TOTP_CLOCK_SKEW_ERROR_APPENDAGE}`\n : error.reason\n }\n />\n )}\n </Paper>\n </StyledOuterContainer>\n )\n}\n\nexport const EXPORTED_FOR_UNIT_TESTING = { toOtpAuthUrl }\n"],"mappings":"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"}
1
+ {"version":3,"file":"TwoFactorEnrollmentForm.js","names":[],"sources":["../../../src/components/Authentication/TwoFactorEnrollmentForm.tsx"],"sourcesContent":["import { StyledOuterContainer } from '@/components/styled/LeftRightPanel'\nimport { TOTP_CLOCK_SKEW_ERROR_APPENDAGE } from '@/components/Authentication/Constants'\nimport { useFinishTwoFactorEnrollment } from '@/synapse-queries/auth/useTwoFactorEnrollment'\nimport { StyledComponent } from '@emotion/styled'\nimport {\n Box,\n BoxProps,\n Button,\n Divider,\n IconButton,\n Link,\n Paper,\n Stack,\n styled,\n Typography,\n} from '@mui/material'\nimport { TotpSecret } from '@sage-bionetworks/synapse-types'\nimport * as qrcode from 'qrcode'\n// qrcode is CJS-only; use namespace import for Vite dev mode CJS interop.\nconst { toCanvas } = qrcode\nimport { useEffect, useRef, useState } from 'react'\nimport FullWidthAlert from '../FullWidthAlert/FullWidthAlert'\nimport IconSvg from '../IconSvg/IconSvg'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport TextField from '../TextField/TextField'\nimport TwoFactorSecretDialog from './TwoFactorSecretDialog'\n\n/**\n * Returns a URL that can be used to generate a QR code that 2FA authenticator apps can interpret.\n * This uses the username fro TotpSecret to create the friendly name for the account in the authenticator app.\n * @param secret\n */\nfunction toOtpAuthUrl(secret: TotpSecret) {\n return `otpauth://totp/Synapse:${secret.username}?secret=${secret.secret}&issuer=Sage%20Bionetworks&algorithm=${secret.alg}&digits=${secret.digits}&period=${secret.period}`\n}\n\nconst Section: StyledComponent<BoxProps> = styled(\n (props: BoxProps) => (\n <Box\n sx={{\n my: 3,\n ...props.sx,\n }}\n {...props}\n />\n ),\n {\n label: 'Section',\n },\n)(() => ({}))\n\nconst SectionInnerGrid = styled(Box, { label: 'SectionInnerGrid' })(\n ({ theme }) => ({\n display: 'grid',\n gridTemplateColumns: 'auto 200px',\n columnGap: theme.spacing(5),\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: '1fr',\n gap: '18px',\n },\n }),\n)\n\nexport const TWO_FACTOR_DOCS_LINK =\n 'https://help.synapse.org/docs/Managing-Your-Account.2055405596.html#Adding-Two-Factor-Authentication-(2FA)-to-your-account'\n\nexport type TwoFactorEnrollmentFormProps = {\n totpSecret: TotpSecret\n onTwoFactorEnrollmentSuccess: () => void\n onBackClicked: () => void\n}\n\nexport default function TwoFactorEnrollmentForm(\n props: TwoFactorEnrollmentFormProps,\n) {\n const { onTwoFactorEnrollmentSuccess, onBackClicked, totpSecret } = props\n\n const [totp, setTotp] = useState('')\n const [hasQrCode, setHasQrCode] = useState(false)\n const [showSecretInModal, setShowSecretInModal] = useState(false)\n const qrCodeCanvasElement = useRef<HTMLCanvasElement>(null)\n\n const {\n mutate: finishEnrollment,\n isPending: isFinishingEnrollment,\n error,\n } = useFinishTwoFactorEnrollment({\n onSuccess: onTwoFactorEnrollmentSuccess,\n })\n\n useEffect(() => {\n async function createQrCode() {\n if (totpSecret && qrCodeCanvasElement.current) {\n await toCanvas(qrCodeCanvasElement.current, toOtpAuthUrl(totpSecret), {\n version: 10,\n margin: 0,\n scale: 3.5,\n })\n setHasQrCode(true)\n }\n }\n void createQrCode()\n }, [totpSecret])\n\n return (\n <StyledOuterContainer>\n <Paper\n sx={{\n position: 'relative',\n width: { xs: '100%', md: '800px' },\n py: 6.5,\n px: 8,\n mx: 'auto',\n }}\n >\n {onBackClicked && (\n <IconButton\n type=\"button\"\n onClick={() => {\n onBackClicked()\n }}\n sx={theme => ({\n position: 'absolute',\n top: theme.spacing(2),\n left: theme.spacing(2),\n })}\n >\n <IconSvg\n icon=\"arrowBack\"\n wrap={false}\n sx={{ height: '24px', width: '24px' }}\n />\n </IconButton>\n )}\n <Section>\n <Typography variant=\"headline2\" sx={{ mb: 3 }}>\n Activate Two-factor Authentication\n </Typography>\n <Typography variant=\"body1\">\n After setting up 2FA, you’ll use an authenticator app as part of\n your login process, in addition to your existing password. If you\n log in using your Google\n {/* eslint-disable-next-line no-constant-binary-expression -- Remove conditionality when NIH RAS login is supported */}\n {false && ', NIH RAS,'} or ORCiD account, you may need to use 2FA as\n part of\n {/*those processes*/}\n that process as well.{' '}\n <Link href={TWO_FACTOR_DOCS_LINK}>Learn more about 2FA</Link>.\n </Typography>\n </Section>\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 1. Get one of these apps\n </Typography>\n <Typography variant=\"body1\">\n Download and install one of these authentication apps to set up\n 2FA on your mobile device, tablet, or desktop. If you have one\n of these apps already installed, you can skip this step.\n </Typography>\n </Box>\n <Stack\n sx={theme => ({\n justifyContent: 'space-between',\n flexShrink: 0,\n [theme.breakpoints.down('sm')]: {\n gap: '20px',\n },\n })}\n >\n <Link href={'https://authy.com/download/'}>Authy</Link>\n <Link\n href={\n 'https://duo.com/product/multi-factor-authentication-mfa/duo-mobile-app'\n }\n >\n DUO Mobile\n </Link>\n <Link href={'https://googleauthenticator.net/'}>\n Google Authenticator\n </Link>\n <Link\n href={\n 'https://www.microsoft.com/en-us/security/mobile-authenticator-app'\n }\n >\n Microsoft Authenticator\n </Link>\n </Stack>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 2. Scan the QR Code\n </Typography>\n <Typography component=\"ol\" variant=\"body1\" sx={{ pl: 2, my: 1 }}>\n <li>Open your authenticator app</li>\n <li>Tap the &quot;+&quot; button</li>\n <li>Use your camera to scan the image to the right</li>\n </Typography>\n <Link\n onClick={() => {\n setShowSecretInModal(true)\n }}\n >\n Can&apos;t use your camera?\n </Link>\n <TwoFactorSecretDialog\n secret={totpSecret?.secret ?? ''}\n open={showSecretInModal}\n onClose={() => setShowSecretInModal(false)}\n />\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'middle',\n height: 'auto',\n }}\n >\n {!hasQrCode && <SynapseSpinner size={50} />}\n <canvas\n style={{ display: hasQrCode ? undefined : 'none' }}\n ref={qrCodeCanvasElement}\n />\n </Box>\n </SectionInnerGrid>\n </Section>\n <Divider />\n <Section>\n <SectionInnerGrid>\n <Box>\n <Typography variant=\"body1\" sx={{ fontWeight: 700 }}>\n Step 3. Enter the Verification Code\n </Typography>\n <Typography variant=\"body1\">\n After scanning in the QR code in step 2, your app will provide a\n 6-digit code. Enter it in in the field to the right.\n </Typography>\n </Box>\n <form\n onSubmit={e => {\n e.preventDefault()\n finishEnrollment({\n secretId: totpSecret.secretId,\n totp,\n })\n }}\n >\n <Stack\n direction={'row'}\n sx={{\n gap: 2,\n height: '48px',\n }}\n >\n <TextField\n autoFocus\n slotProps={{ htmlInput: { maxLength: totpSecret?.digits } }}\n value={totp}\n onChange={e => {\n setTotp(e.target.value)\n }}\n />\n <Button\n type={'submit'}\n variant={'contained'}\n sx={{ flexShrink: 0 }}\n disabled={\n isFinishingEnrollment || totp.length != totpSecret?.digits\n }\n >\n Activate\n </Button>\n </Stack>\n </form>\n </SectionInnerGrid>\n </Section>\n {error && (\n <FullWidthAlert\n variant={'danger'}\n isGlobal={false}\n description={\n error.reason.toLowerCase().includes('invalid totp code')\n ? `${error.reason}. ${TOTP_CLOCK_SKEW_ERROR_APPENDAGE}`\n : error.reason\n }\n />\n )}\n </Paper>\n </StyledOuterContainer>\n )\n}\n\nexport const EXPORTED_FOR_UNIT_TESTING = { toOtpAuthUrl }\n"],"mappings":";;;;;;;;;;;;;AAmBA,IAAM,EAAE,gBAAa;AAarB,SAAS,EAAa,GAAoB;AACxC,QAAO,0BAA0B,EAAO,SAAS,UAAU,EAAO,OAAO,uCAAuC,EAAO,IAAI,UAAU,EAAO,OAAO,UAAU,EAAO;;AAGtK,IAAM,IAAqC,GACxC,MACC,kBAAC,GAAD;CACE,IAAI;EACF,IAAI;EACJ,GAAG,EAAM;EACV;CACD,GAAI;CACJ,CAAA,EAEJ,EACE,OAAO,WACR,CACF,QAAQ,EAAE,EAAE,EAEP,IAAmB,EAAO,GAAK,EAAE,OAAO,oBAAoB,CAAC,EAChE,EAAE,gBAAa;CACd,SAAS;CACT,qBAAqB;CACrB,WAAW,EAAM,QAAQ,EAAE;EAC1B,EAAM,YAAY,KAAK,KAAK,GAAG;EAC9B,qBAAqB;EACrB,KAAK;EACN;CACF,EACF,EAEY,IACX;AAQF,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,iCAA8B,kBAAe,kBAAe,GAE9D,CAAC,GAAM,KAAW,EAAS,GAAG,EAC9B,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,CAAC,GAAmB,KAAwB,EAAS,GAAM,EAC3D,IAAsB,EAA0B,KAAK,EAErD,EACJ,QAAQ,GACR,WAAW,GACX,aACE,EAA6B,EAC/B,WAAW,GACZ,CAAC;AAgBF,QAdA,QAAgB;EACd,eAAe,IAAe;AAC5B,GAAI,KAAc,EAAoB,YACpC,MAAM,EAAS,EAAoB,SAAS,EAAa,EAAW,EAAE;IACpE,SAAS;IACT,QAAQ;IACR,OAAO;IACR,CAAC,EACF,EAAa,GAAK;;AAGjB,KAAc;IAClB,CAAC,EAAW,CAAC,EAGd,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EACE,IAAI;GACF,UAAU;GACV,OAAO;IAAE,IAAI;IAAQ,IAAI;IAAS;GAClC,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;YAPH;GASG,KACC,kBAAC,GAAD;IACE,MAAK;IACL,eAAe;AACb,QAAe;;IAEjB,KAAI,OAAU;KACZ,UAAU;KACV,KAAK,EAAM,QAAQ,EAAE;KACrB,MAAM,EAAM,QAAQ,EAAE;KACvB;cAED,kBAAC,GAAD;KACE,MAAK;KACL,MAAM;KACN,IAAI;MAAE,QAAQ;MAAQ,OAAO;MAAQ;KACrC,CAAA;IACS,CAAA;GAEf,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,SAAQ;IAAY,IAAI,EAAE,IAAI,GAAG;cAAE;IAElC,CAAA,EACb,kBAAC,GAAD;IAAY,SAAQ;cAApB;KAA4B;KAKzB;KAAsB;KAEF;KACC;KACtB,kBAAC,GAAD;MAAM,MAAM;gBAAsB;MAA2B,CAAA;;KAClD;MACL,EAAA,CAAA;GACV,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,SAAQ;IAAQ,IAAI,EAAE,YAAY,KAAK;cAAE;IAExC,CAAA,EACb,kBAAC,GAAD;IAAY,SAAQ;cAAQ;IAIf,CAAA,CACT,EAAA,CAAA,EACN,kBAAC,GAAD;IACE,KAAI,OAAU;KACZ,gBAAgB;KAChB,YAAY;MACX,EAAM,YAAY,KAAK,KAAK,GAAG,EAC9B,KAAK,QACN;KACF;cAPH;KASE,kBAAC,GAAD;MAAM,MAAM;gBAA+B;MAAY,CAAA;KACvD,kBAAC,GAAD;MACE,MACE;gBAEH;MAEM,CAAA;KACP,kBAAC,GAAD;MAAM,MAAM;gBAAoC;MAEzC,CAAA;KACP,kBAAC,GAAD;MACE,MACE;gBAEH;MAEM,CAAA;KACD;MACS,EAAA,CAAA,EACX,CAAA;GACV,kBAAC,GAAD,EAAW,CAAA;GACX,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,GAAD;KAAY,SAAQ;KAAQ,IAAI,EAAE,YAAY,KAAK;eAAE;KAExC,CAAA;IACb,kBAAC,GAAD;KAAY,WAAU;KAAK,SAAQ;KAAQ,IAAI;MAAE,IAAI;MAAG,IAAI;MAAG;eAA/D;MACE,kBAAC,MAAD,EAAA,UAAI,+BAAgC,CAAA;MACpC,kBAAC,MAAD,EAAA,UAAI,wBAAiC,CAAA;MACrC,kBAAC,MAAD,EAAA,UAAI,kDAAmD,CAAA;MAC5C;;IACb,kBAAC,GAAD;KACE,eAAe;AACb,QAAqB,GAAK;;eAE7B;KAEM,CAAA;IACP,kBAAC,GAAD;KACE,QAAQ,GAAY,UAAU;KAC9B,MAAM;KACN,eAAe,EAAqB,GAAM;KAC1C,CAAA;IACE,EAAA,CAAA,EACN,kBAAC,GAAD;IACE,IAAI;KACF,SAAS;KACT,gBAAgB;KAChB,YAAY;KACZ,QAAQ;KACT;cANH,CAQG,CAAC,KAAa,kBAAC,GAAD,EAAgB,MAAM,IAAM,CAAA,EAC3C,kBAAC,UAAD;KACE,OAAO,EAAE,SAAS,IAAY,KAAA,IAAY,QAAQ;KAClD,KAAK;KACL,CAAA,CACE;MACW,EAAA,CAAA,EACX,CAAA;GACV,kBAAC,GAAD,EAAW,CAAA;GACX,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,SAAQ;IAAQ,IAAI,EAAE,YAAY,KAAK;cAAE;IAExC,CAAA,EACb,kBAAC,GAAD;IAAY,SAAQ;cAAQ;IAGf,CAAA,CACT,EAAA,CAAA,EACN,kBAAC,QAAD;IACE,WAAU,MAAK;AAEb,KADA,EAAE,gBAAgB,EAClB,EAAiB;MACf,UAAU,EAAW;MACrB;MACD,CAAC;;cAGJ,kBAAC,GAAD;KACE,WAAW;KACX,IAAI;MACF,KAAK;MACL,QAAQ;MACT;eALH,CAOE,kBAAC,GAAD;MACE,WAAA;MACA,WAAW,EAAE,WAAW,EAAE,WAAW,GAAY,QAAQ,EAAE;MAC3D,OAAO;MACP,WAAU,MAAK;AACb,SAAQ,EAAE,OAAO,MAAM;;MAEzB,CAAA,EACF,kBAAC,GAAD;MACE,MAAM;MACN,SAAS;MACT,IAAI,EAAE,YAAY,GAAG;MACrB,UACE,KAAyB,EAAK,UAAU,GAAY;gBAEvD;MAEQ,CAAA,CACH;;IACH,CAAA,CACU,EAAA,CAAA,EACX,CAAA;GACT,KACC,kBAAC,GAAD;IACE,SAAS;IACT,UAAU;IACV,aACE,EAAM,OAAO,aAAa,CAAC,SAAS,oBAAoB,GACpD,GAAG,EAAM,OAAO,6FAChB,EAAM;IAEZ,CAAA;GAEE;KACa,CAAA;;AAI3B,IAAa,IAA4B,EAAE,iBAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"UsernamePasswordForm.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/UsernamePasswordForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAO9C,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAChD,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CA+D5E"}
1
+ {"version":3,"file":"UsernamePasswordForm.d.ts","sourceRoot":"","sources":["../../../src/components/Authentication/UsernamePasswordForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAO9C,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAChD,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CAiE5E"}
@@ -2,56 +2,59 @@ import { useOneSageURL as e } from "../../utils/hooks/useOneSageURL.js";
2
2
  import t from "../TextField/TextField.js";
3
3
  import n from "./PasswordField.js";
4
4
  import { useState as r } from "react";
5
- import { Button as i, Link as a } from "@mui/material";
6
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ import { Button as i, Link as a, Stack as o } from "@mui/material";
6
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
7
  //#region src/components/Authentication/UsernamePasswordForm.tsx
8
- function c(c) {
9
- let l = e("/resetPassword"), { resetPasswordUrl: u = l.toString(), onSubmit: d, loginIsPending: f, hideForgotPasswordButton: p } = c, [m, h] = r(""), [g, _] = r("");
10
- function v(e) {
11
- e.preventDefault(), d(m, g);
8
+ function l(l) {
9
+ let u = e("/resetPassword"), { resetPasswordUrl: d = u.toString(), onSubmit: f, loginIsPending: p, hideForgotPasswordButton: m } = l, [h, g] = r(""), [_, v] = r("");
10
+ function y(e) {
11
+ e.preventDefault(), f(h, _);
12
12
  }
13
- return /* @__PURE__ */ s("form", {
13
+ return /* @__PURE__ */ c("form", {
14
14
  onSubmit: (e) => {
15
- v(e);
15
+ y(e);
16
16
  },
17
17
  children: [
18
- /* @__PURE__ */ o(t, {
19
- required: !0,
20
- fullWidth: !0,
21
- autoFocus: !0,
22
- autoComplete: "username",
23
- label: "Username or Email Address",
24
- id: "username",
25
- type: "text",
26
- value: m,
27
- onChange: (e) => h(e.target.value)
28
- }),
29
- /* @__PURE__ */ o(n, {
30
- value: g,
31
- onChange: (e) => _(e.target.value)
18
+ /* @__PURE__ */ c(o, {
19
+ gap: 2,
20
+ sx: { mb: 1 },
21
+ children: [/* @__PURE__ */ s(t, {
22
+ required: !0,
23
+ fullWidth: !0,
24
+ autoFocus: !0,
25
+ autoComplete: "username",
26
+ label: "Username or Email Address",
27
+ id: "username",
28
+ type: "text",
29
+ value: h,
30
+ onChange: (e) => g(e.target.value)
31
+ }), /* @__PURE__ */ s(n, {
32
+ value: _,
33
+ onChange: (e) => v(e.target.value)
34
+ })]
32
35
  }),
33
- !p && /* @__PURE__ */ o(a, {
34
- href: u,
35
- target: u.startsWith("/") ? void 0 : "_blank",
36
+ !m && /* @__PURE__ */ s(a, {
37
+ href: d,
38
+ target: d.startsWith("/") ? void 0 : "_blank",
36
39
  children: "Forgot password?"
37
40
  }),
38
- /* @__PURE__ */ o(i, {
41
+ /* @__PURE__ */ s(i, {
39
42
  fullWidth: !0,
40
43
  type: "submit",
41
44
  color: "primary",
42
45
  variant: "contained",
43
- disabled: f,
46
+ disabled: p,
44
47
  sx: {
45
48
  height: "50px",
46
49
  mt: 4,
47
50
  mb: 2
48
51
  },
49
- children: f ? "Logging you in..." : "Sign in"
52
+ children: p ? "Logging you in..." : "Sign in"
50
53
  })
51
54
  ]
52
55
  });
53
56
  }
54
57
  //#endregion
55
- export { c as default };
58
+ export { l as default };
56
59
 
57
60
  //# sourceMappingURL=UsernamePasswordForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UsernamePasswordForm.js","names":[],"sources":["../../../src/components/Authentication/UsernamePasswordForm.tsx"],"sourcesContent":["import { UseLoginReturn } from '@/utils/hooks'\nimport { useOneSageURL } from '@/utils/hooks/useOneSageURL'\nimport { Button, Link } from '@mui/material'\nimport { SyntheticEvent, useState } from 'react'\nimport TextField from '../TextField/TextField'\nimport PasswordField from './PasswordField'\n\ntype UsernamePasswordFormProps = {\n onSubmit: (username: string, password: string) => void\n resetPasswordUrl?: string\n loginIsPending: UseLoginReturn['loginIsPending']\n hideForgotPasswordButton?: boolean\n}\n\nexport default function UsernamePasswordForm(props: UsernamePasswordFormProps) {\n const defaultResetPasswordUrl = useOneSageURL('/resetPassword')\n const {\n resetPasswordUrl = defaultResetPasswordUrl.toString(),\n onSubmit,\n loginIsPending,\n hideForgotPasswordButton,\n } = props\n const [username, setUsername] = useState('')\n const [password, setPassword] = useState('')\n\n function handleLogin(e: SyntheticEvent) {\n e.preventDefault()\n onSubmit(username, password)\n }\n return (\n <form\n onSubmit={e => {\n handleLogin(e)\n }}\n >\n <TextField\n required\n fullWidth\n autoFocus\n autoComplete=\"username\"\n label=\"Username or Email Address\"\n id=\"username\"\n type=\"text\"\n value={username}\n onChange={e => setUsername(e.target.value)}\n />\n <PasswordField\n value={password}\n onChange={e => setPassword(e.target.value)}\n />\n {!hideForgotPasswordButton && (\n <Link\n href={resetPasswordUrl}\n target={\n // If not on OneSage, open in new tab\n resetPasswordUrl.startsWith('/') ? undefined : '_blank'\n }\n >\n Forgot password?\n </Link>\n )}\n <Button\n fullWidth\n type=\"submit\"\n color=\"primary\"\n variant=\"contained\"\n disabled={loginIsPending}\n sx={{\n height: '50px',\n mt: 4,\n mb: 2,\n }}\n >\n {loginIsPending ? 'Logging you in...' : 'Sign in'}\n </Button>\n </form>\n )\n}\n"],"mappings":";;;;;;;AAcA,SAAwB,EAAqB,GAAkC;CAC7E,IAAM,IAA0B,EAAc,iBAAiB,EACzD,EACJ,sBAAmB,EAAwB,UAAU,EACrD,aACA,mBACA,gCACE,GACE,CAAC,GAAU,KAAe,EAAS,GAAG,EACtC,CAAC,GAAU,KAAe,EAAS,GAAG;CAE5C,SAAS,EAAY,GAAmB;AAEtC,EADA,EAAE,gBAAgB,EAClB,EAAS,GAAU,EAAS;;AAE9B,QACE,kBAAC,QAAD;EACE,WAAU,MAAK;AACb,KAAY,EAAE;;YAFlB;GAKE,kBAAC,GAAD;IACE,UAAA;IACA,WAAA;IACA,WAAA;IACA,cAAa;IACb,OAAM;IACN,IAAG;IACH,MAAK;IACL,OAAO;IACP,WAAU,MAAK,EAAY,EAAE,OAAO,MAAM;IAC1C,CAAA;GACF,kBAAC,GAAD;IACE,OAAO;IACP,WAAU,MAAK,EAAY,EAAE,OAAO,MAAM;IAC1C,CAAA;GACD,CAAC,KACA,kBAAC,GAAD;IACE,MAAM;IACN,QAEE,EAAiB,WAAW,IAAI,GAAG,KAAA,IAAY;cAElD;IAEM,CAAA;GAET,kBAAC,GAAD;IACE,WAAA;IACA,MAAK;IACL,OAAM;IACN,SAAQ;IACR,UAAU;IACV,IAAI;KACF,QAAQ;KACR,IAAI;KACJ,IAAI;KACL;cAEA,IAAiB,sBAAsB;IACjC,CAAA;GACJ"}
1
+ {"version":3,"file":"UsernamePasswordForm.js","names":[],"sources":["../../../src/components/Authentication/UsernamePasswordForm.tsx"],"sourcesContent":["import { UseLoginReturn } from '@/utils/hooks'\nimport { useOneSageURL } from '@/utils/hooks/useOneSageURL'\nimport { Button, Link, Stack } from '@mui/material'\nimport { SyntheticEvent, useState } from 'react'\nimport TextField from '../TextField/TextField'\nimport PasswordField from './PasswordField'\n\ntype UsernamePasswordFormProps = {\n onSubmit: (username: string, password: string) => void\n resetPasswordUrl?: string\n loginIsPending: UseLoginReturn['loginIsPending']\n hideForgotPasswordButton?: boolean\n}\n\nexport default function UsernamePasswordForm(props: UsernamePasswordFormProps) {\n const defaultResetPasswordUrl = useOneSageURL('/resetPassword')\n const {\n resetPasswordUrl = defaultResetPasswordUrl.toString(),\n onSubmit,\n loginIsPending,\n hideForgotPasswordButton,\n } = props\n const [username, setUsername] = useState('')\n const [password, setPassword] = useState('')\n\n function handleLogin(e: SyntheticEvent) {\n e.preventDefault()\n onSubmit(username, password)\n }\n return (\n <form\n onSubmit={e => {\n handleLogin(e)\n }}\n >\n <Stack gap={2} sx={{ mb: 1 }}>\n <TextField\n required\n fullWidth\n autoFocus\n autoComplete=\"username\"\n label=\"Username or Email Address\"\n id=\"username\"\n type=\"text\"\n value={username}\n onChange={e => setUsername(e.target.value)}\n />\n <PasswordField\n value={password}\n onChange={e => setPassword(e.target.value)}\n />\n </Stack>\n {!hideForgotPasswordButton && (\n <Link\n href={resetPasswordUrl}\n target={\n // If not on OneSage, open in new tab\n resetPasswordUrl.startsWith('/') ? undefined : '_blank'\n }\n >\n Forgot password?\n </Link>\n )}\n <Button\n fullWidth\n type=\"submit\"\n color=\"primary\"\n variant=\"contained\"\n disabled={loginIsPending}\n sx={{\n height: '50px',\n mt: 4,\n mb: 2,\n }}\n >\n {loginIsPending ? 'Logging you in...' : 'Sign in'}\n </Button>\n </form>\n )\n}\n"],"mappings":";;;;;;;AAcA,SAAwB,EAAqB,GAAkC;CAC7E,IAAM,IAA0B,EAAc,iBAAiB,EACzD,EACJ,sBAAmB,EAAwB,UAAU,EACrD,aACA,mBACA,gCACE,GACE,CAAC,GAAU,KAAe,EAAS,GAAG,EACtC,CAAC,GAAU,KAAe,EAAS,GAAG;CAE5C,SAAS,EAAY,GAAmB;AAEtC,EADA,EAAE,gBAAgB,EAClB,EAAS,GAAU,EAAS;;AAE9B,QACE,kBAAC,QAAD;EACE,WAAU,MAAK;AACb,KAAY,EAAE;;YAFlB;GAKE,kBAAC,GAAD;IAAO,KAAK;IAAG,IAAI,EAAE,IAAI,GAAG;cAA5B,CACE,kBAAC,GAAD;KACE,UAAA;KACA,WAAA;KACA,WAAA;KACA,cAAa;KACb,OAAM;KACN,IAAG;KACH,MAAK;KACL,OAAO;KACP,WAAU,MAAK,EAAY,EAAE,OAAO,MAAM;KAC1C,CAAA,EACF,kBAAC,GAAD;KACE,OAAO;KACP,WAAU,MAAK,EAAY,EAAE,OAAO,MAAM;KAC1C,CAAA,CACI;;GACP,CAAC,KACA,kBAAC,GAAD;IACE,MAAM;IACN,QAEE,EAAiB,WAAW,IAAI,GAAG,KAAA,IAAY;cAElD;IAEM,CAAA;GAET,kBAAC,GAAD;IACE,WAAA;IACA,MAAK;IACL,OAAM;IACN,SAAQ;IACR,UAAU;IACV,IAAI;KACF,QAAQ;KACR,IAAI;KACJ,IAAI;KACL;cAEA,IAAiB,sBAAsB;IACjC,CAAA;GACJ"}
@@ -2,7 +2,7 @@ import { TargetEnum } from '@/utils/html/TargetEnum';
2
2
  /**
3
3
  * Defines the configuration for a link that will be rendered in the card
4
4
  */
5
- export type CardLink = ({
5
+ export type CardLink = {
6
6
  matchColumnName: string;
7
7
  overrideValueWithRowID?: boolean;
8
8
  isMarkdown: false;
@@ -28,5 +28,5 @@ export type CardLink = ({
28
28
  } | {
29
29
  overrideLinkURLColumnName: string;
30
30
  overrideLinkURLColumnTransform?: (columnValue: string) => string;
31
- }));
31
+ });
32
32
  //# sourceMappingURL=CardLink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CardLink.d.ts","sourceRoot":"","sources":["../../../src/components/CardContainer/CardLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAClB,CAAE;IAEE,eAAe,EAAE,MAAM,CAAA;IAEvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC,UAAU,EAAE,KAAK,CAAA;IAEjB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;IAEf,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,aAAa,GAAG,cAAc,CAAA;IAG9C,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,GACD;IAEE,yBAAyB,EAAE,MAAM,CAAA;IAEjC,8BAA8B,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;CACjE,CACJ,CAAA,CAAA"}
1
+ {"version":3,"file":"CardLink.d.ts","sourceRoot":"","sources":["../../../src/components/CardContainer/CardLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IAErB,eAAe,EAAE,MAAM,CAAA;IAEvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC,UAAU,EAAE,KAAK,CAAA;IAEjB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;IAEf,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,aAAa,GAAG,cAAc,CAAA;IAG9C,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,GACD;IAEE,yBAAyB,EAAE,MAAM,CAAA;IAEjC,8BAA8B,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;CACjE,CACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"CardDeckCardProps.d.ts","sourceRoot":"","sources":["../../../src/components/CardDeck/CardDeckCardProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,YAAY,CAAC,EACb,AADe,6CAA6C,CAC5D,MAAM,GAAG,MAAM,GAAG,kBAAkB,CAAA;CACrC,CAAA"}
1
+ {"version":3,"file":"CardDeckCardProps.d.ts","sourceRoot":"","sources":["../../../src/components/CardDeck/CardDeckCardProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,YAAY,CAAC,EACX,AADa,6CAA6C,CAC1D,MAAM,GAAG,MAAM,GAAG,kBAAkB,CAAA;CACvC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SubmissionDirectoryList.js","names":[],"sources":["../../../src/components/ChallengeSubmission/SubmissionDirectoryList.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport {\n invalidateAllQueriesForEntity,\n useGetEntities,\n useGetEntityChildren,\n} from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { NotesTwoTone } from '@mui/icons-material'\nimport { Box, Button, Radio, Typography } from '@mui/material'\nimport { DataGrid, GridCellParams, GridColDef } from '@mui/x-data-grid'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n Direction,\n Entity,\n EntityChildrenRequest,\n EntityHeader,\n EntityLookupRequest,\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n FileEntity,\n FileUploadComplete,\n SortBy,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport { useQueryClient } from '@tanstack/react-query'\nimport dayjs from 'dayjs'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Link } from 'react-router'\nimport ConfirmationDialog from '../ConfirmationDialog'\nimport CopyToClipboardIcon from '../CopyToClipboardIcon'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport FileUpload from '../FileUpload'\nimport IconSvg from '../IconSvg'\nimport { EntityItem } from './ChallengeSubmission'\n\ntype SubmissionDirectoryRow = {\n id: string\n name: string\n modifiedOn: string\n}\n\ntype SubmissionDirectoryListProps = {\n pageSize: number\n challengeProjectId: string\n entityType: typeof EntityType.dockerrepo | typeof EntityType.file\n onItemSelected: (selected: EntityItem) => void\n}\n\ntype FileUploadAttempt = FileUploadComplete & {\n entityId?: string\n}\n\nfunction SubmissionDirectoryList({\n pageSize,\n challengeProjectId,\n entityType,\n onItemSelected,\n}: SubmissionDirectoryListProps) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n const [page, setPage] = useState<number>(0)\n const [selectedItem, setSelectedItem] = useState<EntityItem | undefined>()\n const [errorMessage, setErrorMessage] = useState<string>()\n const [canSubmit, setCanSubmit] = useState<boolean>()\n const [fetchedHeaders, setFetchedHeaders] = useState<EntityHeader[]>([])\n const [nextPageToken, setNextPageToken] = useState<string | undefined>()\n const [fetchNextPage, setFetchNextPage] = useState<boolean>(false)\n const [confirmOpen, setConfirmOpen] = useState<boolean>(false)\n const [uploadAttempt, setUploadAttempt] = useState<FileUploadAttempt>()\n\n const PER_PAGE = pageSize\n const HEADERS_PER_PAGE = 50\n const PROJECT_URL = `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${challengeProjectId}`\n\n const request: EntityChildrenRequest = {\n parentId: challengeProjectId,\n nextPageToken: fetchNextPage ? nextPageToken : null,\n includeTypes: [entityType],\n includeTotalChildCount: true,\n sortBy: SortBy.MODIFIED_ON,\n sortDirection: Direction.DESC,\n }\n\n const { data: headerResults, refetch } = useGetEntityChildren(request, {\n enabled: !!challengeProjectId,\n throwOnError: true,\n })\n\n useEffect(() => {\n if (headerResults) {\n const newHeaders = [...fetchedHeaders]\n const headerPage = Math.floor(((page + 1) * PER_PAGE) / HEADERS_PER_PAGE)\n const start = headerPage * HEADERS_PER_PAGE\n newHeaders.splice(start, start + HEADERS_PER_PAGE, ...headerResults.page)\n setFetchedHeaders(newHeaders)\n setFetchNextPage(false)\n setNextPageToken(headerResults.nextPageToken)\n }\n // TODO: Temporary useEffect hook to remove onSuccess QueryOption for @tanstack/react-query v5\n // Refactor this component to remove this effect.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [headerResults])\n\n function getPageHeaders() {\n const pageStart = page * PER_PAGE\n const pageHeaders = fetchedHeaders.slice(pageStart, pageStart + PER_PAGE)\n return pageHeaders\n }\n\n function reset() {\n setErrorMessage(undefined)\n setCanSubmit(undefined)\n setFetchedHeaders([])\n setNextPageToken(undefined)\n setFetchNextPage(false)\n refetch()\n }\n\n useEffect(() => {\n reset()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityType, pageSize])\n\n const queries = useGetEntities(getPageHeaders())\n const entities = useMemo(\n () =>\n queries\n .filter(q => q.status === 'success')\n .map(q => q.data) as EntityItem[],\n [queries],\n )\n const areEntitiesLoading = queries.some(q => q.isLoading)\n\n const entityChangeHandler = async (value: string) => {\n setCanSubmit(false)\n const entity = entities.find(entity => entity?.id === value)\n if (entity) {\n setSelectedItem(entity)\n if (entityType === EntityType.dockerrepo) {\n let commits\n try {\n commits = await SynapseClient.getDockerTag(\n entity.id!,\n accessToken,\n 0,\n 1,\n )\n } catch (e) {\n return setErrorMessage(e.message)\n }\n if (commits.totalNumberOfResults === 0) {\n return setErrorMessage(\n 'No commits have been made to this repository. Please select a repository with at least one commit.',\n )\n }\n }\n setCanSubmit(true)\n setErrorMessage(undefined)\n }\n }\n\n const columns: GridColDef[] = [\n {\n field: 'radiobutton',\n headerName: '',\n width: 25,\n sortable: false,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n renderCell: params => {\n return (\n <Radio\n value={params.id}\n checked={params.id === selectedItem?.id}\n onChange={event => {\n entityChangeHandler(event.target.value)\n }}\n />\n )\n },\n },\n {\n field: 'name',\n headerName:\n entityType === EntityType.dockerrepo\n ? 'Docker Repository'\n : 'File Name',\n flex: 1,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n renderCell: (params: GridCellParams<Entity, SubmissionDirectoryRow>) => (\n <Link\n to={{\n pathname: `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${params.row.id}`,\n }}\n target=\"_blank\"\n >\n {params.row.name}\n </Link>\n ),\n },\n {\n field: 'modifiedOn',\n headerName: 'Updated On',\n width: 100,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n },\n {\n field: 'id',\n headerName: 'ID',\n width: 200,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n },\n ]\n\n const getRows = (entities: EntityItem[]) => {\n const newRows: SubmissionDirectoryRow[] = []\n entities.forEach(entity => {\n newRows.push({\n id: entity.id!,\n name:\n entityType === EntityType.dockerrepo\n ? entity.repositoryName ?? entity.name\n : entity.name,\n modifiedOn: formatDate(dayjs(entity.modifiedOn), 'MM/DD/YY'),\n })\n })\n return newRows\n }\n\n const handlePageChange = (newPageNum: number) => {\n const lastIndexNeeded = Math.min(\n headerResults?.totalChildCount ?? 0,\n (newPageNum + 1) * PER_PAGE,\n )\n if (lastIndexNeeded > fetchedHeaders.length) {\n setFetchNextPage(true)\n }\n setPage(newPageNum)\n }\n\n const itemSelectedHandler = () => {\n onItemSelected(selectedItem!)\n }\n\n function createEntity(file: FileUploadAttempt) {\n // Create Entity\n if (!file) return\n const { fileHandleId, fileName } = file\n const newFileEntity: FileEntity = {\n parentId: challengeProjectId,\n name: fileName,\n concreteType: FILE_ENTITY_CONCRETE_TYPE_VALUE,\n dataFileHandleId: fileHandleId,\n }\n SynapseClient.createEntity(newFileEntity, accessToken)\n .then(() => {\n reset()\n })\n .catch((err: SynapseClientError) => {\n setErrorMessage(err.reason)\n })\n }\n\n async function updateEntity() {\n if (!uploadAttempt) return\n const { fileHandleId, entityId } = uploadAttempt\n if (!entityId)\n return setErrorMessage('Error: missing entityId. Please try again.')\n // Get the entity\n let entity: FileEntity\n try {\n entity = await SynapseClient.getEntity(accessToken, entityId)\n } catch (err) {\n return setErrorMessage(`The entity ${entityId} could not be retrieved.`)\n }\n\n const updateRequest: FileEntity = {\n id: entity.id,\n name: entity.name,\n dataFileHandleId: fileHandleId,\n concreteType: FILE_ENTITY_CONCRETE_TYPE_VALUE,\n parentId: entity.parentId,\n etag: entity.etag,\n modifiedOn: entity.modifiedOn,\n }\n\n try {\n const updatedEntity = await SynapseClient.updateEntity(\n updateRequest,\n accessToken,\n true,\n )\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n updatedEntity.id!,\n )\n queryClient.setQueryData(\n keyFactory.getEntityQueryKey(updatedEntity.id!),\n updatedEntity,\n )\n reset()\n } catch (err) {\n setErrorMessage(err.reason)\n }\n }\n\n const handleUpload = async (response: UploadCallbackResp) => {\n if (response.success && response.resp) {\n const { fileName } = response.resp\n\n // Lookup entity\n const entityLookupRequest: EntityLookupRequest = {\n entityName: fileName,\n parentId: challengeProjectId,\n }\n try {\n const entityId = await SynapseClient.lookupChildEntity(\n entityLookupRequest,\n accessToken,\n )\n // Entity exists, prompt user to update it\n if (entityId) {\n setUploadAttempt({ ...response.resp, entityId: entityId.id })\n setConfirmOpen(true)\n }\n } catch (err) {\n // An existing entity was not found for this file, create it\n setUploadAttempt(undefined)\n createEntity(response.resp)\n }\n } else if (!response.success && response.error) {\n setErrorMessage(response.error.reason as string)\n } else {\n setErrorMessage('An unknown error occurred. Please try again.')\n }\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n backgroundColor: '#FBFBFC',\n padding: '10px',\n justifyContent: 'space-between',\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontSize: '18px', lineHeight: '20px', fontWeight: 700 }}\n >\n {entityType === EntityType.file\n ? 'Submit File'\n : 'Submit Docker Image'}\n </Typography>\n <Box sx={{ display: 'flex' }}>\n <Typography\n variant=\"body1\"\n sx={{ fontSize: '14px', color: '#71767F' }}\n >\n Your Project SynID:{' '}\n <Link to={{ pathname: PROJECT_URL }} target=\"_blank\">\n {challengeProjectId}\n </Link>\n </Typography>\n <CopyToClipboardIcon value={PROJECT_URL} sx={{ marginTop: '-4px' }} />\n </Box>\n </Box>\n <Box\n sx={{\n my: 3,\n display: 'flex',\n }}\n >\n <NotesTwoTone\n sx={{\n width: '16px',\n height: '16px',\n verticalAlign: 'text-bottom',\n }}\n />\n <Box\n sx={{\n ml: 1,\n }}\n >\n {entityType === EntityType.file && (\n <>\n Choose a prediction file from your submission directory below and\n click \"Submit Selection\" to pick an evaluation queue. If you need\n to add a new file, click \"Upload File\" first.\n </>\n )}\n {entityType === EntityType.dockerrepo && (\n <>\n Choose a Docker image from your submission directory below and\n click \"Submit Selection\" to pick an image version and evaluation\n queue. If you need to upload a new image to your project (\n <code>{challengeProjectId}</code>), see our{' '}\n <Link\n to=\"https://github.com/Sage-Bionetworks-Challenges/sample-model-templates#build-your-model\"\n target=\"_blank\"\n >\n Docker model submission guide\n </Link>{' '}\n for command-line instructions on how to build and upload.\n </>\n )}\n </Box>\n </Box>\n <Box>\n <DataGrid\n loading={areEntitiesLoading}\n columns={columns}\n rows={getRows(entities)}\n rowCount={headerResults?.totalChildCount ?? 0}\n pagination\n paginationMode=\"server\"\n paginationModel={{ page, pageSize: PER_PAGE }}\n pageSizeOptions={[PER_PAGE]}\n onPaginationModelChange={({ page }) => {\n handlePageChange(page)\n }}\n density=\"compact\"\n autoHeight\n sx={{\n fontSize: '14px',\n border: 'none',\n height: '100%',\n '& .MuiDataGrid-columnHeader': {\n backgroundColor: '#F1F3F5',\n },\n '& .Mui-odd': {\n backgroundColor: '#FBFBFC',\n },\n '.MuiDataGrid-columnHeaderTitleContainer': {\n justifyContent: 'space-between',\n },\n '.radio': {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n },\n }}\n getRowClassName={params =>\n params.indexRelativeToCurrentPage % 2 === 0 ? 'Mui-even' : 'Mui-odd'\n }\n />\n </Box>\n {errorMessage && <ErrorBanner error={errorMessage}></ErrorBanner>}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n {entityType === EntityType.file && (\n <FileUpload\n label=\"Upload File\"\n buttonProps={{\n variant: 'outlined',\n endIcon: <IconSvg icon=\"upload\" />,\n sx: { lineHeight: 1 },\n }}\n onComplete={resp => {\n handleUpload(resp)\n }}\n />\n )}\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={itemSelectedHandler}\n disabled={!canSubmit}\n >\n Submit Selection\n </Button>\n </Box>\n <ConfirmationDialog\n open={confirmOpen}\n title=\"File exists\"\n content={\n <Typography variant=\"body1\" sx={{ fontSize: '16px' }}>\n A file named &quot;{uploadAttempt?.fileName}&quot; (\n {uploadAttempt?.entityId}) already exists in this location. Do you\n want to update the existing file and create a new version?\n </Typography>\n }\n onCancel={() => setConfirmOpen(false)}\n onConfirm={() => {\n updateEntity()\n setConfirmOpen(false)\n }}\n />\n </Box>\n )\n}\n\nexport default SubmissionDirectoryList\n"],"mappings":"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"}
1
+ {"version":3,"file":"SubmissionDirectoryList.js","names":[],"sources":["../../../src/components/ChallengeSubmission/SubmissionDirectoryList.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport {\n invalidateAllQueriesForEntity,\n useGetEntities,\n useGetEntityChildren,\n} from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { NotesTwoTone } from '@mui/icons-material'\nimport { Box, Button, Radio, Typography } from '@mui/material'\nimport { DataGrid, GridCellParams, GridColDef } from '@mui/x-data-grid'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n Direction,\n Entity,\n EntityChildrenRequest,\n EntityHeader,\n EntityLookupRequest,\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n FileEntity,\n FileUploadComplete,\n SortBy,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport { useQueryClient } from '@tanstack/react-query'\nimport dayjs from 'dayjs'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Link } from 'react-router'\nimport ConfirmationDialog from '../ConfirmationDialog'\nimport CopyToClipboardIcon from '../CopyToClipboardIcon'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport FileUpload from '../FileUpload'\nimport IconSvg from '../IconSvg'\nimport { EntityItem } from './ChallengeSubmission'\n\ntype SubmissionDirectoryRow = {\n id: string\n name: string\n modifiedOn: string\n}\n\ntype SubmissionDirectoryListProps = {\n pageSize: number\n challengeProjectId: string\n entityType: typeof EntityType.dockerrepo | typeof EntityType.file\n onItemSelected: (selected: EntityItem) => void\n}\n\ntype FileUploadAttempt = FileUploadComplete & {\n entityId?: string\n}\n\nfunction SubmissionDirectoryList({\n pageSize,\n challengeProjectId,\n entityType,\n onItemSelected,\n}: SubmissionDirectoryListProps) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n const [page, setPage] = useState<number>(0)\n const [selectedItem, setSelectedItem] = useState<EntityItem | undefined>()\n const [errorMessage, setErrorMessage] = useState<string>()\n const [canSubmit, setCanSubmit] = useState<boolean>()\n const [fetchedHeaders, setFetchedHeaders] = useState<EntityHeader[]>([])\n const [nextPageToken, setNextPageToken] = useState<string | undefined>()\n const [fetchNextPage, setFetchNextPage] = useState<boolean>(false)\n const [confirmOpen, setConfirmOpen] = useState<boolean>(false)\n const [uploadAttempt, setUploadAttempt] = useState<FileUploadAttempt>()\n\n const PER_PAGE = pageSize\n const HEADERS_PER_PAGE = 50\n const PROJECT_URL = `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${challengeProjectId}`\n\n const request: EntityChildrenRequest = {\n parentId: challengeProjectId,\n nextPageToken: fetchNextPage ? nextPageToken : null,\n includeTypes: [entityType],\n includeTotalChildCount: true,\n sortBy: SortBy.MODIFIED_ON,\n sortDirection: Direction.DESC,\n }\n\n const { data: headerResults, refetch } = useGetEntityChildren(request, {\n enabled: !!challengeProjectId,\n throwOnError: true,\n })\n\n useEffect(() => {\n if (headerResults) {\n const newHeaders = [...fetchedHeaders]\n const headerPage = Math.floor(((page + 1) * PER_PAGE) / HEADERS_PER_PAGE)\n const start = headerPage * HEADERS_PER_PAGE\n newHeaders.splice(start, start + HEADERS_PER_PAGE, ...headerResults.page)\n setFetchedHeaders(newHeaders)\n setFetchNextPage(false)\n setNextPageToken(headerResults.nextPageToken)\n }\n // TODO: Temporary useEffect hook to remove onSuccess QueryOption for @tanstack/react-query v5\n // Refactor this component to remove this effect.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [headerResults])\n\n function getPageHeaders() {\n const pageStart = page * PER_PAGE\n const pageHeaders = fetchedHeaders.slice(pageStart, pageStart + PER_PAGE)\n return pageHeaders\n }\n\n function reset() {\n setErrorMessage(undefined)\n setCanSubmit(undefined)\n setFetchedHeaders([])\n setNextPageToken(undefined)\n setFetchNextPage(false)\n refetch()\n }\n\n useEffect(() => {\n reset()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityType, pageSize])\n\n const queries = useGetEntities(getPageHeaders())\n const entities = useMemo(\n () =>\n queries\n .filter(q => q.status === 'success')\n .map(q => q.data) as EntityItem[],\n [queries],\n )\n const areEntitiesLoading = queries.some(q => q.isLoading)\n\n const entityChangeHandler = async (value: string) => {\n setCanSubmit(false)\n const entity = entities.find(entity => entity?.id === value)\n if (entity) {\n setSelectedItem(entity)\n if (entityType === EntityType.dockerrepo) {\n let commits\n try {\n commits = await SynapseClient.getDockerTag(\n entity.id!,\n accessToken,\n 0,\n 1,\n )\n } catch (e) {\n return setErrorMessage(e.message)\n }\n if (commits.totalNumberOfResults === 0) {\n return setErrorMessage(\n 'No commits have been made to this repository. Please select a repository with at least one commit.',\n )\n }\n }\n setCanSubmit(true)\n setErrorMessage(undefined)\n }\n }\n\n const columns: GridColDef[] = [\n {\n field: 'radiobutton',\n headerName: '',\n width: 25,\n sortable: false,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n renderCell: params => {\n return (\n <Radio\n value={params.id}\n checked={params.id === selectedItem?.id}\n onChange={event => {\n entityChangeHandler(event.target.value)\n }}\n />\n )\n },\n },\n {\n field: 'name',\n headerName:\n entityType === EntityType.dockerrepo\n ? 'Docker Repository'\n : 'File Name',\n flex: 1,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n renderCell: (params: GridCellParams<Entity, SubmissionDirectoryRow>) => (\n <Link\n to={{\n pathname: `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${params.row.id}`,\n }}\n target=\"_blank\"\n >\n {params.row.name}\n </Link>\n ),\n },\n {\n field: 'modifiedOn',\n headerName: 'Updated On',\n width: 100,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n },\n {\n field: 'id',\n headerName: 'ID',\n width: 200,\n filterable: false,\n hideable: false,\n disableColumnMenu: true,\n },\n ]\n\n const getRows = (entities: EntityItem[]) => {\n const newRows: SubmissionDirectoryRow[] = []\n entities.forEach(entity => {\n newRows.push({\n id: entity.id!,\n name:\n entityType === EntityType.dockerrepo\n ? (entity.repositoryName ?? entity.name)\n : entity.name,\n modifiedOn: formatDate(dayjs(entity.modifiedOn), 'MM/DD/YY'),\n })\n })\n return newRows\n }\n\n const handlePageChange = (newPageNum: number) => {\n const lastIndexNeeded = Math.min(\n headerResults?.totalChildCount ?? 0,\n (newPageNum + 1) * PER_PAGE,\n )\n if (lastIndexNeeded > fetchedHeaders.length) {\n setFetchNextPage(true)\n }\n setPage(newPageNum)\n }\n\n const itemSelectedHandler = () => {\n onItemSelected(selectedItem!)\n }\n\n function createEntity(file: FileUploadAttempt) {\n // Create Entity\n if (!file) return\n const { fileHandleId, fileName } = file\n const newFileEntity: FileEntity = {\n parentId: challengeProjectId,\n name: fileName,\n concreteType: FILE_ENTITY_CONCRETE_TYPE_VALUE,\n dataFileHandleId: fileHandleId,\n }\n SynapseClient.createEntity(newFileEntity, accessToken)\n .then(() => {\n reset()\n })\n .catch((err: SynapseClientError) => {\n setErrorMessage(err.reason)\n })\n }\n\n async function updateEntity() {\n if (!uploadAttempt) return\n const { fileHandleId, entityId } = uploadAttempt\n if (!entityId)\n return setErrorMessage('Error: missing entityId. Please try again.')\n // Get the entity\n let entity: FileEntity\n try {\n entity = await SynapseClient.getEntity(accessToken, entityId)\n } catch (err) {\n return setErrorMessage(`The entity ${entityId} could not be retrieved.`)\n }\n\n const updateRequest: FileEntity = {\n id: entity.id,\n name: entity.name,\n dataFileHandleId: fileHandleId,\n concreteType: FILE_ENTITY_CONCRETE_TYPE_VALUE,\n parentId: entity.parentId,\n etag: entity.etag,\n modifiedOn: entity.modifiedOn,\n }\n\n try {\n const updatedEntity = await SynapseClient.updateEntity(\n updateRequest,\n accessToken,\n true,\n )\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n updatedEntity.id!,\n )\n queryClient.setQueryData(\n keyFactory.getEntityQueryKey(updatedEntity.id!),\n updatedEntity,\n )\n reset()\n } catch (err) {\n setErrorMessage(err.reason)\n }\n }\n\n const handleUpload = async (response: UploadCallbackResp) => {\n if (response.success && response.resp) {\n const { fileName } = response.resp\n\n // Lookup entity\n const entityLookupRequest: EntityLookupRequest = {\n entityName: fileName,\n parentId: challengeProjectId,\n }\n try {\n const entityId = await SynapseClient.lookupChildEntity(\n entityLookupRequest,\n accessToken,\n )\n // Entity exists, prompt user to update it\n if (entityId) {\n setUploadAttempt({ ...response.resp, entityId: entityId.id })\n setConfirmOpen(true)\n }\n } catch (err) {\n // An existing entity was not found for this file, create it\n setUploadAttempt(undefined)\n createEntity(response.resp)\n }\n } else if (!response.success && response.error) {\n setErrorMessage(response.error.reason as string)\n } else {\n setErrorMessage('An unknown error occurred. Please try again.')\n }\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n backgroundColor: '#FBFBFC',\n padding: '10px',\n justifyContent: 'space-between',\n }}\n >\n <Typography\n variant=\"h6\"\n sx={{ fontSize: '18px', lineHeight: '20px', fontWeight: 700 }}\n >\n {entityType === EntityType.file\n ? 'Submit File'\n : 'Submit Docker Image'}\n </Typography>\n <Box sx={{ display: 'flex' }}>\n <Typography\n variant=\"body1\"\n sx={{ fontSize: '14px', color: '#71767F' }}\n >\n Your Project SynID:{' '}\n <Link to={{ pathname: PROJECT_URL }} target=\"_blank\">\n {challengeProjectId}\n </Link>\n </Typography>\n <CopyToClipboardIcon value={PROJECT_URL} sx={{ marginTop: '-4px' }} />\n </Box>\n </Box>\n <Box\n sx={{\n my: 3,\n display: 'flex',\n }}\n >\n <NotesTwoTone\n sx={{\n width: '16px',\n height: '16px',\n verticalAlign: 'text-bottom',\n }}\n />\n <Box\n sx={{\n ml: 1,\n }}\n >\n {entityType === EntityType.file && (\n <>\n Choose a prediction file from your submission directory below and\n click \"Submit Selection\" to pick an evaluation queue. If you need\n to add a new file, click \"Upload File\" first.\n </>\n )}\n {entityType === EntityType.dockerrepo && (\n <>\n Choose a Docker image from your submission directory below and\n click \"Submit Selection\" to pick an image version and evaluation\n queue. If you need to upload a new image to your project (\n <code>{challengeProjectId}</code>), see our{' '}\n <Link\n to=\"https://github.com/Sage-Bionetworks-Challenges/sample-model-templates#build-your-model\"\n target=\"_blank\"\n >\n Docker model submission guide\n </Link>{' '}\n for command-line instructions on how to build and upload.\n </>\n )}\n </Box>\n </Box>\n <Box>\n <DataGrid\n loading={areEntitiesLoading}\n columns={columns}\n rows={getRows(entities)}\n rowCount={headerResults?.totalChildCount ?? 0}\n pagination\n paginationMode=\"server\"\n paginationModel={{ page, pageSize: PER_PAGE }}\n pageSizeOptions={[PER_PAGE]}\n onPaginationModelChange={({ page }) => {\n handlePageChange(page)\n }}\n density=\"compact\"\n autoHeight\n sx={{\n fontSize: '14px',\n border: 'none',\n height: '100%',\n '& .MuiDataGrid-columnHeader': {\n backgroundColor: '#F1F3F5',\n },\n '& .Mui-odd': {\n backgroundColor: '#FBFBFC',\n },\n '.MuiDataGrid-columnHeaderTitleContainer': {\n justifyContent: 'space-between',\n },\n '.radio': {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n },\n }}\n getRowClassName={params =>\n params.indexRelativeToCurrentPage % 2 === 0 ? 'Mui-even' : 'Mui-odd'\n }\n />\n </Box>\n {errorMessage && <ErrorBanner error={errorMessage}></ErrorBanner>}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n {entityType === EntityType.file && (\n <FileUpload\n label=\"Upload File\"\n buttonProps={{\n variant: 'outlined',\n endIcon: <IconSvg icon=\"upload\" />,\n sx: { lineHeight: 1 },\n }}\n onComplete={resp => {\n handleUpload(resp)\n }}\n />\n )}\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={itemSelectedHandler}\n disabled={!canSubmit}\n >\n Submit Selection\n </Button>\n </Box>\n <ConfirmationDialog\n open={confirmOpen}\n title=\"File exists\"\n content={\n <Typography variant=\"body1\" sx={{ fontSize: '16px' }}>\n A file named &quot;{uploadAttempt?.fileName}&quot; (\n {uploadAttempt?.entityId}) already exists in this location. Do you\n want to update the existing file and create a new version?\n </Typography>\n }\n onCancel={() => setConfirmOpen(false)}\n onConfirm={() => {\n updateEntity()\n setConfirmOpen(false)\n }}\n />\n </Box>\n )\n}\n\nexport default SubmissionDirectoryList\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CreateChallengeTeam.d.ts","sourceRoot":"","sources":["../../../src/components/ChallengeTeamWizard/CreateChallengeTeam.tsx"],"names":[],"mappings":"AAiBA,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,CAAA;AAGD,eAAO,MAAM,uBAAuB,iIAC4F,CAAA;AAEhI,MAAM,MAAM,yBAAyB,GAAG;IAEtC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,gIAmL9B,CAAA"}
1
+ {"version":3,"file":"CreateChallengeTeam.d.ts","sourceRoot":"","sources":["../../../src/components/ChallengeTeamWizard/CreateChallengeTeam.tsx"],"names":[],"mappings":"AAiBA,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,CAAA;AAGD,eAAO,MAAM,uBAAuB,iIAC4F,CAAA;AAEhI,MAAM,MAAM,yBAAyB,GAAG;IAEtC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,mBAAmB,gIA+K9B,CAAA"}
@@ -2,21 +2,21 @@ import e from "../TextField/index.js";
2
2
  import t from "./useCreateAndRegisterChallengeTeam.js";
3
3
  import { forwardRef as n, useEffect as r, useImperativeHandle as i, useMemo as a, useState as o } from "react";
4
4
  import { isEmpty as s, noop as c } from "lodash-es";
5
- import { Alert as l, Box as u, Typography as d } from "@mui/material";
6
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
7
- import m from "papaparse";
5
+ import { Alert as l, Box as u, Stack as d, Typography as f } from "@mui/material";
6
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
7
+ import h from "papaparse";
8
8
  //#region src/components/ChallengeTeamWizard/CreateChallengeTeam.tsx
9
- var { parse: h } = m, g = 3, _ = "Please limit the initial number of invited members to three. You may add additional members after the team has been created.", v = n(function(n, m) {
10
- let { challengeId: _, onCanSubmitChange: v = c, onFinished: y = c } = n, [b, x] = o({
9
+ var { parse: g } = h, _ = 3, v = "Please limit the initial number of invited members to three. You may add additional members after the team has been created.", y = n(function(n, h) {
10
+ let { challengeId: v, onCanSubmitChange: y = c, onFinished: b = c } = n, [x, S] = o({
11
11
  name: "",
12
12
  description: ""
13
- }), [S, C] = o(""), [w, T] = o(""), E = (e) => {
14
- x({
15
- ...b,
13
+ }), [C, w] = o(""), [T, E] = o(""), D = (e) => {
14
+ S({
15
+ ...x,
16
16
  ...e
17
17
  });
18
- }, { inviteesParseResult: D, parsedInvitees: O } = a(() => {
19
- let e = h(w, {
18
+ }, { inviteesParseResult: O, parsedInvitees: k } = a(() => {
19
+ let e = g(T, {
20
20
  delimiter: ",",
21
21
  transform(e) {
22
22
  return e.trim();
@@ -26,110 +26,113 @@ var { parse: h } = m, g = 3, _ = "Please limit the initial number of invited mem
26
26
  inviteesParseResult: e,
27
27
  parsedInvitees: e.data[0] || []
28
28
  };
29
- }, [w]), k = O.length > g, A = !!(b && b.name && b.name.length > 1 && !k);
29
+ }, [T]), A = k.length > _, j = !!(x && x.name && x.name.length > 1 && !A);
30
30
  r(() => {
31
- v(A);
32
- }, [A, v]);
33
- let { createAndRegisterTeam: j, isPending: M, errors: N } = t();
34
- return i(m, () => ({ submit() {
35
- if (!A) {
31
+ y(j);
32
+ }, [j, y]);
33
+ let { createAndRegisterTeam: M, isPending: N, errors: P } = t();
34
+ return i(h, () => ({ submit() {
35
+ if (!j) {
36
36
  console.warn("Attempted to submit when form data was not valid. Nothing will happen.");
37
37
  return;
38
38
  }
39
- j(b, _, O, S).then(([e]) => {
40
- y(e.id);
39
+ M(x, v, k, C).then(([e]) => {
40
+ b(e.id);
41
41
  }).catch(() => {});
42
42
  } }), [
43
- A,
44
- O,
45
43
  j,
46
- b,
47
- _,
48
- S,
49
- y
50
- ]), /* @__PURE__ */ p(u, { children: [
51
- /* @__PURE__ */ f(d, {
52
- variant: "body1",
53
- sx: { lineHeight: "20px" },
54
- children: "Create a new team for this Challenge!"
55
- }),
56
- /* @__PURE__ */ f(e, {
57
- id: "name",
58
- label: "Team Name",
59
- value: b.name,
60
- fullWidth: !0,
61
- autoFocus: !0,
62
- required: !0,
63
- onChange: (e) => E({ name: e.target.value }),
64
- disabled: M
65
- }),
66
- /* @__PURE__ */ f(u, {
67
- sx: { display: "flex" },
68
- children: /* @__PURE__ */ f(e, {
69
- id: "description",
70
- label: /* @__PURE__ */ f(u, {
71
- sx: {
72
- display: "flex",
73
- gap: 2
74
- },
75
- children: /* @__PURE__ */ f(u, { children: "Team Description" })
76
- }),
77
- value: b.description,
44
+ k,
45
+ M,
46
+ x,
47
+ v,
48
+ C,
49
+ b
50
+ ]), /* @__PURE__ */ m(d, {
51
+ gap: 2,
52
+ children: [
53
+ /* @__PURE__ */ p(f, {
54
+ variant: "body1",
55
+ sx: { lineHeight: "20px" },
56
+ children: "Create a new team for this Challenge!"
57
+ }),
58
+ /* @__PURE__ */ p(e, {
59
+ id: "name",
60
+ label: "Team Name",
61
+ value: x.name,
78
62
  fullWidth: !0,
79
- multiline: !0,
80
- rows: 4,
81
- onChange: (e) => E({ description: e.target.value }),
82
- disabled: M
83
- })
84
- }),
85
- /* @__PURE__ */ f(u, {
86
- sx: { display: "flex" },
87
- children: /* @__PURE__ */ f(e, {
88
- id: "message",
89
- label: /* @__PURE__ */ f(u, {
90
- sx: {
91
- display: "flex",
92
- gap: 2
93
- },
94
- children: /* @__PURE__ */ f(u, { children: "Recruitment Message" })
95
- }),
96
- value: S,
63
+ autoFocus: !0,
64
+ required: !0,
65
+ onChange: (e) => D({ name: e.target.value }),
66
+ disabled: N
67
+ }),
68
+ /* @__PURE__ */ p(u, {
69
+ sx: { display: "flex" },
70
+ children: /* @__PURE__ */ p(e, {
71
+ id: "description",
72
+ label: /* @__PURE__ */ p(u, {
73
+ sx: {
74
+ display: "flex",
75
+ gap: 2
76
+ },
77
+ children: /* @__PURE__ */ p(u, { children: "Team Description" })
78
+ }),
79
+ value: x.description,
80
+ fullWidth: !0,
81
+ multiline: !0,
82
+ rows: 4,
83
+ onChange: (e) => D({ description: e.target.value }),
84
+ disabled: N
85
+ })
86
+ }),
87
+ /* @__PURE__ */ p(u, {
88
+ sx: { display: "flex" },
89
+ children: /* @__PURE__ */ p(e, {
90
+ id: "message",
91
+ label: /* @__PURE__ */ p(u, {
92
+ sx: {
93
+ display: "flex",
94
+ gap: 2
95
+ },
96
+ children: /* @__PURE__ */ p(u, { children: "Recruitment Message" })
97
+ }),
98
+ value: C,
99
+ fullWidth: !0,
100
+ multiline: !0,
101
+ rows: 4,
102
+ onChange: (e) => w(e.target.value),
103
+ disabled: N
104
+ })
105
+ }),
106
+ /* @__PURE__ */ p(e, {
107
+ id: "invitees",
108
+ label: "Emails of Additional Members to Invite (max 3)",
109
+ placeholder: "Enter emails separated by comma",
110
+ value: T,
97
111
  fullWidth: !0,
98
- multiline: !0,
99
- rows: 4,
100
- onChange: (e) => C(e.target.value),
101
- disabled: M
112
+ onChange: (e) => E(e.target.value),
113
+ disabled: N
114
+ }),
115
+ (A || !s(O.errors) || P) && /* @__PURE__ */ m(l, {
116
+ severity: "error",
117
+ children: [
118
+ A && /* @__PURE__ */ p(f, {
119
+ variant: "body1",
120
+ children: "Please limit the initial number of invited members to three. You may add additional members after the team has been created."
121
+ }),
122
+ O.errors.map((e, t) => /* @__PURE__ */ p(f, {
123
+ variant: "body1",
124
+ children: e.message
125
+ }, t)),
126
+ P && P.map((e) => /* @__PURE__ */ p(f, {
127
+ variant: "body1",
128
+ children: e.reason
129
+ }, e.reason))
130
+ ]
102
131
  })
103
- }),
104
- /* @__PURE__ */ f(e, {
105
- id: "invitees",
106
- label: "Emails of Additional Members to Invite (max 3)",
107
- placeholder: "Enter emails separated by comma",
108
- value: w,
109
- fullWidth: !0,
110
- onChange: (e) => T(e.target.value),
111
- disabled: M
112
- }),
113
- (k || !s(D.errors) || N) && /* @__PURE__ */ p(l, {
114
- severity: "error",
115
- children: [
116
- k && /* @__PURE__ */ f(d, {
117
- variant: "body1",
118
- children: "Please limit the initial number of invited members to three. You may add additional members after the team has been created."
119
- }),
120
- D.errors.map((e, t) => /* @__PURE__ */ f(d, {
121
- variant: "body1",
122
- children: e.message
123
- }, t)),
124
- N && N.map((e) => /* @__PURE__ */ f(d, {
125
- variant: "body1",
126
- children: e.reason
127
- }, e.reason))
128
- ]
129
- })
130
- ] });
132
+ ]
133
+ });
131
134
  });
132
135
  //#endregion
133
- export { v as CreateChallengeTeam, _ as TOO_MANY_INVITEES_ERROR };
136
+ export { y as CreateChallengeTeam, v as TOO_MANY_INVITEES_ERROR };
134
137
 
135
138
  //# sourceMappingURL=CreateChallengeTeam.js.map