@spotify/backstage-plugin-soundcheck 0.19.7 → 0.19.9

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 (239) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/alpha/entity-content.esm.js +1 -1
  3. package/dist/alpha.d.ts +3 -116
  4. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  5. package/dist/components/AreaChart/AreaChart.esm.js +1 -1
  6. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  7. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  8. package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +1 -1
  9. package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
  10. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +2 -2
  11. package/dist/components/CampaignPage/CampaignPage.esm.js +1 -1
  12. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  13. package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +2 -0
  14. package/dist/components/CampaignPage/CampaignStatusCard.esm.js +2 -0
  15. package/dist/components/CampaignPage/CampaignStatusTableBUI.esm.js +2 -0
  16. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  17. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  18. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  19. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  20. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +1 -1
  21. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +1 -1
  22. package/dist/components/CategoryBar/CategoryBar.esm.js +1 -1
  23. package/dist/components/Charts/chartUtils.esm.js +1 -1
  24. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  25. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  26. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  27. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  28. package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +1 -1
  29. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
  30. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  31. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  32. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  33. package/dist/components/CheckPage/CheckPage.esm.js +1 -1
  34. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  35. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +1 -1
  36. package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +1 -1
  37. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  38. package/dist/components/CheckPage/utils.esm.js +1 -1
  39. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  40. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +1 -1
  41. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  42. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +1 -1
  43. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +1 -1
  44. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  45. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  46. package/dist/components/ChecksTab/ChecksTab.esm.js +1 -1
  47. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  48. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  49. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  50. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
  51. package/dist/components/CollectorPage/CollectorFactTable.esm.js +1 -1
  52. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +1 -1
  53. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  57. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  58. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  59. package/dist/components/CollectorPage/Configurators/HTTP/HttpRequestComponent.esm.js +1 -1
  60. package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +1 -1
  61. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
  62. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +1 -1
  63. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  64. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  65. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  66. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  67. package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
  68. package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +1 -1
  69. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  70. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  71. package/dist/components/Filter/KeyValueInputDialog.esm.js +1 -1
  72. package/dist/components/Filter/types.esm.js +1 -1
  73. package/dist/components/Filter/utils.esm.js +1 -1
  74. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  75. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  76. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  77. package/dist/components/FormFilterSection/FormFilterSection.esm.js +1 -1
  78. package/dist/components/FormStepper/FormStepper.esm.js +1 -1
  79. package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +1 -1
  80. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +1 -1
  81. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +1 -1
  82. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +1 -1
  83. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +1 -1
  84. package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +1 -1
  85. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +1 -1
  86. package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +1 -1
  87. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  88. package/dist/components/OverviewPage/OverviewPageHeader.esm.js +1 -1
  89. package/dist/components/Pagination/Pagination.esm.js +1 -1
  90. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
  91. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  92. package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +1 -1
  93. package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +1 -1
  94. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  95. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
  96. package/dist/components/SoundcheckHeader/useHeader.esm.js +1 -1
  97. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
  98. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  99. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  100. package/dist/components/TechHealthTabs/PassRateTabHeader.esm.js +1 -1
  101. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  102. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  103. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  104. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  105. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  106. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  107. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  108. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  109. package/dist/components/TrackForm/Steps/LevelsStep/LevelsStepNew.esm.js +1 -1
  110. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  111. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  112. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  113. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
  114. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  115. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  116. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
  117. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  118. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  119. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  120. package/dist/components/TracksTab/TracksTab.esm.js +1 -1
  121. package/dist/hooks/aggregations/useAggregatedCheckPassRateTrend.esm.js +1 -1
  122. package/dist/hooks/aggregations/useAggregatedEntityPassRateTrend.esm.js +1 -1
  123. package/dist/hooks/aggregations/useAggregatedGroupPassRateTrend.esm.js +1 -1
  124. package/dist/hooks/aggregations/useAggregatedTrackPassRateTrend.esm.js +1 -1
  125. package/dist/hooks/aggregations/useCertificationStatus.esm.js +1 -1
  126. package/dist/hooks/aggregations/useCertificationStatusHistory.esm.js +1 -1
  127. package/dist/hooks/aggregations/useCheckPassRateTrend.esm.js +1 -1
  128. package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
  129. package/dist/hooks/aggregations/useCheckStatusHistory.esm.js +1 -1
  130. package/dist/hooks/aggregations/useCheckStatuses.esm.js +1 -1
  131. package/dist/hooks/aggregations/useEntityPassRateTrend.esm.js +1 -1
  132. package/dist/hooks/aggregations/useGroupPassRateTrend.esm.js +1 -1
  133. package/dist/hooks/aggregations/useTrackPassRateTrend.esm.js +1 -1
  134. package/dist/hooks/cache/useEntityCountCached.esm.js +1 -1
  135. package/dist/hooks/cache/useTrackCountCached.esm.js +1 -1
  136. package/dist/hooks/campaigns/useGetCampaign.esm.js +1 -1
  137. package/dist/hooks/catalog/useGetEntityCount.esm.js +1 -1
  138. package/dist/hooks/checks/useCheck.esm.js +1 -1
  139. package/dist/hooks/checks/useExecutableChecks.esm.js +1 -1
  140. package/dist/hooks/checks/useGetChecks.esm.js +1 -1
  141. package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
  142. package/dist/hooks/collectors/useGetFactSchema.esm.js +1 -1
  143. package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
  144. package/dist/hooks/entities/useEntityRefsForUser.esm.js +1 -1
  145. package/dist/hooks/exemptions/useExemptions.esm.js +1 -1
  146. package/dist/hooks/facets/useFacetsForOwner.esm.js +1 -1
  147. package/dist/hooks/filters/useFilters.esm.js +1 -1
  148. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  149. package/dist/hooks/tracks/useGetTracksApplicableEntityCount.esm.js +1 -1
  150. package/dist/hooks/tracks/useTrack.esm.js +1 -1
  151. package/dist/hooks/useSortSearchParams.esm.js +2 -0
  152. package/dist/index.d.ts +11 -11
  153. package/dist/routes.esm.js +1 -1
  154. package/dist/utils/filters.esm.js +1 -1
  155. package/dist/utils/formStyles.esm.js +1 -1
  156. package/dist/utils/helpers.esm.js +1 -1
  157. package/dist/utils/json.esm.js +2 -0
  158. package/dist/utils/validation.esm.js +1 -1
  159. package/package.json +19 -19
  160. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +0 -2
  161. package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +0 -2
  162. package/dist/components/CampaignPage/CampaignStatusTile.esm.js +0 -2
  163. package/dist/components/CampaignPage/DaysRemainingTile.esm.js +0 -2
  164. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +0 -2
  165. package/dist/components/CampaignsPage/CampaignListPage/CampaignMetadata.esm.js +0 -2
  166. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +0 -2
  167. package/dist/components/CampaignsPage/CampaignListPage/CampaignTypes.esm.js +0 -2
  168. package/dist/components/CampaignsPage/CampaignListPage/CampaignsOverviewSkeleton.esm.js +0 -2
  169. package/dist/components/Charts/LoadingChart.esm.js +0 -2
  170. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +0 -2
  171. package/dist/components/CheckPage/CheckEntitiesTable/columns.esm.js +0 -2
  172. package/dist/components/CheckPage/CheckPageDeprecated.esm.js +0 -2
  173. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +0 -2
  174. package/dist/components/CheckPage/CheckStatusTable.esm.js +0 -2
  175. package/dist/components/CheckPage/ExemptionsTable.esm.js +0 -2
  176. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +0 -2
  177. package/dist/components/ChecksPage/CheckListPage/CheckMetadata.esm.js +0 -2
  178. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +0 -2
  179. package/dist/components/ChecksPage/skeletons/ChecksOverviewSkeleton.esm.js +0 -2
  180. package/dist/components/CollectorsPage/CollectorListPage/CollectorListSkeleton.esm.js +0 -2
  181. package/dist/components/ColorChip/ColorChip.esm.js +0 -2
  182. package/dist/components/GroupHierarchySelector/GroupHierarchyCategorySelection.esm.js +0 -2
  183. package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +0 -2
  184. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +0 -2
  185. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +0 -2
  186. package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +0 -2
  187. package/dist/components/HierarchicalTechInsightsPage/ColorLegend.esm.js +0 -2
  188. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +0 -2
  189. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +0 -2
  190. package/dist/components/HierarchicalTechInsightsPage/LowestPerformingTeams.esm.js +0 -2
  191. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +0 -2
  192. package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceCard.esm.js +0 -2
  193. package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceListCard.esm.js +0 -2
  194. package/dist/components/HierarchicalTechInsightsPage/TopPerformingTeams.esm.js +0 -2
  195. package/dist/components/HierarchicalTechInsightsPage/visualizations/findNodePath.esm.js +0 -2
  196. package/dist/components/LevelsTable/CheckRowContent.esm.js +0 -2
  197. package/dist/components/LevelsTable/LevelsTable.esm.js +0 -2
  198. package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +0 -2
  199. package/dist/components/QuickstartPage/HowDoIListItem.esm.js +0 -2
  200. package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +0 -2
  201. package/dist/components/QuickstartPage/QuickstartPage.esm.js +0 -3
  202. package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +0 -7
  203. package/dist/components/QuickstartPage/styles.esm.js +0 -2
  204. package/dist/components/RichTooltip/RichTooltip.esm.js +0 -2
  205. package/dist/components/RoutingPage/NewFeatureTab.esm.js +0 -2
  206. package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +0 -2
  207. package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +0 -2
  208. package/dist/components/SearchFilters/SearchFilters.esm.js +0 -2
  209. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +0 -2
  210. package/dist/components/SoundcheckEntityLink/SoundcheckEntityLink.esm.js +0 -2
  211. package/dist/components/SoundcheckHeader/headerUtil.esm.js +0 -2
  212. package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +0 -2
  213. package/dist/components/TechInsights/FilterControls.esm.js +0 -2
  214. package/dist/components/TechInsights/SummaryTiles.esm.js +0 -2
  215. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +0 -2
  216. package/dist/components/TechInsights/TechInsightsTableView.esm.js +0 -2
  217. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +0 -2
  218. package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +0 -2
  219. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +0 -2
  220. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +0 -2
  221. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +0 -2
  222. package/dist/components/TrackPage/TrackHistoryChart.esm.js +0 -2
  223. package/dist/components/TrackPage/TrackPageDeprecated.esm.js +0 -2
  224. package/dist/components/TrackPage/TrackProgressCard.esm.js +0 -2
  225. package/dist/components/TrackPage/TrackStatus.esm.js +0 -2
  226. package/dist/components/TrackPage/TrackStatusBar.esm.js +0 -2
  227. package/dist/components/TrackPage/TrackStatusTable.esm.js +0 -2
  228. package/dist/components/TrackPage/utils.esm.js +0 -2
  229. package/dist/components/TrackSelection/TrackSelection.esm.js +0 -2
  230. package/dist/components/TracksPage/TrackListPage/TrackEmptyState.esm.js +0 -2
  231. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +0 -2
  232. package/dist/components/TracksPage/TrackListPage/TrackMetadata.esm.js +0 -2
  233. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +0 -2
  234. package/dist/components/TracksPage/TrackListPage/TracksOverviewSkeleton.esm.js +0 -2
  235. package/dist/hooks/campaigns/useGetCampaignOwners.esm.js +0 -2
  236. package/dist/hooks/checks/useGetCheckOwners.esm.js +0 -2
  237. package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +0 -2
  238. package/dist/hooks/tracks/useGetTrackOwners.esm.js +0 -2
  239. package/dist/utils/colors.esm.js +0 -2
@@ -1,2 +1,2 @@
1
- import{jsx as F,Fragment as j}from"react/jsx-runtime";import{parseEntityRef as k,stringifyEntityRef as b}from"@backstage/catalog-model";import{Table as D}from"@backstage/core-components";import{makeStyles as K,useTheme as O}from"@material-ui/core";import{combineEntityFilterQueries as N,difference as A}from"@spotify/backstage-plugin-soundcheck-common";import{useState as C,useMemo as u}from"react";import{useEntitiesByRefs as B}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as z}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{mapFiltersToCatalogFilter as R}from"../utils.esm.js";import{createEntityRefColumn as M,createSystemColumn as W,createOwnerColumn as G,createKindColumn as I,createSpecTypeColumn as Q,createSpecLifecycleColumn as X,createTagsColumn as Y}from"./EntityTableColumns.esm.js";const $=K(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),w=[M(),W(),G(),I(),Q(),X(),Y()],q=15e3,H=({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m})=>{const a=R(y,f),r=!!a?.[0]&&Object.values(a[0]).some(t=>!!t),l=p||m?R(p,m):[],e=!!l?.[0]&&Object.values(l[0]).some(t=>!!t),{data:g,isFetching:c}=z(a,e&&!r?q:void 0,r),d=g?.items.map(t=>b(t)),n=e?N(a,l):void 0,{data:h,isFetching:s}=z(n??{},void 0,r&&!!n),o=h?.items.map(t=>b(t));return{allEntityRefs:u(()=>A(d??[],o??[]),[o,d]),isLoading:c||s}},J=({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m,additionalColumns:a=[],title:r,hideTags:l=!1})=>{const[e,g]=C({page:0,pageSize:10}),[c,d]=C(""),{allEntityRefs:n,isLoading:h}=H({filter:y,excludeFilter:p,keyValueFilter:f,excludeKeyValueFilter:m}),s=u(()=>{const i=new RegExp(c,"i");return n.filter(V=>k(V).name.match(i))},[n,c]),o=s.length,t=O(),x=$(),E=u(()=>s.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[s,e.page,e.pageSize]),{data:T,isLoading:S}=B({entityRefs:E}),v=u(()=>l?[...w.slice(0,-1),...a]:[...w,...a],[a,l]),L=o>0?`All (${o||0}) `:"No Items",P=r||L;return F(j,{children:F("div",{className:x.entityTable,children:F(D,{title:P,columns:v,subtitle:o===0?"Add or adjust filters to see preview.":"",data:T?.items?.filter(i=>!!i)??[],isLoading:S||h,options:{padding:"dense",paging:o>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!0,showTitle:!0,rowStyle:{fontSize:t.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!S,pageSize:e.pageSize,sorting:!1},onPageChange:i=>{g({...e,page:i})},onSearchChange:i=>{d(i)},onRowsPerPageChange:i=>{g({...e,pageSize:i})},page:e.page,totalCount:o,localization:{pagination:{labelDisplayedRows:""}}})})})};export{J as FilterPreviewTable};
1
+ import{jsx as f,Fragment as P}from"react/jsx-runtime";import{parseEntityRef as j,stringifyEntityRef as S}from"@backstage/catalog-model";import{Table as D}from"@backstage/core-components";import{makeStyles as O,useTheme as N}from"@material-ui/core";import{combineEntityFilterQueries as A,difference as B}from"@spotify/backstage-plugin-soundcheck-common";import{useState as C,useMemo as d}from"react";import{useEntitiesByRefs as M}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as F}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{mapFiltersToCatalogFilter as b}from"../utils.esm.js";import{createEntityRefColumn as W,createSystemColumn as k,createOwnerColumn as G,createKindColumn as I,createSpecTypeColumn as K,createSpecLifecycleColumn as Q,createTagsColumn as U}from"./EntityTableColumns.esm.js";const X=O(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),z=[W(),k(),G(),I(),K(),Q(),U()],$=15e3,q=({includeFilter:u,excludeFilter:p})=>{const a=b(u),r=!!a?.[0]&&Object.values(a[0]).some(t=>!!t),n=p?.length?b(p):[],e=!!n?.[0]&&Object.values(n[0]).some(t=>!!t),{data:m,isFetching:g}=F(a,e&&!r?$:void 0,r),c=m?.items.map(t=>S(t)),l=e?A(a,n):void 0,{data:y,isFetching:s}=F(l??{},void 0,r&&!!l),o=y?.items.map(t=>S(t));return{allEntityRefs:d(()=>B(c??[],o??[]),[o,c]),isLoading:g||s}},H=({includeFilter:u,excludeFilter:p,additionalColumns:a=[],title:r,hideTags:n=!1})=>{const[e,m]=C({page:0,pageSize:10}),[g,c]=C(""),{allEntityRefs:l,isLoading:y}=q({includeFilter:u,excludeFilter:p}),s=d(()=>{const i=new RegExp(g,"i");return l.filter(L=>j(L).name.match(i))},[l,g]),o=s.length,t=N(),R=X(),w=d(()=>s.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[s,e.page,e.pageSize]),{data:E,isLoading:h}=M({entityRefs:w}),T=d(()=>n?[...z.slice(0,-1),...a]:[...z,...a],[a,n]),v=o>0?`All (${o||0}) `:"No Items",x=r||v;return f(P,{children:f("div",{className:R.entityTable,children:f(D,{title:x,columns:T,subtitle:o===0?"Add or adjust filters to see preview.":"",data:E?.items?.filter(i=>!!i)??[],isLoading:h||y,options:{padding:"dense",paging:o>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!0,showTitle:!0,rowStyle:{fontSize:t.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!h,pageSize:e.pageSize,sorting:!1},onPageChange:i=>{m({...e,page:i})},onSearchChange:i=>{c(i)},onRowsPerPageChange:i=>{m({...e,pageSize:i})},page:e.page,totalCount:o,localization:{pagination:{labelDisplayedRows:""}}})})})};export{H as FilterPreviewTable};
2
2
  //# sourceMappingURL=FilterPreviewTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as v,Fragment as z}from"react/jsx-runtime";import{Box as i,IconButton as T,Divider as V,Button as B,FormHelperText as A,TextField as W,Chip as E}from"@material-ui/core";import F from"@material-ui/icons/Add";import G from"@material-ui/icons/Delete";import{useEffect as j,useCallback as f,useMemo as L,useState as M}from"react";import{useImmer as w}from"use-immer";import{SoundcheckDialog as $}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const D=({value:h,onChange:c,onKeyDown:u,placeholder:o,endAdornment:m,error:r,helperText:t})=>v(z,{children:[t&&e(A,{error:r,children:t}),e(i,{display:"flex",alignItems:"center",children:e(W,{value:h,onChange:c,variant:"outlined",margin:"dense",fullWidth:!0,onKeyDown:u,placeholder:o,InputProps:{endAdornment:m},error:r})})]}),H=({values:h,addValue:c,deleteValue:u})=>{const[o,m]=M("");return v(i,{width:"100%",children:[e(i,{marginTop:1,marginBottom:1,display:"flex",gridGap:1,flexWrap:"wrap",children:h.map(r=>e(E,{label:r,size:"small",onDelete:()=>u(r),style:{marginBottom:4}},r))}),e(D,{value:o,onChange:r=>m(r.currentTarget.value),onKeyDown:r=>{r.key==="Enter"&&(c(o),m(""))},placeholder:"Type a value and press enter to add to value list.",endAdornment:e(i,{display:"flex",alignItems:"center",children:e(B,{onClick:()=>c(o),style:{padding:0},size:"small",variant:"text",disabled:!o?.length,children:"Add"})})})]})},P=({title:h,open:c,handleClose:u,values:o,onSave:m,validateKey:r})=>{const[t,d]=w([{key:"",value:[]}]);j(()=>{o?.length>0?d(o):d([{key:"",value:[]}])},[o]);const[y,g]=w({}),x=f(({key:a,value:l,idx:n})=>{d(p=>{const s=p[n];s.key=a===void 0?s.key:a,s.value=l===void 0?s.value:l,a&&y[n]&&g(k=>{k[n]=""})})},[y,g,d]),I=f(a=>{d(l=>{l.splice(a,1),l.length===0&&l.push({key:"",value:[]})})},[d]),b=f(a=>{d(l=>{l.splice(a+1,0,{key:"",value:[]})})},[d]),K=f(()=>{let a=!1;if(r){const n=t.map(s=>s.key);let p=0;g(s=>{for(const k of n){const{errorMessage:C}=r(k);C&&(a=!0),s[p]=C??"",p++}})}if(a)return;const l=t.filter(n=>n.key&&n.value);m(l),u()},[r,t,m,u,g]),S=L(()=>t.every(a=>!!a.key&&a.value?.length||!a.key&&!a.value?.length),[t]);return e($,{title:h,open:c,handleClose:u,fullScreen:!1,children:v(i,{marginLeft:1,minWidth:640,children:[t.map((a,l)=>v(i,{children:[v(i,{display:"flex",alignItems:"flex-end",gridGap:12,marginBottom:2,children:[e(i,{flexGrow:1,children:e(D,{value:a.key,onChange:n=>x({key:n.target.value,idx:l}),placeholder:"Key",error:!!y[l],helperText:y[l]})}),e(i,{width:480,children:e(H,{values:a.value,addValue:n=>{x({idx:l,value:[...a.value,n]})},deleteValue:n=>{x({idx:l,value:a.value.filter(p=>p!==n)})}})}),e(i,{marginBottom:.75,children:e(T,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>b(l),children:e(F,{})})}),e(i,{marginBottom:.75,children:e(T,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>I(l),children:e(G,{})})})]}),e(V,{})]},l)),e(i,{display:"flex",paddingTop:2,marginTop:1,children:e(B,{variant:"contained",size:"medium",color:"primary",onClick:K,disabled:!S,children:"Save"})})]})})};export{P as KeyValueInputDialog};
1
+ import{jsx as e,jsxs as v,Fragment as z}from"react/jsx-runtime";import{Box as i,IconButton as B,Divider as A,Button as T,FormHelperText as V,TextField as W,Chip as E}from"@material-ui/core";import F from"@material-ui/icons/Add";import G from"@material-ui/icons/Delete";import{useEffect as j,useCallback as f,useMemo as L,useState as M}from"react";import{useImmer as w}from"use-immer";import{SoundcheckDialog as $}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const D=({value:h,onChange:c,onKeyDown:u,placeholder:o,endAdornment:m,error:r,helperText:t})=>v(z,{children:[t&&e(V,{error:r,children:t}),e(i,{display:"flex",alignItems:"center",children:e(W,{value:h,onChange:c,variant:"outlined",margin:"dense",fullWidth:!0,onKeyDown:u,placeholder:o,InputProps:{endAdornment:m},error:r})})]}),H=({values:h,addValue:c,deleteValue:u})=>{const[o,m]=M("");return v(i,{width:"100%",children:[e(i,{marginTop:1,marginBottom:1,display:"flex",gridGap:1,flexWrap:"wrap",children:h.map(r=>e(E,{label:r,size:"small",onDelete:()=>u(r),style:{marginBottom:4}},r))}),e(D,{value:o,onChange:r=>m(r.currentTarget.value),onKeyDown:r=>{r.key==="Enter"&&(c(o),m(""))},placeholder:"Type a value and press enter to add to value list.",endAdornment:e(i,{display:"flex",alignItems:"center",children:e(T,{onClick:()=>c(o),style:{padding:0},size:"small",variant:"text",disabled:!o?.length,children:"Add"})})})]})},P=({title:h,open:c,handleClose:u,values:o,onSave:m,validateKey:r})=>{const[t,d]=w([{key:"",value:[]}]);j(()=>{o?.length>0?d(o):d([{key:"",value:[]}])},[o]);const[y,g]=w({}),x=f(({key:a,value:l,idx:n})=>{d(p=>{const s=p[n];s.key=a===void 0?s.key:a,s.value=l===void 0?s.value:l,a&&y[n]&&g(k=>{k[n]=""})})},[y,g,d]),I=f(a=>{d(l=>{l.splice(a,1),l.length===0&&l.push({key:"",value:[]})})},[d]),b=f(a=>{d(l=>{l.splice(a+1,0,{key:"",value:[]})})},[d]),K=f(()=>{let a=!1;if(r){const n=t.map(s=>s.key);let p=0;g(s=>{for(const k of n){const{errorMessage:C}=r(k);C&&(a=!0),s[p]=C??"",p++}})}if(a)return;const l=t.filter(n=>n.key&&n.value);m(l),u()},[r,t,m,u,g]),S=L(()=>t.every(a=>!!a.key&&a.value?.length||!a.key&&!a.value?.length),[t]);return e($,{title:h,open:c,handleClose:u,fullScreen:!1,children:v(i,{marginLeft:1,minWidth:640,children:[t.map((a,l)=>v(i,{children:[v(i,{display:"flex",alignItems:"flex-end",gridGap:12,marginBottom:2,children:[e(i,{flexGrow:1,children:e(D,{value:a.key,onChange:n=>x({key:n.target.value,idx:l}),placeholder:"Key",error:!!y[l],helperText:y[l]})}),e(i,{width:480,children:e(H,{values:a.value,addValue:n=>{x({idx:l,value:[...a.value,n]})},deleteValue:n=>{x({idx:l,value:a.value.filter(p=>p!==n)})}})}),e(i,{marginBottom:.75,children:e(B,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>b(l),children:e(F,{})})}),e(i,{marginBottom:.75,children:e(B,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>I(l),children:e(G,{})})})]}),e(A,{})]},l)),e(i,{display:"flex",paddingTop:2,marginTop:1,children:e(T,{variant:"contained",size:"medium",color:"primary",onClick:K,disabled:!S,children:"Save"})})]})})};export{P as KeyValueInputDialog};
2
2
  //# sourceMappingURL=KeyValueInputDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- const e=()=>({selectedLabels:[],selectedAnnotations:[],selectedOtherFilters:[]}),s=()=>({selectedKinds:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[],selectedTypes:[]}),t=[{facet:"kind",label:"Kind",key:"selectedKinds"},{facet:"spec.type",label:"Type",key:"selectedTypes"},{facet:"spec.lifecycle",label:"Lifecycle",key:"selectedLifecycles"},{facet:"relations.ownedBy",label:"Owner",key:"selectedOwners",isOwnerSelect:!0},{facet:"spec.system",label:"System",key:"selectedSystems"},{facet:"metadata.tags",label:"Tags",key:"selectedTags"}];export{t as FILTER_OPTIONS,s as emptyFilters,e as emptyKeyValueFilters};
1
+ const e=()=>({selectedKinds:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[],selectedTypes:[],selectedLabels:[],selectedAnnotations:[],selectedOtherFilters:[]}),s=[{facet:"kind",label:"Kind",key:"selectedKinds"},{facet:"spec.type",label:"Type",key:"selectedTypes"},{facet:"spec.lifecycle",label:"Lifecycle",key:"selectedLifecycles"},{facet:"relations.ownedBy",label:"Owner",key:"selectedOwners",isOwnerSelect:!0},{facet:"spec.system",label:"System",key:"selectedSystems"},{facet:"metadata.tags",label:"Tags",key:"selectedTags"}];export{s as FILTER_OPTIONS,e as emptyFilters};
2
2
  //# sourceMappingURL=types.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as g,parseEntityRef as h,DEFAULT_NAMESPACE as O}from"@backstage/catalog-model";import{asArray as n}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as d}from"lodash";import{emptyFilters as u,emptyKeyValueFilters as f}from"./types.esm.js";const c="spec.owner",i={selectedKinds:"kind",selectedTypes:"spec.type",selectedLifecycles:"spec.lifecycle",selectedOwners:"relations.ownedBy",selectedSystems:"spec.system",selectedTags:"metadata.tags"},m=e=>{for(const s of Object.values(i)){if(e===s)return{isValid:!1,errorMessage:`Filter key ${e} is part of the standard key selection.`};if(["metadata.annotations","metadata.labels"].some(a=>e.startsWith(a)))return{isValid:!1,errorMessage:`Filter key ${e} is part of the standard key value selection.`}}return{isValid:!0}},p=e=>e?e.map(s=>g(h(s,{defaultKind:"group",defaultNamespace:O}))):[],y=e=>{const s=e?n(e):[];if(s.length){const a=s[0],t=Object.keys(i).reduce((o,l)=>l===c?(o[i.selectedOwners]=p(n(a?.[c]??[])),o):(o[l]=n(a?.[i[l]]??[]),o),{}),r=a?.[c];return r?.length&&(t.selectedOwners=[...t.selectedOwners,...p(r)]),t}return u()},F=e=>{if(!e||e&&e.hasOwnProperty("catalog"))return f();const s=f(),a=n(e);if(a.length>0){const t=a[0];for(const[r,o]of Object.entries(t)){if(r.startsWith("metadata.labels")){let l=r.replace(/^metadata.labels/,"");l=l.replace(/^\.|^\[\'|^\[\"|\'\]/,""),l=l.replace(/\'\]$|\"\]$/,""),s.selectedLabels.push({key:l,value:n(o)})}else if(r.startsWith("metadata.annotations")){let l=r.replace(/^metadata.annotations/,"");l=l.replace(/^\.|^\[\'|^\[\"|\'\]/,""),l=l.replace(/\'\]$|\"\]$/,""),s.selectedAnnotations.push({key:l,value:n(o)})}m(r).isValid&&s.selectedOtherFilters.push({key:r,value:n(o)})}}return s},b=e=>{if(e&&!e.hasOwnProperty("catalog"))return y(e);const s=Object.keys(i).reduce((t,r)=>(t[r]=n(e?.catalog?.[i[r]]??[]),t),{}),a=e?.catalog?.[c];return a?.length&&(s.selectedOwners=[...s.selectedOwners,...p(a)]),s},v=(e,s)=>{const a={};if(e&&Object.values(e).some(t=>t.length>0))for(const[t,r]of Object.entries(e))r?.length>0&&(a[i[t]]=r);if(s){for(const t of s.selectedLabels)t.value?.length>0&&(a[`metadata.labels.${t.key}`]=t.value);for(const t of s.selectedAnnotations)t.value?.length>0&&(a[`metadata.annotations.${t.key}`]=t.value);for(const t of s.selectedOtherFilters)t.value?.length>0&&(a[t.key]=t.value)}if(!d(a))return[a]},k=(e=u(),s=f())=>Object.values(e).some(a=>!d(a))||Object.values(s).some(a=>!d(a));export{k as filterPresent,m as isValidOtherFilterKey,y as mapCatalogFilterToFilters,F as mapCatalogFilterToFormKeyValueFilters,v as mapFiltersToCatalogFilter,b as mapInputFilterToFormFilters};
1
+ import{stringifyEntityRef as b,parseEntityRef as F,DEFAULT_NAMESPACE as k}from"@backstage/catalog-model";import{asArray as i}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as m}from"lodash";import{emptyFilters as f}from"./types.esm.js";const p="spec.owner",n={selectedKinds:"kind",selectedTypes:"spec.type",selectedLifecycles:"spec.lifecycle",selectedOwners:"relations.ownedBy",selectedSystems:"spec.system",selectedTags:"metadata.tags"},h=t=>Object.values(n).includes(t)||t===p||["metadata.annotations","metadata.labels"].some(s=>t.startsWith(s))?{isValid:!1,errorMessage:`Filter key ${t} is already part of the standard key selection.`}:t==="catalog"?{isValid:!1,errorMessage:"Legacy catalog filters are not supported"}:{isValid:!0},u=t=>t?t.map(s=>b(F(s,{defaultKind:"group",defaultNamespace:k}))):[],O=t=>{const s=t?i(t):[];if(s.length){const a=[];for(const l of s){const e=Object.keys(n).reduce((r,c)=>c===p?(r[n.selectedOwners]=u(i(l?.[p]??[])),r):(r[c]=i(l?.[n[c]]??[]),r),f()),d=l?.[p];d?.length&&(e.selectedOwners=[...e.selectedOwners,...u(d)]);const y=new RegExp(/^\.|^\['|^\["/),g=new RegExp(/']$|"]$/);for(const[r,c]of Object.entries(l)){if(r.startsWith("metadata.labels")){let o=r.replace(/^metadata.labels/,"");o=o.replace(y,""),o=o.replace(g,""),e.selectedLabels.push({key:o,value:i(c)})}else if(r.startsWith("metadata.annotations")){let o=r.replace(/^metadata.annotations/,"");o=o.replace(y,""),o=o.replace(g,""),e.selectedAnnotations.push({key:o,value:i(c)})}h(r).isValid&&e.selectedOtherFilters.push({key:r,value:i(c)})}a.push(e)}return a}return[f()]},v=t=>{if(t&&!t.hasOwnProperty("catalog"))return O(t);const s=Object.keys(n).reduce((l,e)=>(l[e]=i(t?.catalog?.[n[e]]??[]),l),f()),a=t?.catalog?.[p];return a?.length&&(s.selectedOwners=[...s.selectedOwners,...u(a)]),[s]},w=t=>{const s=[];for(const a of t??[]){const l={};if(a&&Object.values(a).some(e=>e.length>0))for(const[e,d]of Object.entries(a))Object.keys(n).includes(e)&&d?.length>0&&(l[n[e]]=d);for(const e of a.selectedLabels??[])e.value?.length>0&&(l[`metadata.labels.${e.key}`]=e.value);for(const e of a.selectedAnnotations??[])e.value?.length>0&&(l[`metadata.annotations.${e.key}`]=e.value);for(const e of a.selectedOtherFilters??[])e.value?.length>0&&(l[e.key]=e.value);m(l)||s.push(l)}if(!m(s))return s},j=(t=[f()])=>t.some(s=>Object.values(s).some(a=>!m(a)));export{j as filterPresent,h as isValidOtherFilterKey,O as mapCatalogFilterToFilters,w as mapFiltersToCatalogFilter,v as mapInputFilterToFormFilters};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,jsx as e,Fragment as d}from"react/jsx-runtime";import{createElement as w}from"react";import{parseEntityRef as R}from"@backstage/catalog-model";import{useApi as N,configApiRef as B}from"@backstage/core-plugin-api";import{EntityDisplayName as f}from"@backstage/plugin-catalog-react";import{makeStyles as j,Box as m,Typography as y,Button as u,Grid as r,TextField as z,Checkbox as P,Chip as W}from"@material-ui/core";import{Autocomplete as D}from"@material-ui/lab";import{combineEntityFilterQueries as G,getGroupFilterFromConfig as I}from"@spotify/backstage-plugin-soundcheck-common";import{EntitiesAutocompletePicker as Q}from"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import{EntityAutocompletePicker as p}from"../Filter/EntityAutocompletePicker.esm.js";import{FormFieldLabel as X}from"../FormFieldLabel/FormFieldLabel.esm.js";const b=(i,{selected:l})=>a(d,{children:[e(P,{value:i,checked:l,color:"primary"}),e(f,{entityRef:typeof i=="string"?i:i.value})]}),C=(i,l)=>e(d,{children:i.map((n,s)=>{const o=typeof n=="string"?n:n.value;return w(W,{...l({index:s}),key:o,label:e(f,{entityRef:o}),size:"small"})})}),_=i=>{try{return R(i).kind.toLowerCase()==="system"}catch{return!1}},$=j(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},entityFilterLabel:{fontWeight:"bold",marginTop:i.spacing(2)},additionalFilters:{marginTop:i.spacing(2)}})),q=({trackFilter:i,stagedTypes:l,stagedLifecycles:n,stagedOwners:s,stagedSystems:o,stagedCertificationStatus:F,onTypesChange:x,onLifecyclesChange:v,onOwnersChange:k,onSystemsChange:T,onCertificationStatusChange:h,onApplyFilters:S,onClearFilters:A,hasFilterChanges:L,children:g})=>{const c=$(),E=N(B);return a("div",{className:c.sidebar,children:[a(m,{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1,children:[e(y,{variant:"subtitle2",children:"Filters"}),(l.length>0||n.length>0||s.length>0||o.length>0)&&e(u,{size:"small",onClick:A,children:"Clear All"})]}),a(r,{container:!0,spacing:1,children:[e(r,{item:!0,xs:12,children:e(p,{facet:"spec.type",label:"Type",values:l,onChange:t=>x(t??[]),filter:i})}),e(r,{item:!0,xs:12,children:e(p,{facet:"spec.lifecycle",label:"Lifecycle",values:n,onChange:t=>v(t??[]),filter:i})}),e(r,{item:!0,xs:12,children:e(Q,{label:"Owner",values:s,onChange:t=>k(t??[]),filter:G({kind:["group"]},I(E)),renderOption:b,renderTags:C})}),e(r,{item:!0,xs:12,children:e(p,{facet:"relations.partOf",label:"System",values:o,onChange:t=>T(t??[]),filter:i,renderOption:b,renderTags:C,facetFilter:_})}),h&&a(d,{children:[e(r,{item:!0,xs:12,children:e(y,{variant:"subtitle2",className:c.entityFilterLabel,children:"Entity Table Filters"})}),e(r,{item:!0,xs:12,children:a(m,{padding:0,marginBottom:1,children:[e(X,{title:"Status"}),e(D,{value:F,renderInput:t=>e(z,{...t,variant:"outlined"}),onChange:(t,O)=>h(O??""),options:["Passed","Failed","Not Reported"]})]})})]})]}),g&&e("div",{className:c.additionalFilters,children:g}),e(m,{mt:2,children:e(u,{variant:"contained",color:"primary",size:"small",fullWidth:!0,onClick:S,disabled:!L,children:"Apply Filters"})})]})};export{q as FilterSidebar};
1
+ import"react/jsx-runtime";import"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@backstage/plugin-catalog-react";import{makeStyles as t}from"@material-ui/core";import"@material-ui/lab";import"@spotify/backstage-plugin-soundcheck-common";import"../EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js";import"../Filter/EntityAutocompletePicker.esm.js";import"../FormFieldLabel/FormFieldLabel.esm.js";t(i=>({sidebar:{width:"275px",flexShrink:0,height:"100%",padding:i.spacing(3),display:"flex",flexDirection:"column",borderRight:`1px solid ${i.palette.divider}`},filterLabel:{fontWeight:"bold",marginBottom:i.spacing(1)},entityFilterLabel:{fontWeight:"bold",marginTop:i.spacing(2)},additionalFilters:{marginTop:i.spacing(2)}}));
2
2
  //# sourceMappingURL=FilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,jsx as e}from"react/jsx-runtime";import{makeStyles as C,Box as a,TextField as S,FormControlLabel as b,Checkbox as g,Typography as k}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import L from"@material-ui/icons/CheckBoxOutlineBlank";import I from"@material-ui/icons/ExpandMore";import{Autocomplete as A}from"@material-ui/lab";import{useState as E,useEffect as F,useCallback as m}from"react";import{CheckIcon as O}from"../CheckIcon/CheckIcon.esm.js";import{CheckState as r}from"../CheckPage/utils.esm.js";import{FormFieldLabel as T}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const z=[r.PASSED,r.FAILED,r.WARNING,r.EXEMPT,r.NOT_APPLICABLE,r.ERROR],N=C({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),p=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),P=(l,{selected:t})=>e(b,{onClick:o=>o.preventDefault(),control:e(g,{icon:e(L,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:c(a,{display:"flex",alignItems:"center",children:[e(O,{result:l}),e(a,{mr:1}),e(k,{children:p(l)})]})}),R=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const i=N(),[d,n]=E(!1);F(()=>{o(l)},[l,o]);const f=m((s,h)=>{o(h)},[o]),u=m(()=>{o(t?.length?t:[])},[t,o]);return c(a,{pb:1,pt:1,className:i.container,children:[e(T,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(A,{open:d,onOpen:()=>n(!0),onClose:()=>n(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:z,value:t,getOptionLabel:p,onChange:f,onBlur:u,ListboxComponent:y,renderOption:P,size:"small",popupIcon:e(I,{"data-testid":"selected-facets-expand"}),renderInput:s=>e(S,{...s,variant:"outlined"})})]})};export{R as StateFilter};
1
+ import"react/jsx-runtime";import{makeStyles as o}from"@material-ui/core";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/icons/ExpandMore";import"@material-ui/lab";import"react";import"../CheckIcon/CheckIcon.esm.js";import"../../graphql/generated/index.esm.js";import"../FormFieldLabel/FormFieldLabel.esm.js";import"../ListboxVirtualized/ListboxVirtualized.esm.js";o({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}});
2
2
  //# sourceMappingURL=StateFilter.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as n,jsxs as P,Fragment as T}from"react/jsx-runtime";import{makeStyles as V,TextField as v,IconButton as z}from"@material-ui/core";import j from"@material-ui/icons/Clear";import{Autocomplete as k}from"@material-ui/lab";import{useState as F,useMemo as W}from"react";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const B=V(l=>({clearIndicator:{marginRight:l.spacing(.5)}})),D=({options:l,onChange:r,value:t,placeholder:d,getOptionLabel:s,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c=!1,isLoading:g=!1,autoSelect:I=!0,renderOption:f,testId:h,disableCloseOnSelect:S,multiple:o,multipleValue:a,getOptionSelected:b})=>{const[C,O]=F(t??""),x=B(),A=W(()=>o?a||[]:t||null,[o,a,t]),L=!o&&t;return n(k,{multiple:o,disableCloseOnSelect:S,options:l,inputValue:C,classes:{clearIndicator:x.clearIndicator},onInputChange:(e,i)=>O(i),onChange:(e,i)=>r(i),value:A,getOptionLabel:s,ListboxComponent:y,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c,loading:g,closeIcon:null,disableClearable:!0,getOptionSelected:b,autoSelect:I,renderOption:f,renderTags:()=>null,"data-testid":h,renderInput:e=>n(v,{...e,placeholder:d,variant:"outlined",margin:"dense",InputProps:{...e.InputProps,endAdornment:L?P(T,{children:[n(z,{onClick:()=>r(""),size:"small",children:n(j,{fontSize:"small"})}),e.InputProps.endAdornment]}):e.InputProps.endAdornment}})})};export{D as ControlledAutocomplete};
1
+ import{jsx as n,jsxs as T,Fragment as V}from"react/jsx-runtime";import{makeStyles as v,TextField as z,IconButton as j}from"@material-ui/core";import k from"@material-ui/icons/Clear";import{Autocomplete as D}from"@material-ui/lab";import{useState as F,useMemo as W}from"react";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const B=v(l=>({clearIndicator:{marginRight:l.spacing(.5)}})),M=({options:l,onChange:r,value:t,placeholder:d,getOptionLabel:s,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c=!1,isLoading:g=!1,autoSelect:b=!0,renderOption:I,testId:O,disableCloseOnSelect:f,multiple:o,multipleValue:a,getOptionSelected:S,getOptionDisabled:h})=>{const[C,x]=F(t??""),A=B(),L=W(()=>o?a||[]:t||null,[o,a,t]),P=!o&&t;return n(D,{multiple:o,disableCloseOnSelect:f,options:l,inputValue:C,classes:{clearIndicator:A.clearIndicator},onInputChange:(e,i)=>x(i),onChange:(e,i)=>r(i),value:L,getOptionLabel:s,ListboxComponent:y,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:c,loading:g,closeIcon:null,disableClearable:!0,getOptionSelected:S,getOptionDisabled:h,autoSelect:b,renderOption:I,renderTags:()=>null,"data-testid":O,renderInput:e=>n(z,{...e,placeholder:d,variant:"outlined",margin:"dense",InputProps:{...e.InputProps,endAdornment:P?T(V,{children:[n(j,{onClick:()=>r(""),size:"small",children:n(k,{fontSize:"small"})}),e.InputProps.endAdornment]}):e.InputProps.endAdornment}})})};export{M as ControlledAutocomplete};
2
2
  //# sourceMappingURL=ControlledAutocomplete.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as d,jsx as e}from"react/jsx-runtime";import{Typography as p}from"@material-ui/core";import{formStyles as s}from"../../utils/formStyles.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"lodash";import{FilterComponent as c}from"../Filter/FilterComponent.esm.js";const n=({description:r,name:i,keyValueFilterName:t,excludeFilterName:l,excludeKeyValueFilterName:m,disabled:o})=>{const a=s();return d("div",{className:a.filters,children:[e(p,{variant:"body2",children:r}),e(c,{filterName:i,keyValueFilterName:t,disabled:o,excludeFilterName:l,excludeKeyValueFilterName:m})]})};export{n as FormFilterSection};
1
+ import{jsxs as l,jsx as e}from"react/jsx-runtime";import{Typography as d}from"@material-ui/core";import{formStyles as n}from"../../utils/formStyles.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"lodash";import{FilterComponent as p}from"../Filter/FilterComponent.esm.js";const s=({description:r,includeFilterName:i,excludeFilterName:t,disabled:o})=>{const m=n();return l("div",{className:m.filters,children:[e(d,{variant:"body2",children:r}),e(p,{includeFilterName:i,excludeFilterName:t,disabled:o})]})};export{s as FormFilterSection};
2
2
  //# sourceMappingURL=FormFilterSection.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,Fragment as C,jsxs as n}from"react/jsx-runtime";import{makeStyles as N,Grid as r,Card as T,Stepper as F,Step as L,StepLabel as w,StepContent as R,Box as j,Button as s}from"@material-ui/core";import{useStepper as A}from"../../hooks/useStepper.esm.js";import{formStyles as P}from"../../utils/formStyles.esm.js";import{FooterButtons as V}from"../FooterButtons/FooterButtons.esm.js";const G=N(i=>({iconRoot:{color:i.palette.action.disabledBackground},iconText:{fill:i.palette.text.secondary},iconActive:{"& text":{fill:i.palette.primary.contrastText}}})),I=({onClose:i,handleSubmit:p,trigger:d,onSubmit:m,initialVisited:h,stepNameMap:x,steps:l,isLoading:S,isReadOnly:v,saveButtonText:u})=>{const t=P(),a=G(),{activeStep:b,handleNext:B,handleBack:f,isPreviousStep:g,isVisitedStep:k,onStepClick:y}=A(h,x);return e(C,{children:n(r,{container:!0,spacing:2,className:t.root,children:[e(r,{item:!0,style:{width:"100%"},children:e(T,{className:t.card,children:e(F,{className:t.stepper,activeStep:b,orientation:"vertical",children:l.map((c,o)=>n(L,{children:[e(w,{className:g(o)||k(o)?t.stepLabel:void 0,onClick:()=>y(o),StepIconProps:{classes:{root:a.iconRoot,text:a.iconText,active:a.iconActive}},children:c.label}),n(R,{children:[c.content(),e(j,{className:t.buttonChoices,sx:{mb:2},children:n("div",{children:[o!==0&&e(s,{className:t.backButton,onClick:f,children:"Back"}),o!==l.length-1&&e(s,{variant:"contained",color:"primary",onClick:async()=>{await B(d)},children:"Next"})]})})]})]},c.label))})})}),e(r,{item:!0,xs:12,children:e(V,{onCancel:i,saveButtonText:u,isLoading:S,onSave:v?void 0:p(m)})})]})})};export{I as FormStepper};
1
+ import{jsx as e,Fragment as N,jsxs as n}from"react/jsx-runtime";import{makeStyles as f,Grid as r,Card as T,Stepper as F,Step as L,StepLabel as w,StepContent as R,Box as j,Button as s}from"@material-ui/core";import{useStepper as A}from"../../hooks/useStepper.esm.js";import{formStyles as P}from"../../utils/formStyles.esm.js";import{FooterButtons as V}from"../FooterButtons/FooterButtons.esm.js";const G=f(i=>({iconRoot:{color:i.palette.action.disabledBackground},iconText:{fill:i.palette.text.secondary},iconActive:{"& text":{fill:i.palette.primary.contrastText}}})),I=({onClose:i,handleSubmit:p,trigger:d,onSubmit:m,initialVisited:h,stepNameMap:x,steps:l,isLoading:S,isReadOnly:v,saveButtonText:u})=>{const t=P(),a=G(),{activeStep:b,handleNext:B,handleBack:C,isPreviousStep:g,isVisitedStep:k,onStepClick:y}=A(h,x);return e(N,{children:n(r,{container:!0,spacing:2,className:t.root,children:[e(r,{item:!0,style:{width:"100%"},children:e(T,{className:t.card,children:e(F,{className:t.stepper,activeStep:b,orientation:"vertical",children:l.map((c,o)=>n(L,{children:[e(w,{className:g(o)||k(o)?t.stepLabel:void 0,onClick:()=>y(o),StepIconProps:{classes:{root:a.iconRoot,text:a.iconText,active:a.iconActive}},children:c.label}),n(R,{children:[c.content(),e(j,{className:t.buttonChoices,sx:{mb:2},children:n("div",{children:[o!==0&&e(s,{className:t.backButton,onClick:C,children:"Back"}),o!==l.length-1&&e(s,{variant:"contained",color:"primary",onClick:async()=>{await B(d)},children:"Next"})]})})]})]},c.label))})})}),e(r,{item:!0,xs:12,children:e(V,{onCancel:i,saveButtonText:u,isLoading:S,onSave:v?void 0:p(m)})})]})})};export{I as FormStepper};
2
2
  //# sourceMappingURL=FormStepper.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as g,jsxs as h}from"react/jsx-runtime";import{makeStyles as d,Box as u,Typography as p}from"@material-ui/core";const f=d(e=>({overlay:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},messageContainer:{textAlign:"center",padding:e.spacing(2)},mainMessage:{color:e.palette.common.white,fontSize:"1.5rem",marginBottom:e.spacing(2)},statsMessage:{color:e.palette.common.white,fontSize:"0.875rem",opacity:.8}})),l=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),m=(e,a,s)=>e===1?a:s,y=(e,a)=>{if(!e)return{teams:0,entities:0,checks:0};let s=0,t=0;const n=i=>{s+=1,t+=i.ownedEntityRefs?.length||0,Object.values(i.children||{}).forEach(c=>{n(c)})},o=Object.values(e)[0];o&&n(o);const r=a?.levels?.reduce((i,c)=>i+(c.checks?.length||0),0)||0;return{teams:s,entities:t,results:r*t}},x=({isLoading:e,hierarchyData:a,track:s})=>{const t=f();if(!e)return null;const{teams:n,entities:o,results:r}=y(a,s);return g(u,{className:t.overlay,children:h(u,{className:t.messageContainer,children:[g(p,{className:t.mainMessage,children:"Calculating..."}),h(p,{className:t.statsMessage,children:["Aggregating the statuses for ",l(n||0)," ",m(n||0,"team","teams")," owning"," ",l(o||0)," ",m(o||0,"entity","entities")," across"," ",l(r||0)," check"," ",m(r||0,"result","results")]})]})})};export{x as LoadingOverlay};
1
+ import"react/jsx-runtime";import{makeStyles as e}from"@material-ui/core";e(t=>({overlay:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},messageContainer:{textAlign:"center",padding:t.spacing(2)},mainMessage:{color:t.palette.common.white,fontSize:"1.5rem",marginBottom:t.spacing(2)},statsMessage:{color:t.palette.common.white,fontSize:"0.875rem",opacity:.8}}));
2
2
  //# sourceMappingURL=LoadingOverlay.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as I,jsx as n,Fragment as S}from"react/jsx-runtime";import{useApi as w}from"@backstage/core-plugin-api";import{entityPresentationApiRef as P}from"@backstage/plugin-catalog-react";import{useTheme as E}from"@material-ui/core";import{makeStyles as L}from"@material-ui/core/styles";import{ResponsiveCirclePacking as T}from"@nivo/circle-packing";import{useState as j,useEffect as z,useMemo as M}from"react";import{getContrastTextColor as b}from"../../../utils/colors.esm.js";import{findNodePath as C}from"./findNodePath.esm.js";import{hierarchyToNivo as A}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as D}from"./LoadingOverlay.esm.js";const O=L(e=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:e.palette.background.paper,padding:e.spacing(1),borderRadius:e.shape.borderRadius,boxShadow:e.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:e.palette.common.white}}})),F=({groupRef:e,hierarchyData:r,trackStatus:l,getColor:c,onZoomChange:v,track:k,onNodeHover:m,selectedNode:d,onNodeSelect:y})=>{const[t,p]=j(null),f=O(),x=E(),u=w(P);z(()=>{p(d?d.id:null)},[d]);const a=M(()=>{if(!r||!e)return null;const o=r[e];return o?A(o,l||null,c,u,void 0):null},[r,l,e,c,u]),N=o=>{if(t===o.data.id)return;const i=t===o.data.id?null:o.data.id;p(i),v?.(o.data.entityRef),y?.(o.data)};if(!a)return null;const s=!l,h=x.palette.text.disabled,R=b(h);return I("div",{className:f.root,children:[n("div",{className:f.nivoContainer,children:n(T,{data:a,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:o=>s?h:o.data.color,childColor:{from:"color"},enableLabels:!0,label:o=>{if(!t)return o.data.name;const i=C(a,o.data.id),g=C(a,t);return!i||!g?"":i.length>=g.length?o.data.name:""},labelsSkipRadius:14,labelTextColor:o=>s?R:b(o.data.color||"#fff"),zoomedId:t,motionConfig:"default",isInteractive:!0,tooltip:()=>n(S,{}),onClick:N,onMouseEnter:o=>m?.(o.data),onMouseLeave:()=>m?.(null)})}),n(D,{isLoading:s,hierarchyData:r,track:k})]})};export{F as NivoCirclePacking};
1
+ import"react/jsx-runtime";import"@backstage/core-plugin-api";import"@backstage/plugin-catalog-react";import"@material-ui/core";import{makeStyles as t}from"@material-ui/core/styles";import"@nivo/circle-packing";import"react";import"@nivo/colors";import"d3-color";import"d3-interpolate";import"d3-scale";import"./LoadingOverlay.esm.js";t(o=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:o.palette.background.paper,padding:o.spacing(1),borderRadius:o.shape.borderRadius,boxShadow:o.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:o.palette.common.white}}}));
2
2
  //# sourceMappingURL=NivoCirclePacking.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as T,jsx as a,Fragment as L}from"react/jsx-runtime";import{useApi as M}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{useTheme as E}from"@material-ui/core";import{makeStyles as O}from"@material-ui/core/styles";import{ResponsiveIcicle as z}from"@nivo/icicle";import{useState as A,useEffect as D,useMemo as H}from"react";import{getContrastTextColor as k}from"../../../utils/colors.esm.js";import{hierarchyToNivo as P}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as W}from"./LoadingOverlay.esm.js";const F=O(e=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:e.palette.background.paper,padding:e.spacing(1),borderRadius:e.shape.borderRadius,boxShadow:e.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:e.palette.common.white}}})),Z=({groupRef:e,hierarchyData:r,trackStatus:l,getColor:c,onZoomChange:x,track:y,onNodeHover:m,selectedNode:s,onNodeSelect:S})=>{const[i,f]=A(null),p=F(),R=E(),u=M(j);D(()=>{f(s?s.id:null)},[s]);const h=H(()=>{if(!r||!e)return null;const o=r[e];if(!o)return null;const t=P(o,l||null,c,u,void 0);if(i&&t){const b=(n,v)=>{if(n.id===v)return n;if(n.children)for(const N of n.children){const C=b(N,v);if(C)return C}return null};return b(t,i)||t}return t},[r,l,e,c,u,i]),w=o=>{const t=i===o.data.id?null:o.data.id;f(t),x?.(o.data.entityRef),S?.(o.data)};if(!h)return null;const d=!l,g=R.palette.text.disabled,I=k(g);return T("div",{className:p.root,children:[a("div",{className:p.nivoContainer,children:a(z,{data:h,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},animateOnMount:!1,colors:o=>d?g:o.data.color,enableLabels:!0,label:o=>o.data.name,labelRotation:270,labelSkipWidth:12,labelSkipHeight:32,labelTextColor:o=>d?I:k(o.data.color||"#fff"),motionConfig:"default",isInteractive:!0,tooltip:()=>a(L,{}),onClick:w,onMouseEnter:o=>m?.(o.data),onMouseLeave:()=>m?.(null)})}),a(W,{isLoading:d,hierarchyData:r,track:y})]})};export{Z as NivoIcicle};
1
+ import"react/jsx-runtime";import"@backstage/core-plugin-api";import"@backstage/plugin-catalog-react";import"@material-ui/core";import{makeStyles as t}from"@material-ui/core/styles";import"@nivo/icicle";import"react";import"@nivo/colors";import"d3-color";import"d3-interpolate";import"d3-scale";import"./LoadingOverlay.esm.js";t(o=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:o.palette.background.paper,padding:o.spacing(1),borderRadius:o.shape.borderRadius,boxShadow:o.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:o.palette.common.white}}}));
2
2
  //# sourceMappingURL=NivoIcicle.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as g,jsx as r,Fragment as v}from"react/jsx-runtime";import{useApi as C}from"@backstage/core-plugin-api";import{entityPresentationApiRef as k}from"@backstage/plugin-catalog-react";import{useTheme as x}from"@material-ui/core";import{makeStyles as y}from"@material-ui/core/styles";import{ResponsiveSunburst as L}from"@nivo/sunburst";import{useMemo as S}from"react";import{getContrastTextColor as p}from"../../../utils/colors.esm.js";import{hierarchyToNivo as N}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as w}from"./LoadingOverlay.esm.js";const R=y(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),T=({groupRef:t,hierarchyData:e,trackStatus:a,getColor:n,track:u,onNodeHover:l,onNodeSelect:f})=>{const s=R(),h=x(),d=C(k),m=S(()=>{if(!e||!t)return null;const o=e[t];return o?N(o,a||null,n,d,void 0):null},[e,a,t,n,d]);if(!m)return null;const i=!a,c=h.palette.text.disabled,b=p(c);return g("div",{className:s.root,children:[r("div",{className:s.nivoContainer,children:r(L,{data:m,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:o=>i?c:o.data.color,childColor:{from:"color"},animate:!1,enableArcLabels:!0,arcLabel:o=>o.data.name,arcLabelsTextColor:o=>i?b:p(o.data.color||"#fff"),motionConfig:"default",isInteractive:!0,tooltip:()=>r(v,{}),arcLabelsSkipAngle:20,onMouseEnter:o=>l?.(o.data),onMouseLeave:()=>l?.(null),onClick:o=>f?.(o.data)})}),r(w,{isLoading:i,hierarchyData:e,track:u})]})};export{T as NivoSunburst};
1
+ import"react/jsx-runtime";import"@backstage/core-plugin-api";import"@backstage/plugin-catalog-react";import"@material-ui/core";import{makeStyles as t}from"@material-ui/core/styles";import"@nivo/sunburst";import"react";import"@nivo/colors";import"d3-color";import"d3-interpolate";import"d3-scale";import"./LoadingOverlay.esm.js";t(o=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:o.palette.background.paper,padding:o.spacing(1),borderRadius:o.shape.borderRadius,boxShadow:o.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:o.palette.common.white}}}));
2
2
  //# sourceMappingURL=NivoSunburst.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as k,jsx as a,Fragment as N}from"react/jsx-runtime";import{useApi as S}from"@backstage/core-plugin-api";import{entityPresentationApiRef as T}from"@backstage/plugin-catalog-react";import{useTheme as L}from"@material-ui/core";import{makeStyles as R}from"@material-ui/core/styles";import{ResponsiveTreeMap as w}from"@nivo/treemap";import{useState as I,useMemo as M}from"react";import{getContrastTextColor as i}from"../../../utils/colors.esm.js";import{hierarchyToNivo as j}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as z}from"./LoadingOverlay.esm.js";const O=R(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),A=({groupRef:t,hierarchyData:e,trackStatus:n,getColor:l,onZoomChange:f,track:h,onNodeHover:d,onNodeSelect:b})=>{const[g,v]=I(null),s=O(),C=L(),p=S(T),m=M(()=>{if(!e||!t)return null;const o=e[t];return o?j(o,n||null,l,p,void 0):null},[e,n,t,l,p]),y=o=>{const x=g===o.data.id?null:o.data.id;v(x),f?.(o.data.entityRef),b?.(o.data)};if(!m)return null;const r=!n,c=C.palette.text.disabled,u=i(c);return k("div",{className:s.root,children:[a("div",{className:s.nivoContainer,children:a(w,{data:m,label:o=>o.data.name,margin:{top:20,right:20,bottom:20,left:20},labelSkipSize:24,labelTextColor:o=>r?u:i(o.data.color||"#fff"),nodeOpacity:1,parentLabel:o=>o.data.name,parentLabelPosition:"top",parentLabelTextColor:o=>r?u:i(o.data.color||"#fff"),colors:o=>r?c:o.data.color,borderColor:{from:"color",modifiers:[["darker",1.25]]},isInteractive:!0,animate:!1,tooltip:()=>a(N,{}),onClick:y,onMouseEnter:o=>d?.(o.data),onMouseLeave:()=>d?.(null)})}),a(z,{isLoading:r,hierarchyData:e,track:h})]})};export{A as NivoTreemap};
1
+ import"react/jsx-runtime";import"@backstage/core-plugin-api";import"@backstage/plugin-catalog-react";import"@material-ui/core";import{makeStyles as t}from"@material-ui/core/styles";import"@nivo/treemap";import"react";import"@nivo/colors";import"d3-color";import"d3-interpolate";import"d3-scale";import"./LoadingOverlay.esm.js";t(o=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:o.palette.background.paper,padding:o.spacing(1),borderRadius:o.shape.borderRadius,boxShadow:o.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:o.palette.common.white}}}));
2
2
  //# sourceMappingURL=NivoTreemap.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as m}from"react/jsx-runtime";import{makeStyles as d,Box as s,Link as l,Typography as b}from"@material-ui/core";import p from"@material-ui/icons/ChevronRight";import{Fragment as h}from"react";const u=d(e=>({breadcrumbContainer:{display:"flex",alignItems:"center",height:24},chevronIcon:{color:e.palette.text.secondary,marginLeft:4,marginRight:4},breadcrumbLink:{color:e.palette.text.secondary,fontWeight:400,cursor:"pointer",background:"none",border:"none",padding:0,font:"inherit",textDecoration:"none","&:hover":{textDecoration:"underline"},"&.active":{color:e.palette.text.primary,fontWeight:600},"&.disabled":{cursor:"default","&:hover":{textDecoration:"none"}}},breadcrumbText:{color:"inherit",fontWeight:"inherit"}})),f=({node:e,onNodeClick:i})=>{const n=u();if(!e)return t("div",{className:n.breadcrumbContainer});const c=(r=>{const o=[r];let a=r.parent;for(;a;)o.unshift(a),a=a.parent;return o})(e);return t(s,{className:n.breadcrumbContainer,children:c.map((r,o)=>m(h,{children:[o>0&&t(p,{fontSize:"small",className:n.chevronIcon}),t(l,{component:"button",variant:"body2",onClick:()=>i?.(r),className:`${n.breadcrumbLink} ${r===e?"active":""} ${i?"":"disabled"}`,children:t(b,{variant:"body2",component:"span",className:n.breadcrumbText,children:r.name})})]},r.id))})};export{f as VisualizationBreadcrumb};
1
+ import"react/jsx-runtime";import{makeStyles as t}from"@material-ui/core";import"@material-ui/icons/ChevronRight";import"react";t(e=>({breadcrumbContainer:{display:"flex",alignItems:"center",height:24},chevronIcon:{color:e.palette.text.secondary,marginLeft:4,marginRight:4},breadcrumbLink:{color:e.palette.text.secondary,fontWeight:400,cursor:"pointer",background:"none",border:"none",padding:0,font:"inherit",textDecoration:"none","&:hover":{textDecoration:"underline"},"&.active":{color:e.palette.text.primary,fontWeight:600},"&.disabled":{cursor:"default","&:hover":{textDecoration:"none"}}},breadcrumbText:{color:"inherit",fontWeight:"inherit"}}));
2
2
  //# sourceMappingURL=VisualizationBreadcrumb.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as e,Fragment as Y,jsx as t}from"react/jsx-runtime";import{TooltipTrigger as x,ButtonLink as $,Tooltip as E}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 A,useRef as F}from"react";import{useSoundcheckAlert as P}from"../../hooks/useSoundcheckAlert.esm.js";const z=({resourceType:r,disableImport:I,disableExport:S,onImport:k,onExport:v})=>{const w=`${a(r)} Import Success`,l=`Error Importing ${a(r)}s`,L=`Error Exporting ${a(r)}s`,{showAlert:n}=P(),[b,c]=A(!1),[M,p]=A(!1),m=F(null);return e(Y,{children:[e(x,{children:[t($,{isDisabled:S||M,onClick:async()=>{try{p(!0),await v()}catch(o){n({title:L,message:`An error occurred while exporting ${r}s: ${o.message}`,severity:"error"})}finally{p(!1)}},"aria-label":"Export All to YAML",iconStart:t(B,{}),variant:"secondary",children:"Export"}),e(E,{children:["Export all ",r,"s to YAML"]})]}),e(x,{children:[t($,{isDisabled:I||b,"aria-label":"Import from YAML",iconStart:t(j,{}),variant:"secondary",onClick:()=>m?.current?.click(),children:"Import"}),e(E,{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 T=>{const g=T.target?.result?.toString();if(g){const C=D.load(g);try{const{created:f,skipped:R,failed:s}=await k(C);let h=w,u="success",y=`Successfully imported ${f.length} ${r}(s), failed ${s.length} ${r}(s), ${R.length} ${r}(s) already existed.`;s.length&&(h=l,u=f.length?"warning":"error",y+=` Errors: ${JSON.stringify(s)}.`),n({title:h,message:y,severity:u})}catch{}}})}catch(i){n({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};
1
+ import{jsxs as e,Fragment as Y,jsx as t}from"react/jsx-runtime";import{TooltipTrigger as x,ButtonLink as $,Tooltip as E}from"@backstage/ui";import{RiExportLine as j,RiImportLine as B}from"@remixicon/react";import D from"js-yaml";import{capitalize as a}from"lodash";import{useState as A,useRef as F}from"react";import{useSoundcheckAlert as O}from"../../hooks/useSoundcheckAlert.esm.js";const P=({resourceType:r,disableImport:I,disableExport:S,onImport:k,onExport:v})=>{const w=`${a(r)} Import Success`,l=`Error Importing ${a(r)}s`,L=`Error Exporting ${a(r)}s`,{showAlert:n}=O(),[b,c]=A(!1),[M,p]=A(!1),m=F(null);return e(Y,{children:[e(x,{children:[t($,{isDisabled:S||M,onClick:async()=>{try{p(!0),await v()}catch(o){n({title:L,message:`An error occurred while exporting ${r}s: ${o.message}`,severity:"error"})}finally{p(!1)}},"aria-label":"Export All to YAML",iconStart:t(j,{}),variant:"secondary",children:"Export"}),e(E,{children:["Export all ",r,"s to YAML"]})]}),e(x,{children:[t($,{isDisabled:I||b,"aria-label":"Import from YAML",iconStart:t(B,{}),variant:"secondary",onClick:()=>m?.current?.click(),children:"Import"}),e(E,{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 T=>{const g=T.target?.result?.toString();if(g){const C=D.load(g);try{const{created:f,skipped:R,failed:s}=await k(C);let h=w,u="success",y=`Successfully imported ${f.length} ${r}(s), failed ${s.length} ${r}(s), ${R.length} ${r}(s) already existed.`;s.length&&(h=l,u=f.length?"warning":"error",y+=` Errors: ${JSON.stringify(s)}.`),n({title:h,message:y,severity:u})}catch{}}})}catch(i){n({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{P as ImportExportPanelBUI};
2
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 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};
1
+ import"react/jsx-runtime";import{makeStyles as r}from"@material-ui/core";import"@material-ui/icons/GetApp";import"@material-ui/icons/Publish";import"js-yaml";import"lodash";import"react";import"../../hooks/useSoundcheckAlert.esm.js";r(i=>({button:{height:"44px",lineHeight:"1.25rem",padding:i.spacing(1.5,1),marginRight:i.spacing(.5),borderRadius:"12px",color:i.palette.text.primary}}));
2
2
  //# sourceMappingURL=ImportExportPanelDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as a,jsxs as T}from"react/jsx-runtime";import{makeStyles as $,Grid as u}from"@material-ui/core";import{createContext as j,useMemo as H,useState as i,useEffect as y,useCallback as A}from"react";import{useSearchParams as z}from"react-router-dom";import B from"react-use/lib/useDebounce";import{useFacetsForOwner as I}from"../../hooks/facets/useFacetsForOwner.esm.js";import{useLCPReporting as K}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as M}from"../../hooks/useLoadTimeReporting.esm.js";import{LoadingIndicator as U}from"../LoadingIndicator/LoadingIndicator.esm.js";import{OverviewTable as q}from"../OverviewTable/OverviewTable.esm.js";import{RowHeights as J}from"../OverviewTable/resultsTableUtils.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as Q}from"../SoundcheckHeader/useHeader.esm.js";import{OverviewPageHeader as W}from"./OverviewPageHeader.esm.js";const X=$(e=>({tableContainer:{padding:0,backgroundColor:"transparent",paddingBottom:J.paginationControl},campaignsGrid:{margin:`0 0 ${e.spacing(3)}px`,border:`1px solid ${e.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:e.spacing(2),gap:e.spacing(2)},campaignsLink:{textAlign:"center",margin:`${e.spacing(1)}rem 0 ${e.spacing(1)}`},tableLoading:{backgroundColor:e.palette.background.paper,padding:e.spacing(6)},noPadding:{padding:0},accordion:{boxShadow:"none"}})),C=j({searchValue:"",updateSearchValue:e=>{},debouncedSearchValue:"",updateDebouncedSearchValue:e=>{},pivot:!1,updatePivot:e=>{}}),Y=({isFixedGroup:e=!1})=>{const[r,g]=z(),{group:d,kind:o,type:n}=Object.fromEntries(r.entries()),f=H(()=>({routeName:"soundcheck-overview",additionalAttributes:{group:d||"",selectedKind:o||"",selectedType:n||""}}),[d,o,n]),{reportContentLoaded:h}=M(f),{reporter:P}=K(f);Q();const[t,v]=i(void 0),[S,L]=i(void 0),[w,V]=i(),[c,E]=i(""),[O,b]=i(""),[F,G]=i(!1);B(()=>{b(c)},800,[c]),y(()=>{(t?.kind!==o||t?.type!==n)&&v({kind:o,type:n})},[o,n,t]);const{data:k,isLoading:p}=I(d),R=S||w,D=A((s,l,N)=>{s&&(v({kind:s,type:l}),l?(r.set("kind",s),r.set("type",l)):(r.delete("type"),r.set("kind",s)),g(r,{replace:N}))},[r,g]),m=X(),x=P?.getLCPValue();return y(()=>{p||h({lcp:x})},[p,h,x]),a(C.Provider,{value:{searchValue:c,updateSearchValue:E,debouncedSearchValue:O,updateDebouncedSearchValue:b,pivot:F,updatePivot:G},children:T(u,{container:!0,spacing:0,children:[a(u,{item:!0,xs:12,className:m.noPadding,children:a(W,{unfilteredFacets:k,kind:t?.kind,type:t?.type,onChange:D,setError:V,isLoading:p,isFixedGroup:e})}),a(u,{item:!0,xs:12,className:m.tableContainer,children:p?a("div",{className:m.tableLoading,children:a(U,{size:80})}):a(q,{facets:k,kind:t?.kind,type:t?.type,setError:L,hasError:R,ownerEntityRef:d,isFixedGroup:e})})]})})};export{Y as OverviewPageContent,C as OverviewPageContext};
1
+ import{jsx as i,jsxs as $}from"react/jsx-runtime";import{makeStyles as j,Grid as g}from"@material-ui/core";import{createContext as D,useMemo as A,useState as t,useEffect as y,useCallback as H}from"react";import{useSearchParams as z}from"react-router-dom";import B from"react-use/lib/useDebounce";import{useFacetsForOwner as I}from"../../hooks/facets/useFacetsForOwner.esm.js";import{useLCPReporting as K}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as M}from"../../hooks/useLoadTimeReporting.esm.js";import{LoadingIndicator as Q}from"../LoadingIndicator/LoadingIndicator.esm.js";import{OverviewTable as q}from"../OverviewTable/OverviewTable.esm.js";import{RowHeights as J}from"../OverviewTable/resultsTableUtils.esm.js";import{OverviewPageHeader as U}from"./OverviewPageHeader.esm.js";const W=j(e=>({tableContainer:{padding:0,backgroundColor:"transparent",paddingBottom:J.paginationControl},campaignsGrid:{margin:`0 0 ${e.spacing(3)}px`,border:`1px solid ${e.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:e.spacing(2),gap:e.spacing(2)},campaignsLink:{textAlign:"center",margin:`${e.spacing(1)}rem 0 ${e.spacing(1)}`},tableLoading:{backgroundColor:e.palette.background.paper,padding:e.spacing(6)},noPadding:{padding:0},accordion:{boxShadow:"none"}})),C=D({searchValue:"",updateSearchValue:e=>{},debouncedSearchValue:"",updateDebouncedSearchValue:e=>{},pivot:!1,updatePivot:e=>{}}),X=({isFixedGroup:e=!1})=>{const[r,u]=z(),{group:d,kind:o,type:n}=Object.fromEntries(r.entries()),f=A(()=>({routeName:"soundcheck-overview",additionalAttributes:{group:d||"",selectedKind:o||"",selectedType:n||""}}),[d,o,n]),{reportContentLoaded:h}=M(f),{reporter:P}=K(f),[a,v]=t(void 0),[L,S]=t(void 0),[w,V]=t(),[c,E]=t(""),[O,b]=t(""),[F,G]=t(!1);B(()=>{b(c)},800,[c]),y(()=>{(a?.kind!==o||a?.type!==n)&&v({kind:o,type:n})},[o,n,a]);const{data:k,isLoading:p}=I(d),R=L||w,N=H((s,m,T)=>{s&&(v({kind:s,type:m}),m?(r.set("kind",s),r.set("type",m)):(r.delete("type"),r.set("kind",s)),u(r,{replace:T}))},[r,u]),l=W(),x=P?.getLCPValue();return y(()=>{p||h({lcp:x})},[p,h,x]),i(C.Provider,{value:{searchValue:c,updateSearchValue:E,debouncedSearchValue:O,updateDebouncedSearchValue:b,pivot:F,updatePivot:G},children:$(g,{container:!0,spacing:0,children:[i(g,{item:!0,xs:12,className:l.noPadding,children:i(U,{unfilteredFacets:k,kind:a?.kind,type:a?.type,onChange:N,setError:V,isLoading:p,isFixedGroup:e})}),i(g,{item:!0,xs:12,className:l.tableContainer,children:p?i("div",{className:l.tableLoading,children:i(Q,{size:80})}):i(q,{facets:k,kind:a?.kind,type:a?.type,setError:S,hasError:R,ownerEntityRef:d,isFixedGroup:e})})]})})};export{X as OverviewPageContent,C as OverviewPageContext};
2
2
  //# sourceMappingURL=OverviewPageContent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,jsx as n,Fragment as S}from"react/jsx-runtime";import{makeStyles as j,Typography as g,TextField as w,CircularProgress as R,Switch as V}from"@material-ui/core";import c from"@material-ui/core/Box";import z from"@material-ui/icons/Search";import{Autocomplete as D}from"@material-ui/lab";import{groupBy as H,sortBy as M,maxBy as N}from"lodash";import{useContext as X,useEffect as $,useMemo as v}from"react";import{useSearchParams as q}from"react-router-dom";import J from"react-use/lib/useLocalStorage";import{GroupSelector as Q}from"../GroupSelector/GroupSelector.esm.js";import{OverviewPageContext as U}from"./OverviewPageContent.esm.js";const Y=j(r=>({wrapper:{background:r.palette.background.default,paddingTop:r.spacing(0),paddingBottom:r.spacing(2),paddingRight:r.spacing(3),display:"flex",gap:r.spacing(3)},switchLabel:{marginLeft:r.spacing(1.5)}})),Z=({setError:r,unfilteredFacets:I,kind:h,type:d,onChange:x,isLoading:y,isFixedGroup:E})=>{const L=Y(),o={types:I?.types.filter(({count:e})=>e>0)??[]},[b,B]=J("soundcheck-overview-pivot-status",!1),[k]=q(),P=k.get("kind"),W=k.get("type"),{searchValue:A,updateSearchValue:F,pivot:m,updatePivot:T}=X(U);$(()=>{b!==m&&T(!!b)},[]);const s=v(()=>o?.types.map(({kind:e,type:t,count:a})=>{const i=`${e}|${t??""}`;return{facetKind:e,facetType:t,key:i,label:`${t??e} (${a>50?"50+":a})`,id:i,count:a}}).sort((e,t)=>e.key.localeCompare(t.key))??[],[o?.types]),C=v(()=>{const e=H(s,t=>t.facetKind);return Object.values(e).map(t=>t.reduce((a,i)=>{const u=a.count+i.count,l=`${i.facetKind}|all`;return{facetKind:i.facetKind,facetType:"all",count:u,key:l,id:l,label:`all ${i.facetKind.toLowerCase()}s (${u>50?"50+":u})`}},{count:0,facetType:"all",facetKind:"",key:"",label:"",id:""}))},[s]),K=v(()=>M([...s,...C],"facetKind"),[C,s]);$(()=>{if(y)return;const e=h??P,t=d??W,a=o?.types&&o.types.length>=0,i=!e&&a,u=!!e&&t!=="all"&&a&&!o?.types.find(({kind:l,type:f})=>e===l&&(!d&&!f||d===f));if(i||u){const l=N(s,f=>f.count);x(l?.facetKind??"",l?.facetType??"",!0)}},[h,P,d,y]);const G=K.find(e=>e.key===`${h}|${d??""}`)??null,O=o&&(o.types?.length??0)>0;return p(c,{className:L.wrapper,children:[!E&&p(c,{flex:1,maxWidth:364,children:[n(g,{variant:"subtitle2",component:"div",children:"Group"}),n(Q,{baseClass:!0,margin:"dense",setError:r})]}),O&&p(S,{children:[p(c,{flex:1,maxWidth:500,children:[n(g,{variant:"subtitle2",component:"div",children:"Entity Type"}),n(D,{"aria-label":"Entity Type Selection",disableClearable:!0,options:K??[],freeSolo:!1,groupBy:e=>e.facetKind,getOptionLabel:e=>e.label,value:G,onChange:(e,t)=>x(t.facetKind,t.facetType,!0),renderInput:e=>n(w,{...e,variant:"outlined",placeholder:"Select entity type",margin:"dense",fullWidth:!0,InputProps:{...e.InputProps,endAdornment:p(S,{children:[y?n(R,{color:"inherit",size:20}):null,e.InputProps.endAdornment]})}})})]}),p(c,{maxWidth:580,flex:1,children:[n(g,{variant:"subtitle2",component:"div",children:"Search Entities"}),n(w,{margin:"dense",placeholder:"Search entities",variant:"outlined",fullWidth:!0,value:A,onChange:e=>F(e.currentTarget.value),InputProps:{startAdornment:n(c,{marginRight:.75,display:"flex",alignItems:"center",children:n(z,{color:"inherit"})})}})]}),p(c,{display:"flex",flexDirection:"column",children:[n(g,{style:{marginLeft:10},variant:"subtitle2",component:"div",children:"Pivot"}),n(c,{flex:1,display:"flex",alignItems:"center",children:n(V,{checked:m,onChange:()=>{B(!m),T(!m)},inputProps:{"aria-label":"pivot overview table"}})})]})]})]})};export{Z as OverviewPageHeader};
1
+ import{jsxs as p,jsx as n,Fragment as S}from"react/jsx-runtime";import{makeStyles as j,Typography as h,TextField as $,CircularProgress as R,Switch as V}from"@material-ui/core";import c from"@material-ui/core/Box";import z from"@material-ui/icons/Search";import{Autocomplete as D}from"@material-ui/lab";import{groupBy as H,sortBy as M,maxBy as N}from"lodash";import{useContext as X,useEffect as w,useMemo as v}from"react";import{useSearchParams as q}from"react-router-dom";import J from"react-use/lib/useLocalStorage";import{GroupSelector as Q}from"../GroupSelector/GroupSelector.esm.js";import{OverviewPageContext as U}from"./OverviewPageContent.esm.js";const Y=j(r=>({wrapper:{background:r.palette.background.default,paddingTop:r.spacing(0),paddingBottom:r.spacing(2),paddingRight:r.spacing(3),display:"flex",gap:r.spacing(3)},switchLabel:{marginLeft:r.spacing(1.5)}})),Z=({setError:r,unfilteredFacets:I,kind:y,type:d,onChange:x,isLoading:g,isFixedGroup:E})=>{const L=Y(),o={types:I?.types.filter(({count:e})=>e>0)??[]},[b,B]=J("soundcheck-overview-pivot-status",!1),[k]=q(),P=k.get("kind"),F=k.get("type"),{searchValue:W,updateSearchValue:A,pivot:m,updatePivot:T}=X(U);w(()=>{b!==m&&T(!!b)},[]);const s=v(()=>o?.types.map(({kind:e,type:t,count:a})=>{const i=`${e}|${t??""}`;return{facetKind:e,facetType:t,key:i,label:`${t??e} (${a>50?"50+":a})`,id:i,count:a}}).sort((e,t)=>e.key.localeCompare(t.key))??[],[o?.types]),C=v(()=>{const e=H(s,t=>t.facetKind);return Object.values(e).map(t=>t.reduce((a,i)=>{const u=a.count+i.count,l=`${i.facetKind}|all`;return{facetKind:i.facetKind,facetType:"all",count:u,key:l,id:l,label:`all ${i.facetKind.toLowerCase()}s (${u>50?"50+":u})`}},{count:0,facetType:"all",facetKind:"",key:"",label:"",id:""}))},[s]),K=v(()=>M([...s,...C],"facetKind"),[C,s]);w(()=>{if(g)return;const e=y??P,t=d??F,a=o?.types&&o.types.length>=0,i=!e&&a,u=!!e&&t!=="all"&&a&&!o?.types.find(({kind:l,type:f})=>e===l&&(!d&&!f||d===f));if(i||u){const l=N(s,f=>f.count);x(l?.facetKind??"",l?.facetType??"",!0)}},[y,P,d,g]);const G=K.find(e=>e.key===`${y}|${d??""}`)??null,O=o&&(o.types?.length??0)>0;return p(c,{className:L.wrapper,children:[!E&&p(c,{flex:1,maxWidth:364,children:[n(h,{variant:"subtitle2",component:"div",children:"Group"}),n(Q,{baseClass:!0,margin:"dense",setError:r})]}),O&&p(S,{children:[p(c,{flex:1,maxWidth:500,children:[n(h,{variant:"subtitle2",component:"div",children:"Entity Type"}),n(D,{"aria-label":"Entity Type Selection",disableClearable:!0,options:K??[],freeSolo:!1,groupBy:e=>e.facetKind,getOptionLabel:e=>e.label,value:G,onChange:(e,t)=>x(t.facetKind,t.facetType,!0),renderInput:e=>n($,{...e,variant:"outlined",placeholder:"Select entity type",margin:"dense",fullWidth:!0,InputProps:{...e.InputProps,endAdornment:p(S,{children:[g?n(R,{color:"inherit",size:20}):null,e.InputProps.endAdornment]})}})})]}),p(c,{maxWidth:580,flex:1,children:[n(h,{variant:"subtitle2",component:"div",children:"Search Entities"}),n($,{margin:"dense",placeholder:"Search entities",variant:"outlined",fullWidth:!0,value:W,onChange:e=>A(e.currentTarget.value),InputProps:{startAdornment:n(c,{marginRight:.75,display:"flex",alignItems:"center",children:n(z,{color:"inherit"})})}})]}),p(c,{display:"flex",flexDirection:"column",children:[n(h,{style:{marginLeft:10},variant:"subtitle2",component:"div",children:"Pivot"}),n(c,{flex:1,display:"flex",alignItems:"center",children:n(V,{checked:m,onChange:()=>{B(!m),T(!m)},inputProps:{"aria-label":"pivot overview table"}})})]})]})]})};export{Z as OverviewPageHeader};
2
2
  //# sourceMappingURL=OverviewPageHeader.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as C}from"react/jsx-runtime";import{makeStyles as k,TablePagination as v}from"@material-ui/core";import{useState as x}from"react";import{RESULTS_PER_PAGE as r}from"../../utils/filters.esm.js";const R=k(e=>({pagination:{width:"-webkit-fill-available",display:"flex",justifyContent:"center",position:"fixed",bottom:"0",backgroundColor:e.palette.background.paper,borderTop:`1px solid ${e.palette.divider}`,marginRight:"40px"}})),E=({response:e,listingsPerPage:i,cursor:g,setCursor:t,prevCursors:a,setPrevCursors:s,labelPerPageDropdown:p,urlRoute:l})=>{const P=R(),u=e?.edges?e?.edges[e?.edges.length-1]:{cursor:""},[c,d]=x(0),m=()=>{s(o=>[...o,g]),t(u?.cursor)},b=()=>{t(a[a.length-1]),s(o=>o.slice(0,-1))},f=(o,n)=>{d(h=>(n>h?m():b(),n))},w=o=>{window.open(`/soundcheck/${l??"tracks?tracksPerPage="}${o.target.value}`,"_self")};return C(v,{className:P.pagination,component:"div",count:e?.totalCount??-1,rowsPerPage:i??10,onPageChange:f,page:c,onRowsPerPageChange:w,labelRowsPerPage:p??"Listings per page:",rowsPerPageOptions:[r,r*2,r*4]})};export{E as Pagination};
1
+ import"react/jsx-runtime";import{makeStyles as t}from"@material-ui/core";import"react";import"../../utils/filters.esm.js";t(i=>({pagination:{width:"-webkit-fill-available",display:"flex",justifyContent:"center",position:"fixed",bottom:"0",backgroundColor:i.palette.background.paper,borderTop:`1px solid ${i.palette.divider}`,marginRight:"40px"}}));
2
2
  //# sourceMappingURL=Pagination.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as i,jsx as t}from"react/jsx-runtime";import{EntityRefLink as f}from"@backstage/plugin-catalog-react";import{makeStyles as y,List as N,Typography as o,ListItem as a,Tooltip as l,ListItemIcon as m,ListItemText as c}from"@material-ui/core";import g from"@material-ui/icons/Group";import x from"@material-ui/icons/TrendingDown";import L from"@material-ui/icons/TrendingFlat";import T from"@material-ui/icons/TrendingUp";import{Trend as s}from"./types.esm.js";const R=y(r=>({cardSection:{marginBottom:r.spacing(2)},listItem:{padding:0},listItemText:{margin:0},listItemIcon:{marginRight:r.spacing(1),minWidth:0},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}})),S=({ownerEntityRef:r,passRates:d})=>{const e=R();return i(N,{dense:!0,disablePadding:!0,className:e.cardSection,children:[t(o,{variant:"overline",color:"textSecondary",children:"Details"}),r&&i(a,{disableGutters:!0,className:e.listItem,children:[t(l,{title:"Owner",children:t(m,{className:e.listItemIcon,children:t(g,{color:"inherit",fontSize:"small"})})}),t(c,{className:e.listItemText,primary:t(f,{className:e.ownerLink,entityRef:r??"No Owner",hideIcon:!0})})]}),d.map(({name:h,value:p,trend:n},I)=>i(a,{disableGutters:!0,className:e.listItem,children:[t(l,{title:"The most recent pass rate.",children:i(m,{className:e.listItemIcon,children:[n===s.UP&&t(T,{color:"inherit",fontSize:"small"}),n===s.DOWN&&t(x,{color:"inherit",fontSize:"small"}),n===s.FLAT&&t(L,{color:"inherit",fontSize:"small"})]})}),t(c,{className:e.listItemText,primary:i(o,{variant:"body2",color:"textPrimary",children:[h??"Latest Pass Rate",": ",i("b",{children:[Math.round(p),"%"]})]})})]},I))]})};export{S as PassRateMetadata};
1
+ import{jsxs as i,jsx as t}from"react/jsx-runtime";import{EntityRefLink as f}from"@backstage/plugin-catalog-react";import{makeStyles as y,List as N,Typography as o,ListItem as a,Tooltip as l,ListItemIcon as m,ListItemText as c}from"@material-ui/core";import x from"@material-ui/icons/Group";import L from"@material-ui/icons/TrendingDown";import g from"@material-ui/icons/TrendingFlat";import T from"@material-ui/icons/TrendingUp";import{Trend as s}from"./types.esm.js";const R=y(r=>({cardSection:{marginBottom:r.spacing(2)},listItem:{padding:0},listItemText:{margin:0},listItemIcon:{marginRight:r.spacing(1),minWidth:0},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}})),S=({ownerEntityRef:r,passRates:d})=>{const e=R();return i(N,{dense:!0,disablePadding:!0,className:e.cardSection,children:[t(o,{variant:"overline",color:"textSecondary",children:"Details"}),r&&i(a,{disableGutters:!0,className:e.listItem,children:[t(l,{title:"Owner",children:t(m,{className:e.listItemIcon,children:t(x,{color:"inherit",fontSize:"small"})})}),t(c,{className:e.listItemText,primary:t(f,{className:e.ownerLink,entityRef:r??"No Owner",hideIcon:!0})})]}),d.map(({name:h,value:p,trend:n},I)=>i(a,{disableGutters:!0,className:e.listItem,children:[t(l,{title:"The most recent pass rate.",children:i(m,{className:e.listItemIcon,children:[n===s.UP&&t(T,{color:"inherit",fontSize:"small"}),n===s.DOWN&&t(L,{color:"inherit",fontSize:"small"}),n===s.FLAT&&t(g,{color:"inherit",fontSize:"small"})]})}),t(c,{className:e.listItemText,primary:i(o,{variant:"body2",color:"textPrimary",children:[h??"Latest Pass Rate",": ",i("b",{children:[Math.round(p),"%"]})]})})]},I))]})};export{S as PassRateMetadata};
2
2
  //# sourceMappingURL=PassRateMetadata.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as t}from"react/jsx-runtime";import{RoutingPageBUI as r}from"./RoutingPageBUI.esm.js";const g=o=>t(r,{...o});export{g as RoutingPage};
2
2
  //# sourceMappingURL=RoutingPage.esm.js.map
@@ -1,2 +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};
1
+ import{jsx as e}from"react/jsx-runtime";import{RoutingPageWrapperBUI as i}from"./RoutingPageWrapperBUI.esm.js";const o=({title:r,children:t})=>e(i,{title:r,children:t});export{o as RoutingPageWrapper};
2
2
  //# sourceMappingURL=RoutingPageWrapper.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as p,jsx as o}from"react/jsx-runtime";import{Link as c}from"@backstage/core-components";import{useRouteRef as b}from"@backstage/core-plugin-api";import{makeStyles as u,Breadcrumbs as h,Typography as i}from"@material-ui/core";import{useLocation as f}from"react-router-dom";import{rootRouteRef as y}from"../../routes.esm.js";const n=u(e=>({breadcrumbs:{marginBottom:e.spacing(1),color:e.page.fontColor,fontSize:e.typography.body2.fontSize},link:{color:"inherit"},endText:{fontWeight:"bold"}})),g=({pages:e,className:l=""})=>{const t=b(y),r=n(),s=f().pathname===t();return p(h,{className:`${r.breadcrumbs} ${l}`,"aria-label":"breadcrumb",children:[!!s&&o(i,{variant:"body2",className:r.endText,children:"Soundcheck"}),!s&&o(c,{className:r.link,to:t(),children:"Soundcheck"}),e.map(({title:m,path:a},d)=>a?o(c,{className:r.link,to:a,relative:"path",children:m},a):o(i,{variant:"body2",className:r.endText,children:m},`${d}`))]})};export{g as Breadcrumbs,n as useBreadcrumbStyles};
1
+ import"react/jsx-runtime";import"@backstage/core-components";import"@backstage/core-plugin-api";import{makeStyles as t}from"@material-ui/core";import"react-router-dom";import"../../routes.esm.js";t(o=>({breadcrumbs:{marginBottom:o.spacing(1),color:o.page.fontColor,fontSize:o.typography.body2.fontSize},link:{color:"inherit"},endText:{fontWeight:"bold"}}));
2
2
  //# sourceMappingURL=Breadcrumbs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as o,jsx as i,Fragment as S}from"react/jsx-runtime";import{Header as R}from"@backstage/core-components";import{useRouteRef as d,useApi as v,configApiRef as y}from"@backstage/core-plugin-api";import{makeStyles as N,Link as x,Typography as p,Button as C}from"@material-ui/core";import T from"@material-ui/icons/InfoOutlined";import L from"@material-ui/icons/MenuBook";import{useContext as B}from"react";import{useLocation as H,useNavigate as w}from"react-router-dom";import{rootRouteRef as z,quickstartRouteRef as A}from"../../routes.esm.js";import{Breadcrumbs as I}from"./Breadcrumbs.esm.js";import{generateBreadcrumbs as O}from"./headerUtil.esm.js";import{SoundcheckHeaderContext as j}from"./SoundcheckHeaderContext.esm.js";const q=N(e=>({subtitle:{maxWidth:"75%",marginTop:e.spacing(.5),whiteSpace:"pre-line"},docLink:{display:"flex",alignItems:"center",marginTop:e.spacing(.5),marginBottom:e.spacing(0),width:"fit-content",fontSize:e.typography.body2.fontSize,color:"inherit"},descriptionIcon:{marginRight:e.spacing(.25)},headerContent:{color:e.page.fontColor},link:{},button:{textTransform:"none",marginRight:e.spacing(2),color:e.page.fontColor},icon:{paddingRight:e.spacing(1)},title:{},breadcrumbs:{}}),{name:"SoundcheckHeader"}),D=({documentTitle:e})=>{const{title:n,description:r,docLink:a,customSubtitle:c,sectionRight:s}=B(j),t=q(),l=H().pathname?.replace(/\/+$/,"")??"",h=O(l),g=d(z),m=l===g(),u=v(y).getOptionalStringArray("soundcheck.flags")?.includes("portal")??!1,f=d(A),b=w(),k=f();return o(R,{pageTitleOverride:e,title:i(S,{children:m?i("div",{className:t.title,children:n}):o("div",{className:t.title,children:[i(I,{className:t.breadcrumbs,pages:h}),n]})}),subtitle:o("div",{className:t.headerContent,children:[a&&o(x,{target:"_blank",href:a,className:t.docLink,children:[i(T,{className:t.descriptionIcon,fontSize:"inherit"}),"Documentation"]}),!!c&&i("div",{children:c}),typeof r=="string"?i(p,{className:t.subtitle,variant:"body2",color:"inherit",children:r}):i("div",{children:r})]}),children:[m&&!u&&o(C,{className:t.button,onClick:()=>b(k),color:"inherit",variant:"outlined",children:[i(L,{className:t.icon}),i(p,{children:"Get Started with Soundcheck"})]}),!!s&&i("div",{children:s})]})};export{D as SoundcheckHeader};
1
+ import"react/jsx-runtime";import"@backstage/core-components";import"@backstage/core-plugin-api";import{makeStyles as o}from"@material-ui/core";import"@material-ui/icons/InfoOutlined";import"@material-ui/icons/MenuBook";import"react";import"react-router-dom";import"../../routes.esm.js";import"./Breadcrumbs.esm.js";import"./SoundcheckHeaderContext.esm.js";o(i=>({subtitle:{maxWidth:"75%",marginTop:i.spacing(.5),whiteSpace:"pre-line"},docLink:{display:"flex",alignItems:"center",marginTop:i.spacing(.5),marginBottom:i.spacing(0),width:"fit-content",fontSize:i.typography.body2.fontSize,color:"inherit"},descriptionIcon:{marginRight:i.spacing(.25)},headerContent:{color:i.page.fontColor},link:{},button:{textTransform:"none",marginRight:i.spacing(2),color:i.page.fontColor},icon:{paddingRight:i.spacing(1)},title:{},breadcrumbs:{}}),{name:"SoundcheckHeader"});
2
2
  //# sourceMappingURL=SoundcheckHeader.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,Fragment as v}from"react/jsx-runtime";import{useRouteRef as e,useApi as r,featureFlagsApiRef as x,configApiRef as y}from"@backstage/core-plugin-api";import{usePermission as A}from"@backstage/plugin-permission-react";import{Header as P,ButtonLink as C}from"@backstage/ui";import{RiCheckDoubleLine as w,RiSettings2Line as H}from"@remixicon/react";import{soundcheckCollectorReadPermission as I}from"@spotify/backstage-plugin-soundcheck-common";import{rootRouteRef as L,tracksPageRouteRef as F,checksPageRouteRef as T,campaignsPageRouteRef as B,integrationsPageRouteRef as O,overviewRouteRef as j,techHealthRouteRef as z,techInsightsPageRouteRef as D}from"../../routes.esm.js";const U=()=>{const s=e(L)(),o=e(F)(),n=e(T)(),h=e(B)(),l=e(O)(),f=e(j)(),g=e(z)(),m=e(D)(),a=r(x),d=r(y).getOptionalStringArray("soundcheck.flags"),c=a.getRegisteredFlags(),u=(!c.find(t=>t.name==="soundcheck-enable-tech-health")||a.isActive("soundcheck-enable-tech-health"))&&!d?.includes("soundcheck-disable-tech-health"),R=!c.find(t=>t.name==="soundcheck-enable-campaigns")||a.isActive("soundcheck-enable-campaigns"),{loading:p,allowed:k}=A({permission:I}),b=(!c.find(t=>t.name==="soundcheck-enable-collectors")||a.isActive("soundcheck-enable-collectors"))&&!p&&k,S=[{id:"tech-insights",label:"Tech Insights",href:m,matchStrategy:"prefix"},{id:"checks",label:"Checks",href:n,matchStrategy:"prefix"},{id:"tracks",label:"Tracks",href:o,matchStrategy:"prefix"},...R?[{id:"campaigns",label:"Campaigns",href:h,matchStrategy:"prefix"}]:[],...b?[{id:"integrations",label:"Integrations",href:l,matchStrategy:"prefix"}]:[],{id:"classic-overview",label:"Classic Overview",href:f,matchStrategy:"exact"},...u?[{id:"tech-health",label:"Tech Health",href:g,matchStrategy:"exact"}]:[]];return i(P,{title:"Soundcheck",icon:i(w,{size:18}),titleLink:s,tabs:S,customActions:i(v,{children:i(C,{href:"/settings",variant:"secondary",iconStart:i(H,{})})})})};export{U as SoundcheckHeaderBUI};
1
+ import{jsx as t,Fragment as k}from"react/jsx-runtime";import{useRouteRef as e,useApi as b,featureFlagsApiRef as S}from"@backstage/core-plugin-api";import{usePermission as v}from"@backstage/plugin-permission-react";import{Header as x,ButtonLink as y}from"@backstage/ui";import{RiCheckDoubleLine as P,RiSettings2Line as A}from"@remixicon/react";import{soundcheckCollectorReadPermission as C}from"@spotify/backstage-plugin-soundcheck-common";import{rootRouteRef as w,tracksPageRouteRef as H,checksPageRouteRef as I,campaignsPageRouteRef as L,integrationsPageRouteRef as F,overviewRouteRef as T,techHealthRouteRef as B,techInsightsPageRouteRef as j}from"../../routes.esm.js";const z=()=>{const c=e(w)(),o=e(H)(),s=e(I)(),n=e(L)(),h=e(F)(),l=e(T)(),f=e(B)(),m=e(j)(),i=b(S),r=i.getRegisteredFlags(),g=!r.find(a=>a.name==="soundcheck-enable-campaigns")||i.isActive("soundcheck-enable-campaigns"),{loading:d,allowed:u}=v({permission:C}),R=(!r.find(a=>a.name==="soundcheck-enable-collectors")||i.isActive("soundcheck-enable-collectors"))&&!d&&u,p=[{id:"tech-insights",label:"Tech Insights",href:m,matchStrategy:"prefix"},{id:"checks",label:"Checks",href:s,matchStrategy:"prefix"},{id:"tracks",label:"Tracks",href:o,matchStrategy:"prefix"},...g?[{id:"campaigns",label:"Campaigns",href:n,matchStrategy:"prefix"}]:[],...R?[{id:"integrations",label:"Integrations",href:h,matchStrategy:"prefix"}]:[],{id:"classic-overview",label:"Classic Overview",href:l,matchStrategy:"exact"},{id:"tech-health",label:"Tech Health",href:f,matchStrategy:"exact"}];return t(x,{title:"Soundcheck",icon:t(P,{size:18}),titleLink:c,tabs:p,customActions:t(k,{children:t(y,{href:"/settings",variant:"secondary",iconStart:t(A,{})})})})};export{z as SoundcheckHeaderBUI};
2
2
  //# sourceMappingURL=SoundcheckHeaderBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useContext as h,useEffect as k}from"react";import{SoundcheckHeaderContext as L}from"./SoundcheckHeaderContext.esm.js";const S={description:void 0,docLink:void 0,customSubtitle:void 0,sectionRight:void 0},R=({title:t,description:e,docLink:i,customSubtitle:o,sectionRight:c})=>{const{updateTitle:u,title:d,updateDescription:s,description:n,docLink:p,updateDocLink:r,customSubtitle:a,updateCustomSubtitle:l,sectionRight:m,updateSectionRight:f,setDefaultTitle:D}=h(L);k(()=>{t?d!==t&&u(t):D(),n!==e&&s(e),p!==i&&r(i),a!==o&&l(o),m!==c&&f(c)},[t,e,u,s,d,n,p,i,r,a,l,o,m,c,f,D])},b=()=>{R(S)};export{S as DEFAULT_HEADER,R as useHeader,b as useSetHeaderDefault};
1
+ import{useContext as h,useEffect as k}from"react";import{SoundcheckHeaderContext as D}from"./SoundcheckHeaderContext.esm.js";const R=({title:t,description:e,docLink:i,customSubtitle:o,sectionRight:c})=>{const{updateTitle:u,title:s,updateDescription:d,description:n,docLink:p,updateDocLink:r,customSubtitle:a,updateCustomSubtitle:l,sectionRight:m,updateSectionRight:f,setDefaultTitle:S}=h(D);k(()=>{t?s!==t&&u(t):S(),n!==e&&d(e),p!==i&&r(i),a!==o&&l(o),m!==c&&f(c)},[t,e,u,d,s,n,p,i,r,a,l,o,m,c,f,S])};export{R as useHeader};
2
2
  //# sourceMappingURL=useHeader.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as i,Fragment as z,jsx as n}from"react/jsx-runtime";import{makeStyles as S,IconButton as N,Menu as g,MenuItem as o,ListItemIcon as c,ListItemText as l}from"@material-ui/core";import k from"@material-ui/icons/Archive";import x from"@material-ui/icons/Delete";import C from"@material-ui/icons/Edit";import v from"@material-ui/icons/MoreVert";import b from"@material-ui/icons/OpenInBrowser";import E from"@material-ui/icons/Refresh";import L from"@material-ui/icons/SaveAlt";import{useState as M}from"react";const A=S(t=>({menuList:{backgroundColor:t.palette.background.paper,color:t.palette.text.primary},menuIcon:{color:t.palette.text.primary},menuIconSize:{minWidth:t.spacing(4)}})),T=({handleDelete:t,handleArchive:s,handleView:d,handleEdit:u,handleExport:h,handleRecertify:p})=>{const r=A(),[f,y]=M(null),m=!!f,I=e=>{e.stopPropagation(),y(e.currentTarget)},a=e=>{e.stopPropagation(),y(null)};return i(z,{children:[n(N,{"aria-label":"summary-card-actions",id:"summary-card-action-menu-button","aria-controls":m?"summary-card-action-menu":void 0,"aria-expanded":m?"true":void 0,"aria-haspopup":"true",onClick:I,children:n(v,{})}),i(g,{id:"summary-card-action-menu",anchorEl:f,open:m,onClose:a,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{"aria-labelledby":"summary-card-action-menu-button",className:r.menuList},children:[d&&i(o,{"data-testid":"summary-card-action-view",onClick:e=>{d(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(b,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"View"})]}),u&&i(o,{"data-testid":"summary-card-action-edit",onClick:e=>{u(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(C,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Edit"})]}),h&&i(o,{"data-testid":"summary-card-action-export",onClick:e=>{h(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(L,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Export"})]}),p&&i(o,{"data-testid":"summary-card-action-recertify",onClick:e=>{p(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(E,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Recertify"})]}),s&&i(o,{"data-testid":"summary-card-action-archive",onClick:e=>{s(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(k,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Archive"})]}),t&&i(o,{"data-testid":"summary-card-action-delete",onClick:e=>{t(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(x,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Delete"})]})]})]})};export{T as SummaryCardActionsMenu};
1
+ import{jsxs as i,Fragment as z,jsx as n}from"react/jsx-runtime";import{makeStyles as S,IconButton as N,Menu as g,MenuItem as o,ListItemIcon as c,ListItemText as l}from"@material-ui/core";import k from"@material-ui/icons/Archive";import x from"@material-ui/icons/Delete";import C from"@material-ui/icons/Edit";import v from"@material-ui/icons/MoreVert";import b from"@material-ui/icons/OpenInBrowser";import E from"@material-ui/icons/Refresh";import L from"@material-ui/icons/SaveAlt";import{useState as A}from"react";const M=S(t=>({menuList:{backgroundColor:t.palette.background.paper,color:t.palette.text.primary},menuIcon:{color:t.palette.text.primary},menuIconSize:{minWidth:t.spacing(4)}})),w=({handleDelete:t,handleArchive:s,handleView:d,handleEdit:u,handleExport:h,handleRecertify:p})=>{const r=M(),[f,y]=A(null),m=!!f,I=e=>{e.stopPropagation(),y(e.currentTarget)},a=e=>{e.stopPropagation(),y(null)};return i(z,{children:[n(N,{"aria-label":"summary-card-actions",id:"summary-card-action-menu-button","aria-controls":m?"summary-card-action-menu":void 0,"aria-expanded":m?"true":void 0,"aria-haspopup":"true",onClick:I,children:n(v,{})}),i(g,{id:"summary-card-action-menu",anchorEl:f,open:m,onClose:a,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{"aria-labelledby":"summary-card-action-menu-button",className:r.menuList},children:[d&&i(o,{"data-testid":"summary-card-action-view",onClick:e=>{d(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(b,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"View"})]}),u&&i(o,{"data-testid":"summary-card-action-edit",onClick:e=>{u(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(C,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Edit"})]}),h&&i(o,{"data-testid":"summary-card-action-export",onClick:e=>{h(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(L,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Export"})]}),p&&i(o,{"data-testid":"summary-card-action-recertify",onClick:e=>{p(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(E,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Recertify"})]}),s&&i(o,{"data-testid":"summary-card-action-archive",onClick:e=>{s(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(k,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Archive"})]}),t&&i(o,{"data-testid":"summary-card-action-delete",onClick:e=>{t(e),a(e)},children:[n(c,{className:r.menuIconSize,children:n(x,{fontSize:"small",color:"inherit",className:r.menuIcon})}),n(l,{children:"Delete"})]})]})]})};export{w as SummaryCardActionsMenu};
2
2
  //# sourceMappingURL=SummaryCardActionsMenu.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as u,jsx as i}from"react/jsx-runtime";import{useApi as h}from"@backstage/core-plugin-api";import{entityPresentationApiRef as g}from"@backstage/plugin-catalog-react";import{Row as R,Cell as k,CellProfile as y}from"@backstage/ui";import{useNavigate as A}from"react-router-dom";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as P}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as b}from"../Menus/SimpleMenu.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const x=({ownerEntityRef:r,href:t,profileImageSrc:l,cells:c,menuActions:e,name:m,description:s,documentationURL:a})=>{const f=h(g),p=r?f.forEntity(r):void 0,n=A();return u(R,{onAction:()=>t&&n(t),children:[i(P,{title:m,description:s,onClick:()=>t&&n(t)}),c.map((o,d)=>i(k,{title:o.title,leadingIcon:o.icon,onClick:C=>{o.onClick&&(C.stopPropagation(),o.onClick())}},`cell-${d}`)),i(y,{name:p?.snapshot.primaryTitle,src:l??p?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(b,{label:`${m} actions`,disabled:!e?.length,placement:"left top",menuActions:e??[],documentationURL:a,isHeaderMenu:!1})})]})};export{x as TableRowWithOwner};
1
+ import{jsxs as u,jsx as i}from"react/jsx-runtime";import{useApi as h}from"@backstage/core-plugin-api";import{entityPresentationApiRef as g}from"@backstage/plugin-catalog-react";import{Row as R,CellText as k,CellProfile as y}from"@backstage/ui";import{useNavigate as A}from"react-router-dom";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as x}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as P}from"../Menus/SimpleMenu.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const T=({ownerEntityRef:r,href:t,profileImageSrc:l,cells:c,menuActions:e,name:m,description:s,documentationURL:a})=>{const f=h(g),p=r?f.forEntity(r):void 0,n=A();return u(R,{onAction:()=>t&&n(t),children:[i(x,{title:m,description:s,onClick:()=>t&&n(t)}),c.map((o,d)=>i(k,{title:o.title,leadingIcon:o.icon,onClick:C=>{o.onClick&&(C.stopPropagation(),o.onClick())}},`cell-${d}`)),i(y,{name:p?.snapshot.primaryTitle,src:l??p?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(P,{label:`${m} actions`,disabled:!e?.length,placement:"left top",menuActions:e??[],documentationURL:a,isHeaderMenu:!1})})]})};export{T as TableRowWithOwner};
2
2
  //# sourceMappingURL=TableRowWithOwner.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e}from"react/jsx-runtime";import{DismissableBanner as p,TabbedLayout as i}from"@backstage/core-components";import{useApi as m,featureFlagsApiRef as n}from"@backstage/core-plugin-api";import{makeStyles as s,Typography as c,Box as d}from"@material-ui/core";import{Routes as h,Route as u}from"react-router-dom";import{useLCPReporting as f}from"../../hooks/useLCPReporting.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as g}from"../SoundcheckHeader/useHeader.esm.js";import{TechHealthSummary as b}from"../TechHealthSummary/TechHealthSummary.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import"../TechHealthTabs/PassRateTabStyles.esm.js";import"../StyledTooltip/StyledTooltip.esm.js";import"../TechHealthTabs/OwnerColumn.esm.js";import{TrackResultsTab as x}from"../TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js";import{EntityResultsTab as R}from"../TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js";import{GroupResultsTab as T}from"../TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js";import{CampaignResultsTab as k}from"../TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js";import{CheckResultsTab as y}from"../TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js";import"./Filters/types.esm.js";import"./Filters/FacetFilter.esm.js";import{FilterProvider as C}from"./Filters/FilterProvider.esm.js";import{Filters as v}from"./Filters/Filters.esm.js";import"./Filters/FiltersHeader.esm.js";import"./Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";const w=s(t=>({container:{display:"flex",margin:"-24px",backgroundColor:t.palette.background.paper,borderTop:`1px solid ${t.palette.border}`,flex:1},fixedColumn:{width:"300px",flex:"none",borderRight:`1px solid ${t.palette.divider}`},flexibleColumn:{display:"flex",flexDirection:"column",flex:1,backgroundColor:t.palette.background.paper,height:"100%",maxWidth:"100%"},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",backgroundColor:t.palette.background.default,"& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",borderTop:`1px solid ${t.palette.border}`,padding:`${t.spacing(3)}px !important`}},warning:{margin:"0 -24px"}})),N=()=>{g();const t=w(),o=m(n),a=!o.getRegisteredFlags().find(l=>l.name==="soundcheck-enable-campaigns")||o.isActive("soundcheck-enable-campaigns");return f({routeName:"soundcheck-tech-health",additionalAttributes:{campaignsEnabled:a.toString()}}),r(C,{children:[e("div",{className:t.warning,children:e(p,{id:"sunset-tech-health-banner",variant:"warning",message:e(c,{variant:"body2",children:"The Tech Health page will be retired in an upcoming release. Please use the new Tech Insights page for continued visibility into health data."})})}),r("div",{className:t.container,children:[e("div",{className:t.fixedColumn,children:e(v,{})}),e("div",{className:t.flexibleColumn,children:e(d,{className:t.pageLayout,"aria-label":"tech health tabs",children:e(h,{children:e(u,{path:"/*",element:r(i,{children:[e(i.Route,{title:"Summary",path:"/",children:e(b,{})}),a&&e(i.Route,{title:"Campaigns",path:"/campaigns",children:e(k,{})}),e(i.Route,{title:"Checks",path:"/checks",children:e(y,{})}),e(i.Route,{title:"Tracks",path:"/tracks",children:e(x,{})}),e(i.Route,{title:"Entities",path:"/entities",children:e(R,{})}),e(i.Route,{title:"Teams",path:"/teams",children:e(T,{})})]})})})})})]})]})};export{N as TechHealth};
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import{DismissableBanner as p,TabbedLayout as i}from"@backstage/core-components";import{useApi as m,featureFlagsApiRef as n}from"@backstage/core-plugin-api";import{makeStyles as s,Typography as c,Box as d}from"@material-ui/core";import{Routes as h,Route as u}from"react-router-dom";import{useLCPReporting as f}from"../../hooks/useLCPReporting.esm.js";import{TechHealthSummary as g}from"../TechHealthSummary/TechHealthSummary.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import"../TechHealthTabs/PassRateTabStyles.esm.js";import"../StyledTooltip/StyledTooltip.esm.js";import"../TechHealthTabs/OwnerColumn.esm.js";import{TrackResultsTab as b}from"../TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js";import{EntityResultsTab as x}from"../TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js";import{GroupResultsTab as R}from"../TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js";import{CampaignResultsTab as T}from"../TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js";import{CheckResultsTab as k}from"../TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js";import"./Filters/types.esm.js";import"./Filters/FacetFilter.esm.js";import{FilterProvider as y}from"./Filters/FilterProvider.esm.js";import{Filters as C}from"./Filters/Filters.esm.js";import"./Filters/FiltersHeader.esm.js";import"./Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";const v=s(t=>({container:{display:"flex",margin:"-24px",backgroundColor:t.palette.background.paper,borderTop:`1px solid ${t.palette.border}`,flex:1},fixedColumn:{width:"300px",flex:"none",borderRight:`1px solid ${t.palette.divider}`},flexibleColumn:{display:"flex",flexDirection:"column",flex:1,backgroundColor:t.palette.background.paper,height:"100%",maxWidth:"100%"},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",backgroundColor:t.palette.background.default,"& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",borderTop:`1px solid ${t.palette.border}`,padding:`${t.spacing(3)}px !important`}},warning:{margin:"0 -24px"}})),w=()=>{const t=v(),o=m(n),a=!o.getRegisteredFlags().find(l=>l.name==="soundcheck-enable-campaigns")||o.isActive("soundcheck-enable-campaigns");return f({routeName:"soundcheck-tech-health",additionalAttributes:{campaignsEnabled:a.toString()}}),r(y,{children:[e("div",{className:t.warning,children:e(p,{id:"sunset-tech-health-banner",variant:"warning",message:e(c,{variant:"body2",children:"The Tech Health page will be retired in an upcoming release. Please use the new Tech Insights page for continued visibility into health data."})})}),r("div",{className:t.container,children:[e("div",{className:t.fixedColumn,children:e(C,{})}),e("div",{className:t.flexibleColumn,children:e(d,{className:t.pageLayout,"aria-label":"tech health tabs",children:e(h,{children:e(u,{path:"/*",element:r(i,{children:[e(i.Route,{title:"Summary",path:"/",children:e(g,{})}),a&&e(i.Route,{title:"Campaigns",path:"/campaigns",children:e(T,{})}),e(i.Route,{title:"Checks",path:"/checks",children:e(k,{})}),e(i.Route,{title:"Tracks",path:"/tracks",children:e(b,{})}),e(i.Route,{title:"Entities",path:"/entities",children:e(x,{})}),e(i.Route,{title:"Teams",path:"/teams",children:e(R,{})})]})})})})})]})]})};export{w as TechHealth};
2
2
  //# sourceMappingURL=TechHealth.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as o,jsx as e}from"react/jsx-runtime";import{Grid as s,Button as I,Menu as w,MenuItem as z,ListItemIcon as M,ListItemText as N}from"@material-ui/core";import{makeStyles as E}from"@material-ui/core/styles";import G from"@material-ui/icons/Apps";import P from"@material-ui/icons/GridOn";import V from"@material-ui/icons/KeyboardArrowDown";import j from"@material-ui/icons/Reorder";import{ToggleButtonGroup as R,ToggleButton as h}from"@material-ui/lab";import{useRef as A,useState as u,useEffect as D}from"react";import{CSVLink as O}from"react-csv";import{SearchBar as W}from"../SearchBar/SearchBar.esm.js";import{ViewMode as g}from"./techHealthTabUtils.esm.js";const _=E(r=>({header:{padding:r.spacing(0,0,1),display:"flex"},headerButtons:{display:"flex",gap:r.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},exportButton:{height:"40px",width:"112px"},csvLink:{display:"none"},menuIconSize:{minWidth:r.spacing(4),color:r.palette.text.primary},menuList:{backgroundColor:r.palette.background.paper,color:r.palette.text.primary}})),F=({viewMode:r,setViewMode:f,isLoading:c,searchTerm:x,setSearchTerm:v,searchPlaceholder:b,fetchCsvData:L,csvFilename:S})=>{const t=_(),m=A(),k=(i,p)=>{p!==null&&f(p)},[d,n]=u(null),[a,C]=u([]),l=!!d,T=i=>{n(i.currentTarget)},y=()=>{n(null)},B=async()=>{n(null);const i=await L();C(i)};return D(()=>{a.length&&m?.current?.link.click()},[a]),o(s,{container:!0,spacing:2,className:t.header,children:[e(s,{item:!0,xs:6,children:e(W,{searchTerm:x,setSearchTerm:v,disabled:c,placeholder:b||"Search",variant:"outlined",size:"small"})}),o(s,{item:!0,xs:6,className:t.headerButtons,children:[e(I,{id:"export-button",className:t.exportButton,disabled:c,variant:"contained",color:"primary","aria-controls":l?"export-menu":void 0,"aria-haspopup":"true","aria-expanded":l?"true":void 0,onClick:T,endIcon:e(V,{}),children:"Export"}),e(O,{data:a,filename:S,className:t.csvLink,ref:m,target:"_blank"}),e(w,{id:"export-menu",anchorEl:d,getContentAnchorEl:null,open:l,onClose:y,MenuListProps:{"aria-labelledby":"export-button",disablePadding:!0,className:t.menuList},anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:o(z,{onClick:B,children:[e(M,{color:"inherit",className:t.menuIconSize,children:e(P,{fontSize:"small"})}),e(N,{children:"CSV"})]})}),o(R,{size:"small",value:r,exclusive:!0,onChange:k,children:[e(h,{value:g.TABLE,title:"Table view",children:e(j,{color:"inherit"})}),e(h,{value:g.GRID,title:"Grid view",children:e(G,{color:"inherit"})})]})]})]})};export{F as PassRateTabHeader};
1
+ import{jsxs as o,jsx as e}from"react/jsx-runtime";import{Grid as s,Button as I,Menu as w,MenuItem as z,ListItemIcon as M,ListItemText as N}from"@material-ui/core";import{makeStyles as E}from"@material-ui/core/styles";import G from"@material-ui/icons/Apps";import P from"@material-ui/icons/GridOn";import V from"@material-ui/icons/KeyboardArrowDown";import j from"@material-ui/icons/Reorder";import{ToggleButtonGroup as R,ToggleButton as h}from"@material-ui/lab";import{useRef as A,useState as u,useEffect as D}from"react";import{CSVLink as O}from"react-csv";import{SearchBar as W}from"../SearchBar/SearchBar.esm.js";import{ViewMode as g}from"./techHealthTabUtils.esm.js";const _=E(r=>({header:{padding:r.spacing(0,0,1),display:"flex"},headerButtons:{display:"flex",gap:r.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},exportButton:{height:"40px",width:"112px"},csvLink:{display:"none"},menuIconSize:{minWidth:r.spacing(4),color:r.palette.text.primary},menuList:{backgroundColor:r.palette.background.paper,color:r.palette.text.primary}})),F=({viewMode:r,setViewMode:f,isLoading:c,searchTerm:x,setSearchTerm:v,searchPlaceholder:b,fetchCsvData:S,csvFilename:k})=>{const t=_(),m=A(),B=(i,p)=>{p!==null&&f(p)},[d,n]=u(null),[a,C]=u([]),l=!!d,L=i=>{n(i.currentTarget)},T=()=>{n(null)},y=async()=>{n(null);const i=await S();C(i)};return D(()=>{a.length&&m?.current?.link.click()},[a]),o(s,{container:!0,spacing:2,className:t.header,children:[e(s,{item:!0,xs:6,children:e(W,{searchTerm:x,setSearchTerm:v,disabled:c,placeholder:b||"Search",variant:"outlined",size:"small"})}),o(s,{item:!0,xs:6,className:t.headerButtons,children:[e(I,{id:"export-button",className:t.exportButton,disabled:c,variant:"contained",color:"primary","aria-controls":l?"export-menu":void 0,"aria-haspopup":"true","aria-expanded":l?"true":void 0,onClick:L,endIcon:e(V,{}),children:"Export"}),e(O,{data:a,filename:k,className:t.csvLink,ref:m,target:"_blank"}),e(w,{id:"export-menu",anchorEl:d,getContentAnchorEl:null,open:l,onClose:T,MenuListProps:{"aria-labelledby":"export-button",disablePadding:!0,className:t.menuList},anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:o(z,{onClick:y,children:[e(M,{color:"inherit",className:t.menuIconSize,children:e(P,{fontSize:"small"})}),e(N,{children:"CSV"})]})}),o(R,{size:"small",value:r,exclusive:!0,onChange:B,children:[e(h,{value:g.TABLE,title:"Table view",children:e(j,{color:"inherit"})}),e(h,{value:g.GRID,title:"Grid view",children:e(G,{color:"inherit"})})]})]})]})};export{F as PassRateTabHeader};
2
2
  //# sourceMappingURL=PassRateTabHeader.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{useFeatureFlag as t}from"../../hooks/useFeatureFlag.esm.js";import{TechInsightsPageBUI as r}from"./TechInsightsPageBUI.esm.js";import{TechInsightsPageDeprecated as o}from"./TechInsightsPageDeprecated.esm.js";const s=()=>t("backstage-ui")?e(r,{}):e(o,{});export{s as TechInsightsPage};
1
+ import{jsx as o}from"react/jsx-runtime";import{TechInsightsPageBUI as s}from"./TechInsightsPageBUI.esm.js";const t=()=>o(s,{});export{t as TechInsightsPage};
2
2
  //# sourceMappingURL=TechInsightsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as a,jsxs as x,Fragment as gt}from"react/jsx-runtime";import{useApi as ft,useRouteRef as Y}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ht}from"@backstage/plugin-catalog-react";import{Box as U,HeaderPage as kt,Flex as yt,SearchField as Tt,Container as St}from"@backstage/ui";import{makeStyles as Ct,LinearProgress as Et}from"@material-ui/core";import{isEmpty as wt}from"lodash";import{useState as Z,useMemo as i,useCallback as Lt,useEffect as Rt}from"react";import{useSearchParams as vt,useNavigate as bt}from"react-router-dom";import It from"react-use/lib/useDebounce";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"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as Pt}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Bt}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as At}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as xt}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useFeatureFlag as Ut}from"../../hooks/useFeatureFlag.esm.js";import{useLCPReporting as Ft}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Mt}from"../../hooks/useLoadTimeReporting.esm.js";import{trackExplorerRouteRef as $t,campaignExplorerRouteRef as Dt}from"../../routes.esm.js";import{getAllOwnedEntityCount as Gt}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Ht,getTracksBucket as Nt}from"../../utils/helpers.esm.js";import{showTrack as Ot}from"../../utils/tracks.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as jt}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as zt}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as Kt}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTiles as Vt}from"./SummaryTiles.esm.js";import{SummaryTilesBUI as Wt}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as qt}from"./TechInsightsTableBUI.esm.js";const Jt=Ct(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Qt=()=>{const _=Jt(),tt=Ut("backstage-ui"),[y,et]=vt(),r=y.get("group")||"",[l,rt]=Z(y.get("search")||""),[f,ot]=Z(""),F=i(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:f||""}}),[r,f]),{reportContentLoaded:M}=Mt({...F,enabled:!!r}),{reporter:at}=Ft(F),$=bt();zt();const T=ft(ht),{order:it,orderBy:st,handleSort:nt}=Pt({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});It(()=>{ot(l);const t=new URLSearchParams(y.toString());l?t.set("search",l):t.delete("search"),et(t,{replace:!0})},500,[l]);const{tracks:S,campaigns:D,counts:C,isLoading:p,error:E,activeTrackCount:w}=xt(r,{},{enabled:!!r}),d=S.filter(t=>t.type==="campaign"),L=S.filter(t=>t.type!=="campaign"),G=d.filter(t=>{const e=f.toLowerCase(),n=(t.ownerEntityRef?T.forEntity(t.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return e===""||t.name.toLowerCase().includes(e)||t.ownerEntityRef?.toLowerCase().includes(e)||n.includes(e)}),H=L.filter(t=>{const e=f.toLowerCase(),n=(t.ownerEntityRef?T.forEntity(t.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return e===""||t.name.toLowerCase().includes(e)||t.ownerEntityRef?.toLowerCase().includes(e)||n.includes(e)}),R=i(()=>[...G,...H],[G,H]),m=i(()=>[...d.map(t=>t.id),...L.map(t=>t.id)],[d,L]),{data:v,isLoading:ct,error:mt,progress:o}=Bt({trackIds:m,groupRef:r||"",skip:!r||m.length===0}),{data:N,isLoading:h}=At(r,{includeParent:!0}),b=i(()=>{const t=new Map;return Array.isArray(v)&&v.forEach(e=>{e&&e.trackId&&t.set(e.trackId,e)}),t},[v]),lt=i(()=>{const t=new Map;return Array.isArray(C)&&C.forEach(e=>{e&&e.id&&t.set(e.id,e.applicableEntityCount)}),t},[C]),O=p&&!E&&!!r,j=E||mt,I=m.length>0&&ct&&!j&&!!r,z=i(()=>({totalActiveTracksCampaigns:w}),[w]),K=i(()=>{if(I)return{numTeams:void 0,avgCompliance:void 0,totalCampaigns:void 0,totalTracks:void 0};let t=0,e=0,n=0,g=0;const s=new Set;return R.forEach(k=>{const c=b.get(k.id);if(c){c.status&&typeof c.status.allPassPercentage=="number"&&(t+=c.status.allPassPercentage,e++),c.groupRef&&s.add(c.groupRef);const B=[c];for(;B.length>0;){const ut=B.pop();for(const A of ut.children)s.has(A.groupRef)||(s.add(A.groupRef),B.push(A))}}Ot(c?.status)&&(k.type==="campaign"?n++:g++)}),{numTeams:s.size,avgCompliance:e>0?Math.round(t/e):0,totalCampaigns:n,totalTracks:g}},[R,b,I]),u=i(()=>{if(h)return{numEntities:void 0};const t=N?.[r];return{numEntities:Gt(t)}},[N,h,r]),V=i(()=>({...z,...K,...u}),[z,K,u]),W=Y($t),q=Y(Dt),pt=Lt(t=>{if(!r)return;const e=new URLSearchParams;e.set("group",r),e.set("node",r);const n=d.find(({id:s})=>s===t);let g=W({trackId:t});if(n){const s=D?.edges.find(({node:k})=>k.track.id===t)?.node.id;s&&(g=q({campaignId:s}))}$(`${g}?${e.toString()}`)},[r,$,d,D,q,W]),J=r?T.forEntity(r).snapshot.primaryTitle:void 0,P=i(()=>!o||o.totalTracks===0?0:o.loadedTracks/o.totalTracks*100,[o]),Q=p&&r&&!E||I&&o&&o.totalTracks>0,X=at?.getLCPValue();Rt(()=>{if(!h&&!p&&(P===100||m.length===0)){const t=u.numEntities??0,e=m.length;M({lcp:X,numberOfEntities:u.numEntities,entitiesBucket:Ht(t),numberOfTracks:m.length,tracksBucket:Nt(e)})}},[h,p,P,m.length,u.numEntities,M,X]);const dt=tt?a(Wt,{summaryStats:V,isLoading:O}):a(Vt,{summaryStats:V,isLoading:p});return j?a(U,{mt:"6",children:a(jt,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):x(gt,{children:[a(kt,{title:`${J?`${J}'s `:""}Tech Insights`,customActions:x(yt,{align:"center",gap:"3",children:[a(Kt,{hideSelected:!0}),a(Tt,{isDisabled:wt(S),value:l,onChange:rt,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})}),x(St,{className:_.container,children:[a(U,{style:{marginTop:0},children:dt}),Q&&a(U,{style:{marginBottom:16},children:a(Et,{variant:o&&o.totalTracks>0?"determinate":"indeterminate",value:o&&o.totalTracks>0?P:void 0,"data-testid":"batch-loading-indicator"})}),a(qt,{tracks:R,trackStatusMap:b,trackCountsMap:lt,sortColumn:st,order:it,handleSort:nt,handleTrackClick:pt,isLoading:O||!!Q,isSearch:!!l,activeTrackCount:w,hasGroupSelected:!!r})]})]})};export{Qt as TechInsightsPageBUI};
1
+ import{jsx as a,jsxs as x,Fragment as ut}from"react/jsx-runtime";import{useApi as gt,useRouteRef as X}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ft}from"@backstage/plugin-catalog-react";import{Box as U,HeaderPage as ht,Flex as kt,SearchField as yt,Container as Tt}from"@backstage/ui";import{makeStyles as St,LinearProgress as Ct}from"@material-ui/core";import{isEmpty as Et}from"lodash";import{useState as _,useMemo as i,useCallback as wt,useEffect as Rt}from"react";import{useSearchParams as Lt,useNavigate as vt}from"react-router-dom";import bt from"react-use/lib/useDebounce";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"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as It}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Pt}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as Bt}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as At}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useLCPReporting as xt}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ut}from"../../hooks/useLoadTimeReporting.esm.js";import{trackExplorerRouteRef as Mt,campaignExplorerRouteRef as $t}from"../../routes.esm.js";import{getAllOwnedEntityCount as Gt}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Nt,getTracksBucket as Dt}from"../../utils/helpers.esm.js";import{showTrack as Ft}from"../../utils/tracks.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ht}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{TechInsightsGroupSelector as Ot}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTilesBUI as jt}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as Vt}from"./TechInsightsTableBUI.esm.js";const zt=St(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Wt=()=>{const Y=zt(),[y,Z]=Lt(),r=y.get("group")||"",[l,tt]=_(y.get("search")||""),[g,et]=_(""),M=i(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:g||""}}),[r,g]),{reportContentLoaded:$}=Ut({...M,enabled:!!r}),{reporter:rt}=xt(M),G=vt(),T=gt(ft),{order:ot,orderBy:at,handleSort:it}=It({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});bt(()=>{et(l);const t=new URLSearchParams(y.toString());l?t.set("search",l):t.delete("search"),Z(t,{replace:!0})},500,[l]);const{tracks:S,campaigns:N,counts:C,isLoading:f,error:E,activeTrackCount:w}=At(r,{},{enabled:!!r}),p=S.filter(t=>t.type==="campaign"),R=S.filter(t=>t.type!=="campaign"),D=p.filter(t=>{const e=g.toLowerCase(),s=(t.ownerEntityRef?T.forEntity(t.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return e===""||t.name.toLowerCase().includes(e)||t.ownerEntityRef?.toLowerCase().includes(e)||s.includes(e)}),F=R.filter(t=>{const e=g.toLowerCase(),s=(t.ownerEntityRef?T.forEntity(t.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return e===""||t.name.toLowerCase().includes(e)||t.ownerEntityRef?.toLowerCase().includes(e)||s.includes(e)}),L=i(()=>[...D,...F],[D,F]),m=i(()=>[...p.map(t=>t.id),...R.map(t=>t.id)],[p,R]),{data:v,isLoading:nt,error:st,progress:o}=Pt({trackIds:m,groupRef:r||"",skip:!r||m.length===0}),{data:H,isLoading:h}=Bt(r,{includeParent:!0}),b=i(()=>{const t=new Map;return Array.isArray(v)&&v.forEach(e=>{e&&e.trackId&&t.set(e.trackId,e)}),t},[v]),ct=i(()=>{const t=new Map;return Array.isArray(C)&&C.forEach(e=>{e&&e.id&&t.set(e.id,e.applicableEntityCount)}),t},[C]),O=f&&!E&&!!r,j=E||st,I=m.length>0&&nt&&!j&&!!r,V=i(()=>({totalActiveTracksCampaigns:w}),[w]),z=i(()=>{if(I)return{numTeams:void 0,avgCompliance:void 0,totalCampaigns:void 0,totalTracks:void 0};let t=0,e=0,s=0,u=0;const n=new Set;return L.forEach(k=>{const c=b.get(k.id);if(c){c.status&&typeof c.status.allPassPercentage=="number"&&(t+=c.status.allPassPercentage,e++),c.groupRef&&n.add(c.groupRef);const B=[c];for(;B.length>0;){const dt=B.pop();for(const A of dt.children)n.has(A.groupRef)||(n.add(A.groupRef),B.push(A))}}Ft(c?.status)&&(k.type==="campaign"?s++:u++)}),{numTeams:n.size,avgCompliance:e>0?Math.round(t/e):0,totalCampaigns:s,totalTracks:u}},[L,b,I]),d=i(()=>{if(h)return{numEntities:void 0};const t=H?.[r];return{numEntities:Gt(t)}},[H,h,r]),mt=i(()=>({...V,...z,...d}),[V,z,d]),W=X(Mt),q=X($t),lt=wt(t=>{if(!r)return;const e=new URLSearchParams;e.set("group",r),e.set("node",r);const s=p.find(({id:n})=>n===t);let u=W({trackId:t});if(s){const n=N?.edges.find(({node:k})=>k.track.id===t)?.node.id;n&&(u=q({campaignId:n}))}G(`${u}?${e.toString()}`)},[r,G,p,N,q,W]),J=r?T.forEntity(r).snapshot.primaryTitle:void 0,P=i(()=>!o||o.totalTracks===0?0:o.loadedTracks/o.totalTracks*100,[o]),K=f&&r&&!E||I&&o&&o.totalTracks>0,Q=rt?.getLCPValue();Rt(()=>{if(!h&&!f&&(P===100||m.length===0)){const t=d.numEntities??0,e=m.length;$({lcp:Q,numberOfEntities:d.numEntities,entitiesBucket:Nt(t),numberOfTracks:m.length,tracksBucket:Dt(e)})}},[h,f,P,m.length,d.numEntities,$,Q]);const pt=a(jt,{summaryStats:mt,isLoading:O});return j?a(U,{mt:"6",children:a(Ht,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):x(ut,{children:[a(ht,{title:`${J?`${J}'s `:""}Tech Insights`,customActions:x(kt,{align:"center",gap:"3",children:[a(Ot,{hideSelected:!0}),a(yt,{isDisabled:Et(S),value:l,onChange:tt,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})}),x(Tt,{className:Y.container,children:[a(U,{style:{marginTop:0},children:pt}),K&&a(U,{style:{marginBottom:16},children:a(Ct,{variant:o&&o.totalTracks>0?"determinate":"indeterminate",value:o&&o.totalTracks>0?P:void 0,"data-testid":"batch-loading-indicator"})}),a(Vt,{tracks:L,trackStatusMap:b,trackCountsMap:ct,sortColumn:at,order:ot,handleSort:it,handleTrackClick:lt,isLoading:O||!!K,isSearch:!!l,activeTrackCount:w,hasGroupSelected:!!r})]})]})};export{Wt as TechInsightsPageBUI};
2
2
  //# sourceMappingURL=TechInsightsPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as p,Fragment as A}from"react/jsx-runtime";import{useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{Table as D,TableHeader as F,Column as u,TableBody as H,Row as U,Flex as q,Box as v,Text as G,Cell as I,CellProfile as O}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{uniq as z,isEmpty as N,isNumber as x}from"lodash";import{useMemo as m}from"react";import{useProfileImages as J}from"../../hooks/catalog/useProfileImages.esm.js";import{getPercentage as y}from"../../utils/formatters.esm.js";import{showTrack as K}from"../../utils/tracks.esm.js";import{CustomCell as Q}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as V}from"../DescriptionCell/DescriptionCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as W}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as B}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as L}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as X}from"../StatusBar/StatusBar.esm.js";const Z=Y(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),_=({track:a,trackStatus:e,entitiesCount:h,handleTrackClick:w,profileImageMap:g})=>{const l=Z(),c=$(j).forEntity(a.ownerEntityRef),f=m(()=>a.levels.reduce((t,s)=>t+s.checks.length,0),[a.levels]),i=m(()=>(e?.passed??0)+(e?.failed??0)+(e?.warning??0)+(e?.error??0)+(e?.notReported??0)+(e?.exempt??0),[e]),k=m(()=>{let t;return e?.allPassPercentage!==null&&e?.allPassPercentage!==void 0?t=e.allPassPercentage:e&&(t=y(e.passed+e.exempt,i)),t},[e,i]),P=m(()=>y(e?.failed,i),[e,i]),C=m(()=>y(e?.warning,i),[e,i]),d=m(()=>y(e?.notReported,i),[e,i]),S=m(()=>y(e?.error,i),[e,i]),b=g[c.snapshot.entityRef];return p(U,{onAction:()=>{w(a.id)},children:[r(V,{title:a.name??a.id,description:a.description??"",onClick:()=>w(a.id)}),r(Q,{children:p(q,{align:"center",gap:"2",children:[r(v,{className:l.statusPercent,children:p(G,{children:[k,"%"]})}),r(v,{className:l.statusBar,children:r(X,{passedPercent:k,failedPercent:P,warningPercent:C,notReportedPercent:d,errorPercent:S})})]})}),r(I,{title:a.type==="campaign"?"Campaign":"Track"}),r(I,{title:x(f)?`${f} Check${f===1?"":"s"}`:"N/A"}),r(I,{title:x(h)?`${h} ${h===1?"Entity":"Entities"}`:"N/A"}),r(O,{name:c.snapshot.primaryTitle,src:b??c.snapshot.primaryTitle})]})},ee=({order:a,sortColumn:e,handleSort:h,handleTrackClick:w,tracks:g,trackStatusMap:l,trackCountsMap:c,isSearch:f,isLoading:i,activeTrackCount:k,hasGroupSelected:P})=>{const C=m(()=>[...g].filter(t=>K(l.get(t.id)?.status)).sort((t,s)=>{const T=l.get(t.id),M=l.get(s.id);let o,n;switch(e){case"name":o=t.name?.toLowerCase()||"",n=s.name?.toLowerCase()||"";break;case"type":o=t.type||"",n=s.type||"";break;case"owner":o=t.ownerEntityRef?.toLowerCase()||"",n=s.ownerEntityRef?.toLowerCase()||"";break;case"compliance":o=T?.status?.allPassPercentage??null,n=M?.status?.allPassPercentage??null;break;case"checks":o=t.levels.reduce((R,E)=>R+E.checks.length,0),n=s.levels.reduce((R,E)=>R+E.checks.length,0);break;case"entities":o=c.get(t.id)??0,n=c.get(s.id)??0;break;default:return 0}return typeof o=="number"&&typeof n=="number"?a==="asc"?o-n:n-o:typeof o=="number"&&n===null?-1:o===null&&typeof n=="number"?1:typeof o=="string"&&typeof n=="string"?a==="asc"?o.localeCompare(n):n.localeCompare(o):0}),[g,l,e,c,a]),d=m(()=>C.map(t=>{const s=l.get(t.id)?.status,T=c.get(t.id)??0;return{track:t,trackStatus:s,entitiesCount:T}}),[C,c,l]),S=z(d.map(t=>t.track.ownerEntityRef)),{profileImageMap:b}=J(S);return!i&&N(g)?P?f&&k>0?r(W,{title:"No tracks or campaigns found.",body:"Your current search term did not return any tracks or campaigns. Please try a different search term. "}):r(B,{title:k>0?"No applicable tracks found for the selected group":void 0}):r(B,{title:"Select a group or create a new track"}):p(A,{children:[p(D,{sortDescriptor:{column:e,direction:a==="asc"?"ascending":"descending"},onSortChange:t=>h(t.column),children:[p(F,{children:[r(u,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"43%"},children:"Name"}),r(u,{id:"compliance",allowsSorting:!0,style:{width:"12%"},children:"Compliance"}),r(u,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),r(u,{id:"checks",allowsSorting:!0,style:{width:"10%"},children:"Checks"}),r(u,{id:"entities",allowsSorting:!0,style:{width:"10%"},children:"Entities"}),r(u,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"})]}),r(H,{children:d.map(t=>r(_,{handleTrackClick:w,profileImageMap:b??{},...t},t.track.id))})]}),N(d)&&i&&r(L,{rowCount:10}),!N(d)&&i&&r(L,{rowCount:4})]})};export{ee as TechInsightsTableBUI};
1
+ import{jsx as r,jsxs as p,Fragment as A}from"react/jsx-runtime";import{useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{Table as D,TableHeader as F,Column as u,TableBody as H,Row as U,Flex as q,Box as N,Text as G,CellText as x,CellProfile as O}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{uniq as z,isEmpty as I,isNumber as v}from"lodash";import{useMemo as m}from"react";import{useProfileImages as J}from"../../hooks/catalog/useProfileImages.esm.js";import{getPercentage as y}from"../../utils/formatters.esm.js";import{showTrack as K}from"../../utils/tracks.esm.js";import{CustomCell as Q}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as V}from"../DescriptionCell/DescriptionCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as W}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as B}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as L}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as X}from"../StatusBar/StatusBar.esm.js";const Z=Y(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),_=({track:a,trackStatus:e,entitiesCount:h,handleTrackClick:w,profileImageMap:g})=>{const l=Z(),c=$(j).forEntity(a.ownerEntityRef),f=m(()=>a.levels.reduce((t,s)=>t+s.checks.length,0),[a.levels]),i=m(()=>(e?.passed??0)+(e?.failed??0)+(e?.warning??0)+(e?.error??0)+(e?.notReported??0)+(e?.exempt??0),[e]),k=m(()=>{let t;return e?.allPassPercentage!==null&&e?.allPassPercentage!==void 0?t=e.allPassPercentage:e&&(t=y(e.passed+e.exempt,i)),t},[e,i]),P=m(()=>y(e?.failed,i),[e,i]),C=m(()=>y(e?.warning,i),[e,i]),d=m(()=>y(e?.notReported,i),[e,i]),S=m(()=>y(e?.error,i),[e,i]),T=g[c.snapshot.entityRef];return p(U,{onAction:()=>{w(a.id)},children:[r(V,{title:a.name??a.id,description:a.description??"",onClick:()=>w(a.id)}),r(Q,{children:p(q,{align:"center",gap:"2",children:[r(N,{className:l.statusPercent,children:p(G,{children:[k,"%"]})}),r(N,{className:l.statusBar,children:r(X,{passedPercent:k,failedPercent:P,warningPercent:C,notReportedPercent:d,errorPercent:S})})]})}),r(x,{title:a.type==="campaign"?"Campaign":"Track"}),r(x,{title:v(f)?`${f} Check${f===1?"":"s"}`:"N/A"}),r(x,{title:v(h)?`${h} ${h===1?"Entity":"Entities"}`:"N/A"}),r(O,{name:c.snapshot.primaryTitle,src:T??c.snapshot.primaryTitle})]})},ee=({order:a,sortColumn:e,handleSort:h,handleTrackClick:w,tracks:g,trackStatusMap:l,trackCountsMap:c,isSearch:f,isLoading:i,activeTrackCount:k,hasGroupSelected:P})=>{const C=m(()=>[...g].filter(t=>K(l.get(t.id)?.status)).sort((t,s)=>{const b=l.get(t.id),M=l.get(s.id);let o,n;switch(e){case"name":o=t.name?.toLowerCase()||"",n=s.name?.toLowerCase()||"";break;case"type":o=t.type||"",n=s.type||"";break;case"owner":o=t.ownerEntityRef?.toLowerCase()||"",n=s.ownerEntityRef?.toLowerCase()||"";break;case"compliance":o=b?.status?.allPassPercentage??null,n=M?.status?.allPassPercentage??null;break;case"checks":o=t.levels.reduce((R,E)=>R+E.checks.length,0),n=s.levels.reduce((R,E)=>R+E.checks.length,0);break;case"entities":o=c.get(t.id)??0,n=c.get(s.id)??0;break;default:return 0}return typeof o=="number"&&typeof n=="number"?a==="asc"?o-n:n-o:typeof o=="number"&&n===null?-1:o===null&&typeof n=="number"?1:typeof o=="string"&&typeof n=="string"?a==="asc"?o.localeCompare(n):n.localeCompare(o):0}),[g,l,e,c,a]),d=m(()=>C.map(t=>{const s=l.get(t.id)?.status,b=c.get(t.id)??0;return{track:t,trackStatus:s,entitiesCount:b}}),[C,c,l]),S=z(d.map(t=>t.track.ownerEntityRef)),{profileImageMap:T}=J(S);return!i&&I(g)?P?f&&k>0?r(W,{title:"No tracks or campaigns found.",body:"Your current search term did not return any tracks or campaigns. Please try a different search term. "}):r(B,{title:k>0?"No applicable tracks found for the selected group":void 0}):r(B,{title:"Select a group or create a new track"}):p(A,{children:[p(D,{sortDescriptor:{column:e,direction:a==="asc"?"ascending":"descending"},onSortChange:t=>h(t.column),children:[p(F,{children:[r(u,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"43%"},children:"Name"}),r(u,{id:"compliance",allowsSorting:!0,style:{width:"12%"},children:"Compliance"}),r(u,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),r(u,{id:"checks",allowsSorting:!0,style:{width:"10%"},children:"Checks"}),r(u,{id:"entities",allowsSorting:!0,style:{width:"10%"},children:"Entities"}),r(u,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"})]}),r(H,{children:d.map(t=>r(_,{handleTrackClick:w,profileImageMap:T??{},...t},t.track.id))})]}),I(d)&&i&&r(L,{rowCount:10}),!I(d)&&i&&r(L,{rowCount:4})]})};export{ee as TechInsightsTableBUI};
2
2
  //# sourceMappingURL=TechInsightsTableBUI.esm.js.map