@spotify/backstage-plugin-soundcheck 0.19.3 → 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 (224) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/alpha/integrations.esm.js +1 -1
  3. package/dist/alpha/pages.esm.js +1 -1
  4. package/dist/alpha.d.ts +2 -2
  5. package/dist/api.esm.js +1 -1
  6. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  7. package/dist/components/Badges/NoLevelBadge.esm.js +2 -2
  8. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  9. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  10. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  11. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  12. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +1 -1
  13. package/dist/components/CampaignPage/CampaignStatusHistoryChart.esm.js +2 -0
  14. package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +1 -1
  15. package/dist/components/CampaignPage/CampaignStatusTile.esm.js +1 -1
  16. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +2 -0
  17. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +1 -1
  18. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +1 -1
  19. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  20. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  21. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  22. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +2 -0
  23. package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +1 -1
  24. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +2 -0
  25. package/dist/components/Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js +2 -0
  26. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +2 -0
  27. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  28. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  29. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  30. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  31. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  32. package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
  33. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  34. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  35. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  36. package/dist/components/CertificationsPage/Playlist/PlaylistSummary.esm.js +1 -1
  37. package/dist/components/Charts/chartUtils.esm.js +1 -1
  38. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  39. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  40. package/dist/components/CheckDetails/JustificationDetails.esm.js +1 -1
  41. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  42. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  43. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  44. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  45. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  46. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  47. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  48. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  49. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  50. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  51. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  52. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +2 -0
  53. package/dist/components/CheckPage/CheckPage.esm.js +2 -0
  54. package/dist/components/CheckPage/CheckPageBUI.esm.js +2 -0
  55. package/dist/components/CheckPage/CheckPageDeprecated.esm.js +2 -0
  56. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +2 -0
  57. package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +2 -0
  58. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +2 -0
  59. package/dist/components/CheckSelection/CheckPreview.esm.js +1 -1
  60. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  61. package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +1 -1
  62. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  63. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +2 -0
  64. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +2 -0
  65. package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +2 -0
  66. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +1 -1
  67. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +1 -1
  68. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  69. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  70. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
  71. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  72. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +2 -0
  73. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +2 -0
  74. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +2 -0
  75. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  76. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  77. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  78. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  79. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  80. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  81. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  82. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  83. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  84. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  85. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  86. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  87. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  88. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  89. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  90. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  91. package/dist/components/CollectorPage/DependantCheckCard.esm.js +2 -0
  92. package/dist/components/CollectorsPage/CollectorListPage/{CollectorListPage.esm.js → CollectorListPageDeprecated.esm.js} +2 -2
  93. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  94. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  95. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +2 -0
  96. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +2 -0
  97. package/dist/components/CustomCell/CustomCell.esm.js +1 -1
  98. package/dist/components/DescriptionCell/DescriptionCell.esm.js +2 -0
  99. package/dist/components/DocLinkButton/DocLinkButton.esm.js +2 -0
  100. package/dist/components/EmptyState/EmptyStateBUI.esm.js +1 -1
  101. package/dist/components/EmptyState/EmptyStateNoCampaigns.esm.js +1 -1
  102. package/dist/components/EmptyState/EmptyStateNoChecks.esm.js +1 -1
  103. package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +1 -1
  104. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  105. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  106. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  107. package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +2 -0
  108. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  109. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  110. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  111. package/dist/components/FilterMenu/FilterMenu.esm.js +2 -0
  112. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  113. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
  114. package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
  115. package/dist/components/FormMarkdownInput/FormMarkdownInput.esm.js +1 -1
  116. package/dist/components/FormattedPreview/FormattedPreview.esm.js +1 -1
  117. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +1 -1
  118. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
  119. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +2 -0
  120. package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +2 -0
  121. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +2 -0
  122. package/dist/components/GroupSelectorBUI/GroupTag.esm.js +2 -0
  123. package/dist/components/GroupSelectorBUI/useGroupHistory.esm.js +2 -0
  124. package/dist/components/GroupSelectorBUI/usePreviousSelectedGroups.esm.js +2 -0
  125. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +1 -1
  126. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +1 -1
  127. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
  128. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  129. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +2 -0
  130. package/dist/components/ImportExportPanel/{ImportExportPanel.esm.js → ImportExportPanelDeprecated.esm.js} +2 -2
  131. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  132. package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
  133. package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
  134. package/dist/components/Menus/SimpleMenu.esm.js +2 -0
  135. package/dist/components/Menus/useCampaignActions.esm.js +2 -0
  136. package/dist/components/Menus/useCheckActions.esm.js +2 -0
  137. package/dist/components/Menus/useTrackActions.esm.js +2 -0
  138. package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
  139. package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +1 -1
  140. package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
  141. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  142. package/dist/components/PageCustomActions/PageCustomActions.esm.js +1 -1
  143. package/dist/components/PassRateTable/PassRateTable.esm.js +1 -1
  144. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
  145. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  146. package/dist/components/Router.esm.js +1 -1
  147. package/dist/components/RoutingPage/RoutingMainMenu.esm.js +2 -0
  148. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  149. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +2 -0
  150. package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +2 -0
  151. package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +2 -0
  152. package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +2 -0
  153. package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +2 -0
  154. package/dist/components/RoutingPage/index.esm.js +1 -1
  155. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +1 -1
  156. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +2 -0
  157. package/dist/components/SoundcheckMarkdownContent/ComponentRenders.esm.js +1 -1
  158. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +2 -0
  159. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js +2 -0
  160. package/dist/components/StatusBar/StatusBar.esm.js +2 -0
  161. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  162. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  163. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  164. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
  165. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
  166. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  167. package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
  168. package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
  169. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  170. package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
  171. package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
  172. package/dist/components/TechHealthTabs/NameColumn.esm.js +1 -1
  173. package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
  174. package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
  175. package/dist/components/TechInsights/SummaryTilesBUI.esm.js +2 -0
  176. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  177. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +2 -0
  178. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +2 -0
  179. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  180. package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
  181. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +2 -0
  182. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  183. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +1 -1
  184. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +2 -0
  185. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +2 -0
  186. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  187. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  188. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  189. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  190. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  191. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  192. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  193. package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +2 -0
  194. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  195. package/dist/components/TrackPage/TrackPageDeprecated.esm.js +1 -1
  196. package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +2 -0
  197. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +2 -0
  198. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +2 -0
  199. package/dist/components/TrackSelection/TrackSelection.esm.js +1 -1
  200. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +1 -1
  201. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
  202. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  203. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  204. package/dist/graphql/generated/index.esm.js +1 -0
  205. package/dist/hooks/filters/useFilters.esm.js +2 -0
  206. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  207. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
  208. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
  209. package/dist/hooks/usePagination.esm.js +1 -1
  210. package/dist/hooks/useSortTableLocalStorage.esm.js +2 -0
  211. package/dist/routes.esm.js +1 -1
  212. package/dist/utils/charts.esm.js +1 -1
  213. package/dist/utils/formStyles.esm.js +1 -1
  214. package/dist/utils/time.esm.js +1 -1
  215. package/package.json +21 -20
  216. package/dist/components/Cards/CurrentStatusCard/CurrentStatusCard.esm.js +0 -2
  217. package/dist/components/Cards/CurrentStatusCard/CurrentStatusCardRow.esm.js +0 -2
  218. package/dist/components/CheckPage/CheckInsightsPage.esm.js +0 -2
  219. package/dist/components/CheckStatusBar/CheckStatusBarCell.esm.js +0 -2
  220. package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +0 -2
  221. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js +0 -2
  222. package/dist/hooks/checks/useCheckStatusTotals.esm.js +0 -2
  223. package/dist/utils/checks.esm.js +0 -2
  224. /package/dist/{components/GroupHierarchySelector → utils}/getAllOwnedEntityCount.esm.js +0 -0
@@ -1,2 +1,2 @@
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{getEntitiesBucket as _e,getTracksBucket as Je}from"../../utils/helpers.esm.js";import{EmptyState as et}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@backstage/ui";import"../GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js";import"@remixicon/react";import{getAllOwnedEntityCount as tt}from"../GroupHierarchySelector/getAllOwnedEntityCount.esm.js";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?tt(f?.[r]):0,i=c?1:0;k({lcp:le,numberOfEntities:e,entitiesBucket:_e(e),numberOfTracks:i,tracksBucket:Je(i)})}},[y,z,ee,f,r,c,k,le]),!ze&&(!s||!r)?t(o,{className:a.root,children:t(et,{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};
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)}},[]),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};
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 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";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};
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
@@ -1,2 +1,2 @@
1
- import{jsxs as n,Fragment as c,jsx as e}from"react/jsx-runtime";import{Link as y}from"@backstage/core-components";import{useRouteRef as u}from"@backstage/core-plugin-api";import{TableCell as s,Box as o,Typography as d}from"@material-ui/core";import{makeStyles as N}from"@material-ui/core/styles";import{Skeleton as r}from"@material-ui/lab";import"react-circular-progressbar/dist/styles.css";import{useSearchParams as w}from"react-router-dom";import{trackCheckDetailsRouteRef as S}from"../../routes.esm.js";import{compactNumberFormatter as m}from"../../utils/formatters.esm.js";import{CheckStatusBar as B}from"../CheckStatusBar/CheckStatusBar.esm.js";import"../CheckStatusBar/CheckStatusBarBUI.esm.js";import"@backstage/ui";import"lodash";import"../CustomCell/CustomCell.esm.js";import{PassPercentageProgressbar as C}from"../PassingPercentProgressbar/PassPercentageProgressbar.esm.js";const R=N(t=>({checkContent:{display:"flex",alignItems:"center",gap:t.spacing(2),width:"100%",paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},checkStatus:{display:"flex",alignItems:"center",gap:t.spacing(1),minWidth:"fit-content"},checkName:{display:"flex",alignItems:"center"},checkNameLink:{color:"inherit",textDecoration:"none","&:hover":{textDecoration:"none"}},passingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},categoryBarSection:{display:"flex",flexDirection:"column",alignItems:"flex-end",width:"100%",justifyContent:"flex-end"},categoryBar:{"& .MuiBox-root > div":{height:"8px"},width:"100%"},skeleton:{backgroundColor:t.palette.action.hover},passingTextCell:{width:"100px",paddingRight:0,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}})),I=({check:t,status:a,theme:p,trackId:g})=>{const i=R(),x=u(S),[h]=w(),l=a?a.numberOfEntities-a.notApplicable-a.exempt:0,f=l>0?Math.round((a?.passed??0)/l*100):0,k=`${x({trackId:g,checkId:t.id})}${h.toString()?`?${h.toString()}`:""}`;return n(c,{children:[e(s,{style:{width:"120px",paddingRight:0},children:e(o,{className:i.checkStatus,children:a?e(C,{passPercentage:f}):n(c,{children:[e(r,{variant:"circle",width:24,height:24,className:i.skeleton}),e(r,{width:45,height:24,className:i.skeleton})]})})}),e(s,{style:{width:"300px",paddingRight:0},children:e(o,{className:i.checkName,children:e(y,{to:k,className:i.checkNameLink,children:e(d,{children:t.name})})})}),e(s,{style:{width:"250px",paddingRight:0},children:e(o,{className:i.categoryBarSection,children:a?e(o,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:e(B,{status:a,className:i.categoryBar})}):e(r,{variant:"rect",width:250,height:8,className:i.skeleton})})}),e(s,{style:{width:"100px",paddingRight:0,paddingTop:p.spacing(1),paddingBottom:p.spacing(1)},children:e(o,{className:i.passingText,children:a?n(c,{children:[n(d,{variant:"caption",children:[m(a.passed)," of"," ",m(l)]}),e(d,{variant:"caption",children:"passing"})]}):n(c,{children:[e(r,{width:60,height:16,className:i.skeleton}),e(r,{width:40,height:16,className:i.skeleton})]})})})]})};export{I as CheckRowContent};
1
+ import{jsxs as n,Fragment as r,jsx as e}from"react/jsx-runtime";import{Link as y}from"@backstage/core-components";import{useRouteRef as u}from"@backstage/core-plugin-api";import{TableCell as s,Box as c,Typography as d}from"@material-ui/core";import{makeStyles as N}from"@material-ui/core/styles";import{Skeleton as o}from"@material-ui/lab";import"react-circular-progressbar/dist/styles.css";import{useSearchParams as w}from"react-router-dom";import{trackCheckDetailsRouteRef as S}from"../../routes.esm.js";import{compactNumberFormatter as m}from"../../utils/formatters.esm.js";import{CheckStatusBar as B}from"../CheckStatusBar/CheckStatusBar.esm.js";import"../CheckStatusBar/CheckStatusBarBUI.esm.js";import{PassPercentageProgressbar as C}from"../PassingPercentProgressbar/PassPercentageProgressbar.esm.js";const R=N(t=>({checkContent:{display:"flex",alignItems:"center",gap:t.spacing(2),width:"100%",paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},checkStatus:{display:"flex",alignItems:"center",gap:t.spacing(1),minWidth:"fit-content"},checkName:{display:"flex",alignItems:"center"},checkNameLink:{color:"inherit",textDecoration:"none","&:hover":{textDecoration:"none"}},passingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},categoryBarSection:{display:"flex",flexDirection:"column",alignItems:"flex-end",width:"100%",justifyContent:"flex-end"},categoryBar:{"& .MuiBox-root > div":{height:"8px"},width:"100%"},skeleton:{backgroundColor:t.palette.action.hover},passingTextCell:{width:"100px",paddingRight:0,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)}})),I=({check:t,status:a,theme:h,trackId:g})=>{const i=R(),x=u(S),[p]=w(),l=a?a.numberOfEntities-a.notApplicable-a.exempt:0,f=l>0?Math.round((a?.passed??0)/l*100):0,k=`${x({trackId:g,checkId:t.id})}${p.toString()?`?${p.toString()}`:""}`;return n(r,{children:[e(s,{style:{width:"120px",paddingRight:0},children:e(c,{className:i.checkStatus,children:a?e(C,{passPercentage:f}):n(r,{children:[e(o,{variant:"circle",width:24,height:24,className:i.skeleton}),e(o,{width:45,height:24,className:i.skeleton})]})})}),e(s,{style:{width:"300px",paddingRight:0},children:e(c,{className:i.checkName,children:e(y,{to:k,className:i.checkNameLink,children:e(d,{children:t.name})})})}),e(s,{style:{width:"250px",paddingRight:0},children:e(c,{className:i.categoryBarSection,children:a?e(c,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:e(B,{status:a,className:i.categoryBar})}):e(o,{variant:"rect",width:250,height:8,className:i.skeleton})})}),e(s,{style:{width:"100px",paddingRight:0,paddingTop:h.spacing(1),paddingBottom:h.spacing(1)},children:e(c,{className:i.passingText,children:a?n(r,{children:[n(d,{variant:"caption",children:[m(a.passed)," of"," ",m(l)]}),e(d,{variant:"caption",children:"passing"})]}):n(r,{children:[e(o,{width:60,height:16,className:i.skeleton}),e(o,{width:40,height:16,className:i.skeleton})]})})})]})};export{I as CheckRowContent};
2
2
  //# sourceMappingURL=CheckRowContent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,jsx as a}from"react/jsx-runtime";import{Box as n,SearchField as l,Button as m,Icon as p}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{useNavigate as d}from"react-router-dom";const h=u(e=>({actionBar:{gridGap:e.spacing(1),display:"flex",alignItems:"center"}})),f=({searchValue:e,setSearchValue:r,createHref:t,canCreate:o})=>{const s=h(),i=d();return c(n,{className:s.actionBar,children:[a(l,{startCollapsed:!0,value:e,onChange:r,"aria-label":"Search Name"}),a(m,{isDisabled:!o,onClick:()=>i(t),iconStart:a(p,{name:"plus"}),children:"Create"})]})};export{f as ListPageCustomActions};
1
+ import{jsxs as s,jsx as e}from"react/jsx-runtime";import{Box as c,SearchField as l,Button as m}from"@backstage/ui";import{makeStyles as p}from"@material-ui/core";import{RiAddLine as u}from"@remixicon/react";import{useNavigate as d}from"react-router-dom";const f=p(()=>({actionBar:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center",justifyContent:"end"}})),h=({searchValue:a,setSearchValue:r,createHref:t,canCreate:i})=>{const o=f(),n=d();return s(c,{className:o.actionBar,children:[e(l,{value:a,onChange:r,"aria-label":"Search Name"}),e(m,{isDisabled:!i,onClick:()=>n(t),iconStart:e(u,{}),children:"Create"})]})};export{h as ListPageCustomActions};
2
2
  //# sourceMappingURL=ListPageCustomActions.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as m,jsx as o}from"react/jsx-runtime";import{MenuTrigger as l,ButtonIcon as c,Menu as s,MenuItem as d}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{RiMore2Line as p}from"@remixicon/react";const b=u(()=>({menuButton:{boxShadow:"none !important",backgroundColor:"inherit !important"}})),M=({placement:t,menuActions:i,disabled:e,label:r})=>{const a=b();return m(l,{children:[o(c,{isDisabled:e,variant:"secondary",className:a.menuButton,icon:o(p,{})}),o(s,{placement:t,"aria-label":r,children:i.map(n=>o(d,{iconStart:n.iconStart,onClick:n.onClick,id:n.id,children:n.label},n.id))})]})};export{M as SimpleMenu};
2
+ //# sourceMappingURL=SimpleMenu.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{useRouteRef as y}from"@backstage/core-plugin-api";import{usePermission as w}from"@backstage/plugin-permission-react";import{RiEditBoxLine as A,RiArchiveLine as L,RiDeleteBinLine as b}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as x,soundcheckCampaignDeletePermission as D}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as a,useMemo as E}from"react";import{useNavigate as M}from"react-router-dom";import{v4 as P}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as S}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as T}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as U}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as B}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{campaignEditRouteRef as N}from"../../routes.esm.js";import{useArchiveConfirmationModal as $}from"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const j=i=>{const n=y(N),m=M(),s=i?.archived,{showModal:d}=B(),{showArchiveModal:c}=$(),{mutate:p}=U(),{mutate:l}=T(),{mutate:u}=S(),{loading:f,allowed:h}=w({permission:x,resourceRef:i?.id}),{loading:g,allowed:v}=w({permission:D,resourceRef:i?.id}),C=a(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&l(i.id)},[d,l,i?.id,i?.name]),R=a(()=>{if(!i)return;const{track:e}=i,r={id:P(),ownerEntityRef:e.ownerEntityRef,description:e.description??"",name:e.name,documentationURL:e.documentationURL,type:"standard",levels:e.levels.map(o=>({checks:o.checks,description:o.description,name:o.name,ordinal:o.ordinal})),filter:e.filter??void 0,exclude:e.exclude??void 0,badgeType:"status",draft:e.draft??!1};p(r)},[i,p]),k=a(async()=>{if(!i?.id)return;const{saveTrack:e,confirmed:r}=await c({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});r&&(e&&R(),u(i.id))},[u,i?.id,i?.name,R,c]);return E(()=>{if(!i?.id)return[];const e=[];return!f&&h&&e.push({label:"Edit",id:"edit",onClick:()=>m(n({campaignId:i.id})),iconStart:t(A,{})}),!g&&v&&(s||e.push({label:"Archive",id:"archive",onClick:k,iconStart:t(L,{})}),e.push({label:"Delete",id:"delete",onClick:C,iconStart:t(b,{})})),e},[i?.id,n,v,h,k,C,s,g,f,m])};export{j as useCampaignActions};
2
+ //# sourceMappingURL=useCampaignActions.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as i}from"react/jsx-runtime";import{useRouteRef as u}from"@backstage/core-plugin-api";import{usePermission as p}from"@backstage/plugin-permission-react";import{RiExportLine as f,RiEditBoxLine as h,RiDeleteBinLine as k}from"@remixicon/react";import{soundcheckCheckUpdatePermission as C,soundcheckCheckDeletePermission as R}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as x,useMemo as E}from"react";import{useNavigate as b}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useDeleteCheck as D}from"../../hooks/checks/useDeleteCheck.esm.js";import{checkEditRouteRef as g}from"../../routes.esm.js";import{exportCheck as y}from"../../utils/export.esm.js";const L=e=>{const t=b(),r=u(g),{loading:m,allowed:s}=p({permission:C,resourceRef:e?.id}),{loading:n,allowed:c}=p({permission:R,resourceRef:e?.id}),{showModal:a}=w(),{mutate:l}=D(),d=x(async()=>{e?.id&&await a({title:"Delete Check",message:`Are you sure you want to delete the check '${e.name??e.id}'?`})&&l(e.id)},[a,e?.name,l,e?.id]);return E(()=>{if(!e)return[];const o=[{label:"Export",id:"export",onClick:()=>y(e),iconStart:i(f,{})}];return e.isEditable&&!m&&s&&o.push({label:"Edit",id:"edit",onClick:()=>t(r({checkId:e.id})),iconStart:i(h,{})}),e.isEditable&&!n&&c&&o.push({label:"Delete",id:"delete",onClick:d,iconStart:i(k,{})}),o},[c,s,e,r,d,n,m,t])};export{L as useCheckActions};
2
+ //# sourceMappingURL=useCheckActions.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{useRouteRef as R,useApi as g,configApiRef as b}from"@backstage/core-plugin-api";import{usePermission as y}from"@backstage/plugin-permission-react";import{RiExportLine as w,RiEditBoxLine as T,RiDeleteBinLine as x,RiRefreshLine as C}from"@remixicon/react";import{soundcheckTrackDeletePermission as D,soundcheckTrackUpdatePermission as E}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as h,useMemo as A}from"react";import{useNavigate as I}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useDeleteTrack as M}from"../../hooks/tracks/useDeleteTrack.esm.js";import{useRecertifyTrack as N}from"../../hooks/tracks/useRecertifyTrack.esm.js";import{trackEditRouteRef as O}from"../../routes.esm.js";import{exportTrack as S}from"../../utils/export.esm.js";const B=e=>{const{loading:s,allowed:c}=y({permission:D,resourceRef:e?.id}),{loading:a,allowed:n}=y({permission:E,resourceRef:e?.id}),{showModal:t}=L(),{mutate:m}=N(),{mutate:l}=M(),d=I(),u=R(O),p=g(b).getOptionalConfig("soundcheck.certifications.history");let i=p?.getOptionalBoolean("enable")?p?.getOptionalNumber("retentionTimeInDays")??120:1;i=Math.min(i,365);const f=h(async()=>{e?.id&&await t({title:"Recertify Track",message:`Are you sure you want to recertify track ${e.name??e.id}? It will erase existing certification data, which cannot be undone. New data will be generated for the past ${i} day(s), reflecting the track's current configuration. This process may take some time, you will be notified upon completion.`})&&m({trackId:e.id,numberOfDays:i})},[t,e?.id,e?.name,m,i]),k=h(async()=>{e?.id&&await t({title:"Delete Track",message:`Are you sure you want to delete track ${e.name??e.id}?`})&&l(e.id)},[t,e?.id,e?.name,l]);return A(()=>{if(!e)return[];const o=[{label:"Export",id:"export",onClick:()=>S(e),iconStart:r(w,{})}];return e.isEditable&&!a&&n&&o.push({label:"Edit",id:"edit",onClick:()=>d(u({trackId:e.id})),iconStart:r(T,{})}),e.isEditable&&!s&&c&&o.push({label:"Delete",id:"delete",onClick:k,iconStart:r(x,{})}),!a&&n&&o.push({label:"Recertify",id:"recertify",onClick:f,iconStart:r(C,{})}),o},[c,n,k,f,s,a,d,e,u])};export{B as useTrackActions};
2
+ //# sourceMappingURL=useTrackActions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as p}from"react/jsx-runtime";import{parseEntityRef as s}from"@backstage/catalog-model";import{humanizeEntityRef as d}from"@backstage/plugin-catalog-react";import{makeStyles as h,Grid as c,Typography as m}from"@material-ui/core";import{SoundcheckMarkdownContent as f}from"../../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{StyledTooltip as y}from"../../StyledTooltip/StyledTooltip.esm.js";const l=h(t=>({headerWrapper:{marginTop:t.spacing(.5)},entityRefName:{fontWeight:"bold"},iconWrapper:{padding:t.spacing(1,.5),display:"flex",alignItems:"center",justifyContent:"center"}})),g=({check:{name:t,description:i},icon:r,entityRef:n})=>{const o=l(),a=s(n);return p(c,{children:[p(c,{container:!0,direction:"row",spacing:1,wrap:"nowrap",children:[e("div",{className:o.iconWrapper,children:r}),e(m,{variant:"h6",className:o.headerWrapper,noWrap:!0,children:t})]}),e(c,{item:!0,children:e(m,{variant:"subtitle2",className:o.entityRefName,children:d(a,{defaultKind:a.kind})})}),e(f,{content:i})]})},k=({children:t,check:i,icon:r,entityRef:n})=>e(y,{arrow:!0,title:e(g,{check:i,icon:r,entityRef:n}),enterDelay:150,placement:"top",children:t});export{k as CheckCellTooltip,l as useStyles};
1
+ import{jsx as e,jsxs as p}from"react/jsx-runtime";import{parseEntityRef as d}from"@backstage/catalog-model";import{humanizeEntityRef as s}from"@backstage/plugin-catalog-react";import{makeStyles as h,Grid as c,Typography as m}from"@material-ui/core";import{SoundcheckMarkdownContentDeprecated as f}from"../../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{StyledTooltip as y}from"../../StyledTooltip/StyledTooltip.esm.js";const l=h(t=>({headerWrapper:{marginTop:t.spacing(.5)},entityRefName:{fontWeight:"bold"},iconWrapper:{padding:t.spacing(1,.5),display:"flex",alignItems:"center",justifyContent:"center"}})),g=({check:{name:t,description:i},icon:r,entityRef:n})=>{const o=l(),a=d(n);return p(c,{children:[p(c,{container:!0,direction:"row",spacing:1,wrap:"nowrap",children:[e("div",{className:o.iconWrapper,children:r}),e(m,{variant:"h6",className:o.headerWrapper,noWrap:!0,children:t})]}),e(c,{item:!0,children:e(m,{variant:"subtitle2",className:o.entityRefName,children:s(a,{defaultKind:a.kind})})}),e(f,{content:i})]})},k=({children:t,check:i,icon:r,entityRef:n})=>e(y,{arrow:!0,title:e(g,{check:i,icon:r,entityRef:n}),enterDelay:150,placement:"top",children:t});export{k as CheckCellTooltip,l as useStyles};
2
2
  //# sourceMappingURL=CheckCellTooltip.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as l,jsxs as p,Fragment as o}from"react/jsx-runtime";import{makeStyles as s,Typography as d}from"@material-ui/core";import{SoundcheckMarkdownContent as h}from"../../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{StyledTooltip as m}from"../../StyledTooltip/StyledTooltip.esm.js";import{CellWidths as k}from"../resultsTableUtils.esm.js";const f=s(e=>({cellWrapper:{display:"flex",alignItems:"flex-end",height:"100%"},cellText:{textOrientation:"mixed",transform:`translateX(${k.checkResult*.4}px) rotate(-55deg)`,transformOrigin:"center left",wordBreak:"keep-all",fontWeight:"bold","&:hover":{cursor:"default"}},cellLink:{overflow:"hidden",textOverflow:"ellipsis",width:"125px",display:"inline-block"},trackCell:{fontSize:e.typography.subtitle1.fontSize},levelCell:{fontSize:e.typography.subtitle2.fontSize},checkCell:{fontWeight:"normal"}}));var c=(e=>(e.track="track",e.level="level",e.check="check",e))(c||{});const v=({label:e,description:r,cellType:i})=>{const t=f(),n={track:t.trackCell,level:t.levelCell,check:t.checkCell},a=e?l(m,{title:p(o,{children:[l(d,{variant:"subtitle1",component:"div",children:e}),r&&l(h,{content:r})]}),arrow:!0,placement:"left-end",children:l("div",{className:`${t.cellLink} ${i?n[i]:""}`,children:e})}):l(o,{});return l("div",{className:t.cellWrapper,children:l("div",{className:t.cellText,children:a})})};export{v as CheckLabelCell,c as CheckLabelCellType};
1
+ import{jsx as l,jsxs as p,Fragment as o}from"react/jsx-runtime";import{makeStyles as d,Typography as m}from"@material-ui/core";import{SoundcheckMarkdownContentDeprecated as s}from"../../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{StyledTooltip as h}from"../../StyledTooltip/StyledTooltip.esm.js";import{CellWidths as k}from"../resultsTableUtils.esm.js";const f=d(e=>({cellWrapper:{display:"flex",alignItems:"flex-end",height:"100%"},cellText:{textOrientation:"mixed",transform:`translateX(${k.checkResult*.4}px) rotate(-55deg)`,transformOrigin:"center left",wordBreak:"keep-all",fontWeight:"bold","&:hover":{cursor:"default"}},cellLink:{overflow:"hidden",textOverflow:"ellipsis",width:"125px",display:"inline-block"},trackCell:{fontSize:e.typography.subtitle1.fontSize},levelCell:{fontSize:e.typography.subtitle2.fontSize},checkCell:{fontWeight:"normal"}}));var c=(e=>(e.track="track",e.level="level",e.check="check",e))(c||{});const v=({label:e,description:r,cellType:i})=>{const t=f(),n={track:t.trackCell,level:t.levelCell,check:t.checkCell},a=e?l(h,{title:p(o,{children:[l(m,{variant:"subtitle1",component:"div",children:e}),r&&l(s,{content:r})]}),arrow:!0,placement:"left-end",children:l("div",{className:`${t.cellLink} ${i?n[i]:""}`,children:e})}):l(o,{});return l("div",{className:t.cellWrapper,children:l("div",{className:t.cellText,children:a})})};export{v as CheckLabelCell,c as CheckLabelCellType};
2
2
  //# sourceMappingURL=CheckLabelCell.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{makeStyles as c}from"@material-ui/core";import{AlertPanel as f}from"../AlertPanel/AlertPanel.esm.js";import{NoCertifications as d,NoEntities as y}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@backstage/ui";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{OverviewTableContent as u}from"./OverviewTableContent.esm.js";const w=c(()=>({scrollContainer:{overflow:"auto",paddingBottom:0,width:"100%"}})),E=({facets:r,ownerEntityRef:e,hasError:o,kind:n,type:s,setError:p,isFixedGroup:m})=>{const l=w();if(o)return t(f,{severity:"error",title:o.message});const i="Use the groups drop-down list to select another group.";return r&&(r.types?.length??0)>0?r.types?.find(a=>a.count>0)?t("div",{className:l.scrollContainer,children:t(u,{facets:r,kind:n,type:s,setError:p,ownerEntityRef:e,hasError:o})}):t(d,{ownerEntityRef:e,selectGroupHint:i}):t(y,{ownerEntityRef:e,selectGroupHint:m?void 0:i})};export{E as OverviewTable};
1
+ import{jsx as t}from"react/jsx-runtime";import{makeStyles as c}from"@material-ui/core";import{AlertPanel as f}from"../AlertPanel/AlertPanel.esm.js";import{NoCertifications as d,NoEntities as y}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{OverviewTableContent as u}from"./OverviewTableContent.esm.js";const w=c(()=>({scrollContainer:{overflow:"auto",paddingBottom:0,width:"100%"}})),E=({facets:r,ownerEntityRef:e,hasError:o,kind:n,type:s,setError:p,isFixedGroup:m})=>{const l=w();if(o)return t(f,{severity:"error",title:o.message});const i="Use the groups drop-down list to select another group.";return r&&(r.types?.length??0)>0?r.types?.find(a=>a.count>0)?t("div",{className:l.scrollContainer,children:t(u,{facets:r,kind:n,type:s,setError:p,ownerEntityRef:e,hasError:o})}):t(d,{ownerEntityRef:e,selectGroupHint:i}):t(y,{ownerEntityRef:e,selectGroupHint:m?void 0:i})};export{E as OverviewTable};
2
2
  //# sourceMappingURL=OverviewTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as P,Fragment as D}from"react/jsx-runtime";import{useRouteRef as M}from"@backstage/core-plugin-api";import{entityRouteRef as q}from"@backstage/plugin-catalog-react";import{makeStyles as B,Grid as I}from"@material-ui/core";import{useContext as J,useEffect as y,useState as K,useRef as Q,useLayoutEffect as U,useMemo as X}from"react";import{VariableSizeGrid as Y}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useTrackOverviewForOwner as Z}from"../../hooks/certifications/useTrackOverviewForOwner.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{EmptyState as _}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@backstage/ui";import"../../routes.esm.js";import"../OverviewPage/OverviewPage.esm.js";import"@spotify/backstage-plugin-core";import"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContext as ee}from"../OverviewPage/OverviewPageContent.esm.js";import"../Pagination/Pagination.esm.js";import{useCursorPagination as te,CursorPagination as re}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as oe}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as ie}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as ne}from"./ResultsTableHeader.esm.js";import{generateRowsPivoted as ae,generateRows as le,generateHeaderRowPivoted as se,generateHeaderRow as me}from"./ResultsTableRow.esm.js";import{RowHeights as E,CellWidths as S,calculateTableWidth as ue}from"./resultsTableUtils.esm.js";import pe from"./useWindowDimensions.esm.js";const W=25,ce=B(i=>({table:{backgroundColor:i.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:i.palette.background.paper}})),de=({setError:i,kind:p,type:l,ownerEntityRef:t})=>{const{cursor:x,pageSize:R,...c}=te({defaultPageSize:W,label:"entitiesPerPage"}),{debouncedSearchValue:s,pivot:m}=J(ee),{data:e,isLoading:d,isError:b}=Z(t,{kind:p,type:l==="all"?null:l},R,x,s);y(()=>{c.setCursor(""),c.setCurrentPage(0)},[s]);const k=ce(),g=M(q);y(()=>{i?.(b?new Error("Error loading track overview"):void 0)},[b,i]);const[H,z]=K(0),{height:T}=pe(),n=Q(null);U(()=>{e&&t&&n?.current&&z(n.current.clientWidth?n.current.clientWidth-16:100)},[n,e,t]);const{rows:h,headerRow:f,tableWidth:w,entityRefsWithPadding:N,getRowHeight:O,columnCount:V}=X(()=>{if(d||!e||!t)return{};const{tracks:a,entityRefs:r}=e;if(!r)return{};const u=r.length>=25?r:[...r,...Array.from({length:25-r.length},()=>{})],C=m?ae(a,r,g):le(a,u,g),v=C[0]?.cells?.length??u.length+1,G=m?se(a):me(u),L=ue(v-1)+60;return{rows:C,headerRow:G,tableWidth:L,entityRefsWithPadding:u,getRowHeight:j=>C[j]?.height??E.check,columnCount:v}},[e,g,d,t,m]);if(d)return o(ie,{});if(!e||!t)return null;const{totalCount:$,endCursor:A,prevCursor:F}=e;return!f||!w||!N||!h?.length?s?o(_,{title:"No Entities Found",description:`No entities found with name containing: '${s}'`}):null:P("div",{ref:n,children:[o(I,{"aria-label":`Check results for ${l??p}`,item:!0,xs:12,className:k.tableContainer,children:H>0&&P(D,{children:[o(ne,{headerRow:f,gridWidth:w}),o(Y,{className:k.table,columnCount:V,columnWidth:a=>a===0?S.trackTitle:S.checkResult,rowCount:h.length,rowHeight:O,height:T*.7-E.paginationControl-f.height,width:w,children:oe(h)},m?"entityView":"checkView")]})},`${p}|${l??""}`),o(re,{...c,totalCount:$,defaultPageSize:W,endCursor:A,prevCursor:F,pageSize:R,labelRowsPerPage:"Entities per page:"})]})};export{de as ResultsTable};
1
+ import{jsx as o,jsxs as P,Fragment as D}from"react/jsx-runtime";import{useRouteRef as M}from"@backstage/core-plugin-api";import{entityRouteRef as q}from"@backstage/plugin-catalog-react";import{makeStyles as B,Grid as I}from"@material-ui/core";import{useContext as J,useEffect as y,useState as K,useRef as Q,useLayoutEffect as U,useMemo as X}from"react";import{VariableSizeGrid as Y}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useTrackOverviewForOwner as Z}from"../../hooks/certifications/useTrackOverviewForOwner.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";import{EmptyState as _}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import"../OverviewPage/OverviewPage.esm.js";import"@spotify/backstage-plugin-core";import"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContext as ee}from"../OverviewPage/OverviewPageContent.esm.js";import"../Pagination/Pagination.esm.js";import{useCursorPagination as te,CursorPagination as re}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as oe}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as ie}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as ne}from"./ResultsTableHeader.esm.js";import{generateRowsPivoted as ae,generateRows as le,generateHeaderRowPivoted as me,generateHeaderRow as se}from"./ResultsTableRow.esm.js";import{RowHeights as E,CellWidths as S,calculateTableWidth as ue}from"./resultsTableUtils.esm.js";import pe from"./useWindowDimensions.esm.js";const W=25,ce=B(i=>({table:{backgroundColor:i.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:i.palette.background.paper}})),de=({setError:i,kind:p,type:l,ownerEntityRef:t})=>{const{cursor:x,pageSize:R,...c}=te({defaultPageSize:W,label:"entitiesPerPage"}),{debouncedSearchValue:m,pivot:s}=J(ee),{data:e,isLoading:d,isError:b}=Z(t,{kind:p,type:l==="all"?null:l},R,x,m);y(()=>{c.setCursor(""),c.setCurrentPage(0)},[m]);const k=ce(),g=M(q);y(()=>{i?.(b?new Error("Error loading track overview"):void 0)},[b,i]);const[H,z]=K(0),{height:T}=pe(),n=Q(null);U(()=>{e&&t&&n?.current&&z(n.current.clientWidth?n.current.clientWidth-16:100)},[n,e,t]);const{rows:h,headerRow:f,tableWidth:w,entityRefsWithPadding:N,getRowHeight:O,columnCount:V}=X(()=>{if(d||!e||!t)return{};const{tracks:a,entityRefs:r}=e;if(!r)return{};const u=r.length>=25?r:[...r,...Array.from({length:25-r.length},()=>{})],C=s?ae(a,r,g):le(a,u,g),v=C[0]?.cells?.length??u.length+1,G=s?me(a):se(u),L=ue(v-1)+60;return{rows:C,headerRow:G,tableWidth:L,entityRefsWithPadding:u,getRowHeight:j=>C[j]?.height??E.check,columnCount:v}},[e,g,d,t,s]);if(d)return o(ie,{});if(!e||!t)return null;const{totalCount:$,endCursor:A,prevCursor:F}=e;return!f||!w||!N||!h?.length?m?o(_,{title:"No Entities Found",description:`No entities found with name containing: '${m}'`}):null:P("div",{ref:n,children:[o(I,{"aria-label":`Check results for ${l??p}`,item:!0,xs:12,className:k.tableContainer,children:H>0&&P(D,{children:[o(ne,{headerRow:f,gridWidth:w}),o(Y,{className:k.table,columnCount:V,columnWidth:a=>a===0?S.trackTitle:S.checkResult,rowCount:h.length,rowHeight:O,height:T*.7-E.paginationControl-f.height,width:w,children:oe(h)},s?"entityView":"checkView")]})},`${p}|${l??""}`),o(re,{...c,totalCount:$,defaultPageSize:W,endCursor:A,prevCursor:F,pageSize:R,labelRowsPerPage:"Entities per page:"})]})};export{de as ResultsTable};
2
2
  //# sourceMappingURL=ResultsTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as o,jsx as e}from"react/jsx-runtime";import{Box as n,Button as s,Icon as c,SearchField as i}from"@backstage/ui";import{makeStyles as l}from"@material-ui/core";const u=l(()=>({buttonGroup:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center"}})),m=({searchValue:t,setSearchValue:a})=>{const r=u();return o(n,{className:r.buttonGroup,children:[e(s,{iconStart:e(c,{name:"filter"}),variant:"secondary",children:"Filter"}),e(i,{value:t,onChange:a,"aria-label":"Search",style:{width:"auto"}})]})};export{m as PageCustomActions};
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Flex as m,TagGroup as p,Tag as d,Box as g,SearchField as h}from"@backstage/ui";import{makeStyles as f}from"@material-ui/core";import{FilterMenu as b}from"../FilterMenu/FilterMenu.esm.js";const S=f(()=>({buttonGroup:{gap:"var(--bui-space-2)",display:"flex",alignItems:"center"},tagGroup:{"@global":{".bui-TagList":{justifyContent:"end !important"}}}})),v=({searchValue:s,setSearchValue:o,filters:i,selected:c,setSelected:n,selectedTags:a,onRemoveTag:u})=>{const l=S();return r(m,{align:"center",gap:"2",children:[a.length>0&&e(p,{"aria-label":"Selected Tags",items:a,onRemove:u,className:l.tagGroup,children:a.map(t=>e(d,{id:t.value,children:t.label},t.value))}),r(g,{className:l.buttonGroup,children:[e(b,{filters:i,selected:c,setSelected:n}),e(h,{value:s,onChange:o,"aria-label":"Search",style:{width:"auto"},placeholder:"Search"})]})]})};export{v as PageCustomActions};
2
2
  //# sourceMappingURL=PageCustomActions.esm.js.map
@@ -1,4 +1,4 @@
1
- import{jsx as r,jsxs as p}from"react/jsx-runtime";import{Paper as y,Table as R,TableHead as S,TableRow as h,TableCell as u,TableBody as $,TablePagination as H}from"@material-ui/core";import{makeStyles as N}from"@material-ui/core/styles";import{useState as b,useEffect as j}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"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as L}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{Loading as z}from"../TechHealth/Loading/Loading.esm.js";const B=N(o=>({paper:{width:"100%",boxShadow:"none",border:`1px solid ${o.palette.divider}`,borderRadius:o.shape.borderRadius},tableHeaderCell:{fontWeight:"bold"}})),D=({data:o,columns:d,showsCheckData:n})=>{const l=B(),[s,a]=b(0),[t,f]=b(10),{data:g,isLoading:C}=L({ids:n?o.map(e=>e.id):[]});if(j(()=>{a(0)},[o.length]),C)return r(z,{});const w=(e,i)=>{a(i)},P=e=>{f(+e.target.value),a(0)},m=s*t,T=m+t,k=e=>`Cannot view detail: Check exists in results data only. That is, a check
1
+ import{jsx as r,jsxs as p}from"react/jsx-runtime";import{Paper as y,Table as R,TableHead as S,TableRow as h,TableCell as u,TableBody as $,TablePagination as H}from"@material-ui/core";import{makeStyles as N}from"@material-ui/core/styles";import{useState as b,useEffect as j}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"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as L}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{Loading as z}from"../TechHealth/Loading/Loading.esm.js";const B=N(o=>({paper:{width:"100%",boxShadow:"none",border:`1px solid ${o.palette.divider}`,borderRadius:o.shape.borderRadius},tableHeaderCell:{fontWeight:"bold"}})),D=({data:o,columns:d,showsCheckData:n})=>{const l=B(),[s,a]=b(0),[t,f]=b(10),{data:g,isLoading:C}=L({ids:n?o.map(e=>e.id):[]});if(j(()=>{a(0)},[o.length]),C)return r(z,{});const w=(e,i)=>{a(i)},P=e=>{f(+e.target.value),a(0)},m=s*t,T=m+t,k=e=>`Cannot view detail: Check exists in results data only. That is, a check
2
2
  with the id '${e}' is not defined in any yaml files nor was such a
3
3
  check created through Soundcheck's UI.`,v=(e,i)=>{if(!e.renderCell)return i[e.id];if(e.id==="action"&&n){const c=g?.edges.find(x=>x.node.id===i.id)!==void 0;return e.renderCell(i,!c,c?void 0:k(i.id))}return e.renderCell(i)};return p(y,{className:l.paper,children:[p(R,{size:"small",children:[r(S,{children:r(h,{children:d.map(e=>r(u,{className:l.tableHeaderCell,children:e.label},`header-${e.id}`))})}),r($,{children:o.slice(m,T).map(e=>r(h,{children:d.map(i=>r(u,{children:v(i,e)},`cell-${i.id}`))},e.id))})]}),r(H,{rowsPerPageOptions:[10,25,50],component:"div",count:o.length,rowsPerPage:t,page:s,onPageChange:w,onRowsPerPageChange:P})]})};export{D as PassRateTable};
4
4
  //# sourceMappingURL=PassRateTable.esm.js.map
@@ -1,3 +1,3 @@
1
- import{jsxs as n,jsx as e}from"react/jsx-runtime";import{Content as T}from"@backstage/core-components";import{useApi as u,featureFlagsApiRef as v,configApiRef as z,useRouteRef as r}from"@backstage/core-plugin-api";import{usePermission as S}from"@backstage/plugin-permission-react";import{Typography as p,Grid as t,Accordion as H,AccordionSummary as I,AccordionDetails as L}from"@material-ui/core";import f from"@material-ui/icons/BarChart";import j from"@material-ui/icons/CheckCircle";import D from"@material-ui/icons/Computer";import Q from"@material-ui/icons/ExpandMore";import V from"@material-ui/icons/Flag";import W from"@material-ui/icons/Timeline";import{soundcheckCollectorReadPermission as q}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as E,useEffect as F}from"react";import{useLCPReporting as O}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as B}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationsPageRouteRef as G,tracksPageRouteRef as M,checksPageRouteRef as $,campaignsPageRouteRef as J,techHealthRouteRef as K,techInsightsPageRouteRef as U}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as X}from"../SoundcheckHeader/useHeader.esm.js";import{QuickstartCardBase as a}from"./QuickstartCardBase.esm.js";import{getQuickstartStyles as Y}from"./styles.esm.js";import{WelcomeHelpSection as Z}from"./WelcomeHelpSection.esm.js";const _=()=>{const d=E(()=>({routeName:"soundcheck-quickstart"}),[]),{reportContentLoaded:m}=B(d),{reporter:g}=O(d),o=Y();X({title:"Welcome to Soundcheck!",description:"Soundcheck lets you define and monitor the tech health of your organization. What insights do you need today?"});const i=u(v),R=u(z).getOptionalStringArray("soundcheck.flags"),l=i.getRegisteredFlags(),{loading:s,allowed:k}=S({permission:q}),y=(!l.find(c=>c.name==="soundcheck-enable-collectors")||i.isActive("soundcheck-enable-collectors"))&&!s&&k,x=(!l.find(c=>c.name==="soundcheck-enable-tech-health")||i.isActive("soundcheck-enable-tech-health"))&&!R?.includes("soundcheck-disable-tech-health"),N=r(G),b=r(M),C=r($),P=r(J),A=r(K),w=r(U),h=g?.getLCPValue();return F(()=>{s||m({lcp:h})},[s,m,h]),n(T,{className:o.introTitle,children:[e(p,{className:o.welcomeSection,children:"This is your starting point for exploring and managing your tech health initiatives. Here are some key areas to get you started:"}),n(t,{container:!0,direction:"row",justifyContent:"flex-start","aria-label":"getting-started-items",className:o.grid,spacing:2,children:[e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Tech Insights",routeRef:w,icon:e(f,{}),description:`Visualize and analyze your technology landscape across teams and
2
- components.`})}),x&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Tech Health",routeRef:A,icon:e(f,{}),description:"Detailed query and analysis tool across teams, components, tracks, and checks."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Campaigns",routeRef:P,icon:e(V,{}),description:"Organize and manage coordinated initiatives across your organization."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Checks",routeRef:C,icon:e(j,{}),description:"Checks are comparisons between defined acceptable fact values and actual fact values."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Tracks",routeRef:b,icon:e(W,{}),description:"Tracks encourage alignment to architectural best practices and standards."})}),y&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Integrations",routeRef:N,icon:e(D,{}),description:"Integrations collect raw data about your components for use in checks and tracks."})})]}),n(H,{className:o.accordion,children:[e(I,{expandIcon:e(Q,{}),"aria-controls":"howdoi-content",id:"howdoi-header",children:e(p,{variant:"h5",children:"How Do I...?"})}),e(L,{children:e(Z,{})})]})]})};export{_ as QuickstartPage};
1
+ import{jsxs as n,jsx as e}from"react/jsx-runtime";import{Content as T}from"@backstage/core-components";import{useApi as u,featureFlagsApiRef as v,configApiRef as S,useRouteRef as r}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{Typography as p,Grid as t,Accordion as H,AccordionSummary as I,AccordionDetails as L}from"@material-ui/core";import f from"@material-ui/icons/BarChart";import j from"@material-ui/icons/CheckCircle";import D from"@material-ui/icons/Computer";import Q from"@material-ui/icons/ExpandMore";import V from"@material-ui/icons/Flag";import W from"@material-ui/icons/Timeline";import{soundcheckCollectorReadPermission as q}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as E,useEffect as F}from"react";import{useLCPReporting as G}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as O}from"../../hooks/useLoadTimeReporting.esm.js";import{integrationsPageRouteRef as B,tracksPageRouteRef as M,checksPageRouteRef as J,campaignsPageRouteRef as K,techHealthRouteRef as U,techInsightsPageRouteRef as X}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Y}from"../SoundcheckHeader/useHeader.esm.js";import{QuickstartCardBase as a}from"./QuickstartCardBase.esm.js";import{getQuickstartStyles as Z}from"./styles.esm.js";import{WelcomeHelpSection as _}from"./WelcomeHelpSection.esm.js";const $=()=>{const d=E(()=>({routeName:"soundcheck-quickstart"}),[]),{reportContentLoaded:m}=O(d),{reporter:g}=G(d),o=Z();Y({title:"Welcome to Soundcheck!",description:"Soundcheck lets you define and monitor the tech health of your organization. What insights do you need today?"});const i=u(v),R=u(S).getOptionalStringArray("soundcheck.flags"),l=i.getRegisteredFlags(),{loading:s,allowed:k}=z({permission:q}),y=(!l.find(c=>c.name==="soundcheck-enable-collectors")||i.isActive("soundcheck-enable-collectors"))&&!s&&k,x=(!l.find(c=>c.name==="soundcheck-enable-tech-health")||i.isActive("soundcheck-enable-tech-health"))&&!R?.includes("soundcheck-disable-tech-health"),N=r(B),b=r(M),C=r(J),P=r(K),A=r(U),w=r(X),h=g?.getLCPValue();return F(()=>{s||m({lcp:h})},[s,m,h]),n(T,{className:o.introTitle,children:[e(p,{className:o.welcomeSection,children:"This is your starting point for exploring and managing your tech health initiatives. Here are some key areas to get you started:"}),n(t,{container:!0,direction:"row",justifyContent:"flex-start","aria-label":"getting-started-items",className:o.grid,spacing:2,children:[e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Tech Insights",routeRef:w,icon:e(f,{}),description:`Visualize and analyze your technology landscape across teams and
2
+ components.`})}),x&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Tech Health",routeRef:A,icon:e(f,{}),description:"Detailed query and analysis tool across teams, components, tracks, and checks."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Campaigns",routeRef:P,icon:e(V,{}),description:"Organize and manage coordinated initiatives across your organization."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Checks",routeRef:C,icon:e(j,{}),description:"Checks are comparisons between defined acceptable fact values and actual fact values."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Tracks",routeRef:b,icon:e(W,{}),description:"Tracks encourage alignment to architectural best practices and standards."})}),y&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(a,{header:"Integrations",routeRef:N,icon:e(D,{}),description:"Integrations collect raw data about your components for use in checks and tracks."})})]}),n(H,{className:o.accordion,children:[e(I,{expandIcon:e(Q,{}),"aria-controls":"howdoi-content",id:"howdoi-header",children:e(p,{variant:"h5",children:"How Do I...?"})}),e(L,{children:e(_,{})})]})]})};export{$ as QuickstartPage};
3
3
  //# sourceMappingURL=QuickstartPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import{makeStyles as n,LinearProgress as p}from"@material-ui/core";import{useState as a}from"react";import s from"react-use/lib/useDebounce";import d from"react-use/lib/useUnmount";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import{useIsFetching as c}from"@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{FadeIn as f}from"../FadeIn/FadeIn.esm.js";const l=n(t=>({indicator:{position:"absolute",width:"100%",zIndex:t.zIndex.speedDial}})),h=()=>{const t=c(),r=l(),[o,e]=a(!!t),[u,m]=s(()=>{e(!!t)},250,[t]);return d(m),o?i(f,{children:i("div",{className:r.indicator,children:i(p,{variant:"indeterminate","data-testid":"refetching-indicator"})})}):null};export{h as RefetchingIndicator};
1
+ import{jsx as i}from"react/jsx-runtime";import{makeStyles as n,LinearProgress as p}from"@material-ui/core";import{useState as a}from"react";import s from"react-use/lib/useDebounce";import d from"react-use/lib/useUnmount";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import{useIsFetching as c}from"@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"react-use/lib/useLocalStorage";import{FadeIn as f}from"../FadeIn/FadeIn.esm.js";const l=n(t=>({indicator:{position:"absolute",width:"100%",zIndex:t.zIndex.speedDial}})),h=()=>{const t=c(),r=l(),[o,e]=a(!!t),[u,m]=s(()=>{e(!!t)},250,[t]);return d(m),o?i(f,{children:i("div",{className:r.indicator,children:i(p,{variant:"indeterminate","data-testid":"refetching-indicator"})})}):null};export{h as RefetchingIndicator};
2
2
  //# sourceMappingURL=RefetchingIndicator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as s,Fragment as d}from"react/jsx-runtime";import{useRouteRef as p,useRouteRefParams as h}from"@backstage/core-plugin-api";import{useEntity as m}from"@backstage/plugin-catalog-react";import{SecretsContextProvider as L}from"@backstage/plugin-scaffolder-react";import{Routes as N,Route as l,Navigate as f}from"react-router-dom";import{ResultState as T}from"../graphql/generated/index.esm.js";import{useAllCertifications as S}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as C}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistTrackCheckRouteRef as x,certificationPlaylistTrackRouteRef as k,certificationPlaylistRouteRef as R,certificationTrackRouteRef as y,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as n}from"./EntityContent/EntityContent.esm.js";const b=()=>{const{entity:i}=m(),e=p(R),a=p(y),{isLoading:r,data:o}=P(i),{isLoading:c,data:A}=S(i);if(r||c)return null;const u=o?.[0]?.id,I=A?.[0]?.track.id;return!u&&!I?null:t(f,{to:u?e({playlistId:u}):a({trackId:I}),replace:!0})},v=()=>{const{entity:i}=m(),{playlistId:e}=h(R),a=p(k),{data:r}=P(i),o=r?.find(c=>c.id===e)?.trackIds[0];return o?t(f,{to:a({playlistId:e,trackId:o}),replace:!0}):null},F=i=>(i?.levels?.flatMap(e=>e.checks??[])??[]).filter(e=>e.result!==T.Exempt&&e.result!==T.NotApplicable)[0],E=()=>{const{entity:i}=m(),{playlistId:e,trackId:a}=h(k),{data:r}=C(i,a),o=p(x),c=F(r)?.id??r?.levels[0]?.checks[0]?.id;return c?t(f,{to:o({playlistId:e,trackId:a,checkId:c}),replace:!0}):null},j=()=>{const{entity:i}=m(),{trackId:e}=h(y),a=p(g),{data:r}=C(i,e),o=F(r)?.id??r?.levels?.find(c=>c.checks.length>0)?.checks[0].id;return o?t(f,{to:a({trackId:e,checkId:o}),replace:!0}):null},D=()=>t(L,{children:s(N,{children:[t(l,{path:x.path,element:t(n,{})}),t(l,{path:k.path,element:s(d,{children:[t(n,{}),t(E,{})]})}),t(l,{path:R.path,element:s(d,{children:[t(n,{}),t(v,{})]})}),t(l,{path:y.path,element:s(d,{children:[t(n,{}),t(j,{})]})}),t(l,{path:g.path,element:t(n,{})}),t(l,{path:"/",element:s(d,{children:[t(n,{}),t(b,{})]})})]})});export{j as RedirectToFirstCheck,v as RedirectToFirstPlaylistTrack,E as RedirectToFirstPlaylistTrackCheck,D as Router};
1
+ import{jsx as t,jsxs as s,Fragment as d}from"react/jsx-runtime";import{useRouteRef as p,useRouteRefParams as h}from"@backstage/core-plugin-api";import{useEntity as m}from"@backstage/plugin-catalog-react";import{SecretsContextProvider as L}from"@backstage/plugin-scaffolder-react";import{Routes as N,Route as l,Navigate as f}from"react-router-dom";import{ResultState as T}from"../graphql/generated/index.esm.js";import{useAllCertifications as S}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as C}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import{certificationPlaylistTrackCheckRouteRef as x,certificationPlaylistTrackRouteRef as k,certificationPlaylistRouteRef as R,certificationTrackRouteRef as y,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as n}from"./EntityContent/EntityContent.esm.js";const b=()=>{const{entity:i}=m(),e=p(R),a=p(y),{isLoading:r,data:o}=P(i),{isLoading:c,data:A}=S(i);if(r||c)return null;const u=o?.[0]?.id,I=A?.[0]?.track.id;return!u&&!I?null:t(f,{to:u?e({playlistId:u}):a({trackId:I}),replace:!0})},v=()=>{const{entity:i}=m(),{playlistId:e}=h(R),a=p(k),{data:r}=P(i),o=r?.find(c=>c.id===e)?.trackIds[0];return o?t(f,{to:a({playlistId:e,trackId:o}),replace:!0}):null},F=i=>(i?.levels?.flatMap(e=>e.checks??[])??[]).filter(e=>e.result!==T.Exempt&&e.result!==T.NotApplicable)[0],E=()=>{const{entity:i}=m(),{playlistId:e,trackId:a}=h(k),{data:r}=C(i,a),o=p(x),c=F(r)?.id??r?.levels[0]?.checks[0]?.id;return c?t(f,{to:o({playlistId:e,trackId:a,checkId:c}),replace:!0}):null},j=()=>{const{entity:i}=m(),{trackId:e}=h(y),a=p(g),{data:r}=C(i,e),o=F(r)?.id??r?.levels?.find(c=>c.checks.length>0)?.checks[0].id;return o?t(f,{to:a({trackId:e,checkId:o}),replace:!0}):null},D=()=>t(L,{children:s(N,{children:[t(l,{path:x.path,element:t(n,{})}),t(l,{path:k.path,element:s(d,{children:[t(n,{}),t(E,{})]})}),t(l,{path:R.path,element:s(d,{children:[t(n,{}),t(v,{})]})}),t(l,{path:y.path,element:s(d,{children:[t(n,{}),t(j,{})]})}),t(l,{path:g.path,element:t(n,{})}),t(l,{path:"/",element:s(d,{children:[t(n,{}),t(b,{})]})})]})});export{j as RedirectToFirstCheck,v as RedirectToFirstPlaylistTrack,E as RedirectToFirstPlaylistTrackCheck,D as Router};
2
2
  //# sourceMappingURL=Router.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as n,Fragment as b,jsx as e}from"react/jsx-runtime";import{useApi as t,featureFlagsApiRef as g,configApiRef as f}from"@backstage/core-plugin-api";import{usePermission as k}from"@backstage/plugin-permission-react";import{Tabs as v,TabList as x,Tab as i}from"@backstage/ui";import{makeStyles as w}from"@material-ui/core";import{soundcheckCollectorReadPermission as y}from"@spotify/backstage-plugin-soundcheck-common";const A=w(()=>({techHealth:{padding:"var(--bui-space-4) var(--bui-space-3) 0 var(--bui-space-4)"},overview:{padding:"var(--bui-space-4) var(--bui-space-3) 0 var(--bui-space-4)"},tabList:{display:"flex",flexDirection:"row","@media (max-width:768px)":{flexDirection:"column"},background:"var(--bui-bg-surface-1)",padding:"0 var(--bui-space-1)",margin:"0 var(--bui-space-2)",borderRadius:"var(--bui-space-1)",boxShadow:"1px 1px 1px var(--bui-bg-surface-2)"},tabs:{"& .bui-TabPanel":{paddingInline:"0 !important"},"@media (max-width:768px)":{"& .bui-TabActive":{display:"none"}}}})),S=({children:h})=>{const r=A(),c=t(g),d=t(f).getOptionalStringArray("soundcheck.flags"),s=c.getRegisteredFlags(),o=(!s.find(a=>a.name==="soundcheck-enable-tech-health")||c.isActive("soundcheck-enable-tech-health"))&&!d?.includes("soundcheck-disable-tech-health"),l=!s.find(a=>a.name==="soundcheck-enable-campaigns")||c.isActive("soundcheck-enable-campaigns"),{loading:p,allowed:u}=k({permission:y}),m=(!s.find(a=>a.name==="soundcheck-enable-collectors")||c.isActive("soundcheck-enable-collectors"))&&!p&&u;return n(b,{children:[e(v,{className:r.tabs,children:n(x,{className:r.tabList,children:[e(i,{id:"tech-insights",href:"/soundcheck/tech-insights",matchStrategy:"prefix",children:"Tech Insights"}),e(i,{id:"checks",href:"/soundcheck/checks",matchStrategy:"prefix",children:"Checks"}),e(i,{id:"tracks",href:"/soundcheck/tracks",matchStrategy:"prefix",children:"Tracks"}),l&&e(i,{id:"campaigns",href:"/soundcheck/campaigns",matchStrategy:"prefix",children:"Campaigns"}),m&&e(i,{id:"integrations",href:"/soundcheck/integrations",matchStrategy:"prefix",children:"Integrations"}),e(i,{id:"overview",href:"/soundcheck/overview",children:"Classic Overview"}),o&&e(i,{id:"tech-health",href:"/soundcheck/tech-health",children:"Tech Health"})]})}),h]})};export{S as RoutingMainMenu};
2
+ //# sourceMappingURL=RoutingMainMenu.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as a,Fragment as h}from"react/jsx-runtime";import{Page as j,TabbedLayout as r}from"@backstage/core-components";import{useApi as k,featureFlagsApiRef as G,configApiRef as Q}from"@backstage/core-plugin-api";import{usePermission as m}from"@backstage/plugin-permission-react";import{makeStyles as W,Box as d}from"@material-ui/core";import{SpotifyLicenseBanner as q}from"@spotify/backstage-plugin-core";import{soundcheckCampaignCreatePermission as M,soundcheckCollectorReadPermission as U,soundcheckCheckCreatePermission as V,soundcheckTrackCreatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as z}from"react-helmet";import{Routes as J,Route as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{UserProvider as K}from"../../contexts/UserProvider.esm.js";import X from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as Y}from"../../hooks/useSoundcheckAlert.esm.js";import{CampaignPage as Z}from"../CampaignPage/CampaignPage.esm.js";import{CampaignsPage as _}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as ee}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as te}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as ie}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as re}from"../CheckPage/CheckEditPage.esm.js";import{CheckInsightsPage as u}from"../CheckPage/CheckInsightsPage.esm.js";import{ChecksTab as ae}from"../ChecksTab/ChecksTab.esm.js";import{CheckTemplatesPage as oe}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import{CollectorPage as ne}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as ce}from"../CollectorPage/CollectorDetailsPage.esm.js";import{CollectorsPage as le}from"../CollectorsPage/CollectorsPage.esm.js";import{HierarchicalTechInsightsPage as se}from"../HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js";import{OverviewPageContent as me}from"../OverviewPage/OverviewPageContent.esm.js";import{QuickstartPage as C}from"../QuickstartPage/QuickstartPage.esm.js";import{SoundcheckHeader as he}from"../SoundcheckHeader/SoundcheckHeader.esm.js";import{SoundcheckHeaderProvider as de}from"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{SoundcheckQueryClientProvider as pe}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{TechHealth as ge}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage as fe}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as ke}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as ue}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as Ce}from"../TrackPage/TrackPage.esm.js";import{TracksTab as Pe}from"../TracksTab/TracksTab.esm.js";import{NewFeatureTab as be}from"./NewFeatureTab.esm.js";const P=W(o=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}},pageContent:{display:"flex",flexDirection:"row",flexGrow:1},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",maxWidth:"100%","& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",padding:`${o.spacing(3)}px !important`}}})),b=({title:o="Soundcheck",children:s})=>{const c=P();return e(Y,{children:e(K,{children:e(pe,{children:e(de,{defaultTitle:o,children:e(X,{children:e(d,{className:c.root,children:a(j,{themeId:"website",children:[e(q,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),e(he,{documentTitle:o}),e(d,{className:c.pageContent,children:e(d,{className:c.pageLayout,children:s})})]})})})})})})})},ve=({title:o="Soundcheck",integrations:s})=>{const c=P(),n=k(G),p=k(Q).getOptionalStringArray("soundcheck.flags"),l=n.getRegisteredFlags(),v=(!l.find(i=>i.name==="soundcheck-enable-tech-health")||n.isActive("soundcheck-enable-tech-health"))&&!p?.includes("soundcheck-disable-tech-health"),T=!l.find(i=>i.name==="soundcheck-enable-collectors")||n.isActive("soundcheck-enable-collectors"),g=!l.find(i=>i.name==="soundcheck-enable-campaigns")||n.isActive("soundcheck-enable-campaigns"),{loading:x,allowed:I}=m({permission:M}),w=!x&&I,{loading:R,allowed:y}=m({permission:U}),{loading:A,allowed:S}=m({permission:V}),H=!l.find(i=>i.name==="soundcheck-enable-check-creation")||n.isActive("soundcheck-enable-check-creation"),D=!A&&S&&H,{loading:L,allowed:N}=m({permission:$}),F=!l.find(i=>i.name==="soundcheck-enable-track-creation")||n.isActive("soundcheck-enable-track-creation"),E=!L&&N&&F,B=T&&!R&&y,O=v,f=p?.includes("portal")??!1;return a(b,{title:o,children:[a(J,{children:[g&&a(h,{children:[e(t,{path:"/campaigns/:campaignId/edit",element:e(te,{})}),e(t,{path:"/campaigns/:campaignId",element:e(Z,{})}),w&&e(t,{path:"/campaigns/create",element:e(ee,{})})]}),e(t,{path:"/quickstart",element:e(C,{})}),e(t,{path:"/tech-insights/track",element:e(se,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(ue,{})}),E&&e(t,{path:"/tracks/create",element:e(ke,{})}),e(t,{path:"/tracks/:trackId",element:e(Ce,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(u,{})}),e(t,{path:"/checks/:checkId",element:e(u,{})}),e(t,{path:"/checks/:checkId/edit",element:e(re,{})}),D&&a(h,{children:[e(t,{path:"/checks/create",element:e(ie,{})}),e(t,{path:"/checks/templates",element:e(oe,{})})]}),e(t,{path:"/integrations/:integrationId",element:e(ce,{integrations:s})}),e(t,{path:"/integrations/:integrationId/edit",element:e(ne,{})}),f&&e(t,{path:"/",element:e(C,{})}),e(t,{path:"/*",element:a(r,{children:[e(r.Route,{title:"Overview",path:f?"/overview":"/",children:e("div",{className:c.tabContent,children:e(me,{})})}),e(r.Route,{title:e(be,{title:"Tech Insights"}),path:"/tech-insights",children:a(h,{children:[e(z,{title:"Tech Insights"}),e(fe,{})]})}),O&&e(r.Route,{title:"Tech Health",path:"/tech-health",children:e(ge,{})}),e(r.Route,{title:"Checks",path:"/checks",children:e(ae,{})}),e(r.Route,{title:"Tracks",path:"/tracks",children:e(Pe,{})}),g&&e(r.Route,{title:"Campaigns",path:"/campaigns",children:e(_,{})}),B&&e(r.Route,{title:"Integrations",path:"/integrations",children:e(le,{integrations:s})})]})})]})," "]})};export{ve as RoutingPage,b as RoutingPageWrapper};
1
+ import{jsx as e}from"react/jsx-runtime";import{useFeatureFlag as r}from"../../hooks/useFeatureFlag.esm.js";import{RoutingPageBUI as t}from"./RoutingPageBUI.esm.js";import{RoutingPageDeprecated as a}from"./RoutingPageDeprecated.esm.js";const g=o=>r("backstage-ui")?e(t,{...o}):e(a,{...o});export{g as RoutingPage};
2
2
  //# sourceMappingURL=RoutingPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as o,Fragment as m}from"react/jsx-runtime";import{useApi as x,featureFlagsApiRef as A,useRouteRef as p}from"@backstage/core-plugin-api";import{usePermission as s}from"@backstage/plugin-permission-react";import{Box as h}from"@backstage/ui";import{soundcheckCampaignCreatePermission as E,soundcheckCheckCreatePermission as B,soundcheckTrackCreatePermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as O}from"react-helmet";import{Routes as j,Route as t,useParams as g,Navigate as l}from"react-router-dom";import{trackOverviewRouteRef as y,campaignOverviewRouteRef as H,techInsightsPageRouteRef as M}from"../../routes.esm.js";import{CampaignPage as U}from"../CampaignPage/CampaignPage.esm.js";import{CampaignTechInsightsExplorerPage as D}from"../CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import{CampaignsPage as N}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as S}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as V}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as W}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as q}from"../CheckPage/CheckEditPage.esm.js";import{CheckPage as d}from"../CheckPage/CheckPage.esm.js";import{ChecksTab as z}from"../ChecksTab/ChecksTab.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import{CheckTemplatesPage as G}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import{CollectorPage as J}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as K}from"../CollectorPage/CollectorDetailsPage.esm.js";import"../CollectorPage/CollectorDetailsPageBUI.esm.js";import"../CollectorPage/CollectorDetailsPageDeprecated.esm.js";import{CollectorsPage as L}from"../CollectorsPage/CollectorsPage.esm.js";import{OverviewPageContent as Q}from"../OverviewPage/OverviewPageContent.esm.js";import{TechHealth as X}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage as Y}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as Z}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as _}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as $}from"../TrackPage/TrackPage.esm.js";import{TrackTechInsightsExplorerPage as ee}from"../TrackPage/TrackTechInsightsExplorerPage.esm.js";import{TracksTab as te}from"../TracksTab/TracksTab.esm.js";import{RoutingMainMenu as ae}from"./RoutingMainMenu.esm.js";import{RoutingPageWrapperBUI as re}from"./RoutingPageWrapperBUI.esm.js";const ie=()=>{const{trackId:a}=g(),i=p(y);if(!a)return null;const r=i({trackId:a});return e(l,{to:r,replace:!0})},ne=()=>{const{campaignId:a}=g(),i=p(H);if(!a)return null;const r=i({campaignId:a});return e(l,{to:r,replace:!0})},oe=()=>{const a=p(M)();return e(l,{to:a,replace:!0})},ce=({title:a="Soundcheck",integrations:i})=>{const r=x(A),c=r.getRegisteredFlags(),k=!c.find(n=>n.name==="soundcheck-enable-campaigns")||r.isActive("soundcheck-enable-campaigns"),{loading:f,allowed:u}=s({permission:E}),I=!f&&u,{loading:P,allowed:C}=s({permission:B}),v=!c.find(n=>n.name==="soundcheck-enable-check-creation")||r.isActive("soundcheck-enable-check-creation"),R=!P&&C&&v,{loading:T,allowed:b}=s({permission:F}),w=!c.find(n=>n.name==="soundcheck-enable-track-creation")||r.isActive("soundcheck-enable-track-creation");return e(re,{title:a,children:e(ae,{children:o(j,{children:[k&&o(m,{children:[e(t,{path:"/campaigns",element:e(N,{})}),e(t,{path:"/campaigns/:campaignId/edit",element:e(V,{})}),e(t,{path:"/campaigns/:campaignId",element:e(ne,{})}),e(t,{path:"/campaigns/:campaignId/overview",element:e(U,{})}),e(t,{path:"/campaigns/:campaignId/explorer",element:e(D,{})}),I&&e(t,{path:"/campaigns/create",element:e(S,{})})]}),e(t,{path:"/tracks",element:e(te,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(_,{})}),!T&&b&&w&&e(t,{path:"/tracks/create",element:e(Z,{})}),e(t,{path:"/tracks/:trackId",element:e(ie,{})}),e(t,{path:"/tracks/:trackId/overview",element:e($,{})}),e(t,{path:"/tracks/:trackId/explorer",element:e(ee,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(d,{})}),e(t,{path:"/checks",element:e(z,{})}),e(t,{path:"/checks/:checkId",element:e(d,{})}),e(t,{path:"/checks/:checkId/edit",element:e(q,{})}),R&&o(m,{children:[e(t,{path:"/checks/create",element:e(W,{})}),e(t,{path:"/checks/templates",element:e(G,{})})]}),e(t,{path:"/integrations",element:e(L,{integrations:i})}),e(t,{path:"/integrations/:integrationId",element:e(K,{integrations:i})}),e(t,{path:"/integrations/:integrationId/edit",element:e(J,{})}),e(t,{path:"/tech-insights",element:o(m,{children:[e(O,{title:"Tech Insights"}),e(Y,{})]})}),e(t,{path:"/tech-health",element:e(h,{style:{margin:"36px 32px"},children:e(X,{})})}),e(t,{path:"/overview",element:e(h,{style:{margin:"var(--bui-space-6) var(--bui-space-2)"},children:e(Q,{})})}),e(t,{path:"/",element:e(oe,{})})]})})})};export{ce as RoutingPageBUI};
2
+ //# sourceMappingURL=RoutingPageBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as o,Fragment as m,jsx as e}from"react/jsx-runtime";import{TabbedLayout as a}from"@backstage/core-components";import{useApi as d,featureFlagsApiRef as j,configApiRef as L}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{makeStyles as N}from"@material-ui/core";import{soundcheckCampaignCreatePermission as q,soundcheckCollectorReadPermission as G,soundcheckCheckCreatePermission as Q,soundcheckTrackCreatePermission as V}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as W}from"react-helmet";import{Routes as z,Route as t}from"react-router-dom";import{CampaignPage as B}from"../CampaignPage/CampaignPage.esm.js";import{CampaignsPage as J}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as K}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as M}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as U}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as X}from"../CheckPage/CheckEditPage.esm.js";import{CheckPage as g}from"../CheckPage/CheckPage.esm.js";import{ChecksTab as Y}from"../ChecksTab/ChecksTab.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import{CheckTemplatesPage as Z}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import{CollectorPage as _}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as $}from"../CollectorPage/CollectorDetailsPage.esm.js";import"../CollectorPage/CollectorDetailsPageBUI.esm.js";import"../CollectorPage/CollectorDetailsPageDeprecated.esm.js";import{CollectorsPage as ee}from"../CollectorsPage/CollectorsPage.esm.js";import{HierarchicalTechInsightsPage as te}from"../HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js";import{OverviewPageContent as ie}from"../OverviewPage/OverviewPageContent.esm.js";import{QuickstartPage as k}from"../QuickstartPage/QuickstartPage.esm.js";import{TechHealth as ae}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage as re}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as oe}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as ce}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as ne}from"../TrackPage/TrackPage.esm.js";import{TracksTab as me}from"../TracksTab/TracksTab.esm.js";import{NewFeatureTab as se}from"./NewFeatureTab.esm.js";import{RoutingPageWrapperDeprecated as he}from"./RoutingPageWrapperDeprecated.esm.js";const le=N(()=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}}})),pe=({title:f="Soundcheck",integrations:s})=>{const u=le(),r=d(j),h=d(L).getOptionalStringArray("soundcheck.flags"),c=r.getRegisteredFlags(),C=(!c.find(i=>i.name==="soundcheck-enable-tech-health")||r.isActive("soundcheck-enable-tech-health"))&&!h?.includes("soundcheck-disable-tech-health"),P=!c.find(i=>i.name==="soundcheck-enable-collectors")||r.isActive("soundcheck-enable-collectors"),l=!c.find(i=>i.name==="soundcheck-enable-campaigns")||r.isActive("soundcheck-enable-campaigns"),{loading:b,allowed:T}=n({permission:q}),I=!b&&T,{loading:R,allowed:v}=n({permission:G}),{loading:w,allowed:A}=n({permission:Q}),x=!c.find(i=>i.name==="soundcheck-enable-check-creation")||r.isActive("soundcheck-enable-check-creation"),y=!w&&A&&x,{loading:D,allowed:F}=n({permission:V}),H=!c.find(i=>i.name==="soundcheck-enable-track-creation")||r.isActive("soundcheck-enable-track-creation"),E=!D&&F&&H,S=P&&!R&&v,O=C,p=h?.includes("portal")??!1;return o(he,{title:f,children:[o(z,{children:[l&&o(m,{children:[e(t,{path:"/campaigns/:campaignId/edit",element:e(M,{})}),e(t,{path:"/campaigns/:campaignId",element:e(B,{})}),I&&e(t,{path:"/campaigns/create",element:e(K,{})})]}),e(t,{path:"/quickstart",element:e(k,{})}),e(t,{path:"/tech-insights/track",element:e(te,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(ce,{})}),E&&e(t,{path:"/tracks/create",element:e(oe,{})}),e(t,{path:"/tracks/:trackId",element:e(ne,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(g,{})}),e(t,{path:"/checks/:checkId",element:e(g,{})}),e(t,{path:"/checks/:checkId/edit",element:e(X,{})}),y&&o(m,{children:[e(t,{path:"/checks/create",element:e(U,{})}),e(t,{path:"/checks/templates",element:e(Z,{})})]}),e(t,{path:"/integrations/:integrationId",element:e($,{integrations:s})}),e(t,{path:"/integrations/:integrationId/edit",element:e(_,{})}),p&&e(t,{path:"/",element:e(k,{})}),e(t,{path:"/*",element:o(a,{children:[e(a.Route,{title:"Overview",path:p?"/overview":"/",children:e("div",{className:u.tabContent,children:e(ie,{})})}),e(a.Route,{title:e(se,{title:"Tech Insights"}),path:"/tech-insights",children:o(m,{children:[e(W,{title:"Tech Insights"}),e(re,{})]})}),O&&e(a.Route,{title:"Tech Health",path:"/tech-health",children:e(ae,{})}),e(a.Route,{title:"Checks",path:"/checks",children:e(Y,{})}),e(a.Route,{title:"Tracks",path:"/tracks",children:e(me,{})}),l&&e(a.Route,{title:"Campaigns",path:"/campaigns",children:e(J,{})}),S&&e(a.Route,{title:"Integrations",path:"/integrations",children:e(ee,{integrations:s})})]})})]})," "]})};export{pe as RoutingPageDeprecated};
2
+ //# sourceMappingURL=RoutingPageDeprecated.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{useFeatureFlag as i}from"../../hooks/useFeatureFlag.esm.js";import{RoutingPageWrapperBUI as o}from"./RoutingPageWrapperBUI.esm.js";import{RoutingPageWrapperDeprecated as p}from"./RoutingPageWrapperDeprecated.esm.js";const a=({title:e,children:r})=>i("backstage-ui")?t(o,{title:e,children:r}):t(p,{title:e,children:r});export{a as RoutingPageWrapper};
2
+ //# sourceMappingURL=RoutingPageWrapper.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r,jsxs as o}from"react/jsx-runtime";import{Box as t}from"@backstage/ui";import{SpotifyLicenseBanner as n}from"@spotify/backstage-plugin-core";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{UserProvider as c}from"../../contexts/UserProvider.esm.js";import d from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as l}from"../../hooks/useSoundcheckAlert.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import{SoundcheckHeaderProvider as m}from"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{SoundcheckHeaderBUI as s}from"../SoundcheckHeader/SoundcheckHeaderBUI.esm.js";import{SoundcheckQueryClientProvider as p}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";const a=({title:e="Soundcheck",children:i})=>r(l,{children:r(c,{children:r(p,{children:r(m,{defaultTitle:e,children:o(d,{children:[r(n,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),r(s,{}),r(t,{children:i})]})})})})});export{a as RoutingPageWrapperBUI};
2
+ //# sourceMappingURL=RoutingPageWrapperBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as l}from"react/jsx-runtime";import{Page as n}from"@backstage/core-components";import{makeStyles as c,Box as t}from"@material-ui/core";import{SpotifyLicenseBanner as a}from"@spotify/backstage-plugin-core";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{UserProvider as d}from"../../contexts/UserProvider.esm.js";import s from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as m}from"../../hooks/useSoundcheckAlert.esm.js";import{SoundcheckHeader as p}from"../SoundcheckHeader/SoundcheckHeader.esm.js";import{SoundcheckHeaderProvider as f}from"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{SoundcheckQueryClientProvider as u}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";const h=c(i=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}},pageContent:{display:"flex",flexDirection:"row",flexGrow:1},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",maxWidth:"100%","& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",padding:`${i.spacing(3)}px !important`}}})),x=({title:i="Soundcheck",children:o})=>{const r=h();return e(m,{children:e(d,{children:e(u,{children:e(f,{defaultTitle:i,children:e(s,{children:e(t,{className:r.root,children:l(n,{themeId:"website",children:[e(a,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),e(p,{documentTitle:i}),e(t,{className:r.pageContent,children:e(t,{className:r.pageLayout,children:o})})]})})})})})})})};export{x as RoutingPageWrapperDeprecated};
2
+ //# sourceMappingURL=RoutingPageWrapperDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{RoutingPage as o,RoutingPageWrapper as r}from"./RoutingPage.esm.js";export{o as RoutingPage,r as RoutingPageWrapper};
1
+ import{RoutingPage as e}from"./RoutingPage.esm.js";import{RoutingPageWrapper as p}from"./RoutingPageWrapper.esm.js";export{e as RoutingPage,p as RoutingPageWrapper};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as t,Fragment as S,jsx as i}from"react/jsx-runtime";import{Button as u,Typography as e,Box as n,TextField as y}from"@material-ui/core";import W from"@material-ui/icons/AddAlert";import{capitalize as B}from"lodash";import{useState as d,useCallback as I}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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useSendCampaignNotification as E}from"../../hooks/campaigns/useSendCampaignNotification.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as O}from"../../hooks/aggregations/useCertificationStatus.esm.js";import"react-router-dom";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 A}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as g}from"../FormFieldLabel/FormFieldLabel.esm.js";import{LoadingIndicator as $}from"../LoadingIndicator/LoadingIndicator.esm.js";import{SoundcheckDialog as j}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const q=["critical","high","normal","low"],z=({loading:s,notificationCount:o,reset:p,error:m,failingCount:r})=>t(n,{children:[s&&t(n,{textAlign:"center",children:[i(e,{variant:"body1",children:"Sending Notifications..."}),i(e,{variant:"caption",children:"Do not refresh or leave the page."}),i(n,{marginTop:2,marginBottom:1,children:i($,{size:48})})]}),!s&&t(n,{children:[t(e,{variant:"body1",children:[t("strong",{children:[o," Notification",o===1?"":"s"," "]}),"sent to entity owners."]}),m&&i(e,{variant:"body2",color:"error",children:m.message}),r&&o<r&&t(e,{variant:"caption",children:["Notifications are grouped by owner, so this number might be less than the total failing entity count of"," ",i("strong",{children:r}),"."]}),i(n,{marginTop:2,children:i(u,{onClick:p,variant:"outlined",color:"primary",children:"Send Again"})})]})]}),G=({buttonClass:s,campaign:o})=>{const[p,m]=d(!1),[r,x]=d(""),[f,N]=d(""),[h,w]=d("normal"),[a,T]=d(""),[k,v]=d(!1),{data:L}=O({trackId:o.track.id},p),{mutate:C,isLoading:b,notificationCount:D,error:R}=E(),F=I(()=>{C({campaignId:o.id,entityRefs:a?[a]:void 0,title:r,description:f,severity:h.toLowerCase()}),v(!0)},[o.id,f,a,C,h,r]),c=L?.certificationStatus?.statusByLevel[0]?.failed??0;return t(S,{children:[i(u,{className:s,variant:"contained",onClick:()=>m(!0),startIcon:i(W,{}),children:"Send"}),i(j,{handleClose:()=>m(!1),title:"Send a Campaign Reminder Notification",open:p,fullScreen:!1,maxWidth:"sm",children:k?i(z,{loading:b,notificationCount:D,reset:()=>v(!1),error:R,failingCount:c}):t(S,{children:[i(e,{variant:"body1",children:"Send a notification for all entities that are currently failing checks in this campaign. Notifications will be grouped by the owner of these entities."}),t(n,{marginTop:1,children:[i(n,{display:"flex",children:i(g,{title:"Severity"})}),i(A,{value:h,onChange:w,options:q,fullWidth:!1,getOptionLabel:l=>B(l)})]}),t(n,{marginTop:1,children:[i(g,{title:"Custom Notification Title (Optional)"}),i(y,{value:r,onChange:l=>x(l.target.value),placeholder:`Default: Entities Failing Campaign - ${o.name}`,type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:1,children:[i(g,{title:"Custom Notification Description (Optional)"}),i(e,{variant:"caption",component:"div",children:"Templating for custom notification messages is currently not supported."}),i(y,{value:f,onChange:l=>N(l.target.value),placeholder:`Default: Entities owned by [ownerGroup] are failing checks required in Campaign - ${o.name}.`,type:"text",variant:"outlined",margin:"dense",multiline:!0,minRows:4,maxRows:8,fullWidth:!0})]}),t(n,{marginTop:1,children:[i(g,{title:"Entity Ref For Testing (Optional)"}),i(e,{variant:"caption",component:"div",children:"Select a specific entityRef to send a notification to - used for testing. Will bypass checking if the campaign is actually failing for this entity."}),i(y,{value:a,onChange:l=>T(l.target.value),placeholder:"example: component:default/test-component",type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:2,display:"flex",alignItems:"center",children:[i(u,{disabled:!a&&c===0||b,variant:"outlined",color:"primary",onClick:F,children:"Send"}),a&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notification will be sent to ",a,"."]}),!a&&!!c&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notifications will be sent for the",i("strong",{children:` ~${c} `}),c===1?"entity":"entities"," failing this campaign"]}),!a&&c===0&&i(e,{color:"error",style:{marginLeft:6},variant:"caption",children:"No entities failing campaign."})]})]})})]})};export{G as SendCampaignNotificationDialog};
1
+ import{jsxs as t,Fragment as S,jsx as i}from"react/jsx-runtime";import{Button as u,Typography as e,Box as n,TextField as y}from"@material-ui/core";import W from"@material-ui/icons/AddAlert";import{capitalize as B}from"lodash";import{useState as m,useCallback as I}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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useSendCampaignNotification as E}from"../../hooks/campaigns/useSendCampaignNotification.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as O}from"../../hooks/aggregations/useCertificationStatus.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";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 A}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as g}from"../FormFieldLabel/FormFieldLabel.esm.js";import{LoadingIndicator as $}from"../LoadingIndicator/LoadingIndicator.esm.js";import{SoundcheckDialog as j}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const q=["critical","high","normal","low"],z=({loading:s,notificationCount:o,reset:p,error:d,failingCount:r})=>t(n,{children:[s&&t(n,{textAlign:"center",children:[i(e,{variant:"body1",children:"Sending Notifications..."}),i(e,{variant:"caption",children:"Do not refresh or leave the page."}),i(n,{marginTop:2,marginBottom:1,children:i($,{size:48})})]}),!s&&t(n,{children:[t(e,{variant:"body1",children:[t("strong",{children:[o," Notification",o===1?"":"s"," "]}),"sent to entity owners."]}),d&&i(e,{variant:"body2",color:"error",children:d.message}),r&&o<r&&t(e,{variant:"caption",children:["Notifications are grouped by owner, so this number might be less than the total failing entity count of"," ",i("strong",{children:r}),"."]}),i(n,{marginTop:2,children:i(u,{onClick:p,variant:"outlined",color:"primary",children:"Send Again"})})]})]}),G=({buttonClass:s,campaign:o})=>{const[p,d]=m(!1),[r,x]=m(""),[f,N]=m(""),[h,w]=m("normal"),[a,T]=m(""),[k,v]=m(!1),{data:L}=O({trackId:o.track.id},p),{mutate:C,isLoading:b,notificationCount:D,error:R}=E(),F=I(()=>{C({campaignId:o.id,entityRefs:a?[a]:void 0,title:r,description:f,severity:h.toLowerCase()}),v(!0)},[o.id,f,a,C,h,r]),c=L?.certificationStatus?.statusByLevel[0]?.failed??0;return t(S,{children:[i(u,{className:s,variant:"contained",onClick:()=>d(!0),startIcon:i(W,{}),children:"Send"}),i(j,{handleClose:()=>d(!1),title:"Send a Campaign Reminder Notification",open:p,fullScreen:!1,maxWidth:"sm",children:k?i(z,{loading:b,notificationCount:D,reset:()=>v(!1),error:R,failingCount:c}):t(S,{children:[i(e,{variant:"body1",children:"Send a notification for all entities that are currently failing checks in this campaign. Notifications will be grouped by the owner of these entities."}),t(n,{marginTop:1,children:[i(n,{display:"flex",children:i(g,{title:"Severity"})}),i(A,{value:h,onChange:w,options:q,fullWidth:!1,getOptionLabel:l=>B(l)})]}),t(n,{marginTop:1,children:[i(g,{title:"Custom Notification Title (Optional)"}),i(y,{value:r,onChange:l=>x(l.target.value),placeholder:`Default: Entities Failing Campaign - ${o.name}`,type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:1,children:[i(g,{title:"Custom Notification Description (Optional)"}),i(e,{variant:"caption",component:"div",children:"Templating for custom notification messages is currently not supported."}),i(y,{value:f,onChange:l=>N(l.target.value),placeholder:`Default: Entities owned by [ownerGroup] are failing checks required in Campaign - ${o.name}.`,type:"text",variant:"outlined",margin:"dense",multiline:!0,minRows:4,maxRows:8,fullWidth:!0})]}),t(n,{marginTop:1,children:[i(g,{title:"Entity Ref For Testing (Optional)"}),i(e,{variant:"caption",component:"div",children:"Select a specific entityRef to send a notification to - used for testing. Will bypass checking if the campaign is actually failing for this entity."}),i(y,{value:a,onChange:l=>T(l.target.value),placeholder:"example: component:default/test-component",type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:2,display:"flex",alignItems:"center",children:[i(u,{disabled:!a&&c===0||b,variant:"outlined",color:"primary",onClick:F,children:"Send"}),a&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notification will be sent to ",a,"."]}),!a&&!!c&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notifications will be sent for the",i("strong",{children:` ~${c} `}),c===1?"entity":"entities"," failing this campaign"]}),!a&&c===0&&i(e,{color:"error",style:{marginLeft:6},variant:"caption",children:"No entities failing campaign."})]})]})})]})};export{G as SendCampaignNotificationDialog};
2
2
  //# sourceMappingURL=SendCampaignNotificationDialog.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as r}from"react/jsx-runtime";import{Box as c,Flex as i,Link as t,ButtonLink as n}from"@backstage/ui";import{makeStyles as o}from"@material-ui/core";import{RiCheckDoubleLine as s,RiQuestionLine as d,RiSettings2Line as u}from"@remixicon/react";const p=o(()=>({header:{background:"var(--bui-bg-surface-1)",padding:"var(--bui-space-3)",margin:"var(--bui-space-2)",borderRadius:"var(--bui-space-1)",boxShadow:"1px 1px 1px var(--bui-bg-surface-2)"}})),h=()=>{const a=p();return e(c,{className:a.header,children:r(i,{align:"center",justify:"between",children:[r(i,{align:"center",gap:"2",children:[e(s,{size:18}),e(t,{href:"/soundcheck",variant:"body-medium",children:"Soundcheck"})]}),r(i,{align:"center",gap:"2",children:[e(n,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/",variant:"secondary",iconStart:e(d,{}),target:"_blank",rel:"noreferrer",children:"Help"}),e(n,{href:"/settings",variant:"secondary",iconStart:e(u,{})})]})]})})};export{h as SoundcheckHeaderBUI};
2
+ //# sourceMappingURL=SoundcheckHeaderBUI.esm.js.map