synapse-react-client 4.0.1 → 4.0.3-b

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 (289) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/AwardScroll.d.ts +5 -0
  3. package/dist/assets/icons/AwardScroll.d.ts.map +1 -0
  4. package/dist/assets/icons/AwardScroll.js +78 -0
  5. package/dist/assets/icons/AwardScroll.js.map +1 -0
  6. package/dist/assets/icons/Baseline.d.ts +5 -0
  7. package/dist/assets/icons/Baseline.d.ts.map +1 -0
  8. package/dist/assets/icons/Baseline.js +43 -0
  9. package/dist/assets/icons/Baseline.js.map +1 -0
  10. package/dist/assets/icons/Challenge.svg +13 -0
  11. package/dist/assets/icons/Challenge.svg.js +7 -0
  12. package/dist/assets/icons/Challenge.svg.js.map +1 -0
  13. package/dist/assets/icons/ClappingHands.d.ts +5 -0
  14. package/dist/assets/icons/ClappingHands.d.ts.map +1 -0
  15. package/dist/assets/icons/ClappingHands.js +106 -0
  16. package/dist/assets/icons/ClappingHands.js.map +1 -0
  17. package/dist/assets/icons/DNA_Two.svg +0 -0
  18. package/dist/assets/icons/Data2.svg +0 -0
  19. package/dist/assets/icons/HandWithMoney.d.ts +5 -0
  20. package/dist/assets/icons/HandWithMoney.d.ts.map +1 -0
  21. package/dist/assets/icons/HandWithMoney.js +15 -0
  22. package/dist/assets/icons/HandWithMoney.js.map +1 -0
  23. package/dist/assets/icons/MultiFile.d.ts +5 -0
  24. package/dist/assets/icons/MultiFile.d.ts.map +1 -0
  25. package/dist/assets/icons/MultiFile.js +8 -0
  26. package/dist/assets/icons/MultiFile.js.map +1 -0
  27. package/dist/assets/icons/MultiFile.svg +4 -0
  28. package/dist/assets/icons/MultiFile.svg.js +7 -0
  29. package/dist/assets/icons/MultiFile.svg.js.map +1 -0
  30. package/dist/assets/icons/OpenBook.d.ts +5 -0
  31. package/dist/assets/icons/OpenBook.d.ts.map +1 -0
  32. package/dist/assets/icons/OpenBook.js +99 -0
  33. package/dist/assets/icons/OpenBook.js.map +1 -0
  34. package/dist/assets/icons/Podium.d.ts +5 -0
  35. package/dist/assets/icons/Podium.d.ts.map +1 -0
  36. package/dist/assets/icons/Podium.js +36 -0
  37. package/dist/assets/icons/Podium.js.map +1 -0
  38. package/dist/assets/icons/RosetteRibbon.d.ts +5 -0
  39. package/dist/assets/icons/RosetteRibbon.d.ts.map +1 -0
  40. package/dist/assets/icons/RosetteRibbon.js +36 -0
  41. package/dist/assets/icons/RosetteRibbon.js.map +1 -0
  42. package/dist/assets/icons/StarTrophy.d.ts +5 -0
  43. package/dist/assets/icons/StarTrophy.d.ts.map +1 -0
  44. package/dist/assets/icons/StarTrophy.js +99 -0
  45. package/dist/assets/icons/StarTrophy.js.map +1 -0
  46. package/dist/assets/icons/ThreeStars.d.ts +5 -0
  47. package/dist/assets/icons/ThreeStars.d.ts.map +1 -0
  48. package/dist/assets/icons/ThreeStars.js +71 -0
  49. package/dist/assets/icons/ThreeStars.js.map +1 -0
  50. package/dist/assets/icons/UnpackagableFile.d.ts +5 -0
  51. package/dist/assets/icons/UnpackagableFile.d.ts.map +1 -0
  52. package/dist/assets/icons/UnpackagableFile.js +8 -0
  53. package/dist/assets/icons/UnpackagableFile.js.map +1 -0
  54. package/dist/assets/icons/UnpackagableFile.svg +4 -0
  55. package/dist/assets/icons/UnpackagableFile.svg.js +7 -0
  56. package/dist/assets/icons/UnpackagableFile.svg.js.map +1 -0
  57. package/dist/assets/mui_components/PackagableFile.d.ts.map +1 -1
  58. package/dist/assets/mui_components/PackagableFile.js +5 -4
  59. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  60. package/dist/assets/mui_components/PackagableFile.svg +3 -0
  61. package/dist/assets/mui_components/PackagableFile.svg.js +7 -0
  62. package/dist/assets/mui_components/PackagableFile.svg.js.map +1 -0
  63. package/dist/assets/themed_icons/index.d.ts +1 -2
  64. package/dist/assets/themed_icons/index.d.ts.map +1 -1
  65. package/dist/assets/themed_icons/index.js +8 -10
  66. package/dist/assets/themed_icons/index.js.map +1 -1
  67. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +4 -4
  68. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  69. package/dist/components/AddToDownloadListV2.js +10 -10
  70. package/dist/components/AddToDownloadListV2.js.map +1 -1
  71. package/dist/components/BasePortalCard/BasePortalCard.css +1 -1
  72. package/dist/components/BasePortalCard/BasePortalCard.d.ts +1 -2
  73. package/dist/components/BasePortalCard/BasePortalCard.d.ts.map +1 -1
  74. package/dist/components/BasePortalCard/BasePortalCard.js +21 -28
  75. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  76. package/dist/components/BasePortalCard/BasePortalCard.module.scss +7 -1
  77. package/dist/components/BasePortalCard/BasePortalCard.module.scss.js +11 -11
  78. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.d.ts.map +1 -1
  79. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js +24 -24
  80. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  81. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +5 -1
  82. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  83. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  84. package/dist/components/CardContainerLogic/index.d.ts +1 -1
  85. package/dist/components/CardContainerLogic/index.d.ts.map +1 -1
  86. package/dist/components/CardDeck/TableQueryCardDeck.js +12 -9
  87. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  88. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js +33 -33
  89. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  90. package/dist/components/ChangePassword/useChangePasswordFormState.js +5 -2
  91. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  92. package/dist/components/ComponentCollapse.d.ts +6 -10
  93. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  94. package/dist/components/ComponentCollapse.js +31 -35
  95. package/dist/components/ComponentCollapse.js.map +1 -1
  96. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +12 -9
  97. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  98. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +8 -3
  99. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  100. package/dist/components/DataGrid/SynapseGrid.js +8 -3
  101. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  102. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +8 -3
  103. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  104. package/dist/components/DirectDownload/DirectDownload.d.ts.map +1 -1
  105. package/dist/components/DirectDownload/DirectDownload.js +23 -23
  106. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  107. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts +6 -2
  108. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts.map +1 -1
  109. package/dist/components/DownloadCart/AvailableForDownloadTable.js +10 -8
  110. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  111. package/dist/components/DownloadCart/CreatePackageV2.css +1 -0
  112. package/dist/components/DownloadCart/CreatePackageV2.d.ts.map +1 -1
  113. package/dist/components/DownloadCart/CreatePackageV2.js +50 -46
  114. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  115. package/dist/components/DownloadCart/CreatePackageV2.module.scss +38 -0
  116. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js +14 -0
  117. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js.map +1 -0
  118. package/dist/components/DownloadCart/DownloadCartPage.css +1 -0
  119. package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
  120. package/dist/components/DownloadCart/DownloadCartPage.js +316 -186
  121. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  122. package/dist/components/DownloadCart/DownloadCartPage.module.scss +217 -0
  123. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js +48 -0
  124. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js.map +1 -0
  125. package/dist/components/DownloadCart/DownloadDetails.js +1 -1
  126. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  127. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +33 -33
  128. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  129. package/dist/components/DownloadCart/DownloadListTable.d.ts +4 -1
  130. package/dist/components/DownloadCart/DownloadListTable.d.ts.map +1 -1
  131. package/dist/components/DownloadCart/DownloadListTable.js +156 -236
  132. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  133. package/dist/components/DownloadCart/ShowDownloadV2.js +5 -5
  134. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  135. package/dist/components/Ecosystem/EcosystemSkeleton.js +8 -3
  136. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  137. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts +3 -0
  138. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts.map +1 -1
  139. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +113 -119
  140. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  141. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +3 -3
  142. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  143. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +6 -2
  144. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  145. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js +11 -8
  146. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  147. package/dist/components/FullWidthAlert/FullWidthAlert.d.ts +2 -2
  148. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  149. package/dist/components/GenericCard/GenericCard.d.ts +5 -5
  150. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  151. package/dist/components/GenericCard/GenericCard.js +117 -103
  152. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  153. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts +10 -0
  154. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts.map +1 -0
  155. package/dist/components/GenericCard/LabelMaybeWithIcon.js +33 -0
  156. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -0
  157. package/dist/components/GenericCard/SynapseCardLabel.d.ts +2 -1
  158. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  159. package/dist/components/GenericCard/SynapseCardLabel.js +86 -81
  160. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  161. package/dist/components/GenericCard/TableRowGenericCard.d.ts +7 -1
  162. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  163. package/dist/components/GenericCard/TableRowGenericCard.js +239 -202
  164. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  165. package/dist/components/HeaderCard.js +17 -13
  166. package/dist/components/HeaderCard.js.map +1 -1
  167. package/dist/components/Icon/Icon.js +52 -52
  168. package/dist/components/Icon/Icon.js.map +1 -1
  169. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  170. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  171. package/dist/components/IconSvg/IconSvg.js +215 -171
  172. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  173. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -0
  174. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  175. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +103 -102
  176. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  177. package/dist/components/StorybookComponentWrapper.js +6 -3
  178. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  179. package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
  180. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  181. package/dist/components/SynapseChat/SynapseChat.js +76 -67
  182. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  183. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +2 -1
  184. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  185. package/dist/components/SynapseChat/SynapseChatInteraction.js +83 -58
  186. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  187. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
  188. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  189. package/dist/components/SynapseChat/SynapseChatMessage.js +16 -15
  190. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  191. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +12 -0
  192. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -0
  193. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +30 -0
  194. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -0
  195. package/dist/components/SynapseChat/extractMessageFromTraceEvent.d.ts.map +1 -1
  196. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js +22 -16
  197. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  198. package/dist/components/SynapseChat/index.d.ts +2 -0
  199. package/dist/components/SynapseChat/index.d.ts.map +1 -1
  200. package/dist/components/SynapseChat/index.js +5 -3
  201. package/dist/components/SynapseChat/index.js.map +1 -1
  202. package/dist/components/SynapseChat/useChatState.d.ts +1 -1
  203. package/dist/components/SynapseChat/useChatState.d.ts.map +1 -1
  204. package/dist/components/SynapseChat/useChatState.js +10 -7
  205. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  206. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.d.ts.map +1 -1
  207. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +30 -32
  208. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  209. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.d.ts.map +1 -1
  210. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js +27 -30
  211. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  212. package/dist/components/SynapseHomepageV2/SynapseSearchChips.d.ts.map +1 -1
  213. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js +14 -17
  214. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  215. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  216. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +114 -115
  217. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  218. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.d.ts.map +1 -1
  219. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +39 -39
  220. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  221. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js +18 -18
  222. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  223. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  224. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +66 -64
  225. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  226. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +13 -13
  227. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  228. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js +9 -9
  229. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  230. package/dist/components/TextToComponentCollapse.d.ts +16 -0
  231. package/dist/components/TextToComponentCollapse.d.ts.map +1 -0
  232. package/dist/components/TextToComponentCollapse.js +29 -0
  233. package/dist/components/TextToComponentCollapse.js.map +1 -0
  234. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +8 -3
  235. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  236. package/dist/components/download_list/DownloadConfirmationUI.d.ts +1 -1
  237. package/dist/components/download_list/DownloadConfirmationUI.js +22 -22
  238. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  239. package/dist/components/download_list/DownloadConfirmationUtils.js +4 -4
  240. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  241. package/dist/components/index.js +85 -83
  242. package/dist/components/index.js.map +1 -1
  243. package/dist/components/row_renderers/ObservationCard.js +12 -11
  244. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  245. package/dist/components/row_renderers/utils/CardFooter.d.ts +1 -3
  246. package/dist/components/row_renderers/utils/CardFooter.d.ts.map +1 -1
  247. package/dist/components/row_renderers/utils/CardFooter.js +31 -45
  248. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  249. package/dist/components/table/CsvPreview/CsvPreview.js +8 -3
  250. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  251. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +8 -3
  252. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  253. package/dist/features/curator/GridPage/GridPage.js +8 -3
  254. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  255. package/dist/features/curator/GridPage/components/GridPageTitle.js +8 -3
  256. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  257. package/dist/index.js +137 -135
  258. package/dist/index.js.map +1 -1
  259. package/dist/style/abstracts/_functions.scss +0 -0
  260. package/dist/style/abstracts/_mixins.scss +0 -0
  261. package/dist/style/abstracts/_variables.scss +0 -0
  262. package/dist/style/base/_base.scss +0 -0
  263. package/dist/style/base/_fonts.scss +0 -0
  264. package/dist/style/base/_helpers.scss +0 -0
  265. package/dist/style/components/_all.scss +0 -1
  266. package/dist/style/components/_cards.scss +22 -0
  267. package/dist/style/components/_download-list-v2.scss +1 -1
  268. package/dist/style/components/_query-wrapper-plot-nav.scss +13 -0
  269. package/dist/style/main.css +1 -1
  270. package/dist/style/main.scss +0 -0
  271. package/dist/style/vendors/_normalize.scss +0 -0
  272. package/dist/tsconfig.build.tsbuildinfo +1 -1
  273. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  274. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  275. package/dist/utils/context/FullContextProvider.js +9 -9
  276. package/dist/utils/context/FullContextProvider.js.map +1 -1
  277. package/dist/utils/context/SynapseContext.d.ts.map +1 -1
  278. package/dist/utils/context/SynapseContext.js +1 -0
  279. package/dist/utils/context/SynapseContext.js.map +1 -1
  280. package/dist/utils/functions/SqlFunctions.d.ts +4 -0
  281. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  282. package/dist/utils/functions/SqlFunctions.js +25 -23
  283. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  284. package/package.json +25 -24
  285. package/dist/assets/themed_icons/Challenge.d.ts +0 -3
  286. package/dist/assets/themed_icons/Challenge.d.ts.map +0 -1
  287. package/dist/assets/themed_icons/Challenge.js +0 -25
  288. package/dist/assets/themed_icons/Challenge.js.map +0 -1
  289. package/dist/style/components/_download-cart-page.scss +0 -204
@@ -1 +1 @@
1
- {"version":3,"file":"QueryWrapperPlotNav.js","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"sourcesContent":["import { QueryOrDeprecatedSearchParams } from '@/components/CardContainerLogic/CardContainerLogic'\nimport AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport {\n getAdditionalFilters,\n parseEntityIdAndVersionFromSqlStatement,\n} from '@/utils/functions'\nimport { isTable } from '@/utils/functions/EntityTypeUtils'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Box } from '@mui/material'\nimport { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { useMemo, useState } from 'react'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport { SynapseErrorBoundary } from '../error'\nimport FullTextSearch from '../FullTextSearch/FullTextSearch'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { QueryWrapperPlotNavCustomPlotParams } from '../Plot/SynapsePlot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryVisualizationContextConsumer,\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport { QueryWrapper, QueryWrapperProps } from '../QueryWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport SearchV2, { SearchV2Props } from '../SynapseTable/SearchV2'\nimport SqlEditor from '../SynapseTable/SqlEditor'\nimport TopLevelControls, {\n TopLevelControlsProps,\n CustomControl,\n} from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { CustomControls } from '../SynapseTable/CustomControls/CustomControls'\nimport TotalQueryResults from '../TotalQueryResults'\nimport PlotsContainer, {\n PlotsContainerProps,\n} from '../widgets/facet-nav/PlotsContainer'\nimport FacetFilterControls, {\n FacetFilterControlsProps,\n} from '../widgets/query-filter/FacetFilterControls'\nimport { QueryWrapperSynapsePlotProps } from './QueryWrapperSynapsePlot'\nimport { RowSetView } from './RowSetView'\n\nexport const QUERY_FILTERS_EXPANDED_CSS: string = 'isShowingFacetFilters'\nexport const QUERY_FILTERS_COLLAPSED_CSS: string = 'isHidingFacetFilters'\n\nexport const HAS_SELECTED_ROWS_CSS: string = 'hasSelectedRows'\n\ntype QueryWrapperPlotNavOwnProps = {\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n /** Set to true when you want the query to be saved in the URL search parameters. If you are controlling the view (such as in PortalSearch), you'll want to set this to false */\n shouldDeepLink?: boolean\n /** If onQueryChange is set, the callback will be invoked when the Query changes */\n onQueryChange?: (newQueryJson: string) => void\n /** If onQueryResultBundleChange is set, the callback will be invoked when the QueryResultBundle changes */\n onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void\n /** If initQueryJson is set, it will be the Query used in the initial QueryBundleRequest */\n initQueryJson?: string\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n searchConfiguration?: Omit<\n SearchV2Props,\n 'queryContext' | 'queryVisualizationContext'\n >\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n customPlots?: QueryWrapperSynapsePlotProps[]\n customControls?: CustomControl[]\n defaultColumn?: string\n defaultShowSearchBox?: boolean\n lockedColumn?: QueryWrapperProps['lockedColumn']\n onViewSharingSettingsClicked?: (benefactorId: string) => void\n initialLimit?: number\n} & Omit<TopLevelControlsProps, 'entityId'> &\n Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> &\n Pick<\n QueryWrapperProps,\n | 'isRowSelectionVisible'\n | 'rowSelectionPrimaryKey'\n | 'isRowSelectionUIFloating'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n > &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'columnAliases'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'additionalFiltersSessionStorageKey'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideSearchBarControl'\n | 'hideVisualizationsControl'\n | 'enabledExternalAnalysisPlatforms'\n > &\n Pick<QueryContextType, 'combineRangeFacetConfig'>\n\nexport type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams &\n PlotsContainerProps &\n QueryWrapperPlotNavOwnProps\n\ntype QueryWrapperPlotNavContentsProps = Pick<\n QueryWrapperPlotNavProps,\n | 'tableConfiguration'\n | 'name'\n | 'cardConfiguration'\n | 'facetsToPlot'\n | 'availableFacets'\n | 'initialExpandedFacetControls'\n | 'hideDownload'\n | 'hideQueryCount'\n | 'hideSqlEditorControl'\n | 'hideVisualizationsControl'\n | 'searchConfiguration'\n | 'enabledExternalAnalysisPlatforms'\n | 'cavaticaConnectAccountURL'\n | 'customControls'\n | 'customPlots'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n | 'initialLimit'\n | 'initialPlotType'\n> & {\n isFullTextSearchEnabled: boolean\n remount: () => void\n}\n\nfunction QueryWrapperPlotNavContents(props: QueryWrapperPlotNavContentsProps) {\n const {\n tableConfiguration,\n name,\n cardConfiguration,\n facetsToPlot,\n availableFacets,\n initialExpandedFacetControls,\n hideDownload,\n hideQueryCount,\n hideSqlEditorControl,\n hideVisualizationsControl,\n searchConfiguration,\n cavaticaConnectAccountURL,\n customControls,\n remount,\n isFullTextSearchEnabled,\n customPlots,\n initialLimit,\n initialPlotType,\n } = props\n const queryContext = useQueryContext()\n const [showExportMetadata, setShowExportMetadata] = useState(false)\n const { hasFacetedSelectColumn: isFaceted, queryMetadataQueryOptions } =\n queryContext\n const { isLoading: isLoadingQueryMetadata } = useQuery(\n queryMetadataQueryOptions,\n )\n\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const currentQueryRequest = queryContext.currentQueryRequest\n\n const hasFacetsOrFilters =\n (currentQueryRequest?.query.selectedFacets !== undefined &&\n currentQueryRequest.query.selectedFacets.length > 0) ||\n (currentQueryRequest?.query.additionalFilters !== undefined &&\n currentQueryRequest?.query.additionalFilters.length > 0)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n return (\n <QueryVisualizationContextConsumer>\n {queryVisualizationContext => {\n if (queryVisualizationContext === undefined) {\n throw new Error(\n 'No queryVisualizationContext found when using QueryVisualizationContextConsumer',\n )\n }\n\n return (\n <Box\n className={`QueryWrapperPlotNav ${\n queryVisualizationContext.showFacetFilter\n ? QUERY_FILTERS_EXPANDED_CSS\n : QUERY_FILTERS_COLLAPSED_CSS\n } ${isRowSelectionVisible ? HAS_SELECTED_ROWS_CSS : ''}`}\n sx={{\n '*': {\n cursor: isLoadingQueryMetadata ? 'wait' : undefined,\n },\n }}\n >\n <QueryWrapperErrorBoundary>\n {isFullTextSearchEnabled ? (\n <FullTextSearch ftsConfig={searchConfiguration?.ftsConfig} />\n ) : (\n <SearchV2\n {...searchConfiguration}\n queryContext={queryContext}\n queryVisualizationContext={queryVisualizationContext}\n />\n )}\n <SqlEditor />\n {queryVisualizationContext.showDownloadConfirmation && (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() =>\n queryVisualizationContext.setShowDownloadConfirmation(false)\n }\n />\n )}\n <SynapseErrorBoundary>\n <TopLevelControls\n showColumnSelection={tableConfiguration !== undefined}\n name={name}\n hideDownload={hideDownload}\n hideQueryCount={hideQueryCount}\n hideFacetFilterControl={!isFaceted}\n hideVisualizationsControl={\n !isFaceted || hideVisualizationsControl\n }\n hideSqlEditorControl={hideSqlEditorControl}\n cavaticaConnectAccountURL={cavaticaConnectAccountURL}\n remount={remount}\n customControls={customControls}\n />\n </SynapseErrorBoundary>\n {isFaceted && (\n <>\n <FacetFilterControls\n availableFacets={availableFacets}\n initialExpandedFacetControls={initialExpandedFacetControls}\n />\n </>\n )}\n <TotalQueryResults\n frontText={''}\n endText={hasFacetsOrFilters ? 'filtered by' : ''}\n hideIfUnfiltered={true}\n />\n <CustomControls\n customControls={customControls}\n remount={remount}\n />\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n customPlots={customPlots}\n initialPlotType={initialPlotType}\n />\n <RowSetView\n tableConfiguration={tableConfiguration}\n hideDownload={hideDownload}\n cardConfiguration={cardConfiguration}\n initialLimit={initialLimit}\n />\n {showExportMetadata && (\n <ModalDownload\n getLastQueryRequest={queryContext?.getCurrentQueryRequest}\n onClose={() => setShowExportMetadata(false)}\n />\n )}\n </QueryWrapperErrorBoundary>\n </Box>\n )\n }}\n </QueryVisualizationContextConsumer>\n )\n}\n\nexport default function QueryWrapperPlotNav(props: QueryWrapperPlotNavProps) {\n const {\n sql: deprecatedSql,\n tableConfiguration,\n isInfinite = !tableConfiguration,\n limit = DEFAULT_PAGE_SIZE,\n showLastUpdatedOn,\n unitDescription,\n additionalFiltersSessionStorageKey,\n helpConfiguration,\n customPlots,\n enabledExternalAnalysisPlatforms,\n } = props\n\n const sql = props.query?.sql ?? deprecatedSql ?? ''\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(sql)\n\n const query: Query = useMemo(() => {\n if (props.query) {\n // use query if set\n return props.query\n } else if (props.initQueryJson) {\n // Otherwise use initQueryJson\n return JSON.parse(props.initQueryJson) as Query\n } else {\n // use the deprecated sql, searchParams, and sqlOperator\n const additionalFilters = getAdditionalFilters(\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n return {\n sql: deprecatedSql!,\n additionalFilters,\n limit: limit,\n offset: 0,\n }\n }\n }, [\n props.query,\n props.initQueryJson,\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n deprecatedSql,\n limit,\n ])\n\n const [componentKey, setComponentKey] = useState(1)\n const remount = () => {\n setComponentKey(componentKey + 1)\n }\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n const initQueryRequest: QueryBundleRequest = {\n entityId: entityId ?? '',\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |\n SynapseConstants.BUNDLE_MASK_QUERY_COUNT |\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS |\n SynapseConstants.BUNDLE_MASK_QUERY_FACETS |\n SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES |\n SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON,\n query,\n }\n const isFullTextSearchEnabled =\n (entity && isTable(entity) && entity.isSearchEnabled) ?? false\n\n /**\n * Fully re-render the uncontrolled QueryWrapper component when the initial query changes. This eliminates a class of\n * bugs where our 'derived' state (the current query), which should be reset, is out of sync with props.\n *\n * See https://legacy.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\n */\n const queryWrapperKey = `${JSON.stringify(initQueryRequest)}-${componentKey}`\n\n return (\n <QueryWrapper\n {...props}\n initQueryRequest={initQueryRequest}\n key={queryWrapperKey}\n isInfinite={isInfinite}\n >\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n defaultShowSearchBar={\n (props.defaultShowSearchBox || isFullTextSearchEnabled) &&\n !props.hideSearchBarControl\n }\n hideSearchBarControl={props.hideSearchBarControl}\n showLastUpdatedOn={showLastUpdatedOn}\n noContentPlaceholderType={NoContentPlaceholderType.INTERACTIVE}\n hasCustomPlots={Array.isArray(customPlots) && customPlots.length > 0}\n enabledExternalAnalysisPlatforms={enabledExternalAnalysisPlatforms}\n >\n <QueryWrapperPlotNavContents\n {...props}\n isFullTextSearchEnabled={isFullTextSearchEnabled}\n remount={remount}\n />\n </QueryVisualizationWrapper>\n </QueryWrapper>\n )\n}\n"],"names":["QUERY_FILTERS_EXPANDED_CSS","QUERY_FILTERS_COLLAPSED_CSS","HAS_SELECTED_ROWS_CSS","QueryWrapperPlotNavContents","props","tableConfiguration","name","cardConfiguration","facetsToPlot","availableFacets","initialExpandedFacetControls","hideDownload","hideQueryCount","hideSqlEditorControl","hideVisualizationsControl","searchConfiguration","cavaticaConnectAccountURL","customControls","remount","isFullTextSearchEnabled","customPlots","initialLimit","initialPlotType","queryContext","useQueryContext","showExportMetadata","setShowExportMetadata","useState","isFaceted","queryMetadataQueryOptions","isLoadingQueryMetadata","useQuery","isRowSelectionVisible","useAtomValue","isRowSelectionVisibleAtom","currentQueryRequest","hasFacetsOrFilters","addToDownloadListRequest","useGetAddToDownloadListRequestForCurrentQuery","jsx","QueryVisualizationContextConsumer","queryVisualizationContext","Box","QueryWrapperErrorBoundary","FullTextSearch","SearchV2","SqlEditor","AddToDownloadListConfirmationAlert","SynapseErrorBoundary","TopLevelControls","Fragment","FacetFilterControls","TotalQueryResults","CustomControls","PlotsContainer","RowSetView","ModalDownload","QueryWrapperPlotNav","deprecatedSql","isInfinite","limit","DEFAULT_PAGE_SIZE","showLastUpdatedOn","unitDescription","additionalFiltersSessionStorageKey","helpConfiguration","enabledExternalAnalysisPlatforms","sql","entityId","versionNumber","parseEntityIdAndVersionFromSqlStatement","query","useMemo","additionalFilters","getAdditionalFilters","componentKey","setComponentKey","entity","useGetEntity","initQueryRequest","SynapseConstants.BUNDLE_MASK_QUERY_RESULTS","SynapseConstants.BUNDLE_MASK_QUERY_COUNT","SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS","SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE","SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS","SynapseConstants.BUNDLE_MASK_QUERY_FACETS","SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES","SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON","isTable","queryWrapperKey","createElement","QueryWrapper","QueryVisualizationWrapper","NoContentPlaceholderType"],"mappings":"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"}
1
+ {"version":3,"file":"QueryWrapperPlotNav.js","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"sourcesContent":["import { QueryOrDeprecatedSearchParams } from '@/components/CardContainerLogic/CardContainerLogic'\nimport AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport {\n getAdditionalFilters,\n parseEntityIdAndVersionFromSqlStatement,\n} from '@/utils/functions'\nimport { isTable } from '@/utils/functions/EntityTypeUtils'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Box } from '@mui/material'\nimport { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { useMemo, useState } from 'react'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport { SynapseErrorBoundary } from '../error'\nimport FullTextSearch from '../FullTextSearch/FullTextSearch'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { QueryWrapperPlotNavCustomPlotParams } from '../Plot/SynapsePlot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryVisualizationContextConsumer,\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport { QueryWrapper, QueryWrapperProps } from '../QueryWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport SearchV2, { SearchV2Props } from '../SynapseTable/SearchV2'\nimport SqlEditor from '../SynapseTable/SqlEditor'\nimport TopLevelControls, {\n TopLevelControlsProps,\n CustomControl,\n} from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { CustomControls } from '../SynapseTable/CustomControls/CustomControls'\nimport TotalQueryResults from '../TotalQueryResults'\nimport PlotsContainer, {\n PlotsContainerProps,\n} from '../widgets/facet-nav/PlotsContainer'\nimport FacetFilterControls, {\n FacetFilterControlsProps,\n} from '../widgets/query-filter/FacetFilterControls'\nimport { QueryWrapperSynapsePlotProps } from './QueryWrapperSynapsePlot'\nimport { RowSetView } from './RowSetView'\n\nexport const QUERY_FILTERS_EXPANDED_CSS: string = 'isShowingFacetFilters'\nexport const QUERY_FILTERS_COLLAPSED_CSS: string = 'isHidingFacetFilters'\n\nexport const HAS_SELECTED_ROWS_CSS: string = 'hasSelectedRows'\n\ntype QueryWrapperPlotNavOwnProps = {\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n /** Set to true when you want the query to be saved in the URL search parameters. If you are controlling the view (such as in PortalSearch), you'll want to set this to false */\n shouldDeepLink?: boolean\n /** If onQueryChange is set, the callback will be invoked when the Query changes */\n onQueryChange?: (newQueryJson: string) => void\n /** If onQueryResultBundleChange is set, the callback will be invoked when the QueryResultBundle changes */\n onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void\n /** If initQueryJson is set, it will be the Query used in the initial QueryBundleRequest */\n initQueryJson?: string\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n searchConfiguration?: Omit<\n SearchV2Props,\n 'queryContext' | 'queryVisualizationContext'\n >\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n customPlots?: QueryWrapperSynapsePlotProps[]\n customControls?: CustomControl[]\n defaultColumn?: string\n defaultShowSearchBox?: boolean\n lockedColumn?: QueryWrapperProps['lockedColumn']\n onViewSharingSettingsClicked?: (benefactorId: string) => void\n initialLimit?: number\n hideTopLevelControls?: boolean\n} & Omit<TopLevelControlsProps, 'entityId'> &\n Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> &\n Pick<\n QueryWrapperProps,\n | 'isRowSelectionVisible'\n | 'rowSelectionPrimaryKey'\n | 'isRowSelectionUIFloating'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n > &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'columnAliases'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'additionalFiltersSessionStorageKey'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideSearchBarControl'\n | 'hideVisualizationsControl'\n | 'enabledExternalAnalysisPlatforms'\n > &\n Pick<QueryContextType, 'combineRangeFacetConfig'>\n\nexport type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams &\n PlotsContainerProps &\n QueryWrapperPlotNavOwnProps\n\ntype QueryWrapperPlotNavContentsProps = Pick<\n QueryWrapperPlotNavProps,\n | 'tableConfiguration'\n | 'name'\n | 'cardConfiguration'\n | 'facetsToPlot'\n | 'availableFacets'\n | 'initialExpandedFacetControls'\n | 'hideDownload'\n | 'hideQueryCount'\n | 'hideSqlEditorControl'\n | 'hideVisualizationsControl'\n | 'searchConfiguration'\n | 'enabledExternalAnalysisPlatforms'\n | 'cavaticaConnectAccountURL'\n | 'customControls'\n | 'customPlots'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n | 'initialLimit'\n | 'initialPlotType'\n | 'hideTopLevelControls'\n> & {\n isFullTextSearchEnabled: boolean\n remount: () => void\n}\n\nfunction QueryWrapperPlotNavContents(props: QueryWrapperPlotNavContentsProps) {\n const {\n tableConfiguration,\n name,\n cardConfiguration,\n facetsToPlot,\n availableFacets,\n initialExpandedFacetControls,\n hideDownload,\n hideQueryCount,\n hideSqlEditorControl,\n hideVisualizationsControl,\n searchConfiguration,\n cavaticaConnectAccountURL,\n customControls,\n remount,\n isFullTextSearchEnabled,\n customPlots,\n initialLimit,\n initialPlotType,\n hideTopLevelControls,\n } = props\n const queryContext = useQueryContext()\n const [showExportMetadata, setShowExportMetadata] = useState(false)\n const { hasFacetedSelectColumn: isFaceted, queryMetadataQueryOptions } =\n queryContext\n const { isLoading: isLoadingQueryMetadata } = useQuery(\n queryMetadataQueryOptions,\n )\n\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const currentQueryRequest = queryContext.currentQueryRequest\n\n const hasFacetsOrFilters =\n (currentQueryRequest?.query.selectedFacets !== undefined &&\n currentQueryRequest.query.selectedFacets.length > 0) ||\n (currentQueryRequest?.query.additionalFilters !== undefined &&\n currentQueryRequest?.query.additionalFilters.length > 0)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n return (\n <QueryVisualizationContextConsumer>\n {queryVisualizationContext => {\n if (queryVisualizationContext === undefined) {\n throw new Error(\n 'No queryVisualizationContext found when using QueryVisualizationContextConsumer',\n )\n }\n\n return (\n <Box\n className={`QueryWrapperPlotNav ${\n queryVisualizationContext.showFacetFilter\n ? QUERY_FILTERS_EXPANDED_CSS\n : QUERY_FILTERS_COLLAPSED_CSS\n } ${isRowSelectionVisible ? HAS_SELECTED_ROWS_CSS : ''} ${\n hideTopLevelControls ? 'isHidingTopLevelControls' : ''\n }`}\n sx={{\n '*': {\n cursor: isLoadingQueryMetadata ? 'wait' : undefined,\n },\n }}\n >\n <QueryWrapperErrorBoundary>\n {isFullTextSearchEnabled ? (\n <FullTextSearch ftsConfig={searchConfiguration?.ftsConfig} />\n ) : (\n <SearchV2\n {...searchConfiguration}\n queryContext={queryContext}\n queryVisualizationContext={queryVisualizationContext}\n />\n )}\n <SqlEditor />\n {queryVisualizationContext.showDownloadConfirmation && (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() =>\n queryVisualizationContext.setShowDownloadConfirmation(false)\n }\n />\n )}\n {!hideTopLevelControls && (\n <SynapseErrorBoundary>\n <TopLevelControls\n showColumnSelection={tableConfiguration !== undefined}\n name={name}\n hideDownload={hideDownload}\n hideQueryCount={hideQueryCount}\n hideFacetFilterControl={!isFaceted}\n hideVisualizationsControl={\n !isFaceted || hideVisualizationsControl\n }\n hideSqlEditorControl={hideSqlEditorControl}\n cavaticaConnectAccountURL={cavaticaConnectAccountURL}\n remount={remount}\n customControls={customControls}\n />\n </SynapseErrorBoundary>\n )}\n {isFaceted && (\n <>\n <FacetFilterControls\n availableFacets={availableFacets}\n initialExpandedFacetControls={initialExpandedFacetControls}\n />\n </>\n )}\n <TotalQueryResults\n frontText={''}\n endText={hasFacetsOrFilters ? 'filtered by' : ''}\n hideIfUnfiltered={true}\n />\n <CustomControls\n customControls={customControls}\n remount={remount}\n />\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n customPlots={customPlots}\n initialPlotType={initialPlotType}\n />\n <RowSetView\n tableConfiguration={tableConfiguration}\n hideDownload={hideDownload}\n cardConfiguration={cardConfiguration}\n initialLimit={initialLimit}\n />\n {showExportMetadata && (\n <ModalDownload\n getLastQueryRequest={queryContext?.getCurrentQueryRequest}\n onClose={() => setShowExportMetadata(false)}\n />\n )}\n </QueryWrapperErrorBoundary>\n </Box>\n )\n }}\n </QueryVisualizationContextConsumer>\n )\n}\n\nexport default function QueryWrapperPlotNav(props: QueryWrapperPlotNavProps) {\n const {\n sql: deprecatedSql,\n tableConfiguration,\n isInfinite = !tableConfiguration,\n limit = DEFAULT_PAGE_SIZE,\n showLastUpdatedOn,\n unitDescription,\n additionalFiltersSessionStorageKey,\n helpConfiguration,\n customPlots,\n enabledExternalAnalysisPlatforms,\n } = props\n\n const sql = props.query?.sql ?? deprecatedSql ?? ''\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(sql)\n\n const query: Query = useMemo(() => {\n if (props.query) {\n // use query if set\n return props.query\n } else if (props.initQueryJson) {\n // Otherwise use initQueryJson\n return JSON.parse(props.initQueryJson) as Query\n } else {\n // use the deprecated sql, searchParams, and sqlOperator\n const additionalFilters = getAdditionalFilters(\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n return {\n sql: deprecatedSql!,\n additionalFilters,\n limit: limit,\n offset: 0,\n }\n }\n }, [\n props.query,\n props.initQueryJson,\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n deprecatedSql,\n limit,\n ])\n\n const [componentKey, setComponentKey] = useState(1)\n const remount = () => {\n setComponentKey(componentKey + 1)\n }\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n const initQueryRequest: QueryBundleRequest = {\n entityId: entityId ?? '',\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |\n SynapseConstants.BUNDLE_MASK_QUERY_COUNT |\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS |\n SynapseConstants.BUNDLE_MASK_QUERY_FACETS |\n SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES |\n SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON,\n query,\n }\n const isFullTextSearchEnabled =\n (entity && isTable(entity) && entity.isSearchEnabled) ?? false\n\n /**\n * Fully re-render the uncontrolled QueryWrapper component when the initial query changes. This eliminates a class of\n * bugs where our 'derived' state (the current query), which should be reset, is out of sync with props.\n *\n * See https://legacy.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\n */\n const queryWrapperKey = `${JSON.stringify(initQueryRequest)}-${componentKey}`\n\n return (\n <QueryWrapper\n {...props}\n initQueryRequest={initQueryRequest}\n key={queryWrapperKey}\n isInfinite={isInfinite}\n >\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n defaultShowSearchBar={\n (props.defaultShowSearchBox || isFullTextSearchEnabled) &&\n !props.hideSearchBarControl\n }\n hideSearchBarControl={props.hideSearchBarControl}\n showLastUpdatedOn={showLastUpdatedOn}\n noContentPlaceholderType={NoContentPlaceholderType.INTERACTIVE}\n hasCustomPlots={Array.isArray(customPlots) && customPlots.length > 0}\n enabledExternalAnalysisPlatforms={enabledExternalAnalysisPlatforms}\n >\n <QueryWrapperPlotNavContents\n {...props}\n isFullTextSearchEnabled={isFullTextSearchEnabled}\n remount={remount}\n />\n </QueryVisualizationWrapper>\n </QueryWrapper>\n )\n}\n"],"names":["QUERY_FILTERS_EXPANDED_CSS","QUERY_FILTERS_COLLAPSED_CSS","HAS_SELECTED_ROWS_CSS","QueryWrapperPlotNavContents","props","tableConfiguration","name","cardConfiguration","facetsToPlot","availableFacets","initialExpandedFacetControls","hideDownload","hideQueryCount","hideSqlEditorControl","hideVisualizationsControl","searchConfiguration","cavaticaConnectAccountURL","customControls","remount","isFullTextSearchEnabled","customPlots","initialLimit","initialPlotType","hideTopLevelControls","queryContext","useQueryContext","showExportMetadata","setShowExportMetadata","useState","isFaceted","queryMetadataQueryOptions","isLoadingQueryMetadata","useQuery","isRowSelectionVisible","useAtomValue","isRowSelectionVisibleAtom","currentQueryRequest","hasFacetsOrFilters","addToDownloadListRequest","useGetAddToDownloadListRequestForCurrentQuery","jsx","QueryVisualizationContextConsumer","queryVisualizationContext","Box","QueryWrapperErrorBoundary","FullTextSearch","SearchV2","SqlEditor","AddToDownloadListConfirmationAlert","SynapseErrorBoundary","TopLevelControls","Fragment","FacetFilterControls","TotalQueryResults","CustomControls","PlotsContainer","RowSetView","ModalDownload","QueryWrapperPlotNav","deprecatedSql","isInfinite","limit","DEFAULT_PAGE_SIZE","showLastUpdatedOn","unitDescription","additionalFiltersSessionStorageKey","helpConfiguration","enabledExternalAnalysisPlatforms","sql","entityId","versionNumber","parseEntityIdAndVersionFromSqlStatement","query","useMemo","additionalFilters","getAdditionalFilters","componentKey","setComponentKey","entity","useGetEntity","initQueryRequest","SynapseConstants.BUNDLE_MASK_QUERY_RESULTS","SynapseConstants.BUNDLE_MASK_QUERY_COUNT","SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS","SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE","SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS","SynapseConstants.BUNDLE_MASK_QUERY_FACETS","SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES","SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON","isTable","queryWrapperKey","createElement","QueryWrapper","QueryVisualizationWrapper","NoContentPlaceholderType"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDO,MAAMA,KAAqC,yBACrCC,KAAsC,wBAEtCC,KAAgC;AA2F7C,SAASC,GAA4BC,GAAyC;AAC5E,QAAM;AAAA,IACJ,oBAAAC;AAAA,IACA,MAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA,IACEnB,GACEoB,IAAeC,GAAA,GACf,CAACC,GAAoBC,CAAqB,IAAIC,EAAS,EAAK,GAC5D,EAAE,wBAAwBC,GAAW,2BAAAC,EAAA,IACzCN,GACI,EAAE,WAAWO,EAAA,IAA2BC;AAAA,IAC5CF;AAAA,EAAA,GAGIG,IAAwBC,GAAaC,EAAyB,GAE9DC,IAAsBZ,EAAa,qBAEnCa,IACHD,GAAqB,MAAM,mBAAmB,UAC7CA,EAAoB,MAAM,eAAe,SAAS,KACnDA,GAAqB,MAAM,sBAAsB,UAChDA,GAAqB,MAAM,kBAAkB,SAAS,GAEpDE,IACJC,EAAA;AAEF,SACE,gBAAAC,EAACC,MACE,UAAA,CAAAC,MAA6B;AAC5B,QAAIA,MAA8B;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAIJ,WACE,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,WAAW,uBACTD,EAA0B,kBACtB1C,KACAC,EACN,IAAIgC,IAAwB/B,KAAwB,EAAE,IACpDqB,IAAuB,6BAA6B,EACtD;AAAA,QACA,IAAI;AAAA,UACF,KAAK;AAAA,YACH,QAAQQ,IAAyB,SAAS;AAAA,UAAA;AAAA,QAC5C;AAAA,QAGF,4BAACa,IAAA,EACE,UAAA;AAAA,UAAAzB,IACC,gBAAAqB,EAACK,IAAA,EAAe,WAAW9B,GAAqB,WAAW,IAE3D,gBAAAyB;AAAA,YAACM;AAAAA,YAAA;AAAA,cACE,GAAG/B;AAAA,cACJ,cAAAS;AAAA,cACA,2BAAAkB;AAAA,YAAA;AAAA,UAAA;AAAA,4BAGHK,IAAA,EAAU;AAAA,UACVL,EAA0B,4BACzB,gBAAAF;AAAA,YAACQ;AAAA,YAAA;AAAA,cACC,0BAAAV;AAAA,cACA,SAAS,MACPI,EAA0B,4BAA4B,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAIhE,CAACnB,KACA,gBAAAiB,EAACS,IAAA,EACC,UAAA,gBAAAT;AAAA,YAACU;AAAA,YAAA;AAAA,cACC,qBAAqB7C,MAAuB;AAAA,cAC5C,MAAAC;AAAA,cACA,cAAAK;AAAA,cACA,gBAAAC;AAAA,cACA,wBAAwB,CAACiB;AAAA,cACzB,2BACE,CAACA,KAAaf;AAAA,cAEhB,sBAAAD;AAAA,cACA,2BAAAG;AAAA,cACA,SAAAE;AAAA,cACA,gBAAAD;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,UAEDY,KACC,gBAAAW,EAAAW,GAAA,EACE,UAAA,gBAAAX;AAAA,YAACY;AAAAA,YAAA;AAAA,cACC,iBAAA3C;AAAA,cACA,8BAAAC;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,UAEF,gBAAA8B;AAAA,YAACa;AAAAA,YAAA;AAAA,cACC,WAAW;AAAA,cACX,SAAShB,IAAqB,gBAAgB;AAAA,cAC9C,kBAAkB;AAAA,YAAA;AAAA,UAAA;AAAA,UAEpB,gBAAAG;AAAA,YAACc;AAAA,YAAA;AAAA,cACC,gBAAArC;AAAA,cACA,SAAAC;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAsB;AAAA,YAACe;AAAAA,YAAA;AAAA,cACC,cAAA/C;AAAA,cACA,aAAAY;AAAA,cACA,iBAAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAkB;AAAA,YAACgB;AAAA,YAAA;AAAA,cACC,oBAAAnD;AAAA,cACA,cAAAM;AAAA,cACA,mBAAAJ;AAAA,cACA,cAAAc;AAAA,YAAA;AAAA,UAAA;AAAA,UAEDK,KACC,gBAAAc;AAAA,YAACiB;AAAA,YAAA;AAAA,cACC,qBAAqBjC,GAAc;AAAA,cACnC,SAAS,MAAMG,EAAsB,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QAC5C,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN,GACF;AAEJ;AAEA,SAAwB+B,GAAoBtD,GAAiC;AAC3E,QAAM;AAAA,IACJ,KAAKuD;AAAA,IACL,oBAAAtD;AAAA,IACA,YAAAuD,IAAa,CAACvD;AAAA,IACd,OAAAwD,IAAQC;AAAA,IACR,mBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,oCAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAA9C;AAAA,IACA,kCAAA+C;AAAA,EAAA,IACE/D,GAEEgE,IAAMhE,EAAM,OAAO,OAAOuD,KAAiB,IAC3C,EAAE,UAAAU,GAAU,eAAAC,MAChBC,EAAwCH,CAAG,GAEvCI,IAAeC,EAAQ,MAAM;AACjC,QAAIrE,EAAM;AAER,aAAOA,EAAM;AACf,QAAWA,EAAM;AAEf,aAAO,KAAK,MAAMA,EAAM,aAAa;AAChC;AAEL,YAAMsE,IAAoBC;AAAA,QACxBvE,EAAM;AAAA,QACNA,EAAM;AAAA,QACN6D;AAAA,MAAA;AAEF,aAAO;AAAA,QACL,KAAKN;AAAA,QACL,mBAAAe;AAAA,QACA,OAAAb;AAAA,QACA,QAAQ;AAAA,MAAA;AAAA,IAEZ;AAAA,EACF,GAAG;AAAA,IACDzD,EAAM;AAAA,IACNA,EAAM;AAAA,IACNA,EAAM;AAAA,IACNA,EAAM;AAAA,IACN6D;AAAA,IACAN;AAAA,IACAE;AAAA,EAAA,CACD,GAEK,CAACe,GAAcC,CAAe,IAAIjD,EAAS,CAAC,GAC5CV,IAAU,MAAM;AACpB,IAAA2D,EAAgBD,IAAe,CAAC;AAAA,EAClC,GAEM,EAAE,MAAME,EAAA,IAAWC,GAAaV,GAAUC,CAAa,GACvDU,IAAuC;AAAA,IAC3C,UAAUX,KAAY;AAAA,IACtB,cAAc;AAAA,IACd,UACEY,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC;AAAAA,IACF,OAAAhB;AAAA,EAAA,GAEIrD,KACH2D,KAAUW,EAAQX,CAAM,KAAKA,EAAO,oBAAoB,IAQrDY,IAAkB,GAAG,KAAK,UAAUV,CAAgB,CAAC,IAAIJ,CAAY;AAE3E,SACE,gBAAAe;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGxF;AAAA,MACJ,kBAAA4E;AAAA,MACA,KAAKU;AAAA,MACL,YAAA9B;AAAA,IAAA;AAAA,IAEA,gBAAApB;AAAA,MAACqD;AAAA,MAAA;AAAA,QACC,iBAAA7B;AAAA,QACA,UAAU5D,EAAM;AAAA,QAChB,eAAeA,EAAM;AAAA,QACrB,mBAAA8D;AAAA,QACA,oBAAoB9D,EAAM;AAAA,QAC1B,kBAAkBA,EAAM;AAAA,QACxB,qBAAqBA,EAAM;AAAA,QAC3B,uBACGA,EAAM,wBAAwBe,MAC/B,CAACf,EAAM;AAAA,QAET,sBAAsBA,EAAM;AAAA,QAC5B,mBAAA2D;AAAA,QACA,0BAA0B+B,EAAyB;AAAA,QACnD,gBAAgB,MAAM,QAAQ1E,CAAW,KAAKA,EAAY,SAAS;AAAA,QACnE,kCAAA+C;AAAA,QAEA,UAAA,gBAAA3B;AAAA,UAACrC;AAAA,UAAA;AAAA,YACE,GAAGC;AAAA,YACJ,yBAAAe;AAAA,YACA,SAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAGN;"}
@@ -18,11 +18,14 @@ import "@mui/material/SvgIcon";
18
18
  import "../assets/icons/AccessPending.svg.js";
19
19
  import "../assets/icons/AccessPendingCloud.svg.js";
20
20
  import "../assets/icons/FileWithShield.svg.js";
21
+ import "../assets/icons/MultiFile.svg.js";
22
+ import "../assets/icons/UnpackagableFile.svg.js";
21
23
  import "../assets/icons/bioChemicalPhysical.svg.js";
22
24
  import "../assets/icons/computationalTool.svg.js";
23
25
  import "../assets/icons/dataReuse.svg.js";
24
26
  import "../assets/icons/inSilicoModel.svg.js";
25
27
  import "../assets/icons/modelSystem.svg.js";
28
+ import "../assets/mui_components/PackagableFile.svg.js";
26
29
  import "../assets/icons/spatialProfiling.svg.js";
27
30
  import { SynapseToastContainer as Q } from "./ToastMessage/ToastMessage.js";
28
31
  import "./Authentication/RecoveryCodeGrid.js";
@@ -64,7 +67,7 @@ function U(n) {
64
67
  const e = M[n];
65
68
  window.SRC_OVERRIDE_ENDPOINT_CONFIG = e;
66
69
  }
67
- function Bt(n) {
70
+ function Vt(n) {
68
71
  const { storybookContext: e } = n, r = e.globals.stack || e.parameters.stack;
69
72
  p(() => {
70
73
  U(r);
@@ -168,7 +171,7 @@ function Bt(n) {
168
171
  return /* @__PURE__ */ i(N, { router: v });
169
172
  }
170
173
  export {
171
- Bt as StorybookComponentWrapper,
172
- Bt as default
174
+ Vt as StorybookComponentWrapper,
175
+ Vt as default
173
176
  };
174
177
  //# sourceMappingURL=StorybookComponentWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorybookComponentWrapper.js","sources":["../../src/components/StorybookComponentWrapper.tsx"],"sourcesContent":["import { StandaloneLoginForm } from '@/components/Authentication/index'\nimport SynapseClient from '@/synapse-client'\nimport {\n defaultQueryClientConfig,\n SynapseContextProvider,\n SynapseContextType,\n} from '@/utils'\nimport { ApplicationSessionContextProvider } from '@/utils/AppUtils/session/ApplicationSessionContext'\nimport {\n SynapseSessionManager,\n type SessionState,\n} from '@/utils/AppUtils/session/SynapseSessionManager'\nimport { STACK_MAP, SynapseStack } from '@/utils/functions/getEndpoint'\nimport useDetectSSOCode from '@/utils/hooks/useDetectSSOCode'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport {\n ReactNode,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { createMemoryRouter } from 'react-router'\nimport { RouterProvider } from 'react-router/dom'\nimport { SynapseToastContainer } from './ToastMessage'\n\nconst storybookQueryClient = new QueryClient(defaultQueryClientConfig)\n\n// Module-level session manager instance, stable across story switches (like the QueryClient above)\nconst sessionManager = new SynapseSessionManager({\n onSessionInvalid: () => {\n // In Storybook, just refresh the session instead of reloading the page\n sessionManager.refreshSession()\n },\n})\n\nfunction overrideEndpoint(stack: SynapseStack) {\n const endpointConfig = STACK_MAP[stack]\n ;(window as any)['SRC_OVERRIDE_ENDPOINT_CONFIG'] = endpointConfig\n}\n\n/**\n * Wraps storybook story components to ensure that all components receive required context.\n * @param props\n * @returns\n */\nexport function StorybookComponentWrapper(props: {\n children: ReactNode\n /* This will match the `globalTypes` object in preview.tsx. */\n storybookContext: {\n args: {\n isAuthenticated?: boolean\n }\n globals: {\n stack?: SynapseStack\n showReactQueryDevtools?: boolean\n }\n parameters: {\n stack?: SynapseStack\n withRouter?: boolean\n requireLogin?: boolean\n }\n }\n}) {\n const { storybookContext } = props\n\n const currentStack: SynapseStack = (storybookContext.globals.stack ||\n storybookContext.parameters.stack) as SynapseStack\n\n useEffect(() => {\n overrideEndpoint(currentStack)\n }, [currentStack])\n\n // Subscribe to the framework-agnostic SynapseSessionManager for token/auth state\n // These methods are bound in the SynapseSessionManager constructor, so they are safe to pass directly.\n const sessionState: SessionState = useSyncExternalStore(\n // eslint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.subscribe,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.getSnapshot,\n )\n\n // Track whether we've started the manager so we only start once (module-level instance persists across renders)\n const managerStartedRef = useRef(false)\n\n useEffect(() => {\n if (!managerStartedRef.current) {\n sessionManager.start()\n managerStartedRef.current = true\n }\n return () => {\n sessionManager.dispose()\n managerStartedRef.current = false\n }\n }, [])\n\n // When the stack changes, restart the session manager to pick up the new endpoint\n useEffect(() => {\n if (managerStartedRef.current) {\n sessionManager.dispose()\n sessionManager.start()\n }\n }, [currentStack])\n\n const shouldPromptForLogin =\n storybookContext.parameters.requireLogin &&\n currentStack !== 'mock' &&\n sessionState.hasInitializedSession &&\n !sessionState.isAuthenticated\n\n const { isLoading: isLoadingSSO } = useDetectSSOCode({\n onSignInComplete: () => {\n void sessionManager.refreshSession()\n },\n onError: (err: unknown) => {\n console.error('SSO error in Storybook:', err)\n },\n isInitializingSession: !sessionState.hasInitializedSession,\n isAuthenticated: sessionState.isAuthenticated,\n })\n\n useEffect(() => {\n async function resetCache() {\n await storybookQueryClient.cancelQueries()\n await storybookQueryClient.resetQueries()\n }\n\n void resetCache()\n }, [sessionState.token, currentStack])\n\n const effectiveToken = useMemo(() => {\n if (currentStack === 'mock') {\n return storybookContext.args.isAuthenticated ? 'fake token' : undefined\n }\n return sessionState.token\n }, [sessionState.token, currentStack, storybookContext.args.isAuthenticated])\n\n const effectiveIsAuthenticated = useMemo(() => {\n if (currentStack === 'mock') {\n return !!storybookContext.args.isAuthenticated\n }\n return sessionState.isAuthenticated\n }, [\n sessionState.isAuthenticated,\n currentStack,\n storybookContext.args.isAuthenticated,\n ])\n\n const refreshSession = useCallback(async () => {\n await sessionManager.refreshSession()\n }, [])\n\n const clearSession = useCallback(async () => {\n await sessionManager.clearSession()\n }, [])\n\n const applicationSessionContext = useMemo(\n () => ({\n token: effectiveToken,\n realmId: sessionState.realmId,\n userId: sessionState.userId,\n isAuthenticated: effectiveIsAuthenticated,\n hasInitializedSession: sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n twoFactorAuthSSOErrorResponse: undefined,\n termsOfServiceStatus: undefined,\n twoFactorStatus: undefined,\n }),\n [\n effectiveToken,\n effectiveIsAuthenticated,\n sessionState.realmId,\n sessionState.userId,\n sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n ],\n )\n\n const synapseContext: Partial<SynapseContextType> = useMemo(\n () => ({\n accessToken: effectiveToken,\n isAuthenticated: effectiveIsAuthenticated,\n isInExperimentalMode: SynapseClient.isInSynapseExperimentalMode(),\n utcTime: SynapseClient.getUseUtcTimeFromCookie(),\n withErrorBoundary: true,\n downloadCartPageUrl: '/?path=/story/download-downloadcartpage--demo',\n }),\n [effectiveToken, effectiveIsAuthenticated],\n )\n\n const wrappedStory = (\n <Suspense fallback={'global suspense loading...'}>\n <QueryClientProvider client={storybookQueryClient}>\n <ApplicationSessionContextProvider context={applicationSessionContext}>\n <SynapseContextProvider\n key={currentStack}\n synapseContext={synapseContext}\n >\n {storybookContext.globals.showReactQueryDevtools && (\n <ReactQueryDevtools />\n )}\n <SynapseToastContainer />\n <main>\n {shouldPromptForLogin ? (\n <StandaloneLoginForm\n sessionCallback={() => {\n void sessionManager.refreshSession()\n }}\n />\n ) : (\n props.children\n )}\n </main>\n </SynapseContextProvider>\n </ApplicationSessionContextProvider>\n </QueryClientProvider>\n </Suspense>\n )\n\n if (!storybookContext.parameters.withRouter) {\n return wrappedStory\n }\n\n const router = createMemoryRouter([\n {\n path: '/',\n element: wrappedStory,\n },\n ])\n\n return <RouterProvider router={router} />\n}\n\nexport default StorybookComponentWrapper\n"],"names":["storybookQueryClient","QueryClient","defaultQueryClientConfig","sessionManager","SynapseSessionManager","overrideEndpoint","stack","endpointConfig","STACK_MAP","StorybookComponentWrapper","props","storybookContext","currentStack","useEffect","sessionState","useSyncExternalStore","managerStartedRef","useRef","shouldPromptForLogin","isLoadingSSO","useDetectSSOCode","err","resetCache","effectiveToken","useMemo","effectiveIsAuthenticated","refreshSession","useCallback","clearSession","applicationSessionContext","synapseContext","SynapseClient","wrappedStory","jsx","Suspense","QueryClientProvider","ApplicationSessionContextProvider","jsxs","SynapseContextProvider","ReactQueryDevtools","SynapseToastContainer","StandaloneLoginForm","router","createMemoryRouter","RouterProvider"],"mappings":"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"}
1
+ {"version":3,"file":"StorybookComponentWrapper.js","sources":["../../src/components/StorybookComponentWrapper.tsx"],"sourcesContent":["import { StandaloneLoginForm } from '@/components/Authentication/index'\nimport SynapseClient from '@/synapse-client'\nimport {\n defaultQueryClientConfig,\n SynapseContextProvider,\n SynapseContextType,\n} from '@/utils'\nimport { ApplicationSessionContextProvider } from '@/utils/AppUtils/session/ApplicationSessionContext'\nimport {\n SynapseSessionManager,\n type SessionState,\n} from '@/utils/AppUtils/session/SynapseSessionManager'\nimport { STACK_MAP, SynapseStack } from '@/utils/functions/getEndpoint'\nimport useDetectSSOCode from '@/utils/hooks/useDetectSSOCode'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport {\n ReactNode,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { createMemoryRouter } from 'react-router'\nimport { RouterProvider } from 'react-router/dom'\nimport { SynapseToastContainer } from './ToastMessage'\n\nconst storybookQueryClient = new QueryClient(defaultQueryClientConfig)\n\n// Module-level session manager instance, stable across story switches (like the QueryClient above)\nconst sessionManager = new SynapseSessionManager({\n onSessionInvalid: () => {\n // In Storybook, just refresh the session instead of reloading the page\n sessionManager.refreshSession()\n },\n})\n\nfunction overrideEndpoint(stack: SynapseStack) {\n const endpointConfig = STACK_MAP[stack]\n ;(window as any)['SRC_OVERRIDE_ENDPOINT_CONFIG'] = endpointConfig\n}\n\n/**\n * Wraps storybook story components to ensure that all components receive required context.\n * @param props\n * @returns\n */\nexport function StorybookComponentWrapper(props: {\n children: ReactNode\n /* This will match the `globalTypes` object in preview.tsx. */\n storybookContext: {\n args: {\n isAuthenticated?: boolean\n }\n globals: {\n stack?: SynapseStack\n showReactQueryDevtools?: boolean\n }\n parameters: {\n stack?: SynapseStack\n withRouter?: boolean\n requireLogin?: boolean\n }\n }\n}) {\n const { storybookContext } = props\n\n const currentStack: SynapseStack = (storybookContext.globals.stack ||\n storybookContext.parameters.stack) as SynapseStack\n\n useEffect(() => {\n overrideEndpoint(currentStack)\n }, [currentStack])\n\n // Subscribe to the framework-agnostic SynapseSessionManager for token/auth state\n // These methods are bound in the SynapseSessionManager constructor, so they are safe to pass directly.\n const sessionState: SessionState = useSyncExternalStore(\n // eslint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.subscribe,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.getSnapshot,\n )\n\n // Track whether we've started the manager so we only start once (module-level instance persists across renders)\n const managerStartedRef = useRef(false)\n\n useEffect(() => {\n if (!managerStartedRef.current) {\n sessionManager.start()\n managerStartedRef.current = true\n }\n return () => {\n sessionManager.dispose()\n managerStartedRef.current = false\n }\n }, [])\n\n // When the stack changes, restart the session manager to pick up the new endpoint\n useEffect(() => {\n if (managerStartedRef.current) {\n sessionManager.dispose()\n sessionManager.start()\n }\n }, [currentStack])\n\n const shouldPromptForLogin =\n storybookContext.parameters.requireLogin &&\n currentStack !== 'mock' &&\n sessionState.hasInitializedSession &&\n !sessionState.isAuthenticated\n\n const { isLoading: isLoadingSSO } = useDetectSSOCode({\n onSignInComplete: () => {\n void sessionManager.refreshSession()\n },\n onError: (err: unknown) => {\n console.error('SSO error in Storybook:', err)\n },\n isInitializingSession: !sessionState.hasInitializedSession,\n isAuthenticated: sessionState.isAuthenticated,\n })\n\n useEffect(() => {\n async function resetCache() {\n await storybookQueryClient.cancelQueries()\n await storybookQueryClient.resetQueries()\n }\n\n void resetCache()\n }, [sessionState.token, currentStack])\n\n const effectiveToken = useMemo(() => {\n if (currentStack === 'mock') {\n return storybookContext.args.isAuthenticated ? 'fake token' : undefined\n }\n return sessionState.token\n }, [sessionState.token, currentStack, storybookContext.args.isAuthenticated])\n\n const effectiveIsAuthenticated = useMemo(() => {\n if (currentStack === 'mock') {\n return !!storybookContext.args.isAuthenticated\n }\n return sessionState.isAuthenticated\n }, [\n sessionState.isAuthenticated,\n currentStack,\n storybookContext.args.isAuthenticated,\n ])\n\n const refreshSession = useCallback(async () => {\n await sessionManager.refreshSession()\n }, [])\n\n const clearSession = useCallback(async () => {\n await sessionManager.clearSession()\n }, [])\n\n const applicationSessionContext = useMemo(\n () => ({\n token: effectiveToken,\n realmId: sessionState.realmId,\n userId: sessionState.userId,\n isAuthenticated: effectiveIsAuthenticated,\n hasInitializedSession: sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n twoFactorAuthSSOErrorResponse: undefined,\n termsOfServiceStatus: undefined,\n twoFactorStatus: undefined,\n }),\n [\n effectiveToken,\n effectiveIsAuthenticated,\n sessionState.realmId,\n sessionState.userId,\n sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n ],\n )\n\n const synapseContext: Partial<SynapseContextType> = useMemo(\n () => ({\n accessToken: effectiveToken,\n isAuthenticated: effectiveIsAuthenticated,\n isInExperimentalMode: SynapseClient.isInSynapseExperimentalMode(),\n utcTime: SynapseClient.getUseUtcTimeFromCookie(),\n withErrorBoundary: true,\n downloadCartPageUrl: '/?path=/story/download-downloadcartpage--demo',\n }),\n [effectiveToken, effectiveIsAuthenticated],\n )\n\n const wrappedStory = (\n <Suspense fallback={'global suspense loading...'}>\n <QueryClientProvider client={storybookQueryClient}>\n <ApplicationSessionContextProvider context={applicationSessionContext}>\n <SynapseContextProvider\n key={currentStack}\n synapseContext={synapseContext}\n >\n {storybookContext.globals.showReactQueryDevtools && (\n <ReactQueryDevtools />\n )}\n <SynapseToastContainer />\n <main>\n {shouldPromptForLogin ? (\n <StandaloneLoginForm\n sessionCallback={() => {\n void sessionManager.refreshSession()\n }}\n />\n ) : (\n props.children\n )}\n </main>\n </SynapseContextProvider>\n </ApplicationSessionContextProvider>\n </QueryClientProvider>\n </Suspense>\n )\n\n if (!storybookContext.parameters.withRouter) {\n return wrappedStory\n }\n\n const router = createMemoryRouter([\n {\n path: '/',\n element: wrappedStory,\n },\n ])\n\n return <RouterProvider router={router} />\n}\n\nexport default StorybookComponentWrapper\n"],"names":["storybookQueryClient","QueryClient","defaultQueryClientConfig","sessionManager","SynapseSessionManager","overrideEndpoint","stack","endpointConfig","STACK_MAP","StorybookComponentWrapper","props","storybookContext","currentStack","useEffect","sessionState","useSyncExternalStore","managerStartedRef","useRef","shouldPromptForLogin","isLoadingSSO","useDetectSSOCode","err","resetCache","effectiveToken","useMemo","effectiveIsAuthenticated","refreshSession","useCallback","clearSession","applicationSessionContext","synapseContext","SynapseClient","wrappedStory","jsx","Suspense","QueryClientProvider","ApplicationSessionContextProvider","jsxs","SynapseContextProvider","ReactQueryDevtools","SynapseToastContainer","StandaloneLoginForm","router","createMemoryRouter","RouterProvider"],"mappings":"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"}
@@ -13,6 +13,12 @@ export type SynapseChatProps = {
13
13
  externalChatState?: ChatState;
14
14
  defaultAgentAccessLevel?: AgentAccessLevel;
15
15
  showAccessLevelMenu?: boolean;
16
+ /**
17
+ * Optional callback invoked once when a chat response is received from the server.
18
+ * Use this for side effects such as navigation based on the response content.
19
+ * Called in the mutation onSuccess handler so it runs exactly once per response.
20
+ */
21
+ onChatResponse?: (responseText: string) => void;
16
22
  };
17
23
  export type ChatInteraction = {
18
24
  userMessage: string;
@@ -23,6 +29,6 @@ export type ChatInteraction = {
23
29
  export type TraceEventWithFriendlyMessage = {
24
30
  friendlyMessage?: string;
25
31
  } & TraceEvent;
26
- export declare function SynapseChat({ initialMessage, agentRegistrationId, chatbotName, hideTitle, textboxPositionOffset, sessionContext, externalSession, setExternalSession, externalChatState, showAccessLevelMenu, }: SynapseChatProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function SynapseChat({ initialMessage, agentRegistrationId, chatbotName, hideTitle, textboxPositionOffset, sessionContext, externalSession, setExternalSession, externalChatState, showAccessLevelMenu, onChatResponse, }: SynapseChatProps): import("react/jsx-runtime").JSX.Element;
27
33
  export default SynapseChat;
28
34
  //# sourceMappingURL=SynapseChat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseChat.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapseChat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,uCAAuC,CAAA;AAiB/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACX,MAAM,iCAAiC,CAAA;AAQxC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B,cAAc,CAAC,EAAE,uBAAuB,CAAA;IAExC,eAAe,CAAC,EAAE,YAAY,CAAA;IAE9B,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,KAAK,IAAI,CAAA;IAE1D,iBAAiB,CAAC,EAAE,SAAS,CAAA;IAE7B,uBAAuB,CAAC,EAAE,gBAAgB,CAAA;IAE1C,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,6BAA6B,EAAE,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GAAG,UAAU,CAAA;AAEd,wBAAgB,WAAW,CAAC,EAC1B,cAAc,EACd,mBAAmB,EACnB,WAA2B,EAC3B,SAAiB,EACjB,qBAA6B,EAC7B,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,mBAA0B,GAC3B,EAAE,gBAAgB,2CAmPlB;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"SynapseChat.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapseChat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,uCAAuC,CAAA;AAiB/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACX,MAAM,iCAAiC,CAAA;AAQxC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B,cAAc,CAAC,EAAE,uBAAuB,CAAA;IAExC,eAAe,CAAC,EAAE,YAAY,CAAA;IAE9B,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,KAAK,IAAI,CAAA;IAE1D,iBAAiB,CAAC,EAAE,SAAS,CAAA;IAE7B,uBAAuB,CAAC,EAAE,gBAAgB,CAAA;IAE1C,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,6BAA6B,EAAE,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GAAG,UAAU,CAAA;AAEd,wBAAgB,WAAW,CAAC,EAC1B,cAAc,EACd,mBAAmB,EACnB,WAA2B,EAC3B,SAAiB,EACjB,qBAA6B,EAC7B,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,mBAA0B,EAC1B,cAAc,GACf,EAAE,gBAAgB,2CA0PlB;AAED,eAAe,WAAW,CAAA"}
@@ -1,9 +1,9 @@
1
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
2
- import { useChatState as J } from "./useChatState.js";
3
- import { useCreateAgentSession as $, useUpdateAgentSession as z } from "../../synapse-queries/chat/useChat.js";
1
+ import { jsx as t, jsxs as i } from "react/jsx-runtime";
2
+ import { useChatState as $ } from "./useChatState.js";
3
+ import { useCreateAgentSession as z, useUpdateAgentSession as F } from "../../synapse-queries/chat/useChat.js";
4
4
  import "../../utils/PermissionLevelToAccessType.js";
5
5
  import "../../utils/SynapseConstants.js";
6
- import { useState as i, useEffect as b } from "react";
6
+ import { useState as a, useEffect as b } from "react";
7
7
  import "../../synapse-client/SynapseClient.js";
8
8
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
9
9
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
@@ -12,14 +12,14 @@ import { AgentAccessLevel as T } from "@sage-bionetworks/synapse-types";
12
12
  import "../../utils/functions/EntityTypeUtils.js";
13
13
  import "lodash-es";
14
14
  import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
15
- import { useSynapseContext as F } from "../../utils/context/SynapseContext.js";
15
+ import { useSynapseContext as G } from "../../utils/context/SynapseContext.js";
16
16
  import "use-deep-compare-effect";
17
17
  import "@tanstack/react-query";
18
18
  import "@tanstack/query-core";
19
19
  import "lodash-es/isEmpty";
20
20
  import "lodash-es/isEqual";
21
21
  import "lodash-es/xorWith";
22
- import { useTheme as G, Alert as O, Box as a, Typography as k, List as q, TextField as H, IconButton as Q } from "@mui/material";
22
+ import { useTheme as O, Alert as q, Box as p, Typography as k, List as H, TextField as Q, IconButton as X } from "@mui/material";
23
23
  import "@sage-bionetworks/synapse-client";
24
24
  import "../../utils/types/IsType.js";
25
25
  import "../../utils/hooks/useCookiePreferences.js";
@@ -30,59 +30,60 @@ import "../../utils/context/FullContextProvider.js";
30
30
  import "../../utils/context/DocumentMetadataContext.js";
31
31
  import '../../style/components/_spinner.css';/* empty css */
32
32
  import "react-router";
33
- import { ArrowUpward as X } from "@mui/icons-material";
33
+ import { ArrowUpward as Z } from "@mui/icons-material";
34
34
  import "@mui/material/Skeleton";
35
- import { SkeletonParagraph as Z } from "../Skeleton/SkeletonParagraph.js";
36
- import { displayToast as N } from "../ToastMessage/ToastMessage.js";
37
- import { AccessLevelMenu as ee } from "./AccessLevelMenu.js";
38
- import { SynapseChatInteraction as te } from "./SynapseChatInteraction.js";
39
- import oe from "./SynapseChatMessage.js";
40
- function Je({
41
- initialMessage: p,
35
+ import { SkeletonParagraph as N } from "../Skeleton/SkeletonParagraph.js";
36
+ import { displayToast as ee } from "../ToastMessage/ToastMessage.js";
37
+ import { AccessLevelMenu as te } from "./AccessLevelMenu.js";
38
+ import { SynapseChatInteraction as oe } from "./SynapseChatInteraction.js";
39
+ import re from "./SynapseChatMessage.js";
40
+ function $e({
41
+ initialMessage: m,
42
42
  agentRegistrationId: f,
43
- chatbotName: m = "SynapseChat",
43
+ chatbotName: l = "SynapseChat",
44
44
  hideTitle: v = !1,
45
45
  textboxPositionOffset: w = "0px",
46
- sessionContext: l,
46
+ sessionContext: c,
47
47
  externalSession: I,
48
48
  setExternalSession: L,
49
49
  externalChatState: E,
50
- showAccessLevelMenu: D = !0
50
+ showAccessLevelMenu: D = !0,
51
+ onChatResponse: M
51
52
  }) {
52
- const { accessToken: M } = F(), [B, P] = i(), o = I ?? B, g = L ?? P, { mutate: c, error: S } = $({
53
+ const { accessToken: B } = G(), [P, R] = a(), o = I ?? P, g = L ?? R, { mutate: d, error: S } = z({
53
54
  onSuccess: (e) => g(e)
54
- }), { mutate: R } = z({
55
+ }), { mutate: U } = F({
55
56
  onSuccess: (e) => g(e),
56
- onError: (e) => N(
57
+ onError: (e) => ee(
57
58
  `Unable to update the agent session: ${e.message}`,
58
59
  "danger"
59
60
  )
60
- }), U = G(), [d, V] = i(
61
- l ? T.WRITE_YOUR_PRIVATE_DATA : T.PUBLICLY_ACCESSIBLE
62
- ), W = J(o), Y = E ?? W, { pendingMessage: u, chatJobIds: _, sendChat: x } = Y, [r, y] = i(""), [A, K] = i(!1);
61
+ }), V = O(), [u, W] = a(
62
+ c ? T.WRITE_YOUR_PRIVATE_DATA : T.PUBLICLY_ACCESSIBLE
63
+ ), Y = $(o, M), _ = E ?? Y, { pendingMessage: x, chatJobIds: K, sendChat: r } = _, [s, y] = a(""), [C, j] = a(!1);
63
64
  b(() => {
64
- c && !o && c({
65
- agentAccessLevel: d,
65
+ d && !o && d({
66
+ agentAccessLevel: u,
66
67
  agentRegistrationId: f,
67
- sessionContext: l
68
+ sessionContext: c
68
69
  });
69
70
  }, [
70
- c,
71
- o,
72
- M,
73
- l,
74
71
  d,
72
+ o,
73
+ B,
74
+ c,
75
+ u,
75
76
  f
76
77
  ]), b(() => {
77
- o && p && !A && (x(p), K(!0));
78
- }, [o, p, A, x]);
78
+ o && m && !C && (r(m), j(!0));
79
+ }, [o, m, C, r]);
79
80
  const h = () => {
80
- r.trim() && (x(r.trim()), y(""));
81
- }, s = !o || !r || !!u, j = (e) => {
82
- !s && e.key === "Enter" && !e.shiftKey && (e.preventDefault(), h());
83
- }, C = U.palette.secondary[300];
84
- return S ? /* @__PURE__ */ t(O, { severity: "error", sx: { my: 2 }, children: S.reason }) : /* @__PURE__ */ n(
85
- a,
81
+ s.trim() && (r(s.trim()), y(""));
82
+ }, n = !o || !s || !!x, J = (e) => {
83
+ !n && e.key === "Enter" && !e.shiftKey && (e.preventDefault(), h());
84
+ }, A = V.palette.secondary[300];
85
+ return S ? /* @__PURE__ */ t(q, { severity: "error", sx: { my: 2 }, children: S.reason }) : /* @__PURE__ */ i(
86
+ p,
86
87
  {
87
88
  sx: {
88
89
  display: "flex",
@@ -106,24 +107,24 @@ function Je({
106
107
  backgroundColor: "white",
107
108
  zIndex: 1
108
109
  },
109
- children: m
110
+ children: l
110
111
  }
111
112
  ),
112
113
  D && /* @__PURE__ */ t(
113
- ee,
114
+ te,
114
115
  {
115
- initAccessLevel: d,
116
+ initAccessLevel: u,
116
117
  onChange: (e) => {
117
- V(e), R({
118
+ W(e), U({
118
119
  agentAccessLevel: e,
119
120
  sessionId: o.sessionId
120
121
  });
121
122
  }
122
123
  }
123
124
  ),
124
- !o && /* @__PURE__ */ t(Z, { numRows: 10 }),
125
- o && /* @__PURE__ */ t(a, { sx: { flexGrow: 1, overflowY: "auto", mb: 2 }, children: /* @__PURE__ */ n(
126
- q,
125
+ !o && /* @__PURE__ */ t(N, { numRows: 10 }),
126
+ o && /* @__PURE__ */ t(p, { sx: { flexGrow: 1, overflowY: "auto", mb: 2 }, children: /* @__PURE__ */ i(
127
+ H,
127
128
  {
128
129
  sx: {
129
130
  flex: 1,
@@ -133,29 +134,37 @@ function Je({
133
134
  flexDirection: "column"
134
135
  },
135
136
  children: [
136
- _.map((e) => /* @__PURE__ */ t(oe, { chatJobId: e }, e)),
137
- u && /* @__PURE__ */ t(
138
- te,
137
+ K.map((e) => /* @__PURE__ */ t(
138
+ re,
139
+ {
140
+ chatJobId: e,
141
+ onSendChat: r
142
+ },
143
+ e
144
+ )),
145
+ x && /* @__PURE__ */ t(
146
+ oe,
139
147
  {
140
- userMessage: u,
148
+ userMessage: x,
141
149
  chatResponseText: "",
142
150
  chatErrorReason: "",
143
- scrollIntoView: !0
151
+ scrollIntoView: !0,
152
+ onSendChat: r
144
153
  }
145
154
  )
146
155
  ]
147
156
  }
148
157
  ) }),
149
158
  /* @__PURE__ */ t(
150
- a,
159
+ p,
151
160
  {
152
161
  sx: {
153
162
  position: "sticky",
154
163
  bottom: w,
155
164
  backgroundColor: "white"
156
165
  },
157
- children: /* @__PURE__ */ n(
158
- a,
166
+ children: /* @__PURE__ */ i(
167
+ p,
159
168
  {
160
169
  component: "form",
161
170
  sx: {
@@ -169,43 +178,43 @@ function Je({
169
178
  onSubmit: h,
170
179
  children: [
171
180
  /* @__PURE__ */ t(
172
- H,
181
+ Q,
173
182
  {
174
183
  fullWidth: !0,
175
- value: r,
184
+ value: s,
176
185
  onChange: (e) => y(e.target.value),
177
- onKeyDown: j,
178
- placeholder: `Message ${m}`,
186
+ onKeyDown: J,
187
+ placeholder: `Message ${l}`,
179
188
  slotProps: {
180
189
  input: {
181
190
  sx: { borderRadius: 96.6 },
182
191
  endAdornment: /* @__PURE__ */ t(
183
- Q,
192
+ X,
184
193
  {
185
- disabled: s,
194
+ disabled: n,
186
195
  onClick: h,
187
196
  sx: {
188
197
  ml: "7px",
189
198
  mr: "-8px",
190
- color: C,
199
+ color: A,
191
200
  borderStyle: "solid",
192
- borderWidth: s ? "1px" : "2px",
193
- borderColor: s ? "gray" : C
201
+ borderWidth: n ? "1px" : "2px",
202
+ borderColor: n ? "gray" : A
194
203
  },
195
- children: /* @__PURE__ */ t(X, {})
204
+ children: /* @__PURE__ */ t(Z, {})
196
205
  }
197
206
  )
198
207
  }
199
208
  }
200
209
  }
201
210
  ),
202
- /* @__PURE__ */ n(
211
+ /* @__PURE__ */ i(
203
212
  k,
204
213
  {
205
214
  variant: "smallText1",
206
215
  sx: { pt: "8px", textAlign: "center" },
207
216
  children: [
208
- m,
217
+ l,
209
218
  " can make mistakes."
210
219
  ]
211
220
  }
@@ -220,7 +229,7 @@ function Je({
220
229
  );
221
230
  }
222
231
  export {
223
- Je as SynapseChat,
224
- Je as default
232
+ $e as SynapseChat,
233
+ $e as default
225
234
  };
226
235
  //# sourceMappingURL=SynapseChat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseChat.js","sources":["../../../src/components/SynapseChat/SynapseChat.tsx"],"sourcesContent":["import { ChatState, useChatState } from '@/components/SynapseChat/useChatState'\nimport {\n useCreateAgentSession,\n useUpdateAgentSession,\n} from '@/synapse-queries/chat/useChat'\nimport { useSynapseContext } from '@/utils'\nimport { ArrowUpward } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n IconButton,\n List,\n TextField,\n Typography,\n useTheme,\n} from '@mui/material'\nimport { Color } from '@mui/material/styles'\nimport { GridAgentSessionContext } from '@sage-bionetworks/synapse-client'\nimport {\n AgentAccessLevel,\n AgentSession,\n TraceEvent,\n} from '@sage-bionetworks/synapse-types'\nimport { KeyboardEventHandler, useEffect, useState } from 'react'\nimport { SkeletonParagraph } from '../Skeleton'\nimport { displayToast } from '../ToastMessage'\nimport AccessLevelMenu from './AccessLevelMenu'\nimport SynapseChatInteraction from './SynapseChatInteraction'\nimport SynapseChatMessage from './SynapseChatMessage'\n\nexport type SynapseChatProps = {\n initialMessage?: string //optional initial message\n agentRegistrationId?: string // if provided, use this agent\n chatbotName?: string // optional name of this chatbot agent\n hideTitle?: boolean\n textboxPositionOffset?: string // when embedded in a form, the textbox (form) stuck to the bottom may need to be offset due to container padding (dialog content for example!)\n /* optional session context for the agent session */\n sessionContext?: GridAgentSessionContext\n /* The current session, if state is lifted out of this component */\n externalSession?: AgentSession\n /* A callback invoked to bootstrap the current session, if state is to be lifted out of this component */\n setExternalSession?: (s: AgentSession | undefined) => void\n /* The current chat history, if state is lifted out of this component */\n externalChatState?: ChatState\n // default access level for the agent session.\n defaultAgentAccessLevel?: AgentAccessLevel\n // Whether to show the access level menu for the agent session.\n showAccessLevelMenu?: boolean\n}\n\nexport type ChatInteraction = {\n userMessage: string\n chatResponseText?: string\n chatErrorReason?: string\n chatResponseTrace?: TraceEventWithFriendlyMessage[]\n}\n\nexport type TraceEventWithFriendlyMessage = {\n friendlyMessage?: string\n} & TraceEvent\n\nexport function SynapseChat({\n initialMessage,\n agentRegistrationId,\n chatbotName = 'SynapseChat',\n hideTitle = false,\n textboxPositionOffset = '0px',\n sessionContext,\n externalSession,\n setExternalSession,\n externalChatState,\n showAccessLevelMenu = true,\n}: SynapseChatProps) {\n const { accessToken } = useSynapseContext()\n const [localAgentSession, setLocalAgentSession] = useState<AgentSession>()\n const agentSession = externalSession ?? localAgentSession\n const setAgentSession = setExternalSession ?? setLocalAgentSession\n\n const { mutate: createAgentSession, error: createAgentSessionError } =\n useCreateAgentSession({\n onSuccess: newAgentSession => setAgentSession(newAgentSession),\n })\n\n const { mutate: updateAgentSession } = useUpdateAgentSession({\n onSuccess: updatedAgentSession => setAgentSession(updatedAgentSession),\n onError: err =>\n displayToast(\n `Unable to update the agent session: ${err.message}`,\n 'danger',\n ),\n })\n const theme = useTheme()\n const [agentAccessLevel, setAgentAccessLevel] = useState<AgentAccessLevel>(\n sessionContext\n ? AgentAccessLevel.WRITE_YOUR_PRIVATE_DATA\n : AgentAccessLevel.PUBLICLY_ACCESSIBLE,\n )\n\n const internalChatState = useChatState(agentSession)\n const chatState = externalChatState ?? internalChatState\n const { pendingMessage, chatJobIds, sendChat } = chatState\n\n // Keep track of the text that the user is currently typing into the textfield\n const [userChatTextfieldValue, setUserChatTextfieldValue] = useState('')\n const [initialMessageProcessed, setInitialMessageProcessed] = useState(false)\n\n // Restore chat session history, if exists.\n // TODO: currently only a single page is restored. Add support for multiple pages (and detect the user scrolling up to restore the next page of results older)\n // const {\n // data: sessionHistoryInfiniteData,\n // } = //, hasNextPage: hasMoreSessionHistory, fetchNextPage: fetchNextSessionHistoryPage, isLoading: isSessionHistoryLoading } =\n // useGetAgentChatSessionHistoryInfinite(\n // {\n // sessionId: agentSession?.sessionId,\n // },\n // {\n // enabled: !!agentSession,\n // },\n // )\n\n // const sessionHistory = useMemo(\n // () =>\n // sessionHistoryInfiniteData?.pages\n // .flatMap(page => page.page)\n // /* Note: session history is ordered from most recent to least recent in each page, so reverse the order when restoring the chat interface */\n // .reverse() ?? [],\n // [sessionHistoryInfiniteData],\n // )\n\n useEffect(() => {\n // on mount, create a new agent session!\n if (createAgentSession && !agentSession) {\n createAgentSession({\n agentAccessLevel,\n agentRegistrationId,\n sessionContext,\n })\n }\n }, [\n createAgentSession,\n agentSession,\n accessToken,\n sessionContext,\n agentAccessLevel,\n agentRegistrationId,\n ])\n\n useEffect(() => {\n // on mount, resolve the initial message chat interaction (if set)\n if (agentSession && initialMessage && !initialMessageProcessed) {\n sendChat(initialMessage)\n setInitialMessageProcessed(true)\n }\n }, [agentSession, initialMessage, initialMessageProcessed, sendChat])\n\n const handleSendMessage = () => {\n if (userChatTextfieldValue.trim()) {\n sendChat(userChatTextfieldValue.trim())\n setUserChatTextfieldValue('')\n }\n }\n\n const isDisabled =\n !agentSession || !userChatTextfieldValue || !!pendingMessage\n\n const handleKeyDown: KeyboardEventHandler<HTMLDivElement> = event => {\n if (!isDisabled && event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n handleSendMessage()\n }\n }\n\n const sendMessageButtonColor = (\n theme.palette.secondary as unknown as Color\n )[300]\n if (createAgentSessionError) {\n return (\n <Alert severity={'error'} sx={{ my: 2 }}>\n {createAgentSessionError.reason}\n </Alert>\n )\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n maxWidth: '1100px',\n mx: 'auto',\n height: '100%',\n }}\n >\n {!hideTitle && (\n <Typography\n variant=\"headline1\"\n sx={{\n p: '20px',\n borderBottom: '1px solid',\n borderColor: 'grey.300',\n position: 'sticky',\n top: '0px',\n backgroundColor: 'white',\n zIndex: 1,\n }}\n >\n {chatbotName}\n </Typography>\n )}\n {showAccessLevelMenu && (\n <AccessLevelMenu\n initAccessLevel={agentAccessLevel}\n onChange={newAccessLevel => {\n setAgentAccessLevel(newAccessLevel)\n updateAgentSession({\n agentAccessLevel: newAccessLevel,\n sessionId: agentSession!.sessionId,\n })\n }}\n />\n )}\n {!agentSession && <SkeletonParagraph numRows={10} />}\n {agentSession && (\n <Box sx={{ flexGrow: 1, overflowY: 'auto', mb: 2 }}>\n <List\n sx={{\n flex: 1,\n overflowY: 'auto',\n pt: '20px',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* {sessionHistory &&\n sessionHistory.map((interaction, index) => {\n return (\n <SynapseChatInteraction\n key={index}\n userMessage={interaction.usersRequestText}\n chatResponseText={interaction.agentResponseText}\n />\n )\n })} */}\n {chatJobIds.map(jobId => {\n return <SynapseChatMessage key={jobId} chatJobId={jobId} />\n })}\n {pendingMessage && (\n <SynapseChatInteraction\n userMessage={pendingMessage}\n chatResponseText={''}\n chatErrorReason={''}\n scrollIntoView\n />\n )}\n </List>\n </Box>\n )}\n <Box\n sx={{\n position: 'sticky',\n bottom: textboxPositionOffset,\n backgroundColor: 'white',\n }}\n >\n <Box\n component=\"form\"\n sx={{\n pt: '8px',\n mt: '5px',\n pb: '10px',\n position: 'sticky',\n borderTop: '1px solid',\n borderColor: 'grey.400',\n }}\n onSubmit={handleSendMessage}\n >\n <TextField\n fullWidth\n value={userChatTextfieldValue}\n onChange={e => setUserChatTextfieldValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={`Message ${chatbotName}`}\n slotProps={{\n input: {\n sx: { borderRadius: 96.6 },\n endAdornment: (\n <IconButton\n disabled={isDisabled}\n onClick={handleSendMessage}\n sx={{\n ml: '7px',\n mr: '-8px',\n color: sendMessageButtonColor,\n borderStyle: 'solid',\n borderWidth: isDisabled ? '1px' : '2px',\n borderColor: isDisabled ? 'gray' : sendMessageButtonColor,\n }}\n >\n <ArrowUpward />\n </IconButton>\n ),\n },\n }}\n />\n <Typography\n variant=\"smallText1\"\n sx={{ pt: '8px', textAlign: 'center' }}\n >\n {chatbotName} can make mistakes.\n </Typography>\n </Box>\n </Box>\n </Box>\n )\n}\n\nexport default SynapseChat\n"],"names":["SynapseChat","initialMessage","agentRegistrationId","chatbotName","hideTitle","textboxPositionOffset","sessionContext","externalSession","setExternalSession","externalChatState","showAccessLevelMenu","accessToken","useSynapseContext","localAgentSession","setLocalAgentSession","useState","agentSession","setAgentSession","createAgentSession","createAgentSessionError","useCreateAgentSession","newAgentSession","updateAgentSession","useUpdateAgentSession","updatedAgentSession","err","displayToast","theme","useTheme","agentAccessLevel","setAgentAccessLevel","AgentAccessLevel","internalChatState","useChatState","chatState","pendingMessage","chatJobIds","sendChat","userChatTextfieldValue","setUserChatTextfieldValue","initialMessageProcessed","setInitialMessageProcessed","useEffect","handleSendMessage","isDisabled","handleKeyDown","event","sendMessageButtonColor","jsx","Alert","jsxs","Box","Typography","AccessLevelMenu","newAccessLevel","SkeletonParagraph","List","jobId","SynapseChatMessage","SynapseChatInteraction","TextField","IconButton","ArrowUpward"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DO,SAASA,GAAY;AAAA,EAC1B,gBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,uBAAAC,IAAwB;AAAA,EACxB,gBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,qBAAAC,IAAsB;AACxB,GAAqB;AACnB,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAClB,CAACC,GAAmBC,CAAoB,IAAIC,EAAA,GAC5CC,IAAeT,KAAmBM,GAClCI,IAAkBT,KAAsBM,GAExC,EAAE,QAAQI,GAAoB,OAAOC,EAAA,IACzCC,EAAsB;AAAA,IACpB,WAAW,CAAAC,MAAmBJ,EAAgBI,CAAe;AAAA,EAAA,CAC9D,GAEG,EAAE,QAAQC,EAAA,IAAuBC,EAAsB;AAAA,IAC3D,WAAW,CAAAC,MAAuBP,EAAgBO,CAAmB;AAAA,IACrE,SAAS,CAAAC,MACPC;AAAA,MACE,uCAAuCD,EAAI,OAAO;AAAA,MAClD;AAAA,IAAA;AAAA,EACF,CACH,GACKE,IAAQC,EAAA,GACR,CAACC,GAAkBC,CAAmB,IAAIf;AAAA,IAC9CT,IACIyB,EAAiB,0BACjBA,EAAiB;AAAA,EAAA,GAGjBC,IAAoBC,EAAajB,CAAY,GAC7CkB,IAAYzB,KAAqBuB,GACjC,EAAE,gBAAAG,GAAgB,YAAAC,GAAY,UAAAC,EAAA,IAAaH,GAG3C,CAACI,GAAwBC,CAAyB,IAAIxB,EAAS,EAAE,GACjE,CAACyB,GAAyBC,CAA0B,IAAI1B,EAAS,EAAK;AAyB5E,EAAA2B,EAAU,MAAM;AAEd,IAAIxB,KAAsB,CAACF,KACzBE,EAAmB;AAAA,MACjB,kBAAAW;AAAA,MACA,qBAAA3B;AAAA,MACA,gBAAAI;AAAA,IAAA,CACD;AAAA,EAEL,GAAG;AAAA,IACDY;AAAA,IACAF;AAAA,IACAL;AAAA,IACAL;AAAA,IACAuB;AAAA,IACA3B;AAAA,EAAA,CACD,GAEDwC,EAAU,MAAM;AAEd,IAAI1B,KAAgBf,KAAkB,CAACuC,MACrCH,EAASpC,CAAc,GACvBwC,EAA2B,EAAI;AAAA,EAEnC,GAAG,CAACzB,GAAcf,GAAgBuC,GAAyBH,CAAQ,CAAC;AAEpE,QAAMM,IAAoB,MAAM;AAC9B,IAAIL,EAAuB,WACzBD,EAASC,EAAuB,MAAM,GACtCC,EAA0B,EAAE;AAAA,EAEhC,GAEMK,IACJ,CAAC5B,KAAgB,CAACsB,KAA0B,CAAC,CAACH,GAE1CU,IAAsD,CAAAC,MAAS;AACnE,IAAI,CAACF,KAAcE,EAAM,QAAQ,WAAW,CAACA,EAAM,aACjDA,EAAM,eAAA,GACNH,EAAA;AAAA,EAEJ,GAEMI,IACJpB,EAAM,QAAQ,UACd,GAAG;AACL,SAAIR,IAEA,gBAAA6B,EAACC,GAAA,EAAM,UAAU,SAAS,IAAI,EAAE,IAAI,EAAA,GACjC,UAAA9B,EAAwB,OAAA,CAC3B,IAKF,gBAAA+B;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,UAAU;AAAA,QACV,IAAI;AAAA,QACJ,QAAQ;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAA,CAAC/C,KACA,gBAAA4C;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,IAAI;AAAA,cACF,GAAG;AAAA,cACH,cAAc;AAAA,cACd,aAAa;AAAA,cACb,UAAU;AAAA,cACV,KAAK;AAAA,cACL,iBAAiB;AAAA,cACjB,QAAQ;AAAA,YAAA;AAAA,YAGT,UAAAjD;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJO,KACC,gBAAAsC;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,iBAAiBxB;AAAA,YACjB,UAAU,CAAAyB,MAAkB;AAC1B,cAAAxB,EAAoBwB,CAAc,GAClChC,EAAmB;AAAA,gBACjB,kBAAkBgC;AAAA,gBAClB,WAAWtC,EAAc;AAAA,cAAA,CAC1B;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAGH,CAACA,KAAgB,gBAAAgC,EAACO,GAAA,EAAkB,SAAS,GAAA,CAAI;AAAA,QACjDvC,KACC,gBAAAgC,EAACG,GAAA,EAAI,IAAI,EAAE,UAAU,GAAG,WAAW,QAAQ,IAAI,EAAA,GAC7C,UAAA,gBAAAD;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,MAAM;AAAA,cACN,WAAW;AAAA,cACX,IAAI;AAAA,cACJ,SAAS;AAAA,cACT,eAAe;AAAA,YAAA;AAAA,YAahB,UAAA;AAAA,cAAApB,EAAW,IAAI,CAAAqB,MACP,gBAAAT,EAACU,IAAA,EAA+B,WAAWD,EAAA,GAAlBA,CAAyB,CAC1D;AAAA,cACAtB,KACC,gBAAAa;AAAA,gBAACW;AAAA,gBAAA;AAAA,kBACC,aAAaxB;AAAA,kBACb,kBAAkB;AAAA,kBAClB,iBAAiB;AAAA,kBACjB,gBAAc;AAAA,gBAAA;AAAA,cAAA;AAAA,YAChB;AAAA,UAAA;AAAA,QAAA,GAGN;AAAA,QAEF,gBAAAa;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,UAAU;AAAA,cACV,QAAQ9C;AAAA,cACR,iBAAiB;AAAA,YAAA;AAAA,YAGnB,UAAA,gBAAA6C;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,IAAI;AAAA,kBACF,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,aAAa;AAAA,gBAAA;AAAA,gBAEf,UAAUR;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAAK;AAAA,oBAACY;AAAA,oBAAA;AAAA,sBACC,WAAS;AAAA,sBACT,OAAOtB;AAAA,sBACP,UAAU,CAAA,MAAKC,EAA0B,EAAE,OAAO,KAAK;AAAA,sBACvD,WAAWM;AAAA,sBACX,aAAa,WAAW1C,CAAW;AAAA,sBACnC,WAAW;AAAA,wBACT,OAAO;AAAA,0BACL,IAAI,EAAE,cAAc,KAAA;AAAA,0BACpB,cACE,gBAAA6C;AAAA,4BAACa;AAAA,4BAAA;AAAA,8BACC,UAAUjB;AAAA,8BACV,SAASD;AAAA,8BACT,IAAI;AAAA,gCACF,IAAI;AAAA,gCACJ,IAAI;AAAA,gCACJ,OAAOI;AAAA,gCACP,aAAa;AAAA,gCACb,aAAaH,IAAa,QAAQ;AAAA,gCAClC,aAAaA,IAAa,SAASG;AAAA,8BAAA;AAAA,8BAGrC,4BAACe,GAAA,CAAA,CAAY;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACf;AAAA,sBAEJ;AAAA,oBACF;AAAA,kBAAA;AAAA,kBAEF,gBAAAZ;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI,EAAE,IAAI,OAAO,WAAW,SAAA;AAAA,sBAE3B,UAAA;AAAA,wBAAAjD;AAAA,wBAAY;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACf;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"SynapseChat.js","sources":["../../../src/components/SynapseChat/SynapseChat.tsx"],"sourcesContent":["import { ChatState, useChatState } from '@/components/SynapseChat/useChatState'\nimport {\n useCreateAgentSession,\n useUpdateAgentSession,\n} from '@/synapse-queries/chat/useChat'\nimport { useSynapseContext } from '@/utils'\nimport { ArrowUpward } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n IconButton,\n List,\n TextField,\n Typography,\n useTheme,\n} from '@mui/material'\nimport { Color } from '@mui/material/styles'\nimport { GridAgentSessionContext } from '@sage-bionetworks/synapse-client'\nimport {\n AgentAccessLevel,\n AgentSession,\n TraceEvent,\n} from '@sage-bionetworks/synapse-types'\nimport { KeyboardEventHandler, useEffect, useState } from 'react'\nimport { SkeletonParagraph } from '../Skeleton'\nimport { displayToast } from '../ToastMessage'\nimport AccessLevelMenu from './AccessLevelMenu'\nimport SynapseChatInteraction from './SynapseChatInteraction'\nimport SynapseChatMessage from './SynapseChatMessage'\n\nexport type SynapseChatProps = {\n initialMessage?: string //optional initial message\n agentRegistrationId?: string // if provided, use this agent\n chatbotName?: string // optional name of this chatbot agent\n hideTitle?: boolean\n textboxPositionOffset?: string // when embedded in a form, the textbox (form) stuck to the bottom may need to be offset due to container padding (dialog content for example!)\n /* optional session context for the agent session */\n sessionContext?: GridAgentSessionContext\n /* The current session, if state is lifted out of this component */\n externalSession?: AgentSession\n /* A callback invoked to bootstrap the current session, if state is to be lifted out of this component */\n setExternalSession?: (s: AgentSession | undefined) => void\n /* The current chat history, if state is lifted out of this component */\n externalChatState?: ChatState\n // default access level for the agent session.\n defaultAgentAccessLevel?: AgentAccessLevel\n // Whether to show the access level menu for the agent session.\n showAccessLevelMenu?: boolean\n /**\n * Optional callback invoked once when a chat response is received from the server.\n * Use this for side effects such as navigation based on the response content.\n * Called in the mutation onSuccess handler so it runs exactly once per response.\n */\n onChatResponse?: (responseText: string) => void\n}\n\nexport type ChatInteraction = {\n userMessage: string\n chatResponseText?: string\n chatErrorReason?: string\n chatResponseTrace?: TraceEventWithFriendlyMessage[]\n}\n\nexport type TraceEventWithFriendlyMessage = {\n friendlyMessage?: string\n} & TraceEvent\n\nexport function SynapseChat({\n initialMessage,\n agentRegistrationId,\n chatbotName = 'SynapseChat',\n hideTitle = false,\n textboxPositionOffset = '0px',\n sessionContext,\n externalSession,\n setExternalSession,\n externalChatState,\n showAccessLevelMenu = true,\n onChatResponse,\n}: SynapseChatProps) {\n const { accessToken } = useSynapseContext()\n const [localAgentSession, setLocalAgentSession] = useState<AgentSession>()\n const agentSession = externalSession ?? localAgentSession\n const setAgentSession = setExternalSession ?? setLocalAgentSession\n\n const { mutate: createAgentSession, error: createAgentSessionError } =\n useCreateAgentSession({\n onSuccess: newAgentSession => setAgentSession(newAgentSession),\n })\n\n const { mutate: updateAgentSession } = useUpdateAgentSession({\n onSuccess: updatedAgentSession => setAgentSession(updatedAgentSession),\n onError: err =>\n displayToast(\n `Unable to update the agent session: ${err.message}`,\n 'danger',\n ),\n })\n const theme = useTheme()\n const [agentAccessLevel, setAgentAccessLevel] = useState<AgentAccessLevel>(\n sessionContext\n ? AgentAccessLevel.WRITE_YOUR_PRIVATE_DATA\n : AgentAccessLevel.PUBLICLY_ACCESSIBLE,\n )\n\n const internalChatState = useChatState(agentSession, onChatResponse)\n const chatState = externalChatState ?? internalChatState\n const { pendingMessage, chatJobIds, sendChat } = chatState\n\n // Keep track of the text that the user is currently typing into the textfield\n const [userChatTextfieldValue, setUserChatTextfieldValue] = useState('')\n const [initialMessageProcessed, setInitialMessageProcessed] = useState(false)\n\n // Restore chat session history, if exists.\n // TODO: currently only a single page is restored. Add support for multiple pages (and detect the user scrolling up to restore the next page of results older)\n // const {\n // data: sessionHistoryInfiniteData,\n // } = //, hasNextPage: hasMoreSessionHistory, fetchNextPage: fetchNextSessionHistoryPage, isLoading: isSessionHistoryLoading } =\n // useGetAgentChatSessionHistoryInfinite(\n // {\n // sessionId: agentSession?.sessionId,\n // },\n // {\n // enabled: !!agentSession,\n // },\n // )\n\n // const sessionHistory = useMemo(\n // () =>\n // sessionHistoryInfiniteData?.pages\n // .flatMap(page => page.page)\n // /* Note: session history is ordered from most recent to least recent in each page, so reverse the order when restoring the chat interface */\n // .reverse() ?? [],\n // [sessionHistoryInfiniteData],\n // )\n\n useEffect(() => {\n // on mount, create a new agent session!\n if (createAgentSession && !agentSession) {\n createAgentSession({\n agentAccessLevel,\n agentRegistrationId,\n sessionContext,\n })\n }\n }, [\n createAgentSession,\n agentSession,\n accessToken,\n sessionContext,\n agentAccessLevel,\n agentRegistrationId,\n ])\n\n useEffect(() => {\n // on mount, resolve the initial message chat interaction (if set)\n if (agentSession && initialMessage && !initialMessageProcessed) {\n sendChat(initialMessage)\n setInitialMessageProcessed(true)\n }\n }, [agentSession, initialMessage, initialMessageProcessed, sendChat])\n\n const handleSendMessage = () => {\n if (userChatTextfieldValue.trim()) {\n sendChat(userChatTextfieldValue.trim())\n setUserChatTextfieldValue('')\n }\n }\n\n const isDisabled =\n !agentSession || !userChatTextfieldValue || !!pendingMessage\n\n const handleKeyDown: KeyboardEventHandler<HTMLDivElement> = event => {\n if (!isDisabled && event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n handleSendMessage()\n }\n }\n\n const sendMessageButtonColor = (\n theme.palette.secondary as unknown as Color\n )[300]\n if (createAgentSessionError) {\n return (\n <Alert severity={'error'} sx={{ my: 2 }}>\n {createAgentSessionError.reason}\n </Alert>\n )\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n maxWidth: '1100px',\n mx: 'auto',\n height: '100%',\n }}\n >\n {!hideTitle && (\n <Typography\n variant=\"headline1\"\n sx={{\n p: '20px',\n borderBottom: '1px solid',\n borderColor: 'grey.300',\n position: 'sticky',\n top: '0px',\n backgroundColor: 'white',\n zIndex: 1,\n }}\n >\n {chatbotName}\n </Typography>\n )}\n {showAccessLevelMenu && (\n <AccessLevelMenu\n initAccessLevel={agentAccessLevel}\n onChange={newAccessLevel => {\n setAgentAccessLevel(newAccessLevel)\n updateAgentSession({\n agentAccessLevel: newAccessLevel,\n sessionId: agentSession!.sessionId,\n })\n }}\n />\n )}\n {!agentSession && <SkeletonParagraph numRows={10} />}\n {agentSession && (\n <Box sx={{ flexGrow: 1, overflowY: 'auto', mb: 2 }}>\n <List\n sx={{\n flex: 1,\n overflowY: 'auto',\n pt: '20px',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* {sessionHistory &&\n sessionHistory.map((interaction, index) => {\n return (\n <SynapseChatInteraction\n key={index}\n userMessage={interaction.usersRequestText}\n chatResponseText={interaction.agentResponseText}\n />\n )\n })} */}\n {chatJobIds.map(jobId => {\n return (\n <SynapseChatMessage\n key={jobId}\n chatJobId={jobId}\n onSendChat={sendChat}\n />\n )\n })}\n {pendingMessage && (\n <SynapseChatInteraction\n userMessage={pendingMessage}\n chatResponseText={''}\n chatErrorReason={''}\n scrollIntoView\n onSendChat={sendChat}\n />\n )}\n </List>\n </Box>\n )}\n <Box\n sx={{\n position: 'sticky',\n bottom: textboxPositionOffset,\n backgroundColor: 'white',\n }}\n >\n <Box\n component=\"form\"\n sx={{\n pt: '8px',\n mt: '5px',\n pb: '10px',\n position: 'sticky',\n borderTop: '1px solid',\n borderColor: 'grey.400',\n }}\n onSubmit={handleSendMessage}\n >\n <TextField\n fullWidth\n value={userChatTextfieldValue}\n onChange={e => setUserChatTextfieldValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={`Message ${chatbotName}`}\n slotProps={{\n input: {\n sx: { borderRadius: 96.6 },\n endAdornment: (\n <IconButton\n disabled={isDisabled}\n onClick={handleSendMessage}\n sx={{\n ml: '7px',\n mr: '-8px',\n color: sendMessageButtonColor,\n borderStyle: 'solid',\n borderWidth: isDisabled ? '1px' : '2px',\n borderColor: isDisabled ? 'gray' : sendMessageButtonColor,\n }}\n >\n <ArrowUpward />\n </IconButton>\n ),\n },\n }}\n />\n <Typography\n variant=\"smallText1\"\n sx={{ pt: '8px', textAlign: 'center' }}\n >\n {chatbotName} can make mistakes.\n </Typography>\n </Box>\n </Box>\n </Box>\n )\n}\n\nexport default SynapseChat\n"],"names":["SynapseChat","initialMessage","agentRegistrationId","chatbotName","hideTitle","textboxPositionOffset","sessionContext","externalSession","setExternalSession","externalChatState","showAccessLevelMenu","onChatResponse","accessToken","useSynapseContext","localAgentSession","setLocalAgentSession","useState","agentSession","setAgentSession","createAgentSession","createAgentSessionError","useCreateAgentSession","newAgentSession","updateAgentSession","useUpdateAgentSession","updatedAgentSession","err","displayToast","theme","useTheme","agentAccessLevel","setAgentAccessLevel","AgentAccessLevel","internalChatState","useChatState","chatState","pendingMessage","chatJobIds","sendChat","userChatTextfieldValue","setUserChatTextfieldValue","initialMessageProcessed","setInitialMessageProcessed","useEffect","handleSendMessage","isDisabled","handleKeyDown","event","sendMessageButtonColor","jsx","Alert","jsxs","Box","Typography","AccessLevelMenu","newAccessLevel","SkeletonParagraph","List","jobId","SynapseChatMessage","SynapseChatInteraction","TextField","IconButton","ArrowUpward"],"mappings":"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"}
@@ -5,7 +5,8 @@ export type SynapseChatInteractionProps = {
5
5
  chatResponseTrace?: TraceEvent[];
6
6
  scrollIntoView?: boolean;
7
7
  chatErrorReason?: string;
8
+ onSendChat?: (message: string) => void;
8
9
  };
9
- export declare function SynapseChatInteraction({ userMessage, chatResponseText, chatErrorReason, chatResponseTrace, scrollIntoView, }: SynapseChatInteractionProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function SynapseChatInteraction({ userMessage, chatResponseText, chatErrorReason, chatResponseTrace, scrollIntoView, onSendChat, }: SynapseChatInteractionProps): import("react/jsx-runtime").JSX.Element;
10
11
  export default SynapseChatInteraction;
11
12
  //# sourceMappingURL=SynapseChatInteraction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseChatInteraction.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapseChatInteraction.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAI5D,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAA;IAChC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAqBD,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAsB,GACvB,EAAE,2BAA2B,2CAqK7B;AAED,eAAe,sBAAsB,CAAA"}
1
+ {"version":3,"file":"SynapseChatInteraction.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseChat/SynapseChatInteraction.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAI5D,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAA;IAChC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AAqBD,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAsB,EACtB,UAAU,GACX,EAAE,2BAA2B,2CAgN7B;AAED,eAAe,sBAAsB,CAAA"}