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":"QueryMatching.test-utils.js","names":[],"sources":["../../src/synapse-queries/QueryMatching.test-utils.ts"],"sourcesContent":["import {\n matchQuery,\n Query,\n QueryClient,\n QueryKey,\n QueryFilters,\n} from '@tanstack/query-core'\n\n/**\n * Returns true iff a query with the given queryKey is matched by the provided `filters`\n * @param queryKey\n * @param filters\n */\nexport function doesQueryFilterMatch(\n queryKey: QueryKey,\n filters: QueryFilters,\n): boolean {\n const query = new Query({\n client: new QueryClient(),\n queryKey: queryKey,\n queryHash: '',\n })\n return matchQuery(filters, query)\n}\n\nfunction doesQueryKeyMatch(\n queryKey: QueryKey,\n matcherQueryKey: QueryKey,\n): boolean {\n return doesQueryFilterMatch(queryKey, { queryKey: matcherQueryKey })\n}\n\nexport function expectQueryKeyToMatch(queryKey: QueryKey, matcher: QueryKey) {\n const isMatch = doesQueryKeyMatch(queryKey, matcher)\n if (!isMatch) {\n console.error(`Expected query key: ${JSON.stringify(queryKey)}`)\n console.error(`Received query key: ${JSON.stringify(matcher)}`)\n }\n expect(isMatch).toBe(true)\n}\n\nexport function expectQueryKeyNotToMatch(\n queryKey: QueryKey,\n matcher: QueryKey,\n) {\n const isMatch = doesQueryKeyMatch(queryKey, matcher)\n if (isMatch) {\n console.error(\n `Expected query keys to differ, but they matched: ${JSON.stringify(\n queryKey,\n )}`,\n )\n }\n expect(isMatch).toBe(false)\n}\n"],"mappings":";;AAaA,SAAgB,EACd,GACA,GACS;AAMT,QAAO,EAAW,GALJ,IAAI,EAAM;EACtB,QAAQ,IAAI,GAAa;EACf;EACV,WAAW;EACZ,CAAC,CAC+B;;AAGnC,SAAS,EACP,GACA,GACS;AACT,QAAO,EAAqB,GAAU,EAAE,UAAU,GAAiB,CAAC;;AAGtE,SAAgB,EAAsB,GAAoB,GAAmB;CAC3E,IAAM,IAAU,EAAkB,GAAU,EAAQ;AAKpD,CAJK,MACH,QAAQ,MAAM,uBAAuB,KAAK,UAAU,EAAS,GAAG,EAChE,QAAQ,MAAM,uBAAuB,KAAK,UAAU,EAAQ,GAAG,GAEjE,OAAO,EAAQ,CAAC,KAAK,GAAK;;AAG5B,SAAgB,EACd,GACA,GACA;CACA,IAAM,IAAU,EAAkB,GAAU,EAAQ;AAQpD,CAPI,KACF,QAAQ,MACN,oDAAoD,KAAK,UACvD,EACD,GACF,EAEH,OAAO,EAAQ,CAAC,KAAK,GAAM"}
1
+ {"version":3,"file":"QueryMatching.test-utils.js","names":[],"sources":["../../src/synapse-queries/QueryMatching.test-utils.ts"],"sourcesContent":["import {\n matchQuery,\n Query,\n QueryClient,\n QueryKey,\n QueryFilters,\n} from '@tanstack/query-core'\n\n/**\n * Returns true iff a query with the given queryKey is matched by the provided `filters`\n * @param queryKey\n * @param filters\n */\nexport function doesQueryFilterMatch(\n queryKey: QueryKey,\n filters: QueryFilters,\n): boolean {\n const query = new Query({\n client: new QueryClient(),\n queryKey: queryKey,\n queryHash: '',\n })\n return matchQuery(filters, query)\n}\n\nfunction doesQueryKeyMatch(\n queryKey: QueryKey,\n matcherQueryKey: QueryKey,\n): boolean {\n return doesQueryFilterMatch(queryKey, { queryKey: matcherQueryKey })\n}\n\nexport function expectQueryKeyToMatch(queryKey: QueryKey, matcher: QueryKey) {\n const isMatch = doesQueryKeyMatch(queryKey, matcher)\n if (!isMatch) {\n console.error(`Expected query key: ${JSON.stringify(queryKey)}`)\n console.error(`Received query key: ${JSON.stringify(matcher)}`)\n }\n expect(isMatch).toBe(true)\n}\n\nexport function expectQueryKeyNotToMatch(\n queryKey: QueryKey,\n matcher: QueryKey,\n) {\n const isMatch = doesQueryKeyMatch(queryKey, matcher)\n if (isMatch) {\n console.error(\n `Expected query keys to differ, but they matched: ${JSON.stringify(\n queryKey,\n )}`,\n )\n }\n expect(isMatch).toBe(false)\n}\n"],"mappings":";;AAaA,SAAgB,EACd,GACA,GACS;AAMT,QAAO,EAAW,GAAS,IALT,EAAM;EACtB,QAAQ,IAAI,GAAa;EACf;EACV,WAAW;EACZ,CAC0B,CAAM;;AAGnC,SAAS,EACP,GACA,GACS;AACT,QAAO,EAAqB,GAAU,EAAE,UAAU,GAAiB,CAAC;;AAGtE,SAAgB,EAAsB,GAAoB,GAAmB;CAC3E,IAAM,IAAU,EAAkB,GAAU,EAAQ;AAKpD,CAJK,MACH,QAAQ,MAAM,uBAAuB,KAAK,UAAU,EAAS,GAAG,EAChE,QAAQ,MAAM,uBAAuB,KAAK,UAAU,EAAQ,GAAG,GAEjE,OAAO,EAAQ,CAAC,KAAK,GAAK;;AAG5B,SAAgB,EACd,GACA,GACA;CACA,IAAM,IAAU,EAAkB,GAAU,EAAQ;AAQpD,CAPI,KACF,QAAQ,MACN,oDAAoD,KAAK,UACvD,EACD,GACF,EAEH,OAAO,EAAQ,CAAC,KAAK,GAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTwoFactorEnrollment.js","names":[],"sources":["../../../src/synapse-queries/auth/useTwoFactorEnrollment.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n TotpSecret,\n TotpSecretActivationRequest,\n TwoFactorAuthDisableRequest,\n TwoFactorAuthResetRequest,\n TwoFactorAuthStatus,\n} from '@sage-bionetworks/synapse-types'\nimport {\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\nimport { getAllActionsRequiredQueryFilters } from '../QueryFilterUtils'\nimport { KeyFactory } from '../KeyFactory'\nimport { useMemo } from 'react'\n\nexport function useStartTwoFactorEnrollment(\n options?: Partial<UseMutationOptions<TotpSecret, SynapseClientError>>,\n) {\n const { accessToken } = useSynapseContext()\n return useMutation({\n ...options,\n mutationFn: () => SynapseClient.start2FAEnrollment(accessToken),\n })\n}\n\nexport function useFinishTwoFactorEnrollment(\n options?: UseMutationOptions<\n TwoFactorAuthStatus,\n SynapseClientError,\n TotpSecretActivationRequest\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation<\n TwoFactorAuthStatus,\n SynapseClientError,\n TotpSecretActivationRequest\n >({\n ...options,\n onSuccess: async (...args) => {\n if (options?.onSuccess) {\n options.onSuccess(...args)\n }\n await Promise.all([\n queryClient.invalidateQueries({\n queryKey: keyFactory.getTwoFactorAuthStatusQueryKey(),\n }),\n // Changing 2FA status may impact access requirement status\n queryClient.invalidateQueries({\n queryKey: keyFactory.getAllAccessRequirementStatusesQueryKey(),\n }),\n // ...and any change to access requirement eligibility will impact actions required\n ...getAllActionsRequiredQueryFilters(keyFactory).map(filter =>\n queryClient.invalidateQueries(filter),\n ),\n ])\n },\n mutationFn: request =>\n SynapseClient.complete2FAEnrollment(request, accessToken),\n })\n}\n\nexport function useDisableTwoFactorAuth(\n options?: Partial<UseMutationOptions<void, SynapseClientError, void>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation<void, SynapseClientError, void>({\n ...options,\n onSuccess: async (...args) => {\n if (options?.onSuccess) {\n options.onSuccess(...args)\n }\n return Promise.all([\n queryClient.invalidateQueries({\n queryKey: keyFactory.getTwoFactorAuthStatusQueryKey(),\n }),\n // Changing 2FA status may impact access requirement status\n queryClient.invalidateQueries({\n queryKey: keyFactory.getAllAccessRequirementStatusesQueryKey(),\n }),\n // ...and any change to access requirement eligibility will impact actions required\n ...getAllActionsRequiredQueryFilters(keyFactory).map(filter =>\n queryClient.invalidateQueries(filter),\n ),\n ])\n },\n mutationFn: () =>\n SynapseClient.disableTwoFactorAuthForCurrentUser(accessToken),\n })\n}\n\nexport function useGetTwoFactorEnrollmentStatus(\n options?: Partial<UseQueryOptions<TwoFactorAuthStatus, SynapseClientError>>,\n) {\n const { accessToken } = useSynapseContext()\n return useGetTwoFactorEnrollmentStatusWithAccessToken(accessToken, options)\n}\n\nexport function useGetTwoFactorEnrollmentStatusWithAccessToken(\n accessToken?: string, //usually we can fetch the access token from the context, but this hook is used by ApplicationSessionManager which sets the access token in the context (ApplicationSessionContextProvider)!\n options?: Partial<UseQueryOptions<TwoFactorAuthStatus, SynapseClientError>>,\n) {\n const queryKeyFactory = useMemo(\n () => new KeyFactory(accessToken),\n [accessToken],\n )\n return useQuery({\n queryKey: queryKeyFactory.getTwoFactorAuthStatusQueryKey(),\n queryFn: () =>\n SynapseClient.getCurrentUserTwoFactorEnrollmentStatus(accessToken),\n ...options,\n })\n}\n\nexport function useResetTwoFactorAuth(\n options?: Partial<\n UseMutationOptions<void, SynapseClientError, TwoFactorAuthResetRequest>\n >,\n) {\n return useMutation<void, SynapseClientError, TwoFactorAuthResetRequest>({\n ...options,\n mutationFn: request => SynapseClient.resetTwoFactorAuth(request),\n })\n}\n\nexport function useDisableTwoFactorAuthWithResetToken(\n options?: Partial<\n UseMutationOptions<void, SynapseClientError, TwoFactorAuthDisableRequest>\n >,\n) {\n return useMutation<void, SynapseClientError, TwoFactorAuthDisableRequest>({\n ...options,\n // Invalidating query data isn't needed, since the user is not authenticated in this case\n mutationFn: request => SynapseClient.disableTwoFactorAuth(request),\n })\n}\n"],"mappings":";;;;;;;AAqBA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,mBAAgB,GAAmB;AAC3C,QAAO,EAAY;EACjB,GAAG;EACH,kBAAkB,EAAc,mBAAmB,EAAY;EAChE,CAAC;;AAGJ,SAAgB,EACd,GAKA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB,EACjD,IAAc,GAAgB;AACpC,QAAO,EAIL;EACA,GAAG;EACH,WAAW,OAAO,GAAG,MAAS;AAI5B,GAHI,GAAS,aACX,EAAQ,UAAU,GAAG,EAAK,EAE5B,MAAM,QAAQ,IAAI;IAChB,EAAY,kBAAkB,EAC5B,UAAU,EAAW,gCAAgC,EACtD,CAAC;IAEF,EAAY,kBAAkB,EAC5B,UAAU,EAAW,yCAAyC,EAC/D,CAAC;IAEF,GAAG,EAAkC,EAAW,CAAC,KAAI,MACnD,EAAY,kBAAkB,EAAO,CACtC;IACF,CAAC;;EAEJ,aAAY,MACV,EAAc,sBAAsB,GAAS,EAAY;EAC5D,CAAC;;AAGJ,SAAgB,EACd,GACA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB,EACjD,IAAc,GAAgB;AACpC,QAAO,EAA4C;EACjD,GAAG;EACH,WAAW,OAAO,GAAG,OACf,GAAS,aACX,EAAQ,UAAU,GAAG,EAAK,EAErB,QAAQ,IAAI;GACjB,EAAY,kBAAkB,EAC5B,UAAU,EAAW,gCAAgC,EACtD,CAAC;GAEF,EAAY,kBAAkB,EAC5B,UAAU,EAAW,yCAAyC,EAC/D,CAAC;GAEF,GAAG,EAAkC,EAAW,CAAC,KAAI,MACnD,EAAY,kBAAkB,EAAO,CACtC;GACF,CAAC;EAEJ,kBACE,EAAc,mCAAmC,EAAY;EAChE,CAAC;;AAGJ,SAAgB,EACd,GACA;CACA,IAAM,EAAE,mBAAgB,GAAmB;AAC3C,QAAO,EAA+C,GAAa,EAAQ;;AAG7E,SAAgB,EACd,GACA,GACA;AAKA,QAAO,EAAS;EACd,UALsB,QAChB,IAAI,EAAW,EAAY,EACjC,CAAC,EAAY,CACd,CAE2B,gCAAgC;EAC1D,eACE,EAAc,wCAAwC,EAAY;EACpE,GAAG;EACJ,CAAC;;AAGJ,SAAgB,EACd,GAGA;AACA,QAAO,EAAiE;EACtE,GAAG;EACH,aAAY,MAAW,EAAc,mBAAmB,EAAQ;EACjE,CAAC;;AAGJ,SAAgB,EACd,GAGA;AACA,QAAO,EAAmE;EACxE,GAAG;EAEH,aAAY,MAAW,EAAc,qBAAqB,EAAQ;EACnE,CAAC"}
1
+ {"version":3,"file":"useTwoFactorEnrollment.js","names":[],"sources":["../../../src/synapse-queries/auth/useTwoFactorEnrollment.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n TotpSecret,\n TotpSecretActivationRequest,\n TwoFactorAuthDisableRequest,\n TwoFactorAuthResetRequest,\n TwoFactorAuthStatus,\n} from '@sage-bionetworks/synapse-types'\nimport {\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\nimport { getAllActionsRequiredQueryFilters } from '../QueryFilterUtils'\nimport { KeyFactory } from '../KeyFactory'\nimport { useMemo } from 'react'\n\nexport function useStartTwoFactorEnrollment(\n options?: Partial<UseMutationOptions<TotpSecret, SynapseClientError>>,\n) {\n const { accessToken } = useSynapseContext()\n return useMutation({\n ...options,\n mutationFn: () => SynapseClient.start2FAEnrollment(accessToken),\n })\n}\n\nexport function useFinishTwoFactorEnrollment(\n options?: UseMutationOptions<\n TwoFactorAuthStatus,\n SynapseClientError,\n TotpSecretActivationRequest\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation<\n TwoFactorAuthStatus,\n SynapseClientError,\n TotpSecretActivationRequest\n >({\n ...options,\n onSuccess: async (...args) => {\n if (options?.onSuccess) {\n options.onSuccess(...args)\n }\n await Promise.all([\n queryClient.invalidateQueries({\n queryKey: keyFactory.getTwoFactorAuthStatusQueryKey(),\n }),\n // Changing 2FA status may impact access requirement status\n queryClient.invalidateQueries({\n queryKey: keyFactory.getAllAccessRequirementStatusesQueryKey(),\n }),\n // ...and any change to access requirement eligibility will impact actions required\n ...getAllActionsRequiredQueryFilters(keyFactory).map(filter =>\n queryClient.invalidateQueries(filter),\n ),\n ])\n },\n mutationFn: request =>\n SynapseClient.complete2FAEnrollment(request, accessToken),\n })\n}\n\nexport function useDisableTwoFactorAuth(\n options?: Partial<UseMutationOptions<void, SynapseClientError, void>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation<void, SynapseClientError, void>({\n ...options,\n onSuccess: async (...args) => {\n if (options?.onSuccess) {\n options.onSuccess(...args)\n }\n return Promise.all([\n queryClient.invalidateQueries({\n queryKey: keyFactory.getTwoFactorAuthStatusQueryKey(),\n }),\n // Changing 2FA status may impact access requirement status\n queryClient.invalidateQueries({\n queryKey: keyFactory.getAllAccessRequirementStatusesQueryKey(),\n }),\n // ...and any change to access requirement eligibility will impact actions required\n ...getAllActionsRequiredQueryFilters(keyFactory).map(filter =>\n queryClient.invalidateQueries(filter),\n ),\n ])\n },\n mutationFn: () =>\n SynapseClient.disableTwoFactorAuthForCurrentUser(accessToken),\n })\n}\n\nexport function useGetTwoFactorEnrollmentStatus(\n options?: Partial<UseQueryOptions<TwoFactorAuthStatus, SynapseClientError>>,\n) {\n const { accessToken } = useSynapseContext()\n return useGetTwoFactorEnrollmentStatusWithAccessToken(accessToken, options)\n}\n\nexport function useGetTwoFactorEnrollmentStatusWithAccessToken(\n accessToken?: string, //usually we can fetch the access token from the context, but this hook is used by ApplicationSessionManager which sets the access token in the context (ApplicationSessionContextProvider)!\n options?: Partial<UseQueryOptions<TwoFactorAuthStatus, SynapseClientError>>,\n) {\n const queryKeyFactory = useMemo(\n () => new KeyFactory(accessToken),\n [accessToken],\n )\n return useQuery({\n queryKey: queryKeyFactory.getTwoFactorAuthStatusQueryKey(),\n queryFn: () =>\n SynapseClient.getCurrentUserTwoFactorEnrollmentStatus(accessToken),\n ...options,\n })\n}\n\nexport function useResetTwoFactorAuth(\n options?: Partial<\n UseMutationOptions<void, SynapseClientError, TwoFactorAuthResetRequest>\n >,\n) {\n return useMutation<void, SynapseClientError, TwoFactorAuthResetRequest>({\n ...options,\n mutationFn: request => SynapseClient.resetTwoFactorAuth(request),\n })\n}\n\nexport function useDisableTwoFactorAuthWithResetToken(\n options?: Partial<\n UseMutationOptions<void, SynapseClientError, TwoFactorAuthDisableRequest>\n >,\n) {\n return useMutation<void, SynapseClientError, TwoFactorAuthDisableRequest>({\n ...options,\n // Invalidating query data isn't needed, since the user is not authenticated in this case\n mutationFn: request => SynapseClient.disableTwoFactorAuth(request),\n })\n}\n"],"mappings":";;;;;;;AAqBA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,mBAAgB,GAAmB;AAC3C,QAAO,EAAY;EACjB,GAAG;EACH,kBAAkB,EAAc,mBAAmB,EAAY;EAChE,CAAC;;AAGJ,SAAgB,EACd,GAKA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB,EACjD,IAAc,GAAgB;AACpC,QAAO,EAIL;EACA,GAAG;EACH,WAAW,OAAO,GAAG,MAAS;AAI5B,GAHI,GAAS,aACX,EAAQ,UAAU,GAAG,EAAK,EAE5B,MAAM,QAAQ,IAAI;IAChB,EAAY,kBAAkB,EAC5B,UAAU,EAAW,gCAAgC,EACtD,CAAC;IAEF,EAAY,kBAAkB,EAC5B,UAAU,EAAW,yCAAyC,EAC/D,CAAC;IAEF,GAAG,EAAkC,EAAW,CAAC,KAAI,MACnD,EAAY,kBAAkB,EAAO,CACtC;IACF,CAAC;;EAEJ,aAAY,MACV,EAAc,sBAAsB,GAAS,EAAY;EAC5D,CAAC;;AAGJ,SAAgB,EACd,GACA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB,EACjD,IAAc,GAAgB;AACpC,QAAO,EAA4C;EACjD,GAAG;EACH,WAAW,OAAO,GAAG,OACf,GAAS,aACX,EAAQ,UAAU,GAAG,EAAK,EAErB,QAAQ,IAAI;GACjB,EAAY,kBAAkB,EAC5B,UAAU,EAAW,gCAAgC,EACtD,CAAC;GAEF,EAAY,kBAAkB,EAC5B,UAAU,EAAW,yCAAyC,EAC/D,CAAC;GAEF,GAAG,EAAkC,EAAW,CAAC,KAAI,MACnD,EAAY,kBAAkB,EAAO,CACtC;GACF,CAAC;EAEJ,kBACE,EAAc,mCAAmC,EAAY;EAChE,CAAC;;AAGJ,SAAgB,EACd,GACA;CACA,IAAM,EAAE,mBAAgB,GAAmB;AAC3C,QAAO,EAA+C,GAAa,EAAQ;;AAG7E,SAAgB,EACd,GACA,GACA;AAKA,QAAO,EAAS;EACd,UALsB,QAChB,IAAI,EAAW,EAAY,EACjC,CAAC,EAAY,CAGH,CAAgB,gCAAgC;EAC1D,eACE,EAAc,wCAAwC,EAAY;EACpE,GAAG;EACJ,CAAC;;AAGJ,SAAgB,EACd,GAGA;AACA,QAAO,EAAiE;EACtE,GAAG;EACH,aAAY,MAAW,EAAc,mBAAmB,EAAQ;EACjE,CAAC;;AAGJ,SAAgB,EACd,GAGA;AACA,QAAO,EAAmE;EACxE,GAAG;EAEH,aAAY,MAAW,EAAc,qBAAqB,EAAQ;EACnE,CAAC"}
@@ -4,5 +4,5 @@ export declare function useGetCurationTask<TData = CurationTask>(taskId: number,
4
4
  export declare function useGetCurationTaskStatus<TData = TaskStatus>(taskId: number, options?: Partial<UseQueryOptions<TaskStatus, SynapseClientError, TData>>): import("@tanstack/react-query").UseQueryResult<import("@tanstack/query-core").NoInfer<TData>, SynapseClientError>;
5
5
  export declare function useUpdateCurationTask(options?: Partial<UseMutationOptions<CurationTask, SynapseClientError, CurationTask>>): import("@tanstack/react-query").UseMutationResult<CurationTask, SynapseClientError, CurationTask, unknown>;
6
6
  export declare function useUpdateCurationTaskStatus(options?: Partial<UseMutationOptions<TaskStatus, SynapseClientError, TaskStatus>>): import("@tanstack/react-query").UseMutationResult<TaskStatus, SynapseClientError, TaskStatus, unknown>;
7
- export declare function useGetCurationTasksByProjectInfinite<TData = InfiniteData<ListCurationTaskResponse>>(request: ListCurationTaskRequest, options?: Partial<UseInfiniteQueryOptions<ListCurationTaskResponse, SynapseClientError, TData, QueryKey, ListCurationTaskResponse['nextPageToken']>>): import("@tanstack/react-query").UseInfiniteQueryResult<TData, SynapseClientError>;
7
+ export declare function useGetCurationTasksInfinite<TData = InfiniteData<ListCurationTaskResponse>>(request: ListCurationTaskRequest, options?: Partial<UseInfiniteQueryOptions<ListCurationTaskResponse, SynapseClientError, TData, QueryKey, ListCurationTaskResponse['nextPageToken']>>): import("@tanstack/react-query").UseInfiniteQueryResult<TData, SynapseClientError>;
8
8
  //# sourceMappingURL=useCurationTask.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCurationTask.d.ts","sourceRoot":"","sources":["../../../../src/synapse-queries/curation/task/useCurationTask.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,EACX,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,YAAY,EACZ,QAAQ,EAER,uBAAuB,EAEvB,kBAAkB,EAGlB,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAE9B,wBAAgB,kBAAkB,CAAC,KAAK,GAAG,YAAY,EACrD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,YAAY,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,qHAY5E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,GAAG,UAAU,EACzD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,qHAW1E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,OAAO,CACf,kBAAkB,CAAC,YAAY,EAAE,kBAAkB,EAAE,YAAY,CAAC,CACnE,8GAwBF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,CAAC,EAAE,OAAO,CACf,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAC/D,0GAqBF;AAED,wBAAgB,oCAAoC,CAClD,KAAK,GAAG,YAAY,CAAC,wBAAwB,CAAC,EAE9C,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,OAAO,CACf,uBAAuB,CACrB,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,EACL,QAAQ,EACR,wBAAwB,CAAC,eAAe,CAAC,CAC1C,CACF,qFAuBF"}
1
+ {"version":3,"file":"useCurationTask.d.ts","sourceRoot":"","sources":["../../../../src/synapse-queries/curation/task/useCurationTask.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,EACX,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,YAAY,EACZ,QAAQ,EAER,uBAAuB,EAEvB,kBAAkB,EAGlB,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAE9B,wBAAgB,kBAAkB,CAAC,KAAK,GAAG,YAAY,EACrD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,YAAY,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,qHAY5E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,GAAG,UAAU,EACzD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,qHAW1E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,OAAO,CACf,kBAAkB,CAAC,YAAY,EAAE,kBAAkB,EAAE,YAAY,CAAC,CACnE,8GAwBF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,CAAC,EAAE,OAAO,CACf,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAC/D,0GAqBF;AAED,wBAAgB,2BAA2B,CACzC,KAAK,GAAG,YAAY,CAAC,wBAAwB,CAAC,EAE9C,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,OAAO,CACf,uBAAuB,CACrB,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,EACL,QAAQ,EACR,wBAAwB,CAAC,eAAe,CAAC,CAC1C,CACF,qFAuBF"}
@@ -58,6 +58,6 @@ function l(n, r) {
58
58
  });
59
59
  }
60
60
  //#endregion
61
- export { a as useGetCurationTask, o as useGetCurationTaskStatus, l as useGetCurationTasksByProjectInfinite, s as useUpdateCurationTask, c as useUpdateCurationTaskStatus };
61
+ export { a as useGetCurationTask, o as useGetCurationTaskStatus, l as useGetCurationTasksInfinite, s as useUpdateCurationTask, c as useUpdateCurationTaskStatus };
62
62
 
63
63
  //# sourceMappingURL=useCurationTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCurationTask.js","names":[],"sources":["../../../../src/synapse-queries/curation/task/useCurationTask.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils/index'\nimport {\n CurationTask,\n ListCurationTaskRequest,\n ListCurationTaskResponse,\n SynapseClientError,\n TaskStatus,\n} from '@sage-bionetworks/synapse-client'\nimport {\n InfiniteData,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetCurationTask<TData = CurationTask>(\n taskId: number,\n options?: Partial<UseQueryOptions<CurationTask, SynapseClientError, TData>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getCurationTaskIdTaskKey(taskId),\n queryFn: async () => {\n return synapseClient.curationTaskServicesClient.getRepoV1CurationTaskTaskId(\n { taskId },\n )\n },\n })\n}\n\nexport function useGetCurationTaskStatus<TData = TaskStatus>(\n taskId: number,\n options?: Partial<UseQueryOptions<TaskStatus, SynapseClientError, TData>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getCurationTaskIdStatusKey(taskId),\n queryFn: () =>\n synapseClient.curationTaskServicesClient.getRepoV1CurationTaskTaskIdStatus(\n { taskId },\n ),\n })\n}\n\nexport function useUpdateCurationTask(\n options?: Partial<\n UseMutationOptions<CurationTask, SynapseClientError, CurationTask>\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: curationTask =>\n synapseClient.curationTaskServicesClient.putRepoV1CurationTaskTaskId({\n taskId: curationTask.taskId!,\n curationTask,\n }),\n onSuccess: (data, variables, context) => {\n // Invalidate both the status query and the task query using the ID key\n queryClient.invalidateQueries({\n queryKey: keyFactory.getCurationTaskIdKey(variables.taskId!),\n })\n queryClient.invalidateQueries({\n queryKey: keyFactory.getAllCurationTaskListKey(),\n })\n if (options?.onSuccess) {\n options.onSuccess(data, variables, context)\n }\n },\n })\n}\n\nexport function useUpdateCurationTaskStatus(\n options?: Partial<\n UseMutationOptions<TaskStatus, SynapseClientError, TaskStatus>\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: taskStatus =>\n synapseClient.curationTaskServicesClient.putRepoV1CurationTaskTaskIdStatus(\n { taskId: taskStatus.taskId!, taskStatus },\n ),\n onSuccess: (data, variables, context) => {\n // Invalidate both the status query and the task query using the ID key\n queryClient.invalidateQueries({\n queryKey: keyFactory.getCurationTaskIdKey(variables.taskId!),\n })\n\n if (options?.onSuccess) {\n options.onSuccess(data, variables, context)\n }\n },\n })\n}\n\nexport function useGetCurationTasksByProjectInfinite<\n TData = InfiniteData<ListCurationTaskResponse>,\n>(\n request: ListCurationTaskRequest,\n options?: Partial<\n UseInfiniteQueryOptions<\n ListCurationTaskResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ListCurationTaskResponse['nextPageToken']\n >\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n\n return useInfiniteQuery<\n ListCurationTaskResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ListCurationTaskResponse['nextPageToken']\n >({\n ...options,\n queryKey: keyFactory.getCurationTaskListKey(request),\n queryFn: context =>\n synapseClient.curationTaskServicesClient.postRepoV1CurationTaskList({\n listCurationTaskRequest: {\n ...request,\n nextPageToken: context.pageParam,\n },\n }),\n initialPageParam: undefined,\n getNextPageParam: page => page.nextPageToken,\n })\n}\n"],"mappings":";;;;AAoBA,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,yBAAyB,EAAO;EACrD,SAAS,YACA,EAAc,2BAA2B,4BAC9C,EAAE,WAAQ,CACX;EAEJ,CAAC;;AAGJ,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,2BAA2B,EAAO;EACvD,eACE,EAAc,2BAA2B,kCACvC,EAAE,WAAQ,CACX;EACJ,CAAC;;AAGJ,SAAgB,EACd,GAGA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB,EACnD,IAAc,GAAgB;AACpC,QAAO,EAAY;EACjB,GAAG;EACH,aAAY,MACV,EAAc,2BAA2B,4BAA4B;GACnE,QAAQ,EAAa;GACrB;GACD,CAAC;EACJ,YAAY,GAAM,GAAW,MAAY;AAQvC,GANA,EAAY,kBAAkB,EAC5B,UAAU,EAAW,qBAAqB,EAAU,OAAQ,EAC7D,CAAC,EACF,EAAY,kBAAkB,EAC5B,UAAU,EAAW,2BAA2B,EACjD,CAAC,EACE,GAAS,aACX,EAAQ,UAAU,GAAM,GAAW,EAAQ;;EAGhD,CAAC;;AAGJ,SAAgB,EACd,GAGA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB,EACnD,IAAc,GAAgB;AACpC,QAAO,EAAY;EACjB,GAAG;EACH,aAAY,MACV,EAAc,2BAA2B,kCACvC;GAAE,QAAQ,EAAW;GAAS;GAAY,CAC3C;EACH,YAAY,GAAM,GAAW,MAAY;AAMvC,GAJA,EAAY,kBAAkB,EAC5B,UAAU,EAAW,qBAAqB,EAAU,OAAQ,EAC7D,CAAC,EAEE,GAAS,aACX,EAAQ,UAAU,GAAM,GAAW,EAAQ;;EAGhD,CAAC;;AAGJ,SAAgB,EAGd,GACA,GASA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AAEzD,QAAO,EAML;EACA,GAAG;EACH,UAAU,EAAW,uBAAuB,EAAQ;EACpD,UAAS,MACP,EAAc,2BAA2B,2BAA2B,EAClE,yBAAyB;GACvB,GAAG;GACH,eAAe,EAAQ;GACxB,EACF,CAAC;EACJ,kBAAkB,KAAA;EAClB,mBAAkB,MAAQ,EAAK;EAChC,CAAC"}
1
+ {"version":3,"file":"useCurationTask.js","names":[],"sources":["../../../../src/synapse-queries/curation/task/useCurationTask.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils/index'\nimport {\n CurationTask,\n ListCurationTaskRequest,\n ListCurationTaskResponse,\n SynapseClientError,\n TaskStatus,\n} from '@sage-bionetworks/synapse-client'\nimport {\n InfiniteData,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetCurationTask<TData = CurationTask>(\n taskId: number,\n options?: Partial<UseQueryOptions<CurationTask, SynapseClientError, TData>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getCurationTaskIdTaskKey(taskId),\n queryFn: async () => {\n return synapseClient.curationTaskServicesClient.getRepoV1CurationTaskTaskId(\n { taskId },\n )\n },\n })\n}\n\nexport function useGetCurationTaskStatus<TData = TaskStatus>(\n taskId: number,\n options?: Partial<UseQueryOptions<TaskStatus, SynapseClientError, TData>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getCurationTaskIdStatusKey(taskId),\n queryFn: () =>\n synapseClient.curationTaskServicesClient.getRepoV1CurationTaskTaskIdStatus(\n { taskId },\n ),\n })\n}\n\nexport function useUpdateCurationTask(\n options?: Partial<\n UseMutationOptions<CurationTask, SynapseClientError, CurationTask>\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: curationTask =>\n synapseClient.curationTaskServicesClient.putRepoV1CurationTaskTaskId({\n taskId: curationTask.taskId!,\n curationTask,\n }),\n onSuccess: (data, variables, context) => {\n // Invalidate both the status query and the task query using the ID key\n queryClient.invalidateQueries({\n queryKey: keyFactory.getCurationTaskIdKey(variables.taskId!),\n })\n queryClient.invalidateQueries({\n queryKey: keyFactory.getAllCurationTaskListKey(),\n })\n if (options?.onSuccess) {\n options.onSuccess(data, variables, context)\n }\n },\n })\n}\n\nexport function useUpdateCurationTaskStatus(\n options?: Partial<\n UseMutationOptions<TaskStatus, SynapseClientError, TaskStatus>\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: taskStatus =>\n synapseClient.curationTaskServicesClient.putRepoV1CurationTaskTaskIdStatus(\n { taskId: taskStatus.taskId!, taskStatus },\n ),\n onSuccess: (data, variables, context) => {\n // Invalidate both the status query and the task query using the ID key\n queryClient.invalidateQueries({\n queryKey: keyFactory.getCurationTaskIdKey(variables.taskId!),\n })\n\n if (options?.onSuccess) {\n options.onSuccess(data, variables, context)\n }\n },\n })\n}\n\nexport function useGetCurationTasksInfinite<\n TData = InfiniteData<ListCurationTaskResponse>,\n>(\n request: ListCurationTaskRequest,\n options?: Partial<\n UseInfiniteQueryOptions<\n ListCurationTaskResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ListCurationTaskResponse['nextPageToken']\n >\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n\n return useInfiniteQuery<\n ListCurationTaskResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ListCurationTaskResponse['nextPageToken']\n >({\n ...options,\n queryKey: keyFactory.getCurationTaskListKey(request),\n queryFn: context =>\n synapseClient.curationTaskServicesClient.postRepoV1CurationTaskList({\n listCurationTaskRequest: {\n ...request,\n nextPageToken: context.pageParam,\n },\n }),\n initialPageParam: undefined,\n getNextPageParam: page => page.nextPageToken,\n })\n}\n"],"mappings":";;;;AAoBA,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,yBAAyB,EAAO;EACrD,SAAS,YACA,EAAc,2BAA2B,4BAC9C,EAAE,WAAQ,CACX;EAEJ,CAAC;;AAGJ,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,2BAA2B,EAAO;EACvD,eACE,EAAc,2BAA2B,kCACvC,EAAE,WAAQ,CACX;EACJ,CAAC;;AAGJ,SAAgB,EACd,GAGA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB,EACnD,IAAc,GAAgB;AACpC,QAAO,EAAY;EACjB,GAAG;EACH,aAAY,MACV,EAAc,2BAA2B,4BAA4B;GACnE,QAAQ,EAAa;GACrB;GACD,CAAC;EACJ,YAAY,GAAM,GAAW,MAAY;AAQvC,GANA,EAAY,kBAAkB,EAC5B,UAAU,EAAW,qBAAqB,EAAU,OAAQ,EAC7D,CAAC,EACF,EAAY,kBAAkB,EAC5B,UAAU,EAAW,2BAA2B,EACjD,CAAC,EACE,GAAS,aACX,EAAQ,UAAU,GAAM,GAAW,EAAQ;;EAGhD,CAAC;;AAGJ,SAAgB,EACd,GAGA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB,EACnD,IAAc,GAAgB;AACpC,QAAO,EAAY;EACjB,GAAG;EACH,aAAY,MACV,EAAc,2BAA2B,kCACvC;GAAE,QAAQ,EAAW;GAAS;GAAY,CAC3C;EACH,YAAY,GAAM,GAAW,MAAY;AAMvC,GAJA,EAAY,kBAAkB,EAC5B,UAAU,EAAW,qBAAqB,EAAU,OAAQ,EAC7D,CAAC,EAEE,GAAS,aACX,EAAQ,UAAU,GAAM,GAAW,EAAQ;;EAGhD,CAAC;;AAGJ,SAAgB,EAGd,GACA,GASA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AAEzD,QAAO,EAML;EACA,GAAG;EACH,UAAU,EAAW,uBAAuB,EAAQ;EACpD,UAAS,MACP,EAAc,2BAA2B,2BAA2B,EAClE,yBAAyB;GACvB,GAAG;GACH,eAAe,EAAQ;GACxB,EACF,CAAC;EACJ,kBAAkB,KAAA;EAClB,mBAAkB,MAAQ,EAAK;EAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRestrictionInformation.js","names":[],"sources":["../../../src/synapse-queries/dataaccess/useRestrictionInformation.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { SynapseClientError, useSynapseContext } from '@/utils'\nimport {\n RestrictionInformationBatchRequest,\n RestrictionInformationBatchResponse,\n RestrictionInformationRequest,\n RestrictionInformationResponse,\n} from '@sage-bionetworks/synapse-types'\nimport {\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\nimport { chunk } from 'lodash-es'\n\n// The maximum number of items allowed in a single request for restriction information\nconst MAX_RESTRICTION_INFORMATION_BATCH_SIZE = 50\n\nexport function useGetRestrictionInformation(\n request: RestrictionInformationRequest,\n options?: Partial<\n UseQueryOptions<RestrictionInformationResponse, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useQuery({\n ...options,\n queryKey: keyFactory.getRestrictionInformationQueryKey(request),\n queryFn: () =>\n SynapseClient.getRestrictionInformation(request, accessToken),\n })\n}\n\nfunction mergeRestrictionInformationBatchResponses(\n responses: RestrictionInformationBatchResponse[],\n): RestrictionInformationBatchResponse {\n return responses.reduce(\n (prev, curr) => {\n return {\n restrictionInformation: prev.restrictionInformation.concat(\n curr.restrictionInformation,\n ),\n }\n },\n {\n restrictionInformation: [],\n },\n )\n}\n\nexport function useGetRestrictionInformationBatch(\n request: RestrictionInformationBatchRequest,\n options?: Partial<\n UseQueryOptions<RestrictionInformationBatchResponse, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n\n const batchedQueryFn =\n async (): Promise<RestrictionInformationBatchResponse> => {\n // The maximum batch size for this call is 50, so split the query options into chunks based on objectId\n const batchedIds = chunk(\n request.objectIds,\n MAX_RESTRICTION_INFORMATION_BATCH_SIZE,\n )\n\n // Fire each batch of requests\n const requests = batchedIds.map(batchedIds => {\n const batchRequest: RestrictionInformationBatchRequest = {\n ...request,\n objectIds: batchedIds,\n }\n return SynapseClient.getRestrictionInformationBatch(\n batchRequest,\n accessToken,\n )\n })\n\n // Once the requests resolve, merge the results\n const results = await Promise.all(requests)\n const mergedResults = mergeRestrictionInformationBatchResponses(results)\n\n // Fill the QueryClient cache with the individual restriction information objects\n mergedResults.restrictionInformation.forEach(restrictionInformation => {\n queryClient.setQueryData(\n keyFactory.getRestrictionInformationQueryKey({\n objectId: String(restrictionInformation.objectId),\n restrictableObjectType: request.restrictableObjectType,\n }),\n restrictionInformation,\n )\n })\n\n // Return the merged results\n return mergedResults\n }\n\n return useQuery({\n ...options,\n queryKey: keyFactory.getRestrictionInformationBatchQueryKey(request),\n queryFn: batchedQueryFn,\n })\n}\n"],"mappings":";;;;;;AAgBA,IAAM,IAAyC;AAE/C,SAAgB,EACd,GACA,GAGA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB;AAEvD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,kCAAkC,EAAQ;EAC/D,eACE,EAAc,0BAA0B,GAAS,EAAY;EAChE,CAAC;;AAGJ,SAAS,EACP,GACqC;AACrC,QAAO,EAAU,QACd,GAAM,OACE,EACL,wBAAwB,EAAK,uBAAuB,OAClD,EAAK,uBACN,EACF,GAEH,EACE,wBAAwB,EAAE,EAC3B,CACF;;AAGH,SAAgB,EACd,GACA,GAGA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB,EACjD,IAAc,GAAgB,EAE9B,IACJ,YAA0D;EAQxD,IAAM,IANa,EACjB,EAAQ,WACR,EACD,CAG2B,KAAI,MAAc;GAC5C,IAAM,IAAmD;IACvD,GAAG;IACH,WAAW;IACZ;AACD,UAAO,EAAc,+BACnB,GACA,EACD;IACD,EAII,IAAgB,EADN,MAAM,QAAQ,IAAI,EAAS,CAC6B;AAcxE,SAXA,EAAc,uBAAuB,SAAQ,MAA0B;AACrE,KAAY,aACV,EAAW,kCAAkC;IAC3C,UAAU,OAAO,EAAuB,SAAS;IACjD,wBAAwB,EAAQ;IACjC,CAAC,EACF,EACD;IACD,EAGK;;AAGX,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,uCAAuC,EAAQ;EACpE,SAAS;EACV,CAAC"}
1
+ {"version":3,"file":"useRestrictionInformation.js","names":[],"sources":["../../../src/synapse-queries/dataaccess/useRestrictionInformation.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { SynapseClientError, useSynapseContext } from '@/utils'\nimport {\n RestrictionInformationBatchRequest,\n RestrictionInformationBatchResponse,\n RestrictionInformationRequest,\n RestrictionInformationResponse,\n} from '@sage-bionetworks/synapse-types'\nimport {\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\nimport { chunk } from 'lodash-es'\n\n// The maximum number of items allowed in a single request for restriction information\nconst MAX_RESTRICTION_INFORMATION_BATCH_SIZE = 50\n\nexport function useGetRestrictionInformation(\n request: RestrictionInformationRequest,\n options?: Partial<\n UseQueryOptions<RestrictionInformationResponse, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useQuery({\n ...options,\n queryKey: keyFactory.getRestrictionInformationQueryKey(request),\n queryFn: () =>\n SynapseClient.getRestrictionInformation(request, accessToken),\n })\n}\n\nfunction mergeRestrictionInformationBatchResponses(\n responses: RestrictionInformationBatchResponse[],\n): RestrictionInformationBatchResponse {\n return responses.reduce(\n (prev, curr) => {\n return {\n restrictionInformation: prev.restrictionInformation.concat(\n curr.restrictionInformation,\n ),\n }\n },\n {\n restrictionInformation: [],\n },\n )\n}\n\nexport function useGetRestrictionInformationBatch(\n request: RestrictionInformationBatchRequest,\n options?: Partial<\n UseQueryOptions<RestrictionInformationBatchResponse, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n\n const batchedQueryFn =\n async (): Promise<RestrictionInformationBatchResponse> => {\n // The maximum batch size for this call is 50, so split the query options into chunks based on objectId\n const batchedIds = chunk(\n request.objectIds,\n MAX_RESTRICTION_INFORMATION_BATCH_SIZE,\n )\n\n // Fire each batch of requests\n const requests = batchedIds.map(batchedIds => {\n const batchRequest: RestrictionInformationBatchRequest = {\n ...request,\n objectIds: batchedIds,\n }\n return SynapseClient.getRestrictionInformationBatch(\n batchRequest,\n accessToken,\n )\n })\n\n // Once the requests resolve, merge the results\n const results = await Promise.all(requests)\n const mergedResults = mergeRestrictionInformationBatchResponses(results)\n\n // Fill the QueryClient cache with the individual restriction information objects\n mergedResults.restrictionInformation.forEach(restrictionInformation => {\n queryClient.setQueryData(\n keyFactory.getRestrictionInformationQueryKey({\n objectId: String(restrictionInformation.objectId),\n restrictableObjectType: request.restrictableObjectType,\n }),\n restrictionInformation,\n )\n })\n\n // Return the merged results\n return mergedResults\n }\n\n return useQuery({\n ...options,\n queryKey: keyFactory.getRestrictionInformationBatchQueryKey(request),\n queryFn: batchedQueryFn,\n })\n}\n"],"mappings":";;;;;;AAgBA,IAAM,IAAyC;AAE/C,SAAgB,EACd,GACA,GAGA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB;AAEvD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,kCAAkC,EAAQ;EAC/D,eACE,EAAc,0BAA0B,GAAS,EAAY;EAChE,CAAC;;AAGJ,SAAS,EACP,GACqC;AACrC,QAAO,EAAU,QACd,GAAM,OACE,EACL,wBAAwB,EAAK,uBAAuB,OAClD,EAAK,uBACN,EACF,GAEH,EACE,wBAAwB,EAAE,EAC3B,CACF;;AAGH,SAAgB,EACd,GACA,GAGA;CACA,IAAM,EAAE,gBAAa,kBAAe,GAAmB,EACjD,IAAc,GAAgB,EAE9B,IACJ,YAA0D;EAQxD,IAAM,IANa,EACjB,EAAQ,WACR,EAIe,CAAW,KAAI,MAAc;GAC5C,IAAM,IAAmD;IACvD,GAAG;IACH,WAAW;IACZ;AACD,UAAO,EAAc,+BACnB,GACA,EACD;IACD,EAII,IAAgB,EAA0C,MAD1C,QAAQ,IAAI,EAAS,CAC6B;AAcxE,SAXA,EAAc,uBAAuB,SAAQ,MAA0B;AACrE,KAAY,aACV,EAAW,kCAAkC;IAC3C,UAAU,OAAO,EAAuB,SAAS;IACjD,wBAAwB,EAAQ;IACjC,CAAC,EACF,EACD;IACD,EAGK;;AAGX,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,uCAAuC,EAAQ;EACpE,SAAS;EACV,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDOI.js","names":[],"sources":["../../../src/synapse-queries/doi/useDOI.ts"],"sourcesContent":["import { allowNotFoundError } from '@/synapse-client/SynapseClientUtils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n V2Doi as Doi,\n DoiAssociation,\n DoiRequest,\n DoiResponse,\n GetRepoV1DoiRequest,\n waitForAsyncResult,\n GetRepoV1DoiAssociationRequest,\n DoiObjectType,\n} from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetDOIAssociation(\n request: GetRepoV1DoiAssociationRequest,\n options?: Partial<UseQueryOptions<DoiAssociation | null, SynapseClientError>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDOIAssociationQueryKey(request),\n\n queryFn: () =>\n allowNotFoundError(() =>\n synapseClient.doiServicesClient.getRepoV1DoiAssociation(request),\n ),\n })\n}\n\nexport function useGetDOI(\n request: GetRepoV1DoiRequest,\n options?: Partial<UseQueryOptions<Doi | null, SynapseClientError>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDOIQueryKey(request),\n\n queryFn: () =>\n allowNotFoundError(() =>\n synapseClient.doiServicesClient.getRepoV1Doi(request),\n ),\n })\n}\n\n/**\n * Mutation hook to create/update a DOI.\n * @param options\n */\nexport function useCreateOrUpdateDOI(\n options?: Omit<\n UseMutationOptions<DoiResponse, SynapseClientError, DoiRequest>,\n 'mutationFn'\n >,\n) {\n const queryClient = useQueryClient()\n const { synapseClient, keyFactory } = useSynapseContext()\n\n return useMutation<DoiResponse, SynapseClientError, DoiRequest>({\n ...options,\n mutationFn: async request => {\n const asyncJobId =\n await synapseClient.doiServicesClient.postRepoV1DoiAsyncStart({\n doiRequest: request,\n })\n\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId: asyncJobId.token!,\n },\n ),\n )\n return asyncJobResponse.responseBody as DoiResponse\n },\n onSuccess(...args) {\n if (options?.onSuccess) {\n options.onSuccess(...args)\n }\n const requestDoi = args[1].doi\n if (requestDoi) {\n const matchingRequestObject: GetRepoV1DoiAssociationRequest = {\n id: requestDoi.objectId!,\n type: requestDoi.objectType as DoiObjectType,\n portalId: requestDoi.portalId,\n version: requestDoi.objectVersion,\n }\n queryClient.invalidateQueries({\n queryKey: keyFactory.getDOIQueryKey(matchingRequestObject),\n })\n }\n },\n })\n}\n"],"mappings":";;;;;AAqBA,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,0BAA0B,EAAQ;EAEvD,eACE,QACE,EAAc,kBAAkB,wBAAwB,EAAQ,CACjE;EACJ,CAAC;;AAGJ,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,eAAe,EAAQ;EAE5C,eACE,QACE,EAAc,kBAAkB,aAAa,EAAQ,CACtD;EACJ,CAAC;;AAOJ,SAAgB,EACd,GAIA;CACA,IAAM,IAAc,GAAgB,EAC9B,EAAE,kBAAe,kBAAe,GAAmB;AAEzD,QAAO,EAAyD;EAC9D,GAAG;EACH,YAAY,OAAM,MAAW;GAC3B,IAAM,IACJ,MAAM,EAAc,kBAAkB,wBAAwB,EAC5D,YAAY,GACb,CAAC;AASJ,WAPyB,MAAM,QAC7B,EAAc,8BAA8B,8BAC1C,EACE,OAAO,EAAW,OACnB,CACF,CACF,EACuB;;EAE1B,UAAU,GAAG,GAAM;AACjB,GAAI,GAAS,aACX,EAAQ,UAAU,GAAG,EAAK;GAE5B,IAAM,IAAa,EAAK,GAAG;AAC3B,OAAI,GAAY;IACd,IAAM,IAAwD;KAC5D,IAAI,EAAW;KACf,MAAM,EAAW;KACjB,UAAU,EAAW;KACrB,SAAS,EAAW;KACrB;AACD,MAAY,kBAAkB,EAC5B,UAAU,EAAW,eAAe,EAAsB,EAC3D,CAAC;;;EAGP,CAAC"}
1
+ {"version":3,"file":"useDOI.js","names":[],"sources":["../../../src/synapse-queries/doi/useDOI.ts"],"sourcesContent":["import { allowNotFoundError } from '@/synapse-client/SynapseClientUtils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n V2Doi as Doi,\n DoiAssociation,\n DoiRequest,\n DoiResponse,\n GetRepoV1DoiRequest,\n waitForAsyncResult,\n GetRepoV1DoiAssociationRequest,\n DoiObjectType,\n} from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetDOIAssociation(\n request: GetRepoV1DoiAssociationRequest,\n options?: Partial<UseQueryOptions<DoiAssociation | null, SynapseClientError>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDOIAssociationQueryKey(request),\n\n queryFn: () =>\n allowNotFoundError(() =>\n synapseClient.doiServicesClient.getRepoV1DoiAssociation(request),\n ),\n })\n}\n\nexport function useGetDOI(\n request: GetRepoV1DoiRequest,\n options?: Partial<UseQueryOptions<Doi | null, SynapseClientError>>,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDOIQueryKey(request),\n\n queryFn: () =>\n allowNotFoundError(() =>\n synapseClient.doiServicesClient.getRepoV1Doi(request),\n ),\n })\n}\n\n/**\n * Mutation hook to create/update a DOI.\n * @param options\n */\nexport function useCreateOrUpdateDOI(\n options?: Omit<\n UseMutationOptions<DoiResponse, SynapseClientError, DoiRequest>,\n 'mutationFn'\n >,\n) {\n const queryClient = useQueryClient()\n const { synapseClient, keyFactory } = useSynapseContext()\n\n return useMutation<DoiResponse, SynapseClientError, DoiRequest>({\n ...options,\n mutationFn: async request => {\n const asyncJobId =\n await synapseClient.doiServicesClient.postRepoV1DoiAsyncStart({\n doiRequest: request,\n })\n\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId: asyncJobId.token!,\n },\n ),\n )\n return asyncJobResponse.responseBody as DoiResponse\n },\n onSuccess(...args) {\n if (options?.onSuccess) {\n options.onSuccess(...args)\n }\n const requestDoi = args[1].doi\n if (requestDoi) {\n const matchingRequestObject: GetRepoV1DoiAssociationRequest = {\n id: requestDoi.objectId!,\n type: requestDoi.objectType as DoiObjectType,\n portalId: requestDoi.portalId,\n version: requestDoi.objectVersion,\n }\n queryClient.invalidateQueries({\n queryKey: keyFactory.getDOIQueryKey(matchingRequestObject),\n })\n }\n },\n })\n}\n"],"mappings":";;;;;AAqBA,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,0BAA0B,EAAQ;EAEvD,eACE,QACE,EAAc,kBAAkB,wBAAwB,EAAQ,CACjE;EACJ,CAAC;;AAGJ,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,kBAAe,GAAmB;AACzD,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,eAAe,EAAQ;EAE5C,eACE,QACE,EAAc,kBAAkB,aAAa,EAAQ,CACtD;EACJ,CAAC;;AAOJ,SAAgB,EACd,GAIA;CACA,IAAM,IAAc,GAAgB,EAC9B,EAAE,kBAAe,kBAAe,GAAmB;AAEzD,QAAO,EAAyD;EAC9D,GAAG;EACH,YAAY,OAAM,MAAW;GAC3B,IAAM,IACJ,MAAM,EAAc,kBAAkB,wBAAwB,EAC5D,YAAY,GACb,CAAC;AASJ,WAAO,MAPwB,QAC7B,EAAc,8BAA8B,8BAC1C,EACE,OAAO,EAAW,OACnB,CACF,CACF,EACuB;;EAE1B,UAAU,GAAG,GAAM;AACjB,GAAI,GAAS,aACX,EAAQ,UAAU,GAAG,EAAK;GAE5B,IAAM,IAAa,EAAK,GAAG;AAC3B,OAAI,GAAY;IACd,IAAM,IAAwD;KAC5D,IAAI,EAAW;KACf,MAAM,EAAW;KACjB,UAAU,EAAW;KACrB,SAAS,EAAW;KACrB;AACD,MAAY,kBAAkB,EAC5B,UAAU,EAAW,eAAe,EAAsB,EAC3D,CAAC;;;EAGP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDownloadList.js","names":[],"sources":["../../../src/synapse-queries/download/useDownloadList.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n AddToDownloadListRequest,\n AddToDownloadListResponse,\n AddToDownloadListStatsRequest,\n AddToDownloadListStatsResponse,\n waitForAsyncResult,\n} from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n ActionRequiredCount,\n ActionRequiredRequest,\n ActionRequiredResponse,\n AddBatchOfFilesToDownloadListResponse,\n AvailableFilesRequest,\n AvailableFilesResponse,\n AvailableFilter,\n FilesStatisticsResponse,\n RemoveBatchOfFilesFromDownloadListRequest,\n RemoveBatchOfFilesFromDownloadListResponse,\n Sort,\n} from '@sage-bionetworks/synapse-types'\nimport {\n InfiniteData,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetAvailableFilesToDownload(\n request: AvailableFilesRequest,\n options?: UseQueryOptions<AvailableFilesResponse, SynapseClientError>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDownloadListAvailableFilesQueryKey(request),\n queryFn: () =>\n SynapseClient.getAvailableFilesToDownload(request, accessToken),\n })\n}\n\nexport function useGetAvailableFilesToDownloadInfinite<\n TData = InfiniteData<AvailableFilesResponse>,\n>(\n sort?: Sort,\n filter?: AvailableFilter,\n options?: Partial<\n UseInfiniteQueryOptions<\n AvailableFilesResponse,\n SynapseClientError,\n TData,\n QueryKey,\n AvailableFilesResponse['nextPageToken']\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const request: AvailableFilesRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.download.AvailableFilesRequest',\n }\n if (sort) {\n request.sort = [sort]\n }\n if (filter) {\n request.filter = filter\n }\n return useInfiniteQuery<\n AvailableFilesResponse,\n SynapseClientError,\n TData,\n QueryKey,\n AvailableFilesResponse['nextPageToken']\n >({\n ...options,\n queryKey: keyFactory.getDownloadListAvailableFilesInfiniteQueryKey(request),\n queryFn: async context => {\n return SynapseClient.getAvailableFilesToDownload(\n { ...request, nextPageToken: context.pageParam },\n accessToken,\n )\n },\n initialPageParam: undefined,\n getNextPageParam: page => page.nextPageToken,\n })\n}\n\nexport function useGetAllDownloadListActionsRequired(\n options?: Partial<UseQueryOptions<ActionRequiredCount[], SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const request: ActionRequiredRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.download.ActionRequiredRequest',\n }\n\n return useQuery({\n ...options,\n queryKey: keyFactory.getDownloadListActionsRequiredQueryKey(),\n queryFn: () =>\n SynapseClient.getAllDownloadListActionsRequired(request, accessToken),\n })\n}\n\nexport function useGetDownloadListActionsRequiredInfinite<\n TData = InfiniteData<ActionRequiredResponse>,\n>(\n options?: Partial<\n UseInfiniteQueryOptions<\n ActionRequiredResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ActionRequiredResponse['nextPageToken']\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const request: ActionRequiredRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.download.ActionRequiredRequest',\n }\n return useInfiniteQuery<\n ActionRequiredResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ActionRequiredResponse['nextPageToken']\n >({\n ...options,\n queryKey: keyFactory.getDownloadListActionsRequiredInfiniteQueryKey(),\n queryFn: async context => {\n return await SynapseClient.getDownloadListActionsRequired(\n { ...request, nextPageToken: context.pageParam },\n accessToken,\n )\n },\n initialPageParam: undefined,\n getNextPageParam: page => page.nextPageToken,\n })\n}\n\nexport function useGetDownloadListStatistics(\n options?: Partial<\n UseQueryOptions<FilesStatisticsResponse, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDownloadListStatisticsQueryKey(),\n queryFn: () => SynapseClient.getDownloadListStatistics(accessToken),\n })\n}\n\nexport function useAddFileToDownloadList(\n options?: Partial<\n UseMutationOptions<\n AddBatchOfFilesToDownloadListResponse,\n SynapseClientError,\n {\n entityId: string\n entityVersionNumber: number | undefined\n }\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: (vars: {\n entityId: string\n entityVersionNumber: number | undefined\n }) =>\n SynapseClient.addFileToDownloadListV2(\n vars.entityId,\n vars.entityVersionNumber,\n accessToken,\n ),\n mutationKey: ['addFileToDownloadList'],\n onSuccess: async (data, variables, ctx) => {\n // PORTALS-2222: Invalidate to load the accurate results\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useAddFileBatchToDownloadList(\n options?: Partial<\n UseMutationOptions<\n AddBatchOfFilesToDownloadListResponse,\n SynapseClientError,\n {\n fileEntityId: string\n versionNumber?: number\n }[]\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: batchToAdd =>\n SynapseClient.addFileBatchToDownloadListV2(batchToAdd, accessToken),\n mutationKey: ['addFileBatchToDownloadList'],\n onSuccess: async (data, variables, ctx) => {\n // PORTALS-2222: Invalidate to load the accurate results\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useAddToDownloadList(\n options?: Partial<\n UseMutationOptions<\n AddToDownloadListResponse,\n SynapseClientError,\n AddToDownloadListRequest\n >\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: async addToDownloadListRequest => {\n const jobId = (\n await synapseClient.downloadListServicesClient.postRepoV1DownloadListAddAsyncStart(\n {\n addToDownloadListRequest,\n },\n )\n ).token!\n\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId,\n },\n ),\n )\n return asyncJobResponse.responseBody as AddToDownloadListResponse\n },\n mutationKey: ['addQueryToDownloadList'],\n onSuccess: async (data, variables, ctx) => {\n // Invalidate all download list queries\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useRemoveFilesFromDownloadList(\n options?: Partial<\n UseMutationOptions<\n RemoveBatchOfFilesFromDownloadListResponse,\n SynapseClientError,\n RemoveBatchOfFilesFromDownloadListRequest\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: request =>\n SynapseClient.removeItemsFromDownloadListV2(request, accessToken),\n onSuccess: async (data, variables, ctx) => {\n // PORTALS-2222: Invalidate to load the accurate results\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useGetAddToDownloadListStats(\n addToDownloadListStatsRequest: AddToDownloadListStatsRequest,\n options?: { enabled?: boolean },\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n queryKey: keyFactory.getAddToDownloadListStatsQueryKey(\n addToDownloadListStatsRequest,\n ),\n queryFn: async () => {\n const jobId = (\n await synapseClient.downloadListServicesClient.postRepoV1DownloadListAddStatsAsyncStart(\n { addToDownloadListStatsRequest },\n )\n ).token!\n\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n { jobId },\n ),\n )\n return asyncJobResponse.responseBody as AddToDownloadListStatsResponse\n },\n enabled: options?.enabled,\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useDownloadList.js","names":[],"sources":["../../../src/synapse-queries/download/useDownloadList.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n AddToDownloadListRequest,\n AddToDownloadListResponse,\n AddToDownloadListStatsRequest,\n AddToDownloadListStatsResponse,\n waitForAsyncResult,\n} from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n ActionRequiredCount,\n ActionRequiredRequest,\n ActionRequiredResponse,\n AddBatchOfFilesToDownloadListResponse,\n AvailableFilesRequest,\n AvailableFilesResponse,\n AvailableFilter,\n FilesStatisticsResponse,\n RemoveBatchOfFilesFromDownloadListRequest,\n RemoveBatchOfFilesFromDownloadListResponse,\n Sort,\n} from '@sage-bionetworks/synapse-types'\nimport {\n InfiniteData,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useMutation,\n UseMutationOptions,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetAvailableFilesToDownload(\n request: AvailableFilesRequest,\n options?: UseQueryOptions<AvailableFilesResponse, SynapseClientError>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDownloadListAvailableFilesQueryKey(request),\n queryFn: () =>\n SynapseClient.getAvailableFilesToDownload(request, accessToken),\n })\n}\n\nexport function useGetAvailableFilesToDownloadInfinite<\n TData = InfiniteData<AvailableFilesResponse>,\n>(\n sort?: Sort,\n filter?: AvailableFilter,\n options?: Partial<\n UseInfiniteQueryOptions<\n AvailableFilesResponse,\n SynapseClientError,\n TData,\n QueryKey,\n AvailableFilesResponse['nextPageToken']\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const request: AvailableFilesRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.download.AvailableFilesRequest',\n }\n if (sort) {\n request.sort = [sort]\n }\n if (filter) {\n request.filter = filter\n }\n return useInfiniteQuery<\n AvailableFilesResponse,\n SynapseClientError,\n TData,\n QueryKey,\n AvailableFilesResponse['nextPageToken']\n >({\n ...options,\n queryKey: keyFactory.getDownloadListAvailableFilesInfiniteQueryKey(request),\n queryFn: async context => {\n return SynapseClient.getAvailableFilesToDownload(\n { ...request, nextPageToken: context.pageParam },\n accessToken,\n )\n },\n initialPageParam: undefined,\n getNextPageParam: page => page.nextPageToken,\n })\n}\n\nexport function useGetAllDownloadListActionsRequired(\n options?: Partial<UseQueryOptions<ActionRequiredCount[], SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const request: ActionRequiredRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.download.ActionRequiredRequest',\n }\n\n return useQuery({\n ...options,\n queryKey: keyFactory.getDownloadListActionsRequiredQueryKey(),\n queryFn: () =>\n SynapseClient.getAllDownloadListActionsRequired(request, accessToken),\n })\n}\n\nexport function useGetDownloadListActionsRequiredInfinite<\n TData = InfiniteData<ActionRequiredResponse>,\n>(\n options?: Partial<\n UseInfiniteQueryOptions<\n ActionRequiredResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ActionRequiredResponse['nextPageToken']\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const request: ActionRequiredRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.download.ActionRequiredRequest',\n }\n return useInfiniteQuery<\n ActionRequiredResponse,\n SynapseClientError,\n TData,\n QueryKey,\n ActionRequiredResponse['nextPageToken']\n >({\n ...options,\n queryKey: keyFactory.getDownloadListActionsRequiredInfiniteQueryKey(),\n queryFn: async context => {\n return await SynapseClient.getDownloadListActionsRequired(\n { ...request, nextPageToken: context.pageParam },\n accessToken,\n )\n },\n initialPageParam: undefined,\n getNextPageParam: page => page.nextPageToken,\n })\n}\n\nexport function useGetDownloadListStatistics(\n options?: Partial<\n UseQueryOptions<FilesStatisticsResponse, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getDownloadListStatisticsQueryKey(),\n queryFn: () => SynapseClient.getDownloadListStatistics(accessToken),\n })\n}\n\nexport function useAddFileToDownloadList(\n options?: Partial<\n UseMutationOptions<\n AddBatchOfFilesToDownloadListResponse,\n SynapseClientError,\n {\n entityId: string\n entityVersionNumber: number | undefined\n }\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: (vars: {\n entityId: string\n entityVersionNumber: number | undefined\n }) =>\n SynapseClient.addFileToDownloadListV2(\n vars.entityId,\n vars.entityVersionNumber,\n accessToken,\n ),\n mutationKey: ['addFileToDownloadList'],\n onSuccess: async (data, variables, ctx) => {\n // PORTALS-2222: Invalidate to load the accurate results\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useAddFileBatchToDownloadList(\n options?: Partial<\n UseMutationOptions<\n AddBatchOfFilesToDownloadListResponse,\n SynapseClientError,\n {\n fileEntityId: string\n versionNumber?: number\n }[]\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: batchToAdd =>\n SynapseClient.addFileBatchToDownloadListV2(batchToAdd, accessToken),\n mutationKey: ['addFileBatchToDownloadList'],\n onSuccess: async (data, variables, ctx) => {\n // PORTALS-2222: Invalidate to load the accurate results\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useAddToDownloadList(\n options?: Partial<\n UseMutationOptions<\n AddToDownloadListResponse,\n SynapseClientError,\n AddToDownloadListRequest\n >\n >,\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: async addToDownloadListRequest => {\n const jobId = (\n await synapseClient.downloadListServicesClient.postRepoV1DownloadListAddAsyncStart(\n {\n addToDownloadListRequest,\n },\n )\n ).token!\n\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId,\n },\n ),\n )\n return asyncJobResponse.responseBody as AddToDownloadListResponse\n },\n mutationKey: ['addQueryToDownloadList'],\n onSuccess: async (data, variables, ctx) => {\n // Invalidate all download list queries\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useRemoveFilesFromDownloadList(\n options?: Partial<\n UseMutationOptions<\n RemoveBatchOfFilesFromDownloadListResponse,\n SynapseClientError,\n RemoveBatchOfFilesFromDownloadListRequest\n >\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n return useMutation({\n ...options,\n mutationFn: request =>\n SynapseClient.removeItemsFromDownloadListV2(request, accessToken),\n onSuccess: async (data, variables, ctx) => {\n // PORTALS-2222: Invalidate to load the accurate results\n await queryClient.invalidateQueries({\n queryKey: keyFactory.getDownloadListBaseQueryKey(),\n })\n if (options?.onSuccess) {\n return options.onSuccess(data, variables, ctx)\n }\n return\n },\n })\n}\n\nexport function useGetAddToDownloadListStats(\n addToDownloadListStatsRequest: AddToDownloadListStatsRequest,\n options?: { enabled?: boolean },\n) {\n const { synapseClient, keyFactory } = useSynapseContext()\n return useQuery({\n queryKey: keyFactory.getAddToDownloadListStatsQueryKey(\n addToDownloadListStatsRequest,\n ),\n queryFn: async () => {\n const jobId = (\n await synapseClient.downloadListServicesClient.postRepoV1DownloadListAddStatsAsyncStart(\n { addToDownloadListStatsRequest },\n )\n ).token!\n\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n { jobId },\n ),\n )\n return asyncJobResponse.responseBody as AddToDownloadListStatsResponse\n },\n enabled: options?.enabled,\n })\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntity.js","names":[],"sources":["../../../src/synapse-queries/entity/useEntity.ts"],"sourcesContent":["/*\n * Hooks to access Entity Services in Synapse\n */\n\nimport SynapseClient from '@/synapse-client'\nimport { allowNotFoundError } from '@/synapse-client/SynapseClientUtils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { entityJsonKeys } from '@/utils/functions/EntityTypeUtils'\nimport { createTableUpdateTransactionRequest } from '@/utils/functions/TableColumnSchemaUtils'\nimport {\n EntityLookupRequest,\n SynapseClientError,\n} from '@sage-bionetworks/synapse-client'\nimport {\n AccessControlList,\n ColumnModel,\n Entity,\n EntityBundle,\n EntityHeader,\n EntityId,\n EntityJson,\n EntityPath,\n Evaluation,\n GetEvaluationParameters,\n PaginatedResults,\n UserEntityPermissions,\n VersionInfo,\n} from '@sage-bionetworks/synapse-types'\nimport {\n InfiniteData,\n QueryClient,\n QueryKey,\n queryOptions,\n skipToken,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useMutation,\n UseMutationOptions,\n useQueries,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n useSuspenseQuery,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\nimport { omit, pick } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { SetOptional } from 'type-fest'\nimport { getNextPageParamForPaginatedResults } from '../InfiniteQueryUtils'\nimport { KeyFactory } from '../KeyFactory'\nimport { invalidateAllQueriesForEntity } from '../QueryFilterUtils'\nimport { useGetEntityBundleSuspenseQueryOptions } from './useEntityBundle'\n\nexport function useGetEntityQueryOptions<T extends Entity>() {\n const { keyFactory, accessToken } = useSynapseContext()\n return (\n entityId?: string,\n versionNumber?: string | number,\n ): UseQueryOptions<T, SynapseClientError> =>\n queryOptions<T, SynapseClientError>({\n queryKey: keyFactory.getEntityVersionQueryKey(entityId, versionNumber),\n queryFn: entityId\n ? () =>\n SynapseClient.getEntity<T>(\n accessToken,\n entityId,\n versionNumber?.toString(),\n )\n : skipToken,\n })\n}\n\nexport function useGetEntity<T extends Entity>(\n entityId?: string,\n versionNumber?: string | number,\n options?: Partial<UseQueryOptions<T, SynapseClientError>>,\n) {\n const getEntityQueryOptions = useGetEntityQueryOptions<T>()\n return useQuery({\n ...options,\n ...getEntityQueryOptions(entityId, versionNumber),\n })\n}\n\nexport function useGetEntities(\n entityHeaders: Pick<EntityHeader, 'id' | 'versionNumber'>[],\n options?: Partial<UseQueryOptions<Entity[], SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queries = useMemo(\n () => ({\n queries: entityHeaders.map(header => {\n return {\n queryKey: keyFactory.getEntityVersionQueryKey(\n header.id,\n header.versionNumber,\n ),\n queryFn: () =>\n SynapseClient.getEntity(\n accessToken,\n header.id,\n header.versionNumber,\n ),\n options,\n }\n }),\n }),\n [accessToken, entityHeaders, keyFactory, options],\n )\n return useQueries(queries)\n}\n\nexport function useCreateEntity(\n options?: UseMutationOptions<\n Entity,\n SynapseClientError,\n Pick<Entity, 'name' | 'description' | 'parentId' | 'concreteType'>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<\n Entity,\n SynapseClientError,\n Pick<Entity, 'name' | 'description' | 'parentId' | 'concreteType'>\n >({\n mutationFn: (entity: Entity) =>\n SynapseClient.createEntity(entity, accessToken),\n onSuccess: async (newEntity, variables, ctx) => {\n const entityDataQueryKey = keyFactory.getEntityQueryKey(newEntity.id!)\n queryClient.setQueryData(entityDataQueryKey, newEntity)\n queryClient.setQueryData<EntityLookupQueryData>(\n keyFactory.getEntityLookupQueryKey({\n parentId: newEntity.parentId,\n entityName: newEntity.name,\n }),\n newEntity.id,\n )\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n newEntity.id!,\n entityDataQueryKey,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(newEntity, variables, ctx)\n }\n },\n })\n}\n\nexport function useUpdateEntity<T extends Entity>(\n options?: Partial<UseMutationOptions<T, SynapseClientError, T>>,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<T, SynapseClientError, T>({\n ...options,\n mutationFn: (entity: T) =>\n SynapseClient.updateEntity<T>(entity, accessToken),\n onSuccess: async (updatedEntity, variables, ctx) => {\n const entityDataQueryKey = keyFactory.getEntityQueryKey(updatedEntity.id!)\n queryClient.setQueryData(entityDataQueryKey, updatedEntity)\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n updatedEntity.id!,\n entityDataQueryKey,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(updatedEntity, variables, ctx)\n }\n },\n })\n}\n\nexport function useDeleteEntity(\n options?: Partial<\n UseMutationOptions<string | undefined, SynapseClientError, string>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<string | undefined, SynapseClientError, string>({\n ...options,\n mutationFn: async (entityId: string) => {\n const entity = await SynapseClient.getEntity<Entity>(\n accessToken,\n entityId,\n )\n await SynapseClient.deleteEntity(accessToken, entityId)\n return entity.parentId\n },\n onSuccess: async (parentId, entityId, ctx) => {\n await invalidateAllQueriesForEntity(queryClient, keyFactory, entityId)\n if (parentId) {\n await invalidateAllQueriesForEntity(queryClient, keyFactory, parentId)\n }\n if (options?.onSuccess) {\n await options.onSuccess(parentId, entityId, ctx)\n }\n },\n })\n}\n\nexport function useGetVersions(\n entityId: string,\n offset: number = 0,\n limit: number = 200,\n options?: Partial<\n UseQueryOptions<PaginatedResults<VersionInfo>, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getPaginatedEntityVersionsQueryKey(\n entityId,\n limit,\n offset,\n ),\n queryFn: () =>\n SynapseClient.getEntityVersions(entityId, accessToken, offset, limit),\n })\n}\n\nexport function useGetVersionsInfinite<\n TData = InfiniteData<PaginatedResults<VersionInfo>>,\n>(\n entityId: string,\n options: Partial<\n UseInfiniteQueryOptions<\n PaginatedResults<VersionInfo>,\n SynapseClientError,\n TData,\n QueryKey,\n number | undefined\n >\n >,\n) {\n const LIMIT = 200\n const { accessToken, keyFactory } = useSynapseContext()\n return useInfiniteQuery<\n PaginatedResults<VersionInfo>,\n SynapseClientError,\n TData,\n QueryKey,\n number | undefined\n >({\n ...options,\n queryKey: keyFactory.getEntityVersionsQueryKey(entityId),\n queryFn: async context => {\n return await SynapseClient.getEntityVersions(\n entityId,\n accessToken,\n context.pageParam,\n LIMIT,\n )\n },\n initialPageParam: undefined,\n getNextPageParam: getNextPageParamForPaginatedResults,\n })\n}\n\nexport function getStandardEntityFields(json: EntityJson): EntityJson {\n return pick(json, entityJsonKeys[json.concreteType]) as EntityJson\n}\n\nexport function removeStandardEntityFields(\n json: EntityJson,\n): Record<\n string,\n string | number | boolean | string[] | number[] | boolean[] | undefined\n> {\n return omit(json, entityJsonKeys[json.concreteType])\n}\n\n/**\n * This hook automatically transforms the data to include these objects:\n * - `entity`: the unmodified Entity data object\n * - `entityMetadata`: the standard entity fields contained in the JSON response\n * - `annotations`: the annotations contained in the JSON response\n *\n * The union of these objects would be equal in value to the `data` object.\n */\nexport function useGetJson(\n entityId: string,\n versionNumber: number | undefined,\n includeDerivedAnnotations: boolean,\n options?: Partial<UseQueryOptions<EntityJson, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityJsonQueryKey(\n entityId,\n versionNumber,\n includeDerivedAnnotations,\n ),\n queryFn: () =>\n SynapseClient.getEntityJson(\n entityId,\n versionNumber,\n includeDerivedAnnotations,\n accessToken,\n ),\n\n select: data => {\n // Separate the standard fields and annotations.\n const entityMetadata = getStandardEntityFields(data)\n\n const annotations = removeStandardEntityFields(data)\n\n return {\n entity: data,\n entityMetadata,\n annotations,\n }\n },\n })\n}\n\nexport function useUpdateViaJson(\n options?: Partial<\n UseMutationOptions<EntityJson, SynapseClientError, EntityJson>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n return useMutation<EntityJson, SynapseClientError, EntityJson>({\n ...options,\n mutationFn: (json: EntityJson) => {\n const entityId = json.id\n return SynapseClient.updateEntityJson(entityId, json, accessToken)\n },\n onSuccess: async (data, variables, ctx) => {\n const entityId = data.id\n // This annotation data will never include derived annotations, which are calculated by the backend asynchronously\n const entityJsonQueryKey = keyFactory.getEntityJsonQueryKey(\n entityId,\n undefined,\n false,\n )\n queryClient.setQueryData(entityJsonQueryKey, data)\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n entityId,\n entityJsonQueryKey,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(data, variables, ctx)\n }\n },\n })\n}\n\nexport function useGetEntityPath(\n entityId: string,\n options?: Partial<UseQueryOptions<EntityPath, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityPathQueryKey(entityId),\n queryFn: () => SynapseClient.getEntityPath(entityId, accessToken),\n })\n}\n\nexport function useGetEntityACL(\n entityId: string,\n options?: Partial<UseQueryOptions<AccessControlList, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityPathQueryKey(entityId),\n queryFn: () => SynapseClient.getEntityACL(entityId, accessToken),\n })\n}\n\nexport function useGetEntityAlias(\n alias: string,\n options?: Partial<UseQueryOptions<EntityId | null, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityAliasQueryKey(alias),\n queryFn: () => SynapseClient.getEntityAlias(alias, accessToken),\n })\n}\n\nexport function useGetEntityEvaluations(\n entityId: string,\n params?: GetEvaluationParameters,\n options?: Partial<UseQueryOptions<Evaluation[] | null, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityEvaluationsQueryKey(entityId),\n queryFn: () =>\n SynapseClient.getAllEntityEvaluations(entityId, params, accessToken),\n })\n}\n\nexport function useGetEntityPermissions(\n entityId: string,\n options?: Partial<\n UseQueryOptions<UserEntityPermissions | null, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityPermissionsQueryKey(entityId),\n queryFn: () => SynapseClient.getEntityPermissions(entityId, accessToken),\n })\n}\n\nconst onMutateEntityAclSuccess = async (\n entityId: string,\n updatedACL: AccessControlList | null,\n queryClient: QueryClient,\n keyFactory: KeyFactory,\n) => {\n const entityAclQueryKey = keyFactory.getEntityACLQueryKey(entityId)\n if (updatedACL) {\n queryClient.setQueryData(entityAclQueryKey, updatedACL)\n }\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n entityId,\n entityAclQueryKey,\n )\n}\n\nexport function useCreateEntityACL(\n options?: Partial<\n UseMutationOptions<AccessControlList, SynapseClientError, AccessControlList>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<AccessControlList, SynapseClientError, AccessControlList>({\n ...options,\n mutationFn: (acl: AccessControlList) =>\n SynapseClient.createEntityACL(acl, accessToken),\n onSuccess: async (updatedACL: AccessControlList, variables, ctx) => {\n await onMutateEntityAclSuccess(\n updatedACL.id,\n updatedACL,\n queryClient,\n keyFactory,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(updatedACL, variables, ctx)\n }\n },\n })\n}\n\nexport function useUpdateEntityACL(\n options?: Partial<\n UseMutationOptions<AccessControlList, SynapseClientError, AccessControlList>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<AccessControlList, SynapseClientError, AccessControlList>({\n ...options,\n mutationFn: (acl: AccessControlList) =>\n SynapseClient.updateEntityACL(acl, accessToken),\n onSuccess: async (updatedACL: AccessControlList, variables, ctx) => {\n await onMutateEntityAclSuccess(\n updatedACL.id,\n updatedACL,\n queryClient,\n keyFactory,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(updatedACL, variables, ctx)\n }\n },\n })\n}\n\nexport function useDeleteEntityACL(\n options?: Partial<UseMutationOptions<void, SynapseClientError, string>>,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<void, SynapseClientError, string>({\n ...options,\n mutationFn: (entityId: string) =>\n SynapseClient.deleteEntityACL(entityId, accessToken),\n onSuccess: async (result: void, entityId, ctx) => {\n await onMutateEntityAclSuccess(entityId, null, queryClient, keyFactory)\n\n if (options?.onSuccess) {\n await options.onSuccess(result, entityId, ctx)\n }\n },\n })\n}\n\nfunction useGetEntityBenefactorACLQueryOptions(\n entityId: string,\n): UseSuspenseQueryOptions<\n EntityBundle<{ includeBenefactorACL: true }>,\n SynapseClientError,\n AccessControlList\n> {\n const selectBenefactorACL = (\n data: EntityBundle<{ includeBenefactorACL: true }>,\n ): AccessControlList => data.benefactorAcl\n return useGetEntityBundleSuspenseQueryOptions<\n { includeBenefactorACL: true },\n AccessControlList\n >(\n entityId,\n undefined,\n {\n includeBenefactorACL: true,\n },\n selectBenefactorACL,\n )\n}\n\n/**\n * Retrieve the ACL of an entity. This call will succeed even for entities where the caller\n * does not have READ permission.\n * @param entityId\n * @param options\n */\nexport function useSuspenseGetEntityBenefactorACL(\n entityId: string,\n options?: Partial<\n UseSuspenseQueryOptions<\n EntityBundle<{ includeBenefactorACL: true }>,\n SynapseClientError,\n AccessControlList\n >\n >,\n) {\n const queryOptions = useGetEntityBenefactorACLQueryOptions(entityId)\n return useSuspenseQuery({\n ...options,\n ...queryOptions,\n })\n}\n\ntype UpdateTableMutationRequest = {\n entityId: string\n originalColumnModels: ColumnModel[]\n newColumnModels: SetOptional<ColumnModel, 'id'>[]\n}\n\nexport function useUpdateTableColumns(\n options?: Partial<\n UseMutationOptions<unknown, SynapseClientError, UpdateTableMutationRequest>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<unknown, SynapseClientError, UpdateTableMutationRequest>({\n ...options,\n mutationFn: async (request: UpdateTableMutationRequest) => {\n // This call will create new column models as appropriate\n const transactionRequest = await createTableUpdateTransactionRequest(\n accessToken!,\n request.entityId,\n request.originalColumnModels,\n request.newColumnModels,\n )\n\n return SynapseClient.updateTable(transactionRequest, accessToken)\n },\n onSuccess: async (response, variables, ctx) => {\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n variables.entityId,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(response, variables, ctx)\n }\n },\n })\n}\n\ntype EntityLookupQueryData = string | null\nexport function useGetEntityLookupQueryOptions() {\n const { keyFactory, synapseClient } = useSynapseContext()\n return (\n entityLookupRequest: EntityLookupRequest,\n ): UseQueryOptions<EntityLookupQueryData, SynapseClientError> =>\n queryOptions<EntityLookupQueryData, SynapseClientError>({\n queryKey: keyFactory.getEntityLookupQueryKey(entityLookupRequest),\n queryFn: async () =>\n (\n await allowNotFoundError(() =>\n synapseClient.entityServicesClient.postRepoV1EntityChild({\n entityLookupRequest: entityLookupRequest,\n }),\n )\n )?.id ?? null,\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useEntity.js","names":[],"sources":["../../../src/synapse-queries/entity/useEntity.ts"],"sourcesContent":["/*\n * Hooks to access Entity Services in Synapse\n */\n\nimport SynapseClient from '@/synapse-client'\nimport { allowNotFoundError } from '@/synapse-client/SynapseClientUtils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { entityJsonKeys } from '@/utils/functions/EntityTypeUtils'\nimport { createTableUpdateTransactionRequest } from '@/utils/functions/TableColumnSchemaUtils'\nimport {\n EntityLookupRequest,\n SynapseClientError,\n} from '@sage-bionetworks/synapse-client'\nimport {\n AccessControlList,\n ColumnModel,\n Entity,\n EntityBundle,\n EntityHeader,\n EntityId,\n EntityJson,\n EntityPath,\n Evaluation,\n GetEvaluationParameters,\n PaginatedResults,\n UserEntityPermissions,\n VersionInfo,\n} from '@sage-bionetworks/synapse-types'\nimport {\n InfiniteData,\n QueryClient,\n QueryKey,\n queryOptions,\n skipToken,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useMutation,\n UseMutationOptions,\n useQueries,\n useQuery,\n useQueryClient,\n UseQueryOptions,\n useSuspenseQuery,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\nimport { omit, pick } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { SetOptional } from 'type-fest'\nimport { getNextPageParamForPaginatedResults } from '../InfiniteQueryUtils'\nimport { KeyFactory } from '../KeyFactory'\nimport { invalidateAllQueriesForEntity } from '../QueryFilterUtils'\nimport { useGetEntityBundleSuspenseQueryOptions } from './useEntityBundle'\n\nexport function useGetEntityQueryOptions<T extends Entity>() {\n const { keyFactory, accessToken } = useSynapseContext()\n return (\n entityId?: string,\n versionNumber?: string | number,\n ): UseQueryOptions<T, SynapseClientError> =>\n queryOptions<T, SynapseClientError>({\n queryKey: keyFactory.getEntityVersionQueryKey(entityId, versionNumber),\n queryFn: entityId\n ? () =>\n SynapseClient.getEntity<T>(\n accessToken,\n entityId,\n versionNumber?.toString(),\n )\n : skipToken,\n })\n}\n\nexport function useGetEntity<T extends Entity>(\n entityId?: string,\n versionNumber?: string | number,\n options?: Partial<UseQueryOptions<T, SynapseClientError>>,\n) {\n const getEntityQueryOptions = useGetEntityQueryOptions<T>()\n return useQuery({\n ...options,\n ...getEntityQueryOptions(entityId, versionNumber),\n })\n}\n\nexport function useGetEntities(\n entityHeaders: Pick<EntityHeader, 'id' | 'versionNumber'>[],\n options?: Partial<UseQueryOptions<Entity[], SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queries = useMemo(\n () => ({\n queries: entityHeaders.map(header => {\n return {\n queryKey: keyFactory.getEntityVersionQueryKey(\n header.id,\n header.versionNumber,\n ),\n queryFn: () =>\n SynapseClient.getEntity(\n accessToken,\n header.id,\n header.versionNumber,\n ),\n options,\n }\n }),\n }),\n [accessToken, entityHeaders, keyFactory, options],\n )\n return useQueries(queries)\n}\n\nexport function useCreateEntity(\n options?: UseMutationOptions<\n Entity,\n SynapseClientError,\n Pick<Entity, 'name' | 'description' | 'parentId' | 'concreteType'>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<\n Entity,\n SynapseClientError,\n Pick<Entity, 'name' | 'description' | 'parentId' | 'concreteType'>\n >({\n mutationFn: (entity: Entity) =>\n SynapseClient.createEntity(entity, accessToken),\n onSuccess: async (newEntity, variables, ctx) => {\n const entityDataQueryKey = keyFactory.getEntityQueryKey(newEntity.id!)\n queryClient.setQueryData(entityDataQueryKey, newEntity)\n queryClient.setQueryData<EntityLookupQueryData>(\n keyFactory.getEntityLookupQueryKey({\n parentId: newEntity.parentId,\n entityName: newEntity.name,\n }),\n newEntity.id,\n )\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n newEntity.id!,\n entityDataQueryKey,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(newEntity, variables, ctx)\n }\n },\n })\n}\n\nexport function useUpdateEntity<T extends Entity>(\n options?: Partial<UseMutationOptions<T, SynapseClientError, T>>,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<T, SynapseClientError, T>({\n ...options,\n mutationFn: (entity: T) =>\n SynapseClient.updateEntity<T>(entity, accessToken),\n onSuccess: async (updatedEntity, variables, ctx) => {\n const entityDataQueryKey = keyFactory.getEntityQueryKey(updatedEntity.id!)\n queryClient.setQueryData(entityDataQueryKey, updatedEntity)\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n updatedEntity.id!,\n entityDataQueryKey,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(updatedEntity, variables, ctx)\n }\n },\n })\n}\n\nexport function useDeleteEntity(\n options?: Partial<\n UseMutationOptions<string | undefined, SynapseClientError, string>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<string | undefined, SynapseClientError, string>({\n ...options,\n mutationFn: async (entityId: string) => {\n const entity = await SynapseClient.getEntity<Entity>(\n accessToken,\n entityId,\n )\n await SynapseClient.deleteEntity(accessToken, entityId)\n return entity.parentId\n },\n onSuccess: async (parentId, entityId, ctx) => {\n await invalidateAllQueriesForEntity(queryClient, keyFactory, entityId)\n if (parentId) {\n await invalidateAllQueriesForEntity(queryClient, keyFactory, parentId)\n }\n if (options?.onSuccess) {\n await options.onSuccess(parentId, entityId, ctx)\n }\n },\n })\n}\n\nexport function useGetVersions(\n entityId: string,\n offset: number = 0,\n limit: number = 200,\n options?: Partial<\n UseQueryOptions<PaginatedResults<VersionInfo>, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getPaginatedEntityVersionsQueryKey(\n entityId,\n limit,\n offset,\n ),\n queryFn: () =>\n SynapseClient.getEntityVersions(entityId, accessToken, offset, limit),\n })\n}\n\nexport function useGetVersionsInfinite<\n TData = InfiniteData<PaginatedResults<VersionInfo>>,\n>(\n entityId: string,\n options: Partial<\n UseInfiniteQueryOptions<\n PaginatedResults<VersionInfo>,\n SynapseClientError,\n TData,\n QueryKey,\n number | undefined\n >\n >,\n) {\n const LIMIT = 200\n const { accessToken, keyFactory } = useSynapseContext()\n return useInfiniteQuery<\n PaginatedResults<VersionInfo>,\n SynapseClientError,\n TData,\n QueryKey,\n number | undefined\n >({\n ...options,\n queryKey: keyFactory.getEntityVersionsQueryKey(entityId),\n queryFn: async context => {\n return await SynapseClient.getEntityVersions(\n entityId,\n accessToken,\n context.pageParam,\n LIMIT,\n )\n },\n initialPageParam: undefined,\n getNextPageParam: getNextPageParamForPaginatedResults,\n })\n}\n\nexport function getStandardEntityFields(json: EntityJson): EntityJson {\n return pick(json, entityJsonKeys[json.concreteType]) as EntityJson\n}\n\nexport function removeStandardEntityFields(\n json: EntityJson,\n): Record<\n string,\n string | number | boolean | string[] | number[] | boolean[] | undefined\n> {\n return omit(json, entityJsonKeys[json.concreteType])\n}\n\n/**\n * This hook automatically transforms the data to include these objects:\n * - `entity`: the unmodified Entity data object\n * - `entityMetadata`: the standard entity fields contained in the JSON response\n * - `annotations`: the annotations contained in the JSON response\n *\n * The union of these objects would be equal in value to the `data` object.\n */\nexport function useGetJson(\n entityId: string,\n versionNumber: number | undefined,\n includeDerivedAnnotations: boolean,\n options?: Partial<UseQueryOptions<EntityJson, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityJsonQueryKey(\n entityId,\n versionNumber,\n includeDerivedAnnotations,\n ),\n queryFn: () =>\n SynapseClient.getEntityJson(\n entityId,\n versionNumber,\n includeDerivedAnnotations,\n accessToken,\n ),\n\n select: data => {\n // Separate the standard fields and annotations.\n const entityMetadata = getStandardEntityFields(data)\n\n const annotations = removeStandardEntityFields(data)\n\n return {\n entity: data,\n entityMetadata,\n annotations,\n }\n },\n })\n}\n\nexport function useUpdateViaJson(\n options?: Partial<\n UseMutationOptions<EntityJson, SynapseClientError, EntityJson>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n return useMutation<EntityJson, SynapseClientError, EntityJson>({\n ...options,\n mutationFn: (json: EntityJson) => {\n const entityId = json.id\n return SynapseClient.updateEntityJson(entityId, json, accessToken)\n },\n onSuccess: async (data, variables, ctx) => {\n const entityId = data.id\n // This annotation data will never include derived annotations, which are calculated by the backend asynchronously\n const entityJsonQueryKey = keyFactory.getEntityJsonQueryKey(\n entityId,\n undefined,\n false,\n )\n queryClient.setQueryData(entityJsonQueryKey, data)\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n entityId,\n entityJsonQueryKey,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(data, variables, ctx)\n }\n },\n })\n}\n\nexport function useGetEntityPath(\n entityId: string,\n options?: Partial<UseQueryOptions<EntityPath, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityPathQueryKey(entityId),\n queryFn: () => SynapseClient.getEntityPath(entityId, accessToken),\n })\n}\n\nexport function useGetEntityACL(\n entityId: string,\n options?: Partial<UseQueryOptions<AccessControlList, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityPathQueryKey(entityId),\n queryFn: () => SynapseClient.getEntityACL(entityId, accessToken),\n })\n}\n\nexport function useGetEntityAlias(\n alias: string,\n options?: Partial<UseQueryOptions<EntityId | null, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityAliasQueryKey(alias),\n queryFn: () => SynapseClient.getEntityAlias(alias, accessToken),\n })\n}\n\nexport function useGetEntityEvaluations(\n entityId: string,\n params?: GetEvaluationParameters,\n options?: Partial<UseQueryOptions<Evaluation[] | null, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityEvaluationsQueryKey(entityId),\n queryFn: () =>\n SynapseClient.getAllEntityEvaluations(entityId, params, accessToken),\n })\n}\n\nexport function useGetEntityPermissions(\n entityId: string,\n options?: Partial<\n UseQueryOptions<UserEntityPermissions | null, SynapseClientError>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getEntityPermissionsQueryKey(entityId),\n queryFn: () => SynapseClient.getEntityPermissions(entityId, accessToken),\n })\n}\n\nconst onMutateEntityAclSuccess = async (\n entityId: string,\n updatedACL: AccessControlList | null,\n queryClient: QueryClient,\n keyFactory: KeyFactory,\n) => {\n const entityAclQueryKey = keyFactory.getEntityACLQueryKey(entityId)\n if (updatedACL) {\n queryClient.setQueryData(entityAclQueryKey, updatedACL)\n }\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n entityId,\n entityAclQueryKey,\n )\n}\n\nexport function useCreateEntityACL(\n options?: Partial<\n UseMutationOptions<AccessControlList, SynapseClientError, AccessControlList>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<AccessControlList, SynapseClientError, AccessControlList>({\n ...options,\n mutationFn: (acl: AccessControlList) =>\n SynapseClient.createEntityACL(acl, accessToken),\n onSuccess: async (updatedACL: AccessControlList, variables, ctx) => {\n await onMutateEntityAclSuccess(\n updatedACL.id,\n updatedACL,\n queryClient,\n keyFactory,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(updatedACL, variables, ctx)\n }\n },\n })\n}\n\nexport function useUpdateEntityACL(\n options?: Partial<\n UseMutationOptions<AccessControlList, SynapseClientError, AccessControlList>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<AccessControlList, SynapseClientError, AccessControlList>({\n ...options,\n mutationFn: (acl: AccessControlList) =>\n SynapseClient.updateEntityACL(acl, accessToken),\n onSuccess: async (updatedACL: AccessControlList, variables, ctx) => {\n await onMutateEntityAclSuccess(\n updatedACL.id,\n updatedACL,\n queryClient,\n keyFactory,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(updatedACL, variables, ctx)\n }\n },\n })\n}\n\nexport function useDeleteEntityACL(\n options?: Partial<UseMutationOptions<void, SynapseClientError, string>>,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<void, SynapseClientError, string>({\n ...options,\n mutationFn: (entityId: string) =>\n SynapseClient.deleteEntityACL(entityId, accessToken),\n onSuccess: async (result: void, entityId, ctx) => {\n await onMutateEntityAclSuccess(entityId, null, queryClient, keyFactory)\n\n if (options?.onSuccess) {\n await options.onSuccess(result, entityId, ctx)\n }\n },\n })\n}\n\nfunction useGetEntityBenefactorACLQueryOptions(\n entityId: string,\n): UseSuspenseQueryOptions<\n EntityBundle<{ includeBenefactorACL: true }>,\n SynapseClientError,\n AccessControlList\n> {\n const selectBenefactorACL = (\n data: EntityBundle<{ includeBenefactorACL: true }>,\n ): AccessControlList => data.benefactorAcl\n return useGetEntityBundleSuspenseQueryOptions<\n { includeBenefactorACL: true },\n AccessControlList\n >(\n entityId,\n undefined,\n {\n includeBenefactorACL: true,\n },\n selectBenefactorACL,\n )\n}\n\n/**\n * Retrieve the ACL of an entity. This call will succeed even for entities where the caller\n * does not have READ permission.\n * @param entityId\n * @param options\n */\nexport function useSuspenseGetEntityBenefactorACL(\n entityId: string,\n options?: Partial<\n UseSuspenseQueryOptions<\n EntityBundle<{ includeBenefactorACL: true }>,\n SynapseClientError,\n AccessControlList\n >\n >,\n) {\n const queryOptions = useGetEntityBenefactorACLQueryOptions(entityId)\n return useSuspenseQuery({\n ...options,\n ...queryOptions,\n })\n}\n\ntype UpdateTableMutationRequest = {\n entityId: string\n originalColumnModels: ColumnModel[]\n newColumnModels: SetOptional<ColumnModel, 'id'>[]\n}\n\nexport function useUpdateTableColumns(\n options?: Partial<\n UseMutationOptions<unknown, SynapseClientError, UpdateTableMutationRequest>\n >,\n) {\n const queryClient = useQueryClient()\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useMutation<unknown, SynapseClientError, UpdateTableMutationRequest>({\n ...options,\n mutationFn: async (request: UpdateTableMutationRequest) => {\n // This call will create new column models as appropriate\n const transactionRequest = await createTableUpdateTransactionRequest(\n accessToken!,\n request.entityId,\n request.originalColumnModels,\n request.newColumnModels,\n )\n\n return SynapseClient.updateTable(transactionRequest, accessToken)\n },\n onSuccess: async (response, variables, ctx) => {\n await invalidateAllQueriesForEntity(\n queryClient,\n keyFactory,\n variables.entityId,\n )\n\n if (options?.onSuccess) {\n await options.onSuccess(response, variables, ctx)\n }\n },\n })\n}\n\ntype EntityLookupQueryData = string | null\nexport function useGetEntityLookupQueryOptions() {\n const { keyFactory, synapseClient } = useSynapseContext()\n return (\n entityLookupRequest: EntityLookupRequest,\n ): UseQueryOptions<EntityLookupQueryData, SynapseClientError> =>\n queryOptions<EntityLookupQueryData, SynapseClientError>({\n queryKey: keyFactory.getEntityLookupQueryKey(entityLookupRequest),\n queryFn: async () =>\n (\n await allowNotFoundError(() =>\n synapseClient.entityServicesClient.postRepoV1EntityChild({\n entityLookupRequest: entityLookupRequest,\n }),\n )\n )?.id ?? null,\n })\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityBundle.js","names":[],"sources":["../../../src/synapse-queries/entity/useEntityBundle.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { SynapseClientError, useSynapseContext } from '@/utils'\nimport {\n ALL_ENTITY_BUNDLE_FIELDS,\n EntityBundle,\n EntityBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport {\n skipToken,\n useQuery,\n UseQueryOptions,\n useSuspenseQuery,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetEntityBundleQueryOptions<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId?: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n select?: (data: EntityBundle<T>) => TSelect,\n): UseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect> {\n const { accessToken, keyFactory } = useSynapseContext()\n return {\n select,\n queryKey: keyFactory.getEntityBundleQueryKey(\n entityId,\n version,\n bundleRequest,\n ),\n queryFn: entityId\n ? () =>\n SynapseClient.getEntityBundleV2<T>(\n entityId,\n bundleRequest,\n version,\n accessToken,\n )\n : skipToken,\n staleTime: 5 * 60 * 1000, // 5 minutes - data stays fresh longer\n gcTime: 10 * 60 * 1000, // 10 minutes - keep in cache longer\n }\n}\n\nexport function useGetEntityBundleSuspenseQueryOptions<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n select?: (data: EntityBundle<T>) => TSelect,\n): UseSuspenseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect> {\n const { accessToken } = useSynapseContext()\n const baseQueryOptions = useGetEntityBundleQueryOptions<T, TSelect>(\n entityId,\n version,\n bundleRequest,\n select,\n )\n return {\n ...baseQueryOptions,\n queryFn: () =>\n SynapseClient.getEntityBundleV2<T>(\n entityId,\n bundleRequest,\n version,\n accessToken,\n ),\n }\n}\n\nexport function useGetEntityBundle<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId?: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n options?: Partial<\n UseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect>\n >,\n) {\n const queryOptions = useGetEntityBundleQueryOptions<T, TSelect>(\n entityId,\n version,\n bundleRequest,\n )\n return useQuery<EntityBundle<T>, SynapseClientError, TSelect>({\n ...options,\n ...queryOptions,\n })\n}\n\nexport function useSuspenseGetEntityBundle<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n options?: Partial<\n UseSuspenseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect>\n >,\n) {\n const queryOptions = useGetEntityBundleSuspenseQueryOptions<T, TSelect>(\n entityId,\n version,\n bundleRequest,\n )\n return useSuspenseQuery({\n ...options,\n ...queryOptions,\n })\n}\n\nexport default useGetEntityBundle\n"],"mappings":";;;;;;AAeA,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GAC+D;CAC/D,IAAM,EAAE,gBAAa,kBAAe,GAAmB;AACvD,QAAO;EACL;EACA,UAAU,EAAW,wBACnB,GACA,GACA,EACD;EACD,SAAS,UAEH,EAAc,kBACZ,GACA,GACA,GACA,EACD,GACH;EACJ,WAAW,MAAS;EACpB,QAAQ,MAAU;EACnB;;AAGH,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GACuE;CACvE,IAAM,EAAE,mBAAgB,GAAmB;AAO3C,QAAO;EACL,GAPuB,EACvB,GACA,GACA,GACA,EACD;EAGC,eACE,EAAc,kBACZ,GACA,GACA,GACA,EACD;EACJ;;AAGH,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GAGA;CACA,IAAM,IAAe,EACnB,GACA,GACA,EACD;AACD,QAAO,EAAuD;EAC5D,GAAG;EACH,GAAG;EACJ,CAAC;;AAGJ,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GAGA;CACA,IAAM,IAAe,EACnB,GACA,GACA,EACD;AACD,QAAO,EAAiB;EACtB,GAAG;EACH,GAAG;EACJ,CAAC"}
1
+ {"version":3,"file":"useEntityBundle.js","names":[],"sources":["../../../src/synapse-queries/entity/useEntityBundle.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { SynapseClientError, useSynapseContext } from '@/utils'\nimport {\n ALL_ENTITY_BUNDLE_FIELDS,\n EntityBundle,\n EntityBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport {\n skipToken,\n useQuery,\n UseQueryOptions,\n useSuspenseQuery,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\n\nexport function useGetEntityBundleQueryOptions<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId?: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n select?: (data: EntityBundle<T>) => TSelect,\n): UseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect> {\n const { accessToken, keyFactory } = useSynapseContext()\n return {\n select,\n queryKey: keyFactory.getEntityBundleQueryKey(\n entityId,\n version,\n bundleRequest,\n ),\n queryFn: entityId\n ? () =>\n SynapseClient.getEntityBundleV2<T>(\n entityId,\n bundleRequest,\n version,\n accessToken,\n )\n : skipToken,\n staleTime: 5 * 60 * 1000, // 5 minutes - data stays fresh longer\n gcTime: 10 * 60 * 1000, // 10 minutes - keep in cache longer\n }\n}\n\nexport function useGetEntityBundleSuspenseQueryOptions<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n select?: (data: EntityBundle<T>) => TSelect,\n): UseSuspenseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect> {\n const { accessToken } = useSynapseContext()\n const baseQueryOptions = useGetEntityBundleQueryOptions<T, TSelect>(\n entityId,\n version,\n bundleRequest,\n select,\n )\n return {\n ...baseQueryOptions,\n queryFn: () =>\n SynapseClient.getEntityBundleV2<T>(\n entityId,\n bundleRequest,\n version,\n accessToken,\n ),\n }\n}\n\nexport function useGetEntityBundle<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId?: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n options?: Partial<\n UseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect>\n >,\n) {\n const queryOptions = useGetEntityBundleQueryOptions<T, TSelect>(\n entityId,\n version,\n bundleRequest,\n )\n return useQuery<EntityBundle<T>, SynapseClientError, TSelect>({\n ...options,\n ...queryOptions,\n })\n}\n\nexport function useSuspenseGetEntityBundle<\n T extends EntityBundleRequest = typeof ALL_ENTITY_BUNDLE_FIELDS,\n TSelect = EntityBundle<T>,\n>(\n entityId: string,\n version?: number,\n bundleRequest: T = ALL_ENTITY_BUNDLE_FIELDS as T,\n options?: Partial<\n UseSuspenseQueryOptions<EntityBundle<T>, SynapseClientError, TSelect>\n >,\n) {\n const queryOptions = useGetEntityBundleSuspenseQueryOptions<T, TSelect>(\n entityId,\n version,\n bundleRequest,\n )\n return useSuspenseQuery({\n ...options,\n ...queryOptions,\n })\n}\n\nexport default useGetEntityBundle\n"],"mappings":";;;;;;AAeA,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GAC+D;CAC/D,IAAM,EAAE,gBAAa,kBAAe,GAAmB;AACvD,QAAO;EACL;EACA,UAAU,EAAW,wBACnB,GACA,GACA,EACD;EACD,SAAS,UAEH,EAAc,kBACZ,GACA,GACA,GACA,EACD,GACH;EACJ,WAAW,MAAS;EACpB,QAAQ,MAAU;EACnB;;AAGH,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GACuE;CACvE,IAAM,EAAE,mBAAgB,GAAmB;AAO3C,QAAO;EACL,GAPuB,EACvB,GACA,GACA,GACA,EAGG;EACH,eACE,EAAc,kBACZ,GACA,GACA,GACA,EACD;EACJ;;AAGH,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GAGA;CACA,IAAM,IAAe,EACnB,GACA,GACA,EACD;AACD,QAAO,EAAuD;EAC5D,GAAG;EACH,GAAG;EACJ,CAAC;;AAGJ,SAAgB,EAId,GACA,GACA,IAAmB,GACnB,GAGA;CACA,IAAM,IAAe,EACnB,GACA,GACA,EACD;AACD,QAAO,EAAiB;EACtB,GAAG;EACH,GAAG;EACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useExportTableQueryToAnalysisPlatform.js","names":[],"sources":["../../../src/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.ts"],"sourcesContent":["import {\n QueryBundleRequest,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\nimport { useExportToCavatica } from './useExportToCavatica'\nimport { useExportToTerra } from './useExportToTerra'\nimport { useExportToPluto } from './useExportToPluto'\nimport { useExportToADWorkbench } from './useExportToADWorkbench'\n\n/**\n * Provides functions to export data from a Synapse table query to an external analysis platform.\n */\nexport function useExportTableQueryToAnalysisPlatform(options: {\n queryBundleRequest: QueryBundleRequest\n selectColumns?: SelectColumn[]\n fileIdColumnName?: string\n fileVersionColumnName?: string\n fileNameColumnName?: string\n}) {\n const {\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileVersionColumnName,\n fileNameColumnName,\n } = options\n\n const exportToCavatica = useExportToCavatica(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n\n const exportToTerra = useExportToTerra(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n const exportToPluto = useExportToPluto(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n const exportToPlutoDev = useExportToPluto(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n true,\n )\n\n const exportToADWorkbench = useExportToADWorkbench(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n\n return {\n exportToCavatica,\n exportToTerra,\n exportToPluto,\n exportToPlutoDev,\n exportToADWorkbench,\n }\n}\n"],"mappings":";;;;;AAYA,SAAgB,EAAsC,GAMnD;CACD,IAAM,EACJ,uBACA,kBACA,qBACA,0BACA,0BACE;AAyCJ,QAAO;EACL,kBAxCuB,EACvB,GACA,GACA,GACA,GACA,EACD;EAmCC,eAjCoB,EACpB,GACA,GACA,GACA,GACA,EACD;EA4BC,eA3BoB,EACpB,GACA,GACA,GACA,GACA,EACD;EAsBC,kBArBuB,EACvB,GACA,GACA,GACA,GACA,GACA,GACD;EAeC,qBAb0B,EAC1B,GACA,GACA,GACA,GACA,EACD;EAQA"}
1
+ {"version":3,"file":"useExportTableQueryToAnalysisPlatform.js","names":[],"sources":["../../../src/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.ts"],"sourcesContent":["import {\n QueryBundleRequest,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\nimport { useExportToCavatica } from './useExportToCavatica'\nimport { useExportToTerra } from './useExportToTerra'\nimport { useExportToPluto } from './useExportToPluto'\nimport { useExportToADWorkbench } from './useExportToADWorkbench'\n\n/**\n * Provides functions to export data from a Synapse table query to an external analysis platform.\n */\nexport function useExportTableQueryToAnalysisPlatform(options: {\n queryBundleRequest: QueryBundleRequest\n selectColumns?: SelectColumn[]\n fileIdColumnName?: string\n fileVersionColumnName?: string\n fileNameColumnName?: string\n}) {\n const {\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileVersionColumnName,\n fileNameColumnName,\n } = options\n\n const exportToCavatica = useExportToCavatica(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n\n const exportToTerra = useExportToTerra(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n const exportToPluto = useExportToPluto(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n const exportToPlutoDev = useExportToPluto(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n true,\n )\n\n const exportToADWorkbench = useExportToADWorkbench(\n queryBundleRequest,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n )\n\n return {\n exportToCavatica,\n exportToTerra,\n exportToPluto,\n exportToPlutoDev,\n exportToADWorkbench,\n }\n}\n"],"mappings":";;;;;AAYA,SAAgB,EAAsC,GAMnD;CACD,IAAM,EACJ,uBACA,kBACA,qBACA,0BACA,0BACE;AAyCJ,QAAO;EACL,kBAxCuB,EACvB,GACA,GACA,GACA,GACA,EAmCA;EACA,eAjCoB,EACpB,GACA,GACA,GACA,GACA,EA4BA;EACA,eA3BoB,EACpB,GACA,GACA,GACA,GACA,EAsBA;EACA,kBArBuB,EACvB,GACA,GACA,GACA,GACA,GACA,GAeA;EACA,qBAb0B,EAC1B,GACA,GACA,GACA,GACA,EAQA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useExportToTerra.js","names":[],"sources":["../../../src/synapse-queries/entity/useExportToTerra.ts"],"sourcesContent":["import {\n DownloadPFBRequest,\n QueryBundleRequest,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\nimport { displayToast } from '../../components/ToastMessage/ToastMessage'\nimport { parseEntityIdFromSqlStatement } from '../../utils/functions/SqlFunctions'\nimport { useDownloadTableQueryResultAsPFB } from '../table/useDownloadTable'\nimport { addDrsUriToSql } from './useExportToCavatica'\n\nexport function useExportToTerra(\n queryBundleRequest: QueryBundleRequest,\n selectColumns?: SelectColumn[],\n fileIdColumnName: string = 'id',\n fileNameColumnName: string = 'name',\n fileVersionColumnName: string = 'currentVersion',\n) {\n const { mutateAsync: createPfb } = useDownloadTableQueryResultAsPFB()\n return async () => {\n const originalSql = queryBundleRequest.query.sql\n try {\n const tableEntityId = parseEntityIdFromSqlStatement(\n queryBundleRequest.query.sql,\n )\n const sql = addDrsUriToSql(\n originalSql,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n true, // remove spaces from select columns\n )\n const downloadPfbRequest: DownloadPFBRequest = {\n sql,\n concreteType: 'org.sagebionetworks.repo.model.table.DownloadPFBRequest',\n entityId: tableEntityId,\n selectedFacets: queryBundleRequest.query.selectedFacets,\n additionalFilters: queryBundleRequest.query.additionalFilters,\n // Note - backend will respond with a 500 if illegal characters found in pfbEntityName (such as '-')\n pfbEntityName: `SynapseExport${tableEntityId}`,\n pfbEntityIdColumnNames: [fileIdColumnName, fileVersionColumnName],\n }\n const result = await createPfb(downloadPfbRequest)\n // Send the user to Terra with the DRS URI that can be used to download the PFB result\n const terraImportURL = `https://app.terra.bio/#import-data?format=pfb&url=${encodeURIComponent(\n `drs://repo-prod.prod.sagebase.org/fh${result.resultsFileHandleId}`,\n )}`\n window.open(terraImportURL, '_blank')\n } catch (_err) {\n displayToast(_err.reason, 'danger')\n }\n }\n}\n"],"mappings":";;;;;AAUA,SAAgB,EACd,GACA,GACA,IAA2B,MAC3B,IAA6B,QAC7B,IAAgC,kBAChC;CACA,IAAM,EAAE,aAAa,MAAc,GAAkC;AACrE,QAAO,YAAY;EACjB,IAAM,IAAc,EAAmB,MAAM;AAC7C,MAAI;GACF,IAAM,IAAgB,EACpB,EAAmB,MAAM,IAC1B,EAmBK,IAAS,MAAM,EAV0B;IAC7C,KATU,EACV,GACA,GACA,GACA,GACA,GACA,GACD;IAGC,cAAc;IACd,UAAU;IACV,gBAAgB,EAAmB,MAAM;IACzC,mBAAmB,EAAmB,MAAM;IAE5C,eAAe,gBAAgB;IAC/B,wBAAwB,CAAC,GAAkB,EAAsB;IAClE,CACiD,EAE5C,IAAiB,qDAAqD,mBAC1E,uCAAuC,EAAO,sBAC/C;AACD,UAAO,KAAK,GAAgB,SAAS;WAC9B,GAAM;AACb,KAAa,EAAK,QAAQ,SAAS"}
1
+ {"version":3,"file":"useExportToTerra.js","names":[],"sources":["../../../src/synapse-queries/entity/useExportToTerra.ts"],"sourcesContent":["import {\n DownloadPFBRequest,\n QueryBundleRequest,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\nimport { displayToast } from '../../components/ToastMessage/ToastMessage'\nimport { parseEntityIdFromSqlStatement } from '../../utils/functions/SqlFunctions'\nimport { useDownloadTableQueryResultAsPFB } from '../table/useDownloadTable'\nimport { addDrsUriToSql } from './useExportToCavatica'\n\nexport function useExportToTerra(\n queryBundleRequest: QueryBundleRequest,\n selectColumns?: SelectColumn[],\n fileIdColumnName: string = 'id',\n fileNameColumnName: string = 'name',\n fileVersionColumnName: string = 'currentVersion',\n) {\n const { mutateAsync: createPfb } = useDownloadTableQueryResultAsPFB()\n return async () => {\n const originalSql = queryBundleRequest.query.sql\n try {\n const tableEntityId = parseEntityIdFromSqlStatement(\n queryBundleRequest.query.sql,\n )\n const sql = addDrsUriToSql(\n originalSql,\n selectColumns,\n fileIdColumnName,\n fileNameColumnName,\n fileVersionColumnName,\n true, // remove spaces from select columns\n )\n const downloadPfbRequest: DownloadPFBRequest = {\n sql,\n concreteType: 'org.sagebionetworks.repo.model.table.DownloadPFBRequest',\n entityId: tableEntityId,\n selectedFacets: queryBundleRequest.query.selectedFacets,\n additionalFilters: queryBundleRequest.query.additionalFilters,\n // Note - backend will respond with a 500 if illegal characters found in pfbEntityName (such as '-')\n pfbEntityName: `SynapseExport${tableEntityId}`,\n pfbEntityIdColumnNames: [fileIdColumnName, fileVersionColumnName],\n }\n const result = await createPfb(downloadPfbRequest)\n // Send the user to Terra with the DRS URI that can be used to download the PFB result\n const terraImportURL = `https://app.terra.bio/#import-data?format=pfb&url=${encodeURIComponent(\n `drs://repo-prod.prod.sagebase.org/fh${result.resultsFileHandleId}`,\n )}`\n window.open(terraImportURL, '_blank')\n } catch (_err) {\n displayToast(_err.reason, 'danger')\n }\n }\n}\n"],"mappings":";;;;;AAUA,SAAgB,EACd,GACA,GACA,IAA2B,MAC3B,IAA6B,QAC7B,IAAgC,kBAChC;CACA,IAAM,EAAE,aAAa,MAAc,GAAkC;AACrE,QAAO,YAAY;EACjB,IAAM,IAAc,EAAmB,MAAM;AAC7C,MAAI;GACF,IAAM,IAAgB,EACpB,EAAmB,MAAM,IAC1B,EAmBK,IAAS,MAAM,EAAU;IAT7B,KATU,EACV,GACA,GACA,GACA,GACA,GACA,GAGA;IACA,cAAc;IACd,UAAU;IACV,gBAAgB,EAAmB,MAAM;IACzC,mBAAmB,EAAmB,MAAM;IAE5C,eAAe,gBAAgB;IAC/B,wBAAwB,CAAC,GAAkB,EAAsB;IAEpC,CAAmB,EAE5C,IAAiB,qDAAqD,mBAC1E,uCAAuC,EAAO,sBAC/C;AACD,UAAO,KAAK,GAAgB,SAAS;WAC9B,GAAM;AACb,KAAa,EAAK,QAAQ,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGetQueryResultBundle.js","names":[],"sources":["../../../src/synapse-queries/entity/useGetQueryResultBundle.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { partitionQueryBundleRequestIntoRowsAndMetadata } from '@/utils/functions/queryUtils'\nimport {\n BUNDLE_MASK_QUERY_COUNT,\n BUNDLE_MASK_QUERY_RESULTS,\n DEFAULT_PAGE_SIZE,\n} from '@/utils/SynapseConstants'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n AsynchronousJobStatus,\n QueryBundleRequest,\n QueryResultBundle,\n} from '@sage-bionetworks/synapse-types'\nimport {\n InfiniteData,\n QueryKey,\n UseInfiniteQueryOptions,\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query'\nimport { merge } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { KeyFactory } from '../KeyFactory'\n\nexport const tableQueryUseQueryDefaults = {\n staleTime: 1000 * 60 * 30, // 30 minutes\n}\n\n/**\n *\n * @param queryBundleRequest\n * @param options\n * @returns\n *\n * @deprecated - use useGetQueryResultBundleWithAsyncStatus. That hook can be renamed and this can be removed\n * when all cases are using useGetQueryResultBundleWithAsyncStatus\n */\nexport default function useGetQueryResultBundle<TData = QueryResultBundle>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<QueryResultBundle, SynapseClientError, TData>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery<QueryResultBundle, SynapseClientError, TData>({\n ...tableQueryUseQueryDefaults,\n ...options,\n queryKey: keyFactory.getEntityTableQueryResultQueryKey(\n queryBundleRequest,\n false,\n ),\n queryFn: () =>\n SynapseClient.getQueryTableResults(queryBundleRequest, accessToken),\n })\n}\n\nfunction useGetQueryResultBundleWithAsyncStatusInternal<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useQuery({\n ...tableQueryUseQueryDefaults,\n ...options,\n queryKey: keyFactory.getEntityTableQueryResultWithAsyncStatusQueryKey(\n queryBundleRequest,\n false,\n ),\n\n queryFn: () =>\n SynapseClient.getQueryTableAsyncJobResults(\n queryBundleRequest,\n accessToken,\n setCurrentAsyncStatus,\n ),\n })\n}\n\nexport function useGetQueryRows<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n) {\n const { rowDataRequest } =\n partitionQueryBundleRequestIntoRowsAndMetadata(queryBundleRequest)\n\n const enableQuery = rowDataRequest.partMask > 0 ? options?.enabled : false\n\n return useGetQueryResultBundleWithAsyncStatusInternal<TData>(\n rowDataRequest,\n {\n ...options,\n enabled: enableQuery,\n },\n setCurrentAsyncStatus,\n )\n}\n\nexport function useGetQueryStats<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n) {\n const { queryMetadataRequest } =\n partitionQueryBundleRequestIntoRowsAndMetadata(queryBundleRequest)\n\n const enableQuery =\n queryMetadataRequest.partMask > 0 ? options?.enabled : false\n\n return useGetQueryResultBundleWithAsyncStatusInternal<TData>(\n queryMetadataRequest,\n {\n ...options,\n enabled: enableQuery,\n },\n setCurrentAsyncStatus,\n )\n}\n\n/**\n * The set of properties returned by UseQuery where the results can be safely merged and memoized\n */\ntype UseQueryResultMergeableProperties<TData, TError> = Pick<\n UseQueryResult<TData, TError>,\n | 'data'\n | 'status'\n | 'isError'\n | 'isLoading'\n | 'error'\n | 'isSuccess'\n | 'isPlaceholderData'\n | 'isPending'\n // Note -- this list is not comprehensive. If there is a merge-able property you need, then add it!\n>\n\n/**\n * Returns a memoized object that contains the merge-able properties in the provided UseQueryResult\n * @param useQueryResult\n */\nfunction useGetMemoizedMergeableProperties<TData, TError>(\n useQueryResult: UseQueryResult<TData, TError>,\n): UseQueryResultMergeableProperties<TData, TError> {\n return useMemo(\n () => ({\n data: useQueryResult.data,\n status: useQueryResult.status,\n isError: useQueryResult.isError,\n isLoading: useQueryResult.isLoading,\n error: useQueryResult.error,\n isSuccess: useQueryResult.isSuccess,\n isPlaceholderData: useQueryResult.isPlaceholderData,\n isPending: useQueryResult.isPending,\n }),\n [\n useQueryResult.data,\n useQueryResult.error,\n useQueryResult.isError,\n useQueryResult.isLoading,\n useQueryResult.isPending,\n useQueryResult.isPlaceholderData,\n useQueryResult.isSuccess,\n useQueryResult.status,\n ],\n )\n}\n\nexport function useGetQueryResultBundleWithAsyncStatus<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n): UseQueryResultMergeableProperties<TData, SynapseClientError> {\n /**\n * Separate the query into two parts\n * - Query result rows, which will change each page\n * - Everything else, which does not change each page\n */\n const rowResult = useGetQueryRows<TData>(\n queryBundleRequest,\n options,\n setCurrentAsyncStatus,\n )\n const statsResult = useGetQueryStats<TData>(\n queryBundleRequest,\n options,\n setCurrentAsyncStatus,\n )\n\n // The rowResult and statsResult objects change every render.\n // Memoize the two query results so that we can safely memoize the result that we return\n const rowResultMergeableProperties =\n useGetMemoizedMergeableProperties(rowResult)\n const statsResultMergeableProperties =\n useGetMemoizedMergeableProperties(statsResult)\n\n const mergedBundle = useMemo(() => {\n // If either query is in error, return the error\n if (rowResultMergeableProperties.status === 'error') {\n return rowResultMergeableProperties\n } else if (statsResultMergeableProperties.status === 'error') {\n return statsResultMergeableProperties\n } else if (rowResultMergeableProperties.isLoading) {\n // if either query is loading, return the loading status\n return rowResultMergeableProperties\n } else if (statsResultMergeableProperties.isLoading) {\n return statsResultMergeableProperties\n } else {\n // Otherwise, both queries are successful or idle, Merge the results into a single object\n if (rowResultMergeableProperties.isPending) {\n // If the row result is pending, apply the stats result last to override the pending status\n return merge(\n {},\n rowResultMergeableProperties,\n statsResultMergeableProperties,\n )\n } else {\n // Otherwise, always apply the rowResult last, since it is likely have been fetched more recently than the stats.\n return merge(\n {},\n statsResultMergeableProperties,\n rowResultMergeableProperties,\n )\n }\n }\n }, [rowResultMergeableProperties, statsResultMergeableProperties])\n\n return mergedBundle\n}\n\nexport function getInfiniteQueryResultBundleOptions(\n queryBundleRequest: QueryBundleRequest,\n keyFactory: KeyFactory,\n accessToken: string | undefined,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n): UseInfiniteQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n InfiniteData<AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>>,\n QueryKey,\n string | number | undefined\n> {\n return {\n ...tableQueryUseQueryDefaults,\n queryKey: keyFactory.getEntityTableQueryResultQueryKey(\n queryBundleRequest,\n true,\n ),\n queryFn: context => {\n const offset =\n typeof context.pageParam === 'string'\n ? parseInt(context.pageParam)\n : context.pageParam ?? 0\n return SynapseClient.getQueryTableAsyncJobResults(\n {\n ...queryBundleRequest,\n query: {\n ...queryBundleRequest.query,\n offset: offset,\n },\n /**\n * If we're on the first page, send the original partMask.\n * Otherwise, just ask for the queryResults (if they're in the original partMask), as it's the only part that changes between pages.\n *\n * We'll merge the \"aggregation\" parts and the pages of queryResults in the `select` function.\n *\n * We need the queryCount to know when to stop fetching data, so retrieve that in the first bundle.\n */\n partMask:\n offset !== 0\n ? queryBundleRequest.partMask & BUNDLE_MASK_QUERY_RESULTS\n : queryBundleRequest.partMask | BUNDLE_MASK_QUERY_COUNT,\n },\n accessToken,\n setCurrentAsyncStatus,\n )\n },\n select: data => {\n /**\n * Since we only fetch queryResults on 2nd and subsequent pages, we add to all pages the aggregate parts\n * that we only fetched on the first page.\n */\n const firstPage = data?.pages[0]\n if (firstPage.responseBody) {\n for (let i = 0; i < data.pages.length; i++) {\n const page = data.pages[i]\n if (page.responseBody != null) {\n data.pages[i].responseBody = {\n ...firstPage.responseBody,\n // queryResult changes on each page.\n queryResult: page.responseBody.queryResult,\n }\n }\n }\n }\n return data\n },\n getPreviousPageParam: firstPage => {\n if (firstPage.jobState !== 'COMPLETE') {\n return undefined\n }\n const request = firstPage.requestBody\n if (request.query.offset == null || request.query.offset === 0) {\n return undefined\n }\n const pageSize = request.query.limit ?? DEFAULT_PAGE_SIZE\n\n return Math.max(request.query.offset - pageSize, 0)\n },\n initialPageParam: undefined,\n getNextPageParam: (page, allPages) => {\n if (page.jobState !== 'COMPLETE') {\n return undefined\n }\n const request = page.requestBody\n const pageSize = request.query.limit ?? DEFAULT_PAGE_SIZE\n const totalQueryResultCount = allPages[0].responseBody?.queryCount\n if (totalQueryResultCount != null) {\n // We know the total number of results. See if our offset + pageSize is >= the total\n if ((request.query.offset ?? 0) + pageSize >= totalQueryResultCount) {\n return undefined\n }\n }\n return page.responseBody!.queryResult?.queryResults.rows.length ===\n pageSize\n ? (request.query.offset ?? 0) + pageSize\n : undefined\n },\n }\n}\n\n/**\n * Fetches all rows for a table query. Only use this request if you require all rows in a table at once.\n */\nexport function useGetFullTableQueryResults<TData = QueryResultBundle>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<QueryResultBundle, SynapseClientError, TData>\n >,\n forceAnonymous: boolean = false,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery<QueryResultBundle, SynapseClientError, TData>({\n ...tableQueryUseQueryDefaults,\n ...options,\n queryKey: keyFactory.getFullTableQueryResultQueryKey(\n queryBundleRequest,\n forceAnonymous,\n ),\n\n queryFn: () =>\n SynapseClient.getFullQueryTableResults(\n queryBundleRequest,\n forceAnonymous ? undefined : accessToken,\n ),\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useGetQueryResultBundle.js","names":[],"sources":["../../../src/synapse-queries/entity/useGetQueryResultBundle.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { partitionQueryBundleRequestIntoRowsAndMetadata } from '@/utils/functions/queryUtils'\nimport {\n BUNDLE_MASK_QUERY_COUNT,\n BUNDLE_MASK_QUERY_RESULTS,\n DEFAULT_PAGE_SIZE,\n} from '@/utils/SynapseConstants'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n AsynchronousJobStatus,\n QueryBundleRequest,\n QueryResultBundle,\n} from '@sage-bionetworks/synapse-types'\nimport {\n InfiniteData,\n QueryKey,\n UseInfiniteQueryOptions,\n useQuery,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query'\nimport { merge } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { KeyFactory } from '../KeyFactory'\n\nexport const tableQueryUseQueryDefaults = {\n staleTime: 1000 * 60 * 30, // 30 minutes\n}\n\n/**\n *\n * @param queryBundleRequest\n * @param options\n * @returns\n *\n * @deprecated - use useGetQueryResultBundleWithAsyncStatus. That hook can be renamed and this can be removed\n * when all cases are using useGetQueryResultBundleWithAsyncStatus\n */\nexport default function useGetQueryResultBundle<TData = QueryResultBundle>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<QueryResultBundle, SynapseClientError, TData>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery<QueryResultBundle, SynapseClientError, TData>({\n ...tableQueryUseQueryDefaults,\n ...options,\n queryKey: keyFactory.getEntityTableQueryResultQueryKey(\n queryBundleRequest,\n false,\n ),\n queryFn: () =>\n SynapseClient.getQueryTableResults(queryBundleRequest, accessToken),\n })\n}\n\nfunction useGetQueryResultBundleWithAsyncStatusInternal<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n\n return useQuery({\n ...tableQueryUseQueryDefaults,\n ...options,\n queryKey: keyFactory.getEntityTableQueryResultWithAsyncStatusQueryKey(\n queryBundleRequest,\n false,\n ),\n\n queryFn: () =>\n SynapseClient.getQueryTableAsyncJobResults(\n queryBundleRequest,\n accessToken,\n setCurrentAsyncStatus,\n ),\n })\n}\n\nexport function useGetQueryRows<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n) {\n const { rowDataRequest } =\n partitionQueryBundleRequestIntoRowsAndMetadata(queryBundleRequest)\n\n const enableQuery = rowDataRequest.partMask > 0 ? options?.enabled : false\n\n return useGetQueryResultBundleWithAsyncStatusInternal<TData>(\n rowDataRequest,\n {\n ...options,\n enabled: enableQuery,\n },\n setCurrentAsyncStatus,\n )\n}\n\nexport function useGetQueryStats<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n) {\n const { queryMetadataRequest } =\n partitionQueryBundleRequestIntoRowsAndMetadata(queryBundleRequest)\n\n const enableQuery =\n queryMetadataRequest.partMask > 0 ? options?.enabled : false\n\n return useGetQueryResultBundleWithAsyncStatusInternal<TData>(\n queryMetadataRequest,\n {\n ...options,\n enabled: enableQuery,\n },\n setCurrentAsyncStatus,\n )\n}\n\n/**\n * The set of properties returned by UseQuery where the results can be safely merged and memoized\n */\ntype UseQueryResultMergeableProperties<TData, TError> = Pick<\n UseQueryResult<TData, TError>,\n | 'data'\n | 'status'\n | 'isError'\n | 'isLoading'\n | 'error'\n | 'isSuccess'\n | 'isPlaceholderData'\n | 'isPending'\n // Note -- this list is not comprehensive. If there is a merge-able property you need, then add it!\n>\n\n/**\n * Returns a memoized object that contains the merge-able properties in the provided UseQueryResult\n * @param useQueryResult\n */\nfunction useGetMemoizedMergeableProperties<TData, TError>(\n useQueryResult: UseQueryResult<TData, TError>,\n): UseQueryResultMergeableProperties<TData, TError> {\n return useMemo(\n () => ({\n data: useQueryResult.data,\n status: useQueryResult.status,\n isError: useQueryResult.isError,\n isLoading: useQueryResult.isLoading,\n error: useQueryResult.error,\n isSuccess: useQueryResult.isSuccess,\n isPlaceholderData: useQueryResult.isPlaceholderData,\n isPending: useQueryResult.isPending,\n }),\n [\n useQueryResult.data,\n useQueryResult.error,\n useQueryResult.isError,\n useQueryResult.isLoading,\n useQueryResult.isPending,\n useQueryResult.isPlaceholderData,\n useQueryResult.isSuccess,\n useQueryResult.status,\n ],\n )\n}\n\nexport function useGetQueryResultBundleWithAsyncStatus<\n TData = AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n TData\n >\n >,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n): UseQueryResultMergeableProperties<TData, SynapseClientError> {\n /**\n * Separate the query into two parts\n * - Query result rows, which will change each page\n * - Everything else, which does not change each page\n */\n const rowResult = useGetQueryRows<TData>(\n queryBundleRequest,\n options,\n setCurrentAsyncStatus,\n )\n const statsResult = useGetQueryStats<TData>(\n queryBundleRequest,\n options,\n setCurrentAsyncStatus,\n )\n\n // The rowResult and statsResult objects change every render.\n // Memoize the two query results so that we can safely memoize the result that we return\n const rowResultMergeableProperties =\n useGetMemoizedMergeableProperties(rowResult)\n const statsResultMergeableProperties =\n useGetMemoizedMergeableProperties(statsResult)\n\n const mergedBundle = useMemo(() => {\n // If either query is in error, return the error\n if (rowResultMergeableProperties.status === 'error') {\n return rowResultMergeableProperties\n } else if (statsResultMergeableProperties.status === 'error') {\n return statsResultMergeableProperties\n } else if (rowResultMergeableProperties.isLoading) {\n // if either query is loading, return the loading status\n return rowResultMergeableProperties\n } else if (statsResultMergeableProperties.isLoading) {\n return statsResultMergeableProperties\n } else {\n // Otherwise, both queries are successful or idle, Merge the results into a single object\n if (rowResultMergeableProperties.isPending) {\n // If the row result is pending, apply the stats result last to override the pending status\n return merge(\n {},\n rowResultMergeableProperties,\n statsResultMergeableProperties,\n )\n } else {\n // Otherwise, always apply the rowResult last, since it is likely have been fetched more recently than the stats.\n return merge(\n {},\n statsResultMergeableProperties,\n rowResultMergeableProperties,\n )\n }\n }\n }, [rowResultMergeableProperties, statsResultMergeableProperties])\n\n return mergedBundle\n}\n\nexport function getInfiniteQueryResultBundleOptions(\n queryBundleRequest: QueryBundleRequest,\n keyFactory: KeyFactory,\n accessToken: string | undefined,\n setCurrentAsyncStatus?: (\n status: AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n ) => void,\n): UseInfiniteQueryOptions<\n AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>,\n SynapseClientError,\n InfiniteData<AsynchronousJobStatus<QueryBundleRequest, QueryResultBundle>>,\n QueryKey,\n string | number | undefined\n> {\n return {\n ...tableQueryUseQueryDefaults,\n queryKey: keyFactory.getEntityTableQueryResultQueryKey(\n queryBundleRequest,\n true,\n ),\n queryFn: context => {\n const offset =\n typeof context.pageParam === 'string'\n ? parseInt(context.pageParam)\n : context.pageParam ?? 0\n return SynapseClient.getQueryTableAsyncJobResults(\n {\n ...queryBundleRequest,\n query: {\n ...queryBundleRequest.query,\n offset: offset,\n },\n /**\n * If we're on the first page, send the original partMask.\n * Otherwise, just ask for the queryResults (if they're in the original partMask), as it's the only part that changes between pages.\n *\n * We'll merge the \"aggregation\" parts and the pages of queryResults in the `select` function.\n *\n * We need the queryCount to know when to stop fetching data, so retrieve that in the first bundle.\n */\n partMask:\n offset !== 0\n ? queryBundleRequest.partMask & BUNDLE_MASK_QUERY_RESULTS\n : queryBundleRequest.partMask | BUNDLE_MASK_QUERY_COUNT,\n },\n accessToken,\n setCurrentAsyncStatus,\n )\n },\n select: data => {\n /**\n * Since we only fetch queryResults on 2nd and subsequent pages, we add to all pages the aggregate parts\n * that we only fetched on the first page.\n */\n const firstPage = data?.pages[0]\n if (firstPage.responseBody) {\n for (let i = 0; i < data.pages.length; i++) {\n const page = data.pages[i]\n if (page.responseBody != null) {\n data.pages[i].responseBody = {\n ...firstPage.responseBody,\n // queryResult changes on each page.\n queryResult: page.responseBody.queryResult,\n }\n }\n }\n }\n return data\n },\n getPreviousPageParam: firstPage => {\n if (firstPage.jobState !== 'COMPLETE') {\n return undefined\n }\n const request = firstPage.requestBody\n if (request.query.offset == null || request.query.offset === 0) {\n return undefined\n }\n const pageSize = request.query.limit ?? DEFAULT_PAGE_SIZE\n\n return Math.max(request.query.offset - pageSize, 0)\n },\n initialPageParam: undefined,\n getNextPageParam: (page, allPages) => {\n if (page.jobState !== 'COMPLETE') {\n return undefined\n }\n const request = page.requestBody\n const pageSize = request.query.limit ?? DEFAULT_PAGE_SIZE\n const totalQueryResultCount = allPages[0].responseBody?.queryCount\n if (totalQueryResultCount != null) {\n // We know the total number of results. See if our offset + pageSize is >= the total\n if ((request.query.offset ?? 0) + pageSize >= totalQueryResultCount) {\n return undefined\n }\n }\n return page.responseBody!.queryResult?.queryResults.rows.length ===\n pageSize\n ? (request.query.offset ?? 0) + pageSize\n : undefined\n },\n }\n}\n\n/**\n * Fetches all rows for a table query. Only use this request if you require all rows in a table at once.\n */\nexport function useGetFullTableQueryResults<TData = QueryResultBundle>(\n queryBundleRequest: QueryBundleRequest,\n options?: Partial<\n UseQueryOptions<QueryResultBundle, SynapseClientError, TData>\n >,\n forceAnonymous: boolean = false,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n return useQuery<QueryResultBundle, SynapseClientError, TData>({\n ...tableQueryUseQueryDefaults,\n ...options,\n queryKey: keyFactory.getFullTableQueryResultQueryKey(\n queryBundleRequest,\n forceAnonymous,\n ),\n\n queryFn: () =>\n SynapseClient.getFullQueryTableResults(\n queryBundleRequest,\n forceAnonymous ? undefined : accessToken,\n ),\n })\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSchema.js","names":[],"sources":["../../../src/synapse-queries/entity/useSchema.ts"],"sourcesContent":["/*\n * Hooks for accessing services related to JSON Schemas in the Synapse REST API\n */\n\nimport SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport { useQuery, UseQueryOptions } from '@tanstack/react-query'\nimport { JSONSchema7 } from 'json-schema'\n\nexport function useGetSchema(\n schema$id: string,\n options?: Partial<UseQueryOptions<JSONSchema7, SynapseClientError>>,\n) {\n const { keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getValidationSchemaQueryKey(schema$id),\n\n queryFn: async () => {\n const response = await SynapseClient.getValidationSchema(schema$id)\n return response.validationSchema\n },\n })\n}\n"],"mappings":";;;;AAUA,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,GAAmB;AAC1C,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,4BAA4B,EAAU;EAE3D,SAAS,aACU,MAAM,EAAc,oBAAoB,EAAU,EACnD;EAEnB,CAAC"}
1
+ {"version":3,"file":"useSchema.js","names":[],"sources":["../../../src/synapse-queries/entity/useSchema.ts"],"sourcesContent":["/*\n * Hooks for accessing services related to JSON Schemas in the Synapse REST API\n */\n\nimport SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport { useQuery, UseQueryOptions } from '@tanstack/react-query'\nimport { JSONSchema7 } from 'json-schema'\n\nexport function useGetSchema(\n schema$id: string,\n options?: Partial<UseQueryOptions<JSONSchema7, SynapseClientError>>,\n) {\n const { keyFactory } = useSynapseContext()\n return useQuery({\n ...options,\n queryKey: keyFactory.getValidationSchemaQueryKey(schema$id),\n\n queryFn: async () => {\n const response = await SynapseClient.getValidationSchema(schema$id)\n return response.validationSchema\n },\n })\n}\n"],"mappings":";;;;AAUA,SAAgB,EACd,GACA,GACA;CACA,IAAM,EAAE,kBAAe,GAAmB;AAC1C,QAAO,EAAS;EACd,GAAG;EACH,UAAU,EAAW,4BAA4B,EAAU;EAE3D,SAAS,aAEA,MADgB,EAAc,oBAAoB,EAAU,EACnD;EAEnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadToS3.js","names":[],"sources":["../../../src/synapse-queries/file/UploadToS3.ts"],"sourcesContent":["import { ProgressCallback } from '@/synapse-client/index'\nimport { S3 } from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\n\n/**\n * Directly (from the client runtime, e.g. browser) uploads a file to an\n * S3-compatible storage service.\n */\nexport async function uploadToS3(\n blob: Blob,\n fileKey: string,\n endpoint: string,\n accessKey: string,\n secretKey: string,\n bucketName: string,\n contentType: string,\n abortController: AbortController | undefined,\n progressCallback: ((progress: ProgressCallback) => void) | undefined,\n) {\n const s3Client = new S3({\n endpoint,\n region: 'us-east-1',\n credentials: {\n accessKeyId: accessKey,\n secretAccessKey: secretKey,\n },\n forcePathStyle: true,\n })\n\n const upload = new Upload({\n client: s3Client,\n params: {\n Bucket: bucketName,\n Key: fileKey,\n ContentType: contentType,\n Body: blob,\n },\n abortController,\n leavePartsOnError: true,\n })\n\n upload.on('httpUploadProgress', progress => {\n if (progressCallback) {\n progressCallback({\n value: progress.loaded || 0,\n total: progress.total || 1,\n })\n }\n })\n\n await upload.done()\n}\n"],"mappings":";;;AAQA,eAAsB,EACpB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA;CAWA,IAAM,IAAS,IAAI,EAAO;EACxB,QAXe,IAAI,EAAG;GACtB;GACA,QAAQ;GACR,aAAa;IACX,aAAa;IACb,iBAAiB;IAClB;GACD,gBAAgB;GACjB,CAAC;EAIA,QAAQ;GACN,QAAQ;GACR,KAAK;GACL,aAAa;GACb,MAAM;GACP;EACD;EACA,mBAAmB;EACpB,CAAC;AAWF,CATA,EAAO,GAAG,uBAAsB,MAAY;AAC1C,EAAI,KACF,EAAiB;GACf,OAAO,EAAS,UAAU;GAC1B,OAAO,EAAS,SAAS;GAC1B,CAAC;GAEJ,EAEF,MAAM,EAAO,MAAM"}
1
+ {"version":3,"file":"UploadToS3.js","names":[],"sources":["../../../src/synapse-queries/file/UploadToS3.ts"],"sourcesContent":["import { ProgressCallback } from '@/synapse-client/index'\nimport { S3 } from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\n\n/**\n * Directly (from the client runtime, e.g. browser) uploads a file to an\n * S3-compatible storage service.\n */\nexport async function uploadToS3(\n blob: Blob,\n fileKey: string,\n endpoint: string,\n accessKey: string,\n secretKey: string,\n bucketName: string,\n contentType: string,\n abortController: AbortController | undefined,\n progressCallback: ((progress: ProgressCallback) => void) | undefined,\n) {\n const s3Client = new S3({\n endpoint,\n region: 'us-east-1',\n credentials: {\n accessKeyId: accessKey,\n secretAccessKey: secretKey,\n },\n forcePathStyle: true,\n })\n\n const upload = new Upload({\n client: s3Client,\n params: {\n Bucket: bucketName,\n Key: fileKey,\n ContentType: contentType,\n Body: blob,\n },\n abortController,\n leavePartsOnError: true,\n })\n\n upload.on('httpUploadProgress', progress => {\n if (progressCallback) {\n progressCallback({\n value: progress.loaded || 0,\n total: progress.total || 1,\n })\n }\n })\n\n await upload.done()\n}\n"],"mappings":";;;AAQA,eAAsB,EACpB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA;CAWA,IAAM,IAAS,IAAI,EAAO;EACxB,QAAQ,IAXW,EAAG;GACtB;GACA,QAAQ;GACR,aAAa;IACX,aAAa;IACb,iBAAiB;IAClB;GACD,gBAAgB;GACjB,CAGS;EACR,QAAQ;GACN,QAAQ;GACR,KAAK;GACL,aAAa;GACb,MAAM;GACP;EACD;EACA,mBAAmB;EACpB,CAAC;AAWF,CATA,EAAO,GAAG,uBAAsB,MAAY;AAC1C,EAAI,KACF,EAAiB;GACf,OAAO,EAAS,UAAU;GAC1B,OAAO,EAAS,SAAS;GAC1B,CAAC;GAEJ,EAEF,MAAM,EAAO,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDirectUploadToS3.js","names":[],"sources":["../../../src/synapse-queries/file/useDirectUploadToS3.ts"],"sourcesContent":["import { calculateMd5 } from '@/synapse-client/SynapseClient'\nimport { ExternalObjectStoreFileHandle } from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\nimport { FileUploadArgs } from './FileUploadArgs'\nimport { uploadToS3 } from './UploadToS3'\nimport { useCreateExternalFileHandle } from './useFileHandle'\n\ntype UseDirectUploadToS3Args = FileUploadArgs & {\n readonly accessKey: string\n readonly secretKey: string\n readonly bucketName: string\n readonly endpoint: string\n readonly keyPrefixUUID: string\n}\n\n/**\n * Mutation used to directly upload a file to an S3-compatible API and create a\n * Synapse ExternalObjectStoreFileHandle pointing to the uploaded file.\n */\nexport function useDirectUploadToS3(\n options?: UseMutationOptions<\n ExternalObjectStoreFileHandle,\n unknown,\n UseDirectUploadToS3Args\n >,\n) {\n const { mutateAsync: createExternalFileHandle } =\n useCreateExternalFileHandle()\n return useMutation({\n ...options,\n mutationFn: async (args: UseDirectUploadToS3Args) => {\n const {\n accessKey,\n secretKey,\n bucketName,\n endpoint,\n fileName,\n contentType,\n blob,\n progressCallback,\n keyPrefixUUID,\n storageLocationId,\n onMd5Computed,\n abortController,\n } = args\n const md5 = await calculateMd5(blob)\n if (onMd5Computed) {\n onMd5Computed()\n }\n\n const fileKey = `${keyPrefixUUID}/${fileName}`\n\n await uploadToS3(\n blob,\n fileKey,\n endpoint,\n accessKey,\n secretKey,\n bucketName,\n contentType,\n abortController,\n progressCallback,\n )\n\n const newFileHandle = (await createExternalFileHandle({\n externalFileHandleInterface: {\n concreteType:\n 'org.sagebionetworks.repo.model.file.ExternalObjectStoreFileHandle',\n contentMd5: md5,\n contentSize: blob.size,\n contentType,\n fileKey,\n fileName,\n storageLocationId,\n },\n })) as ExternalObjectStoreFileHandle\n\n return newFileHandle\n },\n })\n}\n"],"mappings":";;;;;AAmBA,SAAgB,EACd,GAKA;CACA,IAAM,EAAE,aAAa,MACnB,GAA6B;AAC/B,QAAO,EAAY;EACjB,GAAG;EACH,YAAY,OAAO,MAAkC;GACnD,IAAM,EACJ,cACA,cACA,eACA,aACA,aACA,gBACA,SACA,qBACA,kBACA,sBACA,kBACA,uBACE,GACE,IAAM,MAAM,EAAa,EAAK;AACpC,GAAI,KACF,GAAe;GAGjB,IAAM,IAAU,GAAG,EAAc,GAAG;AA2BpC,UAzBA,MAAM,EACJ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EAEsB,MAAM,EAAyB,EACpD,6BAA6B;IAC3B,cACE;IACF,YAAY;IACZ,aAAa,EAAK;IAClB;IACA;IACA;IACA;IACD,EACF,CAAC;;EAIL,CAAC"}
1
+ {"version":3,"file":"useDirectUploadToS3.js","names":[],"sources":["../../../src/synapse-queries/file/useDirectUploadToS3.ts"],"sourcesContent":["import { calculateMd5 } from '@/synapse-client/SynapseClient'\nimport { ExternalObjectStoreFileHandle } from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\nimport { FileUploadArgs } from './FileUploadArgs'\nimport { uploadToS3 } from './UploadToS3'\nimport { useCreateExternalFileHandle } from './useFileHandle'\n\ntype UseDirectUploadToS3Args = FileUploadArgs & {\n readonly accessKey: string\n readonly secretKey: string\n readonly bucketName: string\n readonly endpoint: string\n readonly keyPrefixUUID: string\n}\n\n/**\n * Mutation used to directly upload a file to an S3-compatible API and create a\n * Synapse ExternalObjectStoreFileHandle pointing to the uploaded file.\n */\nexport function useDirectUploadToS3(\n options?: UseMutationOptions<\n ExternalObjectStoreFileHandle,\n unknown,\n UseDirectUploadToS3Args\n >,\n) {\n const { mutateAsync: createExternalFileHandle } =\n useCreateExternalFileHandle()\n return useMutation({\n ...options,\n mutationFn: async (args: UseDirectUploadToS3Args) => {\n const {\n accessKey,\n secretKey,\n bucketName,\n endpoint,\n fileName,\n contentType,\n blob,\n progressCallback,\n keyPrefixUUID,\n storageLocationId,\n onMd5Computed,\n abortController,\n } = args\n const md5 = await calculateMd5(blob)\n if (onMd5Computed) {\n onMd5Computed()\n }\n\n const fileKey = `${keyPrefixUUID}/${fileName}`\n\n await uploadToS3(\n blob,\n fileKey,\n endpoint,\n accessKey,\n secretKey,\n bucketName,\n contentType,\n abortController,\n progressCallback,\n )\n\n const newFileHandle = (await createExternalFileHandle({\n externalFileHandleInterface: {\n concreteType:\n 'org.sagebionetworks.repo.model.file.ExternalObjectStoreFileHandle',\n contentMd5: md5,\n contentSize: blob.size,\n contentType,\n fileKey,\n fileName,\n storageLocationId,\n },\n })) as ExternalObjectStoreFileHandle\n\n return newFileHandle\n },\n })\n}\n"],"mappings":";;;;;AAmBA,SAAgB,EACd,GAKA;CACA,IAAM,EAAE,aAAa,MACnB,GAA6B;AAC/B,QAAO,EAAY;EACjB,GAAG;EACH,YAAY,OAAO,MAAkC;GACnD,IAAM,EACJ,cACA,cACA,eACA,aACA,aACA,gBACA,SACA,qBACA,kBACA,sBACA,kBACA,uBACE,GACE,IAAM,MAAM,EAAa,EAAK;AACpC,GAAI,KACF,GAAe;GAGjB,IAAM,IAAU,GAAG,EAAc,GAAG;AA2BpC,UAzBA,MAAM,EACJ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EAeM,MAbsB,EAAyB,EACpD,6BAA6B;IAC3B,cACE;IACF,YAAY;IACZ,aAAa,EAAK;IAClB;IACA;IACA;IACA;IACD,EACF,CAAC;;EAIL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFiles.js","names":[],"sources":["../../../src/synapse-queries/file/useFiles.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { fetchBlob, useCreateUrlForData } from '@/utils/hooks'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n BatchFileRequest,\n BatchFileResult,\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport {\n useQuery,\n useQueryClient,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query'\nimport { cloneDeep } from 'lodash-es'\nimport { useEffect } from 'react'\n\nexport type StablePresignedUrl = {\n dataUrl?: string\n queryResult: UseQueryResult<Blob, SynapseClientError>\n}\n\nexport function useGetStablePresignedUrl(\n fileHandleAssociation: FileHandleAssociation,\n forceAnonymous: boolean = false,\n options?: Partial<\n Omit<UseQueryOptions<Blob, SynapseClientError>, 'staleTime'>\n >,\n): StablePresignedUrl | undefined {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const batchFileResult = await SynapseClient.getFiles(\n {\n requestedFiles: [fileHandleAssociation],\n includeFileHandles: false,\n includePreSignedURLs: true,\n includePreviewPreSignedURLs: false,\n },\n forceAnonymous ? undefined : accessToken,\n )\n return await fetchBlob(batchFileResult.requestedFiles[0].preSignedURL!)\n }\n const queryResult = useQuery({\n ...options,\n queryKey: keyFactory.getStablePresignedUrlFromFHAQueryKey(\n fileHandleAssociation,\n forceAnonymous,\n ),\n queryFn,\n staleTime: Infinity,\n })\n const { data: blob, error } = queryResult\n\n useEffect(() => {\n if (error) {\n console.error(\n `Failed to fetch file object. See network log for details: FileHandleAssociation=${JSON.stringify(\n fileHandleAssociation,\n )}`,\n )\n }\n }, [error, fileHandleAssociation])\n return { dataUrl: useCreateUrlForData(blob), queryResult }\n}\n\nexport function useGetPresignedUrlContent(\n fileHandle: FileHandle,\n request: BatchFileRequest,\n maxFileSizeBytes?: number,\n options?: Partial<\n Omit<UseQueryOptions<string, SynapseClientError>, 'staleTime'>\n >,\n) {\n if (request.requestedFiles.length !== 1) {\n console.warn('useGetPresignedUrlContent only supports one file at a time')\n }\n const { accessToken, keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const batchFileResult = await SynapseClient.getFiles(request, accessToken)\n const data = await SynapseClient.getFileHandleContent(\n fileHandle,\n batchFileResult.requestedFiles[0].preSignedURL!,\n maxFileSizeBytes,\n )\n return data\n }\n return useQuery<string, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getPresignedUrlContentQueryKey(\n fileHandle,\n request,\n maxFileSizeBytes,\n ),\n queryFn,\n staleTime: Infinity,\n })\n}\n\nexport function useGetPresignedUrlContentFromFHA(\n fileHandleAssociation: FileHandleAssociation,\n forceAnonymous: boolean = false,\n options?: Partial<\n Omit<UseQueryOptions<string, SynapseClientError>, 'staleTime'>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const batchFileResult = await SynapseClient.getFiles(\n {\n requestedFiles: [fileHandleAssociation],\n includeFileHandles: true,\n includePreSignedURLs: true,\n includePreviewPreSignedURLs: false,\n },\n forceAnonymous ? undefined : accessToken,\n )\n\n const data = await SynapseClient.getFileHandleContent(\n batchFileResult.requestedFiles[0].fileHandle!,\n batchFileResult.requestedFiles[0].preSignedURL!,\n )\n return data\n }\n return useQuery<string, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getPresignedUrlFromFHAContentQueryKey(\n fileHandleAssociation,\n forceAnonymous,\n ),\n queryFn,\n staleTime: Infinity,\n })\n}\n\n/**\n * Get a blob containing the image data for the avatar of a Synapse user. Returns null if the user does not have a profile image.\n */\nexport function useGetProfileImage(\n userId: string,\n options?: Partial<\n Omit<UseQueryOptions<Blob | null, SynapseClientError>, 'staleTime'>\n >,\n) {\n const { keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const presignedUrl = await SynapseClient.getProfilePicPreviewPresignedUrl(\n userId,\n )\n if (presignedUrl) {\n // Fetch the presigned URL right away because it will expire\n const data = await fetch(presignedUrl, {\n method: 'GET',\n mode: 'cors',\n cache: 'no-cache',\n })\n return await data.blob()\n }\n return null\n }\n return useQuery<Blob | null, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getProfileImageQueryKey(userId),\n queryFn,\n staleTime: Infinity,\n })\n}\n\n/**\n * Get a batch of file handle data from the backend.\n *\n * This hook does not support fetching pre-signed URLs. In most web UI cases, you will want to either request the presigned\n * URL upon an invoked action (e.g. a \"download\" button is clicked) or use {@link SynapseClient#getPortalFileHandleServletUrl}\n * @param request\n * @param options\n */\nexport function useGetFileBatch(\n request: BatchFileRequest,\n options?: Partial<UseQueryOptions<BatchFileResult, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n const queryFn = async () => {\n const response = await SynapseClient.getFiles(request, accessToken)\n\n // Update the cache with the individual file handle results, in case this was a batch\n response.requestedFiles.forEach(fileResult => {\n const requestedItem = request.requestedFiles.find(\n fha => fha.fileHandleId === fileResult.fileHandleId,\n )!\n const atomicRequest: BatchFileRequest = {\n ...cloneDeep(request),\n requestedFiles: [requestedItem],\n }\n const atomicResult: BatchFileResult = {\n requestedFiles: [fileResult],\n }\n queryClient.setQueryData(\n keyFactory.getBatchOfFiles(atomicRequest),\n atomicResult,\n )\n })\n return response\n }\n\n if (request.includePreSignedURLs || request.includePreviewPreSignedURLs) {\n // Don't use this hook if you need pre-signed URLs. They expire every 30 seconds, so you will either end up giving the\n // user an expired URL, or making requests to the backend more frequently than necessary.\n throw new Error('useGetFileBatch does not support pre-signed URLs.')\n }\n\n return useQuery<BatchFileResult, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getBatchOfFiles(request),\n queryFn,\n })\n}\n\nexport function useFileContent(\n fileURL: string,\n options?: Partial<UseQueryOptions<string>>,\n) {\n const { keyFactory } = useSynapseContext()\n const queryFn = async () => {\n try {\n if (!fileURL) {\n throw new Error(`File URL must be set`)\n }\n // Fetch the raw file contents from the latest tag\n const fileResponse = await fetch(fileURL)\n if (!fileResponse.ok) {\n throw new Error(`Error fetching file: ${fileResponse.statusText}`)\n }\n\n return await fileResponse.text()\n } catch (error) {\n console.error(error)\n }\n return ''\n }\n return useQuery<string>({\n ...options,\n queryKey: keyFactory.getFileContentKey(fileURL),\n queryFn,\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useFiles.js","names":[],"sources":["../../../src/synapse-queries/file/useFiles.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { fetchBlob, useCreateUrlForData } from '@/utils/hooks'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n BatchFileRequest,\n BatchFileResult,\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport {\n useQuery,\n useQueryClient,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query'\nimport { cloneDeep } from 'lodash-es'\nimport { useEffect } from 'react'\n\nexport type StablePresignedUrl = {\n dataUrl?: string\n queryResult: UseQueryResult<Blob, SynapseClientError>\n}\n\nexport function useGetStablePresignedUrl(\n fileHandleAssociation: FileHandleAssociation,\n forceAnonymous: boolean = false,\n options?: Partial<\n Omit<UseQueryOptions<Blob, SynapseClientError>, 'staleTime'>\n >,\n): StablePresignedUrl | undefined {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const batchFileResult = await SynapseClient.getFiles(\n {\n requestedFiles: [fileHandleAssociation],\n includeFileHandles: false,\n includePreSignedURLs: true,\n includePreviewPreSignedURLs: false,\n },\n forceAnonymous ? undefined : accessToken,\n )\n return await fetchBlob(batchFileResult.requestedFiles[0].preSignedURL!)\n }\n const queryResult = useQuery({\n ...options,\n queryKey: keyFactory.getStablePresignedUrlFromFHAQueryKey(\n fileHandleAssociation,\n forceAnonymous,\n ),\n queryFn,\n staleTime: Infinity,\n })\n const { data: blob, error } = queryResult\n\n useEffect(() => {\n if (error) {\n console.error(\n `Failed to fetch file object. See network log for details: FileHandleAssociation=${JSON.stringify(\n fileHandleAssociation,\n )}`,\n )\n }\n }, [error, fileHandleAssociation])\n return { dataUrl: useCreateUrlForData(blob), queryResult }\n}\n\nexport function useGetPresignedUrlContent(\n fileHandle: FileHandle,\n request: BatchFileRequest,\n maxFileSizeBytes?: number,\n options?: Partial<\n Omit<UseQueryOptions<string, SynapseClientError>, 'staleTime'>\n >,\n) {\n if (request.requestedFiles.length !== 1) {\n console.warn('useGetPresignedUrlContent only supports one file at a time')\n }\n const { accessToken, keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const batchFileResult = await SynapseClient.getFiles(request, accessToken)\n const data = await SynapseClient.getFileHandleContent(\n fileHandle,\n batchFileResult.requestedFiles[0].preSignedURL!,\n maxFileSizeBytes,\n )\n return data\n }\n return useQuery<string, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getPresignedUrlContentQueryKey(\n fileHandle,\n request,\n maxFileSizeBytes,\n ),\n queryFn,\n staleTime: Infinity,\n })\n}\n\nexport function useGetPresignedUrlContentFromFHA(\n fileHandleAssociation: FileHandleAssociation,\n forceAnonymous: boolean = false,\n options?: Partial<\n Omit<UseQueryOptions<string, SynapseClientError>, 'staleTime'>\n >,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const batchFileResult = await SynapseClient.getFiles(\n {\n requestedFiles: [fileHandleAssociation],\n includeFileHandles: true,\n includePreSignedURLs: true,\n includePreviewPreSignedURLs: false,\n },\n forceAnonymous ? undefined : accessToken,\n )\n\n const data = await SynapseClient.getFileHandleContent(\n batchFileResult.requestedFiles[0].fileHandle!,\n batchFileResult.requestedFiles[0].preSignedURL!,\n )\n return data\n }\n return useQuery<string, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getPresignedUrlFromFHAContentQueryKey(\n fileHandleAssociation,\n forceAnonymous,\n ),\n queryFn,\n staleTime: Infinity,\n })\n}\n\n/**\n * Get a blob containing the image data for the avatar of a Synapse user. Returns null if the user does not have a profile image.\n */\nexport function useGetProfileImage(\n userId: string,\n options?: Partial<\n Omit<UseQueryOptions<Blob | null, SynapseClientError>, 'staleTime'>\n >,\n) {\n const { keyFactory } = useSynapseContext()\n const queryFn = async () => {\n const presignedUrl = await SynapseClient.getProfilePicPreviewPresignedUrl(\n userId,\n )\n if (presignedUrl) {\n // Fetch the presigned URL right away because it will expire\n const data = await fetch(presignedUrl, {\n method: 'GET',\n mode: 'cors',\n cache: 'no-cache',\n })\n return await data.blob()\n }\n return null\n }\n return useQuery<Blob | null, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getProfileImageQueryKey(userId),\n queryFn,\n staleTime: Infinity,\n })\n}\n\n/**\n * Get a batch of file handle data from the backend.\n *\n * This hook does not support fetching pre-signed URLs. In most web UI cases, you will want to either request the presigned\n * URL upon an invoked action (e.g. a \"download\" button is clicked) or use {@link SynapseClient#getPortalFileHandleServletUrl}\n * @param request\n * @param options\n */\nexport function useGetFileBatch(\n request: BatchFileRequest,\n options?: Partial<UseQueryOptions<BatchFileResult, SynapseClientError>>,\n) {\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n const queryFn = async () => {\n const response = await SynapseClient.getFiles(request, accessToken)\n\n // Update the cache with the individual file handle results, in case this was a batch\n response.requestedFiles.forEach(fileResult => {\n const requestedItem = request.requestedFiles.find(\n fha => fha.fileHandleId === fileResult.fileHandleId,\n )!\n const atomicRequest: BatchFileRequest = {\n ...cloneDeep(request),\n requestedFiles: [requestedItem],\n }\n const atomicResult: BatchFileResult = {\n requestedFiles: [fileResult],\n }\n queryClient.setQueryData(\n keyFactory.getBatchOfFiles(atomicRequest),\n atomicResult,\n )\n })\n return response\n }\n\n if (request.includePreSignedURLs || request.includePreviewPreSignedURLs) {\n // Don't use this hook if you need pre-signed URLs. They expire every 30 seconds, so you will either end up giving the\n // user an expired URL, or making requests to the backend more frequently than necessary.\n throw new Error('useGetFileBatch does not support pre-signed URLs.')\n }\n\n return useQuery<BatchFileResult, SynapseClientError>({\n ...options,\n queryKey: keyFactory.getBatchOfFiles(request),\n queryFn,\n })\n}\n\nexport function useFileContent(\n fileURL: string,\n options?: Partial<UseQueryOptions<string>>,\n) {\n const { keyFactory } = useSynapseContext()\n const queryFn = async () => {\n try {\n if (!fileURL) {\n throw new Error(`File URL must be set`)\n }\n // Fetch the raw file contents from the latest tag\n const fileResponse = await fetch(fileURL)\n if (!fileResponse.ok) {\n throw new Error(`Error fetching file: ${fileResponse.statusText}`)\n }\n\n return await fileResponse.text()\n } catch (error) {\n console.error(error)\n }\n return ''\n }\n return useQuery<string>({\n ...options,\n queryKey: keyFactory.getFileContentKey(fileURL),\n queryFn,\n })\n}\n"],"mappings":"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"}