@spotify/backstage-plugin-soundcheck 0.19.2 → 0.19.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 (290) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/config.d.ts +54 -1
  3. package/dist/alpha/integrations.esm.js +1 -1
  4. package/dist/alpha/pages.esm.js +1 -1
  5. package/dist/alpha.d.ts +2 -2
  6. package/dist/api.esm.js +1 -1
  7. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  8. package/dist/components/Badges/NoLevelBadge.esm.js +2 -2
  9. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  10. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  11. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  12. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  13. package/dist/components/CampaignPage/CampaignPage.esm.js +2 -0
  14. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +2 -0
  15. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +2 -0
  16. package/dist/components/CampaignPage/CampaignStatusHistoryChart.esm.js +2 -0
  17. package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +2 -0
  18. package/dist/components/CampaignPage/CampaignStatusTile.esm.js +2 -0
  19. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +2 -0
  20. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +2 -0
  21. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +1 -1
  22. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +2 -0
  23. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  24. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  25. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +2 -0
  26. package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +2 -0
  27. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +2 -0
  28. package/dist/components/Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js +2 -0
  29. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +2 -0
  30. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  31. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  32. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  33. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  34. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  35. package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
  36. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  37. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  38. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  39. package/dist/components/CertificationsPage/Playlist/PlaylistComponent.esm.js +1 -1
  40. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  41. package/dist/components/CertificationsPage/Playlist/PlaylistSummary.esm.js +1 -1
  42. package/dist/components/Charts/chartUtils.esm.js +1 -1
  43. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  44. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  45. package/dist/components/CheckDetails/JustificationDetails.esm.js +1 -1
  46. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  47. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  48. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
  49. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  50. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  51. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  52. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  53. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  54. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  55. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  56. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  57. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  58. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  59. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  60. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +2 -0
  61. package/dist/components/CheckPage/CheckPage.esm.js +2 -0
  62. package/dist/components/CheckPage/CheckPageBUI.esm.js +2 -0
  63. package/dist/components/CheckPage/CheckPageDeprecated.esm.js +2 -0
  64. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  65. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +2 -0
  66. package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
  67. package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +2 -0
  68. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +2 -0
  69. package/dist/components/CheckPage/utils.esm.js +1 -1
  70. package/dist/components/CheckSelection/CheckPreview.esm.js +1 -1
  71. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  72. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +1 -1
  73. package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +2 -0
  74. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  75. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +2 -0
  76. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +2 -0
  77. package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +2 -0
  78. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +2 -0
  79. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +1 -1
  80. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +2 -0
  81. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  82. package/dist/components/ChecksTable/ChecksTable.esm.js +2 -0
  83. package/dist/components/ChipSelector/ChipSelector.esm.js +2 -0
  84. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
  85. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  86. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +2 -0
  87. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +2 -0
  88. package/dist/components/CollectorPage/CollectorFactTable.esm.js +1 -1
  89. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +2 -0
  90. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  91. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  92. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  93. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  94. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  95. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  96. package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
  97. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  98. package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
  99. package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
  100. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  101. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  102. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  103. package/dist/components/CollectorPage/Configurators/Jira/IssuesFactDetailsComponent.esm.js +2 -0
  104. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  105. package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +1 -1
  106. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
  107. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  108. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  109. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  110. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  111. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  112. package/dist/components/CollectorPage/DependantCheckCard.esm.js +2 -0
  113. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +2 -0
  114. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  115. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  116. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +2 -0
  117. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +2 -0
  118. package/dist/components/CustomCell/CustomCell.esm.js +2 -0
  119. package/dist/components/DescriptionCell/DescriptionCell.esm.js +2 -0
  120. package/dist/components/DocLinkButton/DocLinkButton.esm.js +2 -0
  121. package/dist/components/EmptyState/EmptyStateBUI.esm.js +2 -0
  122. package/dist/components/EmptyState/EmptyStateNoCampaigns.esm.js +2 -0
  123. package/dist/components/EmptyState/EmptyStateNoChecks.esm.js +2 -0
  124. package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +2 -0
  125. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  126. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  127. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  128. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  129. package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +2 -0
  130. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  131. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  132. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  133. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  134. package/dist/components/Filter/KeyValueInputDialog.esm.js +1 -1
  135. package/dist/components/FilterMenu/FilterMenu.esm.js +2 -0
  136. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  137. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  138. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  139. package/dist/components/FilterSidebar/util.esm.js +1 -1
  140. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
  141. package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
  142. package/dist/components/FormControlledAutocomplete/useLabelValueOptions.esm.js +2 -0
  143. package/dist/components/FormMarkdownInput/FormMarkdownInput.esm.js +1 -1
  144. package/dist/components/FormattedPreview/FormattedPreview.esm.js +1 -1
  145. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +1 -1
  146. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
  147. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +2 -0
  148. package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +2 -0
  149. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +2 -0
  150. package/dist/components/GroupSelectorBUI/GroupTag.esm.js +2 -0
  151. package/dist/components/GroupSelectorBUI/useGroupHistory.esm.js +2 -0
  152. package/dist/components/GroupSelectorBUI/usePreviousSelectedGroups.esm.js +2 -0
  153. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +1 -1
  154. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +1 -1
  155. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
  156. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  157. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +2 -0
  158. package/dist/components/ImportExportPanel/{ImportExportPanel.esm.js → ImportExportPanelDeprecated.esm.js} +2 -2
  159. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  160. package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
  161. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  162. package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +2 -0
  163. package/dist/components/LoadingTableSkeleton/LoadingTableSkeleton.esm.js +2 -0
  164. package/dist/components/Menus/SimpleMenu.esm.js +2 -0
  165. package/dist/components/Menus/useCampaignActions.esm.js +2 -0
  166. package/dist/components/Menus/useCheckActions.esm.js +2 -0
  167. package/dist/components/Menus/useTrackActions.esm.js +2 -0
  168. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  169. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  170. package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
  171. package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +1 -1
  172. package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
  173. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  174. package/dist/components/PageCustomActions/PageCustomActions.esm.js +2 -0
  175. package/dist/components/PassRateTable/PassRateTable.esm.js +1 -1
  176. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
  177. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  178. package/dist/components/Router.esm.js +1 -1
  179. package/dist/components/RoutingPage/RoutingMainMenu.esm.js +2 -0
  180. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  181. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +2 -0
  182. package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +2 -0
  183. package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +2 -0
  184. package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +2 -0
  185. package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +2 -0
  186. package/dist/components/RoutingPage/index.esm.js +1 -1
  187. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  188. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +1 -1
  189. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +2 -0
  190. package/dist/components/SoundcheckMarkdownContent/ComponentRenders.esm.js +1 -1
  191. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +2 -0
  192. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js +2 -0
  193. package/dist/components/StatusBar/StatusBar.esm.js +2 -0
  194. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  195. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
  196. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +2 -0
  197. package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +1 -1
  198. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  199. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
  200. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
  201. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  202. package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
  203. package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
  204. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  205. package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
  206. package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
  207. package/dist/components/TechHealthTabs/NameColumn.esm.js +1 -1
  208. package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
  209. package/dist/components/TechInsights/FilterControls.esm.js +1 -1
  210. package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
  211. package/dist/components/TechInsights/SummaryTilesBUI.esm.js +2 -0
  212. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  213. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +2 -0
  214. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +2 -0
  215. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +2 -0
  216. package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
  217. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +2 -0
  218. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  219. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +1 -1
  220. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +2 -0
  221. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +2 -0
  222. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +2 -0
  223. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  224. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  225. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  226. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
  227. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  228. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  229. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  230. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  231. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +2 -0
  232. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  233. package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +2 -0
  234. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  235. package/dist/components/TrackPage/TrackPageBUI.esm.js +2 -0
  236. package/dist/components/TrackPage/TrackPageDeprecated.esm.js +2 -0
  237. package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +2 -0
  238. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +2 -0
  239. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +2 -0
  240. package/dist/components/TrackSelection/TrackSelection.esm.js +1 -1
  241. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +2 -0
  242. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
  243. package/dist/components/TracksPage/TracksListPageBUI.esm.js +2 -0
  244. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  245. package/dist/graphql/generated/index.esm.js +126 -117
  246. package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
  247. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  248. package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +1 -1
  249. package/dist/hooks/catalog/useProfileImages.esm.js +2 -0
  250. package/dist/hooks/checks/useCheckDetails.esm.js +1 -1
  251. package/dist/hooks/entities/useTrackEntities.esm.js +1 -1
  252. package/dist/hooks/filters/useFilters.esm.js +2 -0
  253. package/dist/hooks/graphqlKeys.esm.js +1 -1
  254. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  255. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  256. package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
  257. package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +1 -1
  258. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
  259. package/dist/hooks/tracks/useRecertifyTrack.esm.js +2 -0
  260. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
  261. package/dist/hooks/useConfirmationModal.esm.js +1 -1
  262. package/dist/hooks/useLoadTimeReporting.esm.js +2 -0
  263. package/dist/hooks/usePagination.esm.js +2 -0
  264. package/dist/hooks/useSearchName.esm.js +2 -0
  265. package/dist/hooks/useSortTableLocalStorage.esm.js +2 -0
  266. package/dist/routes.esm.js +1 -1
  267. package/dist/utils/charts.esm.js +1 -1
  268. package/dist/utils/formStyles.esm.js +1 -1
  269. package/dist/utils/formatters.esm.js +1 -1
  270. package/dist/utils/helpers.esm.js +1 -1
  271. package/dist/utils/lcpReporting.esm.js +1 -1
  272. package/dist/utils/time.esm.js +1 -1
  273. package/package.json +25 -33
  274. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +0 -2
  275. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +0 -2
  276. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +0 -2
  277. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +0 -2
  278. package/dist/components/CheckPage/CheckInsightsPage.esm.js +0 -2
  279. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +0 -2
  280. package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +0 -2
  281. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +0 -2
  282. package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +0 -2
  283. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js +0 -2
  284. package/dist/components/TechInsights/TechInsightsCardsView.esm.js +0 -2
  285. package/dist/components/TechInsights/TrackStatusCard.esm.js +0 -2
  286. package/dist/components/TechInsights/ViewModeControls.esm.js +0 -2
  287. package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +0 -2
  288. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +0 -2
  289. /package/dist/components/{CampaignInsightsPage → CampaignPage}/DaysRemainingTile.esm.js +0 -0
  290. /package/dist/{components/GroupHierarchySelector → utils}/getAllOwnedEntityCount.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{parseFactRef as i,stringifyFactRef as p}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as n}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as s}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const l=({selectedCollector:e})=>{const{data:a}=s({});return{factOptions:n(()=>e?.factNames?.map(o=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:o}:i(o,{defaultSource:e.id,defaultScope:"default"});let m=t.name;if(e?.id==="soundcheck"){const r=a?.edges.find(c=>c.node.id===t.name.replace("track/",""))?.node;m=r?`${r.type==="campaign"?"Campaign: ":"Track: "}${r.name}`:t.name}return{label:m,value:p(t)}})?.sort((o,t)=>o.label.localeCompare(t.label))??[],[e?.factNames,e?.id,a])}};export{l as useFactOptions};
1
+ import{parseFactRef as c,stringifyFactRef as p}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as n}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as s}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";const l=({selectedCollector:e})=>{const{data:a}=s({});return{factOptions:n(()=>e?.factNames?.map(o=>{const t=e.id==="soundcheck"?{source:e.id,scope:"default",name:o}:c(o,{defaultSource:e.id,defaultScope:"default"});let m=t.name;if(e?.id==="soundcheck"){const r=a?.edges.find(i=>i.node.id===t.name.replace("track/",""))?.node;m=r?`${r.type==="campaign"?"Campaign: ":"Track: "}${r.name}`:t.name}return{label:m,value:p(t)}})?.sort((o,t)=>o.label.localeCompare(t.label))??[],[e?.factNames,e?.id,a])}};export{l as useFactOptions};
2
2
  //# sourceMappingURL=useFactOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import P from"@material-ui/icons/ExpandMore";import{Autocomplete as U}from"@material-ui/lab";import{useState as V,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as D}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const $=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=$(),[y,c]=V(!1),{data:r,isLoading:C,error:S}=D(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),v=d(()=>{n(l?.length?l:void 0)},[l,n]),O=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),T=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),w=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(H,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(U,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:w,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:v,disabled:T,ListboxComponent:M,renderOption:O,renderTags:k,size:"small",popupIcon:t(P,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
1
+ import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as w,FormControlLabel as A,Checkbox as I,Typography as G,Box as j,TextField as B}from"@material-ui/core";import E from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import U from"@material-ui/icons/ExpandMore";import{Autocomplete as V}from"@material-ui/lab";import{useState as D,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as H}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as M}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as P}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const $=w({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=$(),[y,c]=D(!1),{data:r,isLoading:C,error:S}=H(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),O=d(()=>{n(l?.length?l:void 0)},[l,n]),T=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(E,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),v=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),z=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(G,{color:"error",children:["Failed to load facet: ",f]}):L(j,{pb:1,pt:1,className:i.container,children:[t(M,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(V,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:z,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:O,disabled:v,ListboxComponent:P,renderOption:T,renderTags:k,size:"small",popupIcon:t(U,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(B,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
2
2
  //# sourceMappingURL=EntityAutocompletePicker.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as i,Fragment as k,jsx as e}from"react/jsx-runtime";import{makeStyles as z,Typography as f,Divider as X,Box as d,Tabs as Y,Tab as P,Grid as c,Paper as _,Chip as D,Switch as G,FormHelperText as H}from"@material-ui/core";import M,{isEmpty as I}from"lodash";import{useState as q,useMemo as K}from"react";import{useFormContext as J}from"react-hook-form";import Q from"react-use/lib/useLocalStorage";import{FormFieldLabel as w}from"../FormFieldLabel/FormFieldLabel.esm.js";import{EntityAutocompletePicker as U}from"./EntityAutocompletePicker.esm.js";import{FilterKeyValueInput as $}from"./FilterKeyValueInput.esm.js";import{FilterPreviewTable as Z}from"./FilterPreviewTable/FilterPreviewTable.esm.js";import{FILTER_OPTIONS as S,emptyFilters as ee}from"./types.esm.js";import{isValidOtherFilterKey as le}from"./utils.esm.js";const te=z(l=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap"},selectionTabs:{marginBottom:l.spacing(2)},divider:{marginTop:l.spacing(2)},filterDisplayBox:{padding:l.spacing(2),paddingLeft:l.spacing(4),border:`1px solid ${l.palette.divider}`,marginBottom:l.spacing(0),display:"flex",alignItems:"center",flex:1},error:{borderColor:l.palette.error.main}})),h=l=>I(l)?"":`${l.length>1?`[${l.join(", ")}]`:l[0]}`,ie=({filterValue:l,excludeFilter:g,keyValueFilter:y,excludeKeyValueFilter:m})=>{const o=(a=ee())=>S.map(t=>I(a[t.key])?"":`${t.facet}: ${h(a[t.key])}`).filter(t=>!!t),n=a=>[a?.selectedLabels?.map(t=>`metadata.labels.${t.key}: ${h(t.value)}`),a?.selectedAnnotations?.map(t=>`metadata.annotations.${t.key}: ${h(t.value)}`),a?.selectedOtherFilters?.map(t=>`${t.key}: ${h(t.value)}`)].flat(),s=[...o(l),...n(y)],x=[...o(g),...n(m)];return{includeFilterDisplay:s,excludeFilterDisplay:x}},re=({filterName:l,errorPath:g="filtersStep",disabled:y,keyValueFilterName:m,excludeFilterName:o,excludeKeyValueFilterName:n})=>{const s=te(),{setValue:x,watch:a,formState:t,trigger:A}=J(),[p,E]=q(0),[F,W]=Q("soundcheck-show-preview",!0),V=K(()=>p===0?l:o,[o,l,p]),u=K(()=>p===0?m:n,[n,m,p]),L=a(V??l),R=r=>v=>{x(V??l,{...L,[r]:v??[]}),A()},B=a(l),C=o?a(o):void 0,N=m?a(m):void 0,T=n?a(n):void 0,{includeFilterDisplay:j,excludeFilterDisplay:O}=ie({filterValue:B,excludeFilter:C,keyValueFilter:N,excludeKeyValueFilter:T}),b=M.get(t.errors,g,void 0);return i(k,{children:[i(f,{variant:"body2",children:[e("strong",{children:"Note:"})," For performance reasons, filter facets selected for inclusion cannot be used for exclusion and vice versa."]}),o&&i(k,{children:[e(X,{className:s.divider}),e(d,{className:s.selectionTabs,children:i(Y,{value:p,onChange:(r,v)=>E(v),children:[e(P,{label:"Include Filters","aria-label":"include filters"}),e(P,{label:"Exclude Filters","aria-label":"exclude filters"})]})})]}),i(c,{container:!0,spacing:6,children:[i(c,{item:!0,container:!0,className:s.filterContainer,spacing:2,children:[S.map(r=>e(c,{item:!0,xs:12,sm:6,md:4,children:e(U,{...r,values:L?.[r.key],onChange:R(r.key),disabled:y})},r.key)),u&&i(k,{children:[i(c,{item:!0,xs:12,sm:6,md:4,children:[e(w,{title:"Label",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e($,{name:`${u}.selectedLabels`,title:"Label Filter"})]}),i(c,{item:!0,xs:12,sm:6,md:4,children:[e(w,{title:"Annotation",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e($,{name:`${u}.selectedAnnotations`,title:"Annotation Filter"})]}),i(c,{item:!0,xs:12,sm:6,md:4,children:[e(w,{title:"Other",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e($,{name:`${u}.selectedOtherFilters`,title:"Other Catalog Filter",validateKey:le})]})]})]}),i(c,{item:!0,xs:12,children:[i(_,{className:`${s.filterDisplayBox} ${b?.message?s.error:""}`,elevation:0,children:[i(d,{flex:1,overflow:"auto",children:[i(d,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(f,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Filter:"}),j.map(r=>e(D,{size:"small",label:r,style:{marginBottom:4}},r))]}),O.length>0&&i(d,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(f,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Exclude:"}),O.map(r=>e(D,{size:"small",label:r,style:{marginBottom:4}},r))]})]}),e(f,{style:{marginLeft:10},variant:"subtitle2",component:"div",children:"Preview"}),e(d,{children:e(G,{checked:F,onChange:()=>{W(!F)},inputProps:{"aria-label":"toggle entity preview"}})})]}),e(d,{marginBottom:2,children:b?.message&&e(H,{error:!0,children:b?.message})}),F&&e(Z,{filter:B,keyValueFilter:N,excludeFilter:C,excludeKeyValueFilter:T})]})]})]})};export{re as FilterComponent};
1
+ import{jsxs as r,Fragment as V,jsx as e}from"react/jsx-runtime";import{parseEntityRef as $}from"@backstage/catalog-model";import{useApi as X,configApiRef as Y}from"@backstage/core-plugin-api";import{makeStyles as _,Typography as y,Divider as M,Box as u,Tabs as Q,Tab as P,Grid as p,Paper as q,Chip as I,Switch as J,FormHelperText as U}from"@material-ui/core";import{combineEntityFilterQueries as Z,getGroupFilterFromConfig as ee}from"@spotify/backstage-plugin-soundcheck-common";import te,{isEmpty as S}from"lodash";import{useState as le,useMemo as R}from"react";import{useFormContext as ie}from"react-hook-form";import re from"react-use/lib/useLocalStorage";import{EntitiesAutocompletePicker as ae}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{FormFieldLabel as L}from"../FormFieldLabel/FormFieldLabel.esm.js";import{EntityAutocompletePicker as oe}from"./EntityAutocompletePicker.esm.js";import{FilterKeyValueInput as T}from"./FilterKeyValueInput.esm.js";import{FilterPreviewTable as ne}from"./FilterPreviewTable/FilterPreviewTable.esm.js";import{FILTER_OPTIONS as j,emptyFilters as se}from"./types.esm.js";import{isValidOtherFilterKey as me}from"./utils.esm.js";const ce=_(t=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap"},selectionTabs:{marginBottom:t.spacing(2)},divider:{marginTop:t.spacing(2)},filterDisplayBox:{padding:t.spacing(2),paddingLeft:t.spacing(4),border:`1px solid ${t.palette.divider}`,marginBottom:t.spacing(0),display:"flex",alignItems:"center",flex:1},error:{borderColor:t.palette.error.main}})),x=t=>S(t)?"":`${t.length>1?`[${t.join(", ")}]`:t[0]}`,de=({filterValue:t,excludeFilter:F,keyValueFilter:h,excludeKeyValueFilter:f})=>{const n=(a=se())=>j.map(i=>{const d=a[i.key];if(S(d))return"";let o;return i.key==="selectedOwners"?d.length>1?o=`[${d.map(v=>$(v).name).join(", ")}]`:o=$(d[0]).name:o=x(d),`${i.facet}: ${o}`}).filter(i=>!!i),m=a=>[a?.selectedLabels?.map(i=>`metadata.labels.${i.key}: ${x(i.value)}`),a?.selectedAnnotations?.map(i=>`metadata.annotations.${i.key}: ${x(i.value)}`),a?.selectedOtherFilters?.map(i=>`${i.key}: ${x(i.value)}`)].flat(),c=[...n(t),...m(h)],b=[...n(F),...m(f)];return{includeFilterDisplay:c,excludeFilterDisplay:b}},pe=({filterName:t,errorPath:F="filtersStep",disabled:h,keyValueFilterName:f,excludeFilterName:n,excludeKeyValueFilterName:m})=>{const c=ce(),{setValue:b,watch:a,formState:i,trigger:d}=ie(),[o,v]=le(0),[k,W]=re("soundcheck-show-preview",!0),z=X(Y),B=R(()=>o===0?t:n,[n,t,o]),g=R(()=>o===0?f:m,[m,f,o]),w=a(B??t),N=l=>s=>{b(B??t,{...w,[l]:s??[]}),d()},E=a(t),O=n?a(n):void 0,A=f?a(f):void 0,D=m?a(m):void 0,{includeFilterDisplay:G,excludeFilterDisplay:K}=de({filterValue:E,excludeFilter:O,keyValueFilter:A,excludeKeyValueFilter:D}),C=te.get(i.errors,F,void 0);return r(V,{children:[r(y,{variant:"body2",children:[e("strong",{children:"Note:"})," For performance reasons, filter facets selected for inclusion cannot be used for exclusion and vice versa."]}),n&&r(V,{children:[e(M,{className:c.divider}),e(u,{className:c.selectionTabs,children:r(Q,{value:o,onChange:(l,s)=>v(s),children:[e(P,{label:"Include Filters","aria-label":"include filters"}),e(P,{label:"Exclude Filters","aria-label":"exclude filters"})]})})]}),r(p,{container:!0,spacing:6,children:[r(p,{item:!0,container:!0,className:c.filterContainer,spacing:2,children:[j.map(l=>e(p,{item:!0,xs:12,sm:6,md:4,children:l.key==="selectedOwners"?e(ae,{facet:l.facet,label:l.label,values:(w?.[l.key]??[]).map(s=>({label:$(s).name,value:s})),onChange:s=>N(l.key)(s?.map(({value:H})=>H)),disabled:h,filter:Z({kind:["group"]},ee(z))}):e(oe,{...l,values:w?.[l.key],onChange:N(l.key),disabled:h})},l.key)),g&&r(V,{children:[r(p,{item:!0,xs:12,sm:6,md:4,children:[e(L,{title:"Label",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(T,{name:`${g}.selectedLabels`,title:"Label Filter"})]}),r(p,{item:!0,xs:12,sm:6,md:4,children:[e(L,{title:"Annotation",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(T,{name:`${g}.selectedAnnotations`,title:"Annotation Filter"})]}),r(p,{item:!0,xs:12,sm:6,md:4,children:[e(L,{title:"Other",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(T,{name:`${g}.selectedOtherFilters`,title:"Other Catalog Filter",validateKey:me})]})]})]}),r(p,{item:!0,xs:12,children:[r(q,{className:`${c.filterDisplayBox} ${C?.message?c.error:""}`,elevation:0,children:[r(u,{flex:1,overflow:"auto",children:[r(u,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(y,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Filter:"}),G.map(l=>e(I,{size:"small",label:l,style:{marginBottom:4}},l))]}),K.length>0&&r(u,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"},children:[e(y,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span",children:"Exclude:"}),K.map(l=>e(I,{size:"small",label:l,style:{marginBottom:4}},l))]})]}),e(y,{style:{marginLeft:10},variant:"subtitle2",component:"div",children:"Preview"}),e(u,{children:e(J,{checked:k,onChange:()=>{W(!k)},inputProps:{"aria-label":"toggle entity preview"}})})]}),e(u,{marginBottom:2,children:C?.message&&e(U,{error:!0,children:C?.message})}),k&&e(ne,{filter:E,keyValueFilter:A,excludeFilter:O,excludeKeyValueFilter:D})]})]})]})};export{pe as FilterComponent};
2
2
  //# sourceMappingURL=FilterComponent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as h,Fragment as V}from"react/jsx-runtime";import{parseEntityRef as j}from"@backstage/catalog-model";import{Table as k}from"@backstage/core-components";import{makeStyles as D,useTheme as K}from"@material-ui/core";import{combineEntityFilterQueries as O,difference as N}from"@spotify/backstage-plugin-soundcheck-common";import{useState as F,useMemo as u}from"react";import{useEntitiesByRefs as A}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as C}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{mapFiltersToCatalogFilter as b}from"../utils.esm.js";import{createEntityRefColumn as B,createSystemColumn as M,createOwnerColumn as W,createKindColumn as G,createSpecTypeColumn as I,createSpecLifecycleColumn as Q,createTagsColumn as U}from"./EntityTableColumns.esm.js";const X=D(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),z=[B(),M(),W(),G(),I(),Q(),U()],$=15e3,q=({filter:d,excludeFilter:p,keyValueFilter:y,excludeKeyValueFilter:g})=>{const i=b(d,y),l=!!i?.[0]&&Object.values(i[0]).some(a=>!!a),o=p||g?b(p,g):[],e=!!o?.[0]&&Object.values(o[0]).some(a=>!!a),{data:r,isFetching:m}=C(i,e&&!l?$:void 0,l),c=e?O(i,o):void 0,{data:n,isFetching:f}=C(c??{},void 0,l&&!!c);return{allEntityRefs:u(()=>N(r??[],n??[]),[n,r]),isLoading:m||f}},H=({filter:d,excludeFilter:p,keyValueFilter:y,excludeKeyValueFilter:g,additionalColumns:i=[],title:l,hideTags:o=!1})=>{const[e,r]=F({page:0,pageSize:10}),[m,c]=F(""),{allEntityRefs:n,isLoading:f}=q({filter:d,excludeFilter:p,keyValueFilter:y,excludeKeyValueFilter:g}),a=u(()=>{const t=new RegExp(m,"i");return n.filter(P=>j(P).name.match(t))},[n,m]),s=a.length,R=K(),w=X(),x=u(()=>a.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[a,e.page,e.pageSize]),{data:T,isLoading:S}=A({entityRefs:x}),E=u(()=>o?[...z.slice(0,-1),...i]:[...z,...i],[i,o]),v=s>0?`All (${s||0}) `:"No Items",L=l||v;return h(V,{children:h("div",{className:w.entityTable,children:h(k,{title:L,columns:E,subtitle:s===0?"Add or adjust filters to see preview.":"",data:T?.items?.filter(t=>!!t)??[],isLoading:S||f,options:{padding:"dense",paging:s>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!0,showTitle:!0,rowStyle:{fontSize:R.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!S,pageSize:e.pageSize,sorting:!1},onPageChange:t=>{r({...e,page:t})},onSearchChange:t=>{c(t)},onRowsPerPageChange:t=>{r({...e,pageSize:t})},page:e.page,totalCount:s,localization:{pagination:{labelDisplayedRows:""}}})})})};export{H as FilterPreviewTable};
1
+ import{jsx as F,Fragment as j}from"react/jsx-runtime";import{parseEntityRef as k,stringifyEntityRef as b}from"@backstage/catalog-model";import{Table as D}from"@backstage/core-components";import{makeStyles as K,useTheme as O}from"@material-ui/core";import{combineEntityFilterQueries as N,difference as A}from"@spotify/backstage-plugin-soundcheck-common";import{useState as C,useMemo as u}from"react";import{useEntitiesByRefs as B}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as z}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{mapFiltersToCatalogFilter as R}from"../utils.esm.js";import{createEntityRefColumn as M,createSystemColumn as W,createOwnerColumn as G,createKindColumn as I,createSpecTypeColumn as Q,createSpecLifecycleColumn as X,createTagsColumn as Y}from"./EntityTableColumns.esm.js";const $=K(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),w=[M(),W(),G(),I(),Q(),X(),Y()],q=15e3,H=({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m})=>{const a=R(y,f),r=!!a?.[0]&&Object.values(a[0]).some(t=>!!t),l=p||m?R(p,m):[],e=!!l?.[0]&&Object.values(l[0]).some(t=>!!t),{data:g,isFetching:c}=z(a,e&&!r?q:void 0,r),d=g?.items.map(t=>b(t)),n=e?N(a,l):void 0,{data:h,isFetching:s}=z(n??{},void 0,r&&!!n),o=h?.items.map(t=>b(t));return{allEntityRefs:u(()=>A(d??[],o??[]),[o,d]),isLoading:c||s}},J=({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m,additionalColumns:a=[],title:r,hideTags:l=!1})=>{const[e,g]=C({page:0,pageSize:10}),[c,d]=C(""),{allEntityRefs:n,isLoading:h}=H({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m}),s=u(()=>{const i=new RegExp(c,"i");return n.filter(V=>k(V).name.match(i))},[n,c]),o=s.length,t=O(),x=$(),E=u(()=>s.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[s,e.page,e.pageSize]),{data:T,isLoading:S}=B({entityRefs:E}),v=u(()=>l?[...w.slice(0,-1),...a]:[...w,...a],[a,l]),L=o>0?`All (${o||0}) `:"No Items",P=r||L;return F(j,{children:F("div",{className:x.entityTable,children:F(D,{title:P,columns:v,subtitle:o===0?"Add or adjust filters to see preview.":"",data:T?.items?.filter(i=>!!i)??[],isLoading:S||h,options:{padding:"dense",paging:o>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!0,showTitle:!0,rowStyle:{fontSize:t.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!S,pageSize:e.pageSize,sorting:!1},onPageChange:i=>{g({...e,page:i})},onSearchChange:i=>{d(i)},onRowsPerPageChange:i=>{g({...e,pageSize:i})},page:e.page,totalCount:o,localization:{pagination:{labelDisplayedRows:""}}})})})};export{J as FilterPreviewTable};
2
2
  //# sourceMappingURL=FilterPreviewTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as v,Fragment as z}from"react/jsx-runtime";import{Box as i,IconButton as B,Divider as V,Button as T,FormHelperText as A,TextField as W,Chip as E}from"@material-ui/core";import F from"@material-ui/icons/Add";import G from"@material-ui/icons/Delete";import{useEffect as $,useCallback as f,useMemo as j,useState as L}from"react";import{useImmer as w}from"use-immer";import{SoundcheckDialog as M}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const D=({value:h,onChange:c,onKeyDown:u,placeholder:o,endAdornment:m,error:r,helperText:t})=>v(z,{children:[t&&e(A,{error:r,children:t}),e(i,{display:"flex",alignItems:"center",children:e(W,{value:h,onChange:c,variant:"outlined",margin:"dense",fullWidth:!0,onKeyDown:u,placeholder:o,InputProps:{endAdornment:m},error:r})})]}),H=({values:h,addValue:c,deleteValue:u})=>{const[o,m]=L("");return v(i,{width:"100%",children:[e(i,{marginTop:1,marginBottom:1,display:"flex",gridGap:1,flexWrap:"wrap",children:h.map(r=>e(E,{label:r,size:"small",onDelete:()=>u(r),style:{marginBottom:4}},r))}),e(D,{value:o,onChange:r=>m(r.currentTarget.value),onKeyDown:r=>{r.key==="Enter"&&(c(o),m(""))},placeholder:"Type a value and press enter to add to value list.",endAdornment:e(i,{display:"flex",alignItems:"center",children:e(T,{onClick:()=>c(o),style:{padding:0},size:"small",variant:"text",disabled:!o?.length,children:"Add"})})})]})},P=({title:h,open:c,handleClose:u,values:o,onSave:m,validateKey:r})=>{const[t,d]=w([{key:"",value:[]}]);$(()=>{o?.length>0?d(o):d([{key:"",value:[]}])},[o]);const[y,g]=w({}),x=f(({key:a,value:l,idx:n})=>{d(p=>{const s=p[n];s.key=a===void 0?s.key:a,s.value=l===void 0?s.value:l,a&&y[n]&&g(k=>{k[n]=""})})},[y,g,d]),I=f(a=>{d(l=>{l.splice(a,1),l.length===0&&l.push({key:"",value:[]})})},[d]),b=f(a=>{d(l=>{l.splice(a+1,0,{key:"",value:[]})})},[d]),K=f(()=>{let a=!1;if(r){const n=t.map(s=>s.key);let p=0;g(s=>{for(const k of n){const{errorMessage:C}=r(k);C&&(a=!0),s[p]=C??"",p++}})}if(a)return;const l=t.filter(n=>n.key&&n.value);m(l),u()},[r,t,m,u,g]),S=j(()=>t.every(a=>!!a.key&&a.value?.length||!a.key&&!a.value?.length),[t]);return e(M,{title:h,open:c,handleClose:u,fullScreen:!1,children:v(i,{marginLeft:1,minWidth:640,children:[t.map((a,l)=>v(i,{children:[v(i,{display:"flex",alignItems:"flex-end",gridGap:12,marginBottom:2,children:[e(i,{flexGrow:1,children:e(D,{value:a.key,onChange:n=>x({key:n.target.value,idx:l}),placeholder:"Key",error:!!y[l],helperText:y[l]})}),e(i,{width:480,children:e(H,{values:a.value,addValue:n=>{x({idx:l,value:[...a.value,n]})},deleteValue:n=>{x({idx:l,value:a.value.filter(p=>p!==n)})}})}),e(i,{marginBottom:.75,children:e(B,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>b(l),children:e(F,{})})}),e(i,{marginBottom:.75,children:e(B,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>I(l),children:e(G,{})})})]}),e(V,{})]},l)),e(i,{display:"flex",paddingTop:2,marginTop:1,children:e(T,{variant:"contained",size:"medium",color:"primary",onClick:K,disabled:!S,children:"Save"})})]})})};export{P as KeyValueInputDialog};
1
+ import{jsx as e,jsxs as v,Fragment as z}from"react/jsx-runtime";import{Box as i,IconButton as T,Divider as V,Button as B,FormHelperText as A,TextField as W,Chip as E}from"@material-ui/core";import F from"@material-ui/icons/Add";import G from"@material-ui/icons/Delete";import{useEffect as j,useCallback as f,useMemo as L,useState as M}from"react";import{useImmer as w}from"use-immer";import{SoundcheckDialog as $}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const D=({value:h,onChange:c,onKeyDown:u,placeholder:o,endAdornment:m,error:r,helperText:t})=>v(z,{children:[t&&e(A,{error:r,children:t}),e(i,{display:"flex",alignItems:"center",children:e(W,{value:h,onChange:c,variant:"outlined",margin:"dense",fullWidth:!0,onKeyDown:u,placeholder:o,InputProps:{endAdornment:m},error:r})})]}),H=({values:h,addValue:c,deleteValue:u})=>{const[o,m]=M("");return v(i,{width:"100%",children:[e(i,{marginTop:1,marginBottom:1,display:"flex",gridGap:1,flexWrap:"wrap",children:h.map(r=>e(E,{label:r,size:"small",onDelete:()=>u(r),style:{marginBottom:4}},r))}),e(D,{value:o,onChange:r=>m(r.currentTarget.value),onKeyDown:r=>{r.key==="Enter"&&(c(o),m(""))},placeholder:"Type a value and press enter to add to value list.",endAdornment:e(i,{display:"flex",alignItems:"center",children:e(B,{onClick:()=>c(o),style:{padding:0},size:"small",variant:"text",disabled:!o?.length,children:"Add"})})})]})},P=({title:h,open:c,handleClose:u,values:o,onSave:m,validateKey:r})=>{const[t,d]=w([{key:"",value:[]}]);j(()=>{o?.length>0?d(o):d([{key:"",value:[]}])},[o]);const[y,g]=w({}),x=f(({key:a,value:l,idx:n})=>{d(p=>{const s=p[n];s.key=a===void 0?s.key:a,s.value=l===void 0?s.value:l,a&&y[n]&&g(k=>{k[n]=""})})},[y,g,d]),I=f(a=>{d(l=>{l.splice(a,1),l.length===0&&l.push({key:"",value:[]})})},[d]),b=f(a=>{d(l=>{l.splice(a+1,0,{key:"",value:[]})})},[d]),K=f(()=>{let a=!1;if(r){const n=t.map(s=>s.key);let p=0;g(s=>{for(const k of n){const{errorMessage:C}=r(k);C&&(a=!0),s[p]=C??"",p++}})}if(a)return;const l=t.filter(n=>n.key&&n.value);m(l),u()},[r,t,m,u,g]),S=L(()=>t.every(a=>!!a.key&&a.value?.length||!a.key&&!a.value?.length),[t]);return e($,{title:h,open:c,handleClose:u,fullScreen:!1,children:v(i,{marginLeft:1,minWidth:640,children:[t.map((a,l)=>v(i,{children:[v(i,{display:"flex",alignItems:"flex-end",gridGap:12,marginBottom:2,children:[e(i,{flexGrow:1,children:e(D,{value:a.key,onChange:n=>x({key:n.target.value,idx:l}),placeholder:"Key",error:!!y[l],helperText:y[l]})}),e(i,{width:480,children:e(H,{values:a.value,addValue:n=>{x({idx:l,value:[...a.value,n]})},deleteValue:n=>{x({idx:l,value:a.value.filter(p=>p!==n)})}})}),e(i,{marginBottom:.75,children:e(T,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>b(l),children:e(F,{})})}),e(i,{marginBottom:.75,children:e(T,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>I(l),children:e(G,{})})})]}),e(V,{})]},l)),e(i,{display:"flex",paddingTop:2,marginTop:1,children:e(B,{variant:"contained",size:"medium",color:"primary",onClick:K,disabled:!S,children:"Save"})})]})})};export{P as KeyValueInputDialog};
2
2
  //# sourceMappingURL=KeyValueInputDialog.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as r,jsx as l}from"react/jsx-runtime";import{MenuTrigger as m,Button as s,Menu as u,SubmenuTrigger as d,MenuItem as b,MenuAutocompleteListbox as p,MenuListBoxItem as h}from"@backstage/ui";import{RiFilterLine as $}from"@remixicon/react";const x=({filters:n,selected:o,setSelected:a})=>r(m,{children:[l(s,{iconStart:l($,{}),variant:"secondary",children:"Filter"}),l(u,{"aria-label":"Filter Selection",children:n.map((e,i)=>r(d,{children:[l(b,{children:e.label},`${e.label}-${i}-menuitem`),l(p,{selectionMode:"multiple",selectedKeys:o[e.key],onSelectionChange:t=>a(e.key,t),placement:"right top",virtualized:!0,children:e.options.map((t,c)=>l(h,{id:t.value,children:t.label},`${t.value}-${c}-listbox-item`))},`${e.label}-${i}-listbox`)]},`${e.label}-${i}-submenu`))})]});export{x as FilterMenu};
2
+ //# sourceMappingURL=FilterMenu.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as s,jsx as e,Fragment as p}from"react/jsx-runtime";import{createElement as T}from"react";import{parseEntityRef as w}from"@backstage/catalog-model";import{useApi as E,configApiRef as L}from"@backstage/core-plugin-api";import{EntityDisplayName as h}from"@backstage/plugin-catalog-react";import{makeStyles as O,Box as f,Typography as R,Button as g,Grid as n,Checkbox as z,Chip as N}from"@material-ui/core";import{combineEntityFilterQueries as j,getGroupFilterFromConfig as B}from"@spotify/backstage-plugin-soundcheck-common";import{EntitiesAutocompletePicker as W}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as c}from"../Filter/EntityAutocompletePicker.esm.js";const y=(i,{selected:r})=>s(p,{children:[e(z,{value:i,checked:r,color:"primary"}),e(h,{entityRef:i})]}),u=(i,r)=>e(p,{children:i.map((l,a)=>T(N,{...r({index:a}),key:l,label:e(h,{entityRef:l}),size:"small"}))}),D=i=>{try{return w(i).kind.toLowerCase()==="system"}catch{return!1}},G=O(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},additionalFilters:{marginTop:i.spacing(2)}})),P=({trackFilter:i,stagedTypes:r,stagedLifecycles:l,stagedOwners:a,stagedSystems:d,onTypesChange:b,onLifecyclesChange:C,onOwnersChange:x,onSystemsChange:F,onApplyFilters:k,onClearFilters:v,hasFilterChanges:A,children:m})=>{const o=G(),S=E(L);return s("div",{className:o.sidebar,children:[s(f,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(R,{variant:"subtitle2",className:o.filterLabel,children:"Filters"}),(r.length>0||l.length>0||a.length>0||d.length>0)&&e(g,{size:"small",onClick:v,children:"Clear All"})]}),s(n,{container:!0,spacing:1,children:[e(n,{item:!0,xs:12,children:e(c,{facet:"spec.type",label:"Type",values:r,onChange:t=>b(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(c,{facet:"spec.lifecycle",label:"Lifecycle",values:l,onChange:t=>C(t??[]),filter:i})}),e(n,{item:!0,xs:12,children:e(W,{label:"Owner",values:a,onChange:t=>x(t??[]),filter:j({kind:["group"]},B(S)),renderOption:y,renderTags:u})}),e(n,{item:!0,xs:12,children:e(c,{facet:"relations.partOf",label:"System",values:d,onChange:t=>F(t??[]),filter:i,renderOption:y,renderTags:u,facetFilter:D})})]}),m&&e("div",{className:o.additionalFilters,children:m}),e(f,{mt:2,children:e(g,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:k,disabled:!A,children:"Apply Filters"})})]})};export{P as FilterSidebar};
1
+ import{jsxs as a,jsx as e,Fragment as d}from"react/jsx-runtime";import{createElement as w}from"react";import{parseEntityRef as R}from"@backstage/catalog-model";import{useApi as N,configApiRef as B}from"@backstage/core-plugin-api";import{EntityDisplayName as f}from"@backstage/plugin-catalog-react";import{makeStyles as j,Box as m,Typography as y,Button as u,Grid as r,TextField as z,Checkbox as P,Chip as W}from"@material-ui/core";import{Autocomplete as D}from"@material-ui/lab";import{combineEntityFilterQueries as G,getGroupFilterFromConfig as I}from"@spotify/backstage-plugin-soundcheck-common";import{EntitiesAutocompletePicker as Q}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as p}from"../Filter/EntityAutocompletePicker.esm.js";import{FormFieldLabel as X}from"../FormFieldLabel/FormFieldLabel.esm.js";const b=(i,{selected:l})=>a(d,{children:[e(P,{value:i,checked:l,color:"primary"}),e(f,{entityRef:typeof i=="string"?i:i.value})]}),C=(i,l)=>e(d,{children:i.map((n,s)=>{const o=typeof n=="string"?n:n.value;return w(W,{...l({index:s}),key:o,label:e(f,{entityRef:o}),size:"small"})})}),_=i=>{try{return R(i).kind.toLowerCase()==="system"}catch{return!1}},$=j(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},entityFilterLabel:{fontWeight:"bold",marginTop:i.spacing(2)},additionalFilters:{marginTop:i.spacing(2)}})),q=({trackFilter:i,stagedTypes:l,stagedLifecycles:n,stagedOwners:s,stagedSystems:o,stagedCertificationStatus:F,onTypesChange:x,onLifecyclesChange:v,onOwnersChange:k,onSystemsChange:T,onCertificationStatusChange:h,onApplyFilters:S,onClearFilters:A,hasFilterChanges:L,children:g})=>{const c=$(),E=N(B);return a("div",{className:c.sidebar,children:[a(m,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(y,{variant:"subtitle2",children:"Filters"}),(l.length>0||n.length>0||s.length>0||o.length>0)&&e(u,{size:"small",onClick:A,children:"Clear All"})]}),a(r,{container:!0,spacing:1,children:[e(r,{item:!0,xs:12,children:e(p,{facet:"spec.type",label:"Type",values:l,onChange:t=>x(t??[]),filter:i})}),e(r,{item:!0,xs:12,children:e(p,{facet:"spec.lifecycle",label:"Lifecycle",values:n,onChange:t=>v(t??[]),filter:i})}),e(r,{item:!0,xs:12,children:e(Q,{label:"Owner",values:s,onChange:t=>k(t??[]),filter:G({kind:["group"]},I(E)),renderOption:b,renderTags:C})}),e(r,{item:!0,xs:12,children:e(p,{facet:"relations.partOf",label:"System",values:o,onChange:t=>T(t??[]),filter:i,renderOption:b,renderTags:C,facetFilter:_})}),h&&a(d,{children:[e(r,{item:!0,xs:12,children:e(y,{variant:"subtitle2",className:c.entityFilterLabel,children:"Entity Table Filters"})}),e(r,{item:!0,xs:12,children:a(m,{padding:0,marginBottom:1,children:[e(X,{title:"Status"}),e(D,{value:F,renderInput:t=>e(z,{...t,variant:"outlined"}),onChange:(t,O)=>h(O??""),options:["Passed","Failed","Not Reported"]})]})})]})]}),g&&e("div",{className:c.additionalFilters,children:g}),e(m,{mt:2,children:e(u,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:S,disabled:!L,children:"Apply Filters"})})]})};export{q as FilterSidebar};
2
2
  //# sourceMappingURL=FilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as E,useCallback as c}from"react";import{CheckIcon as F}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as O}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as P}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const T=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE","ERROR"],y=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),N=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(F,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),v=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=y(),[p,n]=A(!1);E(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(O,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:T,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:P,renderOption:N,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{v as StateFilter};
1
+ import{jsxs as c,jsx as e}from"react/jsx-runtime";import{makeStyles as C,Box as a,TextField as S,FormControlLabel as b,Checkbox as g,Typography as k}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import L from"@material-ui/icons/CheckBoxOutlineBlank";import I from"@material-ui/icons/ExpandMore";import{Autocomplete as A}from"@material-ui/lab";import{useState as E,useEffect as F,useCallback as m}from"react";import{CheckIcon as O}from"../CheckIcon/CheckIcon.esm.js";import{CheckState as r}from"../CheckPage/utils.esm.js";import{FormFieldLabel as T}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const z=[r.PASSED,r.FAILED,r.WARNING,r.EXEMPT,r.NOT_APPLICABLE,r.ERROR],N=C({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),p=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),P=(l,{selected:t})=>e(b,{onClick:o=>o.preventDefault(),control:e(g,{icon:e(L,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:c(a,{display:"flex",alignItems:"center",children:[e(O,{result:l}),e(a,{mr:1}),e(k,{children:p(l)})]})}),R=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const i=N(),[d,n]=E(!1);F(()=>{o(l)},[l,o]);const f=m((s,h)=>{o(h)},[o]),u=m(()=>{o(t?.length?t:[])},[t,o]);return c(a,{pb:1,pt:1,className:i.container,children:[e(T,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(A,{open:d,onOpen:()=>n(!0),onClose:()=>n(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:z,value:t,getOptionLabel:p,onChange:f,onBlur:u,ListboxComponent:y,renderOption:P,size:"small",popupIcon:e(I,{"data-testid":"selected-facets-expand"}),renderInput:s=>e(S,{...s,variant:"outlined"})})]})};export{R as StateFilter};
2
2
  //# sourceMappingURL=StateFilter.esm.js.map
@@ -1,2 +1,2 @@
1
- import{isEqual as f}from"lodash";import{useMemo as p,useState as i,useEffect as F,useCallback as u}from"react";import{useSearchParams as L}from"react-router-dom";const P=()=>{const[s,m]=L(),l=p(()=>s.getAll("owners"),[s]),a=p(()=>s.getAll("lifecycles"),[s]),r=p(()=>s.getAll("types"),[s]),c=p(()=>s.getAll("systems"),[s]),[n,g]=i(a),[o,h]=i(l),[y,S]=i(r),[d,w]=i(c);F(()=>{h(l??[]),g(a??[]),S(r??[]),w(c??[])},[l,a,r,c]);const E=p(()=>{const e={owners:!f(o,l??[]),lifecycles:!f(n,a??[]),types:!f(y,r??[]),systems:!f(d,c??[])};return Object.values(e).some(Boolean)},[o,l,n,a,y,r,d,c]),A=u(()=>{const e=new URLSearchParams(s);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),n.length>0&&n.forEach(t=>e.append("lifecycles",t)),o.length>0&&o.forEach(t=>e.append("owners",t)),y.length>0&&y.forEach(t=>e.append("types",t)),d.length>0&&d.forEach(t=>e.append("systems",t)),m(e)},[s,n,o,y,d,m]);return{handleClearFilters:u(()=>{g([]),h([]),S([]),w([]);const e=new URLSearchParams(s);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),m(e)},[s,m]),handleApplyFilters:A,hasFilterChanges:E,stagedTypes:y,stagedLifecycles:n,stagedSystems:d,stagedOwners:o,setStagedTypes:S,setStagedLifecycles:g,setStagedOwners:h,setStagedSystems:w,owners:l,lifecycles:a,types:r,systems:c}};export{P as useTrackFilterSidebar};
1
+ import{isEqual as g}from"lodash";import{useMemo as y,useCallback as F,useState as u,useEffect as O}from"react";import{useSearchParams as P}from"react-router-dom";const v=()=>{const[t,S]=P(),a=y(()=>t.getAll("owners"),[t]),l=y(()=>t.getAll("lifecycles"),[t]),c=y(()=>t.getAll("types"),[t]),r=y(()=>t.getAll("systems"),[t]),i=y(()=>t.getAll("certificationStatuses"),[t]),m=F(()=>a.map(e=>({label:e,value:e})),[a]),[n,h]=u(l),[o,w]=u(m()),[d,E]=u(c),[f,A]=u(r),[p,C]=u(i);O(()=>{w(m()),h(l??[]),E(c??[]),A(r??[]),C(i??[])},[a,l,c,r,m,i]);const b=y(()=>{const e={owners:!g(o,a??[]),lifecycles:!g(n,l??[]),types:!g(d,c??[]),systems:!g(f,r??[]),certificationStatus:!g(p,i??[])};return Object.values(e).some(Boolean)},[o,a,n,l,d,c,f,r,p,i]),L=F(()=>{const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),n.length>0&&n.forEach(s=>e.append("lifecycles",s)),o.length>0&&o.forEach(({value:s})=>e.append("owners",s)),d.length>0&&d.forEach(s=>e.append("types",s)),f.length>0&&f.forEach(s=>e.append("systems",s)),p.length>0&&p.forEach(s=>e.append("certificationStatuses",s)),S(e)},[t,n,o,d,f,p,S]);return{handleClearFilters:F(()=>{h([]),w([]),E([]),A([]),C([]);const e=new URLSearchParams(t);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),e.delete("certificationStatuses"),S(e)},[t,S]),handleApplyFilters:L,hasFilterChanges:b,stagedTypes:d,stagedLifecycles:n,stagedSystems:f,stagedOwners:o,stagedCertificationStatuses:p,setStagedTypes:E,setStagedLifecycles:h,setStagedOwners:w,setStagedSystems:A,setStagedCertificationStatuses:C,owners:a,lifecycles:l,types:c,systems:r,certificationStatuses:i}};export{v as useTrackFilterSidebar};
2
2
  //# sourceMappingURL=useTrackFilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- const p=r=>{const{lifecycles:e,owners:t,types:s,systems:l}=r,n=e?.length?{"spec.lifecycle":e}:void 0,o=t?.length?{"relations.ownedBy":t}:void 0,i=s?.length?{"spec.type":s}:void 0,c=l?.length?{"relations.partOf":l}:void 0;if(n||o||i||c)return{...n,...o,...i,...c}};export{p as toFilter};
1
+ import{TrackCertificationState as e}from"../../graphql/generated/index.esm.js";const a=d=>{const{lifecycles:t,owners:o,types:i,systems:s}=d,r=t?.length?{"spec.lifecycle":t}:void 0,l=o?.length?{"relations.ownedBy":o}:void 0,n=i?.length?{"spec.type":i}:void 0,c=s?.length?{"relations.partOf":s}:void 0;if(r||l||n||c)return{...r,...l,...n,...c}},p={Passed:e.Passed,Failed:e.Failed,"Not Reported":e.NotReported};export{p as CERTIFICATION_STATUS_MAP,a as toFilter};
2
2
  //# sourceMappingURL=util.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as s}from"react/jsx-runtime";import{makeStyles as I,TextField as L}from"@material-ui/core";import{Autocomplete as y}from"@material-ui/lab";import{Controller as F}from"react-hook-form";import{ListboxVirtualized as O}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const c=I(l=>({clearIndicator:{marginRight:l.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),W=({name:l,rules:u,label:g,control:h,options:b,getOptionLabel:f,getOptionValue:t,onChange:d,disabled:x,placeholder:C,freeSolo:v=!0,width:m,helperText:S,disableClearable:T,fullWidth:p})=>{const a=c();return s(F,{name:l,control:h,rules:u,render:({field:o,fieldState:n})=>s(y,{...o,value:o.value===""?null:o.value,freeSolo:v,autoSelect:!0,"data-testid":`${l}-autocomplete`,style:m?{width:m}:{minWidth:p?void 0:250},disabled:x,options:b,getOptionLabel:f,classes:{clearIndicator:a.clearIndicator},disableClearable:T,fullWidth:p,renderInput:i=>s(L,{...i,variant:"outlined",label:g,error:n.invalid,placeholder:C,FormHelperTextProps:{className:a.helperText},margin:"dense",className:a.noMargin,helperText:S??(n.error?n.error.message:null)}),onChange:(i,e)=>{const r=t?t(e):e;d?.(r),o.onChange(r)},onInputChange:(i,e)=>{const r=t?t(e):e;d?.(r)},ListboxComponent:O})})};export{W as FormControlledAutocomplete,c as useStyles};
1
+ import{jsx as d}from"react/jsx-runtime";import{makeStyles as W,TextField as k}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{useCallback as A}from"react";import{Controller as M}from"react-hook-form";import{ListboxVirtualized as N}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const f=W(o=>({clearIndicator:{marginRight:o.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),V=({name:o,rules:h,label:b,control:x,options:a,filterOptions:C,getOptionLabel:S,getOptionValue:r,getOptionSelected:v,onChange:m,disabled:O,placeholder:L,freeSolo:T=!0,width:c,helperText:I,disableClearable:y,fullWidth:u})=>{const i=f(),F=A(l=>a.find(s=>s.value===l)||l,[a]);return d(M,{name:o,control:x,rules:h,render:({field:l,fieldState:n})=>{const s=F(l.value);return d(w,{...l,value:s,freeSolo:T,autoSelect:!0,"data-testid":`${o}-autocomplete`,style:c?{width:c}:{minWidth:u?void 0:250},disabled:O,options:a,getOptionLabel:S,getOptionSelected:v,classes:{clearIndicator:i.clearIndicator},disableClearable:y,fullWidth:u,filterOptions:C,onChange:(p,e)=>{let t=null;e===null?t=null:typeof e=="string"?t=e:t=e.value;const g=r?r(t):t;m?.(g),l.onChange(g)},onInputChange:(p,e)=>{const t=r?r(e):e;m?.(t)},renderInput:p=>d(k,{...p,variant:"outlined",label:b,error:n.invalid,placeholder:L,FormHelperTextProps:{className:i.helperText},margin:"dense",className:i.noMargin,helperText:I??(n.error?n.error.message:null)}),ListboxComponent:N})}})};export{V as FormControlledAutocomplete,f as useStyles};
2
2
  //# sourceMappingURL=FormControlledAutocomplete.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{TextField as L,FormControlLabel as k,Checkbox as z}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import I from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as O}from"@material-ui/lab";import{Controller as W}from"react-hook-form";import{ListboxVirtualized as w}from"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useStyles as y}from"./FormControlledAutocomplete.esm.js";const A=({name:i,rules:p,label:c,control:u,options:f,getOptionLabel:h,getOptionValue:m,onChange:b,disabled:C,placeholder:g,freeSolo:x=!0,width:s,helperText:v,disableClearable:S,fullWidth:d})=>{const a=y();return e(W,{name:i,control:u,rules:p,render:({field:l,fieldState:n})=>e(O,{...l,value:l.value,freeSolo:x,autoSelect:!0,"data-testid":`${i}-autocomplete`,style:s?{width:s}:{minWidth:d?void 0:250},disabled:C,options:f,getOptionLabel:h,classes:{clearIndicator:a.clearIndicator},disableClearable:S,fullWidth:d,multiple:!0,size:"small",renderInput:o=>e(L,{...o,variant:"outlined",label:c,error:n.invalid,placeholder:l.value?.length?"":g,FormHelperTextProps:{className:a.helperText},margin:"dense",className:a.noMargin,helperText:v??(n.error?n.error.message:null)}),renderOption:(o,{selected:t})=>e(k,{onClick:r=>r.preventDefault(),control:e(z,{icon:e(I,{fontSize:"small"}),checkedIcon:e(F,{fontSize:"small"}),checked:t}),label:o}),onChange:(o,t)=>{const r=m?t.map(T=>m(T)):t;b?.(r),l.onChange(r)},ListboxComponent:w})})};export{A as FormControlledMultipleAutocomplete};
1
+ import{jsx as e}from"react/jsx-runtime";import{TextField as z,FormControlLabel as L,Checkbox as k}from"@material-ui/core";import F from"@material-ui/icons/CheckBox";import I from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as O}from"@material-ui/lab";import{Controller as W}from"react-hook-form";import{ListboxVirtualized as w}from"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useStyles as y}from"./FormControlledAutocomplete.esm.js";const A=({name:i,rules:p,label:c,control:u,options:f,getOptionLabel:h,getOptionValue:m,onChange:b,disabled:C,placeholder:g,freeSolo:x=!0,width:s,helperText:v,disableClearable:S,fullWidth:d})=>{const a=y();return e(W,{name:i,control:u,rules:p,render:({field:l,fieldState:n})=>e(O,{...l,value:l.value,freeSolo:x,autoSelect:!0,"data-testid":`${i}-autocomplete`,style:s?{width:s}:{minWidth:d?void 0:250},disabled:C,options:f,getOptionLabel:h,classes:{clearIndicator:a.clearIndicator},disableClearable:S,fullWidth:d,multiple:!0,size:"small",renderInput:o=>e(z,{...o,variant:"outlined",label:c,error:n.invalid,placeholder:l.value?.length?"":g,FormHelperTextProps:{className:a.helperText},margin:"dense",className:a.noMargin,helperText:v??(n.error?n.error.message:null)}),renderOption:(o,{selected:t})=>e(L,{onClick:r=>r.preventDefault(),control:e(k,{icon:e(I,{fontSize:"small"}),checkedIcon:e(F,{fontSize:"small"}),checked:t}),label:o}),onChange:(o,t)=>{const r=m?t.map(T=>m(T)):t;b?.(r),l.onChange(r)},ListboxComponent:w})})};export{A as FormControlledMultipleAutocomplete};
2
2
  //# sourceMappingURL=FormControlledMultipleAutocomplete.esm.js.map
@@ -0,0 +1,2 @@
1
+ const l=i=>({getOptionLabel:e=>typeof e=="string"?e:e?.label??"",getOptionSelected:(e,t)=>typeof e=="string"||typeof t=="string"?e===t:e.value===t.value,filterOptions:(e,t)=>{const s=t.inputValue.toLowerCase();return e.filter(o=>typeof o=="string"?o.toLowerCase().includes(s):o.label.toLowerCase().includes(s)||o.value.toLowerCase().includes(s)||o.description?.toLowerCase().includes(s))},options:i});export{l as useLabelValueOptions};
2
+ //# sourceMappingURL=useLabelValueOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as n}from"react/jsx-runtime";import{useTheme as v,Typography as i}from"@material-ui/core";import{makeStyles as w}from"@material-ui/core/styles";import p from"@uiw/react-md-editor";import{Controller as T}from"react-hook-form";import c from"remark-gfm";import{ALLOWED_HTML_TAGS as h}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import{components as k}from"../SoundcheckMarkdownContent/ComponentRenders.esm.js";const y=w(e=>({markdown:{whiteSpace:"pre-wrap",marginBottom:e.spacing(1)},container:{display:"flex",flexDirection:"column",gap:e.spacing(1)},helperText:{color:e.palette.grey[500]},errorText:{color:e.palette.error.main},errorBorder:{border:`1px solid ${e.palette.error.main}`}})),N=({name:e,control:u,label:d,description:m,disabled:a,rules:f,error:o,helperText:s,placeholder:x})=>{const g=v(),t=y();return r(T,{name:e,control:u,defaultValue:a?"No description provided.":"",rules:f,render:({field:l})=>n("div",{"data-color-mode":g.palette.type,className:t.container,children:[n("div",{children:[d&&r(i,{variant:"subtitle2",children:d}),m&&!a&&r(i,{variant:"caption",children:m})]}),n("div",{children:[a?r(p.Markdown,{className:t.markdown,source:l.value,allowedElements:h,remarkPlugins:[c]}):r(p,{textareaProps:{placeholder:x},value:l.value,className:o&&t.errorBorder,onChange:l.onChange,previewOptions:{allowedElements:h,remarkPlugins:[c],components:{details:k?.details}},"data-testid":`markdown-editor-${e}`}),(s||o)&&!a&&r(i,{variant:"caption",className:o?t.errorText:t.helperText,children:o?o.message:s})]})]})})};export{N as FormMarkdownInput};
1
+ import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useTheme as v,Typography as n}from"@material-ui/core";import{makeStyles as w}from"@material-ui/core/styles";import s from"@uiw/react-md-editor";import{Controller as T}from"react-hook-form";import c from"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import{components as k}from"../SoundcheckMarkdownContent/ComponentRenders.esm.js";import{ALLOWED_HTML_TAGS as h}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const y=w(e=>({markdown:{whiteSpace:"pre-wrap",marginBottom:e.spacing(1)},container:{display:"flex",flexDirection:"column",gap:e.spacing(1)},helperText:{color:e.palette.grey[500]},errorText:{color:e.palette.error.main},errorBorder:{border:`1px solid ${e.palette.error.main}`}})),N=({name:e,control:u,label:m,description:d,disabled:a,rules:f,error:o,helperText:p,placeholder:x})=>{const g=v(),t=y();return r(T,{name:e,control:u,defaultValue:a?"No description provided.":"",rules:f,render:({field:l})=>i("div",{"data-color-mode":g.palette.type,className:t.container,children:[i("div",{children:[m&&r(n,{variant:"subtitle2",children:m}),d&&!a&&r(n,{variant:"caption",children:d})]}),i("div",{children:[a?r(s.Markdown,{className:t.markdown,source:l.value,allowedElements:h,remarkPlugins:[c]}):r(s,{textareaProps:{placeholder:x},value:l.value,className:o&&t.errorBorder,onChange:l.onChange,previewOptions:{allowedElements:h,remarkPlugins:[c],components:{details:k?.details}},"data-testid":`markdown-editor-${e}`}),(p||o)&&!a&&r(n,{variant:"caption",className:o?t.errorText:t.helperText,children:o?o.message:p})]})]})})};export{N as FormMarkdownInput};
2
2
  //# sourceMappingURL=FormMarkdownInput.esm.js.map
@@ -1,4 +1,4 @@
1
- import{jsx as m}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core";import{dump as a}from"js-yaml";import{useMemo as p}from"react";import{SoundcheckMarkdownContent as i}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";const d=n(o=>({markdownBox:{padding:0,margin:0,fontSize:o.typography.body2.fontSize,"& pre":{margin:0}},preBox:{padding:o.spacing(1),fontSize:o.typography.body2.fontSize,margin:0,background:o.palette.background.paper}})),s=({data:o,dataType:r="json"})=>{const e=d(),t=p(()=>r==="json"?JSON.stringify(o,null,2):r==="yaml"?a(o,{noRefs:!0}):"",[o,r]);return t?.length&&t.length>15e4?m("pre",{className:e.preBox,children:t}):m(i,{className:e.markdownBox,content:`\`\`\`${r}
1
+ import{jsx as m}from"react/jsx-runtime";import{makeStyles as p}from"@material-ui/core";import{dump as a}from"js-yaml";import{useMemo as n}from"react";import{SoundcheckMarkdownContentDeprecated as i}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";const d=p(o=>({markdownBox:{padding:0,margin:0,fontSize:o.typography.body2.fontSize,"& pre":{margin:0}},preBox:{padding:o.spacing(1),fontSize:o.typography.body2.fontSize,margin:0,background:o.palette.background.paper}})),s=({data:o,dataType:r="json"})=>{const e=d(),t=n(()=>r==="json"?JSON.stringify(o,null,2):r==="yaml"?a(o,{noRefs:!0}):"",[o,r]);return t?.length&&t.length>15e4?m("pre",{className:e.preBox,children:t}):m(i,{className:e.markdownBox,content:`\`\`\`${r}
2
2
  ${t}
3
3
  \`\`\``})};export{s as FormattedPreview};
4
4
  //# sourceMappingURL=FormattedPreview.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e,Fragment as v}from"react/jsx-runtime";import{useEntityPresentation as R,EntityDisplayName as w}from"@backstage/plugin-catalog-react";import{Box as l,Typography as o}from"@material-ui/core";import{isEmpty as d}from"lodash";import{useMemo as c}from"react";import{useGroupHierarchy as B}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as O}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as T}from"../LoadingIndicator/LoadingIndicator.esm.js";import{getAllOwnedEntityCount as x}from"./getAllOwnedEntityCount.esm.js";import{GroupHierarchyChip as C}from"./GroupHierarchyChip.esm.js";const S=({filteredGroupOptions:t,setSelectedGroup:s,selectedGroupRef:m})=>{const a=c(()=>t.map(n=>n.ref),[t]),h=c(()=>t.find(n=>n.ref===m)?.ref||null,[t,m]);return r(v,{children:[!d(t)&&t.length>=20&&e(l,{marginBottom:2,children:e(O,{options:a,onChange:s,value:h,autoSelect:!1,getOptionLabel:n=>t.find(f=>f.ref===n)?.name??n,placeholder:"Search groups"})}),!d(t)&&t.length<20&&t.map(({ref:n})=>e(C,{setSelectedGroup:s,groupEntityRef:n},n))]})},H=({groupEntityRef:t,selectedGroup:s,setSelectedGroup:m,groupOptions:a})=>{const{primaryTitle:h,secondaryTitle:n}=R(t),{isLoading:f,data:b}=B(t,{includeParent:!0}),i=b?.[t],y=c(()=>x(i),[i]),g=c(()=>{const u=i?.children??{};return Object.values(u).map(p=>({ref:p.entityRef,type:p.type}))},[i?.children]),G=c(()=>{if(d(g))return[];const u=new Set(g.map(p=>p.ref));return a.filter(p=>u.has(p.ref))},[g,a]),E=c(()=>{if(d(i?.parents))return[];const u=new Set(i?.parents??[]);return a.filter(p=>u.has(p.ref))},[i?.parents,a]);return r(l,{children:[r(l,{marginBottom:1,children:[e(o,{variant:"h6",children:e(w,{entityRef:t})}),e(o,{variant:"caption",children:n})]}),f&&r(l,{textAlign:"center",marginTop:2,marginBottom:2,children:[e(T,{}),e(l,{marginTop:2,children:e(o,{variant:"caption",children:"Loading Group Hierarchy"})})]}),i?.ownedEntityRefs&&r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Entity Ownership"}),r(o,{variant:"body2",children:[r("strong",{children:[h," directly owns:"]})," ",i.ownedEntityRefs.length," ",i.ownedEntityRefs.length===0?"Entity":"Entities"]}),r(o,{variant:"body2",children:[r("strong",{children:[h," and it's subgroups own:"]})," ",y," ",y===0?"Entity":"Entities"]})]}),!f&&r(v,{children:[r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Select Child Group"}),d(G)&&e(o,{variant:"body2",children:"No child groups"}),e(S,{filteredGroupOptions:G,setSelectedGroup:m,selectedGroupRef:s})]}),r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Select Parent Group"}),d(E)&&e(o,{variant:"body2",children:"No parent groups"}),e(S,{filteredGroupOptions:E,setSelectedGroup:m,selectedGroupRef:s})]})]})]})};export{H as GroupHierarchyGroupInfo};
1
+ import{jsxs as r,jsx as e,Fragment as v}from"react/jsx-runtime";import{useEntityPresentation as R,EntityDisplayName as w}from"@backstage/plugin-catalog-react";import{Box as l,Typography as o}from"@material-ui/core";import{isEmpty as d}from"lodash";import{useMemo as c}from"react";import{useGroupHierarchy as B}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as O}from"../../utils/getAllOwnedEntityCount.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as T}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as x}from"../LoadingIndicator/LoadingIndicator.esm.js";import{GroupHierarchyChip as C}from"./GroupHierarchyChip.esm.js";const S=({filteredGroupOptions:t,setSelectedGroup:s,selectedGroupRef:m})=>{const a=c(()=>t.map(n=>n.ref),[t]),h=c(()=>t.find(n=>n.ref===m)?.ref||null,[t,m]);return r(v,{children:[!d(t)&&t.length>=20&&e(l,{marginBottom:2,children:e(T,{options:a,onChange:s,value:h,autoSelect:!1,getOptionLabel:n=>t.find(f=>f.ref===n)?.name??n,placeholder:"Search groups"})}),!d(t)&&t.length<20&&t.map(({ref:n})=>e(C,{setSelectedGroup:s,groupEntityRef:n},n))]})},H=({groupEntityRef:t,selectedGroup:s,setSelectedGroup:m,groupOptions:a})=>{const{primaryTitle:h,secondaryTitle:n}=R(t),{isLoading:f,data:b}=B(t,{includeParent:!0}),i=b?.[t],y=c(()=>O(i),[i]),g=c(()=>{const u=i?.children??{};return Object.values(u).map(p=>({ref:p.entityRef,type:p.type}))},[i?.children]),G=c(()=>{if(d(g))return[];const u=new Set(g.map(p=>p.ref));return a.filter(p=>u.has(p.ref))},[g,a]),E=c(()=>{if(d(i?.parents))return[];const u=new Set(i?.parents??[]);return a.filter(p=>u.has(p.ref))},[i?.parents,a]);return r(l,{children:[r(l,{marginBottom:1,children:[e(o,{variant:"h6",children:e(w,{entityRef:t})}),e(o,{variant:"caption",children:n})]}),f&&r(l,{textAlign:"center",marginTop:2,marginBottom:2,children:[e(x,{}),e(l,{marginTop:2,children:e(o,{variant:"caption",children:"Loading Group Hierarchy"})})]}),i?.ownedEntityRefs&&r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Entity Ownership"}),r(o,{variant:"body2",children:[r("strong",{children:[h," directly owns:"]})," ",i.ownedEntityRefs.length," ",i.ownedEntityRefs.length===0?"Entity":"Entities"]}),r(o,{variant:"body2",children:[r("strong",{children:[h," and it's subgroups own:"]})," ",y," ",y===0?"Entity":"Entities"]})]}),!f&&r(v,{children:[r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Select Child Group"}),d(G)&&e(o,{variant:"body2",children:"No child groups"}),e(S,{filteredGroupOptions:G,setSelectedGroup:m,selectedGroupRef:s})]}),r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Select Parent Group"}),d(E)&&e(o,{variant:"body2",children:"No parent groups"}),e(S,{filteredGroupOptions:E,setSelectedGroup:m,selectedGroupRef:s})]})]})]})};export{H as GroupHierarchyGroupInfo};
2
2
  //# sourceMappingURL=GroupHierarchyGroupInfo.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as h,Fragment as y,jsx as r}from"react/jsx-runtime";import{useApi as G,configApiRef as S}from"@backstage/core-plugin-api";import{makeStyles as g,Button as R}from"@material-ui/core";import k from"@material-ui/icons/Menu";import{RiFilter3Line as A}from"@remixicon/react";import{useState as p,useCallback as n}from"react";import{GroupHierarchySelectorDialog as v}from"./GroupHierarchySelectorDialog.esm.js";import{usePreviousSelectedGroups as x}from"./usePreviousSelectedGroups.esm.js";const B=g({filterButton:{width:18}}),C=({buttonProps:s,currentSelectedGroup:o,applyGroup:i})=>{const u=B(),[c,t]=p(!1),[e,l]=p(""),{groupEntityRefs:a}=x(),m=G(S).getOptionalStringArray("soundcheck.flags")?.includes("portal")??!1,f=n(()=>{o&&l(o),t(!0)},[o]),d=n(()=>{i(e),t(!1)},[i,e]);return h(y,{children:[r(R,{onClick:f,color:"primary",variant:"outlined",...s,size:"small",startIcon:m?r(A,{className:u.filterButton}):r(k,{}),children:"Group"}),r(v,{open:c,handleClose:()=>t(!1),handleApply:d,previousGroupEntityRefs:a,selectedGroup:e,setSelectedGroup:l})]})};export{C as GroupHierarchySelector};
1
+ import{jsxs as m,Fragment as d,jsx as t}from"react/jsx-runtime";import{Button as G}from"@backstage/ui";import{RiFilter3Line as f}from"@remixicon/react";import{useState as l,useCallback as s}from"react";import{usePreviousSelectedGroups as y}from"../GroupSelectorBUI/usePreviousSelectedGroups.esm.js";import{GroupHierarchySelectorDialog as S}from"./GroupHierarchySelectorDialog.esm.js";const h=({currentSelectedGroup:r,applyGroup:i})=>{const[n,e]=l(!1),[o,p]=l(""),{groupEntityRefs:u}=y(),c=s(()=>{r&&p(r),e(!0)},[r]),a=s(()=>{i(o),e(!1)},[i,o]);return m(d,{children:[t(G,{variant:"secondary",size:"small",iconStart:t(f,{}),onClick:c,children:"Group"}),t(S,{open:n,handleClose:()=>e(!1),handleApply:a,previousGroupEntityRefs:u,selectedGroup:o,setSelectedGroup:p})]})};export{h as GroupHierarchySelector};
2
2
  //# sourceMappingURL=GroupHierarchySelector.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r,jsxs as u}from"react/jsx-runtime";import{Box as i,Flex as y}from"@backstage/ui";import{makeStyles as g}from"@material-ui/core";import{sortBy as b,uniqBy as x,isEmpty as v}from"lodash";import{useMemo as s,useCallback as B}from"react";import{Virtualizer as k,ListLayout as L,ListBox as G,ListBoxItem as S}from"react-aria-components";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as w}from"../../hooks/useSearchName.esm.js";import"react-use/lib/useLocalStorage";import{useGroupOptions as N}from"../../hooks/groups/useGroupOptions.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as $}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as C}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const A=g(()=>({empty:{width:"36rem",margin:"var(--bui-space-4) 0"},listArea:{height:"16rem",width:"36rem",overflow:"auto",marginTop:"var(--bui-space-2)"},listBox:{padding:"var(--bui-space-2)","&:hover":{cursor:"pointer",backgroundColor:"var(--bui-bg-tint-hover)"}},listBoxSelected:{backgroundColor:"var(--bui-bg-tint)"}})),j=({searchTerm:d,selectRef:l,selectedRef:t})=>{const o=A(),{options:m,isLoading:a}=N(),p=s(()=>m.filter(e=>e.key==="My Groups").map(e=>({...e,key:`${e.ref}${e.ref===t?"-selectedGroup":""}`,id:e.ref})),[m,t]),n=s(()=>b(m.filter(e=>e.key==="All Groups").map(e=>({...e,key:`${e.ref}${e.ref===t?"-selectedGroup":""}`,id:e.ref})),e=>e.name.toLowerCase()),[m,t]),f=s(()=>x([...p,...n],"id"),[n,p]),c=w({items:f,searchTerm:d}),h=B(e=>{l(e.match(/-selectedGroup$/)?"":e)},[l]);return r(i,{children:r(i,{children:u(k,{layoutOptions:{padding:0,gap:2},layout:L,children:[a&&r(i,{className:o.listArea,children:r(C,{rowHeight:18,rowCount:8})}),v(c)&&!a?r(i,{className:o.empty,children:r($,{title:"No groups found.",body:"No groups found for the current selection."})}):r(G,{"aria-label":"Group List",items:c,className:o.listArea,selectionMode:"single",selectedKeys:t?[t]:void 0,onSelectionChange:e=>h(Object.values(e)[0]),children:e=>r(S,{textValue:e.name,className:`${o.listBox} ${e.ref===t?o.listBoxSelected:""}`,children:u(y,{justify:"between",children:[r(i,{children:e.name}),r(i,{children:e.type})]})})})]})})})};export{j as GroupSelectList};
2
+ //# sourceMappingURL=GroupSelectList.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as a,jsx as e,Fragment as c}from"react/jsx-runtime";import{useApi as g}from"@backstage/core-plugin-api";import{entityPresentationApiRef as x}from"@backstage/plugin-catalog-react";import{Flex as h,Card as y,Text as s,TagGroup as R,Box as v,Button as p}from"@backstage/ui";import{makeStyles as S}from"@material-ui/core";import{RiUserLine as d}from"@remixicon/react";import{isEmpty as f}from"lodash";import{ListBox as b,ListBoxItem as C}from"react-aria-components";import{GroupTag as T}from"./GroupTag.esm.js";const u=S(()=>({historyArea:{width:"36rem",marginTop:"var(--bui-space-3)"},historyCard:{padding:"var(--bui-space-3)",maxHeight:"12rem",overflow:"auto"},historyItem:{marginBottom:"var(--bui-space-0_5)",display:"flex",alignItems:"center"}})),k=({groupRef:n,selectRef:i,parentRef:o,childRef:t})=>{const r=u(),l=g(x),m=l.forEntity(n);return a(C,{textValue:m.snapshot.primaryTitle,className:r.historyItem,children:[e(p,{iconStart:e(d,{}),variant:"tertiary",onClick:()=>i(n),style:{paddingLeft:0},children:m.snapshot.primaryTitle}),o&&a(c,{children:[e(s,{children:"child of"})," ",e(p,{iconStart:e(d,{}),variant:"tertiary",onClick:()=>i(o),children:l.forEntity(o).snapshot.primaryTitle})]}),t&&a(c,{children:[e(s,{children:"parent of"})," ",e(p,{iconStart:e(d,{}),variant:"tertiary",onClick:()=>i(t),children:l.forEntity(t).snapshot.primaryTitle})]})]})},A=({previouslySelectedGroups:n,history:i,selectRef:o})=>{const t=u();return a(h,{direction:"column",gap:"3",className:t.historyArea,children:[!f(n)&&a(y,{className:t.historyCard,children:[e(s,{weight:"bold",children:"Previously Selected"}),e(R,{"aria-label":"Previously Selected Groups",selectionMode:"single",children:n.filter(r=>!!r).map(r=>e(T,{groupRef:r,handleClick:o},r))})]}),e(y,{className:t.historyCard,children:e(h,{direction:"column",gap:"1",children:f(i)?e(v,{style:{textAlign:"center",padding:"3rem 0"},children:e(s,{variant:"body-large",children:"No group selection history"})}):a(c,{children:[e(s,{weight:"bold",children:"History"}),e(b,{"aria-label":"Selection History",children:i.map((r,l)=>e(k,{selectRef:o,groupRef:r.ref,parentRef:r.parent,childRef:r.child},`${r.ref}-${l}`))})]})})})]})};export{A as GroupSelectionHistory};
2
+ //# sourceMappingURL=GroupSelectionHistory.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as g,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-surface-1)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),y=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(g,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(g,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(g,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(y)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:y.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(g,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(g,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:y,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),y(s,x,T)},[y]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups"}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
2
+ //# sourceMappingURL=GroupSelectorBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{useEntityPresentation as e}from"@backstage/plugin-catalog-react";import{Tag as m}from"@backstage/ui";import{RiUserLine as n}from"@remixicon/react";const p=({groupRef:r,handleClick:i})=>{const{primaryTitle:t}=e(r);return o(m,{icon:o(n,{}),size:"medium",onClick:()=>i(r),children:t})};export{p as GroupTag};
2
+ //# sourceMappingURL=GroupTag.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useCallback as p}from"react";import u from"react-use/lib/useLocalStorage";const f=50,h=l=>{const[r,s]=u("soundcheck-group-selection-history",[]);r?.some(o=>!o.ref)&&s(r.filter(o=>!!o.ref));const i=p((o,c,n)=>{if(!o)return;const t=r??[],e=t[0];e&&e.ref===o&&e.child===c&&e.parent===n||(t.unshift({ref:o,parent:n,child:c}),t.length>f&&t.pop(),s(t))},[r,s]);return{history:r,addGroupHistory:i}};export{h as useGroupHistory};
2
+ //# sourceMappingURL=useGroupHistory.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useCallback as c}from"react";import p from"react-use/lib/useLocalStorage";const u=10,i=l=>{const[s,t]=p("soundcheck-previously-selected-groups",[]);s?.some(o=>!o)&&t(s.filter(o=>!!o));const n=c(o=>{const e=s??[],r=e.indexOf(o);r>-1&&e.splice(r,1),e.unshift(o),e.length>u&&e.pop(),t(e)},[s,t]);return{groupEntityRefs:s,addGroup:n}};export{i as usePreviousSelectedGroups};
2
+ //# sourceMappingURL=usePreviousSelectedGroups.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as d,Fragment as re}from"react/jsx-runtime";import{useApi as O,useRouteRef as ae,featureFlagsApiRef as Re,configApiRef as Te}from"@backstage/core-plugin-api";import{entityPresentationApiRef as we}from"@backstage/plugin-catalog-react";import{useTheme as ze,Button as Ie,Box as a,Select as oe,MenuItem as v,CircularProgress as Le,Typography as le,Tabs as Pe,Tab as ce}from"@material-ui/core";import{makeStyles as Be}from"@material-ui/core/styles";import De from"@material-ui/icons/ViewList";import{useState as w,useMemo as D,useCallback as W,useEffect as z,useRef as se}from"react";import{useSearchParams as We,useNavigate as He}from"react-router-dom";import $e from"react-use/lib/useLocalStorage";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as Ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGroupOptions as Ee}from"../../hooks/groups/useGroupOptions.esm.js";import{useHierarchicalTrackStatus as Ge}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as Ue}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as je}from"../../hooks/useLCPReporting.esm.js";import{trackDetailsRouteRef as Fe,techInsightsPageRouteRef as Ve}from"../../routes.esm.js";import{getColorInterpolators as Me}from"../../utils/colors.esm.js";import{EmptyState as Oe}from"../EmptyState/EmptyState.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ze}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as qe}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TrackEntitiesTable as Je}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackSelection as Ke}from"../TrackSelection/TrackSelection.esm.js";import{ColorLegend as Qe}from"./ColorLegend.esm.js";import{HierarchyTable as Xe}from"./HierarchyTable.esm.js";import{LowestPerformingTeams as Ye}from"./LowestPerformingTeams.esm.js";import{SelectedNodeSidebar as _e}from"./SelectedNodeSidebar.esm.js";import et from"./TopPerformingTeams.esm.js";import{NivoCirclePacking as de}from"./visualizations/NivoCirclePacking.esm.js";import"./visualizations/NivoHeatmap.esm.js";import{NivoIcicle as tt}from"./visualizations/NivoIcicle.esm.js";import{NivoSunburst as it}from"./visualizations/NivoSunburst.esm.js";import{NivoTreemap as nt}from"./visualizations/NivoTreemap.esm.js";import{VisualizationBreadcrumb as rt}from"./visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as me}from"./visualizations/hierarchyToNivo.esm.js";const ue=Be(i=>({root:{display:"flex",flexDirection:"column",height:"100%",padding:i.spacing(2,4)},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0},controlsContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:i.spacing(2)},leftControls:{display:"flex",gap:i.spacing(1.5),alignItems:"center"},rightControls:{display:"flex",gap:i.spacing(2),alignItems:"center"},trackSelect:{minWidth:200},visualizationSelect:{minWidth:120},colorSchemeSelect:{minWidth:80},visualizationContainer:{flex:1,display:"flex",flexDirection:"column",gap:i.spacing(.5),width:"100%"},visualizationHeader:{display:"flex",justifyContent:"flex-end",alignItems:"center",marginBottom:i.spacing(2)},visualizationBox:{flex:1,minHeight:500},visualizationWrapper:{display:"flex",flexDirection:"row",height:"calc(100% - 56px)"},colorLegendContainer:{marginLeft:i.spacing(2),display:"flex",alignItems:"center"},colorLegendWrapper:{width:300},visualizationContent:{flex:1},loadingContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",minHeight:500,backgroundColor:i.palette.background.default,borderRadius:i.shape.borderRadius},loadingSpinner:{marginBottom:i.spacing(2)},loadingText:{color:i.palette.text.secondary,fontSize:"1.1rem",fontWeight:500,textAlign:"center"},loadingSubtext:{color:i.palette.text.secondary,fontSize:"0.875rem",opacity:.8,textAlign:"center",marginTop:i.spacing(1)},summaryContainer:{display:"flex",flexDirection:"row",width:"100%",minHeight:300,padding:24},summaryBox:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},summaryBoxLeft:{marginRight:i.spacing(1)},summaryBoxRight:{marginLeft:i.spacing(1)},entitiesContainer:{padding:24},tabsContainer:{width:"100%",marginTop:8},layoutContainer:{display:"flex",height:"100%"},mainLayout:{flex:3,display:"flex",flexDirection:"column",minWidth:0},mainLayoutTable:{flex:1,display:"flex",flexDirection:"column",minWidth:0},sidebarCollapsed:{width:0},sidebarTransition:{transition:"width 0.25s",height:"100%"},sidebarContainer:{height:"100%",marginLeft:24,borderLeft:`1px solid ${i.palette.divider}`,paddingLeft:24},breadcrumbContainer:{flex:1,marginRight:16},input:{backgroundColor:i.palette.background.paper}}));function he({interpolator:i,width:b=100,height:p=16,steps:o=40,style:l={}}){const g=`linear-gradient(to right, ${Array.from({length:o},(c,I)=>{const r=I/(o-1);return i(r)}).join(",")})`;return t(a,{style:{width:b,height:p,background:g,borderRadius:4,...l}})}function pe(i){const{children:b,value:p,index:o,...l}=i,g=ue();return t("div",{role:"tabpanel",hidden:p!==o,id:`tabpanel-${o}`,"aria-labelledby":`tab-${o}`,className:g.mainContent,...l,children:p===o&&b})}const at=()=>{const i=ue(),b=ze(),p=O(we),[o,l]=We(),g=o.get("track")||"",[c,I]=w(g),r=o.get("group"),H=o.get("node"),[Z,$]=w(null),[A,ge]=w(0),E=He(),fe=ae(Fe),q=ae(Ve),[ye,x]=w(null),[u,k]=w(null),J=O(Re),K=O(Te);je({routeName:"soundcheck-tech-insights-track",additionalAttributes:{trackId:c,group:r||"",visualization:o.get("visualization")||"table"}});const xe=D(()=>t(Ie,{variant:"contained",color:"primary",startIcon:t(De,{}),onClick:()=>{E(q())},children:"All Tracks"}),[q,E]);Ze({title:"Tech Insights",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tech-insights",sectionRight:xe});const{data:Ce}=Ae({}),s=Ce?.edges.find(e=>e.node.id===c)?.node,{data:S,isLoading:Q}=Ue(r||void 0,{enabled:!!r&&!!c&&!!s,ownedEntitiesFilter:s?.filter??void 0}),{data:f}=Ge({trackId:c,groupRef:r||"",skip:!c||!r}),ve=D(()=>s?.levels?s.levels.flatMap(e=>e.checks.map(n=>n.id)):[],[s]),C=o.get("visualization")||"table",X=o.get("colors")||"default",G=W((e,n)=>{if(e.entityRef===n)return e;if(e.children)for(const m of e.children){const ne=G(m,n);if(ne)return ne}return null},[]);z(()=>{if(H&&S&&r&&f&&s){const e=S[r];if(e){const n=me(e,f||null,()=>"#ccc",p,void 0);if(n){const m=G(n,H);m&&(k(m),x(m))}}}},[H,S,r,f,s,G,p]);const U=W(e=>{k(e),x(e);const n=new URLSearchParams(o.toString());e&&e.entityRef!==r?n.set("node",e.entityRef):n.delete("node"),l(n,{replace:!0})},[o,l,r]),{options:h,isLoading:N}=Ee(),[j,L]=$e("soundcheck.overview.groupRef",null),R=r,F=K.getOptionalString("soundcheck.overview.defaultSelectedGroupType"),P=D(()=>{if(!N&&h.length){if(R||j){const e=R??j;return h.find(n=>n.ref===e)??h[0]}else if(F)return h.find(e=>e.type===F)??h[0];return h[0]}return null},[F,N,h,R,j]);z(()=>{if(!N&&h.length&&!R&&P){const e=new URLSearchParams(o.toString());e.set("group",P.ref),l(e,{replace:!0}),L(P.ref)}},[N,h,R,P,o,l,L]);const Y=W(e=>{I(e);const n=new URLSearchParams(o.toString());n.set("track",e),r&&n.delete("group"),n.delete("node"),l(n),k(null),x(null)},[o,r,l]),_=se(null),T=W(()=>{k(null),x(null),$(null);const e=new URLSearchParams(o.toString());e.delete("node"),l(e,{replace:!0})},[o,l]),V=se(null);z(()=>{V.current&&V.current!==C&&T(),V.current=C},[C,T]),z(()=>{r&&r!==_.current&&T(),_.current=r},[r,T]),z(()=>{c!==g&&I(g)},[g]);const be=e=>{const n=e.target.value;if(n!==null){const m=new URLSearchParams(o.toString());m.set("visualization",n),l(m),$(null)}},ke=e=>{const n=new URLSearchParams(o.toString());n.set("colors",e.target.value),l(n)},Se=(e,n)=>{ge(n)},B=e=>{if(!c)return;const n=fe({trackId:c});E(`${n}?owners=${encodeURIComponent(e)}`)},M=Me(b),ee=M.find(e=>e.value===X)?.interpolator??(e=>"#ccc"),y=e=>ee(e/100),Ne=()=>{if(!r||!c||!s)return null;const e={trackId:c,groupRef:r,track:s,hierarchyData:S,trackStatus:f,getColor:y,onZoomChange:$,onNodeHover:n=>x(n),hoveredNode:ye,selectedNode:u,onNodeSelect:U};switch(C){case"treemap":return t(nt,{...e});case"icicle":return t(tt,{...e});case"sunburst":return t(it,{...e});case"circlepack":return t(de,{...e});case"table":{const n=S?.[r];if(!n)return null;const m=me(n,f||null,y,p,void 0);return t(Xe,{hierarchyData:m??null,getColor:y,selectedNode:u,onNodeSelect:U,trackStatus:f,onTeamClick:B})}default:return t(de,{...e})}},te=(!J.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-tech-insights-visualizations")||J.isActive("soundcheck-enable-tech-insights-visualizations"))&&K.getOptionalBoolean("soundcheck.techInsights.showExperimentalVisualizations"),ie=D(()=>d(re,{children:[t(qe,{onChange:e=>{k(null),x(null),L(e)}}),t(a,{minWidth:320,children:t(Ke,{selectedTrackId:c,selectTrack:Y,selectedGroupRef:r??""})})]}),[Y,r,c,L]);return!(N||Q)&&(!s||!r)?t(a,{className:i.root,children:t(Oe,{title:"No Group or Track Selected",description:"Select a group and track in order to view insights.",action:t(a,{display:"flex",flexDirection:"column",gridGap:12,children:ie})})}):t(a,{className:i.root,children:d(a,{className:i.layoutContainer,children:[t(a,{className:i.mainLayout,children:d(a,{className:i.mainContent,children:[d(a,{className:i.controlsContainer,children:[t(a,{className:i.leftControls,children:ie}),te&&d(a,{className:i.rightControls,children:[t(a,{className:i.visualizationSelect,children:d(oe,{className:i.input,value:C,onChange:be,displayEmpty:!0,fullWidth:!0,"aria-label":"visualization select",margin:"dense",placeholder:"Visualization",variant:"outlined",children:[t(v,{value:"circlepack",children:"Circle Pack"}),t(v,{value:"icicle",children:"Icicle"}),t(v,{value:"sunburst",children:"Sunburst"}),t(v,{value:"treemap",children:"Treemap"}),t(v,{value:"table",children:"Table"})]})}),t(a,{className:i.colorSchemeSelect,children:t(oe,{className:i.input,value:X,fullWidth:!0,"aria-label":"color schema",onChange:ke,margin:"dense",placeholder:"Color Scheme",variant:"outlined",renderValue:e=>{const n=M.find(m=>m.value===e)?.interpolator;return t(a,{display:"flex",alignItems:"center",pr:3,children:typeof n=="function"&&t(he,{interpolator:n,width:90,height:20})})},children:M.map(e=>t(v,{value:e.value,children:t(a,{display:"flex",alignItems:"center",children:e.interpolator&&t(he,{interpolator:e.interpolator,width:90,height:20})})},e.value))})})]})]}),c&&r&&d(re,{children:[d(a,{className:i.visualizationContainer,minHeight:C!=="table"?400:void 0,children:[d(a,{mb:.5,display:"flex",alignItems:"center",children:[t(a,{className:i.breadcrumbContainer,children:t(rt,{node:u,onNodeClick:e=>{U(e)}})}),te&&t(a,{className:i.colorLegendWrapper,children:t(Qe,{interpolator:ee,orientation:"horizontal",height:24,width:"100%",markerValue:u?u.passPercentage:void 0})})]}),t(a,{className:i.visualizationContent,children:Q?d(a,{className:i.loadingContainer,children:[t(Le,{className:i.loadingSpinner,size:48}),t(le,{className:i.loadingText,children:"Loading organization hierarchy..."}),t(le,{className:i.loadingSubtext,children:"This may take a few moments while we gather data about your organization."})]}):Ne()})]}),d(a,{className:i.tabsContainer,children:[d(Pe,{value:A,onChange:Se,indicatorColor:"primary",textColor:"primary",children:[t(ce,{label:"Summary"}),t(ce,{label:"Entities"})]}),t(pe,{value:A,index:0,children:d(a,{className:i.summaryContainer,children:[t(a,{className:`${i.summaryBox} ${i.summaryBoxLeft}`,children:t(Ye,{trackStatus:f||null,getColor:y,onTeamClick:B})}),t(a,{className:`${i.summaryBox} ${i.summaryBoxRight}`,children:t(et,{trackStatus:f||null,getColor:y,onTeamClick:B})})]})}),t(pe,{value:A,index:1,children:t(a,{className:i.entitiesContainer,children:s&&t(Je,{track:s,initialPageSize:10,owners:u&&u.entityRef!==r?[u.entityRef]:Z?[Z]:[r],getColor:y})})})]})]})]})}),t(a,{className:i.sidebarTransition,width:u?360:0,children:t(a,{className:i.sidebarContainer,children:u&&t(_e,{node:u,clearSelectedNode:T,checkIds:ve,track:s,getColor:y,onTeamClick:B})})})]})})};export{at as HierarchicalTechInsightsPage};
1
+ import{jsx as t,jsxs as d,Fragment as se}from"react/jsx-runtime";import{useApi as q,useRouteRef as de,featureFlagsApiRef as Be,configApiRef as Pe}from"@backstage/core-plugin-api";import{entityPresentationApiRef as De}from"@backstage/plugin-catalog-react";import{useTheme as He,Button as We,Box as o,Select as me,MenuItem as S,CircularProgress as Ae,Typography as ue,Tabs as $e,Tab as pe}from"@material-ui/core";import{makeStyles as Ee}from"@material-ui/core/styles";import Ge from"@material-ui/icons/ViewList";import{useMemo as L,useState as I,useCallback as H,useEffect as N,useRef as he}from"react";import{useSearchParams as Ue,useNavigate as je}from"react-router-dom";import Oe from"react-use/lib/useLocalStorage";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as Ve}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGroupOptions as Fe}from"../../hooks/groups/useGroupOptions.esm.js";import{useHierarchicalTrackStatus as Me}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as Ze}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as qe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ke}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Qe,techInsightsPageRouteRef as Xe}from"../../routes.esm.js";import{getColorInterpolators as Ye}from"../../utils/colors.esm.js";import{getAllOwnedEntityCount as _e}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Je,getTracksBucket as et}from"../../utils/helpers.esm.js";import{EmptyState as tt}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as it}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as rt}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TrackEntitiesTable as nt}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackSelection as at}from"../TrackSelection/TrackSelection.esm.js";import{ColorLegend as ot}from"./ColorLegend.esm.js";import{HierarchyTable as lt}from"./HierarchyTable.esm.js";import{LowestPerformingTeams as ct}from"./LowestPerformingTeams.esm.js";import{SelectedNodeSidebar as st}from"./SelectedNodeSidebar.esm.js";import dt from"./TopPerformingTeams.esm.js";import{NivoCirclePacking as ge}from"./visualizations/NivoCirclePacking.esm.js";import"./visualizations/NivoHeatmap.esm.js";import{NivoIcicle as mt}from"./visualizations/NivoIcicle.esm.js";import{NivoSunburst as ut}from"./visualizations/NivoSunburst.esm.js";import{NivoTreemap as pt}from"./visualizations/NivoTreemap.esm.js";import{VisualizationBreadcrumb as ht}from"./visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as fe}from"./visualizations/hierarchyToNivo.esm.js";const ye=Ee(n=>({root:{display:"flex",flexDirection:"column",height:"100%",padding:n.spacing(2,4)},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0},controlsContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:n.spacing(2)},leftControls:{display:"flex",gap:n.spacing(1.5),alignItems:"center"},rightControls:{display:"flex",gap:n.spacing(2),alignItems:"center"},trackSelect:{minWidth:200},visualizationSelect:{minWidth:120},colorSchemeSelect:{minWidth:80},visualizationContainer:{flex:1,display:"flex",flexDirection:"column",gap:n.spacing(.5),width:"100%"},visualizationHeader:{display:"flex",justifyContent:"flex-end",alignItems:"center",marginBottom:n.spacing(2)},visualizationBox:{flex:1,minHeight:500},visualizationWrapper:{display:"flex",flexDirection:"row",height:"calc(100% - 56px)"},colorLegendContainer:{marginLeft:n.spacing(2),display:"flex",alignItems:"center"},colorLegendWrapper:{width:300},visualizationContent:{flex:1},loadingContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",minHeight:500,backgroundColor:n.palette.background.default,borderRadius:n.shape.borderRadius},loadingSpinner:{marginBottom:n.spacing(2)},loadingText:{color:n.palette.text.secondary,fontSize:"1.1rem",fontWeight:500,textAlign:"center"},loadingSubtext:{color:n.palette.text.secondary,fontSize:"0.875rem",opacity:.8,textAlign:"center",marginTop:n.spacing(1)},summaryContainer:{display:"flex",flexDirection:"row",width:"100%",minHeight:300,padding:24},summaryBox:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},summaryBoxLeft:{marginRight:n.spacing(1)},summaryBoxRight:{marginLeft:n.spacing(1)},entitiesContainer:{padding:24},tabsContainer:{width:"100%",marginTop:8},layoutContainer:{display:"flex",height:"100%"},mainLayout:{flex:3,display:"flex",flexDirection:"column",minWidth:0},mainLayoutTable:{flex:1,display:"flex",flexDirection:"column",minWidth:0},sidebarCollapsed:{width:0},sidebarTransition:{transition:"width 0.25s",height:"100%"},sidebarContainer:{height:"100%",marginLeft:24,borderLeft:`1px solid ${n.palette.divider}`,paddingLeft:24},breadcrumbContainer:{flex:1,marginRight:16},input:{backgroundColor:n.palette.background.paper}}));function xe({interpolator:n,width:l=100,height:u=16,steps:r=40,style:C={}}){const k=`linear-gradient(to right, ${Array.from({length:r},(K,a)=>{const W=a/(r-1);return n(W)}).join(",")})`;return t(o,{style:{width:l,height:u,background:k,borderRadius:4,...C}})}function Ce(n){const{children:l,value:u,index:r,...C}=n,k=ye();return t("div",{role:"tabpanel",hidden:u!==r,id:`tabpanel-${r}`,"aria-labelledby":`tab-${r}`,className:k.mainContent,...C,children:u===r&&l})}const gt=()=>{const[n,l]=Ue(),u=n.get("track")||"",r=n.get("group"),C=L(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{trackId:u||"",group:r||""}}),[u,r]),{reportContentLoaded:k}=Ke(C),{reporter:K}=qe(C),a=ye(),W=He(),A=q(De),[c,Q]=I(u),$=n.get("node"),[X,E]=I(null),[G,ke]=I(0),U=je(),be=de(Qe),Y=de(Xe),[ve,b]=I(null),[p,T]=I(null),_=q(Be),J=q(Pe),Se=L(()=>t(We,{variant:"contained",color:"primary",startIcon:t(Ge,{}),onClick:()=>{U(Y())},children:"All Tracks"}),[Y,U]);it({title:"Tech Insights",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tech-insights",sectionRight:Se});const{data:Ne}=Ve({}),s=Ne?.edges.find(e=>e.node.id===c)?.node,{data:f,isLoading:z}=Ze(r||void 0,{enabled:!!r&&!!c&&!!s,ownedEntitiesFilter:s?.filter??void 0}),{data:g,isLoading:ee}=Me({trackId:c,groupRef:r||"",skip:!c||!r}),Te=L(()=>s?.levels?s.levels.flatMap(e=>e.checks.map(i=>i.id)):[],[s]),v=n.get("visualization")||"table",te=n.get("colors")||"default",j=H((e,i)=>{if(e.entityRef===i)return e;if(e.children)for(const m of e.children){const ce=j(m,i);if(ce)return ce}return null},[]);N(()=>{if($&&f&&r&&g&&s){const e=f[r];if(e){const i=fe(e,g||null,()=>"#ccc",A,void 0);if(i){const m=j(i,$);m&&(T(m),b(m))}}}},[$,f,r,g,s,j,A]);const O=H(e=>{T(e),b(e);const i=new URLSearchParams(n.toString());e&&e.entityRef!==r?i.set("node",e.entityRef):i.delete("node"),l(i,{replace:!0})},[n,l,r]),{options:h,isLoading:y}=Fe(),[V,B]=Oe("soundcheck.overview.groupRef",null),R=r,F=J.getOptionalString("soundcheck.overview.defaultSelectedGroupType"),P=L(()=>{if(!y&&h.length){if(R||V){const e=R??V;return h.find(i=>i.ref===e)??h[0]}else if(F)return h.find(e=>e.type===F)??h[0];return h[0]}return null},[F,y,h,R,V]);N(()=>{if(!y&&h.length&&!R&&P){const e=new URLSearchParams(n.toString());e.set("group",P.ref),l(e,{replace:!0}),B(P.ref)}},[y,h,R,P,n,l,B]);const ie=H(e=>{Q(e);const i=new URLSearchParams(n.toString());i.set("track",e),r&&i.delete("group"),i.delete("node"),l(i),T(null),b(null)},[n,r,l]),re=he(null),w=H(()=>{T(null),b(null),E(null);const e=new URLSearchParams(n.toString());e.delete("node"),l(e,{replace:!0})},[n,l]),M=he(null);N(()=>{M.current&&M.current!==v&&w(),M.current=v},[v,w]),N(()=>{r&&r!==re.current&&w(),re.current=r},[r,w]),N(()=>{c!==u&&Q(u)},[u]);const Re=e=>{const i=e.target.value;if(i!==null){const m=new URLSearchParams(n.toString());m.set("visualization",i),l(m),E(null)}},we=e=>{const i=new URLSearchParams(n.toString());i.set("colors",e.target.value),l(i)},Le=(e,i)=>{ke(i)},D=e=>{if(!c)return;const i=be({trackId:c});U(`${i}?owners=${encodeURIComponent(e)}`)},Z=Ye(W),ne=Z.find(e=>e.value===te)?.interpolator??(e=>"#ccc"),x=e=>ne(e/100),Ie=()=>{if(!r||!c||!s)return null;const e={trackId:c,groupRef:r,track:s,hierarchyData:f,trackStatus:g,getColor:x,onZoomChange:E,onNodeHover:i=>b(i),hoveredNode:ve,selectedNode:p,onNodeSelect:O};switch(v){case"treemap":return t(pt,{...e});case"icicle":return t(mt,{...e});case"sunburst":return t(ut,{...e});case"circlepack":return t(ge,{...e});case"table":{const i=f?.[r];if(!i)return null;const m=fe(i,g||null,x,A,void 0);return t(lt,{hierarchyData:m??null,getColor:x,selectedNode:p,onNodeSelect:O,trackStatus:g,onTeamClick:D})}default:return t(ge,{...e})}},ae=(!_.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-tech-insights-visualizations")||_.isActive("soundcheck-enable-tech-insights-visualizations"))&&J.getOptionalBoolean("soundcheck.techInsights.showExperimentalVisualizations"),oe=L(()=>d(se,{children:[t(rt,{onChange:e=>{T(null),b(null),B(e)}}),t(o,{minWidth:320,children:t(at,{selectedTrackId:c,selectTrack:ie,selectedGroupRef:r??""})})]}),[ie,r,c,B]),ze=y||z,le=K?.getLCPValue();return N(()=>{if(!y&&!z&&!ee){const e=r?_e(f?.[r]):0,i=c?1:0;k({lcp:le,numberOfEntities:e,entitiesBucket:Je(e),numberOfTracks:i,tracksBucket:et(i)})}},[y,z,ee,f,r,c,k,le]),!ze&&(!s||!r)?t(o,{className:a.root,children:t(tt,{title:"No Group or Track Selected",description:"Select a group and track in order to view insights.",action:t(o,{display:"flex",flexDirection:"column",gridGap:12,children:oe})})}):t(o,{className:a.root,children:d(o,{className:a.layoutContainer,children:[t(o,{className:a.mainLayout,children:d(o,{className:a.mainContent,children:[d(o,{className:a.controlsContainer,children:[t(o,{className:a.leftControls,children:oe}),ae&&d(o,{className:a.rightControls,children:[t(o,{className:a.visualizationSelect,children:d(me,{className:a.input,value:v,onChange:Re,displayEmpty:!0,fullWidth:!0,"aria-label":"visualization select",margin:"dense",placeholder:"Visualization",variant:"outlined",children:[t(S,{value:"circlepack",children:"Circle Pack"}),t(S,{value:"icicle",children:"Icicle"}),t(S,{value:"sunburst",children:"Sunburst"}),t(S,{value:"treemap",children:"Treemap"}),t(S,{value:"table",children:"Table"})]})}),t(o,{className:a.colorSchemeSelect,children:t(me,{className:a.input,value:te,fullWidth:!0,"aria-label":"color schema",onChange:we,margin:"dense",placeholder:"Color Scheme",variant:"outlined",renderValue:e=>{const i=Z.find(m=>m.value===e)?.interpolator;return t(o,{display:"flex",alignItems:"center",pr:3,children:typeof i=="function"&&t(xe,{interpolator:i,width:90,height:20})})},children:Z.map(e=>t(S,{value:e.value,children:t(o,{display:"flex",alignItems:"center",children:e.interpolator&&t(xe,{interpolator:e.interpolator,width:90,height:20})})},e.value))})})]})]}),c&&r&&d(se,{children:[d(o,{className:a.visualizationContainer,minHeight:v!=="table"?400:void 0,children:[d(o,{mb:.5,display:"flex",alignItems:"center",children:[t(o,{className:a.breadcrumbContainer,children:t(ht,{node:p,onNodeClick:e=>{O(e)}})}),ae&&t(o,{className:a.colorLegendWrapper,children:t(ot,{interpolator:ne,orientation:"horizontal",height:24,width:"100%",markerValue:p?p.passPercentage:void 0})})]}),t(o,{className:a.visualizationContent,children:z?d(o,{className:a.loadingContainer,children:[t(Ae,{className:a.loadingSpinner,size:48}),t(ue,{className:a.loadingText,children:"Loading organization hierarchy..."}),t(ue,{className:a.loadingSubtext,children:"This may take a few moments while we gather data about your organization."})]}):Ie()})]}),d(o,{className:a.tabsContainer,children:[d($e,{value:G,onChange:Le,indicatorColor:"primary",textColor:"primary",children:[t(pe,{label:"Summary"}),t(pe,{label:"Entities"})]}),t(Ce,{value:G,index:0,children:d(o,{className:a.summaryContainer,children:[t(o,{className:`${a.summaryBox} ${a.summaryBoxLeft}`,children:t(ct,{trackStatus:g||null,getColor:x,onTeamClick:D})}),t(o,{className:`${a.summaryBox} ${a.summaryBoxRight}`,children:t(dt,{trackStatus:g||null,getColor:x,onTeamClick:D})})]})}),t(Ce,{value:G,index:1,children:t(o,{className:a.entitiesContainer,children:s&&t(nt,{track:s,initialPageSize:10,owners:p&&p.entityRef!==r?[p.entityRef]:X?[X]:[r],getColor:x})})})]})]})]})}),t(o,{className:a.sidebarTransition,width:p?360:0,children:t(o,{className:a.sidebarContainer,children:p&&t(st,{node:p,clearSelectedNode:w,checkIds:Te,track:s,getColor:x,onTeamClick:D})})})]})})};export{gt as HierarchicalTechInsightsPage};
2
2
  //# sourceMappingURL=HierarchicalTechInsightsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as f,jsx as t}from"react/jsx-runtime";import{useApi as q}from"@backstage/core-plugin-api";import{entityPresentationApiRef as G}from"@backstage/plugin-catalog-react";import{makeStyles as J,Typography as R,TableContainer as K,Paper as Q,Table as X,TableHead as Y,TableRow as E,TableCell as m,TableSortLabel as w,TableBody as Z,Box as k,Link as ee,TablePagination as te}from"@material-ui/core";import ne from"@material-ui/icons/ArrowDownward";import ae from"@material-ui/icons/ArrowUpward";import{useState as C,useEffect as re,useMemo as I}from"react";import{useSearchParams as ie}from"react-router-dom";import{ColorChip as oe}from"../ColorChip/ColorChip.esm.js";import{TeamStatusBar as le}from"../TeamStatusBar/TeamStatusBar.esm.js";const se=J(n=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},selectedRow:{backgroundColor:n.palette.action.hover},table:{"& tbody tr":{cursor:"pointer","&:hover":{backgroundColor:n.palette.action.hover}},"& tbody tr.selected":{backgroundColor:n.palette.action.selected,"&:hover":{backgroundColor:n.palette.action.selected}}},headerCell:{cursor:"pointer"},headerContent:{display:"flex",alignItems:"center"},sortIconContainer:{width:"24px",display:"flex",justifyContent:"center"},sortIcon:{fontSize:"20px"},tableContainerPaper:{boxShadow:"none"},title:{paddingBottom:"8px"},chevronIcon:{fontSize:"20px"},chevronCell:{verticalAlign:"middle",padding:"8px 4px",lineHeight:1},placeholderDiv:{width:"20px",height:"20px",display:"inline-block"},statusColumnHeader:{width:"300px"},statusColumnCell:{width:"100%"},groupDisplayName:{lineHeight:"24px",fontWeight:"bold"}})),ce=n=>{const p=[],c=o=>{!o.children||o.children.length===0?o.numberOfEntities>0&&p.push(o):o.children.forEach(y=>c(y))};return c(n),p},O=(n,p)=>{if(!n||typeof n!="object")return null;if(n.groupRef===p)return n.status;if(n.children&&Array.isArray(n.children))for(const c of n.children){const o=O(c,p);if(o)return o}return null},de=({hierarchyData:n,getColor:p,selectedNode:c,onNodeSelect:o,onTeamClick:y,trackStatus:z})=>{const i=se(),A=q(G),[u,N]=ie(),[b,S]=C(0),[g,B]=C(10),L=u.get("sortBy"),D=u.get("direction"),[l,H]=C(L||"passPercentage"),[s,j]=C(D||"asc");re(()=>{const e=new URLSearchParams(u.toString());e.set("sortBy",l),e.set("direction",s),N(e,{replace:!0})},[l,s,u,N]);const P=I(()=>n?ce(n):[],[n]),T=I(()=>P.map(e=>({id:e.entityRef,name:e.name,entityRef:e.entityRef,passPercentage:e.passPercentage,numberOfEntities:e.numberOfEntities})).sort((e,d)=>{let a,r;switch(l){case"name":a=e.name.toLowerCase(),r=d.name.toLowerCase();break;case"passPercentage":a=e.passPercentage,r=d.passPercentage;break;case"numberOfEntities":a=e.numberOfEntities,r=d.numberOfEntities;break;default:return 0}return typeof a=="number"&&typeof r=="number"?s==="asc"?a-r:r-a:typeof a=="string"&&typeof r=="string"?s==="asc"?a.localeCompare(r):r.localeCompare(a):s==="asc"?a<r?-1:a>r?1:0:a>r?-1:a<r?1:0}),[P,l,s]);if(!n)return null;const M=e=>{if(o)if(c&&e.entityRef===c.entityRef)o(null);else{const d=P.find(a=>a.entityRef===e.entityRef);o(d||null)}},U=(e,d)=>{S(d)},V=e=>{B(parseInt(e.target.value,10)),S(0)},v=e=>{j(l===e&&s==="asc"?"desc":"asc"),H(e)},x=e=>e.direction==="asc"?t(ae,{...e,fontSize:"small"}):t(ne,{...e,fontSize:"small"}),W=T.slice(b*g,b*g+g);return f("div",{className:i.tableContainer,children:[t(R,{variant:"h6",className:i.title,children:"Teams"}),t(K,{component:Q,className:i.tableContainerPaper,children:f(X,{size:"small",children:[t(Y,{children:f(E,{children:[t(m,{className:i.headerCell,width:"35%",children:t(w,{active:l==="name",direction:l==="name"?s:"desc",onClick:()=>v("name"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Team"})})}),t(m,{className:i.headerCell,width:"15%",children:t(w,{active:l==="numberOfEntities",direction:l==="numberOfEntities"?s:"desc",onClick:()=>v("numberOfEntities"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Entities"})})}),t(m,{className:i.headerCell,width:"25%",children:t(w,{active:l==="passPercentage",direction:l==="passPercentage"?s:"desc",onClick:()=>v("passPercentage"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Compliance"})})}),t(m,{className:i.statusColumnHeader,width:"25%"})]})}),t(Z,{children:W.map(e=>{const d=c&&e.entityRef===c.entityRef,a=A.forEntity(e.entityRef),r=a.snapshot.Icon,F=a.snapshot.primaryTitle||e.entityRef,h=O(z||null,e.entityRef),_=(h?.passed??0)+(h?.failed??0)+(h?.warning??0)+(h?.error??0)+(h?.notReported??0);return f(E,{hover:!0,onClick:()=>M(e),className:d?i.selectedRow:"",style:{cursor:"pointer"},children:[t(m,{style:{verticalAlign:"middle"},children:f(k,{display:"flex",alignItems:"center",height:"100%",children:[r&&t(k,{marginRight:1,display:"flex",alignItems:"center",height:"24px",children:t(r,{fontSize:"small"})}),t(ee,{component:"button",onClick:$=>{$.stopPropagation(),y?.(e.entityRef)},children:t(R,{variant:"body2",className:i.groupDisplayName,children:F})})]})}),t(m,{children:t(R,{variant:"body2",children:e.numberOfEntities.toLocaleString()})}),t(m,{children:t(oe,{value:h&&_>0?`${Math.round(e.passPercentage)}%`:"N/A",getColor:p,numericValue:e.passPercentage,size:"medium"})}),t(m,{children:t(k,{className:i.statusColumnCell,children:t(le,{status:h})})})]},e.id)})})]})}),t(te,{rowsPerPageOptions:[10,25,50],component:"div",count:T.length,rowsPerPage:g,page:b,onPageChange:U,onRowsPerPageChange:V})]})};export{de as HierarchyTable};
1
+ import{jsxs as f,jsx as t}from"react/jsx-runtime";import{useApi as q}from"@backstage/core-plugin-api";import{entityPresentationApiRef as G}from"@backstage/plugin-catalog-react";import{makeStyles as J,Typography as R,TableContainer as K,Paper as Q,Table as X,TableHead as Y,TableRow as E,TableCell as m,TableSortLabel as w,TableBody as Z,Box as k,Link as ee,TablePagination as te}from"@material-ui/core";import ne from"@material-ui/icons/ArrowDownward";import ae from"@material-ui/icons/ArrowUpward";import{useState as C,useEffect as re,useMemo as I}from"react";import{useSearchParams as ie}from"react-router-dom";import{ColorChip as oe}from"../ColorChip/ColorChip.esm.js";import{TeamStatusBar as le}from"../TeamStatusBar/TeamStatusBar.esm.js";const se=J(n=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},selectedRow:{backgroundColor:n.palette.action.hover},table:{"& tbody tr":{cursor:"pointer","&:hover":{backgroundColor:n.palette.action.hover}},"& tbody tr.selected":{backgroundColor:n.palette.action.selected,"&:hover":{backgroundColor:n.palette.action.selected}}},headerCell:{cursor:"pointer"},headerContent:{display:"flex",alignItems:"center"},sortIconContainer:{width:"24px",display:"flex",justifyContent:"center"},sortIcon:{fontSize:"20px"},tableContainerPaper:{boxShadow:"none"},title:{paddingBottom:"8px"},chevronIcon:{fontSize:"20px"},chevronCell:{verticalAlign:"middle",padding:"8px 4px",lineHeight:1},placeholderDiv:{width:"20px",height:"20px",display:"inline-block"},statusColumnHeader:{width:"300px"},statusColumnCell:{width:"100%"},groupDisplayName:{lineHeight:"24px",fontWeight:"bold"}})),ce=n=>{const p=[],c=o=>{!o.children||o.children.length===0?o.numberOfEntities>0&&p.push(o):o.children.forEach(y=>c(y))};return c(n),p},O=(n,p)=>{if(!n||typeof n!="object")return null;if(n.groupRef===p)return n.status;if(n.children&&Array.isArray(n.children))for(const c of n.children){const o=O(c,p);if(o)return o}return null},de=({hierarchyData:n,getColor:p,selectedNode:c,onNodeSelect:o,onTeamClick:y,trackStatus:z})=>{const i=se(),A=q(G),[u,N]=ie(),[b,S]=C(0),[g,B]=C(10),D=u.get("sortBy"),L=u.get("direction"),[l,H]=C(D||"passPercentage"),[s,j]=C(L||"asc");re(()=>{const e=new URLSearchParams(u.toString());e.set("sortBy",l),e.set("direction",s),N(e,{replace:!0})},[l,s,u,N]);const P=I(()=>n?ce(n):[],[n]),T=I(()=>P.map(e=>({id:e.entityRef,name:e.name,entityRef:e.entityRef,passPercentage:e.passPercentage,numberOfEntities:e.numberOfEntities})).sort((e,d)=>{let a,r;switch(l){case"name":a=e.name.toLowerCase(),r=d.name.toLowerCase();break;case"passPercentage":a=e.passPercentage,r=d.passPercentage;break;case"numberOfEntities":a=e.numberOfEntities,r=d.numberOfEntities;break;default:return 0}return typeof a=="number"&&typeof r=="number"?s==="asc"?a-r:r-a:typeof a=="string"&&typeof r=="string"?s==="asc"?a.localeCompare(r):r.localeCompare(a):s==="asc"?a<r?-1:a>r?1:0:a>r?-1:a<r?1:0}),[P,l,s]);if(!n)return null;const M=e=>{if(o)if(c&&e.entityRef===c.entityRef)o(null);else{const d=P.find(a=>a.entityRef===e.entityRef);o(d||null)}},$=(e,d)=>{S(d)},U=e=>{B(parseInt(e.target.value,10)),S(0)},v=e=>{j(l===e&&s==="asc"?"desc":"asc"),H(e)},x=e=>e.direction==="asc"?t(ae,{...e,fontSize:"small"}):t(ne,{...e,fontSize:"small"}),V=T.slice(b*g,b*g+g);return f("div",{className:i.tableContainer,children:[t(R,{variant:"h6",className:i.title,children:"Teams"}),t(K,{component:Q,className:i.tableContainerPaper,children:f(X,{size:"small",children:[t(Y,{children:f(E,{children:[t(m,{className:i.headerCell,width:"35%",children:t(w,{active:l==="name",direction:l==="name"?s:"desc",onClick:()=>v("name"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Team"})})}),t(m,{className:i.headerCell,width:"15%",children:t(w,{active:l==="numberOfEntities",direction:l==="numberOfEntities"?s:"desc",onClick:()=>v("numberOfEntities"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Entities"})})}),t(m,{className:i.headerCell,width:"25%",children:t(w,{active:l==="passPercentage",direction:l==="passPercentage"?s:"desc",onClick:()=>v("passPercentage"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Compliance"})})}),t(m,{className:i.statusColumnHeader,width:"25%"})]})}),t(Z,{children:V.map(e=>{const d=c&&e.entityRef===c.entityRef,a=A.forEntity(e.entityRef),r=a.snapshot.Icon,W=a.snapshot.primaryTitle||e.entityRef,h=O(z||null,e.entityRef),F=(h?.passed??0)+(h?.failed??0)+(h?.warning??0)+(h?.error??0)+(h?.notReported??0);return f(E,{hover:!0,onClick:()=>M(e),className:d?i.selectedRow:"",style:{cursor:"pointer"},children:[t(m,{style:{verticalAlign:"middle"},children:f(k,{display:"flex",alignItems:"center",height:"100%",children:[r&&t(k,{marginRight:1,display:"flex",alignItems:"center",height:"24px",children:t(r,{fontSize:"small"})}),t(ee,{component:"button",onClick:_=>{_.stopPropagation(),y?.(e.entityRef)},children:t(R,{variant:"body2",className:i.groupDisplayName,children:W})})]})}),t(m,{children:t(R,{variant:"body2",children:e.numberOfEntities.toLocaleString()})}),t(m,{children:t(oe,{value:h&&F>0?`${Math.round(e.passPercentage)}%`:"N/A",getColor:p,numericValue:e.passPercentage,size:"medium"})}),t(m,{children:t(k,{className:i.statusColumnCell,children:t(le,{status:h})})})]},e.id)})})]})}),t(te,{rowsPerPageOptions:[10,25,50],component:"div",count:T.length,rowsPerPage:g,page:b,onPageChange:$,onRowsPerPageChange:U})]})};export{de as HierarchyTable};
2
2
  //# sourceMappingURL=HierarchyTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as t}from"react/jsx-runtime";import{Link as U}from"@backstage/core-components";import{useApi as F,useRouteRef as Y}from"@backstage/core-plugin-api";import{entityPresentationApiRef as _}from"@backstage/plugin-catalog-react";import{makeStyles as q,useTheme as G,Box as i,Link as J,Typography as l,Chip as K,IconButton as z,CircularProgress as T,Tooltip as Q}from"@material-ui/core";import X from"@material-ui/icons/Close";import Z from"@material-ui/icons/ExpandLess";import ee from"@material-ui/icons/ExpandMore";import{useState as te,useEffect as oe,useCallback as ae}from"react";import{useSearchParams as ie}from"react-router-dom";import{useCheckStatuses as ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackCheckDetailsRouteRef as re}from"../../routes.esm.js";import{getContrastTextColor as R,getCheckStatusColor as le}from"../../utils/colors.esm.js";import{ColorChip as B}from"../ColorChip/ColorChip.esm.js";const se=q(e=>({checkLinkText:{color:"inherit",textDecoration:"none"},emptyStateIcon:{fontSize:e.typography.h3.fontSize,color:e.palette.text.secondary,opacity:.4,marginBottom:12},emptyStateText:{color:e.palette.text.secondary,textAlign:"center"},checksContainer:{flex:1,overflowY:"auto",minHeight:0},checksTitle:{fontWeight:"bold",marginBottom:4},levelHeader:{display:"flex",alignItems:"center",cursor:"pointer"},levelLabel:{fontWeight:"bold",letterSpacing:1,color:e.palette.text.secondary,marginBottom:2,flex:1},expandIcon:{fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary},progressContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start",marginBottom:16},progressWrapper:{position:"relative",display:"inline-flex"},progressBackground:{position:"absolute",color:e.palette.divider},progressText:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:e.typography.body1.fontSize,fontWeight:"bold"},checkName:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","&:hover":{textDecoration:"underline"}},checkMessage:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},statusChip:{fontSize:e.typography.caption.fontSize,height:22,borderRadius:12,marginLeft:8,marginBottom:0},secondaryTitle:{display:"-webkit-box",WebkitLineClamp:5,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",marginBottom:8,marginTop:2,lineHeight:1.4,paddingBottom:4},entityCount:{fontSize:e.typography.caption.fontSize},entityLabel:{fontSize:e.typography.caption.fontSize},entityContainer:{display:"flex",alignItems:"center",marginBottom:16},titleContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:.5},titleContent:{display:"flex",alignItems:"center",minWidth:0},titleStatus:{display:"flex",alignItems:"center"},titleIcon:{display:"flex",alignItems:"center",marginRight:8},titleText:{minWidth:0,fontWeight:"bold"},emptyStateContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",marginTop:2,marginBottom:1},tooltip:{color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},tooltipItem:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},tooltipCategory:{display:"flex",alignItems:"center",flex:1,fontSize:e.typography.body2.fontSize,marginRight:e.spacing(2)},tooltipValue:{fontSize:e.typography.body2.fontSize,color:e.palette.text.primary}})),L=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),ce=({node:e,clearSelectedNode:W,checkIds:h,track:c,getColor:k,onTeamClick:A})=>{const f=G(),o=se(),P=F(_),S=Y(re),[j]=ie(),[O,N]=te(()=>c?.levels?new Set(c.levels.map(a=>a.ordinal)):new Set),g=e?P.forEntity(e.entityRef):void 0;oe(()=>{if(c?.levels){const a=new Set(c.levels.map(m=>m.ordinal));N(a)}},[c?.levels]);const D=a=>{N(m=>{const n=new Set(m);return n.has(a)?n.delete(a):n.add(a),n})},E=a=>a<50?{label:"Needs Attention",color:f.palette.error.main,textColor:R(f.palette.error.main)}:a<80?null:{label:"Healthy",color:f.palette.success.main,textColor:R(f.palette.success.main)},H=ae(a=>{switch(a){case"not-applicable":case"notApplicable":return"Not Applicable";case"not-reported":case"notReported":return"Not Reported";default:return a.charAt(0).toUpperCase()+a.slice(1)}},[]),$=(a,m)=>{const n=a.numberOfEntities-a.notApplicable-a.exempt,y=a.passed,u=a.failed,C=a.warning,d=a.error,s=a.notReported,x=[{name:"passed",value:y},{name:"failed",value:u},{name:"warning",value:C},{name:"error",value:d},{name:"not-reported",value:s}].filter(p=>p.value>0);return r("div",{className:o.tooltip,children:[t(l,{variant:"caption",style:{fontWeight:"bold",marginBottom:8,display:"block"},children:m.name}),x.map((p,v)=>r("div",{className:o.tooltipItem,children:[r("div",{className:o.tooltipCategory,children:[t("span",{style:{width:12,height:4,borderRadius:2,backgroundColor:le(f,p.name),marginRight:8}}),t(l,{variant:"caption",children:H(p.name)})]}),t("div",{className:o.tooltipValue,children:r(l,{variant:"caption",children:[p.value," of ",L(n)," (",Math.round(p.value/n*100),"%)"]})})]},v))]})},I=ne(e&&h&&h.length?{checkIds:h,trackId:c?.id,filter:{"relations.ownedBy":[e.entityRef]}}:{checkIds:[]},!!(e&&h&&h.length)),b=E(e.passPercentage),M=()=>{if(!c?.levels||h.length===0)return t(i,{mt:2,children:t(l,{variant:"body2",color:"textSecondary",children:"No checks found for this entity."})});const a=c.levels,m=(I.data||[]).reduce((n,y)=>(n[y.id]=y,n),{});return r(i,{mt:2,className:o.checksContainer,children:[t(l,{variant:"subtitle2",className:o.checksTitle,children:"Checks"}),a.map(n=>{const y=n.name??`Level ${n.ordinal}`,u=n.ordinal,C=O.has(u);return r(i,{mb:1,children:[r(i,{className:o.levelHeader,onClick:()=>D(u),children:[t(l,{variant:"overline",className:o.levelLabel,children:y}),t(z,{size:"small",className:o.expandIcon,children:C?t(Z,{}):t(ee,{})})]}),C&&n.checks.map(d=>{const s=m[d.id],x=s?s.numberOfEntities-s.notApplicable-s.exempt:0,p=s&&x>0?Math.round(s.passed/x*100):0;let v;if(c&&S&&e){const V=S({trackId:c.id,checkId:d.id}),w=new URLSearchParams(j.toString());w.set("owners",e.entityRef),v=`${V}?${w.toString()}`}return r(i,{display:"flex",alignItems:"center",mb:.5,children:[t(i,{mr:1,display:"flex",children:I.isLoading?t(B,{value:"",getColor:()=>f.palette.divider,numericValue:0,size:"small"}):t(Q,{title:s?$(s,d):"",placement:"top",arrow:!0,classes:{tooltip:o.tooltip},children:t(i,{children:t(B,{value:s&&x>0?`${p}%`:"N/A",getColor:k,numericValue:p,size:"small"})})})}),t(i,{flex:1,minWidth:0,children:v?t(U,{to:v,style:{color:"inherit",textDecoration:"none"},className:o.checkLinkText,children:t(l,{variant:"body2",className:o.checkName,children:d.name})}):t(l,{variant:"body2",className:o.checkName,children:d.name})})]},d.id)})]},u)})]})};return r(i,{children:[r(i,{className:o.titleContainer,children:[r(i,{className:o.titleContent,children:[g?.snapshot.Icon&&t(i,{component:"span",className:o.titleIcon,children:t(g.snapshot.Icon,{fontSize:"small"})}),t(J,{component:"button",onClick:()=>A?.(e.entityRef),noWrap:!0,children:t(l,{variant:"h6",noWrap:!0,className:o.titleText,children:g?.snapshot.primaryTitle||e.name})})]}),r(i,{className:o.titleStatus,children:[b&&t(K,{label:b.label,style:{background:b.color,color:b.textColor},className:o.statusChip,size:"small"}),t(z,{onClick:W,size:"small",children:t(X,{})})]})]}),g?.snapshot.secondaryTitle&&t(l,{variant:"caption",color:"textSecondary",className:o.secondaryTitle,children:g.snapshot.secondaryTitle}),t(i,{className:o.entityContainer,children:r(l,{variant:"body2",color:"textSecondary",className:o.entityLabel,children:["Entities:"," ",t("span",{className:o.entityCount,children:L(e.numberOfEntities)})]})}),t(i,{className:o.progressContainer,children:r(i,{className:o.progressWrapper,children:[t(T,{variant:"determinate",value:100,size:80,thickness:6,className:o.progressBackground}),t(T,{variant:"determinate",value:e.passPercentage,size:80,thickness:6,style:{color:k(e.passPercentage)}}),r(l,{className:o.progressText,children:[Math.round(e.passPercentage),"%"]})]})}),t(M,{})]})};export{ce as SelectedNodeSidebar};
1
+ import{jsxs as r,jsx as t}from"react/jsx-runtime";import{Link as U}from"@backstage/core-components";import{useApi as F,useRouteRef as G}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Y}from"@backstage/plugin-catalog-react";import{makeStyles as _,useTheme as q,Box as i,Link as J,Typography as l,Chip as K,IconButton as z,CircularProgress as T,Tooltip as Q}from"@material-ui/core";import X from"@material-ui/icons/Close";import Z from"@material-ui/icons/ExpandLess";import ee from"@material-ui/icons/ExpandMore";import{useState as te,useEffect as oe,useCallback as ae}from"react";import{useSearchParams as ie}from"react-router-dom";import{useCheckStatuses as ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackCheckDetailsRouteRef as re}from"../../routes.esm.js";import{getContrastTextColor as R,getCheckStatusColor as le}from"../../utils/colors.esm.js";import{ColorChip as B}from"../ColorChip/ColorChip.esm.js";const se=_(e=>({checkLinkText:{color:"inherit",textDecoration:"none"},emptyStateIcon:{fontSize:e.typography.h3.fontSize,color:e.palette.text.secondary,opacity:.4,marginBottom:12},emptyStateText:{color:e.palette.text.secondary,textAlign:"center"},checksContainer:{flex:1,overflowY:"auto",minHeight:0},checksTitle:{fontWeight:"bold",marginBottom:4},levelHeader:{display:"flex",alignItems:"center",cursor:"pointer"},levelLabel:{fontWeight:"bold",letterSpacing:1,color:e.palette.text.secondary,marginBottom:2,flex:1},expandIcon:{fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary},progressContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start",marginBottom:16},progressWrapper:{position:"relative",display:"inline-flex"},progressBackground:{position:"absolute",color:e.palette.divider},progressText:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:e.typography.body1.fontSize,fontWeight:"bold"},checkName:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","&:hover":{textDecoration:"underline"}},checkMessage:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},statusChip:{fontSize:e.typography.caption.fontSize,height:22,borderRadius:12,marginLeft:8,marginBottom:0},secondaryTitle:{display:"-webkit-box",WebkitLineClamp:5,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",marginBottom:8,marginTop:2,lineHeight:1.4,paddingBottom:4},entityCount:{fontSize:e.typography.caption.fontSize},entityLabel:{fontSize:e.typography.caption.fontSize},entityContainer:{display:"flex",alignItems:"center",marginBottom:16},titleContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:.5},titleContent:{display:"flex",alignItems:"center",minWidth:0},titleStatus:{display:"flex",alignItems:"center"},titleIcon:{display:"flex",alignItems:"center",marginRight:8},titleText:{minWidth:0,fontWeight:"bold"},emptyStateContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",marginTop:2,marginBottom:1},tooltip:{color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},tooltipItem:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},tooltipCategory:{display:"flex",alignItems:"center",flex:1,fontSize:e.typography.body2.fontSize,marginRight:e.spacing(2)},tooltipValue:{fontSize:e.typography.body2.fontSize,color:e.palette.text.primary}})),L=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),ce=({node:e,clearSelectedNode:W,checkIds:h,track:c,getColor:k,onTeamClick:A})=>{const f=q(),o=se(),P=F(Y),S=G(re),[j]=ie(),[O,N]=te(()=>c?.levels?new Set(c.levels.map(a=>a.ordinal)):new Set),g=e?P.forEntity(e.entityRef):void 0;oe(()=>{if(c?.levels){const a=new Set(c.levels.map(m=>m.ordinal));N(a)}},[c?.levels]);const D=a=>{N(m=>{const n=new Set(m);return n.has(a)?n.delete(a):n.add(a),n})},E=a=>a<50?{label:"Needs Attention",color:f.palette.error.main,textColor:R(f.palette.error.main)}:a<80?null:{label:"Healthy",color:f.palette.success.main,textColor:R(f.palette.success.main)},H=ae(a=>{switch(a){case"not-applicable":case"notApplicable":return"Not Applicable";case"not-reported":case"notReported":return"Not Reported";default:return a.charAt(0).toUpperCase()+a.slice(1)}},[]),M=(a,m)=>{const n=a.numberOfEntities-a.notApplicable-a.exempt,y=a.passed,u=a.failed,C=a.warning,d=a.error,s=a.notReported,x=[{name:"passed",value:y},{name:"failed",value:u},{name:"warning",value:C},{name:"error",value:d},{name:"not-reported",value:s}].filter(p=>p.value>0);return r("div",{className:o.tooltip,children:[t(l,{variant:"caption",style:{fontWeight:"bold",marginBottom:8,display:"block"},children:m.name}),x.map((p,v)=>r("div",{className:o.tooltipItem,children:[r("div",{className:o.tooltipCategory,children:[t("span",{style:{width:12,height:4,borderRadius:2,backgroundColor:le(f,p.name),marginRight:8}}),t(l,{variant:"caption",children:H(p.name)})]}),t("div",{className:o.tooltipValue,children:r(l,{variant:"caption",children:[p.value," of ",L(n)," (",Math.round(p.value/n*100),"%)"]})})]},v))]})},I=ne(e&&h&&h.length?{checkIds:h,trackId:c?.id,filter:{"relations.ownedBy":[e.entityRef]}}:{checkIds:[]},!!(e&&h&&h.length)),b=E(e.passPercentage),V=()=>{if(!c?.levels||h.length===0)return t(i,{mt:2,children:t(l,{variant:"body2",color:"textSecondary",children:"No checks found for this entity."})});const a=c.levels,m=(I.data||[]).reduce((n,y)=>(n[y.id]=y,n),{});return r(i,{mt:2,className:o.checksContainer,children:[t(l,{variant:"subtitle2",className:o.checksTitle,children:"Checks"}),a.map(n=>{const y=n.name??`Level ${n.ordinal}`,u=n.ordinal,C=O.has(u);return r(i,{mb:1,children:[r(i,{className:o.levelHeader,onClick:()=>D(u),children:[t(l,{variant:"overline",className:o.levelLabel,children:y}),t(z,{size:"small",className:o.expandIcon,children:C?t(Z,{}):t(ee,{})})]}),C&&n.checks.map(d=>{const s=m[d.id],x=s?s.numberOfEntities-s.notApplicable-s.exempt:0,p=s&&x>0?Math.round(s.passed/x*100):0;let v;if(c&&S&&e){const $=S({trackId:c.id,checkId:d.id}),w=new URLSearchParams(j.toString());w.set("owners",e.entityRef),v=`${$}?${w.toString()}`}return r(i,{display:"flex",alignItems:"center",mb:.5,children:[t(i,{mr:1,display:"flex",children:I.isLoading?t(B,{value:"",getColor:()=>f.palette.divider,numericValue:0,size:"small"}):t(Q,{title:s?M(s,d):"",placement:"top",arrow:!0,classes:{tooltip:o.tooltip},children:t(i,{children:t(B,{value:s&&x>0?`${p}%`:"N/A",getColor:k,numericValue:p,size:"small"})})})}),t(i,{flex:1,minWidth:0,children:v?t(U,{to:v,style:{color:"inherit",textDecoration:"none"},className:o.checkLinkText,children:t(l,{variant:"body2",className:o.checkName,children:d.name})}):t(l,{variant:"body2",className:o.checkName,children:d.name})})]},d.id)})]},u)})]})};return r(i,{children:[r(i,{className:o.titleContainer,children:[r(i,{className:o.titleContent,children:[g?.snapshot.Icon&&t(i,{component:"span",className:o.titleIcon,children:t(g.snapshot.Icon,{fontSize:"small"})}),t(J,{component:"button",onClick:()=>A?.(e.entityRef),noWrap:!0,children:t(l,{variant:"h6",noWrap:!0,className:o.titleText,children:g?.snapshot.primaryTitle||e.name})})]}),r(i,{className:o.titleStatus,children:[b&&t(K,{label:b.label,style:{background:b.color,color:b.textColor},className:o.statusChip,size:"small"}),t(z,{onClick:W,size:"small",children:t(X,{})})]})]}),g?.snapshot.secondaryTitle&&t(l,{variant:"caption",color:"textSecondary",className:o.secondaryTitle,children:g.snapshot.secondaryTitle}),t(i,{className:o.entityContainer,children:r(l,{variant:"body2",color:"textSecondary",className:o.entityLabel,children:["Entities:"," ",t("span",{className:o.entityCount,children:L(e.numberOfEntities)})]})}),t(i,{className:o.progressContainer,children:r(i,{className:o.progressWrapper,children:[t(T,{variant:"determinate",value:100,size:80,thickness:6,className:o.progressBackground}),t(T,{variant:"determinate",value:e.passPercentage,size:80,thickness:6,style:{color:k(e.passPercentage)}}),r(l,{className:o.progressText,children:[Math.round(e.passPercentage),"%"]})]})}),t(V,{})]})};export{ce as SelectedNodeSidebar};
2
2
  //# sourceMappingURL=SelectedNodeSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- const h=(e,n)=>{if(!e||typeof e!="object")return null;if(e.groupRef===n)return e.status;if(e.children&&Array.isArray(e.children))for(const i of e.children){const s=h(i,n);if(s)return s}return null},d=(e,n,i,s,a)=>{const c=s.forEntity(e.entityRef).snapshot.primaryTitle,f=e.entityRef,o=n?h(n,f):null,p=i(o?.allPassPercentage||0),u=e.ownedEntityRefs?.length||0;if(!e.children||Object.keys(e.children).length===0){if(u===0)return;const r=Math.log(u+1);if(r===0)return;const l={id:c,name:c,entityRef:f,value:r,numberOfEntities:u,color:p,passPercentage:o?.allPassPercentage||0,children:[]};return a&&(l.parent=a),l}const y=Object.values(e.children),t={id:c,name:c,entityRef:f,numberOfEntities:0,color:"",passPercentage:0,children:[]};a&&(t.parent=a);const g=y.map(r=>{const l=d(r,n,i,s,t);return t.numberOfEntities+=l?.numberOfEntities??0,l}).filter(r=>r!==void 0);return t.children=g,t.color=i(o?.allPassPercentage||0),t.passPercentage=o?.allPassPercentage||0,t};export{d as hierarchyToNivo};
1
+ import{getPercentage as f}from"../../../utils/formatters.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const o of e.children){const c=u(o,a);if(c)return c}return null},p=(e,a,o,c,l)=>{const s=c.forEntity(e.entityRef).snapshot.primaryTitle,g=e.entityRef,r=a?u(a,g):null,h=o(r?.allPassPercentage||0),d=e.ownedEntityRefs?.length||0;if(!e.children||Object.keys(e.children).length===0){if(d===0)return;const i=Math.log(d+1);if(i===0)return;const n=(r?.passed??0)+(r?.failed??0)+(r?.warning??0)+(r?.error??0)+(r?.notReported??0)+(r?.exempt??0),P={id:s,name:s,entityRef:g,value:i,numberOfEntities:d,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:f(r?.failed,n),warningPercentage:f(r?.warning,n),notReportedPercentage:f(r?.notReported,n),errorPercentage:f(r?.error,n),children:[]};return l&&(P.parent=l),P}const m=Object.values(e.children),t={id:s,name:s,entityRef:g,numberOfEntities:0,color:"",passPercentage:0,failPercentage:0,warningPercentage:0,errorPercentage:0,notReportedPercentage:0,children:[]};l&&(t.parent=l);const y=m.map(i=>{const n=p(i,a,o,c,t);return t.numberOfEntities+=n?.numberOfEntities??0,n}).filter(i=>i!==void 0);return t.children=y,t.color=o(r?.allPassPercentage||0),t.passPercentage=r?.allPassPercentage||0,t};export{p as hierarchyToNivo};
2
2
  //# sourceMappingURL=hierarchyToNivo.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,Fragment as Y,jsx as t}from"react/jsx-runtime";import{TooltipTrigger as $,ButtonIcon as x,Tooltip as A}from"@backstage/ui";import{RiExportLine as B,RiImportLine as j}from"@remixicon/react";import D from"js-yaml";import{capitalize as a}from"lodash";import{useState as E,useRef as F}from"react";import{useSoundcheckAlert as P}from"../../hooks/useSoundcheckAlert.esm.js";const z=({resourceType:r,disableImport:I,disableExport:b,onImport:v,onExport:w})=>{const k=`${a(r)} Import Success`,l=`Error Importing ${a(r)}s`,L=`Error Exporting ${a(r)}s`,{showAlert:s}=P(),[S,c]=E(!1),[T,p]=E(!1),m=F(null);return e(Y,{children:[e($,{children:[t(x,{isDisabled:b||T,onClick:async()=>{try{p(!0),await w()}catch(o){s({title:L,message:`An error occurred while exporting ${r}s: ${o.message}`,severity:"error"})}finally{p(!1)}},"aria-label":"Export All to YAML",icon:t(B,{}),variant:"secondary"}),e(A,{children:["Export all ",r,"s to YAML"]})]}),e($,{children:[t(x,{isDisabled:I||S,"aria-label":"Import from YAML",icon:t(j,{}),variant:"secondary",onClick:()=>m?.current?.click()}),e(A,{children:["Import ",r,"s from YAML"]})]}),t("input",{type:"file",hidden:!0,onChange:async o=>{try{c(!0);const i=o.target?.files?.[0],d=new FileReader;i&&(d.readAsText(i,"utf-8"),d.onload=async C=>{const g=C.target?.result?.toString();if(g){const M=D.load(g);try{const{created:f,skipped:R,failed:n}=await v(M);let h=k,u="success",y=`Successfully imported ${f.length} ${r}(s), failed ${n.length} ${r}(s), ${R.length} ${r}(s) already existed.`;n.length&&(h=l,u=f.length?"warning":"error",y+=` Errors: ${JSON.stringify(n)}.`),s({title:h,message:y,severity:u})}catch{}}})}catch(i){s({title:l,message:`An error occurred while importing ${r}s: ${i.message}`,severity:"error"})}finally{o.target.value="",c(!1)}},accept:".yaml",ref:m})]})};export{z as ImportExportPanelBUI};
2
+ //# sourceMappingURL=ImportExportPanelBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as y,Fragment as F,jsx as r}from"react/jsx-runtime";import{makeStyles as L,Tooltip as $,IconButton as x,CircularProgress as b}from"@material-ui/core";import M from"@material-ui/icons/GetApp";import O from"@material-ui/icons/Publish";import P from"js-yaml";import{capitalize as a}from"lodash";import{useState as E}from"react";import{useSoundcheckAlert as H}from"../../hooks/useSoundcheckAlert.esm.js";const J=L(e=>({button:{height:"44px",lineHeight:"1.25rem",padding:e.spacing(1.5,1),marginRight:e.spacing(.5),borderRadius:"12px",color:e.palette.text.primary}})),V=({resourceType:e,disableImport:w,disableExport:I,onImport:A,onExport:S})=>{const k=`${a(e)} Import Success`,n=`Error Importing ${a(e)}s`,v=`Error Exporting ${a(e)}s`,l=J(),{showAlert:s}=H(),[z,c]=E(!1),[C,p]=E(!1),N=async()=>{try{p(!0),await S()}catch(t){s({title:v,message:`An error occurred while exporting ${e}s: ${t.message}`,severity:"error"})}finally{p(!1)}},R=async t=>{try{c(!0);const o=t.target?.files?.[0],m=new FileReader;o&&(m.readAsText(o,"utf-8"),m.onload=async T=>{const d=T.target?.result?.toString();if(d){const j=P.load(d);try{const{created:g,skipped:B,failed:i}=await A(j);let h=k,u="success",f=`Successfully imported ${g.length} ${e}(s), failed ${i.length} ${e}(s), ${B.length} ${e}(s) already existed.`;i.length&&(h=n,u=g.length?"warning":"error",f+=` Errors: ${JSON.stringify(i)}.`),s({title:h,message:f,severity:u})}catch{}}})}catch(o){s({title:n,message:`An error occurred while importing ${e}s: ${o.message}`,severity:"error"})}finally{t.target.value="",c(!1)}};return y(F,{children:[r($,{title:`Export all ${e}s`,children:r(x,{className:l.button,disabled:I,onClick:N,children:C?r(b,{size:24}):r(M,{})})}),r($,{title:`Import YAML ${e}(s)`,children:y(x,{className:l.button,disabled:w,component:"label",children:[z?r(b,{size:24}):r(O,{}),r("input",{type:"file",hidden:!0,onChange:R,accept:".yaml"})]})})]})};export{V as ImportExportPanel};
2
- //# sourceMappingURL=ImportExportPanel.esm.js.map
1
+ import{jsxs as y,Fragment as F,jsx as r}from"react/jsx-runtime";import{makeStyles as L,Tooltip as $,IconButton as x,CircularProgress as b}from"@material-ui/core";import M from"@material-ui/icons/GetApp";import O from"@material-ui/icons/Publish";import P from"js-yaml";import{capitalize as a}from"lodash";import{useState as E}from"react";import{useSoundcheckAlert as D}from"../../hooks/useSoundcheckAlert.esm.js";const H=L(e=>({button:{height:"44px",lineHeight:"1.25rem",padding:e.spacing(1.5,1),marginRight:e.spacing(.5),borderRadius:"12px",color:e.palette.text.primary}})),J=({resourceType:e,disableImport:w,disableExport:I,onImport:A,onExport:S})=>{const k=`${a(e)} Import Success`,n=`Error Importing ${a(e)}s`,v=`Error Exporting ${a(e)}s`,l=H(),{showAlert:s}=D(),[z,c]=E(!1),[C,p]=E(!1),N=async()=>{try{p(!0),await S()}catch(t){s({title:v,message:`An error occurred while exporting ${e}s: ${t.message}`,severity:"error"})}finally{p(!1)}},R=async t=>{try{c(!0);const o=t.target?.files?.[0],m=new FileReader;o&&(m.readAsText(o,"utf-8"),m.onload=async T=>{const d=T.target?.result?.toString();if(d){const j=P.load(d);try{const{created:g,skipped:B,failed:i}=await A(j);let h=k,u="success",f=`Successfully imported ${g.length} ${e}(s), failed ${i.length} ${e}(s), ${B.length} ${e}(s) already existed.`;i.length&&(h=n,u=g.length?"warning":"error",f+=` Errors: ${JSON.stringify(i)}.`),s({title:h,message:f,severity:u})}catch{}}})}catch(o){s({title:n,message:`An error occurred while importing ${e}s: ${o.message}`,severity:"error"})}finally{t.target.value="",c(!1)}};return y(F,{children:[r($,{title:`Export all ${e}s`,children:r(x,{className:l.button,disabled:I,onClick:N,children:C?r(b,{size:24}):r(M,{})})}),r($,{title:`Import YAML ${e}(s)`,children:y(x,{className:l.button,disabled:w,component:"label",children:[z?r(b,{size:24}):r(O,{}),r("input",{type:"file",hidden:!0,onChange:R,accept:".yaml"})]})})]})};export{J as ImportExportPanelDeprecated};
2
+ //# sourceMappingURL=ImportExportPanelDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as m}from"react/jsx-runtime";import{useEntity as u}from"@backstage/plugin-catalog-react";import{makeStyles as y}from"@material-ui/core";import{useState as g,useEffect as v}from"react";import C from"react-confetti";import L from"react-use/lib/useMeasure";import p from"react-use/lib/usePrevious";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as w}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const P=y(()=>({root:{position:"absolute",width:"100%",height:"100%"}})),b=({programId:t})=>{const s=P(),{entity:a}=u(),{data:f,isLoading:n}=w(a,t),[l,{width:c,height:h}]=L(),o=n?void 0:f?.highestLevel?.ordinal??-1,i=p(o),r=p(t),[d,e]=g(!1);return v(()=>{typeof i<"u"&&typeof o<"u"&&t===r&&o>i&&e(!0)},[o,i,t,r]),d?m("div",{ref:l,className:s.root,children:m(C,{width:c,height:h,numberOfPieces:1e3,gravity:1,initialVelocityY:20,recycle:!1,onConfettiComplete:()=>e(!1)})}):null};export{b as LevelUpParty};
1
+ import{jsx as m}from"react/jsx-runtime";import{useEntity as d}from"@backstage/plugin-catalog-react";import{makeStyles as y}from"@material-ui/core";import{useState as g,useEffect as v}from"react";import C from"react-confetti";import L from"react-use/lib/useMeasure";import p from"react-use/lib/usePrevious";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as k}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";const w=y(()=>({root:{position:"absolute",width:"100%",height:"100%"}})),S=({trackId:t})=>{const s=w(),{entity:a}=d(),{data:f,isLoading:n}=k(a,t),[l,{width:c,height:h}]=L(),o=n?void 0:f?.highestLevel?.ordinal??-1,i=p(o),r=p(t),[u,e]=g(!1);return v(()=>{typeof i<"u"&&typeof o<"u"&&t===r&&o>i&&e(!0)},[o,i,t,r]),u?m("div",{ref:l,className:s.root,children:m(C,{width:c,height:h,numberOfPieces:1e3,gravity:1,initialVelocityY:20,recycle:!1,onConfettiComplete:()=>e(!1)})}):null};export{S as LevelUpParty};
2
2
  //# sourceMappingURL=LevelUpParty.esm.js.map