synapse-react-client 4.0.35 → 4.0.37

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 (511) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +24 -0
  3. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -0
  4. package/dist/aridhia-queries/AridhiaKeyFactory.js +49 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -0
  6. package/dist/aridhia-queries/FairFormPayload.d.ts +45 -0
  7. package/dist/aridhia-queries/FairFormPayload.d.ts.map +1 -0
  8. package/dist/aridhia-queries/FairFormPayload.js +0 -0
  9. package/dist/aridhia-queries/TransferType.d.ts +10 -0
  10. package/dist/aridhia-queries/TransferType.d.ts.map +1 -0
  11. package/dist/aridhia-queries/TransferType.js +0 -0
  12. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  13. package/dist/aridhia-queries/index.d.ts +12 -0
  14. package/dist/aridhia-queries/index.d.ts.map +1 -1
  15. package/dist/aridhia-queries/index.js +12 -2
  16. package/dist/aridhia-queries/useAridhiaQuery.d.ts +38 -0
  17. package/dist/aridhia-queries/useAridhiaQuery.d.ts.map +1 -0
  18. package/dist/aridhia-queries/useAridhiaQuery.js +78 -0
  19. package/dist/aridhia-queries/useAridhiaQuery.js.map +1 -0
  20. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.d.ts +6 -0
  21. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.d.ts.map +1 -0
  22. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.js +13 -0
  23. package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.js.map +1 -0
  24. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.d.ts +6 -0
  25. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.d.ts.map +1 -0
  26. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.js +13 -0
  27. package/dist/aridhia-queries/useGetAridhiaDatasetSettings.js.map +1 -0
  28. package/dist/aridhia-queries/useGetAridhiaDictionaries.d.ts +6 -0
  29. package/dist/aridhia-queries/useGetAridhiaDictionaries.d.ts.map +1 -0
  30. package/dist/aridhia-queries/useGetAridhiaDictionaries.js +13 -0
  31. package/dist/aridhia-queries/useGetAridhiaDictionaries.js.map +1 -0
  32. package/dist/aridhia-queries/useGetAridhiaRequests.d.ts +5 -4
  33. package/dist/aridhia-queries/useGetAridhiaRequests.d.ts.map +1 -1
  34. package/dist/aridhia-queries/useGetAridhiaRequests.js +11 -18
  35. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  36. package/dist/aridhia-queries/useGetAridhiaWorkflow.d.ts +13 -0
  37. package/dist/aridhia-queries/useGetAridhiaWorkflow.d.ts.map +1 -0
  38. package/dist/aridhia-queries/useGetAridhiaWorkflow.js +19 -0
  39. package/dist/aridhia-queries/useGetAridhiaWorkflow.js.map +1 -0
  40. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.d.ts +6 -0
  41. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.d.ts.map +1 -0
  42. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.js +13 -0
  43. package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.js.map +1 -0
  44. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.d.ts +19 -0
  45. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.d.ts.map +1 -0
  46. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.js +17 -0
  47. package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.js.map +1 -0
  48. package/dist/aridhia-queries/useGetAridhiaWorkspaces.d.ts +6 -0
  49. package/dist/aridhia-queries/useGetAridhiaWorkspaces.d.ts.map +1 -0
  50. package/dist/aridhia-queries/useGetAridhiaWorkspaces.js +19 -0
  51. package/dist/aridhia-queries/useGetAridhiaWorkspaces.js.map +1 -0
  52. package/dist/aridhia-queries/useSubmitAridhiaDar.d.ts +27 -0
  53. package/dist/aridhia-queries/useSubmitAridhiaDar.d.ts.map +1 -0
  54. package/dist/aridhia-queries/useSubmitAridhiaDar.js +38 -0
  55. package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -0
  56. package/dist/assets/icons/emailWithNotification.js +15 -15
  57. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  58. package/dist/assets/icons/emailWithNotification.svg +13 -13
  59. package/dist/components/AccessRequirement/EntityActionsRequired.d.ts +0 -1
  60. package/dist/components/AccessRequirement/EntityActionsRequired.d.ts.map +1 -1
  61. package/dist/components/AccessRequirement/EntityActionsRequired.js +3 -6
  62. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  63. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  64. package/dist/components/AccessRequirementList/AccessRequirementList.js +65 -57
  65. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  66. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  67. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +1 -1
  68. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  69. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  70. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +67 -57
  71. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  72. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  73. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +33 -32
  74. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  75. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  76. package/dist/components/Aridhia/AridhiaAccessStatus.js +39 -18
  77. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  78. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts +32 -0
  79. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts.map +1 -0
  80. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js +285 -0
  81. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js.map +1 -0
  82. package/dist/components/Aridhia/DarWizard/DarAboutStep.d.ts +4 -0
  83. package/dist/components/Aridhia/DarWizard/DarAboutStep.d.ts.map +1 -0
  84. package/dist/components/Aridhia/DarWizard/DarAboutStep.js +17 -0
  85. package/dist/components/Aridhia/DarWizard/DarAboutStep.js.map +1 -0
  86. package/dist/components/Aridhia/DarWizard/DarCompleteStep.d.ts +27 -0
  87. package/dist/components/Aridhia/DarWizard/DarCompleteStep.d.ts.map +1 -0
  88. package/dist/components/Aridhia/DarWizard/DarCompleteStep.js +96 -0
  89. package/dist/components/Aridhia/DarWizard/DarCompleteStep.js.map +1 -0
  90. package/dist/components/Aridhia/DarWizard/DarDestinationStep.d.ts +28 -0
  91. package/dist/components/Aridhia/DarWizard/DarDestinationStep.d.ts.map +1 -0
  92. package/dist/components/Aridhia/DarWizard/DarDestinationStep.js +128 -0
  93. package/dist/components/Aridhia/DarWizard/DarDestinationStep.js.map +1 -0
  94. package/dist/components/Aridhia/DarWizard/DarProjectStep.d.ts +4 -0
  95. package/dist/components/Aridhia/DarWizard/DarProjectStep.d.ts.map +1 -0
  96. package/dist/components/Aridhia/DarWizard/DarProjectStep.js +17 -0
  97. package/dist/components/Aridhia/DarWizard/DarProjectStep.js.map +1 -0
  98. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts +13 -0
  99. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -0
  100. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +23 -0
  101. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -0
  102. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +11 -0
  103. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -0
  104. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +47 -0
  105. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -0
  106. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.d.ts +16 -0
  107. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.d.ts.map +1 -0
  108. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.js +33 -0
  109. package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.js.map +1 -0
  110. package/dist/components/Aridhia/DarWizard/useDarDraft.d.ts +32 -0
  111. package/dist/components/Aridhia/DarWizard/useDarDraft.d.ts.map +1 -0
  112. package/dist/components/Aridhia/DarWizard/useDarDraft.js +44 -0
  113. package/dist/components/Aridhia/DarWizard/useDarDraft.js.map +1 -0
  114. package/dist/components/Aridhia/FairLabelField.d.ts +8 -0
  115. package/dist/components/Aridhia/FairLabelField.d.ts.map +1 -0
  116. package/dist/components/Aridhia/FairLabelField.js +13 -0
  117. package/dist/components/Aridhia/FairLabelField.js.map +1 -0
  118. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +3 -3
  119. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
  120. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +1 -1
  121. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  122. package/dist/components/Aridhia/fairFormToRjsf.d.ts +36 -0
  123. package/dist/components/Aridhia/fairFormToRjsf.d.ts.map +1 -0
  124. package/dist/components/Aridhia/fairFormToRjsf.js +137 -0
  125. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -0
  126. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.d.ts.map +1 -1
  127. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +2 -2
  128. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  129. package/dist/components/CardContainer/CardConfiguration.d.ts +8 -0
  130. package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
  131. package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
  132. package/dist/components/CardContainer/CardContainer.js +1 -1
  133. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  134. package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
  135. package/dist/components/ChallengeSubmission/ChallengeSubmission.js +2 -2
  136. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  137. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.d.ts.map +1 -1
  138. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +3 -3
  139. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  140. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +1 -1
  141. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  142. package/dist/components/ChangePassword/ChangePasswordWithToken.d.ts.map +1 -1
  143. package/dist/components/ChangePassword/ChangePasswordWithToken.js +58 -23
  144. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  145. package/dist/components/ChangePassword/useChangePasswordFormState.d.ts.map +1 -1
  146. package/dist/components/ChangePassword/useChangePasswordFormState.js +13 -3
  147. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  148. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js +2 -2
  149. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  150. package/dist/components/CreateTableViewWizard/TableNameForm.d.ts.map +1 -1
  151. package/dist/components/CreateTableViewWizard/TableNameForm.js +11 -14
  152. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  153. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  154. package/dist/components/DataGrid/SynapseGrid.js +121 -117
  155. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  156. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts +1 -1
  157. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  158. package/dist/components/DataGrid/SyncGridWithSourceButton.js +55 -61
  159. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  160. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts +21 -1
  161. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts.map +1 -1
  162. package/dist/components/DataGrid/columns/DateTimeColumn.js +73 -29
  163. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  164. package/dist/components/DataGrid/columns/NumberColumn.d.ts +31 -0
  165. package/dist/components/DataGrid/columns/NumberColumn.d.ts.map +1 -0
  166. package/dist/components/DataGrid/columns/NumberColumn.js +27 -0
  167. package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -0
  168. package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts +1 -0
  169. package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts.map +1 -1
  170. package/dist/components/DataGrid/components/ReorderColumnsButton.js +17 -16
  171. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  172. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts +2 -0
  173. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  174. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +104 -65
  175. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  176. package/dist/components/DataGrid/components/contextMenu.d.ts.map +1 -1
  177. package/dist/components/DataGrid/components/contextMenu.js +15 -15
  178. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  179. package/dist/components/DataGrid/useDataGridWebsocket.js +1 -1
  180. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  181. package/dist/components/DataGrid/useMergeGridWithSource.d.ts +1 -5
  182. package/dist/components/DataGrid/useMergeGridWithSource.d.ts.map +1 -1
  183. package/dist/components/DataGrid/useMergeGridWithSource.js +21 -28
  184. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  185. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  186. package/dist/components/DataGrid/utils/columnFactory.js +55 -51
  187. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  188. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.d.ts.map +1 -1
  189. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js +9 -8
  190. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js.map +1 -1
  191. package/dist/components/DatasetHosting/DatasetDownloadButton.d.ts +40 -0
  192. package/dist/components/DatasetHosting/DatasetDownloadButton.d.ts.map +1 -0
  193. package/dist/components/DatasetHosting/DatasetDownloadButton.js +124 -0
  194. package/dist/components/DatasetHosting/DatasetDownloadButton.js.map +1 -0
  195. package/dist/components/DatasetHosting/DatasetHosting.d.ts +97 -0
  196. package/dist/components/DatasetHosting/DatasetHosting.d.ts.map +1 -0
  197. package/dist/components/DatasetHosting/DatasetHosting.js +64 -0
  198. package/dist/components/DatasetHosting/DatasetHosting.js.map +1 -0
  199. package/dist/components/DatasetHosting/DatasetHostingAdornment.d.ts +15 -0
  200. package/dist/components/DatasetHosting/DatasetHostingAdornment.d.ts.map +1 -0
  201. package/dist/components/DatasetHosting/DatasetHostingAdornment.js +23 -0
  202. package/dist/components/DatasetHosting/DatasetHostingAdornment.js.map +1 -0
  203. package/dist/components/DatasetHosting/index.d.ts +7 -0
  204. package/dist/components/DatasetHosting/index.d.ts.map +1 -0
  205. package/dist/components/DatasetHosting/index.js +4 -0
  206. package/dist/components/DownloadCart/ActionRequiredListItem.d.ts +0 -2
  207. package/dist/components/DownloadCart/ActionRequiredListItem.d.ts.map +1 -1
  208. package/dist/components/DownloadCart/ActionRequiredListItem.js +2 -3
  209. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  210. package/dist/components/DownloadCart/DownloadCartPage.d.ts +1 -2
  211. package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
  212. package/dist/components/DownloadCart/DownloadCartPage.js +49 -49
  213. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  214. package/dist/components/DownloadCart/DownloadListActionsRequired.d.ts +1 -5
  215. package/dist/components/DownloadCart/DownloadListActionsRequired.d.ts.map +1 -1
  216. package/dist/components/DownloadCart/DownloadListActionsRequired.js +5 -6
  217. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  218. package/dist/components/DownloadCart/RequestDownloadCard.d.ts +0 -2
  219. package/dist/components/DownloadCart/RequestDownloadCard.d.ts.map +1 -1
  220. package/dist/components/DownloadCart/RequestDownloadCard.js +28 -32
  221. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  222. package/dist/components/DownloadCart/TableQueryActionsRequired.d.ts +0 -2
  223. package/dist/components/DownloadCart/TableQueryActionsRequired.d.ts.map +1 -1
  224. package/dist/components/DownloadCart/TableQueryActionsRequired.js +7 -8
  225. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  226. package/dist/components/DownloadCart/index.d.ts +1 -2
  227. package/dist/components/DownloadCart/index.d.ts.map +1 -1
  228. package/dist/components/DropdownSelect/DropdownSelect.d.ts.map +1 -1
  229. package/dist/components/DropdownSelect/DropdownSelect.js +1 -1
  230. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  231. package/dist/components/EntityFinder/tree/EntityTree.d.ts.map +1 -1
  232. package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
  233. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  234. package/dist/components/EntityFinder/tree/VirtualizedTree.js +1 -1
  235. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  236. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +1 -1
  237. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  238. package/dist/components/GenericCard/CardActionButtonStyleContext.d.ts +10 -0
  239. package/dist/components/GenericCard/CardActionButtonStyleContext.d.ts.map +1 -0
  240. package/dist/components/GenericCard/CardActionButtonStyleContext.js +10 -0
  241. package/dist/components/GenericCard/CardActionButtonStyleContext.js.map +1 -0
  242. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +41 -41
  243. package/dist/components/GenericCard/GenericCardActionButton.d.ts +5 -0
  244. package/dist/components/GenericCard/GenericCardActionButton.d.ts.map +1 -1
  245. package/dist/components/GenericCard/GenericCardActionButton.js +28 -11
  246. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  247. package/dist/components/GenericCard/TableRowGenericCard.d.ts +24 -0
  248. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  249. package/dist/components/GenericCard/TableRowGenericCard.js +158 -137
  250. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  251. package/dist/components/JSONArrayEditor/JSONArrayEditor.d.ts.map +1 -1
  252. package/dist/components/JSONArrayEditor/JSONArrayEditor.js +42 -42
  253. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  254. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +9 -0
  255. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
  256. package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -0
  257. package/dist/components/JsonSchemaForm/JsonSchemaForm.d.ts.map +1 -1
  258. package/dist/components/JsonSchemaForm/JsonSchemaForm.js +15 -13
  259. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  260. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +5 -0
  261. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -0
  262. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +109 -0
  263. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.d.ts.map +1 -1
  264. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js +1 -1
  265. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  266. package/dist/components/JsonSchemaForm/templates/FieldTemplate.d.ts.map +1 -1
  267. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js +6 -6
  268. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  269. package/dist/components/JsonSchemaForm/widgets/DateWidget.d.ts +9 -0
  270. package/dist/components/JsonSchemaForm/widgets/DateWidget.d.ts.map +1 -0
  271. package/dist/components/JsonSchemaForm/widgets/DateWidget.js +23 -0
  272. package/dist/components/JsonSchemaForm/widgets/DateWidget.js.map +1 -0
  273. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.css +1 -1
  274. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.d.ts +3 -2
  275. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.d.ts.map +1 -1
  276. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js +10 -12
  277. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  278. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.js +8 -7
  279. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.js.map +1 -1
  280. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.scss +12 -2
  281. package/dist/components/Markdown/MarkdownEditor.js +1 -1
  282. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  283. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  284. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +46 -46
  285. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  286. package/dist/components/QueryBuilder/QueryBuilderTypes.d.ts +39 -0
  287. package/dist/components/QueryBuilder/QueryBuilderTypes.d.ts.map +1 -0
  288. package/dist/components/QueryBuilder/QueryBuilderTypes.js +11 -0
  289. package/dist/components/QueryBuilder/QueryBuilderTypes.js.map +1 -0
  290. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +48 -0
  291. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -0
  292. package/dist/components/QueryBuilder/queryBuilderTranslation.js +256 -0
  293. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -0
  294. package/dist/components/QueryContext/QueryContext.d.ts +0 -1
  295. package/dist/components/QueryContext/QueryContext.d.ts.map +1 -1
  296. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  297. package/dist/components/QueryWrapper/QueryWrapper.d.ts +0 -1
  298. package/dist/components/QueryWrapper/QueryWrapper.d.ts.map +1 -1
  299. package/dist/components/QueryWrapper/QueryWrapper.js +52 -53
  300. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  301. package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
  302. package/dist/components/QueryWrapperErrorBoundary.js +4 -11
  303. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  304. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +1 -1
  305. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  306. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -2
  307. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  308. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +27 -25
  309. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  310. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.d.ts +0 -9
  311. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.d.ts.map +1 -1
  312. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js +23 -31
  313. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  314. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.d.ts.map +1 -1
  315. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js +126 -125
  316. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  317. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.d.ts.map +1 -1
  318. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js +6 -5
  319. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  320. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +2 -0
  321. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  322. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +18 -13
  323. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  324. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.d.ts.map +1 -1
  325. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js +0 -1
  326. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  327. package/dist/components/ShareThisPage/ShareThisPage.js +30 -29
  328. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  329. package/dist/components/StatisticsPlot.d.ts.map +1 -1
  330. package/dist/components/StatisticsPlot.js +1 -1
  331. package/dist/components/StatisticsPlot.js.map +1 -1
  332. package/dist/components/SynapseChat/GridAgentChat.d.ts.map +1 -1
  333. package/dist/components/SynapseChat/GridAgentChat.js +29 -31
  334. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  335. package/dist/components/SynapseForm/SynapseFormWrapper.js +1 -1
  336. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  337. package/dist/components/SynapseHomepageV2/HotdropsAndNews.css +1 -1
  338. package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.js +9 -9
  339. package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.js.map +1 -1
  340. package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.scss +14 -0
  341. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +1 -1
  342. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  343. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js +1 -1
  344. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  345. package/dist/components/SynapseTable/SynapseTable.d.ts.map +1 -1
  346. package/dist/components/SynapseTable/SynapseTable.js +2 -1
  347. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  348. package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
  349. package/dist/components/SynapseTable/SynapseTableRenderers.js +1 -1
  350. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  351. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts +4 -0
  352. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  353. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +71 -69
  354. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  355. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.d.ts.map +1 -1
  356. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +29 -30
  357. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  358. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +4 -0
  359. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
  360. package/dist/components/SynapseTable/table-top/DownloadOptions.js +14 -13
  361. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  362. package/dist/components/SynapseTable/usePrefetchTableData.js +1 -1
  363. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  364. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js +4 -4
  365. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  366. package/dist/components/TanStackTable/StyledTanStackTable.d.ts +7 -0
  367. package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
  368. package/dist/components/TanStackTable/StyledTanStackTable.js +68 -48
  369. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  370. package/dist/components/TanStackTable/TableCellRenderer.d.ts.map +1 -1
  371. package/dist/components/TanStackTable/TableCellRenderer.js +1 -1
  372. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  373. package/dist/components/TanStackTable/useSyncedTopScrollbar.d.ts +13 -0
  374. package/dist/components/TanStackTable/useSyncedTopScrollbar.d.ts.map +1 -0
  375. package/dist/components/TanStackTable/useSyncedTopScrollbar.js +32 -0
  376. package/dist/components/TanStackTable/useSyncedTopScrollbar.js.map +1 -0
  377. package/dist/components/TermsAndConditions/TermsAndConditions.js +1 -1
  378. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  379. package/dist/components/Webhook/CreateWebhookModal.d.ts.map +1 -1
  380. package/dist/components/Webhook/CreateWebhookModal.js +1 -1
  381. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  382. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  383. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +172 -61
  384. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  385. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.d.ts +3 -0
  386. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.d.ts.map +1 -1
  387. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.js +2 -2
  388. package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.js.map +1 -1
  389. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map +1 -1
  390. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js +11 -9
  391. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  392. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.d.ts.map +1 -1
  393. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +74 -43
  394. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  395. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.d.ts.map +1 -1
  396. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js +2 -2
  397. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  398. package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
  399. package/dist/components/doi/CreateOrUpdateDoiModal.js +15 -18
  400. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  401. package/dist/components/entity/metadata/EntityModal.js +1 -1
  402. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  403. package/dist/components/entity/page/action_menu/EntityActionMenu.js +2 -2
  404. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  405. package/dist/components/index.d.ts +1 -0
  406. package/dist/components/index.d.ts.map +1 -1
  407. package/dist/components/index.js +144 -140
  408. package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
  409. package/dist/components/menu/DropdownMenu.js +7 -7
  410. package/dist/components/menu/DropdownMenu.js.map +1 -1
  411. package/dist/components/row_renderers/Dataset.js +1 -1
  412. package/dist/components/row_renderers/Dataset.js.map +1 -1
  413. package/dist/components/styled/LeftRightPanel.d.ts +8 -0
  414. package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
  415. package/dist/components/styled/LeftRightPanel.js +10 -1
  416. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  417. package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
  418. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  419. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  420. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +1 -1
  421. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  422. package/dist/components/widgets/query-filter/FacetFilterControls.js +1 -1
  423. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  424. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  425. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +1 -1
  426. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  427. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +5 -5
  428. package/dist/index.js +174 -171
  429. package/dist/index.js.map +1 -1
  430. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +73 -0
  431. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -0
  432. package/dist/mocks/msw/handlers/aridhiaHandlers.js +119 -0
  433. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -0
  434. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  435. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +31 -27
  436. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  437. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  438. package/dist/mocks/msw/handlers/entityHandlers.js +4 -4
  439. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  440. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.d.ts +1 -0
  441. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.d.ts.map +1 -1
  442. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js +7 -1
  443. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  444. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  445. package/dist/mocks/msw/handlers/userProfileHandlers.js +6 -2
  446. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  447. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  448. package/dist/mocks/msw/handlers.js +72 -69
  449. package/dist/mocks/msw/handlers.js.map +1 -1
  450. package/dist/style/components/_all.scss +0 -1
  451. package/dist/style/components/_cards.scss +4 -2
  452. package/dist/style/components/_terms-and-conditions.scss +25 -3
  453. package/dist/style/main.css +1 -1
  454. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  455. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  456. package/dist/synapse-queries/KeyFactory.js +3 -0
  457. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  458. package/dist/synapse-queries/dataaccess/index.js +4 -4
  459. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +7 -0
  460. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  461. package/dist/synapse-queries/dataaccess/useEDuc.js +11 -3
  462. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  463. package/dist/synapse-queries/index.js +190 -189
  464. package/dist/testutils/RjsfFormTestUtils.js +12 -0
  465. package/dist/testutils/RjsfFormTestUtils.js.map +1 -0
  466. package/dist/tsconfig.build.tsbuildinfo +1 -1
  467. package/dist/utils/APIConstants.d.ts +1 -0
  468. package/dist/utils/APIConstants.d.ts.map +1 -1
  469. package/dist/utils/APIConstants.js +2 -2
  470. package/dist/utils/APIConstants.js.map +1 -1
  471. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -4
  472. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  473. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  474. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  475. package/dist/utils/functions/QueryFilterUtils.js +1 -1
  476. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  477. package/dist/utils/functions/RegularExpressions.d.ts +10 -0
  478. package/dist/utils/functions/RegularExpressions.d.ts.map +1 -1
  479. package/dist/utils/functions/RegularExpressions.js +7 -1
  480. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  481. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  482. package/dist/utils/functions/SqlFunctions.js +20 -4
  483. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  484. package/dist/utils/functions/queryUtils.js +1 -1
  485. package/dist/utils/functions/queryUtils.js.map +1 -1
  486. package/dist/utils/hooks/useDetectSSOCode.d.ts.map +1 -1
  487. package/dist/utils/hooks/useDetectSSOCode.js +1 -1
  488. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  489. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js +1 -1
  490. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  491. package/dist/utils/index.js +16 -16
  492. package/dist/utils/jsonschema/SchemaAnnotationUtils.js +1 -1
  493. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  494. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +22 -0
  495. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -0
  496. package/dist/utils/jsonschema/collectTopLevelProperties.js +31 -0
  497. package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -0
  498. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
  499. package/dist/utils/jsonschema/getSchemaPropertyInfo.js +1 -1
  500. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  501. package/dist/utils/types/IsType.d.ts +4 -1
  502. package/dist/utils/types/IsType.d.ts.map +1 -1
  503. package/dist/utils/types/IsType.js +4 -4
  504. package/dist/utils/types/IsType.js.map +1 -1
  505. package/dist/utils/types/index.js +2 -2
  506. package/package.json +5 -5
  507. package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts +0 -12
  508. package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts.map +0 -1
  509. package/dist/components/DataGrid/useMergeGridWithRecordSet.js +0 -25
  510. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +0 -1
  511. package/dist/style/components/_annotations.scss +0 -110
@@ -1 +1 @@
1
- {"version":3,"file":"useDetectSSOCode.js","names":[],"sources":["../../../src/utils/hooks/useDetectSSOCode.ts"],"sourcesContent":["import {\n bindOAuthProviderToAccount,\n getRootURL,\n oAuthIdentityRequest,\n oAuthRegisterAccountStep2,\n oAuthSessionRequest,\n setAccessTokenCookie,\n} from '@/synapse-client'\nimport { OAuth2State } from '@/utils/types'\nimport { OAuthValidationRequestProviderEnum } from '@sage-bionetworks/synapse-client'\nimport { TwoFactorAuthErrorResponse } from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport { LoginResponse } from '@sage-bionetworks/synapse-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { BackendDestinationEnum } from '../functions'\nimport { CSRF_TOKEN_STORAGE_KEY, OAUTH2_PROVIDERS } from '../SynapseConstants'\nimport { useOneSageURL } from './useOneSageURL'\n\nfunction safeLocalStorageGetItem(key: string): string | null {\n try {\n return localStorage.getItem(key)\n } catch (err) {\n console.warn(`Unable to read from localStorage: ${key}`, err)\n return null\n }\n}\n\nfunction safeLocalStorageRemoveItem(key: string): void {\n try {\n localStorage.removeItem(key)\n } catch (err) {\n console.warn(`Unable to remove from localStorage: ${key}`, err)\n }\n}\n\nexport type UseDetectSSOCodeReturnType = {\n /* true iff SSO login has occurred and the completion of the OAuth flow in Synapse is pending */\n isLoading: boolean\n}\n\nexport type UseDetectSSOCodeOptions = {\n onSignInComplete?: () => void\n registerAccountUrl?: string\n onError?: (err: unknown) => void\n onTwoFactorAuthRequired?: (resp: TwoFactorAuthErrorResponse) => void\n onTwoFactorAuthResetTokenPresent?: (\n resp: TwoFactorAuthErrorResponse,\n encodedTwoFaResetToken: string,\n ) => void\n isInitializingSession: boolean\n isAuthenticated: boolean\n}\n\n/*\n * During SSO login, the authorization provider (Google, ORCiD, ArcusBio Okta, ...) will send the user back to the portal with an authorization code,\n * which can be exchanged for a Synapse user session. This function should be called whenever the root App is initialized\n * (to look for this code parameter and complete the round-trip). If state is included, then we assume that this is being\n * used for account creation, where we pass the username through the process.\n */\nexport default function useDetectSSOCode(\n opts: UseDetectSSOCodeOptions = {\n isInitializingSession: true,\n isAuthenticated: false,\n },\n): UseDetectSSOCodeReturnType {\n const defaultRegisterAccountURL = useOneSageURL('/register1')\n\n const {\n onSignInComplete,\n registerAccountUrl = defaultRegisterAccountURL.toString(),\n onError,\n onTwoFactorAuthRequired,\n onTwoFactorAuthResetTokenPresent,\n isInitializingSession,\n isAuthenticated,\n } = opts\n const redirectURL = getRootURL()\n // 'code' handling (from SSO) should be preformed on the root page, and then redirect to original route.\n // Use 'http://localhost/' as a placeholder during SSR (no browser URL available).\n // Since there is no 'code' or 'provider' in this placeholder URL, the rest of the hook is a no-op.\n const fullUrl: URL = new URL(\n typeof window !== 'undefined' ? window.location.href : 'http://localhost/',\n )\n // in test environment the searchParams isn't defined\n const { searchParams } = fullUrl\n const code = searchParams?.get('code')\n const provider = searchParams?.get('provider')\n\n // If the URL contains a client_id and redirect_uri, then we are acting as an identity provider for an external OAuth client\n const isHandlingSynapseOAuthSignIn = Boolean(\n searchParams?.get('client_id') && searchParams?.get('redirect_uri'),\n )\n\n // If the Synapse user signed in with an external IdP, we may have passed data in the 'state' param\n // Parse it (if appropriate)\n const state: OAuth2State | null = useMemo(() => {\n // If we are acting as an OIDC identity provider, then we should not parse the state param -- it was sent to us, and we should return it untouched\n if (!isHandlingSynapseOAuthSignIn) {\n const encodedState = searchParams?.get('state')\n try {\n return encodedState\n ? (JSON.parse(decodeURIComponent(encodedState)) as OAuth2State)\n : null\n } catch (e) {\n console.error(\n 'Error parsing state param:\\n',\n e,\n '\\nEncoded value:\\n',\n encodedState,\n )\n }\n }\n return null\n }, [isHandlingSynapseOAuthSignIn, searchParams])\n\n const [isLoading, setIsLoading] = useState(!!(code && provider))\n\n useEffect(() => {\n if (!isInitializingSession) {\n if (code && provider) {\n if (!isHandlingSynapseOAuthSignIn) {\n const storedCsrfToken = safeLocalStorageGetItem(\n CSRF_TOKEN_STORAGE_KEY,\n )\n\n const expectedCsrfToken = state?.csrfToken ?? null\n const tokensMatch =\n typeof expectedCsrfToken === 'string' &&\n typeof storedCsrfToken === 'string' &&\n expectedCsrfToken === storedCsrfToken\n\n if (!tokensMatch) {\n safeLocalStorageRemoveItem(CSRF_TOKEN_STORAGE_KEY)\n console.error(\n 'Invalid or missing OAuth CSRF token detected. Aborting OAuth flow.',\n )\n if (onError) {\n onError('Invalid OAuth state. Please try signing in again.')\n }\n setIsLoading(false)\n return\n }\n\n safeLocalStorageRemoveItem(CSRF_TOKEN_STORAGE_KEY)\n }\n\n const redirectUrl = `${redirectURL}?provider=${provider}`\n\n //If user is already logged in, and the provider is ORCID, then try to bind this OAuth provider to the account.\n if (OAUTH2_PROVIDERS.ORCID == provider && isAuthenticated) {\n // now bind this to the user account\n const onFailure = (err: SynapseClientError) => {\n console.error('Error binding ORCiD to account: ', err)\n if (onError) {\n onError(err.reason)\n }\n }\n bindOAuthProviderToAccount(\n provider,\n code,\n redirectUrl,\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n .then(onSignInComplete)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n } else if (\n OAUTH2_PROVIDERS.NIH_RESEARCHER_AUTH_SERVICE == provider &&\n isAuthenticated\n ) {\n // RAS does not provide an alias, so bind via the identity endpoint\n const onFailure = (err: SynapseClientError) => {\n console.error('Error binding NIH RAS identity to account: ', err)\n if (onError) {\n onError(err.reason)\n }\n }\n oAuthIdentityRequest(\n provider as OAuthValidationRequestProviderEnum,\n String(code),\n redirectUrl,\n )\n .then(onSignInComplete)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n } else if (\n OAUTH2_PROVIDERS.GOOGLE == provider ||\n OAUTH2_PROVIDERS.ORCID == provider ||\n OAUTH2_PROVIDERS.ARCUS == provider ||\n OAUTH2_PROVIDERS.SAGE_BIONETWORKS == provider ||\n OAUTH2_PROVIDERS.NIH_RESEARCHER_AUTH_SERVICE == provider\n ) {\n const onSuccess = (\n response: LoginResponse | TwoFactorAuthErrorResponse | null,\n ) => {\n if (response) {\n if ('accessToken' in response) {\n setAccessTokenCookie(response.accessToken).then(\n onSignInComplete,\n )\n } else {\n // The app will redirect or open a modal to handle a standard 2FA sign in\n if (onTwoFactorAuthRequired) {\n onTwoFactorAuthRequired(response)\n }\n if (\n // The user logged in with OAuth while attempting to disable 2FA using an emailed signed token\n state &&\n state.twoFaResetToken &&\n onTwoFactorAuthResetTokenPresent\n ) {\n // Let the app handle redirecting to the 2FA reset page\n onTwoFactorAuthResetTokenPresent(\n response,\n state.twoFaResetToken,\n )\n }\n }\n }\n }\n const onFailure = (err: SynapseClientError) => {\n if (err.status === 404) {\n if (OAUTH2_PROVIDERS.NIH_RESEARCHER_AUTH_SERVICE == provider) {\n // RAS cannot create a Synapse account (no alias). Surface an\n // explicit error instead of redirecting to registration.\n console.error(\n 'No Synapse account is linked to this NIH RAS identity: ',\n err,\n )\n if (onError) {\n onError(\n 'No Synapse account is linked to this NIH RAS identity. Sign in to Synapse and link your NIH RAS identity from your account settings.',\n )\n }\n return\n }\n // Synapse account not found, send to registration page\n window.location.replace(registerAccountUrl)\n }\n console.error('Error with account login: ', err)\n if (onError) {\n onError(err.reason)\n }\n }\n\n if (\n (OAUTH2_PROVIDERS.GOOGLE == provider ||\n OAUTH2_PROVIDERS.ARCUS == provider ||\n OAUTH2_PROVIDERS.SAGE_BIONETWORKS == provider) &&\n state?.registrationUsername\n ) {\n oAuthRegisterAccountStep2(\n state.registrationUsername,\n provider,\n code,\n redirectUrl,\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n .then(onSuccess)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n } else {\n oAuthSessionRequest(\n provider,\n code,\n redirectUrl,\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n .then(onSuccess)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n }\n } else {\n console.warn('Unknown SSO Provider: ', provider)\n setIsLoading(false)\n }\n }\n }\n // Intentionally only monitoring initialization of the session -- only running on mount after the session detection has completed since this uses URL params that come from a redirect\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [isInitializingSession])\n\n return { isLoading }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useDetectSSOCode.js","names":[],"sources":["../../../src/utils/hooks/useDetectSSOCode.ts"],"sourcesContent":["import {\n bindOAuthProviderToAccount,\n getRootURL,\n oAuthIdentityRequest,\n oAuthRegisterAccountStep2,\n oAuthSessionRequest,\n setAccessTokenCookie,\n} from '@/synapse-client'\nimport { OAuth2State } from '@/utils/types'\nimport { OAuthValidationRequestProviderEnum } from '@sage-bionetworks/synapse-client'\nimport { TwoFactorAuthErrorResponse } from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport { LoginResponse } from '@sage-bionetworks/synapse-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { BackendDestinationEnum } from '../functions'\nimport { CSRF_TOKEN_STORAGE_KEY, OAUTH2_PROVIDERS } from '../SynapseConstants'\nimport { useOneSageURL } from './useOneSageURL'\n\nfunction safeLocalStorageGetItem(key: string): string | null {\n try {\n return localStorage.getItem(key)\n } catch (err) {\n console.warn(`Unable to read from localStorage: ${key}`, err)\n return null\n }\n}\n\nfunction safeLocalStorageRemoveItem(key: string): void {\n try {\n localStorage.removeItem(key)\n } catch (err) {\n console.warn(`Unable to remove from localStorage: ${key}`, err)\n }\n}\n\nexport type UseDetectSSOCodeReturnType = {\n /* true iff SSO login has occurred and the completion of the OAuth flow in Synapse is pending */\n isLoading: boolean\n}\n\nexport type UseDetectSSOCodeOptions = {\n onSignInComplete?: () => void\n registerAccountUrl?: string\n onError?: (err: unknown) => void\n onTwoFactorAuthRequired?: (resp: TwoFactorAuthErrorResponse) => void\n onTwoFactorAuthResetTokenPresent?: (\n resp: TwoFactorAuthErrorResponse,\n encodedTwoFaResetToken: string,\n ) => void\n isInitializingSession: boolean\n isAuthenticated: boolean\n}\n\n/*\n * During SSO login, the authorization provider (Google, ORCiD, ArcusBio Okta, ...) will send the user back to the portal with an authorization code,\n * which can be exchanged for a Synapse user session. This function should be called whenever the root App is initialized\n * (to look for this code parameter and complete the round-trip). If state is included, then we assume that this is being\n * used for account creation, where we pass the username through the process.\n */\nexport default function useDetectSSOCode(\n opts: UseDetectSSOCodeOptions = {\n isInitializingSession: true,\n isAuthenticated: false,\n },\n): UseDetectSSOCodeReturnType {\n const defaultRegisterAccountURL = useOneSageURL('/register1')\n\n const {\n onSignInComplete,\n registerAccountUrl = defaultRegisterAccountURL.toString(),\n onError,\n onTwoFactorAuthRequired,\n onTwoFactorAuthResetTokenPresent,\n isInitializingSession,\n isAuthenticated,\n } = opts\n const redirectURL = getRootURL()\n // 'code' handling (from SSO) should be preformed on the root page, and then redirect to original route.\n // Use 'http://localhost/' as a placeholder during SSR (no browser URL available).\n // Since there is no 'code' or 'provider' in this placeholder URL, the rest of the hook is a no-op.\n const fullUrl: URL = new URL(\n typeof window !== 'undefined' ? window.location.href : 'http://localhost/',\n )\n // in test environment the searchParams isn't defined\n const { searchParams } = fullUrl\n const code = searchParams?.get('code')\n const provider = searchParams?.get('provider')\n\n // If the URL contains a client_id and redirect_uri, then we are acting as an identity provider for an external OAuth client\n const isHandlingSynapseOAuthSignIn = Boolean(\n searchParams?.get('client_id') && searchParams?.get('redirect_uri'),\n )\n\n // If the Synapse user signed in with an external IdP, we may have passed data in the 'state' param\n // Parse it (if appropriate)\n const state: OAuth2State | null = useMemo(() => {\n // If we are acting as an OIDC identity provider, then we should not parse the state param -- it was sent to us, and we should return it untouched\n if (!isHandlingSynapseOAuthSignIn) {\n const encodedState = searchParams?.get('state')\n try {\n return encodedState\n ? (JSON.parse(decodeURIComponent(encodedState)) as OAuth2State)\n : null\n } catch (e) {\n console.error(\n 'Error parsing state param:\\n',\n e,\n '\\nEncoded value:\\n',\n encodedState,\n )\n }\n }\n return null\n }, [isHandlingSynapseOAuthSignIn, searchParams])\n\n const [isLoading, setIsLoading] = useState(!!(code && provider))\n\n useEffect(() => {\n if (!isInitializingSession) {\n if (code && provider) {\n if (!isHandlingSynapseOAuthSignIn) {\n const storedCsrfToken = safeLocalStorageGetItem(\n CSRF_TOKEN_STORAGE_KEY,\n )\n\n const expectedCsrfToken = state?.csrfToken ?? null\n const tokensMatch =\n typeof expectedCsrfToken === 'string' &&\n typeof storedCsrfToken === 'string' &&\n expectedCsrfToken === storedCsrfToken\n\n if (!tokensMatch) {\n safeLocalStorageRemoveItem(CSRF_TOKEN_STORAGE_KEY)\n console.error(\n 'Invalid or missing OAuth CSRF token detected. Aborting OAuth flow.',\n )\n if (onError) {\n onError('Invalid OAuth state. Please try signing in again.')\n }\n setIsLoading(false)\n return\n }\n\n safeLocalStorageRemoveItem(CSRF_TOKEN_STORAGE_KEY)\n }\n\n const redirectUrl = `${redirectURL}?provider=${provider}`\n\n //If user is already logged in, and the provider is ORCID, then try to bind this OAuth provider to the account.\n if (OAUTH2_PROVIDERS.ORCID == provider && isAuthenticated) {\n // now bind this to the user account\n const onFailure = (err: SynapseClientError) => {\n console.error('Error binding ORCiD to account: ', err)\n if (onError) {\n onError(err.reason)\n }\n }\n bindOAuthProviderToAccount(\n provider,\n code,\n redirectUrl,\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n .then(onSignInComplete)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n } else if (\n OAUTH2_PROVIDERS.NIH_RESEARCHER_AUTH_SERVICE == provider &&\n isAuthenticated\n ) {\n // RAS does not provide an alias, so bind via the identity endpoint\n const onFailure = (err: SynapseClientError) => {\n console.error('Error binding NIH RAS identity to account: ', err)\n if (onError) {\n onError(err.reason)\n }\n }\n oAuthIdentityRequest(\n provider as OAuthValidationRequestProviderEnum,\n String(code),\n redirectUrl,\n )\n .then(onSignInComplete)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n } else if (\n OAUTH2_PROVIDERS.GOOGLE == provider ||\n OAUTH2_PROVIDERS.ORCID == provider ||\n OAUTH2_PROVIDERS.ARCUS == provider ||\n OAUTH2_PROVIDERS.SAGE_BIONETWORKS == provider ||\n OAUTH2_PROVIDERS.NIH_RESEARCHER_AUTH_SERVICE == provider\n ) {\n const onSuccess = (\n response: LoginResponse | TwoFactorAuthErrorResponse | null,\n ) => {\n if (response) {\n if ('accessToken' in response) {\n setAccessTokenCookie(response.accessToken).then(\n onSignInComplete,\n )\n } else {\n // The app will redirect or open a modal to handle a standard 2FA sign in\n if (onTwoFactorAuthRequired) {\n onTwoFactorAuthRequired(response)\n }\n if (\n // The user logged in with OAuth while attempting to disable 2FA using an emailed signed token\n state?.twoFaResetToken &&\n onTwoFactorAuthResetTokenPresent\n ) {\n // Let the app handle redirecting to the 2FA reset page\n onTwoFactorAuthResetTokenPresent(\n response,\n state.twoFaResetToken,\n )\n }\n }\n }\n }\n const onFailure = (err: SynapseClientError) => {\n if (err.status === 404) {\n if (OAUTH2_PROVIDERS.NIH_RESEARCHER_AUTH_SERVICE == provider) {\n // RAS cannot create a Synapse account (no alias). Surface an\n // explicit error instead of redirecting to registration.\n console.error(\n 'No Synapse account is linked to this NIH RAS identity: ',\n err,\n )\n if (onError) {\n onError(\n 'No Synapse account is linked to this NIH RAS identity. Sign in to Synapse and link your NIH RAS identity from your account settings.',\n )\n }\n return\n }\n // Synapse account not found, send to registration page\n window.location.replace(registerAccountUrl)\n }\n console.error('Error with account login: ', err)\n if (onError) {\n onError(err.reason)\n }\n }\n\n if (\n (OAUTH2_PROVIDERS.GOOGLE == provider ||\n OAUTH2_PROVIDERS.ARCUS == provider ||\n OAUTH2_PROVIDERS.SAGE_BIONETWORKS == provider) &&\n state?.registrationUsername\n ) {\n oAuthRegisterAccountStep2(\n state.registrationUsername,\n provider,\n code,\n redirectUrl,\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n .then(onSuccess)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n } else {\n oAuthSessionRequest(\n provider,\n code,\n redirectUrl,\n BackendDestinationEnum.REPO_ENDPOINT,\n )\n .then(onSuccess)\n .catch(onFailure)\n .finally(() => setIsLoading(false))\n }\n } else {\n console.warn('Unknown SSO Provider: ', provider)\n setIsLoading(false)\n }\n }\n }\n // Intentionally only monitoring initialization of the session -- only running on mount after the session detection has completed since this uses URL params that come from a redirect\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [isInitializingSession])\n\n return { isLoading }\n}\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ var d = 750;
11
11
  function f(e, t, i, a, s) {
12
12
  o(() => {
13
13
  e && n(t, a.query).then((e) => {
14
- e && e.query && i((t) => ({
14
+ e?.query && i((t) => ({
15
15
  ...t,
16
16
  ...e,
17
17
  query: {
@@ -1 +1 @@
1
- {"version":3,"file":"useImmutableTableQuery.js","names":[],"sources":["../../../../src/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.ts"],"sourcesContent":["import { UniqueFacetIdentifier } from '@/utils/types/UniqueFacetIdentifier'\nimport {\n QueryBundleRequest,\n QueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { cloneDeep, isEqual } from 'lodash-es'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { ReadonlyDeep } from 'type-fest'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\nimport * as DeepLinkingUtils from '../../functions/deepLinkingUtils'\nimport { removeEmptyQueryParams } from '../../functions/queryUtils'\nimport { parseEntityIdAndVersionFromSqlStatement } from '../../functions/SqlFunctions'\nimport { DEFAULT_PAGE_SIZE } from '../../SynapseConstants'\nimport {\n QueryChangeCommitOptions,\n useTableQueryReducer,\n} from './useTableQueryReducer'\n\nexport type ImmutableTableQueryResult = {\n /** The ID of the table parsed from the SQL query */\n entityId?: string\n /** The version number of the table parsed from the SQL query */\n versionNumber?: number\n /** The current query request, which is passed on to the server for results */\n currentQueryRequest: ReadonlyDeep<QueryBundleRequest>\n /** The next (uncommitted) query request. This will become the current query request when commitChanges is called, or the configured debounced timer elapses. */\n nextQueryRequest: ReadonlyDeep<QueryBundleRequest>\n /** Resets the debounce timer to delay committing changes in `nextQueryRequest` */\n resetDebounceTimer: () => void\n /** Update the currentQueryRequest to be the nextQueryRequest */\n commitChanges: () => void\n getInitQueryRequest: () => QueryBundleRequest\n getCurrentQueryRequest: () => QueryBundleRequest\n setQuery: (\n queryRequest: React.SetStateAction<QueryBundleRequest>,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n pageSize: number\n /** The current page of results. The first page is `1` */\n currentPage: number\n setPageSize: (pageSize: number) => void\n /** pageNumber is 1-indexed */\n goToPage: (pageNumber: number) => void\n /** Resets the query to the initial state, clearing all user-specified filters */\n resetQuery: () => void\n addValueToSelectedFacet: (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n /** Removes a particular selected facet from the query */\n removeSelectedFacet: (\n facet: UniqueFacetIdentifier | UniqueFacetIdentifier[],\n ) => void\n /** Removes a particular value from a selected facet. If the value is the last value in the FacetColumnRequest, the selected facet will be removed. */\n removeValueFromSelectedFacet: (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n setRangeFacetValue: (\n facet: UniqueFacetIdentifier,\n min?: string,\n max?: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n /** Removes a particular QueryFilter from the query */\n removeQueryFilter: (filter: QueryFilter) => void\n /** Removes a particular value from a QueryFilter. If the value is the last value in the filter, the filter will be removed. */\n removeValueFromQueryFilter: (filter: QueryFilter, value: string) => void\n /** If `requireConfirmationOnChange` is true, this will become true when a function that triggers a query change is invoked. */\n isConfirmingChange: boolean\n /** If `isConfirmingChange` is true, invoke this function to complete the query change */\n onConfirmChange: () => void\n /** If `isConfirmingChange` is true, invoke this function to cancel the query change */\n onCancelChange: () => void\n\n /**\n * TODO: This hook could handle all potential query transformations, such as\n * - addFacetFilter, removeFacetFilter, clearFacetFilters\n * - addAdditionalFilter, remove..., clear...\n *\n * This could be preferable to allowing any QueryContext subscriber to arbitrarily update the query with `setQuery`\n * because we could uniformly handle all complex stateful logic in this hook\n */\n}\n\nexport type UseImmutableTableQueryOptions = {\n /** The initial table query request object */\n initQueryRequest: QueryBundleRequest\n /** Whether the URL should update when the query is modified. */\n shouldDeepLink?: boolean\n /** Unique index for the component on the page so URL updates do not conflict between table query components */\n componentIndex?: number\n /** Callback invoked when the query is modified */\n onQueryChange?: (newQueryJson: string) => void\n /** Whether to require explicit user confirmation before changing the query. */\n requireConfirmationOnChange?: boolean\n}\n\n// When changing the query with the debounce option, the amount of time to wait for additional debounced changes before updating the query\nexport const DEBOUNCE_DELAY_MS = 750\n\n/**\n * Utility to synchronize the URL with the current query request. Synchronization only occurs if `shouldDeepLink` is true.\n * @param shouldDeepLink whether the query should be synchronized with the URL\n * @param componentIndex the index of the component to synchronize with the URL - essential if multiple components to synchronize are on the page\n * @param setQuery - callback used to update the current query\n * @param initQueryRequest - the initial query request passed via props\n * @param currentQueryRequest - the query request that is currently used\n */\nfunction useSynchronizeQueryWithUrl(\n shouldDeepLink: boolean,\n componentIndex: number,\n setQuery: (\n queryRequest: React.SetStateAction<QueryBundleRequest>,\n commitOptions?: QueryChangeCommitOptions,\n ) => void,\n initQueryRequest: QueryBundleRequest,\n currentQueryRequest: QueryBundleRequest,\n) {\n /**\n * Inspect the URL on mount to see if we have a particular query request that we must show.\n */\n useEffect(() => {\n // Only run this effect if deep linking is enabled\n if (shouldDeepLink) {\n DeepLinkingUtils.getQueryRequestFromLink(\n componentIndex,\n initQueryRequest.query,\n ).then(queryRequestFromLink => {\n if (queryRequestFromLink && queryRequestFromLink.query) {\n setQuery(prevState => ({\n ...prevState,\n ...queryRequestFromLink,\n query: {\n ...prevState.query,\n ...queryRequestFromLink.query,\n },\n }))\n }\n })\n }\n // should only run on mount, or if the component index changes\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [componentIndex])\n\n // If `shouldDeepLink` is true, synchronize the URL\n useEffect(() => {\n if (shouldDeepLink) {\n if (isEqual(initQueryRequest, currentQueryRequest)) {\n void DeepLinkingUtils.updateUrlWithNewSearchParam(\n 'qw',\n componentIndex,\n null,\n null,\n ).catch(error => {\n console.error('Failed to update URL with search param:', error)\n })\n } else {\n void DeepLinkingUtils.updateUrlWithNewSearchParam(\n 'qw',\n componentIndex,\n currentQueryRequest.query,\n initQueryRequest.query,\n ).catch(error => {\n console.error('Failed to update URL with search param:', error)\n })\n }\n }\n // Clean up the URL param when this component unmounts or deep linking is disabled\n return () => {\n if (shouldDeepLink) {\n DeepLinkingUtils.updateUrlWithNewSearchParam(\n 'qw',\n componentIndex,\n null,\n initQueryRequest.query,\n )\n }\n }\n }, [componentIndex, currentQueryRequest, initQueryRequest, shouldDeepLink])\n}\n\n/**\n * Custom hook that maintains and manages the state of a Synapse Table query.\n * @param options\n * @returns\n */\nexport default function useImmutableTableQuery(\n options: UseImmutableTableQueryOptions,\n): ImmutableTableQueryResult {\n const {\n initQueryRequest: initQueryRequestFromProps,\n componentIndex = 0,\n shouldDeepLink = false,\n onQueryChange,\n requireConfirmationOnChange = false,\n } = options\n\n const initQueryRequest = useMemo(() => {\n const request = cloneDeep(initQueryRequestFromProps)\n request.query = removeEmptyQueryParams(request.query)\n return request\n }, [initQueryRequestFromProps])\n\n const {\n currentQueryRequest,\n nextQueryRequest,\n isConfirmingChange,\n dispatch,\n } = useTableQueryReducer(\n initQueryRequest,\n requireConfirmationOnChange,\n onQueryChange,\n )\n\n const onConfirmChange = useCallback(() => {\n dispatch({ type: 'confirmChanges' })\n }, [dispatch])\n\n /**\n * Pass down a deep clone (so no side effects on the child's part) of the\n * current query request\n *\n * @returns\n * @memberof QueryWrapper\n */\n const getCurrentQueryRequest = useCallback(() => {\n return cloneDeep(currentQueryRequest)\n }, [currentQueryRequest])\n\n /**\n * Pass down a deep clone (so no side effects on the child's part) of the\n * first query request made\n *\n * @returns\n * @memberof QueryWrapper\n */\n const getInitQueryRequest = useCallback((): QueryBundleRequest => {\n return cloneDeep(initQueryRequest)\n }, [initQueryRequest])\n\n /**\n * Execute the given query request, updating all the data in the QueryContext to match the new query\n * @param {*} queryRequest Query request as specified by\n * https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Query.html\n */\n const setQuery: ImmutableTableQueryResult['setQuery'] = useCallback(\n (\n queryRequest: React.SetStateAction<QueryBundleRequest>,\n commitOptions?: QueryChangeCommitOptions,\n ): void => {\n dispatch({\n type: 'setQuery',\n queryOrUpdater: queryRequest,\n commitOptions,\n })\n },\n [dispatch],\n )\n\n useSynchronizeQueryWithUrl(\n shouldDeepLink,\n componentIndex,\n setQuery,\n initQueryRequest,\n currentQueryRequest,\n )\n\n const onCancelChange = useCallback(() => {\n dispatch({ type: 'cancelChanges' })\n }, [dispatch])\n\n const { entityId, versionNumber } = useMemo(\n () =>\n parseEntityIdAndVersionFromSqlStatement(currentQueryRequest.query.sql),\n [currentQueryRequest.query.sql],\n )\n\n const pageSize = currentQueryRequest.query.limit ?? DEFAULT_PAGE_SIZE\n const currentPage = Math.ceil(\n ((currentQueryRequest.query.offset ?? 0) + Number(pageSize)) / pageSize,\n )\n\n const setPageSize = useCallback(\n (pageSize: number) => {\n dispatch({ type: 'setPageSize', pageSize })\n },\n [dispatch],\n )\n\n const goToPage = useCallback(\n (pageNumber: number) => {\n dispatch({ type: 'goToPage', pageNumber })\n },\n [dispatch],\n )\n\n const resetQuery = useCallback(() => {\n dispatch({\n type: 'resetQuery',\n })\n }, [dispatch])\n\n /* If the initial query changes, then reset the query to match the new prop */\n useDeepCompareEffect(() => {\n if (currentQueryRequest != initQueryRequest) {\n resetQuery()\n }\n }, [initQueryRequest])\n\n const addValueToSelectedFacet = useCallback(\n (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => {\n dispatch({\n type: 'addValueToSelectedFacet',\n facet: facet,\n value: value,\n commitOptions: commitOptions,\n })\n },\n [dispatch],\n )\n\n const setRangeFacetValue = useCallback(\n (\n facet: UniqueFacetIdentifier,\n min?: string,\n max?: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => {\n dispatch({\n type: 'setRangeFacetValue',\n facet,\n min,\n max,\n commitOptions,\n })\n },\n [dispatch],\n )\n\n const removeSelectedFacet = useCallback(\n (facetsToRemove: UniqueFacetIdentifier | UniqueFacetIdentifier[]) => {\n dispatch({\n type: 'removeSelectedFacet',\n facetsToRemove: facetsToRemove,\n })\n },\n [dispatch],\n )\n\n const removeValueFromSelectedFacet = useCallback(\n (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => {\n dispatch({\n type: 'removeValueFromSelectedFacet',\n facet,\n value,\n commitOptions,\n })\n },\n [dispatch],\n )\n\n const removeQueryFilter = useCallback(\n (queryFilter: QueryFilter) => {\n dispatch({\n type: 'removeQueryFilter',\n queryFilter,\n })\n },\n [dispatch],\n )\n\n const removeValueFromQueryFilter = useCallback(\n (queryFilter: QueryFilter, value: string) => {\n dispatch({\n type: 'removeValueFromQueryFilter',\n queryFilter,\n value,\n })\n },\n [dispatch],\n )\n const commitChanges = useCallback(() => {\n dispatch({ type: 'commitChanges' })\n }, [dispatch])\n\n const resetDebounceTimer = useCallback(() => {\n dispatch({ type: 'resetDebounce' })\n }, [dispatch])\n\n return {\n entityId,\n commitChanges,\n resetDebounceTimer,\n currentQueryRequest,\n nextQueryRequest,\n versionNumber,\n getInitQueryRequest,\n getCurrentQueryRequest,\n setQuery,\n pageSize,\n currentPage,\n setPageSize,\n goToPage,\n resetQuery,\n removeSelectedFacet,\n removeValueFromSelectedFacet,\n removeQueryFilter,\n removeValueFromQueryFilter,\n isConfirmingChange,\n onConfirmChange,\n onCancelChange,\n addValueToSelectedFacet,\n setRangeFacetValue,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useImmutableTableQuery.js","names":[],"sources":["../../../../src/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.ts"],"sourcesContent":["import { UniqueFacetIdentifier } from '@/utils/types/UniqueFacetIdentifier'\nimport {\n QueryBundleRequest,\n QueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { cloneDeep, isEqual } from 'lodash-es'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { ReadonlyDeep } from 'type-fest'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\nimport * as DeepLinkingUtils from '../../functions/deepLinkingUtils'\nimport { removeEmptyQueryParams } from '../../functions/queryUtils'\nimport { parseEntityIdAndVersionFromSqlStatement } from '../../functions/SqlFunctions'\nimport { DEFAULT_PAGE_SIZE } from '../../SynapseConstants'\nimport {\n QueryChangeCommitOptions,\n useTableQueryReducer,\n} from './useTableQueryReducer'\n\nexport type ImmutableTableQueryResult = {\n /** The ID of the table parsed from the SQL query */\n entityId?: string\n /** The version number of the table parsed from the SQL query */\n versionNumber?: number\n /** The current query request, which is passed on to the server for results */\n currentQueryRequest: ReadonlyDeep<QueryBundleRequest>\n /** The next (uncommitted) query request. This will become the current query request when commitChanges is called, or the configured debounced timer elapses. */\n nextQueryRequest: ReadonlyDeep<QueryBundleRequest>\n /** Resets the debounce timer to delay committing changes in `nextQueryRequest` */\n resetDebounceTimer: () => void\n /** Update the currentQueryRequest to be the nextQueryRequest */\n commitChanges: () => void\n getInitQueryRequest: () => QueryBundleRequest\n getCurrentQueryRequest: () => QueryBundleRequest\n setQuery: (\n queryRequest: React.SetStateAction<QueryBundleRequest>,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n pageSize: number\n /** The current page of results. The first page is `1` */\n currentPage: number\n setPageSize: (pageSize: number) => void\n /** pageNumber is 1-indexed */\n goToPage: (pageNumber: number) => void\n /** Resets the query to the initial state, clearing all user-specified filters */\n resetQuery: () => void\n addValueToSelectedFacet: (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n /** Removes a particular selected facet from the query */\n removeSelectedFacet: (\n facet: UniqueFacetIdentifier | UniqueFacetIdentifier[],\n ) => void\n /** Removes a particular value from a selected facet. If the value is the last value in the FacetColumnRequest, the selected facet will be removed. */\n removeValueFromSelectedFacet: (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n setRangeFacetValue: (\n facet: UniqueFacetIdentifier,\n min?: string,\n max?: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => void\n /** Removes a particular QueryFilter from the query */\n removeQueryFilter: (filter: QueryFilter) => void\n /** Removes a particular value from a QueryFilter. If the value is the last value in the filter, the filter will be removed. */\n removeValueFromQueryFilter: (filter: QueryFilter, value: string) => void\n /** If `requireConfirmationOnChange` is true, this will become true when a function that triggers a query change is invoked. */\n isConfirmingChange: boolean\n /** If `isConfirmingChange` is true, invoke this function to complete the query change */\n onConfirmChange: () => void\n /** If `isConfirmingChange` is true, invoke this function to cancel the query change */\n onCancelChange: () => void\n\n /**\n * TODO: This hook could handle all potential query transformations, such as\n * - addFacetFilter, removeFacetFilter, clearFacetFilters\n * - addAdditionalFilter, remove..., clear...\n *\n * This could be preferable to allowing any QueryContext subscriber to arbitrarily update the query with `setQuery`\n * because we could uniformly handle all complex stateful logic in this hook\n */\n}\n\nexport type UseImmutableTableQueryOptions = {\n /** The initial table query request object */\n initQueryRequest: QueryBundleRequest\n /** Whether the URL should update when the query is modified. */\n shouldDeepLink?: boolean\n /** Unique index for the component on the page so URL updates do not conflict between table query components */\n componentIndex?: number\n /** Callback invoked when the query is modified */\n onQueryChange?: (newQueryJson: string) => void\n /** Whether to require explicit user confirmation before changing the query. */\n requireConfirmationOnChange?: boolean\n}\n\n// When changing the query with the debounce option, the amount of time to wait for additional debounced changes before updating the query\nexport const DEBOUNCE_DELAY_MS = 750\n\n/**\n * Utility to synchronize the URL with the current query request. Synchronization only occurs if `shouldDeepLink` is true.\n * @param shouldDeepLink whether the query should be synchronized with the URL\n * @param componentIndex the index of the component to synchronize with the URL - essential if multiple components to synchronize are on the page\n * @param setQuery - callback used to update the current query\n * @param initQueryRequest - the initial query request passed via props\n * @param currentQueryRequest - the query request that is currently used\n */\nfunction useSynchronizeQueryWithUrl(\n shouldDeepLink: boolean,\n componentIndex: number,\n setQuery: (\n queryRequest: React.SetStateAction<QueryBundleRequest>,\n commitOptions?: QueryChangeCommitOptions,\n ) => void,\n initQueryRequest: QueryBundleRequest,\n currentQueryRequest: QueryBundleRequest,\n) {\n /**\n * Inspect the URL on mount to see if we have a particular query request that we must show.\n */\n useEffect(() => {\n // Only run this effect if deep linking is enabled\n if (shouldDeepLink) {\n DeepLinkingUtils.getQueryRequestFromLink(\n componentIndex,\n initQueryRequest.query,\n ).then(queryRequestFromLink => {\n if (queryRequestFromLink?.query) {\n setQuery(prevState => ({\n ...prevState,\n ...queryRequestFromLink,\n query: {\n ...prevState.query,\n ...queryRequestFromLink.query,\n },\n }))\n }\n })\n }\n // should only run on mount, or if the component index changes\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [componentIndex])\n\n // If `shouldDeepLink` is true, synchronize the URL\n useEffect(() => {\n if (shouldDeepLink) {\n if (isEqual(initQueryRequest, currentQueryRequest)) {\n void DeepLinkingUtils.updateUrlWithNewSearchParam(\n 'qw',\n componentIndex,\n null,\n null,\n ).catch(error => {\n console.error('Failed to update URL with search param:', error)\n })\n } else {\n void DeepLinkingUtils.updateUrlWithNewSearchParam(\n 'qw',\n componentIndex,\n currentQueryRequest.query,\n initQueryRequest.query,\n ).catch(error => {\n console.error('Failed to update URL with search param:', error)\n })\n }\n }\n // Clean up the URL param when this component unmounts or deep linking is disabled\n return () => {\n if (shouldDeepLink) {\n DeepLinkingUtils.updateUrlWithNewSearchParam(\n 'qw',\n componentIndex,\n null,\n initQueryRequest.query,\n )\n }\n }\n }, [componentIndex, currentQueryRequest, initQueryRequest, shouldDeepLink])\n}\n\n/**\n * Custom hook that maintains and manages the state of a Synapse Table query.\n * @param options\n * @returns\n */\nexport default function useImmutableTableQuery(\n options: UseImmutableTableQueryOptions,\n): ImmutableTableQueryResult {\n const {\n initQueryRequest: initQueryRequestFromProps,\n componentIndex = 0,\n shouldDeepLink = false,\n onQueryChange,\n requireConfirmationOnChange = false,\n } = options\n\n const initQueryRequest = useMemo(() => {\n const request = cloneDeep(initQueryRequestFromProps)\n request.query = removeEmptyQueryParams(request.query)\n return request\n }, [initQueryRequestFromProps])\n\n const {\n currentQueryRequest,\n nextQueryRequest,\n isConfirmingChange,\n dispatch,\n } = useTableQueryReducer(\n initQueryRequest,\n requireConfirmationOnChange,\n onQueryChange,\n )\n\n const onConfirmChange = useCallback(() => {\n dispatch({ type: 'confirmChanges' })\n }, [dispatch])\n\n /**\n * Pass down a deep clone (so no side effects on the child's part) of the\n * current query request\n *\n * @returns\n * @memberof QueryWrapper\n */\n const getCurrentQueryRequest = useCallback(() => {\n return cloneDeep(currentQueryRequest)\n }, [currentQueryRequest])\n\n /**\n * Pass down a deep clone (so no side effects on the child's part) of the\n * first query request made\n *\n * @returns\n * @memberof QueryWrapper\n */\n const getInitQueryRequest = useCallback((): QueryBundleRequest => {\n return cloneDeep(initQueryRequest)\n }, [initQueryRequest])\n\n /**\n * Execute the given query request, updating all the data in the QueryContext to match the new query\n * @param {*} queryRequest Query request as specified by\n * https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Query.html\n */\n const setQuery: ImmutableTableQueryResult['setQuery'] = useCallback(\n (\n queryRequest: React.SetStateAction<QueryBundleRequest>,\n commitOptions?: QueryChangeCommitOptions,\n ): void => {\n dispatch({\n type: 'setQuery',\n queryOrUpdater: queryRequest,\n commitOptions,\n })\n },\n [dispatch],\n )\n\n useSynchronizeQueryWithUrl(\n shouldDeepLink,\n componentIndex,\n setQuery,\n initQueryRequest,\n currentQueryRequest,\n )\n\n const onCancelChange = useCallback(() => {\n dispatch({ type: 'cancelChanges' })\n }, [dispatch])\n\n const { entityId, versionNumber } = useMemo(\n () =>\n parseEntityIdAndVersionFromSqlStatement(currentQueryRequest.query.sql),\n [currentQueryRequest.query.sql],\n )\n\n const pageSize = currentQueryRequest.query.limit ?? DEFAULT_PAGE_SIZE\n const currentPage = Math.ceil(\n ((currentQueryRequest.query.offset ?? 0) + Number(pageSize)) / pageSize,\n )\n\n const setPageSize = useCallback(\n (pageSize: number) => {\n dispatch({ type: 'setPageSize', pageSize })\n },\n [dispatch],\n )\n\n const goToPage = useCallback(\n (pageNumber: number) => {\n dispatch({ type: 'goToPage', pageNumber })\n },\n [dispatch],\n )\n\n const resetQuery = useCallback(() => {\n dispatch({\n type: 'resetQuery',\n })\n }, [dispatch])\n\n /* If the initial query changes, then reset the query to match the new prop */\n useDeepCompareEffect(() => {\n if (currentQueryRequest != initQueryRequest) {\n resetQuery()\n }\n }, [initQueryRequest])\n\n const addValueToSelectedFacet = useCallback(\n (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => {\n dispatch({\n type: 'addValueToSelectedFacet',\n facet: facet,\n value: value,\n commitOptions: commitOptions,\n })\n },\n [dispatch],\n )\n\n const setRangeFacetValue = useCallback(\n (\n facet: UniqueFacetIdentifier,\n min?: string,\n max?: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => {\n dispatch({\n type: 'setRangeFacetValue',\n facet,\n min,\n max,\n commitOptions,\n })\n },\n [dispatch],\n )\n\n const removeSelectedFacet = useCallback(\n (facetsToRemove: UniqueFacetIdentifier | UniqueFacetIdentifier[]) => {\n dispatch({\n type: 'removeSelectedFacet',\n facetsToRemove: facetsToRemove,\n })\n },\n [dispatch],\n )\n\n const removeValueFromSelectedFacet = useCallback(\n (\n facet: UniqueFacetIdentifier,\n value: string,\n commitOptions?: QueryChangeCommitOptions,\n ) => {\n dispatch({\n type: 'removeValueFromSelectedFacet',\n facet,\n value,\n commitOptions,\n })\n },\n [dispatch],\n )\n\n const removeQueryFilter = useCallback(\n (queryFilter: QueryFilter) => {\n dispatch({\n type: 'removeQueryFilter',\n queryFilter,\n })\n },\n [dispatch],\n )\n\n const removeValueFromQueryFilter = useCallback(\n (queryFilter: QueryFilter, value: string) => {\n dispatch({\n type: 'removeValueFromQueryFilter',\n queryFilter,\n value,\n })\n },\n [dispatch],\n )\n const commitChanges = useCallback(() => {\n dispatch({ type: 'commitChanges' })\n }, [dispatch])\n\n const resetDebounceTimer = useCallback(() => {\n dispatch({ type: 'resetDebounce' })\n }, [dispatch])\n\n return {\n entityId,\n commitChanges,\n resetDebounceTimer,\n currentQueryRequest,\n nextQueryRequest,\n versionNumber,\n getInitQueryRequest,\n getCurrentQueryRequest,\n setQuery,\n pageSize,\n currentPage,\n setPageSize,\n goToPage,\n resetQuery,\n removeSelectedFacet,\n removeValueFromSelectedFacet,\n removeQueryFilter,\n removeValueFromQueryFilter,\n isConfirmingChange,\n onConfirmChange,\n onCancelChange,\n addValueToSelectedFacet,\n setRangeFacetValue,\n }\n}\n"],"mappings":"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"}
@@ -1,22 +1,22 @@
1
1
  import { ACCESS_TOKEN_COOKIE_KEY as e, LAST_PLACE_LOCALSTORAGE_KEY as t, SynapseConstants_exports as n } from "./SynapseConstants.js";
2
2
  import { ONE_SAGE_REDIRECT_COOKIE_KEY as r, getCookieDomain as i, processRedirectURLInOneSage as a, restoreLastPlace as o, storeLastPlace as s, storeRedirectURLForOneSageLoginAndGotoURL as c, useFramebuster as l } from "./AppUtils/AppUtils.js";
3
3
  import { PermissionLevelToAccessType_exports as u } from "./PermissionLevelToAccessType.js";
4
- import { implementsCloudProviderFileHandleInterface as d, implementsExternalFileHandleInterface as f, isColumnMultiValueFunctionQueryFilter as p, isColumnSingleValueQueryFilter as m, isDockerRepository as h, isExternalFileHandle as g, isFacetColumnRangeRequest as _, isFacetColumnValuesRequest as v, isFileEntity as y, isInviteeVerificationSignedToken as b, isJoinTeamSignedToken as x, isLink as S, isMembershipInvtnSignedToken as C, isS3FileHandle as w, isTermsOfUseAccessRequirement as T, isTextMatchesQueryFilter as E, isTypeViaConcreteTypeFactory as D } from "./types/IsType.js";
5
- import { hex2ascii as O } from "./functions/StringUtils.js";
6
- import { createTableUpdateTransactionRequest as k } from "./functions/TableColumnSchemaUtils.js";
7
- import { functions_exports as A } from "./functions/index.js";
8
- import { SynapseContext as j, SynapseContextConsumer as M, SynapseContextProvider as N, useSynapseContext as P } from "./context/SynapseContext.js";
9
- import { hooks_exports as F } from "./hooks/index.js";
10
- import { ApplicationSessionContextConsumer as I, ApplicationSessionContextProvider as L, useApplicationSessionContext as R } from "./AppUtils/session/ApplicationSessionContext.js";
11
- import { DocumentMetadataProvider as z, useDocumentMetadata as B } from "./context/DocumentMetadataContext.js";
12
- import { FullContextProvider as V, defaultQueryClientConfig as H } from "./context/FullContextProvider.js";
4
+ import { implementsCloudProviderFileHandleInterface as d, implementsExternalFileHandleInterface as f, isColumnMultiValueFunctionQueryFilter as p, isColumnSingleValueQueryFilter as m, isDockerRepository as h, isExternalFileHandle as g, isFacetColumnRangeRequest as _, isFacetColumnValuesRequest as v, isFileEntity as y, isFilterGroup as b, isInviteeVerificationSignedToken as x, isJoinTeamSignedToken as S, isLink as C, isMembershipInvtnSignedToken as w, isS3FileHandle as T, isTermsOfUseAccessRequirement as E, isTextMatchesQueryFilter as D, isTypeViaConcreteTypeFactory as O } from "./types/IsType.js";
5
+ import { hex2ascii as k } from "./functions/StringUtils.js";
6
+ import { createTableUpdateTransactionRequest as A } from "./functions/TableColumnSchemaUtils.js";
7
+ import { functions_exports as j } from "./functions/index.js";
8
+ import { SynapseContext as M, SynapseContextConsumer as N, SynapseContextProvider as P, useSynapseContext as F } from "./context/SynapseContext.js";
9
+ import { hooks_exports as I } from "./hooks/index.js";
10
+ import { ApplicationSessionContextConsumer as L, ApplicationSessionContextProvider as R, useApplicationSessionContext as z } from "./AppUtils/session/ApplicationSessionContext.js";
11
+ import { DocumentMetadataProvider as B, useDocumentMetadata as V } from "./context/DocumentMetadataContext.js";
12
+ import { FullContextProvider as H, defaultQueryClientConfig as U } from "./context/FullContextProvider.js";
13
13
  import "./context/index.js";
14
- import { AuthenticationGuard as U } from "./AppUtils/session/AuthenticationGuard.js";
15
- import { SynapseSessionManager as W } from "./AppUtils/session/SynapseSessionManager.js";
16
- import { ApplicationSessionManager as G } from "./AppUtils/session/ApplicationSessionManager.js";
17
- import { SessionInitializedGuard as K } from "./AppUtils/session/SessionInitializedGuard.js";
18
- import { useQuerySearchParam as q } from "./hooks/useQuerySearchParam.js";
14
+ import { AuthenticationGuard as W } from "./AppUtils/session/AuthenticationGuard.js";
15
+ import { SynapseSessionManager as G } from "./AppUtils/session/SynapseSessionManager.js";
16
+ import { ApplicationSessionManager as K } from "./AppUtils/session/ApplicationSessionManager.js";
17
+ import { SessionInitializedGuard as q } from "./AppUtils/session/SessionInitializedGuard.js";
18
+ import { useQuerySearchParam as J } from "./hooks/useQuerySearchParam.js";
19
19
  import "./AppUtils/index.js";
20
20
  import "./types/index.js";
21
- import { SynapseClientError as J } from "@sage-bionetworks/synapse-client/util/SynapseClientError";
22
- export { e as ACCESS_TOKEN_COOKIE_KEY, I as ApplicationSessionContextConsumer, L as ApplicationSessionContextProvider, G as ApplicationSessionManager, U as AuthenticationGuard, z as DocumentMetadataProvider, V as FullContextProvider, t as LAST_PLACE_LOCALSTORAGE_KEY, r as ONE_SAGE_REDIRECT_COOKIE_KEY, u as PermissionLevelToAccessType, K as SessionInitializedGuard, J as SynapseClientError, n as SynapseConstants, j as SynapseContext, M as SynapseContextConsumer, N as SynapseContextProvider, F as SynapseHookUtils, W as SynapseSessionManager, A as SynapseUtilityFunctions, k as createTableUpdateTransactionRequest, H as defaultQueryClientConfig, i as getCookieDomain, O as hex2ascii, d as implementsCloudProviderFileHandleInterface, f as implementsExternalFileHandleInterface, p as isColumnMultiValueFunctionQueryFilter, m as isColumnSingleValueQueryFilter, h as isDockerRepository, g as isExternalFileHandle, _ as isFacetColumnRangeRequest, v as isFacetColumnValuesRequest, y as isFileEntity, b as isInviteeVerificationSignedToken, x as isJoinTeamSignedToken, S as isLink, C as isMembershipInvtnSignedToken, w as isS3FileHandle, T as isTermsOfUseAccessRequirement, E as isTextMatchesQueryFilter, D as isTypeViaConcreteTypeFactory, a as processRedirectURLInOneSage, o as restoreLastPlace, s as storeLastPlace, c as storeRedirectURLForOneSageLoginAndGotoURL, R as useApplicationSessionContext, B as useDocumentMetadata, l as useFramebuster, q as useQuerySearchParam, P as useSynapseContext };
21
+ import { SynapseClientError as Y } from "@sage-bionetworks/synapse-client/util/SynapseClientError";
22
+ export { e as ACCESS_TOKEN_COOKIE_KEY, L as ApplicationSessionContextConsumer, R as ApplicationSessionContextProvider, K as ApplicationSessionManager, W as AuthenticationGuard, B as DocumentMetadataProvider, H as FullContextProvider, t as LAST_PLACE_LOCALSTORAGE_KEY, r as ONE_SAGE_REDIRECT_COOKIE_KEY, u as PermissionLevelToAccessType, q as SessionInitializedGuard, Y as SynapseClientError, n as SynapseConstants, M as SynapseContext, N as SynapseContextConsumer, P as SynapseContextProvider, I as SynapseHookUtils, G as SynapseSessionManager, j as SynapseUtilityFunctions, A as createTableUpdateTransactionRequest, U as defaultQueryClientConfig, i as getCookieDomain, k as hex2ascii, d as implementsCloudProviderFileHandleInterface, f as implementsExternalFileHandleInterface, p as isColumnMultiValueFunctionQueryFilter, m as isColumnSingleValueQueryFilter, h as isDockerRepository, g as isExternalFileHandle, _ as isFacetColumnRangeRequest, v as isFacetColumnValuesRequest, y as isFileEntity, b as isFilterGroup, x as isInviteeVerificationSignedToken, S as isJoinTeamSignedToken, C as isLink, w as isMembershipInvtnSignedToken, T as isS3FileHandle, E as isTermsOfUseAccessRequirement, D as isTextMatchesQueryFilter, O as isTypeViaConcreteTypeFactory, a as processRedirectURLInOneSage, o as restoreLastPlace, s as storeLastPlace, c as storeRedirectURLForOneSageLoginAndGotoURL, z as useApplicationSessionContext, V as useDocumentMetadata, l as useFramebuster, J as useQuerySearchParam, F as useSynapseContext };
@@ -23,7 +23,7 @@ function l(e, t) {
23
23
  function u(n) {
24
24
  let [a, o] = t(!1);
25
25
  return e(() => {
26
- if (n && n.$id) if (r(n.$id)) o(!0);
26
+ if (n?.$id) if (r(n.$id)) o(!0);
27
27
  else try {
28
28
  i(n), o(!0);
29
29
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaAnnotationUtils.js","names":[],"sources":["../../../src/utils/jsonschema/SchemaAnnotationUtils.ts"],"sourcesContent":["/**\n * Utilities for retrieving annotation fields (e.g. \"title\", \"description\") from JSON Schemas\n */\n\nimport { hasSchema, SchemaObject } from '@hyperjump/json-schema'\nimport { registerSchema } from '@hyperjump/json-schema/draft-07'\nimport * as AnnotatedInstance from '@hyperjump/json-schema/annotated-instance/experimental'\nimport { annotate } from '@hyperjump/json-schema/annotations/experimental'\nimport { JsonNode } from '@hyperjump/json-schema/instance/experimental'\nimport { Json } from '@sage-bionetworks/synapse-client'\nimport { useQuery } from '@tanstack/react-query'\nimport { JSONSchema7 } from 'json-schema'\nimport { useEffect, useState } from 'react'\n\n/**\n * Get the value of a specified annotation for a specified key described in the JsonNode\n * @param key - the property key for which the description should be retrieved.\n * @param instance - a JsonNode resolved by the `annotate` API provided by @hyperjump/json-schema/annotations/experimental\n * @param annotationKey - the value that corresponds to the annotation to retrieve, e.g. \"title\", \"description\"\n */\nexport function getSchemaAnnotationForProperty(\n key: string,\n instance: JsonNode,\n annotationKey: string,\n): string | undefined {\n if (instance) {\n // Get the title of each of the properties in the object\n for (const [\n propertyNameNode,\n propertyInstance,\n ] of AnnotatedInstance.entries(instance)) {\n const propertyName = AnnotatedInstance.value(propertyNameNode)\n if (propertyName === key) {\n const annotationValue = AnnotatedInstance.annotation(\n propertyInstance,\n annotationKey,\n )[0] as string | undefined\n return annotationValue\n }\n }\n }\n\n return undefined\n}\n\n/**\n * Get the \"title\" for a specific key described in the JsonNode\n * @param key - the property key for which the description should be retrieved.\n * @param instance - a JsonNode resolved by the `annotate` API provided by @hyperjump/json-schema/annotations/experimental\n */\nexport function getDisplayedAnnotationTitle(\n key: string,\n instance?: JsonNode | null,\n): string {\n if (instance) {\n const titleFromSchema = getSchemaAnnotationForProperty(\n key,\n instance,\n 'title',\n )\n if (titleFromSchema) {\n return titleFromSchema\n }\n }\n\n return key\n}\n\n/**\n * Get the \"description\" for a specific key described in the JsonNode\n * @param key - the property key for which the description should be retrieved.\n * @param instance - a JsonNode resolved by the `annotate` API provided by @hyperjump/json-schema/annotations/experimental\n */\nexport function getDisplayedAnnotationDescription(\n key: string,\n instance?: JsonNode | null,\n): string | undefined {\n if (instance) {\n return getSchemaAnnotationForProperty(key, instance, 'description')\n }\n\n return undefined\n}\n\n/**\n * Registers a schema with @hyperjump/json-schema.\n * @param schema\n * @return boolean indicating if the schema is registered.\n */\nexport function useRegisterSchema(schema?: JSONSchema7) {\n const [isRegistered, setIsRegistered] = useState(false)\n\n useEffect(() => {\n if (schema && schema.$id) {\n // The schema can be registered\n if (!hasSchema(schema.$id)) {\n try {\n registerSchema(schema as SchemaObject)\n setIsRegistered(true)\n } catch (e) {\n console.error(\n 'Unable to register JSON Schema in @hyperjump/json-schema:',\n e,\n )\n }\n } else {\n // Already registered, update local state.\n setIsRegistered(true)\n }\n }\n // TODO: Unregister the schema to avoid memory bloat\n // This would require syncing with the current state of schemas being used to make sure that we don't unregister a\n // schema being used by multiple hook instances\n }, [schema])\n\n return isRegistered\n}\n\n/**\n * Given a JSON document and a schema that describes it, return a query result that\n * resolves a JsonNode that can be used to retrieve schema annotations. Uses the `annotate` API provided\n * by @hyperjump/json-schema/annotations/experimental\n * @param json - a JSON document\n * @param schema - a JSON Schema that describes the JSON document\n */\nexport function useGetAnnotatedJsonInstance(json?: Json, schema?: JSONSchema7) {\n const schemaIsRegistered = useRegisterSchema(schema)\n\n return useQuery<JsonNode | null>({\n queryKey: ['getAnnotatedInstance', { json, schema, schemaIsRegistered }],\n queryFn: () => {\n if (json && schema && schemaIsRegistered) {\n try {\n return annotate(schema.$id!, json)\n } catch (e) {\n console.error('Could not create annotated schema instance:', e)\n }\n }\n return null\n },\n enabled: Boolean(schema && json),\n })\n}\n"],"mappings":";;;;;;;AAoBA,SAAgB,EACd,GACA,GACA,GACoB;CACpB,IAAI;OAEG,IAAM,CACT,GACA,MACG,EAAkB,QAAQ,CAAQ,GAErC,IADqB,EAAkB,MAAM,CACzC,MAAiB,GAKnB,OAJwB,EAAkB,WACxC,GACA,CACF,EAAE;CAAA;AAOV;AAOA,SAAgB,EACd,GACA,GACQ;CACR,IAAI,GAAU;EACZ,IAAM,IAAkB,EACtB,GACA,GACA,OACF;EACA,IAAI,GACF,OAAO;CAEX;CAEA,OAAO;AACT;AAOA,SAAgB,EACd,GACA,GACoB;CACpB,IAAI,GACF,OAAO,EAA+B,GAAK,GAAU,aAAa;AAItE;AAOA,SAAgB,EAAkB,GAAsB;CACtD,IAAM,CAAC,GAAc,KAAmB,EAAS,EAAK;CAyBtD,OAvBA,QAAgB;EACd,IAAI,KAAU,EAAO,KAEnB,IAAK,EAAU,EAAO,GAAG,GAYvB,EAAgB,EAAI;OAXpB,IAAI;GAEF,AADA,EAAe,CAAsB,GACrC,EAAgB,EAAI;EACtB,SAAS,GAAG;GACV,QAAQ,MACN,6DACA,CACF;EACF;CASN,GAAG,CAAC,CAAM,CAAC,GAEJ;AACT;AASA,SAAgB,EAA4B,GAAa,GAAsB;CAC7E,IAAM,IAAqB,EAAkB,CAAM;CAEnD,OAAO,EAA0B;EAC/B,UAAU,CAAC,wBAAwB;GAAE;GAAM;GAAQ;EAAmB,CAAC;EACvE,eAAe;GACb,IAAI,KAAQ,KAAU,GACpB,IAAI;IACF,OAAO,EAAS,EAAO,KAAM,CAAI;GACnC,SAAS,GAAG;IACV,QAAQ,MAAM,+CAA+C,CAAC;GAChE;GAEF,OAAO;EACT;EACA,SAAS,GAAQ,KAAU;CAC7B,CAAC;AACH"}
1
+ {"version":3,"file":"SchemaAnnotationUtils.js","names":[],"sources":["../../../src/utils/jsonschema/SchemaAnnotationUtils.ts"],"sourcesContent":["/**\n * Utilities for retrieving annotation fields (e.g. \"title\", \"description\") from JSON Schemas\n */\n\nimport { hasSchema, SchemaObject } from '@hyperjump/json-schema'\nimport { registerSchema } from '@hyperjump/json-schema/draft-07'\nimport * as AnnotatedInstance from '@hyperjump/json-schema/annotated-instance/experimental'\nimport { annotate } from '@hyperjump/json-schema/annotations/experimental'\nimport { JsonNode } from '@hyperjump/json-schema/instance/experimental'\nimport { Json } from '@sage-bionetworks/synapse-client'\nimport { useQuery } from '@tanstack/react-query'\nimport { JSONSchema7 } from 'json-schema'\nimport { useEffect, useState } from 'react'\n\n/**\n * Get the value of a specified annotation for a specified key described in the JsonNode\n * @param key - the property key for which the description should be retrieved.\n * @param instance - a JsonNode resolved by the `annotate` API provided by @hyperjump/json-schema/annotations/experimental\n * @param annotationKey - the value that corresponds to the annotation to retrieve, e.g. \"title\", \"description\"\n */\nexport function getSchemaAnnotationForProperty(\n key: string,\n instance: JsonNode,\n annotationKey: string,\n): string | undefined {\n if (instance) {\n // Get the title of each of the properties in the object\n for (const [\n propertyNameNode,\n propertyInstance,\n ] of AnnotatedInstance.entries(instance)) {\n const propertyName = AnnotatedInstance.value(propertyNameNode)\n if (propertyName === key) {\n const annotationValue = AnnotatedInstance.annotation(\n propertyInstance,\n annotationKey,\n )[0] as string | undefined\n return annotationValue\n }\n }\n }\n\n return undefined\n}\n\n/**\n * Get the \"title\" for a specific key described in the JsonNode\n * @param key - the property key for which the description should be retrieved.\n * @param instance - a JsonNode resolved by the `annotate` API provided by @hyperjump/json-schema/annotations/experimental\n */\nexport function getDisplayedAnnotationTitle(\n key: string,\n instance?: JsonNode | null,\n): string {\n if (instance) {\n const titleFromSchema = getSchemaAnnotationForProperty(\n key,\n instance,\n 'title',\n )\n if (titleFromSchema) {\n return titleFromSchema\n }\n }\n\n return key\n}\n\n/**\n * Get the \"description\" for a specific key described in the JsonNode\n * @param key - the property key for which the description should be retrieved.\n * @param instance - a JsonNode resolved by the `annotate` API provided by @hyperjump/json-schema/annotations/experimental\n */\nexport function getDisplayedAnnotationDescription(\n key: string,\n instance?: JsonNode | null,\n): string | undefined {\n if (instance) {\n return getSchemaAnnotationForProperty(key, instance, 'description')\n }\n\n return undefined\n}\n\n/**\n * Registers a schema with @hyperjump/json-schema.\n * @param schema\n * @return boolean indicating if the schema is registered.\n */\nexport function useRegisterSchema(schema?: JSONSchema7) {\n const [isRegistered, setIsRegistered] = useState(false)\n\n useEffect(() => {\n if (schema?.$id) {\n // The schema can be registered\n if (!hasSchema(schema.$id)) {\n try {\n registerSchema(schema as SchemaObject)\n setIsRegistered(true)\n } catch (e) {\n console.error(\n 'Unable to register JSON Schema in @hyperjump/json-schema:',\n e,\n )\n }\n } else {\n // Already registered, update local state.\n setIsRegistered(true)\n }\n }\n // TODO: Unregister the schema to avoid memory bloat\n // This would require syncing with the current state of schemas being used to make sure that we don't unregister a\n // schema being used by multiple hook instances\n }, [schema])\n\n return isRegistered\n}\n\n/**\n * Given a JSON document and a schema that describes it, return a query result that\n * resolves a JsonNode that can be used to retrieve schema annotations. Uses the `annotate` API provided\n * by @hyperjump/json-schema/annotations/experimental\n * @param json - a JSON document\n * @param schema - a JSON Schema that describes the JSON document\n */\nexport function useGetAnnotatedJsonInstance(json?: Json, schema?: JSONSchema7) {\n const schemaIsRegistered = useRegisterSchema(schema)\n\n return useQuery<JsonNode | null>({\n queryKey: ['getAnnotatedInstance', { json, schema, schemaIsRegistered }],\n queryFn: () => {\n if (json && schema && schemaIsRegistered) {\n try {\n return annotate(schema.$id!, json)\n } catch (e) {\n console.error('Could not create annotated schema instance:', e)\n }\n }\n return null\n },\n enabled: Boolean(schema && json),\n })\n}\n"],"mappings":";;;;;;;AAoBA,SAAgB,EACd,GACA,GACA,GACoB;CACpB,IAAI;OAEG,IAAM,CACT,GACA,MACG,EAAkB,QAAQ,CAAQ,GAErC,IADqB,EAAkB,MAAM,CACzC,MAAiB,GAKnB,OAJwB,EAAkB,WACxC,GACA,CACF,EAAE;CAAA;AAOV;AAOA,SAAgB,EACd,GACA,GACQ;CACR,IAAI,GAAU;EACZ,IAAM,IAAkB,EACtB,GACA,GACA,OACF;EACA,IAAI,GACF,OAAO;CAEX;CAEA,OAAO;AACT;AAOA,SAAgB,EACd,GACA,GACoB;CACpB,IAAI,GACF,OAAO,EAA+B,GAAK,GAAU,aAAa;AAItE;AAOA,SAAgB,EAAkB,GAAsB;CACtD,IAAM,CAAC,GAAc,KAAmB,EAAS,EAAK;CAyBtD,OAvBA,QAAgB;EACd,IAAI,GAAQ,KAEV,IAAK,EAAU,EAAO,GAAG,GAYvB,EAAgB,EAAI;OAXpB,IAAI;GAEF,AADA,EAAe,CAAsB,GACrC,EAAgB,EAAI;EACtB,SAAS,GAAG;GACV,QAAQ,MACN,6DACA,CACF;EACF;CASN,GAAG,CAAC,CAAM,CAAC,GAEJ;AACT;AASA,SAAgB,EAA4B,GAAa,GAAsB;CAC7E,IAAM,IAAqB,EAAkB,CAAM;CAEnD,OAAO,EAA0B;EAC/B,UAAU,CAAC,wBAAwB;GAAE;GAAM;GAAQ;EAAmB,CAAC;EACvE,eAAe;GACb,IAAI,KAAQ,KAAU,GACpB,IAAI;IACF,OAAO,EAAS,EAAO,KAAM,CAAI;GACnC,SAAS,GAAG;IACV,QAAQ,MAAM,+CAA+C,CAAC;GAChE;GAEF,OAAO;EACT;EACA,SAAS,GAAQ,KAAU;CAC7B,CAAC;AACH"}
@@ -0,0 +1,22 @@
1
+ import { JSONSchema7, JSONSchema7Definition } from 'json-schema';
2
+ type TopLevelProperties = Record<string, JSONSchema7Definition>;
3
+ /**
4
+ * Collects the names that could appear as a top-level property of an instance validated by the given
5
+ * JSON Schema, keyed by property name. Each value is the `$ref`-resolved schema for that property.
6
+ *
7
+ * The walk follows schema combination keywords (`$ref`, `allOf`, `anyOf`, `oneOf`, `if`, `then`,
8
+ * `else`) so that properties declared in referenced or composed sub-schemas are included. It does
9
+ * NOT descend into a property's own value, `items`, `contains`, `additionalProperties`, or `not`, so
10
+ * the nested properties of an object or the elements of an array are never surfaced as top-level
11
+ * properties.
12
+ *
13
+ * Insertion order is the order in which properties were first encountered, and the first occurrence
14
+ * of a name wins -- so a schema's own properties take precedence over composed/inherited ones.
15
+ *
16
+ * This mirrors the backend's `JsonSchemaProperties.collectTopLevelProperties`, which is what defines
17
+ * a RecordSet's schema columns. Only draft-07 `definitions` references are resolved (not `$defs`),
18
+ * matching that implementation.
19
+ */
20
+ export declare function collectTopLevelProperties(root: JSONSchema7 | undefined): TopLevelProperties;
21
+ export {};
22
+ //# sourceMappingURL=collectTopLevelProperties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectTopLevelProperties.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/collectTopLevelProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAKhE,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;AAmF/D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,kBAAkB,CAOpB"}
@@ -0,0 +1,31 @@
1
+ //#region src/utils/jsonschema/collectTopLevelProperties.ts
2
+ var e = "#/definitions/";
3
+ function t(t) {
4
+ return t.startsWith(e) ? t.substring(14) : t;
5
+ }
6
+ function n(e, n) {
7
+ let r = n?.[t(e)];
8
+ return typeof r == "object" ? r : void 0;
9
+ }
10
+ function r(e, t) {
11
+ return typeof e != "object" || !e.$ref ? e : n(e.$ref, t) ?? e;
12
+ }
13
+ function i(e, t, a, o) {
14
+ if (typeof e == "object") {
15
+ if (e.$ref) {
16
+ if (a.has(e.$ref)) return;
17
+ a.add(e.$ref), i(n(e.$ref, t), t, a, o);
18
+ return;
19
+ }
20
+ if (e.properties) for (let [n, i] of Object.entries(e.properties)) n in o || (o[n] = r(i, t));
21
+ e.allOf?.forEach((e) => i(e, t, a, o)), e.anyOf?.forEach((e) => i(e, t, a, o)), e.oneOf?.forEach((e) => i(e, t, a, o)), i(e.if, t, a, o), i(e.then, t, a, o), i(e.else, t, a, o);
22
+ }
23
+ }
24
+ function a(e) {
25
+ let t = {};
26
+ return e && i(e, e.definitions, /* @__PURE__ */ new Set(), t), t;
27
+ }
28
+ //#endregion
29
+ export { a as collectTopLevelProperties };
30
+
31
+ //# sourceMappingURL=collectTopLevelProperties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectTopLevelProperties.js","names":[],"sources":["../../../src/utils/jsonschema/collectTopLevelProperties.ts"],"sourcesContent":["import { JSONSchema7, JSONSchema7Definition } from 'json-schema'\n\nconst DEFINITIONS_PREFIX = '#/definitions/'\n\ntype Definitions = NonNullable<JSONSchema7['definitions']>\ntype TopLevelProperties = Record<string, JSONSchema7Definition>\n\n/**\n * Given a full `#/definitions/X` reference, return the relative key (`X`) used in the definitions\n * map. A reference that is already a bare key is returned as-is.\n */\nfunction getRelativeRef(ref: string): string {\n return ref.startsWith(DEFINITIONS_PREFIX)\n ? ref.substring(DEFINITIONS_PREFIX.length)\n : ref\n}\n\nfunction resolveRef(\n ref: string,\n definitions: Definitions | undefined,\n): JSONSchema7 | undefined {\n const resolved = definitions?.[getRelativeRef(ref)]\n // A boolean schema (`true`/`false`) carries no properties to collect\n return typeof resolved === 'object' ? resolved : undefined\n}\n\n/**\n * Resolve a property value: if it is a `$ref` it is replaced with the referenced schema. A dangling\n * or unresolvable `$ref` returns the raw node so the property name is preserved with an unknown type.\n */\nfunction resolveProperty(\n property: JSONSchema7Definition,\n definitions: Definitions | undefined,\n): JSONSchema7Definition {\n if (typeof property !== 'object' || !property.$ref) {\n return property\n }\n return resolveRef(property.$ref, definitions) ?? property\n}\n\nfunction collect(\n node: JSONSchema7Definition | undefined,\n definitions: Definitions | undefined,\n visitedRefs: Set<string>,\n result: TopLevelProperties,\n): void {\n if (typeof node !== 'object') {\n return\n }\n\n // Follow a combination $ref to the schema it references. Nothing else on a $ref node contributes.\n if (node.$ref) {\n if (visitedRefs.has(node.$ref)) {\n return\n }\n visitedRefs.add(node.$ref)\n collect(\n resolveRef(node.$ref, definitions),\n definitions,\n visitedRefs,\n result,\n )\n return\n }\n\n if (node.properties) {\n for (const [name, propertySchema] of Object.entries(node.properties)) {\n if (!(name in result)) {\n result[name] = resolveProperty(propertySchema, definitions)\n }\n }\n }\n\n // Recurse through combination keywords in a fixed, deterministic order.\n node.allOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n node.anyOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n node.oneOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n collect(node.if, definitions, visitedRefs, result)\n collect(node.then, definitions, visitedRefs, result)\n collect(node.else, definitions, visitedRefs, result)\n}\n\n/**\n * Collects the names that could appear as a top-level property of an instance validated by the given\n * JSON Schema, keyed by property name. Each value is the `$ref`-resolved schema for that property.\n *\n * The walk follows schema combination keywords (`$ref`, `allOf`, `anyOf`, `oneOf`, `if`, `then`,\n * `else`) so that properties declared in referenced or composed sub-schemas are included. It does\n * NOT descend into a property's own value, `items`, `contains`, `additionalProperties`, or `not`, so\n * the nested properties of an object or the elements of an array are never surfaced as top-level\n * properties.\n *\n * Insertion order is the order in which properties were first encountered, and the first occurrence\n * of a name wins -- so a schema's own properties take precedence over composed/inherited ones.\n *\n * This mirrors the backend's `JsonSchemaProperties.collectTopLevelProperties`, which is what defines\n * a RecordSet's schema columns. Only draft-07 `definitions` references are resolved (not `$defs`),\n * matching that implementation.\n */\nexport function collectTopLevelProperties(\n root: JSONSchema7 | undefined,\n): TopLevelProperties {\n const result: TopLevelProperties = {}\n if (!root) {\n return result\n }\n collect(root, root.definitions, new Set<string>(), result)\n return result\n}\n"],"mappings":";AAEA,IAAM,IAAqB;AAS3B,SAAS,EAAe,GAAqB;CAC3C,OAAO,EAAI,WAAW,CAAkB,IACpC,EAAI,UAAU,EAAyB,IACvC;AACN;AAEA,SAAS,EACP,GACA,GACyB;CACzB,IAAM,IAAW,IAAc,EAAe,CAAG;CAEjD,OAAO,OAAO,KAAa,WAAW,IAAW,KAAA;AACnD;AAMA,SAAS,EACP,GACA,GACuB;CAIvB,OAHI,OAAO,KAAa,YAAY,CAAC,EAAS,OACrC,IAEF,EAAW,EAAS,MAAM,CAAW,KAAK;AACnD;AAEA,SAAS,EACP,GACA,GACA,GACA,GACM;CACF,WAAO,KAAS,UAKpB;MAAI,EAAK,MAAM;GACb,IAAI,EAAY,IAAI,EAAK,IAAI,GAC3B;GAGF,AADA,EAAY,IAAI,EAAK,IAAI,GACzB,EACE,EAAW,EAAK,MAAM,CAAW,GACjC,GACA,GACA,CACF;GACA;EACF;EAEA,IAAI,EAAK,iBACF,IAAM,CAAC,GAAM,MAAmB,OAAO,QAAQ,EAAK,UAAU,GACjE,AAAM,KAAQ,MACZ,EAAO,KAAQ,EAAgB,GAAgB,CAAW;EAiBhE,AAXA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAQ,EAAK,IAAI,GAAa,GAAa,CAAM,GACjD,EAAQ,EAAK,MAAM,GAAa,GAAa,CAAM,GACnD,EAAQ,EAAK,MAAM,GAAa,GAAa,CAAM;CAtBnD;AAuBF;AAmBA,SAAgB,EACd,GACoB;CACpB,IAAM,IAA6B,CAAC;CAKpC,OAJK,KAGL,EAAQ,GAAM,EAAK,6BAAa,IAAI,IAAY,GAAG,CAAM,GAFhD;AAIX"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSchemaPropertyInfo.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"names":[],"mappings":"AAAA,OAA4B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAG5E,OAAO,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,mBAAmB,CAyCrB"}
1
+ {"version":3,"file":"getSchemaPropertyInfo.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"names":[],"mappings":"AAAA,OAA4B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAG5E,OAAO,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,mBAAmB,CAqCrB"}
@@ -8,7 +8,7 @@ function i(i) {
8
8
  let a = t(i), o = {};
9
9
  return i.properties && Object.keys(i.properties).forEach((t) => {
10
10
  let s = n(i, t), c = r(s), l = e(s).map((e) => e.value);
11
- l.length === 0 && s && s.items && (l = e(Array.isArray(s.items) ? s.items[0] : s.items).map((e) => e.value)), o[t] = {
11
+ l.length === 0 && s?.items && (l = e(Array.isArray(s.items) ? s.items[0] : s.items).map((e) => e.value)), o[t] = {
12
12
  type: c,
13
13
  isRequired: a.includes(t),
14
14
  enumeratedValues: l.length > 0 ? l : null,
@@ -1 +1 @@
1
- {"version":3,"file":"getSchemaPropertyInfo.js","names":[],"sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"sourcesContent":["import getEnumeratedValues, { EnumeratedValue } from './getEnumeratedValues'\nimport getSchemaForProperty from './getSchemaForProperty'\nimport getRequiredAttributes from './getRequiredAttributes'\nimport { FlatTypeInfo, getFlatTypeInfo } from './getType'\nimport { JSONSchema7 } from 'json-schema'\n\nexport interface SchemaPropertyInfo {\n type: FlatTypeInfo | undefined\n isRequired: boolean\n enumeratedValues: EnumeratedValue[] | null\n description?: string\n}\n\nexport interface SchemaPropertiesMap {\n [propertyName: string]: SchemaPropertyInfo\n}\n\n/**\n * Processes a JSON schema once and returns information for all properties\n * @param schema The JSON schema to process\n * @returns A map of property names to their schema information\n */\nexport function getSchemaPropertiesInfo(\n schema: JSONSchema7 | null,\n): SchemaPropertiesMap {\n if (!schema) {\n return {}\n }\n\n const requiredFields = getRequiredAttributes(schema)\n const propertiesMap: SchemaPropertiesMap = {}\n\n // Process each property in the schema\n if (schema.properties) {\n Object.keys(schema.properties).forEach(propertyName => {\n const propertySchema = getSchemaForProperty(schema, propertyName)\n const type = getFlatTypeInfo(propertySchema)\n let enumeratedValues = getEnumeratedValues(propertySchema).map(\n item => item.value,\n )\n\n // Check for nested enums in array items\n if (\n enumeratedValues.length === 0 &&\n propertySchema &&\n propertySchema.items\n ) {\n const itemsSchema = Array.isArray(propertySchema.items)\n ? propertySchema.items[0]\n : propertySchema.items\n enumeratedValues = getEnumeratedValues(itemsSchema).map(\n item => item.value,\n )\n }\n\n propertiesMap[propertyName] = {\n type,\n isRequired: requiredFields.includes(propertyName),\n enumeratedValues: enumeratedValues.length > 0 ? enumeratedValues : null,\n description: propertySchema?.description,\n }\n })\n }\n\n return propertiesMap\n}\n"],"mappings":";;;;;AAsBA,SAAgB,EACd,GACqB;CACrB,IAAI,CAAC,GACH,OAAO,CAAC;CAGV,IAAM,IAAiB,EAAsB,CAAM,GAC7C,IAAqC,CAAC;CAkC5C,OA/BI,EAAO,cACT,OAAO,KAAK,EAAO,UAAU,EAAE,SAAQ,MAAgB;EACrD,IAAM,IAAiB,EAAqB,GAAQ,CAAY,GAC1D,IAAO,EAAgB,CAAc,GACvC,IAAmB,EAAoB,CAAc,EAAE,KACzD,MAAQ,EAAK,KACf;EAgBA,AAZE,EAAiB,WAAW,KAC5B,KACA,EAAe,UAKf,IAAmB,EAHC,MAAM,QAAQ,EAAe,KAAK,IAClD,EAAe,MAAM,KACrB,EAAe,KAC+B,EAAE,KAClD,MAAQ,EAAK,KACf,IAGF,EAAc,KAAgB;GAC5B;GACA,YAAY,EAAe,SAAS,CAAY;GAChD,kBAAkB,EAAiB,SAAS,IAAI,IAAmB;GACnE,aAAa,GAAgB;EAC/B;CACF,CAAC,GAGI;AACT"}
1
+ {"version":3,"file":"getSchemaPropertyInfo.js","names":[],"sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"sourcesContent":["import getEnumeratedValues, { EnumeratedValue } from './getEnumeratedValues'\nimport getSchemaForProperty from './getSchemaForProperty'\nimport getRequiredAttributes from './getRequiredAttributes'\nimport { FlatTypeInfo, getFlatTypeInfo } from './getType'\nimport { JSONSchema7 } from 'json-schema'\n\nexport interface SchemaPropertyInfo {\n type: FlatTypeInfo | undefined\n isRequired: boolean\n enumeratedValues: EnumeratedValue[] | null\n description?: string\n}\n\nexport interface SchemaPropertiesMap {\n [propertyName: string]: SchemaPropertyInfo\n}\n\n/**\n * Processes a JSON schema once and returns information for all properties\n * @param schema The JSON schema to process\n * @returns A map of property names to their schema information\n */\nexport function getSchemaPropertiesInfo(\n schema: JSONSchema7 | null,\n): SchemaPropertiesMap {\n if (!schema) {\n return {}\n }\n\n const requiredFields = getRequiredAttributes(schema)\n const propertiesMap: SchemaPropertiesMap = {}\n\n // Process each property in the schema\n if (schema.properties) {\n Object.keys(schema.properties).forEach(propertyName => {\n const propertySchema = getSchemaForProperty(schema, propertyName)\n const type = getFlatTypeInfo(propertySchema)\n let enumeratedValues = getEnumeratedValues(propertySchema).map(\n item => item.value,\n )\n\n // Check for nested enums in array items\n if (enumeratedValues.length === 0 && propertySchema?.items) {\n const itemsSchema = Array.isArray(propertySchema.items)\n ? propertySchema.items[0]\n : propertySchema.items\n enumeratedValues = getEnumeratedValues(itemsSchema).map(\n item => item.value,\n )\n }\n\n propertiesMap[propertyName] = {\n type,\n isRequired: requiredFields.includes(propertyName),\n enumeratedValues: enumeratedValues.length > 0 ? enumeratedValues : null,\n description: propertySchema?.description,\n }\n })\n }\n\n return propertiesMap\n}\n"],"mappings":";;;;;AAsBA,SAAgB,EACd,GACqB;CACrB,IAAI,CAAC,GACH,OAAO,CAAC;CAGV,IAAM,IAAiB,EAAsB,CAAM,GAC7C,IAAqC,CAAC;CA8B5C,OA3BI,EAAO,cACT,OAAO,KAAK,EAAO,UAAU,EAAE,SAAQ,MAAgB;EACrD,IAAM,IAAiB,EAAqB,GAAQ,CAAY,GAC1D,IAAO,EAAgB,CAAc,GACvC,IAAmB,EAAoB,CAAc,EAAE,KACzD,MAAQ,EAAK,KACf;EAYA,AATI,EAAiB,WAAW,KAAK,GAAgB,UAInD,IAAmB,EAHC,MAAM,QAAQ,EAAe,KAAK,IAClD,EAAe,MAAM,KACrB,EAAe,KAC+B,EAAE,KAClD,MAAQ,EAAK,KACf,IAGF,EAAc,KAAgB;GAC5B;GACA,YAAY,EAAe,SAAS,CAAY;GAChD,kBAAkB,EAAiB,SAAS,IAAI,IAAmB;GACnE,aAAa,GAAgB;EAC/B;CACF,CAAC,GAGI;AACT"}
@@ -1,4 +1,4 @@
1
- import { CloudProviderFileHandleInterface, ColumnMultiValueFunctionQueryFilter, ColumnSingleValueQueryFilter, DockerRepository, ExternalFileHandle, ExternalFileHandleInterface, FacetColumnRangeRequest, FacetColumnValuesRequest, FileEntity, InviteeVerificationSignedToken, JoinTeamSignedToken, Link, MembershipInvtnSignedToken, S3FileHandle, TermsOfUseAccessRequirement, TextMatchesQueryFilter } from '@sage-bionetworks/synapse-types';
1
+ import { CloudProviderFileHandleInterface, ColumnMultiValueFunctionQueryFilter, ColumnSingleValueQueryFilter, DockerRepository, ExternalFileHandle, ExternalFileHandleInterface, FacetColumnRangeRequest, FacetColumnValuesRequest, FileEntity, FilterGroup, InviteeVerificationSignedToken, JoinTeamSignedToken, Link, MembershipInvtnSignedToken, S3FileHandle, TermsOfUseAccessRequirement, TextMatchesQueryFilter } from '@sage-bionetworks/synapse-types';
2
2
  /**
3
3
  * TypeScript doesn't support nominal typing, but we can utilize the concreteType field in Synapse objects to identify the class of an object. This function
4
4
  * will return a function that can be used as a type guard using the concreteType field.
@@ -45,6 +45,9 @@ export declare const isColumnSingleValueQueryFilter: (object: {
45
45
  export declare const isColumnMultiValueFunctionQueryFilter: (object: {
46
46
  concreteType: string;
47
47
  }) => object is ColumnMultiValueFunctionQueryFilter;
48
+ export declare const isFilterGroup: (object: {
49
+ concreteType: string;
50
+ }) => object is FilterGroup;
48
51
  export declare const isS3FileHandle: (object: {
49
52
  concreteType: string;
50
53
  }) => object is S3FileHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"IsType.d.ts","sourceRoot":"","sources":["../../../src/utils/types/IsType.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAGhC,mCAAmC,EACnC,4BAA4B,EAE5B,gBAAgB,EAGhB,kBAAkB,EAClB,2BAA2B,EAG3B,uBAAuB,EACvB,wBAAwB,EAExB,UAAU,EAGV,8BAA8B,EAE9B,mBAAmB,EACnB,IAAI,EAGJ,0BAA0B,EAG1B,YAAY,EAEZ,2BAA2B,EAE3B,sBAAsB,EACvB,MAAM,iCAAiC,CAAA;AAExC;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,SAAS,UAAU,EAAE,gDAAgD;AACjF,UAAU,SAAS;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,EACtE,GAAG,qBAAqB,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,IAChD,QAAQ,UAAU,KAAG,MAAM,IAAI,YAAY,CAOpD;AAED,eAAO,MAAM,0CAA0C;kBAXS,MAAM;gDAenE,CAAA;AACH,eAAO,MAAM,oBAAoB;kBAhB+B,MAAM;kCAmBnE,CAAA;AACH,eAAO,MAAM,MAAM;kBApB6C,MAAM;oBAsBrE,CAAA;AACD,eAAO,MAAM,qCAAqC;kBAvBc,MAAM;2CA4BnE,CAAA;AACH,eAAO,MAAM,kBAAkB;kBA7BiC,MAAM;gCAgCnE,CAAA;AACH,eAAO,MAAM,0BAA0B;kBAjCyB,MAAM;wCAoCnE,CAAA;AACH,eAAO,MAAM,yBAAyB;kBArC0B,MAAM;uCAwCnE,CAAA;AACH,eAAO,MAAM,wBAAwB;kBAzC2B,MAAM;sCA4CnE,CAAA;AACH,eAAO,MAAM,8BAA8B;kBA7CqB,MAAM;4CAgDnE,CAAA;AACH,eAAO,MAAM,qCAAqC;kBAjDc,MAAM;mDAoDnE,CAAA;AACH,eAAO,MAAM,cAAc;kBArDqC,MAAM;4BAuDrE,CAAA;AACD,eAAO,MAAM,YAAY;kBAxDuC,MAAM;0BA0DrE,CAAA;AACD,eAAO,MAAM,6BAA6B;kBA3DsB,MAAM;2CA8DnE,CAAA;AACH,eAAO,MAAM,gCAAgC;kBA/DmB,MAAM;8CAkEnE,CAAA;AACH,eAAO,MAAM,qBAAqB;kBAnE8B,MAAM;mCAsEnE,CAAA;AACH,eAAO,MAAM,4BAA4B;kBAvEuB,MAAM;0CA0EnE,CAAA"}
1
+ {"version":3,"file":"IsType.d.ts","sourceRoot":"","sources":["../../../src/utils/types/IsType.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAGhC,mCAAmC,EACnC,4BAA4B,EAE5B,gBAAgB,EAGhB,kBAAkB,EAClB,2BAA2B,EAG3B,uBAAuB,EACvB,wBAAwB,EAGxB,UAAU,EACV,WAAW,EAGX,8BAA8B,EAE9B,mBAAmB,EACnB,IAAI,EAGJ,0BAA0B,EAG1B,YAAY,EAEZ,2BAA2B,EAE3B,sBAAsB,EACvB,MAAM,iCAAiC,CAAA;AAExC;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,SAAS,UAAU,EAAE,gDAAgD;AACjF,UAAU,SAAS;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,EACtE,GAAG,qBAAqB,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,IAChD,QAAQ,UAAU,KAAG,MAAM,IAAI,YAAY,CAOpD;AAED,eAAO,MAAM,0CAA0C;kBAXS,MAAM;gDAenE,CAAA;AACH,eAAO,MAAM,oBAAoB;kBAhB+B,MAAM;kCAmBnE,CAAA;AACH,eAAO,MAAM,MAAM;kBApB6C,MAAM;oBAsBrE,CAAA;AACD,eAAO,MAAM,qCAAqC;kBAvBc,MAAM;2CA4BnE,CAAA;AACH,eAAO,MAAM,kBAAkB;kBA7BiC,MAAM;gCAgCnE,CAAA;AACH,eAAO,MAAM,0BAA0B;kBAjCyB,MAAM;wCAoCnE,CAAA;AACH,eAAO,MAAM,yBAAyB;kBArC0B,MAAM;uCAwCnE,CAAA;AACH,eAAO,MAAM,wBAAwB;kBAzC2B,MAAM;sCA4CnE,CAAA;AACH,eAAO,MAAM,8BAA8B;kBA7CqB,MAAM;4CAgDnE,CAAA;AACH,eAAO,MAAM,qCAAqC;kBAjDc,MAAM;mDAoDnE,CAAA;AACH,eAAO,MAAM,aAAa;kBArDsC,MAAM;2BAuDrE,CAAA;AACD,eAAO,MAAM,cAAc;kBAxDqC,MAAM;4BA0DrE,CAAA;AACD,eAAO,MAAM,YAAY;kBA3DuC,MAAM;0BA6DrE,CAAA;AACD,eAAO,MAAM,6BAA6B;kBA9DsB,MAAM;2CAiEnE,CAAA;AACH,eAAO,MAAM,gCAAgC;kBAlEmB,MAAM;8CAqEnE,CAAA;AACH,eAAO,MAAM,qBAAqB;kBAtE8B,MAAM;mCAyEnE,CAAA;AACH,eAAO,MAAM,4BAA4B;kBA1EuB,MAAM;0CA6EnE,CAAA"}
@@ -1,10 +1,10 @@
1
- import { COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER_CONCRETE_TYPE_VALUE as e, COLUMN_SINGLE_VALUE_QUERY_FILTER_CONCRETE_TYPE_VALUE as t, DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE as n, EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE as r, EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE as i, FACET_COLUMN_RANGE_REQUEST_CONCRETE_TYPE_VALUE as a, FACET_COLUMN_VALUES_REQUEST_CONCRETE_TYPE_VALUE as o, FILE_ENTITY_CONCRETE_TYPE_VALUE as s, GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE as c, INVITEE_VERIFICATION_CONCRETE_TYPE_VALUE as l, JOIN_TEAM_CONCRETE_TYPE_VALUE as u, LINK_CONCRETE_TYPE_VALUE as d, MEMBERSHIP_INVITATION_CONCRETE_TYPE_VALUE as f, PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE as p, S3_FILE_HANDLE_CONCRETE_TYPE_VALUE as m, TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE as h, TEXT_MATCHES_QUERY_FILTER_CONCRETE_TYPE_VALUE as g } from "@sage-bionetworks/synapse-types";
1
+ import { COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER_CONCRETE_TYPE_VALUE as e, COLUMN_SINGLE_VALUE_QUERY_FILTER_CONCRETE_TYPE_VALUE as t, DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE as n, EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE as r, EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE as i, FACET_COLUMN_RANGE_REQUEST_CONCRETE_TYPE_VALUE as a, FACET_COLUMN_VALUES_REQUEST_CONCRETE_TYPE_VALUE as o, FILE_ENTITY_CONCRETE_TYPE_VALUE as s, FILTER_GROUP_CONCRETE_TYPE_VALUE as c, GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE as l, INVITEE_VERIFICATION_CONCRETE_TYPE_VALUE as u, JOIN_TEAM_CONCRETE_TYPE_VALUE as d, LINK_CONCRETE_TYPE_VALUE as f, MEMBERSHIP_INVITATION_CONCRETE_TYPE_VALUE as p, PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE as m, S3_FILE_HANDLE_CONCRETE_TYPE_VALUE as h, TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE as g, TEXT_MATCHES_QUERY_FILTER_CONCRETE_TYPE_VALUE as _ } from "@sage-bionetworks/synapse-types";
2
2
  //#region src/utils/types/IsType.ts
3
- function _(...e) {
3
+ function v(...e) {
4
4
  return (t) => !!(t && typeof t == "object" && "concreteType" in t && e.includes(t.concreteType));
5
5
  }
6
- var v = _(m, c), y = _(r), b = _(d), x = _(p, i, r), S = _(n), C = _(o), w = _(a), T = _(g), E = _(t), D = _(e), O = _(m), k = _(s), A = _(h), j = _(l), M = _(u), N = _(f);
6
+ var y = v(h, l), b = v(r), x = v(f), S = v(m, i, r), C = v(n), w = v(o), T = v(a), E = v(_), D = v(t), O = v(e), k = v(c), A = v(h), j = v(s), M = v(g), N = v(u), P = v(d), F = v(p);
7
7
  //#endregion
8
- export { v as implementsCloudProviderFileHandleInterface, x as implementsExternalFileHandleInterface, D as isColumnMultiValueFunctionQueryFilter, E as isColumnSingleValueQueryFilter, S as isDockerRepository, y as isExternalFileHandle, w as isFacetColumnRangeRequest, C as isFacetColumnValuesRequest, k as isFileEntity, j as isInviteeVerificationSignedToken, M as isJoinTeamSignedToken, b as isLink, N as isMembershipInvtnSignedToken, O as isS3FileHandle, A as isTermsOfUseAccessRequirement, T as isTextMatchesQueryFilter, _ as isTypeViaConcreteTypeFactory };
8
+ export { y as implementsCloudProviderFileHandleInterface, S as implementsExternalFileHandleInterface, O as isColumnMultiValueFunctionQueryFilter, D as isColumnSingleValueQueryFilter, C as isDockerRepository, b as isExternalFileHandle, T as isFacetColumnRangeRequest, w as isFacetColumnValuesRequest, j as isFileEntity, k as isFilterGroup, N as isInviteeVerificationSignedToken, P as isJoinTeamSignedToken, x as isLink, F as isMembershipInvtnSignedToken, A as isS3FileHandle, M as isTermsOfUseAccessRequirement, E as isTextMatchesQueryFilter, v as isTypeViaConcreteTypeFactory };
9
9
 
10
10
  //# sourceMappingURL=IsType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IsType.js","names":[],"sources":["../../../src/utils/types/IsType.ts"],"sourcesContent":["import {\n CloudProviderFileHandleInterface,\n COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n COLUMN_SINGLE_VALUE_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n ColumnMultiValueFunctionQueryFilter,\n ColumnSingleValueQueryFilter,\n DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE,\n DockerRepository,\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n ExternalFileHandle,\n ExternalFileHandleInterface,\n FACET_COLUMN_RANGE_REQUEST_CONCRETE_TYPE_VALUE,\n FACET_COLUMN_VALUES_REQUEST_CONCRETE_TYPE_VALUE,\n FacetColumnRangeRequest,\n FacetColumnValuesRequest,\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n FileEntity,\n GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n INVITEE_VERIFICATION_CONCRETE_TYPE_VALUE,\n InviteeVerificationSignedToken,\n JOIN_TEAM_CONCRETE_TYPE_VALUE,\n JoinTeamSignedToken,\n Link,\n LINK_CONCRETE_TYPE_VALUE,\n MEMBERSHIP_INVITATION_CONCRETE_TYPE_VALUE,\n MembershipInvtnSignedToken,\n PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n S3FileHandle,\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n TermsOfUseAccessRequirement,\n TEXT_MATCHES_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n TextMatchesQueryFilter,\n} from '@sage-bionetworks/synapse-types'\n\n/**\n * TypeScript doesn't support nominal typing, but we can utilize the concreteType field in Synapse objects to identify the class of an object. This function\n * will return a function that can be used as a type guard using the concreteType field.\n *\n * Generic `TTypeChecked` is the type that you are trying to verify/assert.\n * Generic `ObjectType` is optional and can be used to require a specific interface or type before calling this method. Defaults to `unknown`.\n *\n * @param expectedConcreteTypes\n * @returns a function that checks if a given object is an instance of `TTypeChecked` using the expected concrete type value.\n */\nexport function isTypeViaConcreteTypeFactory<\n TTypeChecked extends ObjectType, // The type that you are trying to verify/assert\n ObjectType extends { concreteType: string } = { concreteType: string },\n>(...expectedConcreteTypes: TTypeChecked['concreteType'][]) {\n return (object: ObjectType): object is TTypeChecked =>\n !!(\n object &&\n typeof object === 'object' &&\n 'concreteType' in object &&\n expectedConcreteTypes.includes(object['concreteType'])\n )\n}\n\nexport const implementsCloudProviderFileHandleInterface =\n isTypeViaConcreteTypeFactory<CloudProviderFileHandleInterface>(\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n )\nexport const isExternalFileHandle =\n isTypeViaConcreteTypeFactory<ExternalFileHandle>(\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n )\nexport const isLink = isTypeViaConcreteTypeFactory<Link>(\n LINK_CONCRETE_TYPE_VALUE,\n)\nexport const implementsExternalFileHandleInterface =\n isTypeViaConcreteTypeFactory<ExternalFileHandleInterface>(\n PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n )\nexport const isDockerRepository =\n isTypeViaConcreteTypeFactory<DockerRepository>(\n DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE,\n )\nexport const isFacetColumnValuesRequest =\n isTypeViaConcreteTypeFactory<FacetColumnValuesRequest>(\n FACET_COLUMN_VALUES_REQUEST_CONCRETE_TYPE_VALUE,\n )\nexport const isFacetColumnRangeRequest =\n isTypeViaConcreteTypeFactory<FacetColumnRangeRequest>(\n FACET_COLUMN_RANGE_REQUEST_CONCRETE_TYPE_VALUE,\n )\nexport const isTextMatchesQueryFilter =\n isTypeViaConcreteTypeFactory<TextMatchesQueryFilter>(\n TEXT_MATCHES_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n )\nexport const isColumnSingleValueQueryFilter =\n isTypeViaConcreteTypeFactory<ColumnSingleValueQueryFilter>(\n COLUMN_SINGLE_VALUE_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n )\nexport const isColumnMultiValueFunctionQueryFilter =\n isTypeViaConcreteTypeFactory<ColumnMultiValueFunctionQueryFilter>(\n COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n )\nexport const isS3FileHandle = isTypeViaConcreteTypeFactory<S3FileHandle>(\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n)\nexport const isFileEntity = isTypeViaConcreteTypeFactory<FileEntity>(\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n)\nexport const isTermsOfUseAccessRequirement =\n isTypeViaConcreteTypeFactory<TermsOfUseAccessRequirement>(\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n )\nexport const isInviteeVerificationSignedToken =\n isTypeViaConcreteTypeFactory<InviteeVerificationSignedToken>(\n INVITEE_VERIFICATION_CONCRETE_TYPE_VALUE,\n )\nexport const isJoinTeamSignedToken =\n isTypeViaConcreteTypeFactory<JoinTeamSignedToken>(\n JOIN_TEAM_CONCRETE_TYPE_VALUE,\n )\nexport const isMembershipInvtnSignedToken =\n isTypeViaConcreteTypeFactory<MembershipInvtnSignedToken>(\n MEMBERSHIP_INVITATION_CONCRETE_TYPE_VALUE,\n )\n"],"mappings":";;AA8CA,SAAgB,EAGd,GAAG,GAAuD;CAC1D,QAAQ,MACN,CAAC,EACC,KACA,OAAO,KAAW,YAClB,kBAAkB,KAClB,EAAsB,SAAS,EAAO,YAAe;AAE3D;AAEA,IAAa,IACX,EACE,GACA,CACF,GACW,IACX,EACE,CACF,GACW,IAAS,EACpB,CACF,GACa,IACX,EACE,GACA,GACA,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IAAiB,EAC5B,CACF,GACa,IAAe,EAC1B,CACF,GACa,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF"}
1
+ {"version":3,"file":"IsType.js","names":[],"sources":["../../../src/utils/types/IsType.ts"],"sourcesContent":["import {\n CloudProviderFileHandleInterface,\n COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n COLUMN_SINGLE_VALUE_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n ColumnMultiValueFunctionQueryFilter,\n ColumnSingleValueQueryFilter,\n DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE,\n DockerRepository,\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n ExternalFileHandle,\n ExternalFileHandleInterface,\n FACET_COLUMN_RANGE_REQUEST_CONCRETE_TYPE_VALUE,\n FACET_COLUMN_VALUES_REQUEST_CONCRETE_TYPE_VALUE,\n FacetColumnRangeRequest,\n FacetColumnValuesRequest,\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n FILTER_GROUP_CONCRETE_TYPE_VALUE,\n FileEntity,\n FilterGroup,\n GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n INVITEE_VERIFICATION_CONCRETE_TYPE_VALUE,\n InviteeVerificationSignedToken,\n JOIN_TEAM_CONCRETE_TYPE_VALUE,\n JoinTeamSignedToken,\n Link,\n LINK_CONCRETE_TYPE_VALUE,\n MEMBERSHIP_INVITATION_CONCRETE_TYPE_VALUE,\n MembershipInvtnSignedToken,\n PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n S3FileHandle,\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n TermsOfUseAccessRequirement,\n TEXT_MATCHES_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n TextMatchesQueryFilter,\n} from '@sage-bionetworks/synapse-types'\n\n/**\n * TypeScript doesn't support nominal typing, but we can utilize the concreteType field in Synapse objects to identify the class of an object. This function\n * will return a function that can be used as a type guard using the concreteType field.\n *\n * Generic `TTypeChecked` is the type that you are trying to verify/assert.\n * Generic `ObjectType` is optional and can be used to require a specific interface or type before calling this method. Defaults to `unknown`.\n *\n * @param expectedConcreteTypes\n * @returns a function that checks if a given object is an instance of `TTypeChecked` using the expected concrete type value.\n */\nexport function isTypeViaConcreteTypeFactory<\n TTypeChecked extends ObjectType, // The type that you are trying to verify/assert\n ObjectType extends { concreteType: string } = { concreteType: string },\n>(...expectedConcreteTypes: TTypeChecked['concreteType'][]) {\n return (object: ObjectType): object is TTypeChecked =>\n !!(\n object &&\n typeof object === 'object' &&\n 'concreteType' in object &&\n expectedConcreteTypes.includes(object['concreteType'])\n )\n}\n\nexport const implementsCloudProviderFileHandleInterface =\n isTypeViaConcreteTypeFactory<CloudProviderFileHandleInterface>(\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n )\nexport const isExternalFileHandle =\n isTypeViaConcreteTypeFactory<ExternalFileHandle>(\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n )\nexport const isLink = isTypeViaConcreteTypeFactory<Link>(\n LINK_CONCRETE_TYPE_VALUE,\n)\nexport const implementsExternalFileHandleInterface =\n isTypeViaConcreteTypeFactory<ExternalFileHandleInterface>(\n PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n )\nexport const isDockerRepository =\n isTypeViaConcreteTypeFactory<DockerRepository>(\n DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE,\n )\nexport const isFacetColumnValuesRequest =\n isTypeViaConcreteTypeFactory<FacetColumnValuesRequest>(\n FACET_COLUMN_VALUES_REQUEST_CONCRETE_TYPE_VALUE,\n )\nexport const isFacetColumnRangeRequest =\n isTypeViaConcreteTypeFactory<FacetColumnRangeRequest>(\n FACET_COLUMN_RANGE_REQUEST_CONCRETE_TYPE_VALUE,\n )\nexport const isTextMatchesQueryFilter =\n isTypeViaConcreteTypeFactory<TextMatchesQueryFilter>(\n TEXT_MATCHES_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n )\nexport const isColumnSingleValueQueryFilter =\n isTypeViaConcreteTypeFactory<ColumnSingleValueQueryFilter>(\n COLUMN_SINGLE_VALUE_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n )\nexport const isColumnMultiValueFunctionQueryFilter =\n isTypeViaConcreteTypeFactory<ColumnMultiValueFunctionQueryFilter>(\n COLUMN_MULTI_VALUE_FUNCTION_QUERY_FILTER_CONCRETE_TYPE_VALUE,\n )\nexport const isFilterGroup = isTypeViaConcreteTypeFactory<FilterGroup>(\n FILTER_GROUP_CONCRETE_TYPE_VALUE,\n)\nexport const isS3FileHandle = isTypeViaConcreteTypeFactory<S3FileHandle>(\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n)\nexport const isFileEntity = isTypeViaConcreteTypeFactory<FileEntity>(\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n)\nexport const isTermsOfUseAccessRequirement =\n isTypeViaConcreteTypeFactory<TermsOfUseAccessRequirement>(\n TERMS_OF_USE_ACCESS_REQUIREMENT_CONCRETE_TYPE_VALUE,\n )\nexport const isInviteeVerificationSignedToken =\n isTypeViaConcreteTypeFactory<InviteeVerificationSignedToken>(\n INVITEE_VERIFICATION_CONCRETE_TYPE_VALUE,\n )\nexport const isJoinTeamSignedToken =\n isTypeViaConcreteTypeFactory<JoinTeamSignedToken>(\n JOIN_TEAM_CONCRETE_TYPE_VALUE,\n )\nexport const isMembershipInvtnSignedToken =\n isTypeViaConcreteTypeFactory<MembershipInvtnSignedToken>(\n MEMBERSHIP_INVITATION_CONCRETE_TYPE_VALUE,\n )\n"],"mappings":";;AAgDA,SAAgB,EAGd,GAAG,GAAuD;CAC1D,QAAQ,MACN,CAAC,EACC,KACA,OAAO,KAAW,YAClB,kBAAkB,KAClB,EAAsB,SAAS,EAAO,YAAe;AAE3D;AAEA,IAAa,IACX,EACE,GACA,CACF,GACW,IACX,EACE,CACF,GACW,IAAS,EACpB,CACF,GACa,IACX,EACE,GACA,GACA,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IAAgB,EAC3B,CACF,GACa,IAAiB,EAC5B,CACF,GACa,IAAe,EAC1B,CACF,GACa,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF,GACW,IACX,EACE,CACF"}
@@ -1,2 +1,2 @@
1
- import { implementsCloudProviderFileHandleInterface as e, implementsExternalFileHandleInterface as t, isColumnMultiValueFunctionQueryFilter as n, isColumnSingleValueQueryFilter as r, isDockerRepository as i, isExternalFileHandle as a, isFacetColumnRangeRequest as o, isFacetColumnValuesRequest as s, isFileEntity as c, isInviteeVerificationSignedToken as l, isJoinTeamSignedToken as u, isLink as d, isMembershipInvtnSignedToken as f, isS3FileHandle as p, isTermsOfUseAccessRequirement as m, isTextMatchesQueryFilter as h, isTypeViaConcreteTypeFactory as g } from "./IsType.js";
2
- export { e as implementsCloudProviderFileHandleInterface, t as implementsExternalFileHandleInterface, n as isColumnMultiValueFunctionQueryFilter, r as isColumnSingleValueQueryFilter, i as isDockerRepository, a as isExternalFileHandle, o as isFacetColumnRangeRequest, s as isFacetColumnValuesRequest, c as isFileEntity, l as isInviteeVerificationSignedToken, u as isJoinTeamSignedToken, d as isLink, f as isMembershipInvtnSignedToken, p as isS3FileHandle, m as isTermsOfUseAccessRequirement, h as isTextMatchesQueryFilter, g as isTypeViaConcreteTypeFactory };
1
+ import { implementsCloudProviderFileHandleInterface as e, implementsExternalFileHandleInterface as t, isColumnMultiValueFunctionQueryFilter as n, isColumnSingleValueQueryFilter as r, isDockerRepository as i, isExternalFileHandle as a, isFacetColumnRangeRequest as o, isFacetColumnValuesRequest as s, isFileEntity as c, isFilterGroup as l, isInviteeVerificationSignedToken as u, isJoinTeamSignedToken as d, isLink as f, isMembershipInvtnSignedToken as p, isS3FileHandle as m, isTermsOfUseAccessRequirement as h, isTextMatchesQueryFilter as g, isTypeViaConcreteTypeFactory as _ } from "./IsType.js";
2
+ export { e as implementsCloudProviderFileHandleInterface, t as implementsExternalFileHandleInterface, n as isColumnMultiValueFunctionQueryFilter, r as isColumnSingleValueQueryFilter, i as isDockerRepository, a as isExternalFileHandle, o as isFacetColumnRangeRequest, s as isFacetColumnValuesRequest, c as isFileEntity, l as isFilterGroup, u as isInviteeVerificationSignedToken, d as isJoinTeamSignedToken, f as isLink, p as isMembershipInvtnSignedToken, m as isS3FileHandle, h as isTermsOfUseAccessRequirement, g as isTextMatchesQueryFilter, _ as isTypeViaConcreteTypeFactory };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synapse-react-client",
3
- "version": "4.0.35",
3
+ "version": "4.0.37",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -48,7 +48,6 @@
48
48
  "@rjsf/mui": "6.0.0-beta.10",
49
49
  "@rjsf/utils": "6.0.0-beta.10",
50
50
  "@rjsf/validator-ajv8": "6.0.0-beta.10",
51
- "@sage-bionetworks/react-datasheet-grid": "4.11.5-sage.8",
52
51
  "@tanstack/query-core": "5.80.10",
53
52
  "@tanstack/react-query": "5.80.10",
54
53
  "@tanstack/react-query-devtools": "5.80.10",
@@ -120,9 +119,10 @@
120
119
  "xss": "^1.0.15",
121
120
  "zod": "^4.4.3",
122
121
  "@sage-bionetworks/synapse-client": "0.0.23",
123
- "@sage-bionetworks/synapse-types": "0.0.8",
124
- "markdown-it-synapse": "2.0.0",
125
122
  "@sage-bionetworks/markdown-it-container": "4.0.1",
123
+ "@sage-bionetworks/react-datasheet-grid": "4.11.5-sage.9",
124
+ "@sage-bionetworks/synapse-types": "0.0.9",
125
+ "markdown-it-synapse": "2.0.0",
126
126
  "markdown-it-synapse-table": "1.0.8"
127
127
  },
128
128
  "peerDependencies": {
@@ -136,7 +136,7 @@
136
136
  }
137
137
  },
138
138
  "devDependencies": {
139
- "@faker-js/faker": "^8.4.1",
139
+ "@faker-js/faker": "^10.5.0",
140
140
  "@googlemaps/jest-mocks": "^2.22.8",
141
141
  "@juggle/resize-observer": "^3.4.0",
142
142
  "@open-draft/deferred-promise": "^2.2.0",
@@ -1,12 +0,0 @@
1
- import { GridRecordSetExportResponse, SynapseClientError } from '@sage-bionetworks/synapse-client';
2
- import { UseMutationOptions } from '@tanstack/react-query';
3
- export type MergeGridWithRecordSetInput = {
4
- gridSessionId: string;
5
- };
6
- /**
7
- * Query mutation hook for exporting a grid session back into a RecordSet.
8
- *
9
- * @deprecated This is a legacy method for overwriting a RecordSet with data from a Grid. Use `useSynchronizeGridSession` instead.
10
- */
11
- export default function useMergeGridWithRecordSet(options?: Omit<UseMutationOptions<GridRecordSetExportResponse, SynapseClientError, MergeGridWithRecordSetInput>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<GridRecordSetExportResponse, SynapseClientError, MergeGridWithRecordSetInput, unknown>;
12
- //# sourceMappingURL=useMergeGridWithRecordSet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMergeGridWithRecordSet.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/useMergeGridWithRecordSet.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,2BAA2B,EAC3B,kBAAkB,EAEnB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAe,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEvE,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,OAAO,CAAC,EAAE,IAAI,CACZ,kBAAkB,CAChB,2BAA2B,EAC3B,kBAAkB,EAClB,2BAA2B,CAC5B,EACD,YAAY,CACb,4IAmCF"}
@@ -1,25 +0,0 @@
1
- import { useSynapseContext as e } from "../../utils/context/SynapseContext.js";
2
- import "../../utils/index.js";
3
- import { waitForAsyncResult as t } from "@sage-bionetworks/synapse-client";
4
- import { useMutation as n } from "@tanstack/react-query";
5
- import { c as r } from "react/compiler-runtime";
6
- //#region src/components/DataGrid/useMergeGridWithRecordSet.ts
7
- function i(i) {
8
- let a = r(5), { synapseClient: o } = e(), s;
9
- a[0] === o ? s = a[1] : (s = async (e) => {
10
- let { gridSessionId: n } = e, r = {
11
- sessionId: n,
12
- concreteType: "org.sagebionetworks.repo.model.grid.GridRecordSetExportRequest"
13
- }, i = await o.gridServicesClient.postRepoV1GridExportRecordsetAsyncStart({ gridRecordSetExportRequest: r });
14
- return (await t(() => o.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId({ jobId: i.token }))).responseBody;
15
- }, a[0] = o, a[1] = s);
16
- let c;
17
- return a[2] !== i || a[3] !== s ? (c = {
18
- ...i,
19
- mutationFn: s
20
- }, a[2] = i, a[3] = s, a[4] = c) : c = a[4], n(c);
21
- }
22
- //#endregion
23
- export { i as default };
24
-
25
- //# sourceMappingURL=useMergeGridWithRecordSet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMergeGridWithRecordSet.js","names":["useSynapseContext","GridRecordSetExportRequest","GridRecordSetExportResponse","SynapseClientError","waitForAsyncResult","useMutation","UseMutationOptions","MergeGridWithRecordSetInput","gridSessionId","useMergeGridWithRecordSet","options","$","_c","synapseClient","t0","t1","gridExportRequest","sessionId","concreteType","asyncJobId","gridServicesClient","postRepoV1GridExportRecordsetAsyncStart","gridRecordSetExportRequest","asyncJobResponse","asynchronousJobServicesClient","getRepoV1AsynchronousJobJobId","jobId","token","responseBody","mutationFn"],"sources":["../../../src/components/DataGrid/useMergeGridWithRecordSet.ts"],"sourcesContent":["import { useSynapseContext } from '@/utils'\nimport {\n GridRecordSetExportRequest,\n GridRecordSetExportResponse,\n SynapseClientError,\n waitForAsyncResult,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\n\nexport type MergeGridWithRecordSetInput = {\n gridSessionId: string\n}\n\n/**\n * Query mutation hook for exporting a grid session back into a RecordSet.\n *\n * @deprecated This is a legacy method for overwriting a RecordSet with data from a Grid. Use `useSynchronizeGridSession` instead.\n */\nexport default function useMergeGridWithRecordSet(\n options?: Omit<\n UseMutationOptions<\n GridRecordSetExportResponse,\n SynapseClientError,\n MergeGridWithRecordSetInput\n >,\n 'mutationFn'\n >,\n) {\n const { synapseClient } = useSynapseContext()\n\n return useMutation<\n GridRecordSetExportResponse,\n SynapseClientError,\n MergeGridWithRecordSetInput\n >({\n ...options,\n mutationFn: async ({ gridSessionId }) => {\n const gridExportRequest: GridRecordSetExportRequest = {\n sessionId: gridSessionId,\n concreteType:\n 'org.sagebionetworks.repo.model.grid.GridRecordSetExportRequest',\n }\n\n // Start the async export job\n const asyncJobId =\n await synapseClient.gridServicesClient.postRepoV1GridExportRecordsetAsyncStart(\n { gridRecordSetExportRequest: gridExportRequest },\n )\n\n // Poll for the async job\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId(\n {\n jobId: asyncJobId.token!,\n },\n ),\n )\n\n return asyncJobResponse.responseBody as GridRecordSetExportResponse\n },\n })\n}\n"],"mappings":";;;;;;AAkBA,SAAeS,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAUb,EAAAC,qBAA0Bb,EAAkB,GAACc;CAAA,AAAAH,EAAA,OAAAE,IA+B1CC,IAAAH,EAAA,MAvBWG,IAAA,OAAAC,MAAA;EAAO,IAAA,EAAAP,qBAAAO,GACjBC,IAAsD;GAAAC,WACzCT;GAAaU,cAEtB;EACJ,GAGAC,IACE,MAAMN,EAAaO,mBAAmBC,wCACpC,EAAAC,4BAA8BN,EAAkB,CAClD;EASD,QAEMO,MARwBnB,QAC7BS,EAAaW,8BAA8BC,8BACzC,EAAAC,OACSP,EAAUQ,MACnB,CACF,CACF,GAEuBC;CAA4C,GACpEjB,EAAA,KAAAE,GAAAF,EAAA,KAAAG;CAAA,IAAAC;CACF,OADEJ,EAAA,OAAAD,KAAAC,EAAA,OAAAG,KAzBDC,IAAA;EAAA,GACGL;EAAOmB,YACEf;CAwBd,GAACH,EAAA,KAAAD,GAAAC,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IA9BMN,EAILU,CA0BD;AAAC"}