synapse-react-client 4.0.2 → 4.0.4

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 (525) 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/HandWithMoney.d.ts +5 -0
  18. package/dist/assets/icons/HandWithMoney.d.ts.map +1 -0
  19. package/dist/assets/icons/HandWithMoney.js +15 -0
  20. package/dist/assets/icons/HandWithMoney.js.map +1 -0
  21. package/dist/assets/icons/MultiFile.d.ts +5 -0
  22. package/dist/assets/icons/MultiFile.d.ts.map +1 -0
  23. package/dist/assets/icons/MultiFile.js +8 -0
  24. package/dist/assets/icons/MultiFile.js.map +1 -0
  25. package/dist/assets/icons/MultiFile.svg +4 -0
  26. package/dist/assets/icons/MultiFile.svg.js +7 -0
  27. package/dist/assets/icons/MultiFile.svg.js.map +1 -0
  28. package/dist/assets/icons/OpenBook.d.ts +5 -0
  29. package/dist/assets/icons/OpenBook.d.ts.map +1 -0
  30. package/dist/assets/icons/OpenBook.js +99 -0
  31. package/dist/assets/icons/OpenBook.js.map +1 -0
  32. package/dist/assets/icons/Podium.d.ts +5 -0
  33. package/dist/assets/icons/Podium.d.ts.map +1 -0
  34. package/dist/assets/icons/Podium.js +36 -0
  35. package/dist/assets/icons/Podium.js.map +1 -0
  36. package/dist/assets/icons/RosetteRibbon.d.ts +5 -0
  37. package/dist/assets/icons/RosetteRibbon.d.ts.map +1 -0
  38. package/dist/assets/icons/RosetteRibbon.js +36 -0
  39. package/dist/assets/icons/RosetteRibbon.js.map +1 -0
  40. package/dist/assets/icons/StarTrophy.d.ts +5 -0
  41. package/dist/assets/icons/StarTrophy.d.ts.map +1 -0
  42. package/dist/assets/icons/StarTrophy.js +99 -0
  43. package/dist/assets/icons/StarTrophy.js.map +1 -0
  44. package/dist/assets/icons/ThreeStars.d.ts +5 -0
  45. package/dist/assets/icons/ThreeStars.d.ts.map +1 -0
  46. package/dist/assets/icons/ThreeStars.js +71 -0
  47. package/dist/assets/icons/ThreeStars.js.map +1 -0
  48. package/dist/assets/icons/UnpackagableFile.d.ts +5 -0
  49. package/dist/assets/icons/UnpackagableFile.d.ts.map +1 -0
  50. package/dist/assets/icons/UnpackagableFile.js +8 -0
  51. package/dist/assets/icons/UnpackagableFile.js.map +1 -0
  52. package/dist/assets/icons/UnpackagableFile.svg +4 -0
  53. package/dist/assets/icons/UnpackagableFile.svg.js +7 -0
  54. package/dist/assets/icons/UnpackagableFile.svg.js.map +1 -0
  55. package/dist/assets/mui_components/PackagableFile.d.ts.map +1 -1
  56. package/dist/assets/mui_components/PackagableFile.js +5 -4
  57. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  58. package/dist/assets/mui_components/PackagableFile.svg +3 -0
  59. package/dist/assets/mui_components/PackagableFile.svg.js +7 -0
  60. package/dist/assets/mui_components/PackagableFile.svg.js.map +1 -0
  61. package/dist/assets/themed_icons/index.d.ts +1 -2
  62. package/dist/assets/themed_icons/index.d.ts.map +1 -1
  63. package/dist/assets/themed_icons/index.js +8 -10
  64. package/dist/assets/themed_icons/index.js.map +1 -1
  65. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +1 -1
  66. package/dist/components/AccessRequirementList/AccessRequirementList.js +4 -4
  67. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  68. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +8 -7
  69. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  70. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +4 -4
  71. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js +11 -11
  72. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js +1 -1
  73. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js +9 -9
  74. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js +5 -5
  75. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.d.ts.map +1 -1
  76. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +36 -35
  77. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  78. package/dist/components/AclEditor/AclEditor.js +8 -8
  79. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  80. package/dist/components/AclEditor/AclEditor.test-utils.js +34 -34
  81. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  82. package/dist/components/AddToDownloadListV2.js +10 -10
  83. package/dist/components/AddToDownloadListV2.js.map +1 -1
  84. package/dist/components/Authentication/AuthenticationMethodSelection.js +1 -1
  85. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  86. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +6 -5
  87. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  88. package/dist/components/BasePortalCard/BasePortalCard.css +1 -1
  89. package/dist/components/BasePortalCard/BasePortalCard.d.ts +1 -2
  90. package/dist/components/BasePortalCard/BasePortalCard.d.ts.map +1 -1
  91. package/dist/components/BasePortalCard/BasePortalCard.js +21 -28
  92. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  93. package/dist/components/BasePortalCard/BasePortalCard.module.scss +13 -1
  94. package/dist/components/BasePortalCard/BasePortalCard.module.scss.js +11 -11
  95. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.css +1 -1
  96. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.d.ts.map +1 -1
  97. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js +25 -25
  98. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  99. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss +13 -5
  100. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss.js +5 -5
  101. package/dist/components/CardContainer/CardLink.d.ts +12 -0
  102. package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
  103. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +5 -1
  104. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  105. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  106. package/dist/components/CardContainerLogic/index.d.ts +1 -1
  107. package/dist/components/CardContainerLogic/index.d.ts.map +1 -1
  108. package/dist/components/CardDeck/TableQueryCardDeck.js +12 -9
  109. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  110. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js +33 -33
  111. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  112. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +12 -12
  113. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
  114. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +7 -7
  115. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  116. package/dist/components/ChangePassword/useChangePasswordFormState.js +5 -2
  117. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  118. package/dist/components/CitationPopover/CitationPopoverContent.d.ts.map +1 -1
  119. package/dist/components/CitationPopover/CitationPopoverContent.js +13 -12
  120. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  121. package/dist/components/ComponentCollapse.d.ts +6 -10
  122. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  123. package/dist/components/ComponentCollapse.js +31 -35
  124. package/dist/components/ComponentCollapse.js.map +1 -1
  125. package/dist/components/CookiesNotification/CookiesNotification.js +1 -1
  126. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +12 -10
  127. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  128. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +10 -5
  129. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  130. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  131. package/dist/components/DataGrid/SynapseGrid.js +43 -38
  132. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  133. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +10 -5
  134. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  135. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.d.ts.map +1 -1
  136. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js +9 -7
  137. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  138. package/dist/components/DirectDownload/DirectDownload.d.ts.map +1 -1
  139. package/dist/components/DirectDownload/DirectDownload.js +23 -23
  140. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  141. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js +1 -1
  142. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts +6 -2
  143. package/dist/components/DownloadCart/AvailableForDownloadTable.d.ts.map +1 -1
  144. package/dist/components/DownloadCart/AvailableForDownloadTable.js +10 -8
  145. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  146. package/dist/components/DownloadCart/CreatePackageV2.css +1 -0
  147. package/dist/components/DownloadCart/CreatePackageV2.d.ts.map +1 -1
  148. package/dist/components/DownloadCart/CreatePackageV2.js +50 -46
  149. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  150. package/dist/components/DownloadCart/CreatePackageV2.module.scss +38 -0
  151. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js +14 -0
  152. package/dist/components/DownloadCart/CreatePackageV2.module.scss.js.map +1 -0
  153. package/dist/components/DownloadCart/DownloadCartPage.css +1 -0
  154. package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
  155. package/dist/components/DownloadCart/DownloadCartPage.js +316 -186
  156. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  157. package/dist/components/DownloadCart/DownloadCartPage.module.scss +217 -0
  158. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js +48 -0
  159. package/dist/components/DownloadCart/DownloadCartPage.module.scss.js.map +1 -0
  160. package/dist/components/DownloadCart/DownloadDetails.js +1 -1
  161. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  162. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +33 -33
  163. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  164. package/dist/components/DownloadCart/DownloadListTable.d.ts +4 -1
  165. package/dist/components/DownloadCart/DownloadListTable.d.ts.map +1 -1
  166. package/dist/components/DownloadCart/DownloadListTable.js +156 -236
  167. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  168. package/dist/components/DownloadCart/RequestDownloadCard.js +1 -1
  169. package/dist/components/DownloadCart/ShowDownloadV2.js +5 -5
  170. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  171. package/dist/components/Ecosystem/EcosystemSkeleton.js +10 -5
  172. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  173. package/dist/components/Ecosystem/TableQueryEcosystem.js +1 -1
  174. package/dist/components/EntityAclEditor/EntityAclEditorModal.js +1 -1
  175. package/dist/components/EntityAclEditor/OpenData.js +1 -1
  176. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  177. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +113 -127
  178. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  179. package/dist/components/EntityCitation/EntityCitation.js +1 -1
  180. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +20 -20
  181. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  182. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +4 -4
  183. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  184. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js +1 -1
  185. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js +1 -1
  186. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js +1 -1
  187. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js +1 -1
  188. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js +1 -1
  189. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js +1 -1
  190. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js +1 -1
  191. package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
  192. package/dist/components/EntityHeaderTable/EntityHeaderTable.d.ts.map +1 -1
  193. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +39 -39
  194. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  195. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts +8 -0
  196. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts.map +1 -0
  197. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js +46 -0
  198. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -0
  199. package/dist/components/Evaluation/EvaluationCard.d.ts.map +1 -1
  200. package/dist/components/Evaluation/EvaluationCard.js +35 -41
  201. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  202. package/dist/components/Evaluation/EvaluationEditor.d.ts.map +1 -1
  203. package/dist/components/Evaluation/EvaluationEditor.js +95 -90
  204. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  205. package/dist/components/Evaluation/EvaluationRoundEditor.d.ts.map +1 -1
  206. package/dist/components/Evaluation/EvaluationRoundEditor.js +133 -124
  207. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  208. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +6 -2
  209. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  210. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js +11 -8
  211. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  212. package/dist/components/FilePreview/EntityPreview.js +1 -1
  213. package/dist/components/Forum/DiscussionReply.js +10 -10
  214. package/dist/components/Forum/DiscussionThread.js +21 -21
  215. package/dist/components/FullWidthAlert/FullWidthAlert.d.ts +2 -2
  216. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  217. package/dist/components/GenericCard/CardUtils.d.ts.map +1 -1
  218. package/dist/components/GenericCard/CardUtils.js +36 -36
  219. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  220. package/dist/components/GenericCard/CollapsibleDescription.js +25 -25
  221. package/dist/components/GenericCard/GenericCard.d.ts +5 -5
  222. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  223. package/dist/components/GenericCard/GenericCard.js +117 -103
  224. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  225. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts +10 -0
  226. package/dist/components/GenericCard/LabelMaybeWithIcon.d.ts.map +1 -0
  227. package/dist/components/GenericCard/LabelMaybeWithIcon.js +33 -0
  228. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -0
  229. package/dist/components/GenericCard/SynapseCardLabel.d.ts +2 -1
  230. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  231. package/dist/components/GenericCard/SynapseCardLabel.js +95 -85
  232. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  233. package/dist/components/GenericCard/TableRowGenericCard.d.ts +10 -1
  234. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  235. package/dist/components/GenericCard/TableRowGenericCard.js +248 -209
  236. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  237. package/dist/components/GoalsV2/GoalsV2.Desktop.d.ts.map +1 -1
  238. package/dist/components/GoalsV2/GoalsV2.Desktop.js +14 -15
  239. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  240. package/dist/components/GoogleAnalytics/GoogleAnalytics.js +1 -1
  241. package/dist/components/HasAccess/HasAccessV2.js +1 -1
  242. package/dist/components/HasAccess/useHasAccess.js +1 -1
  243. package/dist/components/HeaderCard.js +17 -13
  244. package/dist/components/HeaderCard.js.map +1 -1
  245. package/dist/components/IDUReport/IDUReportSubmissionInfo.js +23 -23
  246. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  247. package/dist/components/Icon/Icon.js +52 -52
  248. package/dist/components/Icon/Icon.js.map +1 -1
  249. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  250. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  251. package/dist/components/IconSvg/IconSvg.js +215 -171
  252. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  253. package/dist/components/JSONArrayEditor/useParseCsv.d.ts +1 -1
  254. package/dist/components/JSONArrayEditor/useParseCsv.d.ts.map +1 -1
  255. package/dist/components/JSONArrayEditor/useParseCsv.js +9 -9
  256. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  257. package/dist/components/Markdown/MarkdownCollapse.js +7 -7
  258. package/dist/components/Markdown/MarkdownEditor.js +11 -11
  259. package/dist/components/Markdown/MarkdownGithub.js +1 -1
  260. package/dist/components/Markdown/MarkdownPopover.js +6 -6
  261. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  262. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  263. package/dist/components/Markdown/MarkdownSynapse.js +139 -135
  264. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  265. package/dist/components/Markdown/MarkdownUtils.d.ts +8 -0
  266. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  267. package/dist/components/Markdown/MarkdownUtils.js +139 -65
  268. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  269. package/dist/components/Markdown/UserMentionModal.js +18 -18
  270. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  271. package/dist/components/Markdown/widget/MarkdownButton.js +3 -3
  272. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  273. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.d.ts.map +1 -1
  274. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +9 -8
  275. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  276. package/dist/components/Plot/SynapsePlot.css +1 -0
  277. package/dist/components/Plot/SynapsePlot.d.ts +2 -0
  278. package/dist/components/Plot/SynapsePlot.d.ts.map +1 -1
  279. package/dist/components/Plot/SynapsePlot.js +43 -39
  280. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  281. package/dist/components/Plot/SynapsePlot.scss +8 -0
  282. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +1 -1
  283. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -0
  284. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  285. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +137 -135
  286. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  287. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts +1 -1
  288. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts.map +1 -1
  289. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  290. package/dist/components/Resources/Resources.Desktop.js +7 -7
  291. package/dist/components/Resources/Resources.Mobile.js +6 -6
  292. package/dist/components/StorybookComponentWrapper.js +6 -3
  293. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  294. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js +3 -3
  295. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js +10 -10
  296. package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
  297. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  298. package/dist/components/SynapseChat/SynapseChat.js +76 -67
  299. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  300. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +2 -1
  301. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  302. package/dist/components/SynapseChat/SynapseChatInteraction.js +83 -58
  303. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  304. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
  305. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  306. package/dist/components/SynapseChat/SynapseChatMessage.js +16 -15
  307. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  308. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +12 -0
  309. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -0
  310. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +30 -0
  311. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -0
  312. package/dist/components/SynapseChat/extractMessageFromTraceEvent.d.ts.map +1 -1
  313. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js +22 -16
  314. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  315. package/dist/components/SynapseChat/index.d.ts +2 -0
  316. package/dist/components/SynapseChat/index.d.ts.map +1 -1
  317. package/dist/components/SynapseChat/index.js +5 -3
  318. package/dist/components/SynapseChat/index.js.map +1 -1
  319. package/dist/components/SynapseChat/useChatState.d.ts +1 -1
  320. package/dist/components/SynapseChat/useChatState.d.ts.map +1 -1
  321. package/dist/components/SynapseChat/useChatState.js +10 -7
  322. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  323. package/dist/components/SynapseForm/WarningDialog.d.ts +1 -0
  324. package/dist/components/SynapseForm/WarningDialog.d.ts.map +1 -1
  325. package/dist/components/SynapseForm/WarningDialog.js +18 -16
  326. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  327. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +1 -1
  328. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +25 -25
  329. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  330. package/dist/components/SynapseSearchPageResults/HasAccessChip.js +1 -1
  331. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.d.ts.map +1 -1
  332. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js +12 -13
  333. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  334. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +5 -5
  335. package/dist/components/SynapseTable/ExpandableTableDataCell.d.ts.map +1 -1
  336. package/dist/components/SynapseTable/ExpandableTableDataCell.js +3 -1
  337. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  338. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +13 -13
  339. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  340. package/dist/components/SynapseTable/SynapseTable.js +4 -4
  341. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.d.ts.map +1 -1
  342. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js +122 -122
  343. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  344. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js +9 -9
  345. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  346. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +5 -5
  347. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  348. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js +1 -1
  349. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
  350. package/dist/components/TableFeedCards/TableFeedCards.js +9 -9
  351. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js +10 -10
  352. package/dist/components/TextToComponentCollapse.d.ts +16 -0
  353. package/dist/components/TextToComponentCollapse.d.ts.map +1 -0
  354. package/dist/components/TextToComponentCollapse.js +29 -0
  355. package/dist/components/TextToComponentCollapse.js.map +1 -0
  356. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +9 -9
  357. package/dist/components/UserSearchBox/UserSearchBox.d.ts +23 -0
  358. package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -0
  359. package/dist/components/UserSearchBox/UserSearchBox.js +146 -0
  360. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -0
  361. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js +13 -13
  362. package/dist/components/WizardChoiceButton/WizardChoiceButton.js +3 -3
  363. package/dist/components/dataaccess/AccessHistoryDashboard.js +5 -5
  364. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  365. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  366. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  367. package/dist/components/dataaccess/AccessSubmissionDashboard.js +1 -1
  368. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  369. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +5 -5
  370. package/dist/components/dataaccess/UseAccessRequirementTable.js +3 -3
  371. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  372. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  373. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +10 -5
  374. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  375. package/dist/components/download_list/DownloadConfirmationUI.d.ts +1 -1
  376. package/dist/components/download_list/DownloadConfirmationUI.js +22 -22
  377. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  378. package/dist/components/download_list/DownloadConfirmationUtils.js +4 -4
  379. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  380. package/dist/components/entity/metadata/EntityModal.js +1 -1
  381. package/dist/components/entity/metadata/MetadataTable.js +1 -1
  382. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +1 -1
  383. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js +1 -1
  384. package/dist/components/entity/page/title_bar/TitleBarProperties.js +1 -1
  385. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  386. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +27 -26
  387. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  388. package/dist/components/index.js +125 -121
  389. package/dist/components/index.js.map +1 -1
  390. package/dist/components/layout/InfiniteTableLayout.js +1 -1
  391. package/dist/components/row_renderers/ObservationCard.js +12 -11
  392. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  393. package/dist/components/row_renderers/utils/CardFooter.d.ts +1 -3
  394. package/dist/components/row_renderers/utils/CardFooter.d.ts.map +1 -1
  395. package/dist/components/row_renderers/utils/CardFooter.js +31 -45
  396. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  397. package/dist/components/styled/HoverPopover.css +1 -0
  398. package/dist/components/styled/HoverPopover.d.ts +28 -0
  399. package/dist/components/styled/HoverPopover.d.ts.map +1 -0
  400. package/dist/components/styled/HoverPopover.js +103 -0
  401. package/dist/components/styled/HoverPopover.js.map +1 -0
  402. package/dist/components/styled/HoverPopover.module.scss +9 -0
  403. package/dist/components/styled/HoverPopover.module.scss.js +10 -0
  404. package/dist/components/styled/HoverPopover.module.scss.js.map +1 -0
  405. package/dist/components/styled/index.d.ts +2 -0
  406. package/dist/components/styled/index.d.ts.map +1 -1
  407. package/dist/components/styled/index.js +11 -9
  408. package/dist/components/styled/index.js.map +1 -1
  409. package/dist/components/table/CsvPreview/CsvPreview.js +10 -5
  410. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  411. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +10 -5
  412. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  413. package/dist/components/widgets/Range.js +1 -1
  414. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  415. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -32
  416. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  417. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +1 -1
  418. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  419. package/dist/components/widgets/facet-nav/PlotsContainer.js +69 -68
  420. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  421. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  422. package/dist/components/widgets/facet-nav/useFacetPlots.js +24 -21
  423. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  424. package/dist/components/widgets/query-filter/FacetFilterControls.js +3 -3
  425. package/dist/features/curator/GridPage/GridPage.js +10 -5
  426. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  427. package/dist/features/curator/GridPage/components/GridPageTitle.js +10 -5
  428. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  429. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  430. package/dist/index.js +155 -151
  431. package/dist/index.js.map +1 -1
  432. package/dist/mocks/msw/handlers/accessRequirementHandlers.js +5 -5
  433. package/dist/mocks/msw/handlers/projectStorageHandlers.js +5 -5
  434. package/dist/mocks/msw/handlers/wikiHandlers.js +1 -1
  435. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  436. package/dist/mocks/msw/handlers.js +67 -59
  437. package/dist/mocks/msw/handlers.js.map +1 -1
  438. package/dist/style/base/_core.scss +0 -1
  439. package/dist/style/components/_all.scss +0 -2
  440. package/dist/style/components/_cards.scss +22 -0
  441. package/dist/style/components/_download-list-v2.scss +1 -1
  442. package/dist/style/components/_entity-badge.scss +0 -2
  443. package/dist/style/components/_expandable_table_data.scss +3 -3
  444. package/dist/style/components/_query-wrapper-plot-nav.scss +13 -0
  445. package/dist/style/components/facet_nav/_facet-nav-panel.scss +3 -0
  446. package/dist/style/components/facet_nav/_facet-nav.scss +4 -0
  447. package/dist/style/main.css +1 -1
  448. package/dist/synapse-client/SynapseClient.js +118 -118
  449. package/dist/synapse-client/SynapseClient.js.map +1 -1
  450. package/dist/synapse-queries/auth/useOIDC.js +1 -1
  451. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js +1 -1
  452. package/dist/synapse-queries/entity/index.js +6 -6
  453. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  454. package/dist/synapse-queries/index.js +1 -1
  455. package/dist/synapse-queries/user/usePersonalAccessToken.js +1 -1
  456. package/dist/testutils/vitest.setup.js +10 -11
  457. package/dist/testutils/vitest.setup.js.map +1 -1
  458. package/dist/theme/DefaultTheme.js +1 -1
  459. package/dist/theme/ThemeProvider.d.ts +2 -1
  460. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  461. package/dist/theme/ThemeProvider.js +11 -10
  462. package/dist/theme/ThemeProvider.js.map +1 -1
  463. package/dist/theme/index.js +1 -1
  464. package/dist/theme/mergeTheme.js +1 -1
  465. package/dist/tsconfig.build.tsbuildinfo +1 -1
  466. package/dist/utils/AppUtils/AppUtils.js +1 -1
  467. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  468. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  469. package/dist/utils/context/FullContextProvider.js +9 -9
  470. package/dist/utils/context/FullContextProvider.js.map +1 -1
  471. package/dist/utils/context/SynapseContext.d.ts.map +1 -1
  472. package/dist/utils/context/SynapseContext.js +1 -0
  473. package/dist/utils/context/SynapseContext.js.map +1 -1
  474. package/dist/utils/functions/SanitizeHtmlUtils.d.ts.map +1 -1
  475. package/dist/utils/functions/SanitizeHtmlUtils.js +34 -40
  476. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  477. package/dist/utils/functions/SqlFunctions.d.ts +4 -0
  478. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  479. package/dist/utils/functions/SqlFunctions.js +25 -23
  480. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  481. package/dist/utils/functions/deepLinkingUtils.js +10 -10
  482. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  483. package/dist/utils/hooks/index.js +6 -6
  484. package/dist/utils/hooks/useDetectSSOCode.js +3 -3
  485. package/dist/utils/hooks/useGetEntityMetadata.js +1 -1
  486. package/dist/utils/hooks/useNativeSearchParams.d.ts.map +1 -1
  487. package/dist/utils/hooks/useNativeSearchParams.js +1 -1
  488. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  489. package/dist/utils/hooks/useOneSageURL.d.ts.map +1 -1
  490. package/dist/utils/hooks/useOneSageURL.js +15 -15
  491. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  492. package/dist/utils/hooks/useSourceAppConfigs.d.ts +1 -0
  493. package/dist/utils/hooks/useSourceAppConfigs.d.ts.map +1 -1
  494. package/dist/utils/hooks/useSourceAppConfigs.js +79 -77
  495. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  496. package/dist/utils/index.js +4 -4
  497. package/package.json +15 -16
  498. package/dist/_virtual/index.js +0 -6
  499. package/dist/_virtual/index.js.map +0 -1
  500. package/dist/_virtual/index2.js +0 -5
  501. package/dist/_virtual/index2.js.map +0 -1
  502. package/dist/_virtual/index3.js +0 -5
  503. package/dist/_virtual/index3.js.map +0 -1
  504. package/dist/_virtual/index4.js +0 -5
  505. package/dist/_virtual/index4.js.map +0 -1
  506. package/dist/_virtual/index5.js +0 -5
  507. package/dist/_virtual/index5.js.map +0 -1
  508. package/dist/assets/themed_icons/Challenge.d.ts +0 -3
  509. package/dist/assets/themed_icons/Challenge.d.ts.map +0 -1
  510. package/dist/assets/themed_icons/Challenge.js +0 -25
  511. package/dist/assets/themed_icons/Challenge.js.map +0 -1
  512. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts +0 -21
  513. package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts.map +0 -1
  514. package/dist/components/UserSearchBox/UserSearchBoxV2.js +0 -144
  515. package/dist/components/UserSearchBox/UserSearchBoxV2.js.map +0 -1
  516. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js +0 -53
  517. package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js.map +0 -1
  518. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js +0 -948
  519. package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js.map +0 -1
  520. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js +0 -30
  521. package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js.map +0 -1
  522. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js +0 -15
  523. package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js.map +0 -1
  524. package/dist/style/components/_download-cart-page.scss +0 -204
  525. package/dist/style/components/_user-search-box.scss +0 -30
@@ -4,7 +4,7 @@ import * as R from "../../../synapse-client/SynapseClient.js";
4
4
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
5
5
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
6
6
  import "@sage-bionetworks/synapse-client/util/SynapseClientError";
7
- import { ColumnTypeEnum as v } from "@sage-bionetworks/synapse-types";
7
+ import { ColumnTypeEnum as y } from "@sage-bionetworks/synapse-types";
8
8
  import "../../../utils/functions/EntityTypeUtils.js";
9
9
  import { VALUE_NOT_SET as L, FRIENDLY_VALUE_NOT_SET as _ } from "../../../utils/SynapseConstants.js";
10
10
  import "lodash-es";
@@ -18,9 +18,9 @@ import "@tanstack/query-core";
18
18
  import "lodash-es/isEmpty";
19
19
  import "lodash-es/isEqual";
20
20
  import "lodash-es/xorWith";
21
- import { Stack as k, InputLabel as P, Tooltip as $, Box as H, Select as T, MenuItem as B } from "@mui/material";
21
+ import { Stack as k, InputLabel as P, Tooltip as $, Box as H, Select as K, MenuItem as B } from "@mui/material";
22
22
  import "@sage-bionetworks/synapse-client";
23
- import { getCorrespondingColumnForFacet as K } from "../../../utils/functions/queryUtils.js";
23
+ import { getCorrespondingColumnForFacet as T } from "../../../utils/functions/queryUtils.js";
24
24
  import "../../../utils/hooks/useCookiePreferences.js";
25
25
  import "../../../utils/hooks/useSourceAppConfigs.js";
26
26
  import "universal-cookie";
@@ -71,28 +71,28 @@ async function oe(o, m, i, t, c) {
71
71
  _
72
72
  );
73
73
  const b = e.map((l) => l.value).filter((l) => l !== L);
74
- if (r === v.ENTITYID || r === v.ENTITYID_LIST) {
74
+ if (r === y.ENTITYID || r === y.ENTITYID_LIST) {
75
75
  const l = await R.getEntityHeadersByIds(
76
76
  b,
77
77
  u
78
78
  );
79
- for (const E of l.results)
80
- s.set(E.id, E.name);
81
- } else if (r === v.USERID || r === v.USERID_LIST) {
79
+ for (const I of l.results)
80
+ s.set(I.id, I.name);
81
+ } else if (r === y.USERID || r === y.USERID_LIST) {
82
82
  const l = await R.getGroupHeadersBatch(
83
83
  b,
84
84
  u
85
85
  );
86
- for (const E of l.children)
87
- s.set(E.ownerId, E.userName);
86
+ for (const I of l.children)
87
+ s.set(I.ownerId, I.userName);
88
88
  }
89
89
  return e.map((l) => ({
90
90
  facet: l,
91
- label: I(l, !1, s),
92
- truncatedLabel: I(l, !0, s),
91
+ label: A(l, !1, s),
92
+ truncatedLabel: A(l, !0, s),
93
93
  count: l.count
94
94
  }));
95
- }, I = (e, r, u) => {
95
+ }, A = (e, r, u) => {
96
96
  let s = u.get(e.value) ?? e.value;
97
97
  return r && (s = X(s, te)), s;
98
98
  }, f = await d(
@@ -101,23 +101,23 @@ async function oe(o, m, i, t, c) {
101
101
  c
102
102
  ), g = f.map((e) => e.truncatedLabel), S = o.facetValues.some(
103
103
  (e) => e.isSelected
104
- ) ? o.facetValues.map(
104
+ ), x = S ? o.facetValues.map(
105
105
  (e, r) => e.isSelected ? a[r] : a[r].replace("rgb(", "rgba(").replace(")", ", 0.25)")
106
- ) : a, A = o.facetValues.map(
106
+ ) : a, v = o.facetValues.map(
107
107
  (e) => e.count
108
108
  );
109
109
  let C;
110
110
  t === "BAR" ? C = o.facetValues.map(
111
111
  (e) => f.find((r) => r.facet === e)?.label ?? e.value
112
- ) : t === "STACKED_HORIZONTAL_BAR" && (C = A);
113
- let x;
114
- t === "BAR" ? x = o.facetValues.map((e) => e.count) : t === "STACKED_HORIZONTAL_BAR" && (x = Array(C?.length).fill("Proportional"));
112
+ ) : t === "STACKED_HORIZONTAL_BAR" && (C = v);
113
+ let E;
114
+ t === "BAR" ? E = o.facetValues.map((e) => e.count) : t === "STACKED_HORIZONTAL_BAR" && (E = Array(C?.length).fill("Proportional"));
115
115
  const h = {
116
- values: t === "PIE" ? A : void 0,
116
+ values: t === "PIE" ? v : void 0,
117
117
  labels: f.map((e) => e.label),
118
118
  text: g,
119
119
  x: C,
120
- y: x,
120
+ y: E,
121
121
  orientation: t === "STACKED_HORIZONTAL_BAR" ? "h" : "v",
122
122
  // @ts-expect-error
123
123
  facetEnumerationValues: o.facetValues.map(
@@ -131,9 +131,12 @@ async function oe(o, m, i, t, c) {
131
131
  pull: t === "PIE" ? o.facetValues.map(
132
132
  (e) => e.isSelected ? 0.1 : 0
133
133
  ) : void 0,
134
+ selectedpoints: S ? o.facetValues.map((e, r) => e.isSelected ? r : -1).filter((e) => e !== -1) : void 0,
135
+ selected: { marker: { opacity: 1 } },
136
+ unselected: { marker: { opacity: 0.25 } },
134
137
  marker: {
135
- colors: t === "PIE" ? S : void 0,
136
- color: t === "PIE" ? void 0 : S
138
+ colors: t === "PIE" ? x : void 0,
139
+ color: t === "PIE" ? void 0 : x
137
140
  }
138
141
  };
139
142
  return {
@@ -188,12 +191,12 @@ function ie(o) {
188
191
  index: c,
189
192
  facetToPlot: a,
190
193
  plotType: d,
191
- onSetPlotType: I
192
- } = o, { accessToken: f } = V(), { data: g, isLoading: y } = Y(), [S, A] = ee(), { getColumnDisplayName: C } = z(), [x, h] = F(!1), w = C(
194
+ onSetPlotType: A
195
+ } = o, { accessToken: f } = V(), { data: g, isLoading: S } = Y(), [x, v] = ee(), { getColumnDisplayName: C } = z(), [E, h] = F(!1), w = C(
193
196
  a.columnName,
194
197
  a.jsonPath
195
198
  ), e = M(
196
- () => K(
199
+ () => T(
197
200
  a,
198
201
  g?.columnModels ?? []
199
202
  ),
@@ -218,11 +221,11 @@ function ie(o) {
218
221
  }), s = /* @__PURE__ */ p(N, { fullWidth: !0, children: [
219
222
  /* @__PURE__ */ n(P, { children: "Chart Type" }),
220
223
  /* @__PURE__ */ p(
221
- T,
224
+ K,
222
225
  {
223
226
  value: d,
224
227
  onChange: (b) => {
225
- I(b.target.value);
228
+ A(b.target.value);
226
229
  },
227
230
  children: [
228
231
  /* @__PURE__ */ n(B, { value: "BAR", children: "Bar Chart" }),
@@ -231,11 +234,11 @@ function ie(o) {
231
234
  }
232
235
  )
233
236
  ] });
234
- return !g && y || !a || !e ? /* @__PURE__ */ n("div", { className: "SRC-loadingContainer SRC-centerContentColumn", children: j }) : /* @__PURE__ */ p(D, { children: [
237
+ return !g && S || !a || !e ? /* @__PURE__ */ n("div", { className: "SRC-loadingContainer SRC-centerContentColumn", children: j }) : /* @__PURE__ */ p(D, { children: [
235
238
  /* @__PURE__ */ n(
236
239
  Q,
237
240
  {
238
- open: x,
241
+ open: E,
239
242
  onCancel: () => h(!1),
240
243
  title: w ?? "",
241
244
  content: /* @__PURE__ */ n(ie, { ...o, isModalView: !0 }),
@@ -255,7 +258,7 @@ function ie(o) {
255
258
  G,
256
259
  {
257
260
  data: g,
258
- isLoading: y,
261
+ isLoading: S,
259
262
  title: w,
260
263
  facetToPlot: a,
261
264
  onHide: m,
@@ -304,20 +307,20 @@ function ie(o) {
304
307
  role: "graphics-object",
305
308
  className: "FacetNavPanel__body",
306
309
  children: [
307
- /* @__PURE__ */ n("div", { ref: A, children: /* @__PURE__ */ n(
310
+ /* @__PURE__ */ n("div", { ref: v, children: /* @__PURE__ */ n(
308
311
  U,
309
312
  {
310
313
  layout: ae,
311
314
  data: u?.data ?? [],
312
315
  style: ne(
313
- S?.width,
316
+ x?.width,
314
317
  d,
315
318
  i ? 300 : 150
316
319
  ),
317
320
  config: { displayModeBar: !1 },
318
321
  onClick: (b) => re(b, a, t)
319
322
  },
320
- `${a.columnName}-${a.jsonPath}-${d}-${S?.width}`
323
+ `${a.columnName}-${a.jsonPath}-${d}-${x?.width}`
321
324
  ) }),
322
325
  /* @__PURE__ */ n(
323
326
  W,
@@ -1 +1 @@
1
- {"version":3,"file":"FacetNavPanel.js","sources":["../../../../src/components/widgets/facet-nav/FacetNavPanel.tsx"],"sourcesContent":["import StyledFormControl from '@/components/styled/StyledFormControl'\nimport SynapseClient from '@/synapse-client'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getCorrespondingColumnForFacet } from '@/utils/functions/queryUtils'\nimport { InfoOutlined } from '@mui/icons-material'\nimport {\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n} from '@mui/material'\nimport {\n ColumnTypeEnum,\n FacetColumnRequest,\n FacetColumnResultValueCount,\n FacetColumnResultValues,\n} from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport type Plotly from 'plotly.js-basic-dist'\nimport { useMemo, useState } from 'react'\nimport { getContrastColorPalette } from '../../ColorGradient/ColorGradient'\nimport { ConfirmationDialog } from '../../ConfirmationDialog/ConfirmationDialog'\nimport loadingScreen from '../../LoadingScreen/LoadingScreen'\nimport Plot from '../../Plot/Plot'\nimport PlotPanelHeader from '../../Plot/PlotPanelHeader'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { EnumFacetFilter } from '../query-filter/EnumFacetFilter/EnumFacetFilter'\nimport { FacetPlotLegendList } from './FacetPlotLegendList'\nimport { FacetWithLabel, truncate } from './FacetPlotLegendUtils'\nimport { useMeasure } from '@react-hookz/web'\n\nexport type FacetNavPanelProps = {\n applyChangesToGraphSlice: (\n facet: FacetColumnResultValues,\n value: FacetColumnResultValueCount | undefined,\n isSelected: boolean,\n ) => void\n applyChangesToFacetFilter: (facets: FacetColumnRequest[]) => void\n index: number\n facetToPlot: FacetColumnResultValues\n plotType: PlotType\n onSetPlotType: (plotType: PlotType) => void\n onHide: () => void\n isModalView: boolean\n onCloseModal?: () => void\n}\n\nconst maxLabelLength: number = 19\n\n// STACKED_HORIZONTAL_BAR corresponds to a bar chart where we just want to show the proportion (like a pie chart)\nexport type PlotType = 'PIE' | 'BAR' | 'STACKED_HORIZONTAL_BAR'\n\nconst layout: Partial<Plotly.Layout> = {\n showlegend: false,\n annotations: [],\n margin: { l: 0, r: 0, b: 0, t: 0, pad: 0 },\n yaxis: {\n visible: false,\n showgrid: false,\n },\n xaxis: {\n visible: false,\n showgrid: false,\n },\n}\n\nexport type GraphData = {\n data: Plotly.Data[]\n labels: FacetWithLabel[]\n colors: string[]\n}\n\nexport async function extractPlotDataArray(\n facetToPlot: FacetColumnResultValues,\n columnType: ColumnTypeEnum | undefined,\n index: number,\n plotType: PlotType,\n accessToken?: string,\n) {\n const colorPalette = getContrastColorPalette(\n // Use only the odd palette, using the same offset for all plots until palettes are improved.\n // See PORTALS-2916\n 'odd', // index % 2 === 0 ? 'even' : 'odd',\n 0, // Math.floor(index / 2),\n facetToPlot.facetValues.length,\n )\n\n const getLabels = async (\n facetValues: FacetColumnResultValueCount[],\n columnType?: ColumnTypeEnum,\n accessToken?: string,\n ) => {\n const map = new Map<string, string>()\n map.set(\n SynapseConstants.VALUE_NOT_SET,\n SynapseConstants.FRIENDLY_VALUE_NOT_SET,\n )\n // Filter out empties\n const filteredValues = facetValues\n .map(value => value.value)\n .filter(val => val !== SynapseConstants.VALUE_NOT_SET)\n if (\n columnType === ColumnTypeEnum.ENTITYID ||\n columnType === ColumnTypeEnum.ENTITYID_LIST\n ) {\n // TODO: Pagination\n const response = await SynapseClient.getEntityHeadersByIds(\n filteredValues,\n accessToken,\n )\n for (const header of response.results) {\n map.set(header.id, header.name)\n }\n } else if (\n columnType === ColumnTypeEnum.USERID ||\n columnType === ColumnTypeEnum.USERID_LIST\n ) {\n const response = await SynapseClient.getGroupHeadersBatch(\n filteredValues,\n accessToken,\n )\n for (const header of response.children) {\n map.set(header.ownerId, header.userName)\n }\n }\n\n return facetValues.map(facetValue => ({\n facet: facetValue,\n label: getLabel(facetValue, false, map),\n truncatedLabel: getLabel(facetValue, true, map),\n count: facetValue.count,\n }))\n }\n\n const getLabel = (\n facetValue: FacetColumnResultValueCount,\n truncateFlag: boolean,\n labelMap: Map<string, string>,\n ): string => {\n let label = labelMap.get(facetValue.value) ?? facetValue.value\n if (truncateFlag) {\n label = truncate(label, maxLabelLength)!\n }\n return label\n }\n\n const labels = await getLabels(\n facetToPlot.facetValues,\n columnType,\n accessToken,\n )\n const text = labels.map(el => el.truncatedLabel)\n\n const anyFacetsSelected = facetToPlot.facetValues.some(\n value => value.isSelected,\n )\n\n const selectionAwareColorPalette = anyFacetsSelected\n ? facetToPlot.facetValues.map((facetValue, index) =>\n facetValue.isSelected\n ? colorPalette[index]\n : colorPalette[index]\n .replace('rgb(', 'rgba(')\n .replace(')', ', 0.25)'),\n )\n : colorPalette\n\n const counts: Plotly.Datum[] = facetToPlot.facetValues.map(\n facet => facet.count,\n )\n let x: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n\n if (plotType === 'BAR') {\n x = facetToPlot.facetValues.map(\n facet =>\n labels.find(label => label.facet === facet)?.label ?? facet.value,\n )\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n x = counts\n }\n\n let y: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n if (plotType === 'BAR') {\n y = facetToPlot.facetValues.map(facet => facet.count)\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n y = Array(x?.length).fill('Proportional') // single value for every x value\n }\n\n const singleChartData: Plotly.Data = {\n values: plotType === 'PIE' ? counts : undefined,\n labels: labels.map(el => el.label),\n text,\n x,\n y,\n orientation: plotType === 'STACKED_HORIZONTAL_BAR' ? 'h' : 'v',\n // @ts-expect-error\n facetEnumerationValues: facetToPlot.facetValues.map(\n facetValue => facetValue.value,\n ),\n name: facetToPlot.columnName,\n textposition:\n plotType === 'STACKED_HORIZONTAL_BAR' || plotType === 'BAR'\n ? 'none'\n : 'inside',\n hovertemplate:\n plotType === 'PIE'\n ? '<b>%{text}</b><br>%{value} (%{percent})<br><extra></extra>'\n : '<b>%{text}: </b><br>%{value} <br><extra></extra>',\n textinfo: 'none',\n type: plotType === 'PIE' ? 'pie' : 'bar',\n pull:\n plotType === 'PIE'\n ? facetToPlot.facetValues.map(facetValue =>\n facetValue.isSelected ? 0.1 : 0,\n )\n : undefined,\n marker: {\n colors: plotType === 'PIE' ? selectionAwareColorPalette : undefined,\n color: plotType === 'PIE' ? undefined : selectionAwareColorPalette,\n },\n }\n const result = {\n data: [singleChartData],\n labels,\n colors:\n plotType === 'PIE'\n ? ((singleChartData as any).marker?.colors as string[])\n : ((singleChartData as any).marker?.color as string[]),\n }\n return result\n}\n\nconst applyFacetFilter = (\n event: Plotly.PlotMouseEvent,\n allFacetValues: FacetColumnResultValues,\n callbackApplyFn: FacetNavPanelProps['applyChangesToGraphSlice'],\n) => {\n if (event.points && event.points[0]) {\n const plotPointData: any = event.points[0]\n const facetValueClickedValue =\n plotPointData.data.facetEnumerationValues[plotPointData.pointNumber]\n const facetValueClicked = allFacetValues.facetValues.find(\n facet => facet.value === facetValueClickedValue,\n )\n callbackApplyFn(\n allFacetValues,\n facetValueClicked,\n !facetValueClicked!.isSelected,\n )\n }\n}\n\nexport function getPlotStyle(\n parentWidth: number | null | undefined,\n plotType: PlotType,\n maxHeight: number,\n): { width: string; height: string } {\n if (parentWidth != undefined) {\n let quotient = 1\n switch (plotType) {\n case 'BAR':\n quotient = 0.8\n break\n case 'PIE':\n quotient = 0.6\n break\n case 'STACKED_HORIZONTAL_BAR':\n quotient = 1\n break\n }\n const width = parentWidth ? parentWidth * quotient : 200\n let height = plotType === 'PIE' ? width : width / 3\n // max height of .PlotsContainer row col* is 200px, so the effective plot height max is around 150 unless it's expanded\n if (height > maxHeight) {\n height = maxHeight\n }\n return {\n width: `${width}px`,\n height: `${height}px`,\n }\n }\n //else parent width is undefined\n return {\n width: '100%',\n height: `${maxHeight}px`,\n }\n}\n\nfunction FacetNavPanel(props: FacetNavPanelProps) {\n const {\n onHide,\n isModalView,\n applyChangesToGraphSlice,\n index,\n facetToPlot,\n plotType,\n onSetPlotType,\n } = props\n const { accessToken } = useSynapseContext()\n const { data: queryMetadata, isLoading: isLoadingQueryMetadata } =\n useGetQueryMetadata()\n\n const [plotContainerMeasurements, plotContainerRef] =\n useMeasure<HTMLDivElement>()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n const [showModal, setShowModal] = useState(false)\n\n const plotTitle = getColumnDisplayName(\n facetToPlot.columnName,\n facetToPlot.jsonPath,\n )\n\n const columnModel = useMemo(\n () =>\n getCorrespondingColumnForFacet(\n facetToPlot,\n queryMetadata?.columnModels ?? [],\n ),\n [queryMetadata?.columnModels, facetToPlot],\n )\n const columnType = columnModel?.columnType as ColumnTypeEnum\n\n const { data: plotData } = useQuery({\n queryKey: [\n 'extractPlotDataArray',\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n ],\n\n queryFn: () =>\n extractPlotDataArray(\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n ),\n\n enabled: !!facetToPlot,\n })\n\n /* rendering functions */\n const chartSelectionToggle = (\n <StyledFormControl fullWidth>\n <InputLabel>Chart Type</InputLabel>\n <Select\n value={plotType}\n onChange={e => {\n onSetPlotType(e.target.value as PlotType)\n }}\n >\n <MenuItem value={'BAR'}>Bar Chart</MenuItem>\n <MenuItem value={'PIE'}>Pie Chart</MenuItem>\n </Select>\n </StyledFormControl>\n )\n\n if (\n (!queryMetadata && isLoadingQueryMetadata) ||\n !facetToPlot ||\n !columnModel\n ) {\n return (\n <div className=\"SRC-loadingContainer SRC-centerContentColumn\">\n {loadingScreen}\n </div>\n )\n } else {\n return (\n <>\n <ConfirmationDialog\n open={showModal}\n onCancel={() => setShowModal(false)}\n title={plotTitle ?? ''}\n content={<FacetNavPanel {...props} isModalView={true} />}\n hasCancelButton={false}\n confirmButtonProps={{ children: 'Apply Filters' }}\n onConfirm={() => setShowModal(false)}\n maxWidth={'md'}\n />\n <div\n role=\"figure\"\n className={`FacetNavPanel${isModalView ? '--expanded' : ''}`}\n >\n {!isModalView && (\n <PlotPanelHeader\n data={queryMetadata}\n isLoading={isLoadingQueryMetadata}\n title={plotTitle}\n facetToPlot={facetToPlot}\n onHide={onHide}\n setShowModal={setShowModal}\n />\n )}\n {isModalView && (\n <Stack\n sx={{\n gap: 2,\n }}\n >\n <StyledFormControl>\n <InputLabel\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n >\n <span>Filter All Data By</span>\n <Tooltip title=\"Selecting items in this dropdown will affect all facets on the Explore page.\">\n <InfoOutlined className=\"SRC-hand-cursor SRC-secondary-text-color\" />\n </Tooltip>\n </InputLabel>\n <EnumFacetFilter\n facet={facetToPlot}\n containerAs=\"Dropdown\"\n dropdownType=\"SelectBox\"\n />\n </StyledFormControl>\n {chartSelectionToggle}\n </Stack>\n )}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '50% 50%',\n alignItems: 'center',\n }}\n role=\"graphics-object\"\n className=\"FacetNavPanel__body\"\n >\n <div ref={plotContainerRef}>\n <Plot\n key={`${facetToPlot.columnName}-${facetToPlot.jsonPath}-${plotType}-${plotContainerMeasurements?.width}`}\n layout={layout}\n data={plotData?.data ?? []}\n style={getPlotStyle(\n plotContainerMeasurements?.width,\n plotType,\n isModalView ? 300 : 150,\n )}\n config={{ displayModeBar: false }}\n onClick={evt =>\n applyFacetFilter(evt, facetToPlot, applyChangesToGraphSlice)\n }\n />\n </div>\n <FacetPlotLegendList\n labels={plotData?.labels}\n colors={plotData?.colors}\n isExpanded={isModalView}\n />\n </Box>\n </div>\n </>\n )\n }\n}\n\nexport default FacetNavPanel\n"],"names":["maxLabelLength","layout","extractPlotDataArray","facetToPlot","columnType","index","plotType","accessToken","colorPalette","getContrastColorPalette","getLabels","facetValues","map","SynapseConstants.VALUE_NOT_SET","SynapseConstants.FRIENDLY_VALUE_NOT_SET","filteredValues","value","val","ColumnTypeEnum","response","SynapseClient","header","facetValue","getLabel","truncateFlag","labelMap","label","truncate","labels","text","el","selectionAwareColorPalette","counts","facet","x","y","singleChartData","applyFacetFilter","event","allFacetValues","callbackApplyFn","plotPointData","facetValueClickedValue","facetValueClicked","getPlotStyle","parentWidth","maxHeight","quotient","width","height","FacetNavPanel","props","onHide","isModalView","applyChangesToGraphSlice","onSetPlotType","useSynapseContext","queryMetadata","isLoadingQueryMetadata","useGetQueryMetadata","plotContainerMeasurements","plotContainerRef","useMeasure","getColumnDisplayName","useQueryVisualizationContext","showModal","setShowModal","useState","plotTitle","columnModel","useMemo","getCorrespondingColumnForFacet","plotData","useQuery","chartSelectionToggle","jsxs","StyledFormControl","jsx","InputLabel","Select","e","MenuItem","loadingScreen","Fragment","ConfirmationDialog","PlotPanelHeader","Stack","Tooltip","InfoOutlined","EnumFacetFilter","Box","Plot","evt","FacetPlotLegendList"],"mappings":"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"}
1
+ {"version":3,"file":"FacetNavPanel.js","sources":["../../../../src/components/widgets/facet-nav/FacetNavPanel.tsx"],"sourcesContent":["import StyledFormControl from '@/components/styled/StyledFormControl'\nimport SynapseClient from '@/synapse-client'\nimport { SynapseConstants } from '@/utils'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { getCorrespondingColumnForFacet } from '@/utils/functions/queryUtils'\nimport { InfoOutlined } from '@mui/icons-material'\nimport {\n Box,\n InputLabel,\n MenuItem,\n Select,\n Stack,\n Tooltip,\n} from '@mui/material'\nimport {\n ColumnTypeEnum,\n FacetColumnRequest,\n FacetColumnResultValueCount,\n FacetColumnResultValues,\n} from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport type Plotly from 'plotly.js-basic-dist'\nimport { useMemo, useState } from 'react'\nimport { getContrastColorPalette } from '../../ColorGradient/ColorGradient'\nimport { ConfirmationDialog } from '../../ConfirmationDialog/ConfirmationDialog'\nimport loadingScreen from '../../LoadingScreen/LoadingScreen'\nimport Plot from '../../Plot/Plot'\nimport PlotPanelHeader from '../../Plot/PlotPanelHeader'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { EnumFacetFilter } from '../query-filter/EnumFacetFilter/EnumFacetFilter'\nimport { FacetPlotLegendList } from './FacetPlotLegendList'\nimport { FacetWithLabel, truncate } from './FacetPlotLegendUtils'\nimport { useMeasure } from '@react-hookz/web'\n\nexport type FacetNavPanelProps = {\n applyChangesToGraphSlice: (\n facet: FacetColumnResultValues,\n value: FacetColumnResultValueCount | undefined,\n isSelected: boolean,\n ) => void\n applyChangesToFacetFilter: (facets: FacetColumnRequest[]) => void\n index: number\n facetToPlot: FacetColumnResultValues\n plotType: PlotType\n onSetPlotType: (plotType: PlotType) => void\n onHide: () => void\n isModalView: boolean\n onCloseModal?: () => void\n}\n\nconst maxLabelLength: number = 19\n\n// STACKED_HORIZONTAL_BAR corresponds to a bar chart where we just want to show the proportion (like a pie chart)\nexport type PlotType = 'PIE' | 'BAR' | 'STACKED_HORIZONTAL_BAR'\n\nconst layout: Partial<Plotly.Layout> = {\n showlegend: false,\n annotations: [],\n margin: { l: 0, r: 0, b: 0, t: 0, pad: 0 },\n yaxis: {\n visible: false,\n showgrid: false,\n },\n xaxis: {\n visible: false,\n showgrid: false,\n },\n}\n\nexport type GraphData = {\n data: Plotly.Data[]\n labels: FacetWithLabel[]\n colors: string[]\n}\n\nexport async function extractPlotDataArray(\n facetToPlot: FacetColumnResultValues,\n columnType: ColumnTypeEnum | undefined,\n index: number,\n plotType: PlotType,\n accessToken?: string,\n) {\n const colorPalette = getContrastColorPalette(\n // Use only the odd palette, using the same offset for all plots until palettes are improved.\n // See PORTALS-2916\n 'odd', // index % 2 === 0 ? 'even' : 'odd',\n 0, // Math.floor(index / 2),\n facetToPlot.facetValues.length,\n )\n\n const getLabels = async (\n facetValues: FacetColumnResultValueCount[],\n columnType?: ColumnTypeEnum,\n accessToken?: string,\n ) => {\n const map = new Map<string, string>()\n map.set(\n SynapseConstants.VALUE_NOT_SET,\n SynapseConstants.FRIENDLY_VALUE_NOT_SET,\n )\n // Filter out empties\n const filteredValues = facetValues\n .map(value => value.value)\n .filter(val => val !== SynapseConstants.VALUE_NOT_SET)\n if (\n columnType === ColumnTypeEnum.ENTITYID ||\n columnType === ColumnTypeEnum.ENTITYID_LIST\n ) {\n // TODO: Pagination\n const response = await SynapseClient.getEntityHeadersByIds(\n filteredValues,\n accessToken,\n )\n for (const header of response.results) {\n map.set(header.id, header.name)\n }\n } else if (\n columnType === ColumnTypeEnum.USERID ||\n columnType === ColumnTypeEnum.USERID_LIST\n ) {\n const response = await SynapseClient.getGroupHeadersBatch(\n filteredValues,\n accessToken,\n )\n for (const header of response.children) {\n map.set(header.ownerId, header.userName)\n }\n }\n\n return facetValues.map(facetValue => ({\n facet: facetValue,\n label: getLabel(facetValue, false, map),\n truncatedLabel: getLabel(facetValue, true, map),\n count: facetValue.count,\n }))\n }\n\n const getLabel = (\n facetValue: FacetColumnResultValueCount,\n truncateFlag: boolean,\n labelMap: Map<string, string>,\n ): string => {\n let label = labelMap.get(facetValue.value) ?? facetValue.value\n if (truncateFlag) {\n label = truncate(label, maxLabelLength)!\n }\n return label\n }\n\n const labels = await getLabels(\n facetToPlot.facetValues,\n columnType,\n accessToken,\n )\n const text = labels.map(el => el.truncatedLabel)\n\n const anyFacetsSelected = facetToPlot.facetValues.some(\n value => value.isSelected,\n )\n const selectionAwareColorPalette = anyFacetsSelected\n ? facetToPlot.facetValues.map((facetValue, index) =>\n facetValue.isSelected\n ? colorPalette[index]\n : colorPalette[index]\n .replace('rgb(', 'rgba(')\n .replace(')', ', 0.25)'),\n )\n : colorPalette\n const counts: Plotly.Datum[] = facetToPlot.facetValues.map(\n facet => facet.count,\n )\n let x: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n\n if (plotType === 'BAR') {\n x = facetToPlot.facetValues.map(\n facet =>\n labels.find(label => label.facet === facet)?.label ?? facet.value,\n )\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n x = counts\n }\n\n let y: Plotly.Datum[] | Plotly.Datum[][] | Plotly.TypedArray | undefined\n if (plotType === 'BAR') {\n y = facetToPlot.facetValues.map(facet => facet.count)\n } else if (plotType === 'STACKED_HORIZONTAL_BAR') {\n y = Array(x?.length).fill('Proportional') // single value for every x value\n }\n\n const singleChartData: Plotly.Data = {\n values: plotType === 'PIE' ? counts : undefined,\n labels: labels.map(el => el.label),\n text,\n x,\n y,\n orientation: plotType === 'STACKED_HORIZONTAL_BAR' ? 'h' : 'v',\n // @ts-expect-error\n facetEnumerationValues: facetToPlot.facetValues.map(\n facetValue => facetValue.value,\n ),\n name: facetToPlot.columnName,\n textposition:\n plotType === 'STACKED_HORIZONTAL_BAR' || plotType === 'BAR'\n ? 'none'\n : 'inside',\n hovertemplate:\n plotType === 'PIE'\n ? '<b>%{text}</b><br>%{value} (%{percent})<br><extra></extra>'\n : '<b>%{text}: </b><br>%{value} <br><extra></extra>',\n textinfo: 'none',\n type: plotType === 'PIE' ? 'pie' : 'bar',\n pull:\n plotType === 'PIE'\n ? facetToPlot.facetValues.map(facetValue =>\n facetValue.isSelected ? 0.1 : 0,\n )\n : undefined,\n selectedpoints: anyFacetsSelected\n ? facetToPlot.facetValues\n .map((facetValue, index) => (facetValue.isSelected ? index : -1))\n .filter(index => index !== -1)\n : undefined,\n selected: { marker: { opacity: 1 } },\n unselected: { marker: { opacity: 0.25 } },\n\n marker: {\n colors: plotType === 'PIE' ? selectionAwareColorPalette : undefined,\n color: plotType === 'PIE' ? undefined : selectionAwareColorPalette,\n },\n }\n const result = {\n data: [singleChartData],\n labels,\n colors:\n plotType === 'PIE'\n ? ((singleChartData as any).marker?.colors as string[])\n : ((singleChartData as any).marker?.color as string[]),\n }\n return result\n}\n\nconst applyFacetFilter = (\n event: Plotly.PlotMouseEvent,\n allFacetValues: FacetColumnResultValues,\n callbackApplyFn: FacetNavPanelProps['applyChangesToGraphSlice'],\n) => {\n if (event.points && event.points[0]) {\n const plotPointData: any = event.points[0]\n const facetValueClickedValue =\n plotPointData.data.facetEnumerationValues[plotPointData.pointNumber]\n const facetValueClicked = allFacetValues.facetValues.find(\n facet => facet.value === facetValueClickedValue,\n )\n callbackApplyFn(\n allFacetValues,\n facetValueClicked,\n !facetValueClicked!.isSelected,\n )\n }\n}\n\nexport function getPlotStyle(\n parentWidth: number | null | undefined,\n plotType: PlotType,\n maxHeight: number,\n): { width: string; height: string } {\n if (parentWidth != undefined) {\n let quotient = 1\n switch (plotType) {\n case 'BAR':\n quotient = 0.8\n break\n case 'PIE':\n quotient = 0.6\n break\n case 'STACKED_HORIZONTAL_BAR':\n quotient = 1\n break\n }\n const width = parentWidth ? parentWidth * quotient : 200\n let height = plotType === 'PIE' ? width : width / 3\n // max height of .PlotsContainer row col* is 200px, so the effective plot height max is around 150 unless it's expanded\n if (height > maxHeight) {\n height = maxHeight\n }\n return {\n width: `${width}px`,\n height: `${height}px`,\n }\n }\n //else parent width is undefined\n return {\n width: '100%',\n height: `${maxHeight}px`,\n }\n}\n\nfunction FacetNavPanel(props: FacetNavPanelProps) {\n const {\n onHide,\n isModalView,\n applyChangesToGraphSlice,\n index,\n facetToPlot,\n plotType,\n onSetPlotType,\n } = props\n const { accessToken } = useSynapseContext()\n const { data: queryMetadata, isLoading: isLoadingQueryMetadata } =\n useGetQueryMetadata()\n\n const [plotContainerMeasurements, plotContainerRef] =\n useMeasure<HTMLDivElement>()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n const [showModal, setShowModal] = useState(false)\n\n const plotTitle = getColumnDisplayName(\n facetToPlot.columnName,\n facetToPlot.jsonPath,\n )\n\n const columnModel = useMemo(\n () =>\n getCorrespondingColumnForFacet(\n facetToPlot,\n queryMetadata?.columnModels ?? [],\n ),\n [queryMetadata?.columnModels, facetToPlot],\n )\n const columnType = columnModel?.columnType as ColumnTypeEnum\n\n const { data: plotData } = useQuery({\n queryKey: [\n 'extractPlotDataArray',\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n ],\n\n queryFn: () =>\n extractPlotDataArray(\n facetToPlot,\n columnType,\n index,\n plotType,\n accessToken,\n ),\n\n enabled: !!facetToPlot,\n })\n\n /* rendering functions */\n const chartSelectionToggle = (\n <StyledFormControl fullWidth>\n <InputLabel>Chart Type</InputLabel>\n <Select\n value={plotType}\n onChange={e => {\n onSetPlotType(e.target.value as PlotType)\n }}\n >\n <MenuItem value={'BAR'}>Bar Chart</MenuItem>\n <MenuItem value={'PIE'}>Pie Chart</MenuItem>\n </Select>\n </StyledFormControl>\n )\n\n if (\n (!queryMetadata && isLoadingQueryMetadata) ||\n !facetToPlot ||\n !columnModel\n ) {\n return (\n <div className=\"SRC-loadingContainer SRC-centerContentColumn\">\n {loadingScreen}\n </div>\n )\n } else {\n return (\n <>\n <ConfirmationDialog\n open={showModal}\n onCancel={() => setShowModal(false)}\n title={plotTitle ?? ''}\n content={<FacetNavPanel {...props} isModalView={true} />}\n hasCancelButton={false}\n confirmButtonProps={{ children: 'Apply Filters' }}\n onConfirm={() => setShowModal(false)}\n maxWidth={'md'}\n />\n <div\n role=\"figure\"\n className={`FacetNavPanel${isModalView ? '--expanded' : ''}`}\n >\n {!isModalView && (\n <PlotPanelHeader\n data={queryMetadata}\n isLoading={isLoadingQueryMetadata}\n title={plotTitle}\n facetToPlot={facetToPlot}\n onHide={onHide}\n setShowModal={setShowModal}\n />\n )}\n {isModalView && (\n <Stack\n sx={{\n gap: 2,\n }}\n >\n <StyledFormControl>\n <InputLabel\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n >\n <span>Filter All Data By</span>\n <Tooltip title=\"Selecting items in this dropdown will affect all facets on the Explore page.\">\n <InfoOutlined className=\"SRC-hand-cursor SRC-secondary-text-color\" />\n </Tooltip>\n </InputLabel>\n <EnumFacetFilter\n facet={facetToPlot}\n containerAs=\"Dropdown\"\n dropdownType=\"SelectBox\"\n />\n </StyledFormControl>\n {chartSelectionToggle}\n </Stack>\n )}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '50% 50%',\n alignItems: 'center',\n }}\n role=\"graphics-object\"\n className=\"FacetNavPanel__body\"\n >\n <div ref={plotContainerRef}>\n <Plot\n key={`${facetToPlot.columnName}-${facetToPlot.jsonPath}-${plotType}-${plotContainerMeasurements?.width}`}\n layout={layout}\n data={plotData?.data ?? []}\n style={getPlotStyle(\n plotContainerMeasurements?.width,\n plotType,\n isModalView ? 300 : 150,\n )}\n config={{ displayModeBar: false }}\n onClick={evt =>\n applyFacetFilter(evt, facetToPlot, applyChangesToGraphSlice)\n }\n />\n </div>\n <FacetPlotLegendList\n labels={plotData?.labels}\n colors={plotData?.colors}\n isExpanded={isModalView}\n />\n </Box>\n </div>\n </>\n )\n }\n}\n\nexport default FacetNavPanel\n"],"names":["maxLabelLength","layout","extractPlotDataArray","facetToPlot","columnType","index","plotType","accessToken","colorPalette","getContrastColorPalette","getLabels","facetValues","map","SynapseConstants.VALUE_NOT_SET","SynapseConstants.FRIENDLY_VALUE_NOT_SET","filteredValues","value","val","ColumnTypeEnum","response","SynapseClient","header","facetValue","getLabel","truncateFlag","labelMap","label","truncate","labels","text","el","anyFacetsSelected","selectionAwareColorPalette","counts","facet","x","y","singleChartData","applyFacetFilter","event","allFacetValues","callbackApplyFn","plotPointData","facetValueClickedValue","facetValueClicked","getPlotStyle","parentWidth","maxHeight","quotient","width","height","FacetNavPanel","props","onHide","isModalView","applyChangesToGraphSlice","onSetPlotType","useSynapseContext","queryMetadata","isLoadingQueryMetadata","useGetQueryMetadata","plotContainerMeasurements","plotContainerRef","useMeasure","getColumnDisplayName","useQueryVisualizationContext","showModal","setShowModal","useState","plotTitle","columnModel","useMemo","getCorrespondingColumnForFacet","plotData","useQuery","chartSelectionToggle","jsxs","StyledFormControl","jsx","InputLabel","Select","e","MenuItem","loadingScreen","Fragment","ConfirmationDialog","PlotPanelHeader","Stack","Tooltip","InfoOutlined","EnumFacetFilter","Box","Plot","evt","FacetPlotLegendList"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { PlotType } from '../facet-nav/FacetNavPanel';
4
4
  export type PlotsContainerProps = {
5
5
  facetsToPlot?: string[];
6
6
  customPlots?: QueryWrapperSynapsePlotProps[];
7
- initialPlotType?: PlotType;
7
+ initialPlotTypeByFacetColumnName?: Record<string, PlotType>;
8
8
  };
9
9
  type CustomPlotIdentifier = {
10
10
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PlotsContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/facet-nav/PlotsContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAO/C,OAAgC,EAC9B,4BAA4B,EAC7B,MAAM,mDAAmD,CAAA;AAC1D,OAAsB,EAEpB,QAAQ,EACT,MAAM,4BAA4B,CAAA;AAMnC,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,4BAA4B,EAAE,CAAA;IAC5C,eAAe,CAAC,EAAE,QAAQ,CAAA;CAC3B,CAAA;AACD,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAAG,oBAAoB,CAAA;AAEzE,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,cAAc,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAuSD,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,2CAO5E"}
1
+ {"version":3,"file":"PlotsContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/widgets/facet-nav/PlotsContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAO/C,OAAgC,EAC9B,4BAA4B,EAC7B,MAAM,mDAAmD,CAAA;AAC1D,OAAsB,EAEpB,QAAQ,EACT,MAAM,4BAA4B,CAAA;AAMnC,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,4BAA4B,EAAE,CAAA;IAC5C,gCAAgC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAC5D,CAAA;AACD,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAAG,oBAAoB,CAAA;AAEzE,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,cAAc,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AA+SD,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,2CAO5E"}
@@ -1,6 +1,6 @@
1
- import { jsx as p, Fragment as F, jsxs as C } from "react/jsx-runtime";
2
- import { facetObjectMatchesDefinition as M } from "../../../utils/functions/queryUtils.js";
3
- import { Box as O, Button as A } from "@mui/material";
1
+ import { jsx as d, Fragment as g, jsxs as C } from "react/jsx-runtime";
2
+ import { facetObjectMatchesDefinition as A } from "../../../utils/functions/queryUtils.js";
3
+ import { Box as M, Button as O } from "@mui/material";
4
4
  import { Suspense as b, useState as v, useEffect as j, useMemo as k } from "react";
5
5
  import "@sage-bionetworks/synapse-types";
6
6
  import "../../../utils/PermissionLevelToAccessType.js";
@@ -30,120 +30,121 @@ import '../../../style/components/_spinner.css';/* empty css
30
30
  import "react-router";
31
31
  import "../../../utils/types/IsType.js";
32
32
  import "../../QueryContext/QueryContext.js";
33
- import { useSuspenseGetQueryMetadata as D } from "../../QueryWrapper/useGetQueryMetadata.js";
34
- import { useQueryVisualizationContext as N } from "../../QueryVisualizationWrapper/QueryVisualizationContext.js";
35
- import B from "../../QueryWrapperPlotNav/QueryWrapperSynapsePlot.js";
33
+ import { useSuspenseGetQueryMetadata as B } from "../../QueryWrapper/useGetQueryMetadata.js";
34
+ import { useQueryVisualizationContext as E } from "../../QueryVisualizationWrapper/QueryVisualizationContext.js";
35
+ import D from "../../QueryWrapperPlotNav/QueryWrapperSynapsePlot.js";
36
36
  import V from "./FacetNavPanel.js";
37
37
  import { PlotsContainerSkeleton as $ } from "./PlotsContainerSkeleton.js";
38
- import G, { getFacets as Q } from "./useFacetPlots.js";
39
- const f = 2, d = (o, e) => "__custom" in e && "__custom" in o ? o.title == e.title : !("__custom" in e) && !("__custom" in o) ? M(o, e) : !1;
40
- function R(o) {
38
+ import R, { getFacets as G } from "./useFacetPlots.js";
39
+ const f = 2, m = (o, e) => "__custom" in e && "__custom" in o ? o.title == e.title : !("__custom" in e) && !("__custom" in o) ? A(o, e) : !1;
40
+ function Q(o) {
41
41
  return o === "bar" ? "BAR" : "PIE";
42
42
  }
43
- const W = (o) => "__custom" in o.plotId ? `custom-${o.plotId.title}` : `facet-${o.plotId.columnName}-${o.plotId.jsonPath}`, z = (o, e) => !!e.find((i) => d(i.plotId, o)), h = (o) => ({ __custom: !0, title: o.title ?? "" }), q = (o = [], e = [], i = y) => [
44
- ...o.map((l, a) => ({
45
- plotId: h(l),
43
+ const W = (o) => "__custom" in o.plotId ? `custom-${o.plotId.title}` : `facet-${o.plotId.columnName}-${o.plotId.jsonPath}`, z = (o, e) => !!e.find((l) => m(l.plotId, o)), I = (o) => ({ __custom: !0, title: o.title ?? "" }), q = (o = [], e = [], l) => [
44
+ ...o.map((r, a) => ({
45
+ plotId: I(r),
46
46
  isHidden: a >= f,
47
- plotType: R(l.type)
47
+ plotType: Q(r.type)
48
48
  })),
49
- ...e.map((l, a) => ({
50
- plotId: l.facetToPlot,
49
+ ...e.map((r, a) => ({
50
+ plotId: r.facetToPlot,
51
51
  isHidden: a + o.length >= f,
52
- plotType: i
52
+ plotType: l?.[r.facetToPlot.columnName] ?? N
53
53
  }))
54
- ], K = (o, e, i) => e.some(
55
- (l) => d(
56
- h(l),
54
+ ], K = (o, e, l) => e.some(
55
+ (r) => m(
56
+ I(r),
57
57
  o.plotId
58
58
  )
59
- ) || i.some(
60
- (l) => d(l.facetToPlot, o.plotId)
61
- ), y = "PIE", Y = [], J = [];
59
+ ) || l.some(
60
+ (r) => m(r.facetToPlot, o.plotId)
61
+ ), N = "PIE", Y = [], J = [];
62
62
  function X(o) {
63
63
  const {
64
64
  facetsToPlot: e = Y,
65
- customPlots: i = J,
66
- initialPlotType: l = y
67
- } = o, { data: a } = D(), { showPlots: S } = N(), [m, I] = v([]), u = G(e), x = (t) => m.find(
68
- (r) => d(t, r.plotId)
69
- )?.plotType ?? y;
65
+ customPlots: l = J,
66
+ initialPlotTypeByFacetColumnName: r
67
+ } = o, { data: a } = B(), { showPlots: w } = E(), [p, T] = v([]), u = R(e), x = (t) => p.find(
68
+ (s) => m(t, s.plotId)
69
+ )?.plotType ?? N;
70
70
  j(() => {
71
71
  const t = q(
72
- i,
72
+ l,
73
73
  u,
74
- l
74
+ r
75
75
  );
76
- I((n) => {
77
- const r = t.filter((T) => !z(T.plotId, n));
76
+ T((n) => {
77
+ const s = t.filter((y) => !z(y.plotId, n));
78
78
  return [...n.filter(
79
- (T) => K(T, i, u)
80
- ), ...r];
79
+ (y) => K(y, l, u)
80
+ ), ...s];
81
81
  });
82
- }, [i, u]);
82
+ }, [l, u, r]);
83
83
  const H = (t) => {
84
- I((n) => n.map((r, c) => t ? { ...r, isHidden: !1 } : { ...r, isHidden: c >= f }));
85
- }, w = (t) => m.find(
86
- (c) => d(t, c.plotId) && c.isHidden === !0
84
+ T((n) => n.map((s, c) => t ? { ...s, isHidden: !1 } : { ...s, isHidden: c >= f }));
85
+ }, S = (t) => p.find(
86
+ (c) => m(t, c.plotId) && c.isHidden === !0
87
87
  ) !== void 0, P = k(() => (
88
88
  // if at least one item is hidden
89
- m.find((t) => t.isHidden === !0) ? "MORE" : m.length <= f ? "NONE" : "LESS"
90
- ), [m]), _ = (t) => {
91
- E(t, "isHidden", !0);
92
- }, L = (t, n) => {
93
- E(t, "plotType", n);
94
- }, E = (t, n, r) => {
95
- I(
89
+ p.find((t) => t.isHidden === !0) ? "MORE" : p.length <= f ? "NONE" : "LESS"
90
+ ), [p]), _ = (t) => {
91
+ h(t, "isHidden", !0);
92
+ }, F = (t, n) => {
93
+ h(t, "plotType", n);
94
+ }, h = (t, n, s) => {
95
+ T(
96
96
  (c) => c.map(
97
- (s) => d(t, s.plotId) ? { ...s, [n]: r } : s
97
+ (i) => m(t, i.plotId) ? { ...i, [n]: s } : i
98
98
  )
99
99
  );
100
- }, g = (
100
+ }, L = (
101
101
  // TODO: customPlots should use the color index
102
102
  // additionally, it is unclear why this object is created
103
103
  // We can probably just pass the index from `plotUiStateArray.map)
104
- Q(a, e).map((t, n) => ({
104
+ G(a, e).map((t, n) => ({
105
105
  facet: { columnName: t.columnName, jsonPath: t.jsonPath },
106
106
  colorIndex: n
107
107
  }))
108
108
  );
109
- return /* @__PURE__ */ p(F, { children: m.length > 0 && /* @__PURE__ */ C(
109
+ return /* @__PURE__ */ d(g, { children: p.length > 0 && /* @__PURE__ */ C(
110
110
  "div",
111
111
  {
112
- className: `PlotsContainer ${S ? "" : "hidden"} ${P === "LESS" ? "less" : ""}`,
112
+ className: `PlotsContainer ${w ? "" : "hidden"} ${P === "LESS" ? "less" : ""}`,
113
113
  children: [
114
- /* @__PURE__ */ p("div", { className: "PlotsContainer__row", role: "list", children: m.map((t) => {
115
- const n = "__custom" in t.plotId, r = i.find(
116
- (s) => d(
117
- h(s),
114
+ /* @__PURE__ */ d("div", { className: "PlotsContainer__row", role: "list", children: p.map((t) => {
115
+ const n = "__custom" in t.plotId, s = l.find(
116
+ (i) => m(
117
+ I(i),
118
118
  t.plotId
119
119
  )
120
120
  ), c = u.find(
121
- (s) => d(s.facetToPlot, t.plotId)
121
+ (i) => m(i.facetToPlot, t.plotId)
122
122
  );
123
123
  return /* @__PURE__ */ C(
124
124
  "div",
125
125
  {
126
+ className: t.plotType === "BAR" ? "PlotsContainer__row__item--full-width" : void 0,
126
127
  style: {
127
128
  minWidth: "435px",
128
- display: w(t.plotId) ? "none" : "block"
129
+ display: S(t.plotId) ? "none" : "block"
129
130
  },
130
131
  children: [
131
- n && r && /* @__PURE__ */ p(
132
- B,
132
+ n && s && /* @__PURE__ */ d(
133
+ D,
133
134
  {
134
- ...r,
135
+ ...s,
135
136
  onHide: () => _(t.plotId)
136
137
  }
137
138
  ),
138
- !n && c && /* @__PURE__ */ p(
139
+ !n && c && /* @__PURE__ */ d(
139
140
  V,
140
141
  {
141
- index: g.find(
142
- (s) => d(s.facet, t.plotId)
142
+ index: L.find(
143
+ (i) => m(i.facet, t.plotId)
143
144
  )?.colorIndex,
144
145
  onHide: () => _(t.plotId),
145
146
  plotType: x(t.plotId),
146
- onSetPlotType: (s) => L(t.plotId, s),
147
+ onSetPlotType: (i) => F(t.plotId, i),
147
148
  isModalView: !1,
148
149
  ...c
149
150
  }
@@ -153,8 +154,8 @@ function X(o) {
153
154
  W(t)
154
155
  );
155
156
  }) }),
156
- P !== "NONE" && /* @__PURE__ */ p(
157
- O,
157
+ P !== "NONE" && /* @__PURE__ */ d(
158
+ M,
158
159
  {
159
160
  sx: {
160
161
  display: "flex",
@@ -163,8 +164,8 @@ function X(o) {
163
164
  p: 2,
164
165
  mt: 2
165
166
  },
166
- children: /* @__PURE__ */ p(
167
- A,
167
+ children: /* @__PURE__ */ d(
168
+ O,
168
169
  {
169
170
  variant: "contained",
170
171
  color: "secondary",
@@ -180,8 +181,8 @@ function X(o) {
180
181
  ) });
181
182
  }
182
183
  function kt(o) {
183
- const { showPlots: e } = N();
184
- return /* @__PURE__ */ p(b, { fallback: e ? /* @__PURE__ */ p($, {}) : null, children: /* @__PURE__ */ p(X, { ...o }) });
184
+ const { showPlots: e } = E();
185
+ return /* @__PURE__ */ d(b, { fallback: e ? /* @__PURE__ */ d($, {}) : null, children: /* @__PURE__ */ d(X, { ...o }) });
185
186
  }
186
187
  export {
187
188
  kt as default
@@ -1 +1 @@
1
- {"version":3,"file":"PlotsContainer.js","sources":["../../../../src/components/widgets/facet-nav/PlotsContainer.tsx"],"sourcesContent":["import { UniqueFacetIdentifier } from '@/utils'\nimport { facetObjectMatchesDefinition } from '@/utils/functions/queryUtils'\nimport { Box, Button } from '@mui/material'\nimport type { PlotType as PlotlyPlotType } from 'plotly.js-basic-dist'\nimport { Suspense, useEffect, useMemo, useState } from 'react'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useSuspenseGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport QueryWrapperSynapsePlot, {\n QueryWrapperSynapsePlotProps,\n} from '../../QueryWrapperPlotNav/QueryWrapperSynapsePlot'\nimport FacetNavPanel, {\n FacetNavPanelProps,\n PlotType,\n} from '../facet-nav/FacetNavPanel'\nimport { PlotsContainerSkeleton } from './PlotsContainerSkeleton'\nimport useFacetPlots, { getFacets } from './useFacetPlots'\n\nconst DEFAULT_VISIBLE_PLOTS = 2\ntype ShowMoreState = 'MORE' | 'LESS' | 'NONE'\nexport type PlotsContainerProps = {\n facetsToPlot?: string[]\n customPlots?: QueryWrapperSynapsePlotProps[]\n initialPlotType?: PlotType\n}\ntype CustomPlotIdentifier = {\n title: string\n __custom: true\n}\nexport type PlotIdentifier = UniqueFacetIdentifier | CustomPlotIdentifier\n\nexport type UiPlotState = {\n plotId: PlotIdentifier\n isHidden: boolean\n plotType: PlotType\n index?: number\n}\nconst plotMatchesDefinition = (\n definition: PlotIdentifier,\n plotId: PlotIdentifier,\n) => {\n if ('__custom' in plotId && '__custom' in definition) {\n return definition.title == plotId.title\n } else if (!('__custom' in plotId) && !('__custom' in definition)) {\n return facetObjectMatchesDefinition(definition, plotId)\n } else {\n return false\n }\n}\n\nfunction convertPlotlyPlotTypeToFacetNavPlotType(\n plotlyPlotType: PlotlyPlotType,\n): PlotType {\n if (plotlyPlotType === 'bar') {\n return 'BAR'\n } else if (plotlyPlotType === 'pie') {\n return 'PIE'\n }\n return 'PIE'\n}\n\nconst generatePlotKey = (plotUiState: UiPlotState) => {\n if ('__custom' in plotUiState.plotId) {\n // For custom plots\n return `custom-${plotUiState.plotId.title}`\n } else {\n // For facet plots\n return `facet-${plotUiState.plotId.columnName}-${plotUiState.plotId.jsonPath}`\n }\n}\n\nconst isPlotInState = (\n plotId: PlotIdentifier,\n plotUiStateArray: UiPlotState[],\n): boolean => {\n return !!plotUiStateArray.find(plot => {\n return plotMatchesDefinition(plot.plotId, plotId)\n })\n}\n\nconst getCustomPlotIdentifier = (\n customPlot: QueryWrapperSynapsePlotProps,\n): PlotIdentifier => {\n return { __custom: true, title: customPlot.title ?? '' }\n}\n\nconst getCombinedNewPlots = (\n customPlots: QueryWrapperSynapsePlotProps[] = [],\n facetNavPanelPropsArray: Pick<\n FacetNavPanelProps,\n 'applyChangesToFacetFilter' | 'applyChangesToGraphSlice' | 'facetToPlot'\n >[] = [],\n initialPlotType: PlotType = DEFAULT_PLOT_TYPE,\n): UiPlotState[] => [\n ...customPlots.map((plotProps, index) => ({\n plotId: getCustomPlotIdentifier(plotProps),\n isHidden: index >= DEFAULT_VISIBLE_PLOTS,\n plotType: convertPlotlyPlotTypeToFacetNavPlotType(plotProps.type),\n })),\n ...facetNavPanelPropsArray.map((facetPlotProps, index) => ({\n plotId: facetPlotProps.facetToPlot,\n isHidden: index + customPlots.length >= DEFAULT_VISIBLE_PLOTS,\n plotType: initialPlotType,\n })),\n]\n\n// Remove plots that are no longer in props from prevPlots\nconst isPlotStillPresent = (\n prevPlot: UiPlotState,\n customPlots: QueryWrapperSynapsePlotProps[],\n facetNavPanelProps: Pick<\n FacetNavPanelProps,\n 'applyChangesToFacetFilter' | 'applyChangesToGraphSlice' | 'facetToPlot'\n >[],\n): boolean => {\n return (\n customPlots.some(customPlot =>\n plotMatchesDefinition(\n getCustomPlotIdentifier(customPlot),\n prevPlot.plotId,\n ),\n ) ||\n facetNavPanelProps.some(facetPlot =>\n plotMatchesDefinition(facetPlot.facetToPlot, prevPlot.plotId),\n )\n )\n} // fn returns true iff the plot id is in customPlots or facetNavPanelPropsArray\n\nconst DEFAULT_PLOT_TYPE: PlotType = 'PIE'\n\nconst DEFAULT_FACETS_TO_PLOT: string[] = []\nconst DEFAULT_CUSTOM_PLOTS: QueryWrapperSynapsePlotProps[] = []\n\nfunction PlotsContainer(props: PlotsContainerProps) {\n const {\n facetsToPlot = DEFAULT_FACETS_TO_PLOT,\n customPlots = DEFAULT_CUSTOM_PLOTS,\n initialPlotType = DEFAULT_PLOT_TYPE,\n } = props\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n const { showPlots: showPlotVisualization } = useQueryVisualizationContext()\n const [plotUiStateArray, setPlotUiStateArray] = useState<UiPlotState[]>([])\n const facetNavPanelPropsArray = useFacetPlots(facetsToPlot)\n\n const getPlotType = (plotId: PlotIdentifier): PlotType => {\n const plotType = plotUiStateArray.find(item =>\n plotMatchesDefinition(plotId, item.plotId),\n )?.plotType\n return plotType ?? DEFAULT_PLOT_TYPE\n }\n\n useEffect(() => {\n const combinedNewPlots = getCombinedNewPlots(\n customPlots,\n facetNavPanelPropsArray,\n initialPlotType,\n )\n\n // Update the state with new plots\n setPlotUiStateArray(prevPlots => {\n // Filter to only include new plots\n const newPlots = combinedNewPlots.filter(plot => {\n const inState = isPlotInState(plot.plotId, prevPlots)\n return !inState\n })\n\n const updatedPlots = prevPlots.filter(prevPlot =>\n isPlotStillPresent(prevPlot, customPlots, facetNavPanelPropsArray),\n )\n\n // Append new plots\n const combinedPlots = [...updatedPlots, ...newPlots]\n return combinedPlots\n })\n }, [customPlots, facetNavPanelPropsArray])\n\n // when 'show more/less' is clicked\n const onShowMoreClick = (shouldShowMore: boolean) => {\n setPlotUiStateArray(plotUiStateArray => {\n return plotUiStateArray.map((item, index) => {\n if (shouldShowMore) {\n // show everything\n return { ...item, isHidden: false }\n }\n // otherwise hide everything except the first few items\n return { ...item, isHidden: index >= DEFAULT_VISIBLE_PLOTS }\n })\n })\n }\n\n const isPlotHiddenInGrid = (plotId: PlotIdentifier) => {\n const itemHidden = plotUiStateArray.find(\n item =>\n plotMatchesDefinition(plotId, item.plotId) && item.isHidden === true,\n )\n const result = itemHidden !== undefined\n return result\n }\n\n const showMoreButtonState = useMemo<ShowMoreState>(() => {\n if (\n // if at least one item is hidden\n plotUiStateArray.find(item => item.isHidden === true)\n ) {\n return 'MORE'\n } else if (plotUiStateArray.length <= DEFAULT_VISIBLE_PLOTS) {\n return 'NONE'\n } else {\n return 'LESS'\n }\n }, [plotUiStateArray])\n\n // hides plot graph\n const hidePlotInGrid = (plotId: PlotIdentifier) => {\n setUiPropertyForPlot(plotId, 'isHidden', true)\n }\n\n const setPlotType = (plotId: PlotIdentifier, plotType: PlotType) => {\n setUiPropertyForPlot(plotId, 'plotType', plotType)\n }\n\n const setUiPropertyForPlot = (\n plotId: PlotIdentifier,\n propName: keyof UiPlotState,\n value: boolean | PlotType, // 'the possible values of the above type' (currently can't be specified in TS using symbols)\n ) => {\n setPlotUiStateArray(plotUiStateArray =>\n plotUiStateArray.map(item =>\n plotMatchesDefinition(plotId, item.plotId)\n ? { ...item, [propName]: value }\n : item,\n ),\n )\n }\n\n const colorTracker: { facet: PlotIdentifier; colorIndex: number }[] =\n // TODO: customPlots should use the color index\n // additionally, it is unclear why this object is created\n // We can probably just pass the index from `plotUiStateArray.map)\n getFacets(queryMetadata, facetsToPlot).map((el, index) => {\n return {\n facet: { columnName: el.columnName, jsonPath: el.jsonPath },\n colorIndex: index,\n }\n })\n\n return (\n <>\n {plotUiStateArray.length > 0 && (\n <div\n className={`PlotsContainer ${showPlotVisualization ? '' : 'hidden'} ${\n showMoreButtonState === 'LESS' ? 'less' : ''\n }`}\n >\n <div className=\"PlotsContainer__row\" role=\"list\">\n {plotUiStateArray.map(plotUiState => {\n const isCustomPlot = '__custom' in plotUiState.plotId\n const customPlotProps = customPlots.find(customPlot =>\n plotMatchesDefinition(\n getCustomPlotIdentifier(customPlot),\n plotUiState.plotId,\n ),\n )\n const facetNavPanelProps = facetNavPanelPropsArray.find(props =>\n plotMatchesDefinition(props.facetToPlot, plotUiState.plotId),\n )\n\n return (\n <div\n style={{\n minWidth: '435px',\n display: isPlotHiddenInGrid(plotUiState.plotId)\n ? 'none'\n : 'block',\n }}\n key={generatePlotKey(plotUiState)}\n >\n {isCustomPlot && customPlotProps && (\n <QueryWrapperSynapsePlot\n {...customPlotProps}\n onHide={() => hidePlotInGrid(plotUiState.plotId)}\n />\n )}\n {!isCustomPlot && facetNavPanelProps && (\n <FacetNavPanel\n index={\n colorTracker.find(el =>\n plotMatchesDefinition(el.facet, plotUiState.plotId),\n )?.colorIndex!\n }\n onHide={() => hidePlotInGrid(plotUiState.plotId)}\n plotType={getPlotType(plotUiState.plotId)}\n onSetPlotType={(plotType: PlotType) =>\n setPlotType(plotUiState.plotId, plotType)\n }\n isModalView={false}\n {...facetNavPanelProps}\n />\n )}\n </div>\n )\n })}\n </div>\n {showMoreButtonState !== 'NONE' && (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n backgroundColor: 'grey.100',\n p: 2,\n mt: 2,\n }}\n >\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => onShowMoreClick(showMoreButtonState === 'MORE')}\n sx={{ width: '150px' }}\n >\n {showMoreButtonState === 'LESS'\n ? 'Hide Charts'\n : 'View All Charts'}\n </Button>\n </Box>\n )}\n </div>\n )}\n </>\n )\n}\n\nexport default function PlotsContainerWithSuspense(props: PlotsContainerProps) {\n const { showPlots } = useQueryVisualizationContext()\n return (\n <Suspense fallback={showPlots ? <PlotsContainerSkeleton /> : null}>\n <PlotsContainer {...props} />\n </Suspense>\n )\n}\n"],"names":["DEFAULT_VISIBLE_PLOTS","plotMatchesDefinition","definition","plotId","facetObjectMatchesDefinition","convertPlotlyPlotTypeToFacetNavPlotType","plotlyPlotType","generatePlotKey","plotUiState","isPlotInState","plotUiStateArray","plot","getCustomPlotIdentifier","customPlot","getCombinedNewPlots","customPlots","facetNavPanelPropsArray","initialPlotType","DEFAULT_PLOT_TYPE","plotProps","index","facetPlotProps","isPlotStillPresent","prevPlot","facetNavPanelProps","facetPlot","DEFAULT_FACETS_TO_PLOT","DEFAULT_CUSTOM_PLOTS","PlotsContainer","props","facetsToPlot","queryMetadata","useSuspenseGetQueryMetadata","showPlotVisualization","useQueryVisualizationContext","setPlotUiStateArray","useState","useFacetPlots","getPlotType","item","useEffect","combinedNewPlots","prevPlots","newPlots","onShowMoreClick","shouldShowMore","isPlotHiddenInGrid","showMoreButtonState","useMemo","hidePlotInGrid","setUiPropertyForPlot","setPlotType","plotType","propName","value","colorTracker","getFacets","el","jsx","Fragment","jsxs","isCustomPlot","customPlotProps","QueryWrapperSynapsePlot","FacetNavPanel","Box","Button","PlotsContainerWithSuspense","showPlots","Suspense","PlotsContainerSkeleton"],"mappings":"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"}
1
+ {"version":3,"file":"PlotsContainer.js","sources":["../../../../src/components/widgets/facet-nav/PlotsContainer.tsx"],"sourcesContent":["import { UniqueFacetIdentifier } from '@/utils'\nimport { facetObjectMatchesDefinition } from '@/utils/functions/queryUtils'\nimport { Box, Button } from '@mui/material'\nimport type { PlotType as PlotlyPlotType } from 'plotly.js-basic-dist'\nimport { Suspense, useEffect, useMemo, useState } from 'react'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport { useSuspenseGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport QueryWrapperSynapsePlot, {\n QueryWrapperSynapsePlotProps,\n} from '../../QueryWrapperPlotNav/QueryWrapperSynapsePlot'\nimport FacetNavPanel, {\n FacetNavPanelProps,\n PlotType,\n} from '../facet-nav/FacetNavPanel'\nimport { PlotsContainerSkeleton } from './PlotsContainerSkeleton'\nimport useFacetPlots, { getFacets } from './useFacetPlots'\n\nconst DEFAULT_VISIBLE_PLOTS = 2\ntype ShowMoreState = 'MORE' | 'LESS' | 'NONE'\nexport type PlotsContainerProps = {\n facetsToPlot?: string[]\n customPlots?: QueryWrapperSynapsePlotProps[]\n initialPlotTypeByFacetColumnName?: Record<string, PlotType>\n}\ntype CustomPlotIdentifier = {\n title: string\n __custom: true\n}\nexport type PlotIdentifier = UniqueFacetIdentifier | CustomPlotIdentifier\n\nexport type UiPlotState = {\n plotId: PlotIdentifier\n isHidden: boolean\n plotType: PlotType\n index?: number\n}\nconst plotMatchesDefinition = (\n definition: PlotIdentifier,\n plotId: PlotIdentifier,\n) => {\n if ('__custom' in plotId && '__custom' in definition) {\n return definition.title == plotId.title\n } else if (!('__custom' in plotId) && !('__custom' in definition)) {\n return facetObjectMatchesDefinition(definition, plotId)\n } else {\n return false\n }\n}\n\nfunction convertPlotlyPlotTypeToFacetNavPlotType(\n plotlyPlotType: PlotlyPlotType,\n): PlotType {\n if (plotlyPlotType === 'bar') {\n return 'BAR'\n } else if (plotlyPlotType === 'pie') {\n return 'PIE'\n }\n return 'PIE'\n}\n\nconst generatePlotKey = (plotUiState: UiPlotState) => {\n if ('__custom' in plotUiState.plotId) {\n // For custom plots\n return `custom-${plotUiState.plotId.title}`\n } else {\n // For facet plots\n return `facet-${plotUiState.plotId.columnName}-${plotUiState.plotId.jsonPath}`\n }\n}\n\nconst isPlotInState = (\n plotId: PlotIdentifier,\n plotUiStateArray: UiPlotState[],\n): boolean => {\n return !!plotUiStateArray.find(plot => {\n return plotMatchesDefinition(plot.plotId, plotId)\n })\n}\n\nconst getCustomPlotIdentifier = (\n customPlot: QueryWrapperSynapsePlotProps,\n): PlotIdentifier => {\n return { __custom: true, title: customPlot.title ?? '' }\n}\n\nconst getCombinedNewPlots = (\n customPlots: QueryWrapperSynapsePlotProps[] = [],\n facetNavPanelPropsArray: Pick<\n FacetNavPanelProps,\n 'applyChangesToFacetFilter' | 'applyChangesToGraphSlice' | 'facetToPlot'\n >[] = [],\n initialPlotTypeByFacetColumnName?: Record<string, PlotType>,\n): UiPlotState[] => [\n ...customPlots.map((plotProps, index) => ({\n plotId: getCustomPlotIdentifier(plotProps),\n isHidden: index >= DEFAULT_VISIBLE_PLOTS,\n plotType: convertPlotlyPlotTypeToFacetNavPlotType(plotProps.type),\n })),\n ...facetNavPanelPropsArray.map((facetPlotProps, index) => ({\n plotId: facetPlotProps.facetToPlot,\n isHidden: index + customPlots.length >= DEFAULT_VISIBLE_PLOTS,\n plotType:\n initialPlotTypeByFacetColumnName?.[\n facetPlotProps.facetToPlot.columnName\n ] ?? DEFAULT_PLOT_TYPE,\n })),\n]\n\n// Remove plots that are no longer in props from prevPlots\nconst isPlotStillPresent = (\n prevPlot: UiPlotState,\n customPlots: QueryWrapperSynapsePlotProps[],\n facetNavPanelProps: Pick<\n FacetNavPanelProps,\n 'applyChangesToFacetFilter' | 'applyChangesToGraphSlice' | 'facetToPlot'\n >[],\n): boolean => {\n return (\n customPlots.some(customPlot =>\n plotMatchesDefinition(\n getCustomPlotIdentifier(customPlot),\n prevPlot.plotId,\n ),\n ) ||\n facetNavPanelProps.some(facetPlot =>\n plotMatchesDefinition(facetPlot.facetToPlot, prevPlot.plotId),\n )\n )\n} // fn returns true iff the plot id is in customPlots or facetNavPanelPropsArray\n\nconst DEFAULT_PLOT_TYPE: PlotType = 'PIE'\n\nconst DEFAULT_FACETS_TO_PLOT: string[] = []\nconst DEFAULT_CUSTOM_PLOTS: QueryWrapperSynapsePlotProps[] = []\n\nfunction PlotsContainer(props: PlotsContainerProps) {\n const {\n facetsToPlot = DEFAULT_FACETS_TO_PLOT,\n customPlots = DEFAULT_CUSTOM_PLOTS,\n initialPlotTypeByFacetColumnName,\n } = props\n const { data: queryMetadata } = useSuspenseGetQueryMetadata()\n const { showPlots: showPlotVisualization } = useQueryVisualizationContext()\n const [plotUiStateArray, setPlotUiStateArray] = useState<UiPlotState[]>([])\n const facetNavPanelPropsArray = useFacetPlots(facetsToPlot)\n\n const getPlotType = (plotId: PlotIdentifier): PlotType => {\n const plotType = plotUiStateArray.find(item =>\n plotMatchesDefinition(plotId, item.plotId),\n )?.plotType\n return plotType ?? DEFAULT_PLOT_TYPE\n }\n\n useEffect(() => {\n const combinedNewPlots = getCombinedNewPlots(\n customPlots,\n facetNavPanelPropsArray,\n initialPlotTypeByFacetColumnName,\n )\n\n // Update the state with new plots\n setPlotUiStateArray(prevPlots => {\n // Filter to only include new plots\n const newPlots = combinedNewPlots.filter(plot => {\n const inState = isPlotInState(plot.plotId, prevPlots)\n return !inState\n })\n\n const updatedPlots = prevPlots.filter(prevPlot =>\n isPlotStillPresent(prevPlot, customPlots, facetNavPanelPropsArray),\n )\n\n // Append new plots\n const combinedPlots = [...updatedPlots, ...newPlots]\n return combinedPlots\n })\n }, [customPlots, facetNavPanelPropsArray, initialPlotTypeByFacetColumnName])\n\n // when 'show more/less' is clicked\n const onShowMoreClick = (shouldShowMore: boolean) => {\n setPlotUiStateArray(plotUiStateArray => {\n return plotUiStateArray.map((item, index) => {\n if (shouldShowMore) {\n // show everything\n return { ...item, isHidden: false }\n }\n // otherwise hide everything except the first few items\n return { ...item, isHidden: index >= DEFAULT_VISIBLE_PLOTS }\n })\n })\n }\n\n const isPlotHiddenInGrid = (plotId: PlotIdentifier) => {\n const itemHidden = plotUiStateArray.find(\n item =>\n plotMatchesDefinition(plotId, item.plotId) && item.isHidden === true,\n )\n const result = itemHidden !== undefined\n return result\n }\n\n const showMoreButtonState = useMemo<ShowMoreState>(() => {\n if (\n // if at least one item is hidden\n plotUiStateArray.find(item => item.isHidden === true)\n ) {\n return 'MORE'\n } else if (plotUiStateArray.length <= DEFAULT_VISIBLE_PLOTS) {\n return 'NONE'\n } else {\n return 'LESS'\n }\n }, [plotUiStateArray])\n\n // hides plot graph\n const hidePlotInGrid = (plotId: PlotIdentifier) => {\n setUiPropertyForPlot(plotId, 'isHidden', true)\n }\n\n const setPlotType = (plotId: PlotIdentifier, plotType: PlotType) => {\n setUiPropertyForPlot(plotId, 'plotType', plotType)\n }\n\n const setUiPropertyForPlot = (\n plotId: PlotIdentifier,\n propName: keyof UiPlotState,\n value: boolean | PlotType, // 'the possible values of the above type' (currently can't be specified in TS using symbols)\n ) => {\n setPlotUiStateArray(plotUiStateArray =>\n plotUiStateArray.map(item =>\n plotMatchesDefinition(plotId, item.plotId)\n ? { ...item, [propName]: value }\n : item,\n ),\n )\n }\n\n const colorTracker: { facet: PlotIdentifier; colorIndex: number }[] =\n // TODO: customPlots should use the color index\n // additionally, it is unclear why this object is created\n // We can probably just pass the index from `plotUiStateArray.map)\n getFacets(queryMetadata, facetsToPlot).map((el, index) => {\n return {\n facet: { columnName: el.columnName, jsonPath: el.jsonPath },\n colorIndex: index,\n }\n })\n\n return (\n <>\n {plotUiStateArray.length > 0 && (\n <div\n className={`PlotsContainer ${showPlotVisualization ? '' : 'hidden'} ${\n showMoreButtonState === 'LESS' ? 'less' : ''\n }`}\n >\n <div className=\"PlotsContainer__row\" role=\"list\">\n {plotUiStateArray.map(plotUiState => {\n const isCustomPlot = '__custom' in plotUiState.plotId\n const customPlotProps = customPlots.find(customPlot =>\n plotMatchesDefinition(\n getCustomPlotIdentifier(customPlot),\n plotUiState.plotId,\n ),\n )\n const facetNavPanelProps = facetNavPanelPropsArray.find(props =>\n plotMatchesDefinition(props.facetToPlot, plotUiState.plotId),\n )\n\n return (\n <div\n className={\n plotUiState.plotType === 'BAR'\n ? 'PlotsContainer__row__item--full-width'\n : undefined\n }\n style={{\n minWidth: '435px',\n display: isPlotHiddenInGrid(plotUiState.plotId)\n ? 'none'\n : 'block',\n }}\n key={generatePlotKey(plotUiState)}\n >\n {isCustomPlot && customPlotProps && (\n <QueryWrapperSynapsePlot\n {...customPlotProps}\n onHide={() => hidePlotInGrid(plotUiState.plotId)}\n />\n )}\n {!isCustomPlot && facetNavPanelProps && (\n <FacetNavPanel\n index={\n colorTracker.find(el =>\n plotMatchesDefinition(el.facet, plotUiState.plotId),\n )?.colorIndex!\n }\n onHide={() => hidePlotInGrid(plotUiState.plotId)}\n plotType={getPlotType(plotUiState.plotId)}\n onSetPlotType={(plotType: PlotType) =>\n setPlotType(plotUiState.plotId, plotType)\n }\n isModalView={false}\n {...facetNavPanelProps}\n />\n )}\n </div>\n )\n })}\n </div>\n {showMoreButtonState !== 'NONE' && (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n backgroundColor: 'grey.100',\n p: 2,\n mt: 2,\n }}\n >\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => onShowMoreClick(showMoreButtonState === 'MORE')}\n sx={{ width: '150px' }}\n >\n {showMoreButtonState === 'LESS'\n ? 'Hide Charts'\n : 'View All Charts'}\n </Button>\n </Box>\n )}\n </div>\n )}\n </>\n )\n}\n\nexport default function PlotsContainerWithSuspense(props: PlotsContainerProps) {\n const { showPlots } = useQueryVisualizationContext()\n return (\n <Suspense fallback={showPlots ? <PlotsContainerSkeleton /> : null}>\n <PlotsContainer {...props} />\n </Suspense>\n )\n}\n"],"names":["DEFAULT_VISIBLE_PLOTS","plotMatchesDefinition","definition","plotId","facetObjectMatchesDefinition","convertPlotlyPlotTypeToFacetNavPlotType","plotlyPlotType","generatePlotKey","plotUiState","isPlotInState","plotUiStateArray","plot","getCustomPlotIdentifier","customPlot","getCombinedNewPlots","customPlots","facetNavPanelPropsArray","initialPlotTypeByFacetColumnName","plotProps","index","facetPlotProps","DEFAULT_PLOT_TYPE","isPlotStillPresent","prevPlot","facetNavPanelProps","facetPlot","DEFAULT_FACETS_TO_PLOT","DEFAULT_CUSTOM_PLOTS","PlotsContainer","props","facetsToPlot","queryMetadata","useSuspenseGetQueryMetadata","showPlotVisualization","useQueryVisualizationContext","setPlotUiStateArray","useState","useFacetPlots","getPlotType","item","useEffect","combinedNewPlots","prevPlots","newPlots","onShowMoreClick","shouldShowMore","isPlotHiddenInGrid","showMoreButtonState","useMemo","hidePlotInGrid","setUiPropertyForPlot","setPlotType","plotType","propName","value","colorTracker","getFacets","el","jsx","Fragment","jsxs","isCustomPlot","customPlotProps","QueryWrapperSynapsePlot","FacetNavPanel","Box","Button","PlotsContainerWithSuspense","showPlots","Suspense","PlotsContainerSkeleton"],"mappings":"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"}