synapse-react-client 4.0.9 → 4.0.10

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 (543) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  6. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  7. package/dist/assets/icons/TasksIcon.d.ts.map +1 -1
  8. package/dist/assets/icons/TasksIcon.js +6 -10
  9. package/dist/assets/icons/TasksIcon.js.map +1 -1
  10. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  11. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js +69 -63
  12. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  13. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  14. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  15. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  17. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  18. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  19. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  20. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  21. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  22. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  23. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  24. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  25. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  26. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
  27. package/dist/components/Authentication/AuthenticationMethodSelection.js +38 -37
  28. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  29. package/dist/components/Authentication/Constants.d.ts +1 -0
  30. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  31. package/dist/components/Authentication/Constants.js +2 -2
  32. package/dist/components/Authentication/Constants.js.map +1 -1
  33. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  34. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  35. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  36. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  37. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  38. package/dist/components/Authentication/StandaloneLoginForm.js +1 -1
  39. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  40. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  41. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +2 -1
  42. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  43. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  44. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  45. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  46. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  47. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  48. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  49. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  50. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  51. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  52. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  53. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  54. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  55. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  56. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  57. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  58. package/dist/components/ChangePassword/useChangePasswordFormState.js +1 -1
  59. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  60. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  61. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  62. package/dist/components/ComponentCollapse.js.map +1 -1
  63. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  64. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  65. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  66. package/dist/components/DataGrid/DataGrid.d.ts +0 -1
  67. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  68. package/dist/components/DataGrid/DataGrid.js +72 -72
  69. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  70. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  71. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  72. package/dist/components/DataGrid/DataGridWebSocket.js +9 -8
  73. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  74. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  75. package/dist/components/DataGrid/SynapseGrid.js +326 -268
  76. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  77. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +2 -0
  78. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  79. package/dist/components/DataGrid/columns/AutocompleteColumn.js +113 -67
  80. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  81. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts +2 -1
  82. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  83. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +126 -122
  84. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  85. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +58 -0
  86. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -0
  87. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +52 -0
  88. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -0
  89. package/dist/components/DataGrid/components/ValidationAlert.d.ts +5 -2
  90. package/dist/components/DataGrid/components/ValidationAlert.d.ts.map +1 -1
  91. package/dist/components/DataGrid/components/ValidationAlert.js +429 -24
  92. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  93. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  94. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  95. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  96. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  97. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  98. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +7 -0
  99. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  100. package/dist/components/DataGrid/useDataGridWebsocket.js +16 -2
  101. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  102. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  103. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  104. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  105. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  106. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  107. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  108. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  109. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  110. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  111. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  112. package/dist/components/DataGrid/utils/getCellClassName.js +8 -8
  113. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  114. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  115. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  116. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  117. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  118. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  119. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  120. package/dist/components/DirectDownloadButton.js.map +1 -1
  121. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  122. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  123. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  124. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  125. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  126. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  127. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  128. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  129. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  130. package/dist/components/EntityAclEditor/EntityAclEditor.js +103 -103
  131. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  132. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  133. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  134. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  135. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  136. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.d.ts.map +1 -1
  137. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +36 -30
  138. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  139. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  140. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  141. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  142. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  143. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  144. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  145. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  146. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  147. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  148. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  149. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  150. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  151. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  152. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  153. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  154. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  155. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  156. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  157. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  158. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  159. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  160. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  161. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  162. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  163. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  164. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  165. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  166. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  167. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  168. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  169. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  170. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  171. package/dist/components/Forum/ForumTable.js.map +1 -1
  172. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  173. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  174. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  175. package/dist/components/GenericCard/GenericCard.js +12 -7
  176. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  177. package/dist/components/GenericCard/Linkify.js.map +1 -1
  178. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  179. package/dist/components/GenericCard/TableRowGenericCard.js +105 -105
  180. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  181. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  182. package/dist/components/Goals/Goals.js.map +1 -1
  183. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  184. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  185. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  186. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  187. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  188. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  189. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  190. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  191. package/dist/components/HeaderCard.d.ts +6 -1
  192. package/dist/components/HeaderCard.d.ts.map +1 -1
  193. package/dist/components/HeaderCard.js +107 -76
  194. package/dist/components/HeaderCard.js.map +1 -1
  195. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  196. package/dist/components/IconList.js.map +1 -1
  197. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  198. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  199. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  200. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  201. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  202. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  203. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  204. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  205. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  206. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  207. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  208. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  209. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  210. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  211. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  212. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  213. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  214. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js +45 -39
  215. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  216. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  217. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  218. package/dist/components/Plot/DotPlot.js.map +1 -1
  219. package/dist/components/Plot/Plot.js.map +1 -1
  220. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  221. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  222. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  223. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  224. package/dist/components/PortalAclEditor/PortalAclEditor.js +43 -41
  225. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  226. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  227. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  228. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  229. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  230. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  231. package/dist/components/Programs/Programs.js.map +1 -1
  232. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  233. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  234. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  235. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  236. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  237. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  238. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  239. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  240. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  241. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  242. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  243. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  244. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  245. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  246. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  247. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  248. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  249. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  250. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  251. package/dist/components/Resources/Resources.js.map +1 -1
  252. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  253. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  254. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  255. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  256. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  257. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  258. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  259. package/dist/components/SourceAppImage.js.map +1 -1
  260. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  261. package/dist/components/StatisticsPlot.js.map +1 -1
  262. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  263. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  264. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  265. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  266. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  267. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  268. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  269. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  270. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  271. package/dist/components/SynapseForm/SynapseForm.js +4 -2
  272. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  273. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  274. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  275. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  276. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  277. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  278. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  279. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  280. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  281. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts +8 -7
  282. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  283. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +173 -164
  284. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  285. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  286. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  287. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  288. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  289. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  290. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  291. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  292. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  293. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  294. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  295. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  296. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  297. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  298. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  299. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  300. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  301. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +1 -1
  302. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  303. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  304. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  305. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  306. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  307. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  308. package/dist/components/TanStackTable/ColumnHeader.d.ts +1 -0
  309. package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
  310. package/dist/components/TanStackTable/ColumnHeader.js +8 -8
  311. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  312. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  313. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  314. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  315. package/dist/components/TextField/TextField.js.map +1 -1
  316. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  317. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  318. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  319. package/dist/components/UserCard/Avatar.js.map +1 -1
  320. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  321. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  322. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  323. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  324. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  325. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  326. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  327. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  328. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  329. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  330. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  331. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  332. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  333. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  334. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  335. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  336. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  337. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  338. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  339. package/dist/components/error/ErrorPage.js.map +1 -1
  340. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  341. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  342. package/dist/components/layout/SWCHeader.d.ts +9 -0
  343. package/dist/components/layout/SWCHeader.d.ts.map +1 -0
  344. package/dist/components/layout/SWCHeader.js +19 -0
  345. package/dist/components/layout/SWCHeader.js.map +1 -0
  346. package/dist/components/layout/SWCPageLayout.d.ts +9 -0
  347. package/dist/components/layout/SWCPageLayout.d.ts.map +1 -0
  348. package/dist/components/layout/SWCPageLayout.js +14 -0
  349. package/dist/components/layout/SWCPageLayout.js.map +1 -0
  350. package/dist/components/menu/ComplexMenu.js.map +1 -1
  351. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  352. package/dist/components/styled/StyledPopover.js.map +1 -1
  353. package/dist/components/table/CsvPreview/CsvPreview.js +2 -1
  354. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  355. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  356. package/dist/components/trash/TrashCanList.js.map +1 -1
  357. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  358. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  359. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  360. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  361. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  362. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  363. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  364. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  365. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  366. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  367. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  368. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  369. package/dist/features/curator/GridPage/components/GridPageTitle.d.ts.map +1 -1
  370. package/dist/features/curator/GridPage/components/GridPageTitle.js +23 -30
  371. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  372. package/dist/features/curator/dashboard/CuratorDashboard.d.ts +2 -0
  373. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -0
  374. package/dist/features/curator/dashboard/CuratorDashboard.js +45 -0
  375. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -0
  376. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -0
  377. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +9 -0
  378. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -0
  379. package/dist/features/curator/dashboard/components/CurationTaskCard.js +106 -0
  380. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -0
  381. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +12 -0
  382. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -0
  383. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +52 -0
  384. package/dist/features/curator/dashboard/components/NextStepButton.css +1 -0
  385. package/dist/features/curator/dashboard/components/NextStepButton.d.ts +14 -0
  386. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -0
  387. package/dist/features/curator/dashboard/components/NextStepButton.js +35 -0
  388. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -0
  389. package/dist/features/curator/dashboard/components/NextStepButton.module.js +11 -0
  390. package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -0
  391. package/dist/features/curator/dashboard/components/NextStepButton.module.scss +57 -0
  392. package/dist/features/curator/dashboard/components/UserOrTeamChip.css +1 -1
  393. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js +1 -1
  394. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js.map +1 -1
  395. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.scss +5 -5
  396. package/dist/features/curator/dashboard/components/shared.css +1 -0
  397. package/dist/features/curator/dashboard/components/shared.module.js +5 -0
  398. package/dist/features/curator/dashboard/components/shared.module.js.map +1 -0
  399. package/dist/features/curator/dashboard/components/shared.module.scss +8 -0
  400. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -2
  401. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  402. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +16 -34
  403. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  404. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  405. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  406. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  407. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  408. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  409. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  410. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts +10 -0
  411. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -0
  412. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +37 -0
  413. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -0
  414. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  415. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -0
  416. package/dist/features/entity/metadata-task/utils/constants.js +6 -0
  417. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -0
  418. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  419. package/dist/mocks/entity/mockDataset.js.map +1 -1
  420. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  421. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  422. package/dist/mocks/entity/mockFileView.js.map +1 -1
  423. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  424. package/dist/mocks/entity/mockProject.js.map +1 -1
  425. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  426. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  427. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  428. package/dist/mocks/mockWiki.js.map +1 -1
  429. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  430. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  431. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  432. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  433. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  434. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  435. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  436. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  437. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  438. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  439. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  440. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  441. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  442. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  443. package/dist/ror-client/index.js.map +1 -1
  444. package/dist/style/components/_cards.scss +4 -0
  445. package/dist/style/components/_data-grid-extra.css +1 -1
  446. package/dist/style/components/_data-grid-extra.scss +2 -0
  447. package/dist/style/main.css +1 -1
  448. package/dist/synapse-client/HttpClient.js.map +1 -1
  449. package/dist/synapse-client/SynapseClient.js.map +1 -1
  450. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  451. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  452. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -1
  453. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  454. package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
  455. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  456. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  457. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  458. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  459. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  460. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  461. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  462. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  463. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  464. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  465. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  466. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  467. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  468. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  469. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  470. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  471. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  472. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  473. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  474. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  475. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  476. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  477. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  478. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  479. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  480. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  481. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  482. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  483. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  484. package/dist/theme/ThemeProvider.js.map +1 -1
  485. package/dist/tsconfig.build.tsbuildinfo +1 -1
  486. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  487. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  488. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  489. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  490. package/dist/utils/context/SynapseContext.js.map +1 -1
  491. package/dist/utils/functions/AccessControlListUtils.d.ts +4 -0
  492. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  493. package/dist/utils/functions/AccessControlListUtils.js +12 -1
  494. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  495. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  496. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  497. package/dist/utils/functions/RealmUtils.d.ts +4 -0
  498. package/dist/utils/functions/RealmUtils.d.ts.map +1 -1
  499. package/dist/utils/functions/RealmUtils.js +9 -3
  500. package/dist/utils/functions/RealmUtils.js.map +1 -1
  501. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  502. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  503. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  504. package/dist/utils/functions/StringUtils.js.map +1 -1
  505. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  506. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  507. package/dist/utils/functions/getEndpoint.js.map +1 -1
  508. package/dist/utils/functions/getUserData.js.map +1 -1
  509. package/dist/utils/functions/queryUtils.js.map +1 -1
  510. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  511. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  512. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  513. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  514. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  515. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  516. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  517. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  518. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  519. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  520. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  521. package/dist/utils/hooks/useIsBot.js.map +1 -1
  522. package/dist/utils/hooks/useListState.js.map +1 -1
  523. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  524. package/dist/utils/hooks/useLogin.js +53 -52
  525. package/dist/utils/hooks/useLogin.js.map +1 -1
  526. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  527. package/dist/utils/hooks/useOverlay.js.map +1 -1
  528. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  529. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  530. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  531. package/dist/utils/hooks/useSet.js.map +1 -1
  532. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  533. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  534. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  535. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  536. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  537. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  538. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  539. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  540. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  541. package/dist/utils/html/TargetEnum.js.map +1 -1
  542. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  543. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"FacetFilterControls.js","names":[],"sources":["../../../../src/components/widgets/query-filter/FacetFilterControls.tsx"],"sourcesContent":["import {\n facetObjectMatchesDefinition,\n getCorrespondingColumnForFacet,\n isSingleNotSetValue,\n} from '@/utils/functions/queryUtils'\nimport {\n FacetColumnRequest,\n FacetColumnResultRange,\n FacetColumnResultValues,\n FacetColumnValuesRequest,\n QueryBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { groupBy, noop, sortBy, union } from 'lodash-es'\nimport { Suspense, useCallback, useMemo, useState } from 'react'\nimport { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useSuspenseGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { CombinedRangeFacetFilter } from './CombinedRangeFacetFilter'\nimport { EnumFacetFilter } from './EnumFacetFilter/EnumFacetFilter'\nimport { FacetChip } from './FacetChip'\nimport { FacetFilterHeader } from './FacetFilterHeader'\nimport { FacetFilterControlsSkeleton } from './FacetFilterSkeleton'\nimport { getDefaultShownFacetFilters } from './FacetFilterUtils'\nimport JsonColumnFacetFilters from './JsonColumnFacetFilters'\nimport { RangeFacetFilter } from './RangeFacetFilter'\n\nexport type FacetFilterControlsProps = {\n /* The set of faceted column names that should be shown in the Facet controls. If undefined, all faceted columns with\n at least one non-null value will be shown. */\n availableFacets?: string[]\n initialExpandedFacetControls?: string[]\n}\n\nconst convertFacetToFacetColumnValuesRequest = (\n facet: FacetColumnResultValues,\n): FacetColumnValuesRequest => ({\n concreteType: 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n columnName: facet.columnName,\n facetValues: facet.facetValues\n .filter(facet => facet.isSelected)\n .map(facet => facet.value),\n})\n\nconst patchRequestFacets = (\n changedFacet: FacetColumnRequest,\n selections: FacetColumnRequest[] = [],\n): FacetColumnRequest[] => {\n const changedFacetIndex = selections.findIndex(facet =>\n facetObjectMatchesDefinition(facet, changedFacet),\n )\n const isEmptyValuesFacet =\n changedFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest' &&\n (!changedFacet.facetValues || !changedFacet.facetValues.length)\n const isEmptyRangesFacet =\n changedFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnRangeRequest' &&\n (!changedFacet.min || !changedFacet.max)\n\n if (changedFacetIndex > -1) {\n if (isEmptyValuesFacet || isEmptyRangesFacet) {\n selections.splice(changedFacetIndex, 1)\n } else {\n selections[changedFacetIndex] = changedFacet\n }\n } else {\n selections.push(changedFacet)\n }\n return selections\n}\n\nexport function applyChangesToValuesColumn(\n lastRequest: QueryBundleRequest | undefined,\n facet: FacetColumnResultValues,\n onChangeFn: (result: FacetColumnRequest[]) => void,\n facetName?: string,\n checked: boolean = false,\n) {\n if (facetName) {\n facet.facetValues.forEach(facetValue => {\n if (facetValue.value === facetName) {\n facetValue.isSelected = checked\n }\n })\n } else {\n // else clear all\n facet.facetValues.forEach(facet => {\n facet.isSelected = false\n })\n }\n\n const changedFacet = convertFacetToFacetColumnValuesRequest(facet)\n const result = patchRequestFacets(\n changedFacet,\n lastRequest?.query?.selectedFacets,\n )\n onChangeFn(result)\n}\n\nfunction FacetFilterControls(props: FacetFilterControlsProps) {\n const { availableFacets, initialExpandedFacetControls } = props\n const { getCurrentQueryRequest, combineRangeFacetConfig } = useQueryContext()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n const lastRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n\n const facets = queryMetadata\n .facets!.filter(\n facet =>\n // If availableFacets is configured, remove those that don't match.\n availableFacets == null || availableFacets.includes(facet.columnName),\n )\n // Don't include json subcolumn facets, those will be handled separately\n .filter(facet => facet.jsonPath == null)\n .filter(\n facet =>\n // Don't show facets if included in the combine range facet config, handled separately\n combineRangeFacetConfig == null ||\n (combineRangeFacetConfig.maxFacetColumn !== facet.columnName &&\n combineRangeFacetConfig.minFacetColumn !== facet.columnName),\n )\n .filter(\n facet =>\n // Don't show facets where there are no values\n !isSingleNotSetValue(facet),\n )\n\n const combinedRangeFacets = combineRangeFacetConfig\n ? queryMetadata.facets!.filter(\n facet =>\n combineRangeFacetConfig.maxFacetColumn === facet.columnName ||\n combineRangeFacetConfig.minFacetColumn === facet.columnName,\n )\n : []\n\n // Group JSON facets by column name, so they can be grouped in the UI under their parent column name\n const jsonFacetsGroupedByColumn = groupBy(\n queryMetadata.facets!.filter(f => !!f.jsonPath),\n 'columnName',\n )\n\n const allFacetColumns: string[] = useMemo(() => {\n const allFacetColumns: string[] = []\n facets.forEach(facet => allFacetColumns.push(facet.columnName))\n if (combineRangeFacetConfig) {\n allFacetColumns.push(combineRangeFacetConfig.label)\n }\n if (jsonFacetsGroupedByColumn) {\n Object.keys(jsonFacetsGroupedByColumn).forEach(jsonColumn =>\n allFacetColumns.push(jsonColumn),\n )\n }\n return allFacetColumns\n }, [combineRangeFacetConfig, facets, jsonFacetsGroupedByColumn])\n\n // Controls which facet columns are shown/hidden by clicking on chips. NOTE: One column may have multiple facets (e.g. JSON subcolumn facets)\n const [facetColumnsShown, setFacetColumnsShown] = useState<Set<string>>(\n getDefaultShownFacetFilters(\n allFacetColumns,\n lastRequest.query.selectedFacets,\n ),\n )\n\n /**\n * When the data facets change, reset the initially-selected chips\n */\n useDeepCompareEffectNoCheck(() => {\n // Select the first three facet columns, plus any columns where a facet is already filtered,\n // (PORTALS-3513) plus the initially expanded filters and any filters that the user explicitly expanded\n const expandedFacets = union(\n initialExpandedFacetControls ?? [],\n Array.from(facetColumnsShown),\n )\n setFacetColumnsShown(\n getDefaultShownFacetFilters(\n allFacetColumns,\n lastRequest.query.selectedFacets,\n expandedFacets,\n ),\n )\n }, [facets])\n\n const columnModels = queryMetadata.columnModels\n\n const toggleShowFacetFilter = useCallback(\n (facetColumnName: string) => {\n const newFacetColumnsShown = new Set(facetColumnsShown)\n if (newFacetColumnsShown.has(facetColumnName)) {\n newFacetColumnsShown.delete(facetColumnName)\n } else {\n newFacetColumnsShown.add(facetColumnName)\n }\n setFacetColumnsShown(newFacetColumnsShown)\n },\n [facetColumnsShown],\n )\n const combinedRangeFacetsColumnModelType = combineRangeFacetConfig\n ? columnModels!.find(\n model => model.name === combineRangeFacetConfig.minFacetColumn,\n )?.columnType\n : undefined\n\n const shownTopLevelFacets = useMemo(\n () =>\n (facets ?? []).filter(facet => facetColumnsShown.has(facet.columnName)),\n [facetColumnsShown, facets],\n )\n\n const shownJsonFacetGroups = useMemo(\n () =>\n Object.entries(jsonFacetsGroupedByColumn).filter(([columnName]) =>\n facetColumnsShown.has(columnName),\n ),\n [facetColumnsShown, jsonFacetsGroupedByColumn],\n )\n\n return (\n <div className={`FacetFilterControls`}>\n <div>\n <FacetFilterHeader\n label={'Available Filters'}\n hideCollapsible\n isCollapsed={false}\n onClick={noop}\n />\n {sortBy(allFacetColumns).map(columnName => {\n return (\n <FacetChip\n key={columnName}\n onClick={() => toggleShowFacetFilter(columnName)}\n isChecked={facetColumnsShown.has(columnName)}\n >\n {getColumnDisplayName(columnName)}\n </FacetChip>\n )\n })}\n </div>\n {combineRangeFacetConfig && combinedRangeFacets.length >= 2 && (\n <CombinedRangeFacetFilter\n facetResults={combinedRangeFacets as FacetColumnResultRange[]}\n label={combineRangeFacetConfig.label}\n columnType={combinedRangeFacetsColumnModelType!}\n />\n )}\n {shownTopLevelFacets.map(facet => {\n const columnModel = getCorrespondingColumnForFacet(facet, columnModels!)\n return (\n <div className=\"FacetFilterControls__facet\" key={facet.columnName}>\n {facet.facetType === 'enumeration' && columnModel && (\n <EnumFacetFilter containerAs=\"Collapsible\" facet={facet} />\n )}\n {facet.facetType === 'range' && columnModel && (\n <RangeFacetFilter facetResult={facet} />\n )}\n </div>\n )\n })}\n {shownJsonFacetGroups.map(([columnName, facets]) => {\n const columnModel = queryMetadata?.columnModels?.find(\n cm => cm.name === columnName,\n )\n return (\n columnModel && (\n <JsonColumnFacetFilters\n key={columnName}\n columnModel={columnModel}\n facets={facets}\n />\n )\n )\n })}\n </div>\n )\n}\n\nexport default function FacetFilterControlsWithSuspense(\n props: FacetFilterControlsProps,\n) {\n return (\n <Suspense fallback={<FacetFilterControlsSkeleton />}>\n <FacetFilterControls {...props} />\n </Suspense>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkCA,IAAM,KACJ,OAC8B;CAC9B,cAAc;CACd,YAAY,EAAM;CAClB,aAAa,EAAM,YAChB,QAAO,MAAS,EAAM,WAAW,CACjC,KAAI,MAAS,EAAM,MAAM;CAC7B,GAEK,KACJ,GACA,IAAmC,EAAE,KACZ;CACzB,IAAM,IAAoB,EAAW,WAAU,MAC7C,EAA6B,GAAO,EAAa,CAClD,EACK,IACJ,EAAa,iBACX,oEACD,CAAC,EAAa,eAAe,CAAC,EAAa,YAAY,SACpD,IACJ,EAAa,iBACX,mEACD,CAAC,EAAa,OAAO,CAAC,EAAa;AAWtC,QATI,IAAoB,KAClB,KAAsB,IACxB,EAAW,OAAO,GAAmB,EAAE,GAEvC,EAAW,KAAqB,IAGlC,EAAW,KAAK,EAAa,EAExB;;AAGT,SAAgB,EACd,GACA,GACA,GACA,GACA,IAAmB,IACnB;AAmBA,CAlBI,IACF,EAAM,YAAY,SAAQ,MAAc;AACtC,EAAI,EAAW,UAAU,MACvB,EAAW,aAAa;GAE1B,GAGF,EAAM,YAAY,SAAQ,MAAS;AACjC,IAAM,aAAa;GACnB,EAQJ,EAJe,EADM,EAAuC,EAAM,EAGhE,GAAa,OAAO,eACrB,CACiB;;AAGpB,SAAS,EAAoB,GAAiC;CAC5D,IAAM,EAAE,oBAAiB,oCAAiC,GACpD,EAAE,2BAAwB,+BAA4B,GAAiB,EACvE,EAAE,4BAAyB,GAA8B,EACzD,IAAc,QACZ,GAAwB,EAC9B,CAAC,EAAuB,CACzB,EACK,EAAE,MAAM,MAAkB,GAA6B,EAEvD,IAAS,EACZ,OAAQ,QACP,MAEE,KAAmB,QAAQ,EAAgB,SAAS,EAAM,WAAW,CACxE,CAEA,QAAO,MAAS,EAAM,YAAY,KAAK,CACvC,QACC,MAEE,KAA2B,QAC1B,EAAwB,mBAAmB,EAAM,cAChD,EAAwB,mBAAmB,EAAM,WACtD,CACA,QACC,MAEE,CAAC,EAAoB,EAAM,CAC9B,EAEG,IAAsB,IACxB,EAAc,OAAQ,QACpB,MACE,EAAwB,mBAAmB,EAAM,cACjD,EAAwB,mBAAmB,EAAM,WACpD,GACD,EAAE,EAGA,IAA4B,EAChC,EAAc,OAAQ,QAAO,MAAK,CAAC,CAAC,EAAE,SAAS,EAC/C,aACD,EAEK,IAA4B,QAAc;EAC9C,IAAM,IAA4B,EAAE;AAUpC,SATA,EAAO,SAAQ,MAAS,EAAgB,KAAK,EAAM,WAAW,CAAC,EAC3D,KACF,EAAgB,KAAK,EAAwB,MAAM,EAEjD,KACF,OAAO,KAAK,EAA0B,CAAC,SAAQ,MAC7C,EAAgB,KAAK,EAAW,CACjC,EAEI;IACN;EAAC;EAAyB;EAAQ;EAA0B,CAAC,EAG1D,CAAC,GAAmB,KAAwB,EAChD,EACE,GACA,EAAY,MAAM,eACnB,CACF;AAKD,SAAkC;EAGhC,IAAM,IAAiB,EACrB,KAAgC,EAAE,EAClC,MAAM,KAAK,EAAkB,CAC9B;AACD,IACE,EACE,GACA,EAAY,MAAM,gBAClB,EACD,CACF;IACA,CAAC,EAAO,CAAC;CAEZ,IAAM,IAAe,EAAc,cAE7B,IAAwB,GAC3B,MAA4B;EAC3B,IAAM,IAAuB,IAAI,IAAI,EAAkB;AAMvD,EALI,EAAqB,IAAI,EAAgB,GAC3C,EAAqB,OAAO,EAAgB,GAE5C,EAAqB,IAAI,EAAgB,EAE3C,EAAqB,EAAqB;IAE5C,CAAC,EAAkB,CACpB,EACK,IAAqC,IACvC,EAAc,MACZ,MAAS,EAAM,SAAS,EAAwB,eACjD,EAAE,aACH,KAAA,GAEE,IAAsB,SAEvB,KAAU,EAAE,EAAE,QAAO,MAAS,EAAkB,IAAI,EAAM,WAAW,CAAC,EACzE,CAAC,GAAmB,EAAO,CAC5B,EAEK,IAAuB,QAEzB,OAAO,QAAQ,EAA0B,CAAC,QAAQ,CAAC,OACjD,EAAkB,IAAI,EAAW,CAClC,EACH,CAAC,GAAmB,EAA0B,CAC/C;AAED,QACE,kBAAC,OAAD;EAAK,WAAW;YAAhB;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IACE,OAAO;IACP,iBAAA;IACA,aAAa;IACb,SAAS;IACT,CAAA,EACD,EAAO,EAAgB,CAAC,KAAI,MAEzB,kBAAC,GAAD;IAEE,eAAe,EAAsB,EAAW;IAChD,WAAW,EAAkB,IAAI,EAAW;cAE3C,EAAqB,EAAW;IACvB,EALL,EAKK,CAEd,CACE,EAAA,CAAA;GACL,KAA2B,EAAoB,UAAU,KACxD,kBAAC,GAAD;IACE,cAAc;IACd,OAAO,EAAwB;IAC/B,YAAY;IACZ,CAAA;GAEH,EAAoB,KAAI,MAAS;IAChC,IAAM,IAAc,EAA+B,GAAO,EAAc;AACxE,WACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACG,EAAM,cAAc,iBAAiB,KACpC,kBAAC,GAAD;MAAiB,aAAY;MAAqB;MAAS,CAAA,EAE5D,EAAM,cAAc,WAAW,KAC9B,kBAAC,GAAD,EAAkB,aAAa,GAAS,CAAA,CAEtC;OAP2C,EAAM,WAOjD;KAER;GACD,EAAqB,KAAK,CAAC,GAAY,OAAY;IAClD,IAAM,IAAc,GAAe,cAAc,MAC/C,MAAM,EAAG,SAAS,EACnB;AACD,WACE,KACE,kBAAC,GAAD;KAEe;KACL;KACR,EAHK,EAGL;KAGN;GACE;;;AAIV,SAAwB,EACtB,GACA;AACA,QACE,kBAAC,GAAD;EAAU,UAAU,kBAAC,GAAD,EAA+B,CAAA;YACjD,kBAAC,GAAD,EAAqB,GAAI,GAAS,CAAA;EACzB,CAAA"}
1
+ {"version":3,"file":"FacetFilterControls.js","names":[],"sources":["../../../../src/components/widgets/query-filter/FacetFilterControls.tsx"],"sourcesContent":["import {\n facetObjectMatchesDefinition,\n getCorrespondingColumnForFacet,\n isSingleNotSetValue,\n} from '@/utils/functions/queryUtils'\nimport {\n FacetColumnRequest,\n FacetColumnResultRange,\n FacetColumnResultValues,\n FacetColumnValuesRequest,\n QueryBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { groupBy, noop, sortBy, union } from 'lodash-es'\nimport { Suspense, useCallback, useMemo, useState } from 'react'\nimport { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useSuspenseGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { CombinedRangeFacetFilter } from './CombinedRangeFacetFilter'\nimport { EnumFacetFilter } from './EnumFacetFilter/EnumFacetFilter'\nimport { FacetChip } from './FacetChip'\nimport { FacetFilterHeader } from './FacetFilterHeader'\nimport { FacetFilterControlsSkeleton } from './FacetFilterSkeleton'\nimport { getDefaultShownFacetFilters } from './FacetFilterUtils'\nimport JsonColumnFacetFilters from './JsonColumnFacetFilters'\nimport { RangeFacetFilter } from './RangeFacetFilter'\n\nexport type FacetFilterControlsProps = {\n /* The set of faceted column names that should be shown in the Facet controls. If undefined, all faceted columns with\n at least one non-null value will be shown. */\n availableFacets?: string[]\n initialExpandedFacetControls?: string[]\n}\n\nconst convertFacetToFacetColumnValuesRequest = (\n facet: FacetColumnResultValues,\n): FacetColumnValuesRequest => ({\n concreteType: 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n columnName: facet.columnName,\n facetValues: facet.facetValues\n .filter(facet => facet.isSelected)\n .map(facet => facet.value),\n})\n\nconst patchRequestFacets = (\n changedFacet: FacetColumnRequest,\n selections: FacetColumnRequest[] = [],\n): FacetColumnRequest[] => {\n const changedFacetIndex = selections.findIndex(facet =>\n facetObjectMatchesDefinition(facet, changedFacet),\n )\n const isEmptyValuesFacet =\n changedFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest' &&\n (!changedFacet.facetValues || !changedFacet.facetValues.length)\n const isEmptyRangesFacet =\n changedFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnRangeRequest' &&\n (!changedFacet.min || !changedFacet.max)\n\n if (changedFacetIndex > -1) {\n if (isEmptyValuesFacet || isEmptyRangesFacet) {\n selections.splice(changedFacetIndex, 1)\n } else {\n selections[changedFacetIndex] = changedFacet\n }\n } else {\n selections.push(changedFacet)\n }\n return selections\n}\n\nexport function applyChangesToValuesColumn(\n lastRequest: QueryBundleRequest | undefined,\n facet: FacetColumnResultValues,\n onChangeFn: (result: FacetColumnRequest[]) => void,\n facetName?: string,\n checked: boolean = false,\n) {\n if (facetName) {\n facet.facetValues.forEach(facetValue => {\n if (facetValue.value === facetName) {\n facetValue.isSelected = checked\n }\n })\n } else {\n // else clear all\n facet.facetValues.forEach(facet => {\n facet.isSelected = false\n })\n }\n\n const changedFacet = convertFacetToFacetColumnValuesRequest(facet)\n const result = patchRequestFacets(\n changedFacet,\n lastRequest?.query?.selectedFacets,\n )\n onChangeFn(result)\n}\n\nfunction FacetFilterControls(props: FacetFilterControlsProps) {\n const { availableFacets, initialExpandedFacetControls } = props\n const { getCurrentQueryRequest, combineRangeFacetConfig } = useQueryContext()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n const lastRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n\n const facets = queryMetadata\n .facets!.filter(\n facet =>\n // If availableFacets is configured, remove those that don't match.\n availableFacets == null || availableFacets.includes(facet.columnName),\n )\n // Don't include json subcolumn facets, those will be handled separately\n .filter(facet => facet.jsonPath == null)\n .filter(\n facet =>\n // Don't show facets if included in the combine range facet config, handled separately\n combineRangeFacetConfig == null ||\n (combineRangeFacetConfig.maxFacetColumn !== facet.columnName &&\n combineRangeFacetConfig.minFacetColumn !== facet.columnName),\n )\n .filter(\n facet =>\n // Don't show facets where there are no values\n !isSingleNotSetValue(facet),\n )\n\n const combinedRangeFacets = combineRangeFacetConfig\n ? queryMetadata.facets!.filter(\n facet =>\n combineRangeFacetConfig.maxFacetColumn === facet.columnName ||\n combineRangeFacetConfig.minFacetColumn === facet.columnName,\n )\n : []\n\n // Group JSON facets by column name, so they can be grouped in the UI under their parent column name\n const jsonFacetsGroupedByColumn = groupBy(\n queryMetadata.facets!.filter(f => !!f.jsonPath),\n 'columnName',\n )\n\n const allFacetColumns: string[] = useMemo(() => {\n const allFacetColumns: string[] = []\n facets.forEach(facet => allFacetColumns.push(facet.columnName))\n if (combineRangeFacetConfig) {\n allFacetColumns.push(combineRangeFacetConfig.label)\n }\n if (jsonFacetsGroupedByColumn) {\n Object.keys(jsonFacetsGroupedByColumn).forEach(jsonColumn =>\n allFacetColumns.push(jsonColumn),\n )\n }\n return allFacetColumns\n }, [combineRangeFacetConfig, facets, jsonFacetsGroupedByColumn])\n\n // Controls which facet columns are shown/hidden by clicking on chips. NOTE: One column may have multiple facets (e.g. JSON subcolumn facets)\n const [facetColumnsShown, setFacetColumnsShown] = useState<Set<string>>(\n getDefaultShownFacetFilters(\n allFacetColumns,\n lastRequest.query.selectedFacets,\n ),\n )\n\n /**\n * When the data facets change, reset the initially-selected chips\n */\n useDeepCompareEffectNoCheck(() => {\n // Select the first three facet columns, plus any columns where a facet is already filtered,\n // (PORTALS-3513) plus the initially expanded filters and any filters that the user explicitly expanded\n const expandedFacets = union(\n initialExpandedFacetControls ?? [],\n Array.from(facetColumnsShown),\n )\n setFacetColumnsShown(\n getDefaultShownFacetFilters(\n allFacetColumns,\n lastRequest.query.selectedFacets,\n expandedFacets,\n ),\n )\n }, [facets])\n\n const columnModels = queryMetadata.columnModels\n\n const toggleShowFacetFilter = useCallback(\n (facetColumnName: string) => {\n const newFacetColumnsShown = new Set(facetColumnsShown)\n if (newFacetColumnsShown.has(facetColumnName)) {\n newFacetColumnsShown.delete(facetColumnName)\n } else {\n newFacetColumnsShown.add(facetColumnName)\n }\n setFacetColumnsShown(newFacetColumnsShown)\n },\n [facetColumnsShown],\n )\n const combinedRangeFacetsColumnModelType = combineRangeFacetConfig\n ? columnModels!.find(\n model => model.name === combineRangeFacetConfig.minFacetColumn,\n )?.columnType\n : undefined\n\n const shownTopLevelFacets = useMemo(\n () =>\n (facets ?? []).filter(facet => facetColumnsShown.has(facet.columnName)),\n [facetColumnsShown, facets],\n )\n\n const shownJsonFacetGroups = useMemo(\n () =>\n Object.entries(jsonFacetsGroupedByColumn).filter(([columnName]) =>\n facetColumnsShown.has(columnName),\n ),\n [facetColumnsShown, jsonFacetsGroupedByColumn],\n )\n\n return (\n <div className={`FacetFilterControls`}>\n <div>\n <FacetFilterHeader\n label={'Available Filters'}\n hideCollapsible\n isCollapsed={false}\n onClick={noop}\n />\n {sortBy(allFacetColumns).map(columnName => {\n return (\n <FacetChip\n key={columnName}\n onClick={() => toggleShowFacetFilter(columnName)}\n isChecked={facetColumnsShown.has(columnName)}\n >\n {getColumnDisplayName(columnName)}\n </FacetChip>\n )\n })}\n </div>\n {combineRangeFacetConfig && combinedRangeFacets.length >= 2 && (\n <CombinedRangeFacetFilter\n facetResults={combinedRangeFacets as FacetColumnResultRange[]}\n label={combineRangeFacetConfig.label}\n columnType={combinedRangeFacetsColumnModelType!}\n />\n )}\n {shownTopLevelFacets.map(facet => {\n const columnModel = getCorrespondingColumnForFacet(facet, columnModels!)\n return (\n <div className=\"FacetFilterControls__facet\" key={facet.columnName}>\n {facet.facetType === 'enumeration' && columnModel && (\n <EnumFacetFilter containerAs=\"Collapsible\" facet={facet} />\n )}\n {facet.facetType === 'range' && columnModel && (\n <RangeFacetFilter facetResult={facet} />\n )}\n </div>\n )\n })}\n {shownJsonFacetGroups.map(([columnName, facets]) => {\n const columnModel = queryMetadata?.columnModels?.find(\n cm => cm.name === columnName,\n )\n return (\n columnModel && (\n <JsonColumnFacetFilters\n key={columnName}\n columnModel={columnModel}\n facets={facets}\n />\n )\n )\n })}\n </div>\n )\n}\n\nexport default function FacetFilterControlsWithSuspense(\n props: FacetFilterControlsProps,\n) {\n return (\n <Suspense fallback={<FacetFilterControlsSkeleton />}>\n <FacetFilterControls {...props} />\n </Suspense>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RangeFacetFilter.js","names":[],"sources":["../../../../src/components/widgets/query-filter/RangeFacetFilter.tsx"],"sourcesContent":["import { getCorrespondingColumnForFacet } from '@/utils/functions/queryUtils'\nimport { FRIENDLY_VALUE_NOT_SET, VALUE_NOT_SET } from '@/utils/SynapseConstants'\nimport { FacetColumnResultRange } from '@sage-bionetworks/synapse-types'\nimport { isNumber } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useSuspenseGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { RangeValues } from '../Range'\nimport { RangeFacetFilterUI } from './RangeFacetFilterUI'\n\nexport enum RadioValuesEnum {\n NOT_SET = 'org.sagebionetworks.UNDEFINED_NULL_NOTSET',\n RANGE = 'RANGE',\n ANY = '',\n}\nexport const options = [\n { label: FRIENDLY_VALUE_NOT_SET, value: RadioValuesEnum.NOT_SET },\n { label: 'Any', value: RadioValuesEnum.ANY },\n { label: 'Range', value: RadioValuesEnum.RANGE },\n]\nexport type RangeFacetFilterProps = {\n facetResult: FacetColumnResultRange\n hideCollapsible?: boolean\n}\n\nexport function RangeFacetFilter(props: RangeFacetFilterProps) {\n const { facetResult, hideCollapsible = false } = props\n const { setRangeFacetValue, removeSelectedFacet, getCurrentQueryRequest } =\n useQueryContext()\n\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n\n const columnModel = queryMetadata.columnModels\n ? getCorrespondingColumnForFacet(facetResult, queryMetadata.columnModels)\n : undefined\n\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n const lastQueryRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n\n if (!columnModel) {\n return <></>\n }\n\n return (\n <RangeFacetFilterUI\n label={getColumnDisplayName(facetResult.columnName, facetResult.jsonPath)}\n facetResult={facetResult}\n columnType={columnModel.columnType}\n hideCollapsible={hideCollapsible}\n onRangeValueSelected={(values: RangeValues) => {\n setRangeFacetValue(\n facetResult,\n isNumber(values.min) ? String(values.min) : values.min,\n isNumber(values.max) ? String(values.max) : values.max,\n )\n }}\n onNotSetSelected={() => {\n setRangeFacetValue(facetResult, VALUE_NOT_SET, VALUE_NOT_SET)\n }}\n onAnySelected={() => {\n const selectedFacet = lastQueryRequest.query.selectedFacets?.find(\n selectedFacet =>\n selectedFacet.columnName === facetResult.columnName &&\n selectedFacet.jsonPath === facetResult.jsonPath,\n )\n if (selectedFacet) {\n removeSelectedFacet(selectedFacet)\n }\n }}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;AAWA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,UAAA,6CACA,EAAA,QAAA,SACA,EAAA,MAAA;KACD,EACY,IAAU;CACrB;EAAE,OAAO;EAAwB,OAAO,EAAgB;EAAS;CACjE;EAAE,OAAO;EAAO,OAAO,EAAgB;EAAK;CAC5C;EAAE,OAAO;EAAS,OAAO,EAAgB;EAAO;CACjD;AAMD,SAAgB,EAAiB,GAA8B;CAC7D,IAAM,EAAE,gBAAa,qBAAkB,OAAU,GAC3C,EAAE,uBAAoB,wBAAqB,8BAC/C,GAAiB,EAEb,EAAE,MAAM,MAAkB,GAA6B,EAEvD,IAAc,EAAc,eAC9B,EAA+B,GAAa,EAAc,aAAa,GACvE,KAAA,GAEE,EAAE,4BAAyB,GAA8B,EAEzD,IAAmB,QACjB,GAAwB,EAC9B,CAAC,EAAuB,CACzB;AAMD,QAJK,IAKH,kBAAC,GAAD;EACE,OAAO,EAAqB,EAAY,YAAY,EAAY,SAAS;EAC5D;EACb,YAAY,EAAY;EACP;EACjB,uBAAuB,MAAwB;AAC7C,KACE,GACA,EAAS,EAAO,IAAI,GAAG,OAAO,EAAO,IAAI,GAAG,EAAO,KACnD,EAAS,EAAO,IAAI,GAAG,OAAO,EAAO,IAAI,GAAG,EAAO,IACpD;;EAEH,wBAAwB;AACtB,KAAmB,GAAa,GAAe,EAAc;;EAE/D,qBAAqB;GACnB,IAAM,IAAgB,EAAiB,MAAM,gBAAgB,MAC3D,MACE,EAAc,eAAe,EAAY,cACzC,EAAc,aAAa,EAAY,SAC1C;AACD,GAAI,KACF,EAAoB,EAAc;;EAGtC,CAAA,GA7BK,kBAAA,GAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"RangeFacetFilter.js","names":[],"sources":["../../../../src/components/widgets/query-filter/RangeFacetFilter.tsx"],"sourcesContent":["import { getCorrespondingColumnForFacet } from '@/utils/functions/queryUtils'\nimport { FRIENDLY_VALUE_NOT_SET, VALUE_NOT_SET } from '@/utils/SynapseConstants'\nimport { FacetColumnResultRange } from '@sage-bionetworks/synapse-types'\nimport { isNumber } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useSuspenseGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { RangeValues } from '../Range'\nimport { RangeFacetFilterUI } from './RangeFacetFilterUI'\n\nexport enum RadioValuesEnum {\n NOT_SET = 'org.sagebionetworks.UNDEFINED_NULL_NOTSET',\n RANGE = 'RANGE',\n ANY = '',\n}\nexport const options = [\n { label: FRIENDLY_VALUE_NOT_SET, value: RadioValuesEnum.NOT_SET },\n { label: 'Any', value: RadioValuesEnum.ANY },\n { label: 'Range', value: RadioValuesEnum.RANGE },\n]\nexport type RangeFacetFilterProps = {\n facetResult: FacetColumnResultRange\n hideCollapsible?: boolean\n}\n\nexport function RangeFacetFilter(props: RangeFacetFilterProps) {\n const { facetResult, hideCollapsible = false } = props\n const { setRangeFacetValue, removeSelectedFacet, getCurrentQueryRequest } =\n useQueryContext()\n\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n\n const columnModel = queryMetadata.columnModels\n ? getCorrespondingColumnForFacet(facetResult, queryMetadata.columnModels)\n : undefined\n\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n const lastQueryRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n\n if (!columnModel) {\n return <></>\n }\n\n return (\n <RangeFacetFilterUI\n label={getColumnDisplayName(facetResult.columnName, facetResult.jsonPath)}\n facetResult={facetResult}\n columnType={columnModel.columnType}\n hideCollapsible={hideCollapsible}\n onRangeValueSelected={(values: RangeValues) => {\n setRangeFacetValue(\n facetResult,\n isNumber(values.min) ? String(values.min) : values.min,\n isNumber(values.max) ? String(values.max) : values.max,\n )\n }}\n onNotSetSelected={() => {\n setRangeFacetValue(facetResult, VALUE_NOT_SET, VALUE_NOT_SET)\n }}\n onAnySelected={() => {\n const selectedFacet = lastQueryRequest.query.selectedFacets?.find(\n selectedFacet =>\n selectedFacet.columnName === facetResult.columnName &&\n selectedFacet.jsonPath === facetResult.jsonPath,\n )\n if (selectedFacet) {\n removeSelectedFacet(selectedFacet)\n }\n }}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;AAWA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,UAAU,6CACV,EAAA,QAAQ,SACR,EAAA,MAAM;KACP,EACY,IAAU;CACrB;EAAE,OAAO;EAAwB,OAAO,EAAgB;EAAS;CACjE;EAAE,OAAO;EAAO,OAAO,EAAgB;EAAK;CAC5C;EAAE,OAAO;EAAS,OAAO,EAAgB;EAAO;CACjD;AAMD,SAAgB,EAAiB,GAA8B;CAC7D,IAAM,EAAE,gBAAa,qBAAkB,OAAU,GAC3C,EAAE,uBAAoB,wBAAqB,8BAC/C,GAAiB,EAEb,EAAE,MAAM,MAAkB,GAA6B,EAEvD,IAAc,EAAc,eAC9B,EAA+B,GAAa,EAAc,aAAa,GACvE,KAAA,GAEE,EAAE,4BAAyB,GAA8B,EAEzD,IAAmB,QACjB,GAAwB,EAC9B,CAAC,EAAuB,CACzB;AAMD,QAJK,IAKH,kBAAC,GAAD;EACE,OAAO,EAAqB,EAAY,YAAY,EAAY,SAAS;EAC5D;EACb,YAAY,EAAY;EACP;EACjB,uBAAuB,MAAwB;AAC7C,KACE,GACA,EAAS,EAAO,IAAI,GAAG,OAAO,EAAO,IAAI,GAAG,EAAO,KACnD,EAAS,EAAO,IAAI,GAAG,OAAO,EAAO,IAAI,GAAG,EAAO,IACpD;;EAEH,wBAAwB;AACtB,KAAmB,GAAa,GAAe,EAAc;;EAE/D,qBAAqB;GACnB,IAAM,IAAgB,EAAiB,MAAM,gBAAgB,MAC3D,MACE,EAAc,eAAe,EAAY,cACzC,EAAc,aAAa,EAAY,SAC1C;AACD,GAAI,KACF,EAAoB,EAAc;;EAGtC,CAAA,GA7BK,kBAAA,GAAA,EAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RangeFacetFilterUI.js","names":[],"sources":["../../../../src/components/widgets/query-filter/RangeFacetFilterUI.tsx"],"sourcesContent":["import { FRIENDLY_VALUE_NOT_SET, VALUE_NOT_SET } from '@/utils/SynapseConstants'\nimport { Collapse, FormControlLabel, Radio, RadioGroup } from '@mui/material'\nimport {\n ColumnType,\n FacetColumnResultRange,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport { Range, RangeValues } from '../Range'\nimport RangeSlider from '../RangeSlider/RangeSlider'\nimport { FacetFilterHeader } from './FacetFilterHeader'\n\nexport enum RadioValuesEnum {\n NOT_SET = 'org.sagebionetworks.UNDEFINED_NULL_NOTSET',\n RANGE = 'RANGE',\n ANY = '',\n}\nexport const options = [\n { label: FRIENDLY_VALUE_NOT_SET, value: RadioValuesEnum.NOT_SET },\n { label: 'Any', value: RadioValuesEnum.ANY },\n { label: 'Range', value: RadioValuesEnum.RANGE },\n]\nexport type RangeFacetFilterProps = {\n label: string\n facetResult: Pick<\n FacetColumnResultRange,\n 'columnMin' | 'columnMax' | 'selectedMin' | 'selectedMax'\n >\n columnType: ColumnType\n hideCollapsible?: boolean\n onRangeValueSelected: (values: RangeValues) => void\n onNotSetSelected: () => void\n onAnySelected: () => void\n}\n\nexport const getRadioValue = (min: string, isAnyValue: boolean) => {\n if (isAnyValue) {\n return RadioValuesEnum.ANY\n } else if (min === VALUE_NOT_SET) {\n return RadioValuesEnum.NOT_SET\n }\n return RadioValuesEnum.RANGE\n}\n\nexport function RangeFacetFilterUI(props: RangeFacetFilterProps) {\n const {\n label,\n facetResult,\n hideCollapsible = false,\n columnType,\n onAnySelected,\n onNotSetSelected,\n onRangeValueSelected,\n } = props\n\n const [isCollapsed, setIsCollapsed] = useState<boolean>(false)\n\n const { columnMin, columnMax, selectedMin, selectedMax } = facetResult // the upper bound of the selected range\n\n const hasAnyValue = !selectedMin && !selectedMax\n\n const currentMin = selectedMin || columnMin\n const currentMax = selectedMax || columnMax\n\n const rangeType = columnType === 'DOUBLE' ? 'number' : 'date'\n\n const handleRadioGroupChange = (radioValue: RadioValuesEnum) => {\n setRadioValue(radioValue)\n\n switch (radioValue) {\n case RadioValuesEnum.RANGE:\n // The range facet value will update when the user clicks the apply button\n break\n case RadioValuesEnum.NOT_SET:\n onNotSetSelected()\n break\n case RadioValuesEnum.ANY: {\n onAnySelected()\n break\n }\n }\n }\n\n const [radioValue, setRadioValue] = useState(\n getRadioValue(currentMin, hasAnyValue),\n )\n\n return (\n <div>\n <FacetFilterHeader\n isCollapsed={isCollapsed}\n label={label}\n onClick={(isCollapsed: boolean) => setIsCollapsed(isCollapsed)}\n hideCollapsible={hideCollapsible}\n />\n <Collapse in={!isCollapsed}>\n <RadioGroup\n value={radioValue}\n onChange={(_event, value) =>\n handleRadioGroupChange(value as RadioValuesEnum)\n }\n >\n {options.map(({ value, label }) => (\n <FormControlLabel\n key={value}\n control={<Radio />}\n label={label}\n value={value}\n />\n ))}\n </RadioGroup>\n {radioValue === RadioValuesEnum.RANGE &&\n (columnMin === columnMax ? (\n <label>{columnMax}</label>\n ) : (\n <>\n {columnType === 'INTEGER' && (\n <RangeSlider\n key=\"RangeSlider\"\n domain={[columnMin, columnMax]}\n initialValues={{\n min: parseInt(currentMin),\n max: parseInt(currentMax),\n }}\n step={1}\n onApplyClicked={onRangeValueSelected}\n >\n {'>'}\n </RangeSlider>\n )}\n\n {columnType === 'DATE' && (\n <Range\n key=\"Range\"\n initialValues={{\n // From the backend, selectedMin is a formatted date (like \"2021-06-15\"), but columnMin is a unix timestamp in millis (like \"1624651794856\")\n min: selectedMin ?? dayjs(parseInt(columnMin)).toString(),\n max: selectedMax ?? dayjs(parseInt(columnMax)).toString(),\n }}\n type={rangeType}\n onApplyClicked={onRangeValueSelected}\n />\n )}\n {columnType === 'DOUBLE' && (\n <Range\n key=\"Range\"\n initialValues={{\n min: parseFloat(currentMin),\n max: parseFloat(currentMax),\n }}\n type={rangeType}\n onApplyClicked={onRangeValueSelected}\n />\n )}\n </>\n ))}\n </Collapse>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;AAYA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,UAAA,6CACA,EAAA,QAAA,SACA,EAAA,MAAA;KACD,EACY,IAAU;CACrB;EAAE,OAAO;EAAwB,OAAO,EAAgB;EAAS;CACjE;EAAE,OAAO;EAAO,OAAO,EAAgB;EAAK;CAC5C;EAAE,OAAO;EAAS,OAAO,EAAgB;EAAO;CACjD,EAcY,KAAiB,GAAa,MACrC,IACK,EAAgB,MACd,MAAA,8CACF,EAAgB,UAElB,EAAgB;AAGzB,SAAgB,EAAmB,GAA8B;CAC/D,IAAM,EACJ,UACA,gBACA,qBAAkB,IAClB,eACA,kBACA,qBACA,4BACE,GAEE,CAAC,GAAa,KAAkB,EAAkB,GAAM,EAExD,EAAE,cAAW,cAAW,gBAAa,mBAAgB,GAErD,IAAc,CAAC,KAAe,CAAC,GAE/B,IAAa,KAAe,GAC5B,IAAa,KAAe,GAE5B,IAAY,MAAe,WAAW,WAAW,QAEjD,KAA0B,MAAgC;AAG9D,UAFA,EAAc,EAAW,EAEjB,GAAR;GACE,KAAK,EAAgB,MAEnB;GACF,KAAK,EAAgB;AACnB,OAAkB;AAClB;GACF,KAAK,EAAgB;AACnB,OAAe;AACf;;IAKA,CAAC,GAAY,KAAiB,EAClC,EAAc,GAAY,EAAY,CACvC;AAED,QACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACe;EACN;EACP,UAAU,MAAyB,EAAe,EAAY;EAC7C;EACjB,CAAA,EACF,kBAAC,GAAD;EAAU,IAAI,CAAC;YAAf,CACE,kBAAC,GAAD;GACE,OAAO;GACP,WAAW,GAAQ,MACjB,EAAuB,EAAyB;aAGjD,EAAQ,KAAK,EAAE,UAAO,eACrB,kBAAC,GAAD;IAEE,SAAS,kBAAC,GAAD,EAAS,CAAA;IACX;IACA;IACP,EAJK,EAIL,CACF;GACS,CAAA,EACZ,MAAe,EAAgB,UAC7B,MAAc,IACb,kBAAC,SAAD,EAAA,UAAQ,GAAkB,CAAA,GAE1B,kBAAA,GAAA,EAAA,UAAA;GACG,MAAe,aACd,kBAAC,GAAD;IAEE,QAAQ,CAAC,GAAW,EAAU;IAC9B,eAAe;KACb,KAAK,SAAS,EAAW;KACzB,KAAK,SAAS,EAAW;KAC1B;IACD,MAAM;IACN,gBAAgB;cAEf;IACW,EAVR,cAUQ;GAGf,MAAe,UACd,kBAAC,GAAD;IAEE,eAAe;KAEb,KAAK,KAAe,EAAM,SAAS,EAAU,CAAC,CAAC,UAAU;KACzD,KAAK,KAAe,EAAM,SAAS,EAAU,CAAC,CAAC,UAAU;KAC1D;IACD,MAAM;IACN,gBAAgB;IAChB,EARI,QAQJ;GAEH,MAAe,YACd,kBAAC,GAAD;IAEE,eAAe;KACb,KAAK,WAAW,EAAW;KAC3B,KAAK,WAAW,EAAW;KAC5B;IACD,MAAM;IACN,gBAAgB;IAChB,EAPI,QAOJ;GAEH,EAAA,CAAA,EAEE;IACP,EAAA,CAAA"}
1
+ {"version":3,"file":"RangeFacetFilterUI.js","names":[],"sources":["../../../../src/components/widgets/query-filter/RangeFacetFilterUI.tsx"],"sourcesContent":["import { FRIENDLY_VALUE_NOT_SET, VALUE_NOT_SET } from '@/utils/SynapseConstants'\nimport { Collapse, FormControlLabel, Radio, RadioGroup } from '@mui/material'\nimport {\n ColumnType,\n FacetColumnResultRange,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport { Range, RangeValues } from '../Range'\nimport RangeSlider from '../RangeSlider/RangeSlider'\nimport { FacetFilterHeader } from './FacetFilterHeader'\n\nexport enum RadioValuesEnum {\n NOT_SET = 'org.sagebionetworks.UNDEFINED_NULL_NOTSET',\n RANGE = 'RANGE',\n ANY = '',\n}\nexport const options = [\n { label: FRIENDLY_VALUE_NOT_SET, value: RadioValuesEnum.NOT_SET },\n { label: 'Any', value: RadioValuesEnum.ANY },\n { label: 'Range', value: RadioValuesEnum.RANGE },\n]\nexport type RangeFacetFilterProps = {\n label: string\n facetResult: Pick<\n FacetColumnResultRange,\n 'columnMin' | 'columnMax' | 'selectedMin' | 'selectedMax'\n >\n columnType: ColumnType\n hideCollapsible?: boolean\n onRangeValueSelected: (values: RangeValues) => void\n onNotSetSelected: () => void\n onAnySelected: () => void\n}\n\nexport const getRadioValue = (min: string, isAnyValue: boolean) => {\n if (isAnyValue) {\n return RadioValuesEnum.ANY\n } else if (min === VALUE_NOT_SET) {\n return RadioValuesEnum.NOT_SET\n }\n return RadioValuesEnum.RANGE\n}\n\nexport function RangeFacetFilterUI(props: RangeFacetFilterProps) {\n const {\n label,\n facetResult,\n hideCollapsible = false,\n columnType,\n onAnySelected,\n onNotSetSelected,\n onRangeValueSelected,\n } = props\n\n const [isCollapsed, setIsCollapsed] = useState<boolean>(false)\n\n const { columnMin, columnMax, selectedMin, selectedMax } = facetResult // the upper bound of the selected range\n\n const hasAnyValue = !selectedMin && !selectedMax\n\n const currentMin = selectedMin || columnMin\n const currentMax = selectedMax || columnMax\n\n const rangeType = columnType === 'DOUBLE' ? 'number' : 'date'\n\n const handleRadioGroupChange = (radioValue: RadioValuesEnum) => {\n setRadioValue(radioValue)\n\n switch (radioValue) {\n case RadioValuesEnum.RANGE:\n // The range facet value will update when the user clicks the apply button\n break\n case RadioValuesEnum.NOT_SET:\n onNotSetSelected()\n break\n case RadioValuesEnum.ANY: {\n onAnySelected()\n break\n }\n }\n }\n\n const [radioValue, setRadioValue] = useState(\n getRadioValue(currentMin, hasAnyValue),\n )\n\n return (\n <div>\n <FacetFilterHeader\n isCollapsed={isCollapsed}\n label={label}\n onClick={(isCollapsed: boolean) => setIsCollapsed(isCollapsed)}\n hideCollapsible={hideCollapsible}\n />\n <Collapse in={!isCollapsed}>\n <RadioGroup\n value={radioValue}\n onChange={(_event, value) =>\n handleRadioGroupChange(value as RadioValuesEnum)\n }\n >\n {options.map(({ value, label }) => (\n <FormControlLabel\n key={value}\n control={<Radio />}\n label={label}\n value={value}\n />\n ))}\n </RadioGroup>\n {radioValue === RadioValuesEnum.RANGE &&\n (columnMin === columnMax ? (\n <label>{columnMax}</label>\n ) : (\n <>\n {columnType === 'INTEGER' && (\n <RangeSlider\n key=\"RangeSlider\"\n domain={[columnMin, columnMax]}\n initialValues={{\n min: parseInt(currentMin),\n max: parseInt(currentMax),\n }}\n step={1}\n onApplyClicked={onRangeValueSelected}\n >\n {'>'}\n </RangeSlider>\n )}\n\n {columnType === 'DATE' && (\n <Range\n key=\"Range\"\n initialValues={{\n // From the backend, selectedMin is a formatted date (like \"2021-06-15\"), but columnMin is a unix timestamp in millis (like \"1624651794856\")\n min: selectedMin ?? dayjs(parseInt(columnMin)).toString(),\n max: selectedMax ?? dayjs(parseInt(columnMax)).toString(),\n }}\n type={rangeType}\n onApplyClicked={onRangeValueSelected}\n />\n )}\n {columnType === 'DOUBLE' && (\n <Range\n key=\"Range\"\n initialValues={{\n min: parseFloat(currentMin),\n max: parseFloat(currentMax),\n }}\n type={rangeType}\n onApplyClicked={onRangeValueSelected}\n />\n )}\n </>\n ))}\n </Collapse>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;AAYA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,UAAU,6CACV,EAAA,QAAQ,SACR,EAAA,MAAM;KACP,EACY,IAAU;CACrB;EAAE,OAAO;EAAwB,OAAO,EAAgB;EAAS;CACjE;EAAE,OAAO;EAAO,OAAO,EAAgB;EAAK;CAC5C;EAAE,OAAO;EAAS,OAAO,EAAgB;EAAO;CACjD,EAcY,KAAiB,GAAa,MACrC,IACK,EAAgB,MACd,MAAA,8CACF,EAAgB,UAElB,EAAgB;AAGzB,SAAgB,EAAmB,GAA8B;CAC/D,IAAM,EACJ,UACA,gBACA,qBAAkB,IAClB,eACA,kBACA,qBACA,4BACE,GAEE,CAAC,GAAa,KAAkB,EAAkB,GAAM,EAExD,EAAE,cAAW,cAAW,gBAAa,mBAAgB,GAErD,IAAc,CAAC,KAAe,CAAC,GAE/B,IAAa,KAAe,GAC5B,IAAa,KAAe,GAE5B,IAAY,MAAe,WAAW,WAAW,QAEjD,KAA0B,MAAgC;AAG9D,UAFA,EAAc,EAAW,EAEjB,GAAR;GACE,KAAK,EAAgB,MAEnB;GACF,KAAK,EAAgB;AACnB,OAAkB;AAClB;GACF,KAAK,EAAgB;AACnB,OAAe;AACf;;IAKA,CAAC,GAAY,KAAiB,EAClC,EAAc,GAAY,EAAY,CACvC;AAED,QACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACe;EACN;EACP,UAAU,MAAyB,EAAe,EAAY;EAC7C;EACjB,CAAA,EACF,kBAAC,GAAD;EAAU,IAAI,CAAC;YAAf,CACE,kBAAC,GAAD;GACE,OAAO;GACP,WAAW,GAAQ,MACjB,EAAuB,EAAyB;aAGjD,EAAQ,KAAK,EAAE,UAAO,eACrB,kBAAC,GAAD;IAEE,SAAS,kBAAC,GAAD,EAAS,CAAA;IACX;IACA;IACP,EAJK,EAIL,CACF;GACS,CAAA,EACZ,MAAe,EAAgB,UAC7B,MAAc,IACb,kBAAC,SAAD,EAAA,UAAQ,GAAkB,CAAA,GAE1B,kBAAA,GAAA,EAAA,UAAA;GACG,MAAe,aACd,kBAAC,GAAD;IAEE,QAAQ,CAAC,GAAW,EAAU;IAC9B,eAAe;KACb,KAAK,SAAS,EAAW;KACzB,KAAK,SAAS,EAAW;KAC1B;IACD,MAAM;IACN,gBAAgB;cAEf;IACW,EAVR,cAUQ;GAGf,MAAe,UACd,kBAAC,GAAD;IAEE,eAAe;KAEb,KAAK,KAAe,EAAM,SAAS,EAAU,CAAC,CAAC,UAAU;KACzD,KAAK,KAAe,EAAM,SAAS,EAAU,CAAC,CAAC,UAAU;KAC1D;IACD,MAAM;IACN,gBAAgB;IAChB,EARI,QAQJ;GAEH,MAAe,YACd,kBAAC,GAAD;IAEE,eAAe;KACb,KAAK,WAAW,EAAW;KAC3B,KAAK,WAAW,EAAW;KAC5B;IACD,MAAM;IACN,gBAAgB;IAChB,EAPI,QAOJ;GAEH,EAAA,CAAA,EAEE;IACP,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"GridPageTitle.d.ts","sourceRoot":"","sources":["../../../../../src/features/curator/GridPage/components/GridPageTitle.tsx"],"names":[],"mappings":"AAQA,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAoD9D"}
1
+ {"version":3,"file":"GridPageTitle.d.ts","sourceRoot":"","sources":["../../../../../src/features/curator/GridPage/components/GridPageTitle.tsx"],"names":[],"mappings":"AASA,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAmD9D"}
@@ -7,62 +7,55 @@ import { StyledPopover as i } from "../../../../components/styled/StyledPopover.
7
7
  import "../../../../components/index.js";
8
8
  import { useGetGridSession as a } from "../../../../synapse-queries/grid/useGridSession.js";
9
9
  import { useGetCurationTask as o } from "../../../../synapse-queries/curation/task/useCurationTask.js";
10
- import { Link as s, Stack as c, Tooltip as l, Typography as u } from "@mui/material";
11
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
10
+ import s from "../../../../components/layout/SWCHeader.js";
11
+ import { Link as c, Stack as l, Tooltip as u, Typography as d } from "@mui/material";
12
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
12
13
  //#region src/features/curator/GridPage/components/GridPageTitle.tsx
13
- function p(p) {
14
- let { sessionId: m, taskId: h } = p, { data: g, error: _ } = a(m), { data: v } = r(g?.sourceEntityId), { data: y } = o(h || 0, { enabled: h != null });
15
- return _ ? /* @__PURE__ */ d(n, { error: _ }) : /* @__PURE__ */ f("div", {
16
- className: "pageHeader",
17
- children: [/* @__PURE__ */ f("h3", {
18
- className: "pageHeaderTitle",
19
- children: [
20
- "Working Copy",
21
- " ",
22
- v?.name ? `of ${v.name}` : ""
23
- ]
24
- }), /* @__PURE__ */ f(c, {
25
- className: "description",
14
+ function m(m) {
15
+ let { sessionId: h, taskId: g } = m, { data: _, error: v } = a(h), { data: y } = r(_?.sourceEntityId), { data: b } = o(g || 0, { enabled: g != null });
16
+ return v ? /* @__PURE__ */ f(n, { error: v }) : /* @__PURE__ */ f(s, {
17
+ title: `Working Copy ${y?.name ? `of ${y.name}` : ""}`,
18
+ description: /* @__PURE__ */ p(l, {
26
19
  spacing: 1,
27
20
  children: [
28
- /* @__PURE__ */ f(u, {
21
+ /* @__PURE__ */ p(d, {
29
22
  variant: "headline2",
30
- children: ["ID: ", m]
23
+ children: ["ID: ", h]
31
24
  }),
32
- y && /* @__PURE__ */ f(c, {
25
+ b && /* @__PURE__ */ p(l, {
33
26
  direction: "row",
34
27
  spacing: 1,
35
28
  alignItems: "center",
36
- children: [/* @__PURE__ */ f(u, {
29
+ children: [/* @__PURE__ */ p(d, {
37
30
  variant: "body1",
38
31
  children: [
39
- /* @__PURE__ */ d("strong", { children: "Task Name:" }),
32
+ /* @__PURE__ */ f("strong", { children: "Task Name:" }),
40
33
  " ",
41
- y.dataType,
34
+ b.dataType,
42
35
  " "
43
36
  ]
44
- }), /* @__PURE__ */ d(i, {
45
- popoverContent: y.instructions,
46
- children: /* @__PURE__ */ d(s, {
37
+ }), /* @__PURE__ */ f(i, {
38
+ popoverContent: b.instructions,
39
+ children: /* @__PURE__ */ f(c, {
47
40
  underline: "hover",
48
41
  children: "View Instructions"
49
42
  })
50
43
  })]
51
44
  }),
52
- g?.gridJsonSchema$Id && /* @__PURE__ */ d("div", { children: /* @__PURE__ */ d(l, {
53
- title: g?.gridJsonSchema$Id,
45
+ _?.gridJsonSchema$Id && /* @__PURE__ */ f("div", { children: /* @__PURE__ */ f(u, {
46
+ title: _?.gridJsonSchema$Id,
54
47
  placement: "right",
55
- children: /* @__PURE__ */ d(s, {
48
+ children: /* @__PURE__ */ f(c, {
56
49
  target: "_blank",
57
- href: `${t(e.REPO_ENDPOINT)}/repo/v1/schema/type/registered/${g?.gridJsonSchema$Id}`,
50
+ href: `${t(e.REPO_ENDPOINT)}/repo/v1/schema/type/registered/${_?.gridJsonSchema$Id}`,
58
51
  children: "View Validation Schema (JSON)"
59
52
  })
60
53
  }) })
61
54
  ]
62
- })]
55
+ })
63
56
  });
64
57
  }
65
58
  //#endregion
66
- export { p as default };
59
+ export { m as default };
67
60
 
68
61
  //# sourceMappingURL=GridPageTitle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridPageTitle.js","names":[],"sources":["../../../../../src/features/curator/GridPage/components/GridPageTitle.tsx"],"sourcesContent":["import { ErrorBanner } from '@/components/index'\nimport { StyledPopover } from '@/components/styled/StyledPopover'\nimport { useGetCurationTask } from '@/synapse-queries/curation/task/useCurationTask'\nimport { useGetGridSession } from '@/synapse-queries/grid/useGridSession'\nimport { useGetEntityHeader } from '@/synapse-queries/index'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions/index'\nimport { Link, Stack, Tooltip, Typography } from '@mui/material'\n\ntype GridPageTitleProps = {\n sessionId: string\n taskId?: number\n}\n\nexport default function GridPageTitle(props: GridPageTitleProps) {\n const { sessionId, taskId } = props\n const { data: gridSession, error: gridSessionError } =\n useGetGridSession(sessionId)\n const { data: gridSourceEntity } = useGetEntityHeader(\n gridSession?.sourceEntityId,\n )\n const { data: curationTask } = useGetCurationTask(taskId || 0, {\n enabled: taskId != null,\n })\n\n if (gridSessionError) {\n return <ErrorBanner error={gridSessionError} />\n }\n\n return (\n <div className={'pageHeader'}>\n <h3 className={'pageHeaderTitle'}>\n Working Copy{' '}\n {gridSourceEntity?.name ? `of ${gridSourceEntity.name}` : ''}\n </h3>\n <Stack className={'description'} spacing={1}>\n <Typography variant={'headline2'}>ID: {sessionId}</Typography>\n {curationTask && (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Typography variant={'body1'}>\n <strong>Task Name:</strong> {curationTask.dataType}{' '}\n </Typography>\n <StyledPopover popoverContent={curationTask.instructions}>\n <Link underline=\"hover\">View Instructions</Link>\n </StyledPopover>\n </Stack>\n )}\n {gridSession?.gridJsonSchema$Id && (\n <div>\n <Tooltip title={gridSession?.gridJsonSchema$Id} placement={'right'}>\n <Link\n target={'_blank'}\n href={`${getEndpoint(\n BackendDestinationEnum.REPO_ENDPOINT,\n )}/repo/v1/schema/type/registered/${\n gridSession?.gridJsonSchema$Id\n }`}\n >\n View Validation Schema (JSON)\n </Link>\n </Tooltip>\n </div>\n )}\n </Stack>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAaA,SAAwB,EAAc,GAA2B;CAC/D,IAAM,EAAE,cAAW,cAAW,GACxB,EAAE,MAAM,GAAa,OAAO,MAChC,EAAkB,EAAU,EACxB,EAAE,MAAM,MAAqB,EACjC,GAAa,eACd,EACK,EAAE,MAAM,MAAiB,EAAmB,KAAU,GAAG,EAC7D,SAAS,KAAU,MACpB,CAAC;AAMF,QAJI,IACK,kBAAC,GAAD,EAAa,OAAO,GAAoB,CAAA,GAI/C,kBAAC,OAAD;EAAK,WAAW;YAAhB,CACE,kBAAC,MAAD;GAAI,WAAW;aAAf;IAAkC;IACnB;IACZ,GAAkB,OAAO,MAAM,EAAiB,SAAS;IACvD;MACL,kBAAC,GAAD;GAAO,WAAW;GAAe,SAAS;aAA1C;IACE,kBAAC,GAAD;KAAY,SAAS;eAArB,CAAkC,QAAK,EAAuB;;IAC7D,KACC,kBAAC,GAAD;KAAO,WAAU;KAAM,SAAS;KAAG,YAAW;eAA9C,CACE,kBAAC,GAAD;MAAY,SAAS;gBAArB;OACE,kBAAC,UAAD,EAAA,UAAQ,cAAmB,CAAA;;OAAE,EAAa;OAAU;OACzC;SACb,kBAAC,GAAD;MAAe,gBAAgB,EAAa;gBAC1C,kBAAC,GAAD;OAAM,WAAU;iBAAQ;OAAwB,CAAA;MAClC,CAAA,CACV;;IAET,GAAa,qBACZ,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KAAS,OAAO,GAAa;KAAmB,WAAW;eACzD,kBAAC,GAAD;MACE,QAAQ;MACR,MAAM,GAAG,EACP,EAAuB,cACxB,CAAC,kCACA,GAAa;gBAEhB;MAEM,CAAA;KACC,CAAA,EACN,CAAA;IAEF;KACJ"}
1
+ {"version":3,"file":"GridPageTitle.js","names":[],"sources":["../../../../../src/features/curator/GridPage/components/GridPageTitle.tsx"],"sourcesContent":["import { ErrorBanner } from '@/components/index'\nimport SWCHeader from '@/components/layout/SWCHeader'\nimport { StyledPopover } from '@/components/styled/StyledPopover'\nimport { useGetCurationTask } from '@/synapse-queries/curation/task/useCurationTask'\nimport { useGetGridSession } from '@/synapse-queries/grid/useGridSession'\nimport { useGetEntityHeader } from '@/synapse-queries/index'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions/index'\nimport { Link, Stack, Tooltip, Typography } from '@mui/material'\n\ntype GridPageTitleProps = {\n sessionId: string\n taskId?: number\n}\n\nexport default function GridPageTitle(props: GridPageTitleProps) {\n const { sessionId, taskId } = props\n const { data: gridSession, error: gridSessionError } =\n useGetGridSession(sessionId)\n const { data: gridSourceEntity } = useGetEntityHeader(\n gridSession?.sourceEntityId,\n )\n const { data: curationTask } = useGetCurationTask(taskId || 0, {\n enabled: taskId != null,\n })\n\n if (gridSessionError) {\n return <ErrorBanner error={gridSessionError} />\n }\n\n const title = `Working Copy ${\n gridSourceEntity?.name ? `of ${gridSourceEntity.name}` : ''\n }`\n const description = (\n <Stack spacing={1}>\n <Typography variant={'headline2'}>ID: {sessionId}</Typography>\n {curationTask && (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Typography variant={'body1'}>\n <strong>Task Name:</strong> {curationTask.dataType}{' '}\n </Typography>\n <StyledPopover popoverContent={curationTask.instructions}>\n <Link underline=\"hover\">View Instructions</Link>\n </StyledPopover>\n </Stack>\n )}\n {gridSession?.gridJsonSchema$Id && (\n <div>\n <Tooltip title={gridSession?.gridJsonSchema$Id} placement={'right'}>\n <Link\n target={'_blank'}\n href={`${getEndpoint(\n BackendDestinationEnum.REPO_ENDPOINT,\n )}/repo/v1/schema/type/registered/${\n gridSession?.gridJsonSchema$Id\n }`}\n >\n View Validation Schema (JSON)\n </Link>\n </Tooltip>\n </div>\n )}\n </Stack>\n )\n\n return <SWCHeader title={title} description={description} />\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAwB,EAAc,GAA2B;CAC/D,IAAM,EAAE,cAAW,cAAW,GACxB,EAAE,MAAM,GAAa,OAAO,MAChC,EAAkB,EAAU,EACxB,EAAE,MAAM,MAAqB,EACjC,GAAa,eACd,EACK,EAAE,MAAM,MAAiB,EAAmB,KAAU,GAAG,EAC7D,SAAS,KAAU,MACpB,CAAC;AAyCF,QAvCI,IACK,kBAAC,GAAD,EAAa,OAAO,GAAoB,CAAA,GAsC1C,kBAAC,GAAD;EAAkB,OAAA,gBAlCvB,GAAkB,OAAO,MAAM,EAAiB,SAAS;EAkCd,aA/B3C,kBAAC,GAAD;GAAO,SAAS;aAAhB;IACE,kBAAC,GAAD;KAAY,SAAS;eAArB,CAAkC,QAAK,EAAuB;;IAC7D,KACC,kBAAC,GAAD;KAAO,WAAU;KAAM,SAAS;KAAG,YAAW;eAA9C,CACE,kBAAC,GAAD;MAAY,SAAS;gBAArB;OACE,kBAAC,UAAD,EAAA,UAAQ,cAAmB,CAAA;;OAAE,EAAa;OAAU;OACzC;SACb,kBAAC,GAAD;MAAe,gBAAgB,EAAa;gBAC1C,kBAAC,GAAD;OAAM,WAAU;iBAAQ;OAAwB,CAAA;MAClC,CAAA,CACV;;IAET,GAAa,qBACZ,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KAAS,OAAO,GAAa;KAAmB,WAAW;eACzD,kBAAC,GAAD;MACE,QAAQ;MACR,MAAM,GAAG,EACP,EAAuB,cACxB,CAAC,kCACA,GAAa;gBAEhB;MAEM,CAAA;KACC,CAAA,EACN,CAAA;IAEF;IAGmC;EAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export default function CuratorDashboard(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CuratorDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CuratorDashboard.d.ts","sourceRoot":"","sources":["../../../../src/features/curator/dashboard/CuratorDashboard.tsx"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CA2CvC"}
@@ -0,0 +1,45 @@
1
+ import e from "../../../components/layout/InfiniteTableLayout.js";
2
+ import { useGetCurationTasksInfinite as t } from "../../../synapse-queries/curation/task/useCurationTask.js";
3
+ import n from "../../team/invitation/components/OpenInvitationsToUserCard.js";
4
+ import r from "./components/shared.module.js";
5
+ import i from "./components/CurationTaskCard.js";
6
+ import a from "../../../components/layout/SWCPageLayout.js";
7
+ import { useMemo as o } from "react";
8
+ import { Typography as s } from "@mui/material";
9
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
10
+ import u from "@mui/material/Stack";
11
+ //#region src/features/curator/dashboard/CuratorDashboard.tsx
12
+ function d() {
13
+ let { data: d, isLoading: f, hasNextPage: p, isFetchingNextPage: m, fetchNextPage: h } = t({ assignedToMe: !0 }), g = o(() => d?.pages.flatMap((e) => e.bundlePage ?? []) ?? [], [d]);
14
+ return /* @__PURE__ */ c(a, {
15
+ header: { title: "Curator Dashboard" },
16
+ children: /* @__PURE__ */ l(u, {
17
+ className: "pageContent",
18
+ gap: 4,
19
+ mt: 5,
20
+ children: [
21
+ /* @__PURE__ */ c(s, {
22
+ variant: "headline1",
23
+ children: "On Your Radar"
24
+ }),
25
+ /* @__PURE__ */ c(n, { cardProps: { className: r.card } }),
26
+ /* @__PURE__ */ c(e, {
27
+ table: /* @__PURE__ */ c(u, {
28
+ gap: 3,
29
+ children: g.map((e) => /* @__PURE__ */ c(i, { taskBundle: e }, e.task?.taskId))
30
+ }),
31
+ isLoading: f,
32
+ isEmpty: g.length === 0,
33
+ hasNextPage: p,
34
+ isFetchingNextPage: m,
35
+ onFetchNextPageClicked: () => void h(),
36
+ noResults: "There are currently no curation tasks assigned to you."
37
+ })
38
+ ]
39
+ })
40
+ });
41
+ }
42
+ //#endregion
43
+ export { d as default };
44
+
45
+ //# sourceMappingURL=CuratorDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CuratorDashboard.js","names":[],"sources":["../../../../src/features/curator/dashboard/CuratorDashboard.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport OpenInvitationsToUserCard from '@/features/team/invitation/components/OpenInvitationsToUserCard'\nimport { useGetCurationTasksInfinite } from '@/synapse-queries/curation/task/useCurationTask'\nimport { Typography } from '@mui/material'\nimport Stack from '@mui/material/Stack'\nimport { useMemo } from 'react'\nimport CurationTaskCard from './components/CurationTaskCard'\nimport sharedStyles from './components/shared.module.scss'\nimport SWCPageLayout from '@/components/layout/SWCPageLayout'\n\nexport default function CuratorDashboard() {\n const {\n data: curationTasks,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useGetCurationTasksInfinite({\n assignedToMe: true,\n })\n\n const tasks = useMemo(() => {\n return curationTasks?.pages.flatMap(page => page.bundlePage ?? []) ?? []\n }, [curationTasks])\n\n return (\n <SWCPageLayout header={{ title: 'Curator Dashboard' }}>\n <Stack className=\"pageContent\" gap={4} mt={5}>\n <Typography variant=\"headline1\">On Your Radar</Typography>\n <OpenInvitationsToUserCard\n cardProps={{ className: sharedStyles.card }}\n />\n <InfiniteTableLayout\n table={\n <Stack gap={3}>\n {tasks.map(taskBundle => (\n <CurationTaskCard\n key={taskBundle.task?.taskId}\n taskBundle={taskBundle}\n />\n ))}\n </Stack>\n }\n isLoading={isLoading}\n isEmpty={tasks.length === 0}\n hasNextPage={hasNextPage}\n isFetchingNextPage={isFetchingNextPage}\n onFetchNextPageClicked={() => void fetchNextPage()}\n noResults={'There are currently no curation tasks assigned to you.'}\n ></InfiniteTableLayout>\n </Stack>\n </SWCPageLayout>\n )\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAwB,IAAmB;CACzC,IAAM,EACJ,MAAM,GACN,cACA,gBACA,uBACA,qBACE,EAA4B,EAC9B,cAAc,IACf,CAAC,EAEI,IAAQ,QACL,GAAe,MAAM,SAAQ,MAAQ,EAAK,cAAc,EAAE,CAAC,IAAI,EAAE,EACvE,CAAC,EAAc,CAAC;AAEnB,QACE,kBAAC,GAAD;EAAe,QAAQ,EAAE,OAAO,qBAAqB;YACnD,kBAAC,GAAD;GAAO,WAAU;GAAc,KAAK;GAAG,IAAI;aAA3C;IACE,kBAAC,GAAD;KAAY,SAAQ;eAAY;KAA0B,CAAA;IAC1D,kBAAC,GAAD,EACE,WAAW,EAAE,WAAW,EAAa,MAAM,EAC3C,CAAA;IACF,kBAAC,GAAD;KACE,OACE,kBAAC,GAAD;MAAO,KAAK;gBACT,EAAM,KAAI,MACT,kBAAC,GAAD,EAEc,eACZ,EAFK,EAAW,MAAM,OAEtB,CACF;MACI,CAAA;KAEC;KACX,SAAS,EAAM,WAAW;KACb;KACO;KACpB,8BAA8B,KAAK,GAAe;KAClD,WAAW;KACU,CAAA;IACjB;;EACM,CAAA"}
@@ -0,0 +1 @@
1
+ ._card_12r05_1.MuiCard-root{background-color:#f5f8fa}._cardContent_12r05_5{flex-direction:row;align-items:stretch;gap:24px;margin-bottom:16px;display:flex}@media (width<=768px){._cardContent_12r05_5{flex-direction:column}}._mainContent_12r05_18{flex-direction:column;flex-grow:1;gap:16px;display:flex}._titleChipContainer_12r05_25{flex-direction:row;align-items:center;gap:16px;display:flex}@media (width<=768px){._titleChipContainer_12r05_25{flex-direction:column;align-items:flex-start}}._userChipContainer_12r05_39{flex-flow:wrap;align-items:center;gap:16px;display:flex}._buttonContainer_12r05_47{flex-grow:0;flex-shrink:0;margin-left:auto;display:flex}@media (width<=768px){._buttonContainer_12r05_47{margin-left:0}}
@@ -0,0 +1,9 @@
1
+ import { TaskBundle } from '@sage-bionetworks/synapse-client';
2
+ export type CurationTaskCardProps = {
3
+ taskBundle: TaskBundle;
4
+ };
5
+ /**
6
+ * Card component for displaying a curation task on the curator dashboard. Shows relevant information about the task and includes a button to proceed to the next step in the workflow.
7
+ */
8
+ export default function CurationTaskCard(props: CurationTaskCardProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=CurationTaskCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurationTaskCard.d.ts","sourceRoot":"","sources":["../../../../../src/features/curator/dashboard/components/CurationTaskCard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAO7D,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AA6DD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAqDpE"}
@@ -0,0 +1,106 @@
1
+ import { displayToast as e } from "../../../../components/ToastMessage/ToastMessage.js";
2
+ import "../../../../components/index.js";
3
+ import { OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE as t } from "../../../entity/metadata-task/utils/constants.js";
4
+ import n from "../../../entity/metadata-task/hooks/useOpenCuratorButton.js";
5
+ import r from "./CurationTaskCard.module.js";
6
+ import i from "./NextStepButton.js";
7
+ import a from "./shared.module.js";
8
+ import o from "./UserOrTeamChip.js";
9
+ import { Card as s, Chip as c, Divider as l, Typography as u } from "@mui/material";
10
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
11
+ import p from "classnames";
12
+ //#region src/features/curator/dashboard/components/CurationTaskCard.tsx
13
+ function m(t) {
14
+ let { onClick: r, isLoading: i, isPending: a, hasPermission: o } = n(t.task);
15
+ if (!t.task || !t.status) throw Error("Task bundle is missing required properties");
16
+ switch (t.task?.taskProperties?.concreteType) {
17
+ case "org.sagebionetworks.repo.model.curation.metadata.FileBasedMetadataTaskProperties":
18
+ case "org.sagebionetworks.repo.model.curation.metadata.RecordBasedMetadataTaskProperties": return {
19
+ title: t.task.dataType,
20
+ description: t.task.instructions ?? "",
21
+ principalIds: t.task.assigneePrincipalId ? [t.task.assigneePrincipalId] : [],
22
+ buttonText: "Open Curator",
23
+ taskType: "Curate Data",
24
+ onClickNextStep: r,
25
+ isLoading: i,
26
+ isPending: a,
27
+ hasPermission: o
28
+ };
29
+ default: console.error("No UI implemented for task type: " + t.task?.taskProperties?.concreteType);
30
+ }
31
+ return {
32
+ title: t.task.dataType,
33
+ description: t.task.instructions ?? "",
34
+ principalIds: t.task.assigneePrincipalId ? [t.task.assigneePrincipalId] : [],
35
+ buttonText: "Continue",
36
+ taskType: "",
37
+ onClickNextStep: () => {
38
+ e("No action defined for this task type", "danger", { title: "Unexpected Error" });
39
+ },
40
+ isLoading: !1,
41
+ isPending: !1,
42
+ hasPermission: void 0
43
+ };
44
+ }
45
+ function h(e) {
46
+ let { label: t } = e;
47
+ return /* @__PURE__ */ d(c, {
48
+ sx: {
49
+ fontWeight: 600,
50
+ backgroundColor: "#BFD3ED"
51
+ },
52
+ label: t
53
+ });
54
+ }
55
+ function g(n) {
56
+ let { taskBundle: c } = n, { title: g, description: _, taskType: v, principalIds: y, buttonText: b, onClickNextStep: x, hasPermission: S, isLoading: C, isPending: w } = m(c);
57
+ return /* @__PURE__ */ d(s, {
58
+ className: p(a.card, r.card),
59
+ children: /* @__PURE__ */ f("div", {
60
+ className: r.cardContent,
61
+ children: [
62
+ /* @__PURE__ */ f("div", {
63
+ className: r.mainContent,
64
+ children: [
65
+ /* @__PURE__ */ f("div", {
66
+ className: r.titleChipContainer,
67
+ children: [/* @__PURE__ */ d(u, {
68
+ variant: "headline3",
69
+ children: g
70
+ }), v && /* @__PURE__ */ d(h, { label: v })]
71
+ }),
72
+ /* @__PURE__ */ d(u, {
73
+ variant: "body1",
74
+ children: _
75
+ }),
76
+ /* @__PURE__ */ d("div", {
77
+ className: r.userChipContainer,
78
+ children: y.map((e) => /* @__PURE__ */ d(o, { principalId: e }, e))
79
+ })
80
+ ]
81
+ }),
82
+ /* @__PURE__ */ d(l, {
83
+ orientation: "vertical",
84
+ flexItem: !0,
85
+ sx: { display: {
86
+ xs: "none",
87
+ md: "block"
88
+ } }
89
+ }),
90
+ /* @__PURE__ */ d(i, {
91
+ className: r.cardButton,
92
+ buttonText: b,
93
+ onClick: S ? x : () => {
94
+ e(t, "danger");
95
+ },
96
+ disabled: C,
97
+ loading: w
98
+ })
99
+ ]
100
+ })
101
+ });
102
+ }
103
+ //#endregion
104
+ export { g as default };
105
+
106
+ //# sourceMappingURL=CurationTaskCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurationTaskCard.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/CurationTaskCard.tsx"],"sourcesContent":["import { displayToast } from '@/components'\nimport useOpenCuratorFromTaskButton from '@/features/entity/metadata-task/hooks/useOpenCuratorButton'\nimport { OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE } from '@/features/entity/metadata-task/utils/constants'\nimport { Card, Chip, Divider, Typography } from '@mui/material'\nimport { TaskBundle } from '@sage-bionetworks/synapse-client'\nimport classNames from 'classnames'\nimport styles from './CurationTaskCard.module.scss'\nimport NextStepButton from './NextStepButton'\nimport sharedStyles from './shared.module.scss'\nimport UserOrTeamChip from './UserOrTeamChip'\n\nexport type CurationTaskCardProps = {\n taskBundle: TaskBundle\n}\n\nfunction useUiForTask(taskBundle: TaskBundle) {\n const { onClick, isLoading, isPending, hasPermission } =\n useOpenCuratorFromTaskButton(taskBundle.task!)\n\n if (!taskBundle.task || !taskBundle.status) {\n throw new Error('Task bundle is missing required properties')\n }\n\n switch (taskBundle.task?.taskProperties?.concreteType) {\n case 'org.sagebionetworks.repo.model.curation.metadata.FileBasedMetadataTaskProperties':\n case 'org.sagebionetworks.repo.model.curation.metadata.RecordBasedMetadataTaskProperties':\n return {\n title: taskBundle.task.dataType,\n description: taskBundle.task.instructions ?? '',\n principalIds: taskBundle.task.assigneePrincipalId\n ? [taskBundle.task.assigneePrincipalId]\n : [],\n buttonText: 'Open Curator',\n taskType: 'Curate Data',\n onClickNextStep: onClick,\n isLoading,\n isPending,\n hasPermission,\n }\n default: {\n console.error(\n 'No UI implemented for task type: ' +\n // @ts-expect-error - the switch should be exhaustive for known types\n taskBundle.task?.taskProperties?.concreteType,\n )\n }\n }\n\n return {\n title: taskBundle.task.dataType,\n description: taskBundle.task.instructions ?? '',\n principalIds: taskBundle.task.assigneePrincipalId\n ? [taskBundle.task.assigneePrincipalId]\n : [],\n buttonText: 'Continue',\n taskType: '',\n onClickNextStep: () => {\n displayToast('No action defined for this task type', 'danger', {\n title: 'Unexpected Error',\n })\n },\n isLoading: false,\n isPending: false,\n hasPermission: undefined,\n }\n}\n\nfunction TaskTypeChip(props: { label: string }) {\n const { label } = props\n return (\n <Chip sx={{ fontWeight: 600, backgroundColor: '#BFD3ED' }} label={label} />\n )\n}\n\n/**\n * Card component for displaying a curation task on the curator dashboard. Shows relevant information about the task and includes a button to proceed to the next step in the workflow.\n */\nexport default function CurationTaskCard(props: CurationTaskCardProps) {\n const { taskBundle } = props\n const {\n title,\n description,\n taskType,\n principalIds,\n buttonText,\n onClickNextStep,\n hasPermission,\n isLoading,\n isPending,\n } = useUiForTask(taskBundle)\n\n return (\n <Card className={classNames(sharedStyles.card, styles.card)}>\n <div className={styles.cardContent}>\n <div className={styles.mainContent}>\n <div className={styles.titleChipContainer}>\n <Typography variant=\"headline3\">{title}</Typography>\n {taskType && <TaskTypeChip label={taskType} />}\n </div>\n <Typography variant=\"body1\">{description}</Typography>\n <div className={styles.userChipContainer}>\n {principalIds.map(principalId => (\n <UserOrTeamChip key={principalId} principalId={principalId} />\n ))}\n </div>\n </div>\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ display: { xs: 'none', md: 'block' } }}\n />\n <NextStepButton\n className={styles.cardButton}\n buttonText={buttonText}\n onClick={\n hasPermission\n ? onClickNextStep\n : () => {\n displayToast(\n OPEN_CURATOR_NO_PERMISSION_ON_SOURCE_ERROR_MESSAGE,\n 'danger',\n )\n }\n }\n disabled={isLoading}\n loading={isPending}\n />\n </div>\n </Card>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAS,EAAa,GAAwB;CAC5C,IAAM,EAAE,YAAS,cAAW,cAAW,qBACrC,EAA6B,EAAW,KAAM;AAEhD,KAAI,CAAC,EAAW,QAAQ,CAAC,EAAW,OAClC,OAAU,MAAM,6CAA6C;AAG/D,SAAQ,EAAW,MAAM,gBAAgB,cAAzC;EACE,KAAK;EACL,KAAK,qFACH,QAAO;GACL,OAAO,EAAW,KAAK;GACvB,aAAa,EAAW,KAAK,gBAAgB;GAC7C,cAAc,EAAW,KAAK,sBAC1B,CAAC,EAAW,KAAK,oBAAoB,GACrC,EAAE;GACN,YAAY;GACZ,UAAU;GACV,iBAAiB;GACjB;GACA;GACA;GACD;EACH,QACE,SAAQ,MACN,sCAEE,EAAW,MAAM,gBAAgB,aACpC;;AAIL,QAAO;EACL,OAAO,EAAW,KAAK;EACvB,aAAa,EAAW,KAAK,gBAAgB;EAC7C,cAAc,EAAW,KAAK,sBAC1B,CAAC,EAAW,KAAK,oBAAoB,GACrC,EAAE;EACN,YAAY;EACZ,UAAU;EACV,uBAAuB;AACrB,KAAa,wCAAwC,UAAU,EAC7D,OAAO,oBACR,CAAC;;EAEJ,WAAW;EACX,WAAW;EACX,eAAe,KAAA;EAChB;;AAGH,SAAS,EAAa,GAA0B;CAC9C,IAAM,EAAE,aAAU;AAClB,QACE,kBAAC,GAAD;EAAM,IAAI;GAAE,YAAY;GAAK,iBAAiB;GAAW;EAAS;EAAS,CAAA;;AAO/E,SAAwB,EAAiB,GAA8B;CACrE,IAAM,EAAE,kBAAe,GACjB,EACJ,UACA,gBACA,aACA,iBACA,eACA,oBACA,kBACA,cACA,iBACE,EAAa,EAAW;AAE5B,QACE,kBAAC,GAAD;EAAM,WAAW,EAAW,EAAa,MAAM,EAAO,KAAK;YACzD,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB;IACE,kBAAC,OAAD;KAAK,WAAW,EAAO;eAAvB;MACE,kBAAC,OAAD;OAAK,WAAW,EAAO;iBAAvB,CACE,kBAAC,GAAD;QAAY,SAAQ;kBAAa;QAAmB,CAAA,EACnD,KAAY,kBAAC,GAAD,EAAc,OAAO,GAAY,CAAA,CAC1C;;MACN,kBAAC,GAAD;OAAY,SAAQ;iBAAS;OAAyB,CAAA;MACtD,kBAAC,OAAD;OAAK,WAAW,EAAO;iBACpB,EAAa,KAAI,MAChB,kBAAC,GAAD,EAA+C,gBAAe,EAAzC,EAAyC,CAC9D;OACE,CAAA;MACF;;IACN,kBAAC,GAAD;KACE,aAAY;KACZ,UAAA;KACA,IAAI,EAAE,SAAS;MAAE,IAAI;MAAQ,IAAI;MAAS,EAAE;KAC5C,CAAA;IACF,kBAAC,GAAD;KACE,WAAW,EAAO;KACN;KACZ,SACE,IACI,UACM;AACJ,QACE,GACA,SACD;;KAGT,UAAU;KACV,SAAS;KACT,CAAA;IACE;;EACD,CAAA"}
@@ -0,0 +1,12 @@
1
+ import './CurationTaskCard.css';var e = {
2
+ card: "_card_12r05_1",
3
+ cardContent: "_cardContent_12r05_5",
4
+ mainContent: "_mainContent_12r05_18",
5
+ titleChipContainer: "_titleChipContainer_12r05_25",
6
+ userChipContainer: "_userChipContainer_12r05_39",
7
+ buttonContainer: "_buttonContainer_12r05_47"
8
+ };
9
+ //#endregion
10
+ export { e as default };
11
+
12
+ //# sourceMappingURL=CurationTaskCard.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurationTaskCard.module.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/CurationTaskCard.module.scss"],"sourcesContent":[".card:global(.MuiCard-root) {\n background-color: #f5f8fa;\n}\n\n.cardContent {\n display: flex;\n flex-direction: row;\n margin-bottom: 16px;\n gap: 24px;\n align-items: stretch;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n}\n\n.mainContent {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex-grow: 1;\n}\n\n.titleChipContainer {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 16px;\n align-items: center;\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: flex-start;\n }\n}\n\n.userChipContainer {\n display: flex;\n flex-direction: row;\n gap: 16px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.buttonContainer {\n display: flex;\n flex-grow: 0;\n flex-shrink: 0;\n margin-left: auto;\n @media (max-width: 768px) {\n margin-left: 0;\n }\n}\n"],"mappings":""}
@@ -0,0 +1,52 @@
1
+ .card:global(.MuiCard-root) {
2
+ background-color: #f5f8fa;
3
+ }
4
+
5
+ .cardContent {
6
+ display: flex;
7
+ flex-direction: row;
8
+ margin-bottom: 16px;
9
+ gap: 24px;
10
+ align-items: stretch;
11
+
12
+ @media (max-width: 768px) {
13
+ flex-direction: column;
14
+ }
15
+ }
16
+
17
+ .mainContent {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: 16px;
21
+ flex-grow: 1;
22
+ }
23
+
24
+ .titleChipContainer {
25
+ display: flex;
26
+ flex-direction: row;
27
+ align-items: center;
28
+ gap: 16px;
29
+ align-items: center;
30
+ @media (max-width: 768px) {
31
+ flex-direction: column;
32
+ align-items: flex-start;
33
+ }
34
+ }
35
+
36
+ .userChipContainer {
37
+ display: flex;
38
+ flex-direction: row;
39
+ gap: 16px;
40
+ align-items: center;
41
+ flex-wrap: wrap;
42
+ }
43
+
44
+ .buttonContainer {
45
+ display: flex;
46
+ flex-grow: 0;
47
+ flex-shrink: 0;
48
+ margin-left: auto;
49
+ @media (max-width: 768px) {
50
+ margin-left: 0;
51
+ }
52
+ }
@@ -0,0 +1 @@
1
+ ._button_1mypv_1{flex-direction:row;justify-content:flex-end;align-items:center;gap:32px;display:flex}._button_1mypv_1 ._icon_1mypv_8{color:var(--synapse-gray-700);font-size:30px}._button_1mypv_1 ._buttonText_1mypv_12{flex-direction:column;flex-shrink:0;justify-content:center;align-items:flex-start;gap:0;margin-left:16px;margin-right:16px;display:flex}._button_1mypv_1 ._buttonTextSub_1mypv_22{color:var(--synapse-gray-700)}._button_1mypv_1:disabled{pointer-events:all;opacity:.5}._button_1mypv_1:hover:not(:disabled) ._buttonTextMain_1mypv_29{text-decoration:underline}._button_1mypv_1:hover:not(:disabled) ._icon_1mypv_8,._button_1mypv_1:hover:not(:disabled) ._buttonTextSub_1mypv_22{color:var(--synapse-gray-800)}._button_1mypv_1:active:not(:disabled) ._buttonTextMain_1mypv_29{text-decoration:underline;text-decoration-thickness:3px}._button_1mypv_1:active:not(:disabled) ._icon_1mypv_8,._button_1mypv_1:active:not(:disabled) ._buttonTextSub_1mypv_22{color:var(--synapse-gray-900)}
@@ -0,0 +1,14 @@
1
+ type NextStepButtonProps = {
2
+ className?: string;
3
+ buttonText: string;
4
+ onClick: () => void;
5
+ disabled?: boolean;
6
+ loading?: boolean;
7
+ };
8
+ /**
9
+ * Button component used to proceed to the next step in a workflow.
10
+ * Displays an arrow icon or loading spinner when appropriate.
11
+ */
12
+ export default function NextStepButton(props: NextStepButtonProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=NextStepButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NextStepButton.d.ts","sourceRoot":"","sources":["../../../../../src/features/curator/dashboard/components/NextStepButton.tsx"],"names":[],"mappings":"AAMA,KAAK,mBAAmB,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA8BhE"}
@@ -0,0 +1,35 @@
1
+ import { SynapseSpinner as e } from "../../../../components/LoadingScreen/LoadingScreen.js";
2
+ import t from "./NextStepButton.module.js";
3
+ import { Typography as n } from "@mui/material";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ import { ArrowForwardIos as a } from "@mui/icons-material";
6
+ import o from "classnames";
7
+ //#region src/features/curator/dashboard/components/NextStepButton.tsx
8
+ function s(s) {
9
+ let { className: c, buttonText: l, onClick: u, disabled: d, loading: f } = s;
10
+ return /* @__PURE__ */ i("button", {
11
+ type: "button",
12
+ className: o(t.button, c),
13
+ onClick: u,
14
+ disabled: d || f,
15
+ children: [/* @__PURE__ */ i("div", {
16
+ className: t.buttonText,
17
+ children: [/* @__PURE__ */ r(n, {
18
+ className: t.buttonTextSub,
19
+ variant: "body1",
20
+ children: "Next step"
21
+ }), /* @__PURE__ */ r(n, {
22
+ className: t.buttonTextMain,
23
+ variant: "buttonLink",
24
+ color: "primary",
25
+ fontWeight: 700,
26
+ align: "left",
27
+ children: l
28
+ })]
29
+ }), f ? /* @__PURE__ */ r(e, { size: 30 }) : /* @__PURE__ */ r(a, { className: t.icon })]
30
+ });
31
+ }
32
+ //#endregion
33
+ export { s as default };
34
+
35
+ //# sourceMappingURL=NextStepButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NextStepButton.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/NextStepButton.tsx"],"sourcesContent":["import styles from './NextStepButton.module.scss'\nimport { Typography } from '@mui/material'\nimport { ArrowForwardIos } from '@mui/icons-material'\nimport { SynapseSpinner } from '@/components/LoadingScreen/LoadingScreen'\nimport classNames from 'classnames'\n\ntype NextStepButtonProps = {\n className?: string\n buttonText: string\n onClick: () => void\n disabled?: boolean\n loading?: boolean\n}\n\n/**\n * Button component used to proceed to the next step in a workflow.\n * Displays an arrow icon or loading spinner when appropriate.\n */\nexport default function NextStepButton(props: NextStepButtonProps) {\n const { className, buttonText, onClick, disabled, loading } = props\n return (\n <button\n type=\"button\"\n className={classNames(styles.button, className)}\n onClick={onClick}\n disabled={disabled || loading}\n >\n <div className={styles.buttonText}>\n <Typography className={styles.buttonTextSub} variant=\"body1\">\n Next step\n </Typography>\n <Typography\n className={styles.buttonTextMain}\n variant=\"buttonLink\"\n color=\"primary\"\n fontWeight={700}\n align=\"left\"\n >\n {buttonText}\n </Typography>\n </div>\n {loading ? (\n <SynapseSpinner size={30} />\n ) : (\n <ArrowForwardIos className={styles.icon} />\n )}\n </button>\n )\n}\n"],"mappings":";;;;;;;AAkBA,SAAwB,EAAe,GAA4B;CACjE,IAAM,EAAE,cAAW,eAAY,YAAS,aAAU,eAAY;AAC9D,QACE,kBAAC,UAAD;EACE,MAAK;EACL,WAAW,EAAW,EAAO,QAAQ,EAAU;EACtC;EACT,UAAU,KAAY;YAJxB,CAME,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACE,kBAAC,GAAD;IAAY,WAAW,EAAO;IAAe,SAAQ;cAAQ;IAEhD,CAAA,EACb,kBAAC,GAAD;IACE,WAAW,EAAO;IAClB,SAAQ;IACR,OAAM;IACN,YAAY;IACZ,OAAM;cAEL;IACU,CAAA,CACT;MACL,IACC,kBAAC,GAAD,EAAgB,MAAM,IAAM,CAAA,GAE5B,kBAAC,GAAD,EAAiB,WAAW,EAAO,MAAQ,CAAA,CAEtC"}
@@ -0,0 +1,11 @@
1
+ import './NextStepButton.css';var e = {
2
+ button: "_button_1mypv_1",
3
+ icon: "_icon_1mypv_8",
4
+ buttonText: "_buttonText_1mypv_12",
5
+ buttonTextSub: "_buttonTextSub_1mypv_22",
6
+ buttonTextMain: "_buttonTextMain_1mypv_29"
7
+ };
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=NextStepButton.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NextStepButton.module.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/NextStepButton.module.scss"],"sourcesContent":[".button {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n gap: 32px;\n\n .icon {\n color: var(--synapse-gray-700);\n font-size: 30px;\n }\n\n .buttonText {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 0;\n flex-shrink: 0;\n margin-left: 16px;\n margin-right: 16px;\n }\n\n .buttonTextSub {\n color: var(--synapse-gray-700);\n }\n\n &:disabled {\n pointer-events: all;\n opacity: 0.5;\n }\n\n &:hover:not(:disabled) {\n .buttonTextMain {\n text-decoration: underline;\n }\n .icon {\n color: var(--synapse-gray-800);\n }\n .buttonTextSub {\n color: var(--synapse-gray-800);\n }\n }\n\n &:active:not(:disabled) {\n .buttonTextMain {\n text-decoration: underline;\n text-decoration-thickness: 3px;\n }\n .icon {\n color: var(--synapse-gray-900);\n }\n .buttonTextSub {\n color: var(--synapse-gray-900);\n }\n }\n}\n"],"mappings":""}