@spotify/backstage-plugin-soundcheck 0.18.0 → 0.19.0

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 (243) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/config.d.ts +21 -0
  3. package/dist/alpha/apis.esm.js +1 -1
  4. package/dist/alpha/entity-content.esm.js +1 -1
  5. package/dist/alpha/pages.esm.js +1 -1
  6. package/dist/alpha/plugin.esm.js +1 -1
  7. package/dist/alpha.d.ts +83 -77
  8. package/dist/api.esm.js +1 -1
  9. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  10. package/dist/components/Badges/CampaignBadge.esm.js +1 -1
  11. package/dist/components/Badges/StatusBadge.esm.js +1 -1
  12. package/dist/components/CacheConfig/CacheConfigComponent.esm.js +1 -1
  13. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  14. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  15. package/dist/components/CampaignForm/Steps/CampaignTrackStepNew.esm.js +1 -1
  16. package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
  17. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +2 -2
  18. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  19. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
  20. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
  21. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +1 -1
  22. package/dist/components/CampaignInsightsPage/DaysRemainingTile.esm.js +1 -1
  23. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  24. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  25. package/dist/components/CategoryBar/CategoryBar.esm.js +1 -1
  26. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  27. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  28. package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
  29. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  30. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
  31. package/dist/components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js +1 -1
  32. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  33. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  34. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  35. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  36. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
  37. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  38. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
  39. package/dist/components/CheckPage/CheckEntitiesTable/columns.esm.js +1 -1
  40. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  41. package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
  42. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  43. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  44. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  45. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
  46. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +2 -0
  47. package/dist/components/CollectorPage/CollectorFactTable.esm.js +2 -0
  48. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  49. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  50. package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/Common/CollectorConfigAlert.esm.js +2 -0
  55. package/dist/components/CollectorPage/Configurators/Common/PortalConfigAlert.esm.js +2 -0
  56. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  57. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  58. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  59. package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
  60. package/dist/components/CollectorPage/Configurators/Github/DependabotAlertsFactDetails.esm.js +1 -1
  61. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  62. package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
  63. package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
  64. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  65. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  66. package/dist/components/CollectorPage/Configurators/HTTP/HttpRequestComponent.esm.js +1 -1
  67. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  68. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  69. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  70. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  71. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  72. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  73. package/dist/components/CollectorPage/Configurators/SonarQube/IssuesFactDetailsInput.esm.js +1 -1
  74. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  75. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  76. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  77. package/dist/components/ColorChip/ColorChip.esm.js +2 -0
  78. package/dist/components/EmptyState/EmptyState.esm.js +1 -1
  79. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  80. package/dist/components/Expand/Expand.esm.js +1 -1
  81. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  82. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  83. package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
  84. package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
  85. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  86. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  87. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  88. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +2 -0
  89. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  90. package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
  91. package/dist/components/Frequency/util.esm.js +1 -1
  92. package/dist/components/GroupHierarchySelector/GroupHierarchyCategorySelection.esm.js +2 -0
  93. package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +2 -0
  94. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +2 -0
  95. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +2 -0
  96. package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +2 -0
  97. package/dist/components/GroupHierarchySelector/getAllOwnedEntityCount.esm.js +2 -0
  98. package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +2 -0
  99. package/dist/components/HierarchicalTechInsightsPage/ColorLegend.esm.js +2 -0
  100. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +2 -0
  101. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +2 -0
  102. package/dist/components/HierarchicalTechInsightsPage/LowestPerformingTeams.esm.js +2 -0
  103. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +2 -0
  104. package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceCard.esm.js +2 -0
  105. package/dist/components/HierarchicalTechInsightsPage/TopPerformingTeams.esm.js +2 -0
  106. package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +2 -0
  107. package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +2 -0
  108. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +2 -0
  109. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +2 -0
  110. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +2 -0
  111. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +2 -0
  112. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +2 -0
  113. package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +2 -0
  114. package/dist/components/HierarchicalTechInsightsPage/visualizations/findNodePath.esm.js +2 -0
  115. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +2 -0
  116. package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +1 -1
  117. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  118. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  119. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  120. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
  121. package/dist/components/QuickstartPage/HowDoIListItem.esm.js +1 -1
  122. package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +1 -1
  123. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -1
  124. package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +5 -5
  125. package/dist/components/QuickstartPage/styles.esm.js +1 -1
  126. package/dist/components/RoutingPage/NewFeatureTab.esm.js +2 -0
  127. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  128. package/dist/components/SearchBar/SearchBar.esm.js +1 -1
  129. package/dist/components/SoundcheckEntityLink/SoundcheckEntityLink.esm.js +2 -0
  130. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  131. package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
  132. package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +2 -0
  133. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  134. package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
  135. package/dist/components/TechHealth/Loading/Loading.esm.js +1 -1
  136. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
  137. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  138. package/dist/components/TechHealthTabs/PassRateTabHeader.esm.js +1 -1
  139. package/dist/components/TechInsights/FilterControls.esm.js +2 -0
  140. package/dist/components/TechInsights/SummaryTiles.esm.js +2 -0
  141. package/dist/components/TechInsights/TechInsightsCardsView.esm.js +2 -0
  142. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  143. package/dist/components/TechInsights/TechInsightsTableView.esm.js +2 -0
  144. package/dist/components/TechInsights/TrackStatusCard.esm.js +2 -0
  145. package/dist/components/TechInsights/ViewModeControls.esm.js +2 -0
  146. package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +2 -0
  147. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +2 -0
  148. package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
  149. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
  150. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  151. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  152. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
  153. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
  154. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  155. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  156. package/dist/components/TrackPage/TrackStatusBar.esm.js +1 -1
  157. package/dist/components/TrackPage/TrackStatusTable.esm.js +1 -1
  158. package/dist/components/TrackSelection/TrackSelection.esm.js +2 -0
  159. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  160. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  161. package/dist/graphql/generated/index.esm.js +202 -149
  162. package/dist/hooks/cache/useEntityCountCached.esm.js +2 -0
  163. package/dist/hooks/cache/useTrackCountCached.esm.js +2 -0
  164. package/dist/hooks/campaigns/useCreateCampaign.esm.js +1 -1
  165. package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
  166. package/dist/hooks/catalog/useGetEntityCount.esm.js +2 -0
  167. package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +2 -0
  168. package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
  169. package/dist/hooks/collectors/useDeleteCollectorConfig.esm.js +2 -0
  170. package/dist/hooks/graphqlKeys.esm.js +1 -1
  171. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  172. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  173. package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +2 -0
  174. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
  175. package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +2 -0
  176. package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +1 -1
  177. package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
  178. package/dist/hooks/tracks/useGetAllTracks.esm.js +1 -1
  179. package/dist/hooks/tracks/useGetTracksApplicableEntityCount.esm.js +2 -0
  180. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +2 -0
  181. package/dist/hooks/useFeatureFlag.esm.js +1 -1
  182. package/dist/hooks/useLCPReporting.esm.js +2 -0
  183. package/dist/index.d.ts +5 -3
  184. package/dist/index.esm.js +1 -1
  185. package/dist/routes.esm.js +1 -1
  186. package/dist/utils/colors.esm.js +1 -1
  187. package/dist/utils/lcpReporting.esm.js +2 -0
  188. package/package.json +27 -24
  189. package/dist/components/CheckCard/CheckCard.esm.js +0 -2
  190. package/dist/components/CheckCard/CheckHistoryChart.esm.js +0 -2
  191. package/dist/components/CheckCard/utils.esm.js +0 -2
  192. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +0 -2
  193. package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +0 -2
  194. package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +0 -2
  195. package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +0 -2
  196. package/dist/components/QuickstartPage/WelcomeModal.esm.js +0 -2
  197. package/dist/components/TechHealth/Loading/Emoji.esm.js +0 -2
  198. package/dist/components/TechHealth/Loading/EmojiFountain.esm.js +0 -2
  199. package/dist/components/TechInsights/ColorLegend.esm.js +0 -2
  200. package/dist/components/TechInsights/LoadingOverlay.esm.js +0 -2
  201. package/dist/components/TechInsights/LowestPerformingTeams.esm.js +0 -2
  202. package/dist/components/TechInsights/NivoCirclePacking.esm.js +0 -2
  203. package/dist/components/TechInsights/NivoIcicle.esm.js +0 -2
  204. package/dist/components/TechInsights/NivoSunburst.esm.js +0 -2
  205. package/dist/components/TechInsights/NivoTreemap.esm.js +0 -2
  206. package/dist/components/TechInsights/TeamComparison/CheckComparison.esm.js +0 -2
  207. package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +0 -2
  208. package/dist/components/TechInsights/TeamComparison/LineChartContainer.esm.js +0 -2
  209. package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +0 -2
  210. package/dist/components/TechInsights/TeamComparison/MultiTrackHistoryChart.esm.js +0 -2
  211. package/dist/components/TechInsights/TeamComparison/TeamComparison.esm.js +0 -2
  212. package/dist/components/TechInsights/TeamComparison/TrackComparison.esm.js +0 -2
  213. package/dist/components/TechInsights/TeamPerformanceCard.esm.js +0 -2
  214. package/dist/components/TechInsights/TechInsightsGroupSelector.esm.js +0 -2
  215. package/dist/components/TechInsights/TechInsightsPage2.esm.js +0 -2
  216. package/dist/components/TechInsights/TechInsightsSidebar.esm.js +0 -2
  217. package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +0 -2
  218. package/dist/components/TechInsights/Tiles/CheckStatusTile.esm.js +0 -2
  219. package/dist/components/TechInsights/Tiles/TileUtils.esm.js +0 -2
  220. package/dist/components/TechInsights/Tiles/TrackStatusTile.esm.js +0 -2
  221. package/dist/components/TechInsights/TopPerformingTeams.esm.js +0 -2
  222. package/dist/components/TechInsights/TrackCardGrid.esm.js +0 -2
  223. package/dist/components/TechInsights/TrackCardGridBox.esm.js +0 -2
  224. package/dist/components/TechInsights/colorContrast.esm.js +0 -2
  225. package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +0 -2
  226. package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +0 -2
  227. package/dist/components/TechInsights/hierarchy/VirtualRow.esm.js +0 -2
  228. package/dist/components/TechInsights/hierarchyToNivo.esm.js +0 -2
  229. package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +0 -2
  230. package/dist/components/TechInsights/styles.esm.js +0 -2
  231. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +0 -2
  232. package/dist/hooks/aggregations/useCertificationStatusHistories.esm.js +0 -2
  233. package/dist/hooks/aggregations/useCertificationStatuses.esm.js +0 -2
  234. package/dist/hooks/aggregations/useCheckStatusByGroups.esm.js +0 -2
  235. package/dist/hooks/aggregations/useCheckStatusHistories.esm.js +0 -2
  236. package/dist/hooks/aggregations/useCheckStatusHistoriesMultiFilter.esm.js +0 -2
  237. package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +0 -2
  238. package/dist/hooks/heirarchy/useRootGroups.esm.js +0 -2
  239. package/dist/hooks/savedViews/useDeleteView.esm.js +0 -2
  240. package/dist/hooks/savedViews/useSaveView.esm.js +0 -2
  241. package/dist/hooks/savedViews/useSavedViews.esm.js +0 -2
  242. /package/dist/components/{TrackPage/FilterBar → FilterSidebar}/util.esm.js +0 -0
  243. /package/dist/components/{TechInsights → HierarchicalTechInsightsPage}/TeamPerformanceListCard.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as o}from"react/jsx-runtime";import{makeStyles as a,Typography as r}from"@material-ui/core";import{motion as l}from"framer-motion";import{EmojiFountain as c}from"./EmojiFountain.esm.js";const s=a(()=>({container:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",flex:1,height:"100%"},textContainer:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"}}));function m({title:e,subtitle:i}){const n=s();return t("div",{className:n.container,children:o("div",{className:n.textContainer,children:[t(c,{}),o(l.div,{animate:{y:0,opacity:1},initial:{y:100,opacity:0},children:[e&&t(r,{align:"center",variant:"h6",children:e}),i&&t(r,{align:"center",variant:"subtitle2",children:i})]})]})})}export{m as Loading};
1
+ import{jsx as t,jsxs as o}from"react/jsx-runtime";import{makeStyles as l,Typography as r}from"@material-ui/core";import{motion as c}from"framer-motion";import{LoadingIndicator as m}from"../../LoadingIndicator/LoadingIndicator.esm.js";const s=l(()=>({container:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",flex:1,height:"100%"},textContainer:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"}}));function d({title:i,subtitle:e,children:a}){const n=s();return t("div",{className:n.container,children:o("div",{className:n.textContainer,children:[t(m,{}),t("div",{style:{marginBottom:"1.1rem"}}),a??"Loading...",o(c.div,{animate:{y:0,opacity:1},initial:{y:100,opacity:0},children:[i&&t(r,{align:"center",variant:"h6",children:i}),e&&t(r,{align:"center",variant:"subtitle2",children:e})]})]})})}export{d as Loading};
2
2
  //# sourceMappingURL=Loading.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as o}from"react/jsx-runtime";import{makeStyles as a}from"@material-ui/core";import{Loading as r}from"./Loading.esm.js";const t=a(e=>({container:{display:"flex",margin:"-24px",backgroundColor:e.palette.background.paper,borderTop:`1px solid ${e.palette.border}`,flex:1},fixedColumn:{width:"300px",flex:"none",borderRight:`1px solid ${e.palette.border}`},flexibleColumn:{display:"flex",flexDirection:"column",flex:1,backgroundColor:e.palette.background.default,height:"100%",maxWidth:"100%"},tabsPlaceholder:{height:"36.5px",backgroundColor:e.palette.background.paper}})),d=()=>{const e=t();return l("div",{className:e.container,children:[o("div",{className:e.fixedColumn}),l("div",{className:e.flexibleColumn,children:[o("div",{className:e.tabsPlaceholder}),o(r,{})]})]})};export{d as TechHealthLoading};
1
+ import{jsxs as l,jsx as o}from"react/jsx-runtime";import{makeStyles as a,Typography as i}from"@material-ui/core";import{useEntityCountCached as d}from"../../../hooks/cache/useEntityCountCached.esm.js";import{useTrackCountCached as c}from"../../../hooks/cache/useTrackCountCached.esm.js";import{Loading as s}from"./Loading.esm.js";const u=a(e=>({container:{display:"flex",margin:"-24px",backgroundColor:e.palette.background.paper,borderTop:`1px solid ${e.palette.border}`,flex:1},fixedColumn:{width:"300px",flex:"none",borderRight:`1px solid ${e.palette.border}`},flexibleColumn:{display:"flex",flexDirection:"column",flex:1,backgroundColor:e.palette.background.default,height:"100%",maxWidth:"100%"},tabsPlaceholder:{height:"36.5px",backgroundColor:e.palette.background.paper}})),p=({text:e,entityCount:r,trackCount:n})=>{const t=[];return t.push(o(i,{style:{fontSize:"1.1rem"},children:e??"Loading..."})),r!==null&&(t.push(o("div",{})),t.push(l(i,{style:{fontSize:"1.1rem"},children:["Processing ",r," entities..."]}))),n!==null&&(t.push(o("div",{})),t.push(l(i,{style:{fontSize:"1.1rem"},children:["Processing ",n," tracks..."]}))),o("div",{children:t})},h=({loadingText:e})=>{const r=u(),{entityCount:n}=d(),{trackCount:t}=c();return l("div",{className:r.container,children:[o("div",{className:r.fixedColumn}),l("div",{className:r.flexibleColumn,children:[o("div",{className:r.tabsPlaceholder}),o(s,{children:o(p,{text:e,entityCount:n,trackCount:t})})]})]})};export{h as TechHealthLoading};
2
2
  //# sourceMappingURL=TechHealthLoading.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{TabbedLayout as r}from"@backstage/core-components";import{useApi as p,featureFlagsApiRef as m}from"@backstage/core-plugin-api";import{makeStyles as n,Box as s}from"@material-ui/core";import{Routes as c,Route as d}from"react-router-dom";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as u}from"../SoundcheckHeader/useHeader.esm.js";import{TechHealthSummary as h}from"../TechHealthSummary/TechHealthSummary.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../TechHealthTabs/PassRateTabStyles.esm.js";import"../StyledTooltip/StyledTooltip.esm.js";import"../TechHealthTabs/OwnerColumn.esm.js";import{TrackResultsTab as f}from"../TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js";import{EntityResultsTab as x}from"../TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js";import{GroupResultsTab as b}from"../TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js";import{CampaignResultsTab as g}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 R}from"./Filters/FilterProvider.esm.js";import{Filters as T}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";const y=n(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`}}})),C=()=>{u();const t=y(),i=p(m),a=!i.getRegisteredFlags().find(l=>l.name==="soundcheck-enable-campaigns")||i.isActive("soundcheck-enable-campaigns");return e(R,{children:o("div",{className:t.container,children:[e("div",{className:t.fixedColumn,children:e(T,{})}),e("div",{className:t.flexibleColumn,children:e(s,{className:t.pageLayout,"aria-label":"tech health tabs",children:e(c,{children:e(d,{path:"/*",element:o(r,{children:[e(r.Route,{title:"Summary",path:"/",children:e(h,{})}),a&&e(r.Route,{title:"Campaigns",path:"/campaigns",children:e(g,{})}),e(r.Route,{title:"Checks",path:"/checks",children:e(k,{})}),e(r.Route,{title:"Tracks",path:"/tracks",children:e(f,{})}),e(r.Route,{title:"Entities",path:"/entities",children:e(x,{})}),e(r.Route,{title:"Teams",path:"/teams",children:e(b,{})})]})})})})})]})})};export{C as TechHealth};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{TabbedLayout as i}from"@backstage/core-components";import{useApi as p,featureFlagsApiRef as l}from"@backstage/core-plugin-api";import{makeStyles as n,Box as s}from"@material-ui/core";import{Routes as c,Route as d}from"react-router-dom";import{useLCPReporting as u}from"../../hooks/useLCPReporting.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as h}from"../SoundcheckHeader/useHeader.esm.js";import{TechHealthSummary as f}from"../TechHealthSummary/TechHealthSummary.esm.js";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";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 b}from"../TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js";import{GroupResultsTab as g}from"../TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js";import{CampaignResultsTab as R}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 C}from"./Filters/FilterProvider.esm.js";import{Filters as T}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";const y=n(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`}}})),v=()=>{h();const t=y(),r=p(l),o=!r.getRegisteredFlags().find(m=>m.name==="soundcheck-enable-campaigns")||r.isActive("soundcheck-enable-campaigns");return u({routeName:"soundcheck-tech-health",additionalAttributes:{campaignsEnabled:o.toString()}}),e(C,{children:a("div",{className:t.container,children:[e("div",{className:t.fixedColumn,children:e(T,{})}),e("div",{className:t.flexibleColumn,children:e(s,{className:t.pageLayout,"aria-label":"tech health tabs",children:e(c,{children:e(d,{path:"/*",element:a(i,{children:[e(i.Route,{title:"Summary",path:"/",children:e(f,{})}),o&&e(i.Route,{title:"Campaigns",path:"/campaigns",children:e(R,{})}),e(i.Route,{title:"Checks",path:"/checks",children:e(k,{})}),e(i.Route,{title:"Tracks",path:"/tracks",children:e(x,{})}),e(i.Route,{title:"Entities",path:"/entities",children:e(b,{})}),e(i.Route,{title:"Teams",path:"/teams",children:e(g,{})})]})})})})})]})})};export{v 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: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};
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};
2
2
  //# sourceMappingURL=PassRateTabHeader.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as h,jsx as n}from"react/jsx-runtime";import{makeStyles as x,Box as p,TextField as d,InputAdornment as k,IconButton as y,Chip as f}from"@material-ui/core";import C from"@material-ui/icons/Clear";import{Autocomplete as I}from"@material-ui/lab";const T=x(l=>({input:{backgroundColor:l.palette.background.paper}})),b=({searchText:l,onSearchTextChange:i,selectedTrackIds:r,onSelectedTrackIdsChange:c,trackOptions:s,applicableTracks:m,isLoading:g})=>{const o=T();return g||m.length===0?null:h(p,{display:"flex",alignItems:"center",style:{gap:"8px"},flex:1,children:[n(d,{placeholder:"Search tracks or campaigns...",variant:"outlined",size:"small",value:l,onChange:e=>i(e.target.value),style:{flex:1},InputProps:{className:o.input,endAdornment:l&&n(k,{position:"end",children:n(y,{size:"small",onClick:()=>i(""),edge:"end",children:n(C,{})})})}}),n(I,{multiple:!0,options:s,getOptionLabel:e=>e.name,value:s.filter(e=>r.includes(e.id)),onChange:(e,a)=>c(a.map(t=>t.id)),groupBy:e=>e.type,renderOption:e=>n(p,{display:"flex",alignItems:"center",style:{gap:8},children:n("span",{children:e.name})}),renderInput:e=>n(d,{...e,variant:"outlined",size:"small",placeholder:r.length===0?"All Tracks/Campaigns":"",className:o.input,style:{minWidth:300}}),renderTags:(e,a)=>e.length===0?null:e.map((t,u)=>n(f,{label:t.name,size:"small",...a({index:u})},t.id)),style:{minWidth:300}})]})};export{b as FilterControls};
2
+ //# sourceMappingURL=FilterControls.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as n,jsx as i,Fragment as c}from"react/jsx-runtime";import{useApi as v,configApiRef as T}from"@backstage/core-plugin-api";import{makeStyles as C,Box as m,Paper as t,CircularProgress as p,Typography as d}from"@material-ui/core";import{useTheme as f}from"@material-ui/core/styles";import k from"@material-ui/icons/Group";import x from"@material-ui/icons/Memory";import{Skeleton as u}from"@material-ui/lab";import{RiGroupLine as N,RiPuzzleLine as b}from"@remixicon/react";import{getColorInterpolator as I}from"../../utils/colors.esm.js";import"../Badges/LevelBadge.esm.js";import"../Badges/NoLevelBadge.esm.js";import{CampaignBadge as R}from"../Badges/CampaignBadge.esm.js";import{StatusBadge as S}from"../Badges/StatusBadge.esm.js";const y=C(a=>({summaryTilesContainer:{gap:24,display:"flex",marginBottom:32},summaryTile:{flex:1,padding:24,display:"flex",alignItems:"center",background:a.palette.background.paper},summaryIconTrackChanges:{color:a.palette.info.main,fontSize:32,marginRight:16},summaryIconGroup:{color:a.palette.text.secondary,fontSize:32,marginRight:16},summaryIconEntity:{color:a.palette.text.secondary,fontSize:32,marginRight:16},summaryIconCampaign:{color:a.palette.primary.main,fontSize:32,marginRight:16},summaryCircularProgress:{marginRight:16},skeletonText:{marginBottom:4}})),o=({icon:a,value:s,label:e,isLoading:r=!1})=>{const l=y();return n(c,{children:[a,i(m,{children:r?n(c,{children:[i(u,{variant:"text",width:60,height:32,className:l.skeletonText}),i(u,{variant:"text",width:80,height:20})]}):n(c,{children:[i(d,{variant:"h5",children:s}),i(d,{variant:"body2",color:"textSecondary",children:e})]})})]})},z=({summaryStats:a,colorInterpolator:s,isLoading:e=!1})=>{const r=y(),l=f(),g=v(T).getOptionalStringArray("soundcheck.flags")?.includes("portal")??!1,h=I(l,s);return n(m,{className:r.summaryTilesContainer,children:[i(t,{className:r.summaryTile,children:i(o,{icon:i(m,{marginRight:2,children:i(R,{})}),value:a.totalCampaigns??0,label:(a.totalCampaigns??0)===1?"Campaign":"Campaigns",isLoading:a.totalCampaigns===void 0||e})}),i(t,{className:r.summaryTile,children:i(o,{icon:i(m,{marginRight:2,children:i(S,{hideTooltip:!0,status:{passed:(a.totalTracks??0)*(a.avgCompliance??0),failed:0,error:0,exempt:0,notApplicable:0,notReported:(a.totalTracks??0)*(100-(a.avgCompliance??0)),passPercentage:a.avgCompliance??0,warning:0},size:"small"})}),value:a.totalTracks??0,label:(a.totalTracks??0)===1?"Track":"Tracks",isLoading:a.totalTracks===void 0||e})}),i(t,{className:r.summaryTile,children:i(o,{icon:a.avgCompliance!==void 0?i(p,{variant:"determinate",value:a.avgCompliance,size:32,thickness:4,style:{color:h(a.avgCompliance/100)},className:r.summaryCircularProgress}):i(p,{variant:"indeterminate",size:32,thickness:4,className:r.summaryCircularProgress}),value:a.avgCompliance!==void 0?`${a.avgCompliance}%`:"0%",label:"Avg Compliance",isLoading:a.avgCompliance===void 0||e})}),i(t,{className:r.summaryTile,children:i(o,{icon:g?i(N,{className:r.summaryIconEntity}):i(k,{className:r.summaryIconGroup}),value:a.numTeams??0,label:"Teams",isLoading:a.numTeams===void 0||e})}),i(t,{className:r.summaryTile,children:i(o,{icon:g?i(b,{className:r.summaryIconEntity}):i(x,{className:r.summaryIconEntity}),value:a.numEntities??0,label:"Entities",isLoading:a.numEntities===void 0||e})})]})};export{z as SummaryTiles};
2
+ //# sourceMappingURL=SummaryTiles.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as p,Fragment as P,jsx as e}from"react/jsx-runtime";import{Box as r,Typography as d,Divider as T}from"@material-ui/core";import{useCallback as x,useMemo as k}from"react";import"../Badges/LevelBadge.esm.js";import"../Badges/NoLevelBadge.esm.js";import{CampaignBadge as w}from"../Badges/CampaignBadge.esm.js";import{StatusBadge as G}from"../Badges/StatusBadge.esm.js";const I=({filteredCampaigns:g,filteredTracks:u,campaignTracks:B,TrackCard:h,classes:n,isTracksLoading:b,trackStatusMap:i,trackCountsMap:f})=>{const s=x(t=>i?[...t].sort((a,c)=>{const N=i.get(a.id),v=i.get(c.id),m=N?.status?.allPassPercentage,l=v?.status?.allPassPercentage;return typeof m=="number"&&typeof l=="number"?m-l:typeof m=="number"&&typeof l!="number"?-1:typeof m!="number"&&typeof l=="number"?1:0}):t,[i]),o=x(t=>{const a=i?.get(t.id)?.status,c=(a?.passed??0)+(a?.failed??0)+(a?.warning??0)+(a?.error??0)+(a?.notReported??0)+(a?.exempt??0);return!a||c>0},[i]),y=k(()=>s(g.filter(o)),[o,g,s]),C=k(()=>s(u.filter(o)),[o,u,s]);return b?null:p(P,{children:[p(r,{display:"flex",alignItems:"center",className:n.sectionHeader,marginBottom:.5,marginTop:4,gridGap:12,children:[e(w,{}),e(d,{variant:"h5",style:{marginBottom:0},children:"Campaigns"})]}),e(T,{style:{marginBottom:16}}),y.length>0?e(r,{className:n.gridContainer,style:{marginTop:0},children:e(r,{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",style:{gap:24},children:y.map(t=>e(h,{track:t,entityCount:f?.get(t.id)},t.id))})}):e(r,{className:n.emptyState,children:e(d,{variant:"h6",children:B.length>0?"No active campaigns matching the current filters":"No active campaigns."})}),C.length>0&&p(r,{className:n.gridContainer,children:[p(r,{display:"flex",alignItems:"center",className:n.sectionHeader,marginBottom:.5,gridGap:12,children:[e(G,{hideTooltip:!0,status:{passed:10,failed:10,error:0,exempt:0,notApplicable:0,notReported:10,passPercentage:50,warning:0},size:"small"}),e(d,{variant:"h5",style:{marginBottom:0},children:"Tracks"})]}),e(T,{style:{marginBottom:16}}),e(r,{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gridGap:24,marginBottom:.5,children:C.map(t=>e(h,{track:t,entityCount:f?.get(t.id)},t.id))})]})]})};export{I as TechInsightsCardsView};
2
+ //# sourceMappingURL=TechInsightsCardsView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as p}from"react/jsx-runtime";import{Grid as i,Typography as u}from"@material-ui/core";import{useState as T,useEffect as V}from"react";import{useSearchParams as b}from"react-router-dom";import C from"react-use/lib/useLocalStorage";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import{FilterProvider as S}from"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/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"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{getTechInsightsStyles as a}from"./styles.esm.js";import{TeamComparison as y}from"./TeamComparison/TeamComparison.esm.js";import{TechInsightsSidebar as x}from"./TechInsightsSidebar.esm.js";import{TechInsightsViewSelector as G}from"./TechInsightsViewSelector.esm.js";import{TrackCardGridBox as v}from"./TrackCardGridBox.esm.js";const I=({selectedView:e})=>{switch(e){case"Comparison":return t(y,{});default:return t(v,{})}},P=({selectedView:e,setSelectedView:r})=>{const o=a();return p(i,{item:!0,className:o.sidebar,style:{paddingBottom:4},children:[t(u,{variant:"body1",style:{marginBottom:4,fontWeight:"bold"},children:"Choose a view to explore:"}),t(G,{selectedView:e,setSelectedView:r})]})},h=e=>`${e.showCards},${e.showGraphs},${e.showTables}`,l=e=>{if(e)try{const[r,o,s]=e.split(",").map(n=>n==="true");return{showCards:r,showGraphs:o,showTables:s}}catch{}return{showCards:!0,showGraphs:!0,showTables:!0}},j=()=>{const e=a(),[r,o]=b(),[s,n]=C("soundcheck.techInsights.selectedView",void 0),[c,d]=T(()=>{const m=r.get("toggles");return l(m)||{showGraphs:!0,showCards:!0,showTables:!0}}),w=(m,g)=>{d(f=>({...f,[m]:g}))};return V(()=>{const m={...Object.fromEntries(r.entries()),toggles:h(c)};o(m)},[r,o,c]),t(S,{children:t(i,{container:!0,direction:"column",className:e.root,children:t(i,{item:!0,children:p(i,{container:!0,direction:"row",wrap:"nowrap",children:[p(i,{item:!0,style:{width:280,minWidth:280},children:[t(P,{selectedView:s,setSelectedView:n}),t(x,{selectedView:s,toggles:c,onToggleChange:w})]}),t(i,{item:!0,xs:!0,style:{overflow:"auto"},children:t(I,{selectedView:s})})]})})})})};export{j as TechInsightsPage,l as parseTogglesString,h as togglesToString};
1
+ import{jsx as r,jsxs as X}from"react/jsx-runtime";import{useApi as he,useRouteRef as fe}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ke}from"@backstage/plugin-catalog-react";import{makeStyles as ye,Box as m,Typography as J,LinearProgress as Te}from"@material-ui/core";import{useTheme as Ce}from"@material-ui/core/styles";import{useState as A,useCallback as w,useMemo as l}from"react";import{useNavigate as we,useSearchParams as Se}from"react-router-dom";import ve from"react-use/lib/useDebounce";import"@tanstack/react-query";import"../../api.esm.js";import{useBatchedHierarchicalTrackStatuses as Re}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as Ie}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as Le}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useLCPReporting as Ee}from"../../hooks/useLCPReporting.esm.js";import{techInsightsTrackRouteRef as be}from"../../routes.esm.js";import{AlertPanel as Pe}from"../AlertPanel/AlertPanel.esm.js";import"../GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js";import"../GroupHierarchySelector/GroupHierarchySelector.esm.js";import"react-use/lib/useLocalStorage";import{getAllOwnedEntityCount as Me}from"../GroupHierarchySelector/getAllOwnedEntityCount.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as xe}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as Ae}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{FilterControls as Ne}from"./FilterControls.esm.js";import{SummaryTiles as Be}from"./SummaryTiles.esm.js";import{TechInsightsCardsView as Ge}from"./TechInsightsCardsView.esm.js";import{TechInsightsTableView as Ve}from"./TechInsightsTableView.esm.js";import{TrackStatusCard as He}from"./TrackStatusCard.esm.js";import{TECH_INSIGHTS_VIEW_MODE as N,ViewModeControls as Ue}from"./ViewModeControls.esm.js";const je=ye(a=>({container:{padding:a.spacing(3),position:"relative"},gridContainer:{marginTop:a.spacing(3)},gridItem:{cursor:"pointer","&:hover":{transform:"scale(1.02)",transition:"transform 0.2s ease-in-out"}},emptyState:{textAlign:"center",padding:a.spacing(4)},errorState:{textAlign:"center",padding:a.spacing(4)},headerControls:{display:"flex",alignItems:"center"},progressIndicator:{position:"absolute",top:0,left:0,right:0,zIndex:a.zIndex.speedDial},tableRow:{"&:hover":{backgroundColor:a.palette.action.hover}}})),ze=()=>{const a=je(),K=Ce(),B=we(),[s,p]=Se(),o=s.get("group")||"";xe();const[S,Q]=A(s.get("search")||""),[d,W]=A(s.get("tracks")?.split(",").filter(Boolean)||[]),G=he(ke),v=s.get("view")||N.Table;Ee({routeName:"soundcheck-tech-insights",additionalAttributes:{selectedGroup:o,viewMode:v,hasSearch:!!S,hasSelectedTracks:d.length>0}});const Y=s.get("sortBy"),Z=s.get("direction"),V=Y||"compliance",H=Z||"asc",[U,q]=A("");ve(()=>q(S),300,[S]);const ee=w(e=>{Q(e);const t=new URLSearchParams(s.toString());e?t.set("search",e):t.delete("search"),p(t,{replace:!0})},[s,p]),te=w(e=>{W(e);const t=new URLSearchParams(s.toString());e.length>0?t.set("tracks",e.join(",")):t.delete("tracks"),p(t,{replace:!0})},[s,p]),re=e=>{const t=V===e&&H==="asc"?"desc":"asc",i=new URLSearchParams(s.toString());i.set("sortBy",e),i.set("direction",t),p(i,{replace:!0})},{tracks:R,counts:I,isLoading:k,error:ae}=Le(o,{},{enabled:!!o}),g=R.filter(e=>e.type==="campaign"),y=R.filter(e=>e.type!=="campaign"),oe=l(()=>[...g,...y].map(e=>({id:e.id,name:e.name,type:e.type==="campaign"?"Campaign":"Track"})),[g,y]),u=g.filter(e=>{const t=U.toLowerCase(),i=(e.ownerEntityRef?G.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"",C=t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||i.includes(t),c=d.length===0||d.includes(e.id);return C&&c}),h=y.filter(e=>{const t=U.toLowerCase(),i=(e.ownerEntityRef?G.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"",C=t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||i.includes(t),c=d.length===0||d.includes(e.id);return C&&c}),L=l(()=>[...g.map(e=>e.id),...y.map(e=>e.id)],[g,y]),{data:E,isLoading:ie,error:se,progress:n}=Re({trackIds:L,groupRef:o||"",skip:!o||L.length===0}),{data:j,isLoading:z}=Ie(o,{includeParent:!0}),f=l(()=>{const e=new Map;return Array.isArray(E)&&E.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[E]),D=l(()=>{const e=new Map;return Array.isArray(I)&&I.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[I]),ne=k,b=L.length>0&&ie,ce=ae||se,O=l(()=>({totalCampaigns:u.length,totalTracks:h.length}),[u.length,h.length]),_=l(()=>{if(b)return{numTeams:void 0,avgCompliance:void 0};let e=0,t=0;const i=new Set;return[...u,...h].forEach(C=>{const c=f.get(C.id);if(c){c.status&&typeof c.status.allPassPercentage=="number"&&(e+=c.status.allPassPercentage,t++),c.groupRef&&i.add(c.groupRef);const M=[c];for(;M.length>0;){const ue=M.pop();for(const x of ue.children)i.has(x.groupRef)||(i.add(x.groupRef),M.push(x))}}}),{numTeams:i.size,avgCompliance:t>0?Math.round(e/t):0}},[u,h,f,b]),$=l(()=>{if(z)return{numEntities:void 0};const e=j?.[o];return{numEntities:Me(e)}},[j,z,o]),le=l(()=>({...O,..._,...$}),[O,_,$]),F=fe(be),P=w(e=>{if(!o)return;const t=new URLSearchParams;t.set("group",o),t.set("track",e),t.set("node",o),B(`${F()}?${t.toString()}`)},[o,B,F]),pe=w(({track:e,entityCount:t})=>{const i=(f.get(e.id)??null)?.status??null;return r(m,{className:a.gridItem,onClick:()=>P(e.id),children:r(He,{track:e,trackStatus:i,entityCount:t})})},[a.gridItem,P,f]),me=w(e=>{const t=new URLSearchParams(s.toString());t.set("view",e),p(t,{replace:!0})},[s,p]),de=l(()=>!n||n.totalTracks===0?0:n.loadedTracks/n.totalTracks*100,[n]),ge=k&&o||b&&n&&n.totalTracks>0;if(ce)return r(m,{className:a.container,children:r(J,{variant:"h4",className:a.errorState,children:"Error loading tech insights data"})});let T;return R.length===0&&!k?T=r(m,{className:a.emptyState,children:r(J,{variant:"h6",children:o?"No applicable tracks found for the selected group":"Please select a group to view applicable tracks"})}):v===N.Cards?T=r(Ge,{filteredCampaigns:u,filteredTracks:h,campaignTracks:g,TrackCard:pe,classes:a,isTracksLoading:k,trackStatusMap:f,trackCountsMap:D}):v===N.Table?T=r(Ve,{tracks:[...u,...h],trackStatusMap:f,trackCountsMap:D,orderBy:V,order:H,handleSort:re,handleTrackClick:P,theme:K,classes:a}):T=r(Pe,{severity:"info",title:"View not supported"}),X(m,{className:a.container,children:[X(m,{display:"flex",justifyContent:"space-between",alignItems:"center",style:{marginBottom:24},gridGap:12,children:[r(Ae,{}),r(Ne,{searchText:S,onSearchTextChange:ee,selectedTrackIds:d,onSelectedTrackIdsChange:te,trackOptions:oe,applicableTracks:R,isLoading:ne}),r(Ue,{viewMode:v,onViewModeChange:me})]}),r(m,{style:{marginTop:0},children:r(Be,{summaryStats:le,colorInterpolator:"viridis",isLoading:k})}),ge&&r(m,{style:{marginBottom:16},children:r(Te,{variant:n&&n.totalTracks>0?"determinate":"indeterminate",value:n&&n.totalTracks>0?de:void 0,"data-testid":"batch-loading-indicator"})}),T]})};export{ze as TechInsightsPage};
2
2
  //# sourceMappingURL=TechInsightsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as C,Fragment as T}from"react/jsx-runtime";import{useApi as R}from"@backstage/core-plugin-api";import{entityPresentationApiRef as $}from"@backstage/plugin-catalog-react";import{TableContainer as S,Paper as E,Table as H,TableHead as L,TableRow as v,TableCell as i,TableSortLabel as f,TableBody as z,Typography as b,Box as k}from"@material-ui/core";import B from"@material-ui/icons/ArrowDownward";import M from"@material-ui/icons/ArrowUpward";import{useMemo as A}from"react";import{getColorInterpolator as F}from"../../utils/colors.esm.js";import{ColorChip as j}from"../ColorChip/ColorChip.esm.js";import{TeamStatusBar as V}from"../TeamStatusBar/TeamStatusBar.esm.js";import{convertToCommonTrackStatus as D}from"./convertToCommonTrackStatus.esm.js";const O=({tracks:w,trackStatusMap:d,trackCountsMap:u,orderBy:o,order:s,handleSort:m,handleTrackClick:N,theme:x,classes:r})=>{const I=R($),P=A(()=>[...w].filter(l=>{const t=d.get(l.id)?.status,c=(t?.passed??0)+(t?.failed??0)+(t?.warning??0)+(t?.error??0)+(t?.notReported??0)+(t?.exempt??0);return!t||c>0}).sort((l,t)=>{const c=d.get(l.id),g=d.get(t.id);let n,a;switch(o){case"name":n=l.name?.toLowerCase()||"",a=t.name?.toLowerCase()||"";break;case"type":n=l.type||"",a=t.type||"";break;case"owner":n=l.ownerEntityRef?.toLowerCase()||"",a=t.ownerEntityRef?.toLowerCase()||"";break;case"compliance":n=c?.status?.allPassPercentage??null,a=g?.status?.allPassPercentage??null;break;case"checks":n=l.levels.reduce((p,y)=>p+y.checks.length,0),a=t.levels.reduce((p,y)=>p+y.checks.length,0);break;case"entities":n=u.get(l.id)??0,a=u.get(t.id)??0;break;default:return 0}return typeof n=="number"&&typeof a=="number"?s==="asc"?n-a:a-n:typeof n=="number"&&a===null?-1:n===null&&typeof a=="number"?1:typeof n=="string"&&typeof a=="string"?s==="asc"?n.localeCompare(a):a.localeCompare(n):0}),[s,o,d,u,w]),h=l=>l.direction==="asc"?e(M,{...l,fontSize:"small"}):e(B,{...l,fontSize:"small"});return e(S,{component:E,children:C(H,{className:r.table,size:"small",children:[e(L,{children:C(v,{children:[e(i,{width:"30%",className:`${r.tableHeaderCell} ${r.headerCell}`,children:e(f,{active:o==="name",direction:o==="name"?s:"desc",onClick:()=>m("name"),IconComponent:h,children:e("div",{className:r.headerContent,children:"Name"})})}),e(i,{width:"10%",className:`${r.tableHeaderCell} ${r.headerCell}`,children:e(f,{active:o==="checks",direction:o==="checks"?s:"desc",onClick:()=>m("checks"),IconComponent:h,children:e("div",{className:r.headerContent,children:"Checks"})})}),e(i,{width:"10%",className:`${r.tableHeaderCell} ${r.headerCell}`,children:e(f,{active:o==="entities",direction:o==="entities"?s:"desc",onClick:()=>m("entities"),IconComponent:h,children:e("div",{className:r.headerContent,children:"Entities"})})}),e(i,{width:"30%",className:`${r.tableHeaderCell} ${r.headerCell}`,children:e(f,{active:o==="compliance",direction:o==="compliance"?s:"desc",onClick:()=>m("compliance"),IconComponent:h,children:e("div",{className:r.headerContent,children:"Compliance"})})}),e(i,{width:"20%",className:`${r.tableHeaderCell} ${r.headerCell}`,children:e(f,{active:o==="owner",direction:o==="owner"?s:"desc",onClick:()=>m("owner"),IconComponent:h,children:e("div",{className:r.headerContent,children:"Track Owner"})})})]})}),e(z,{children:P.map(l=>{const t=d.get(l.id)?.status;let c=0;if(t?.allPassPercentage!==null&&t?.allPassPercentage!==void 0)c=t.allPassPercentage;else if(t){const a=(t.passed??0)+(t.failed??0)+(t.warning??0)+(t.error??0)+(t.notReported??0)+(t.exempt??0);c=a>0?((t.passed??0)+(t.exempt??0))/a*100:0}const g=l.levels.reduce((a,p)=>a+p.checks.length,0),n=u.get(l.id)??0;return C(v,{onClick:()=>N(l.id),className:r.tableRow,style:{cursor:"pointer"},children:[e(i,{className:r.tableCell,children:e(b,{variant:"body2",style:{fontWeight:500},children:l.name})}),e(i,{className:r.tableCell,children:e(b,{variant:"body2",children:g})}),e(i,{className:r.tableCell,children:e(b,{variant:"body2",children:new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(n)})}),e(i,{className:r.tableCell,children:C("div",{style:{display:"flex",alignItems:"center",gap:8},children:[t&&e(j,{value:`${Math.round(c)}%`,getColor:F(x,"default"),numericValue:c/100}),e(k,{flex:1}),t&&e(V,{status:D(t)})]})}),e(i,{className:r.tableCell,style:{verticalAlign:"middle"},children:l.ownerEntityRef&&e(k,{display:"flex",alignItems:"center",children:(()=>{const a=I.forEntity(l.ownerEntityRef);return C(T,{children:[a.snapshot.Icon&&e(k,{marginRight:1,display:"flex",alignItems:"center",height:"20px",children:e(a.snapshot.Icon,{fontSize:"small"})}),e(b,{variant:"body2",style:{lineHeight:"20px"},children:a.snapshot.primaryTitle||l.ownerEntityRef})]})})()})})]},l.id)})})]})})};export{O as TechInsightsTableView};
2
+ //# sourceMappingURL=TechInsightsTableView.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as a,jsx as t}from"react/jsx-runtime";import{useApi as x}from"@backstage/core-plugin-api";import{entityPresentationApiRef as u}from"@backstage/plugin-catalog-react";import{useTheme as v,Paper as N,Box as r,Typography as n}from"@material-ui/core";import{makeStyles as w}from"@material-ui/core/styles";import{Skeleton as h}from"@material-ui/lab";import{interpolateRgb as S}from"d3-interpolate";import{scaleLinear as b}from"d3-scale";import{TeamStatusBar as k}from"../TeamStatusBar/TeamStatusBar.esm.js";import{convertToCommonTrackStatus as T}from"./convertToCommonTrackStatus.esm.js";const B=w(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,height:"100%",maxWidth:"280px",padding:e.spacing(2),cursor:"pointer"},content:{display:"flex",flex:1},categoryBarContainer:{width:"100%",height:e.spacing(1),marginBottom:e.spacing(1),cursor:"pointer"},cardHeader:{lineHeight:1.2}})),C=(e,o)=>b().domain([0,50,100]).range([e.palette.error.main,e.palette.warning.main,e.palette.success.main]).interpolate(S.gamma(2.2))(o),D=({track:e,trackStatus:o,entityCount:l})=>{const p=v(),f=x(u),i=B(),s=e.ownerEntityRef?f.forEntity(e.ownerEntityRef):null,c=o?.allPassPercentage??0,m=!o,d=e.levels.reduce((g,y)=>g+y.checks.length,0);return a(N,{className:i.card,children:[a(r,{display:"flex",flexDirection:"column",alignItems:"flex-start",mb:1,children:[t(n,{variant:"h6",className:i.cardHeader,children:e.name}),s&&t(n,{variant:"caption",color:"textSecondary",children:s.snapshot.primaryTitle})]}),a(r,{display:"flex",flexDirection:"column",alignItems:"flex-start",mb:1,children:[a(n,{variant:"caption",color:"textSecondary",children:[d," check",d!==1?"s":""]}),l!==void 0&&a(n,{variant:"caption",color:"textSecondary",children:[new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(l)," ","entit",l!==1?"ies":"y"]})]}),m&&t(r,{className:i.content,children:a(r,{width:"100%",children:[t(r,{mb:2,children:t(h,{variant:"text",width:"60%",height:48})}),t(r,{className:i.categoryBarContainer,children:t(h,{variant:"rect",width:"100%",height:8})})]})}),!m&&isNaN(c)&&t(r,{margin:"auto",children:t(n,{variant:"body2",children:"No Data"})}),!m&&!isNaN(c)&&t(r,{className:i.content,children:a(r,{width:"100%",children:[t(r,{mb:2,children:t(n,{variant:"h3",style:{color:C(p,Math.floor(c))},children:`${Math.floor(c)}%`})}),t(r,{className:i.categoryBarContainer,children:t(k,{status:T(o)})})]})})]})};export{D as TrackStatusCard};
2
+ //# sourceMappingURL=TrackStatusCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as s,jsx as t}from"react/jsx-runtime";import{Box as l,Button as r}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import c from"@material-ui/icons/ViewList";import m from"@material-ui/icons/ViewModule";const C=d(()=>({viewModeButton:{marginRight:8},viewModeButtonLast:{marginRight:16}})),e={Cards:"cards",Table:"table"},o={Contained:"contained",Outlined:"outlined"},u=({viewMode:n,onViewModeChange:i})=>{const a=C();return s(l,{display:"flex",alignItems:"center",children:[t(r,{variant:n===e.Table?o.Contained:o.Outlined,startIcon:t(c,{}),onClick:()=>i(e.Table),size:"small",className:a.viewModeButton,children:"Table"}),t(r,{variant:n===e.Cards?o.Contained:o.Outlined,startIcon:t(m,{}),onClick:()=>i(e.Cards),size:"small",className:a.viewModeButton,children:"Cards"})]})};export{e as TECH_INSIGHTS_VIEW_MODE,u as ViewModeControls};
2
+ //# sourceMappingURL=ViewModeControls.esm.js.map
@@ -0,0 +1,2 @@
1
+ const a=e=>({passed:e.passed,failed:e.failed,warning:e.warning,error:e.error,exempt:e.exempt,notApplicable:e.notApplicable,notReported:e.notReported,allPassPercentage:e.allPassPercentage??0,statusByLevel:(e.statusByLevel||[]).map(t=>({ordinal:t.ordinal,passed:t.passed,failed:t.failed,warning:t.warning,error:t.error,notApplicable:t.notApplicable,notReported:t.notReported,passPercentage:t.passPercentage??0,exempt:t.exempt}))});export{a as convertToCommonTrackStatus};
2
+ //# sourceMappingURL=convertToCommonTrackStatus.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as h,jsx as l}from"react/jsx-runtime";import{useApi as y,configApiRef as S}from"@backstage/core-plugin-api";import{EntityDisplayName as G}from"@backstage/plugin-catalog-react";import{Box as g,Chip as x}from"@material-ui/core";import{useMemo as v,useEffect as R,useCallback as w}from"react";import{useSearchParams as L}from"react-router-dom";import P from"react-use/lib/useLocalStorage";import{useGroupOptions as b}from"../../hooks/groups/useGroupOptions.esm.js";import"../GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js";import{GroupHierarchySelector as k}from"../GroupHierarchySelector/GroupHierarchySelector.esm.js";import{usePreviousSelectedGroups as C}from"../GroupHierarchySelector/usePreviousSelectedGroups.esm.js";const I=({onChange:m})=>{const{options:o,isLoading:n}=b(),[t,s]=L(),[c,p]=P("soundcheck.overview.groupRef",null),i=t.get("group"),u=y(S).getOptionalString("soundcheck.overview.defaultSelectedGroupType"),{addGroup:a}=C(),r=v(()=>{if(!n&&o.length){if(i||c){const e=i??c;return o.find(f=>f.ref===e)??o[0]}else if(u)return o.find(e=>e.type===u)??o[0];return o[0]}return null},[u,n,o,i,c]);R(()=>{if(!n&&o.length&&!i&&r){const e=new URLSearchParams(t.toString());e.set("group",r.ref),s(e,{replace:!0}),p(r.ref),m?.(r.ref),a(r.ref)}},[n,o,i,r,t,s,p]);const d=w(e=>{const f=new URLSearchParams(t.toString());f.set("group",e),s(f),p(e),m?.(e),a(e)},[a,m,t,p,s]);return h(g,{display:"flex",alignItems:"center",children:[l(k,{currentSelectedGroup:r?.ref,applyGroup:d},r?.ref),r?.ref&&l(g,{display:"flex",alignItems:"center",marginLeft:1,children:l(x,{size:"small",color:"secondary",style:{marginBottom:4,marginTop:4},label:l(G,{entityRef:r.ref})})})]})};export{I as TechInsightsGroupSelector};
2
+ //# sourceMappingURL=TechInsightsGroupSelector.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as d}from"react/jsx-runtime";import{Link as b}from"@backstage/core-components";import{useRouteRef as x}from"@backstage/core-plugin-api";import{useTheme as N,TableContainer as v,Table as T,TableBody as y,TableRow as s,TableCell as r,Typography as h,Box as w}from"@material-ui/core";import{makeStyles as R}from"@material-ui/core/styles";import{Skeleton as m}from"@material-ui/lab";import{useMemo as $}from"react";import{trackCheckDetailsRouteRef as A}from"../../routes.esm.js";import{getCheckStatusColor as F}from"../../utils/colors.esm.js";import{LevelRow as S}from"../LevelsTable/LevelsTable.esm.js";const z=R(t=>({root:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},checkNameLink:{color:"inherit",textDecoration:"none"},bar:{height:8,display:"block"},barContainer:{width:"100%",display:"block"},cell:{padding:t.spacing(1),width:"auto"},barCell:{width:150,padding:"4px 8px"},rightAlignedCell:{textAlign:"right",paddingRight:`${t.spacing(2)}px !important`},failingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},noFailingChecksText:{padding:t.spacing(2,1)}})),D=({track:t,checkStatuses:c,certificationStatus:o})=>{const i=z(),p=N(),f=x(A),g=$(()=>(t.levels??[]).map(n=>({...n,failingChecks:n.checks.map(l=>{const a=c?.find(u=>u.id===l.id),k=a?a.numberOfEntities-a.notApplicable-a.exempt:0,C=a?.failed??0;return{check:l,failedCount:C,applicableCount:k}}).filter(({failedCount:l})=>l>0).sort((l,a)=>(a.failedCount??0)-(l.failedCount??0))})),[t.levels,c]);return t.levels?.length?e(v,{component:"div",className:i.root,children:e(T,{children:e(y,{children:c===void 0||o===void 0?Array.from({length:10}).map((n,l)=>d(s,{children:[e(r,{className:i.barCell,children:e(m,{variant:"rect",width:30,height:8})}),e(r,{size:"medium",className:i.cell,children:e(m,{variant:"rect",width:140,height:8})}),e(r,{size:"small",className:i.cell,children:e(m,{variant:"rect",width:100,height:8})})]},`skeleton-${l}`)):g.map(n=>d(S,{level:n,children:[n.failingChecks.map(({check:l,failedCount:a})=>d(s,{children:[e(r,{className:i.barCell,children:e("div",{className:i.barContainer,children:e("span",{className:i.bar,style:{width:`${(a??0)/o.numberOfEntities*100}%`,backgroundColor:F(p,"failed")}})})}),e(r,{size:"medium",className:i.cell,children:e(b,{className:i.checkNameLink,to:f({trackId:t.id,checkId:l.id}),children:e(h,{children:l.name})})}),e(r,{size:"small",className:`${i.cell} ${i.rightAlignedCell}`,children:e(w,{className:i.failingText,children:e(h,{variant:"caption",children:`${new Intl.NumberFormat().format(a??0)} failing`})})})]},l.id)),c&&o&&n.failingChecks.length===0&&e(s,{children:e(r,{children:e(h,{variant:"body2",className:i.noFailingChecksText,children:"No Failing Checks"})})})]},n.ordinal))})})}):null};export{D as TopFailingChecksTable};
1
+ import{jsx as e,jsxs as d}from"react/jsx-runtime";import{Link as x}from"@backstage/core-components";import{useRouteRef as v}from"@backstage/core-plugin-api";import{useTheme as N,TableContainer as T,Table as y,TableBody as w,TableRow as s,TableCell as r,Typography as h,Box as R}from"@material-ui/core";import{makeStyles as L}from"@material-ui/core/styles";import{Skeleton as m}from"@material-ui/lab";import{useMemo as $}from"react";import{trackCheckDetailsRouteRef as A}from"../../routes.esm.js";import{getCheckStatusColor as D}from"../../utils/colors.esm.js";import{LevelRow as F}from"../LevelsTable/LevelsTable.esm.js";const S=L(t=>({root:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},checkNameLink:{color:"inherit",textDecoration:"none"},bar:{height:8,display:"block"},barContainer:{width:"100%",display:"block"},cell:{padding:t.spacing(1),width:"auto"},barCell:{width:150,padding:"4px 8px"},rightAlignedCell:{textAlign:"right",paddingRight:`${t.spacing(2)}px !important`},failingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},noFailingChecksText:{padding:t.spacing(2,1)}})),z=({track:t,checkStatuses:c,certificationStatus:o,hideLevel:p})=>{const i=S(),f=N(),g=v(A),k=$(()=>(t.levels??[]).map(n=>({...n,failingChecks:n.checks.map(l=>{const a=c?.find(b=>b.id===l.id),C=a?a.numberOfEntities-a.notApplicable-a.exempt:0,u=a?.failed??0;return{check:l,failedCount:u,applicableCount:C}}).filter(({failedCount:l})=>l>0).sort((l,a)=>(a.failedCount??0)-(l.failedCount??0))})),[t.levels,c]);return t.levels?.length?e(T,{component:"div",className:i.root,children:e(y,{children:e(w,{children:c===void 0||o===void 0?Array.from({length:10}).map((n,l)=>d(s,{children:[e(r,{className:i.barCell,children:e(m,{variant:"rect",width:30,height:8})}),e(r,{size:"medium",className:i.cell,children:e(m,{variant:"rect",width:140,height:8})}),e(r,{size:"small",className:i.cell,children:e(m,{variant:"rect",width:100,height:8})})]},`skeleton-${l}`)):k.map(n=>d(F,{level:n,hideLevel:p,children:[n.failingChecks.map(({check:l,failedCount:a})=>d(s,{children:[e(r,{className:i.barCell,children:e("div",{className:i.barContainer,children:e("span",{className:i.bar,style:{width:`${(a??0)/o.numberOfEntities*100}%`,backgroundColor:D(f,"failed")}})})}),e(r,{size:"medium",className:i.cell,children:e(x,{className:i.checkNameLink,to:g({trackId:t.id,checkId:l.id}),children:e(h,{children:l.name})})}),e(r,{size:"small",className:`${i.cell} ${i.rightAlignedCell}`,children:e(R,{className:i.failingText,children:e(h,{variant:"caption",children:`${new Intl.NumberFormat().format(a??0)} failing`})})})]},l.id)),c&&o&&n.failingChecks.length===0&&e(s,{children:e(r,{children:e(h,{variant:"body2",className:i.noFailingChecksText,children:"No Failing Checks"})})})]},n.ordinal))})})}):null};export{z as TopFailingChecksTable};
2
2
  //# sourceMappingURL=TopFailingChecksTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as i,Fragment as d}from"react/jsx-runtime";import{makeStyles as m}from"@material-ui/core/styles";import{useFormContext as g,Controller as b}from"react-hook-form";import{BadgeVariant as l}from"../../../../../graphql/generated/index.esm.js";import{LevelBadge as n}from"../../../../Badges/LevelBadge.esm.js";import"../../../../Badges/NoLevelBadge.esm.js";import"../../../../Badges/CampaignBadge.esm.js";import{FormControlledAutocomplete as f}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/core";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as u}from"../../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"react";import{FormFieldLabel as y}from"../../../../FormFieldLabel/FormFieldLabel.esm.js";const v=m(o=>({container:{display:"flex",flexDirection:"column",gap:o.spacing(1)},badgeTypeInput:{display:"flex",flexDirection:"row",gap:o.spacing(1)},badgeTypeIcon:{alignSelf:"center"}})),x=({disabled:o})=>{const t=v(),{control:a}=g(),r=[{value:"status",label:"Status",icon:e(n,{className:t.badgeTypeIcon,badge:{variant:l.Status,options:{status:{passed:3,failed:2,warning:0,exempt:0,error:0,notApplicable:0,notReported:0,passPercentage:60}}}})},{value:"medal",label:"Medal",icon:e(n,{className:t.badgeTypeIcon,badge:{variant:l.Medal,options:{color:"#FCE54F",level:3}}})}],p=u(r);return i("div",{className:t.container,children:[e("div",{children:e(y,{title:"Badge type",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#certifications-and-badges"})}),i("div",{className:t.badgeTypeInput,children:[e(f,{name:"detailsStep.badgeType",disableClearable:!0,control:a,width:300,freeSolo:!1,disabled:o,placeholder:"Badge type",...p}),e(b,{name:"detailsStep.badgeType",control:a,render:({field:s})=>e(d,{children:r.find(c=>c.value===s.value)?.icon})})]})]})};export{x as TrackBadgeTypeSelect};
1
+ import{jsx as e,jsxs as i,Fragment as d}from"react/jsx-runtime";import{makeStyles as m}from"@material-ui/core/styles";import{useFormContext as g,Controller as b}from"react-hook-form";import{BadgeVariant as l}from"../../../../../graphql/generated/index.esm.js";import{LevelBadge as n}from"../../../../Badges/LevelBadge.esm.js";import"../../../../Badges/NoLevelBadge.esm.js";import"../../../../Badges/CampaignBadge.esm.js";import{FormControlledAutocomplete as f}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/core";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as u}from"../../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as y}from"../../../../FormFieldLabel/FormFieldLabel.esm.js";const v=m(o=>({container:{display:"flex",flexDirection:"column",gap:o.spacing(1)},badgeTypeInput:{display:"flex",flexDirection:"row",gap:o.spacing(1)},badgeTypeIcon:{alignSelf:"center"}})),x=({disabled:o})=>{const t=v(),{control:a}=g(),r=[{value:"status",label:"Status",icon:e(n,{className:t.badgeTypeIcon,badge:{variant:l.Status,options:{status:{passed:3,failed:2,warning:0,exempt:0,error:0,notApplicable:0,notReported:0,passPercentage:60}}}})},{value:"medal",label:"Medal",icon:e(n,{className:t.badgeTypeIcon,badge:{variant:l.Medal,options:{color:"#FCE54F",level:3}}})}],p=u(r);return i("div",{className:t.container,children:[e("div",{children:e(y,{title:"Badge type",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#certifications-and-badges"})}),i("div",{className:t.badgeTypeInput,children:[e(f,{name:"detailsStep.badgeType",disableClearable:!0,control:a,width:300,freeSolo:!1,disabled:o,placeholder:"Badge type",...p}),e(b,{name:"detailsStep.badgeType",control:a,render:({field:s})=>e(d,{children:r.find(c=>c.value===s.value)?.icon})})]})]})};export{x as TrackBadgeTypeSelect};
2
2
  //# sourceMappingURL=TrackBadgeTypeSelect.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as t}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as a}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import{uniqBy as g}from"lodash";import{useFormContext as w}from"react-hook-form";import"../../../../../contexts/TrackFormContext.esm.js";import"../../../../../contexts/CheckFormContext.esm.js";import"../../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as x}from"../../../../../contexts/UserProvider.esm.js";import{useGroupOptions as S}from"../../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as E}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as R}from"../../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../utils/validation.esm.js";import{TRACK_FIELDS as L}from"../../../utils/trackFormUtils.esm.js";const O=b(i=>({container:{display:"flex",flexDirection:"column",gap:i.spacing(1)}})),T=({disabled:i,ownerEntityRef:r})=>{const l=O(),{options:p,isLoading:s}=S(),{user:c,userEntityRef:m}=x(),{control:d,formState:{errors:f}}=w();let e=g(p.map(o=>({value:o.ref,label:o.name})),"value");m&&(e=[{value:m,label:c?.metadata.name},...e]),r&&m!==r&&!e.some(o=>o.value===r)&&(e=[{value:r,label:h(r).name},...e]);const u=R(e),{name:v,description:y}=L.owner;return n("div",{className:l.container,children:[n("div",{children:[t(a,{variant:"subtitle2",children:v}),t(a,{variant:"caption",children:y})]}),t("div",{children:t(E,{name:"detailsStep.ownerEntityRef",control:d,width:300,freeSolo:!1,disabled:i||s,helperText:f?.detailsStep?.ownerEntityRef?.message??void 0,placeholder:"Owner",...u})})]})};export{T as TrackOwnerSelect};
1
+ import{jsxs as n,jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as a}from"@material-ui/core";import{makeStyles as b}from"@material-ui/core/styles";import{uniqBy as g}from"lodash";import{useFormContext as w}from"react-hook-form";import"../../../../../contexts/TrackFormContext.esm.js";import"../../../../../contexts/CheckFormContext.esm.js";import"../../../../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as x}from"../../../../../contexts/UserProvider.esm.js";import{useGroupOptions as S}from"../../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as E}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as R}from"../../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"../../../../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import"../../../utils/validation.esm.js";import{TRACK_FIELDS as L}from"../../../utils/trackFormUtils.esm.js";const O=b(m=>({container:{display:"flex",flexDirection:"column",gap:m.spacing(1)}})),T=({disabled:m,ownerEntityRef:r})=>{const p=O(),{options:l,isLoading:s}=S(),{user:c,userEntityRef:o}=x(),{control:d,formState:{errors:f}}=w();let e=g(l.map(t=>({value:t.ref,label:t.name})),"value");o&&(e=[{value:o,label:c?.metadata.name??o},...e]),r&&o!==r&&!e.some(t=>t.value===r)&&(e=[{value:r,label:h(r).name},...e]);const u=R(e),{name:v,description:y}=L.owner;return n("div",{className:p.container,children:[n("div",{children:[i(a,{variant:"subtitle2",children:v}),i(a,{variant:"caption",children:y})]}),i("div",{children:i(E,{name:"detailsStep.ownerEntityRef",control:d,width:300,freeSolo:!1,disabled:m||s,helperText:f?.detailsStep?.ownerEntityRef?.message??void 0,placeholder:"Owner",...u})})]})};export{T as TrackOwnerSelect};
2
2
  //# sourceMappingURL=TrackOwnerSelect.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as C}from"react/jsx-runtime";import{stringifyEntityRef as z}from"@backstage/catalog-model";import{Table as L}from"@backstage/core-components";import{makeStyles as P}from"@material-ui/core";import x from"lodash";import{useState as O,useEffect as D,useCallback as w}from"react";import{TrackEntityField as r,Direction as k}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as F}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useTrackEntities as N}from"../../../hooks/entities/useTrackEntities.esm.js";import{columnFactories as i}from"./columns.esm.js";import{toTrackEntityRow as j}from"./utils.esm.js";const q=10,A=n=>[i.createBadgeColumn(),i.createNameColumn(),i.createStatusColumn(n),i.createSystemColumn(),i.createOwnerColumn(),i.createSpecTypeColumn(),i.createSpecLifecycleColumn()],G=[r.CertificationLevel,r.Name,r.CheckPassRate,r.System,r.Owner,r.Type,r.Lifecycle],I=n=>{const{lifecycles:g,owners:a,types:s,systems:c}=n,f=g?.length?{"spec.lifecycle":g}:void 0,m=a?.length?{"relations.ownedBy":a}:void 0,d=s?.length?{"spec.type":s}:void 0,y=c?.length?{"relations.partOf":c}:void 0;return{...f,...m,...d,...y}},W=P({tableContainer:{display:"flex",flexDirection:"column",height:"100%"}}),H=({track:n,initialPageSize:g,lifecycles:a,owners:s,types:c,systems:f,getColor:m})=>{const d=W(),y=A(m),[e,u]=O({orderBy:void 0,filter:I({lifecycles:a,owners:s,types:c,systems:f}),pageInfo:{page:0,pageSize:g??q,direction:"forward",cursor:null}});D(()=>{u(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:I({lifecycles:a,owners:s,types:c,systems:f})}))},[a,s,c,f]);const{data:l,isLoading:h}=N({trackId:n.id,orderBy:e.orderBy,filter:e.filter,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),S=w((t,p)=>{let o;t===-1?o=void 0:o={field:G[t],direction:p==="asc"?k.Asc:k.Desc},u({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),E=w((t,p)=>{const o=t>e.pageInfo.page?"forward":"backward",R=o==="forward"?l?.trackEntities.pageInfo.endCursor??null:l?.trackEntities.pageInfo.startCursor??null;u({...e,pageInfo:{page:t,pageSize:p,direction:o,cursor:R}})},[l,e]),b=l?.trackEntities.edges.map(t=>t.node.entityRef)??[],{data:v,isLoading:T}=F({entityRefs:b}),B=x.compact(l?.trackEntities.edges.map(t=>{const p=v?.items.find(o=>!!o&&z(o)===t.node.entityRef);return p?j({trackDetails:t.node,track:n,entity:p}):void 0}))??[];return C("div",{className:d.tableContainer,children:C(L,{columns:y,data:B,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"both",emptyRowsWhenPaging:!1,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!1,padding:"dense"},onOrderChange:S,onPageChange:E,page:e.pageInfo.page,totalCount:l?.trackEntities.totalCount??0,isLoading:h||T,components:{Toolbar:()=>null}})})};export{H as TrackEntitiesTable};
1
+ import{jsx as C}from"react/jsx-runtime";import{stringifyEntityRef as z}from"@backstage/catalog-model";import{Table as L}from"@backstage/core-components";import{makeStyles as P}from"@material-ui/core";import x from"lodash";import{useState as O,useEffect as D,useCallback as k}from"react";import{TrackEntityField as i,Direction as w}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as F}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useTrackEntities as N}from"../../../hooks/entities/useTrackEntities.esm.js";import{columnFactories as a}from"./columns.esm.js";import{toTrackEntityRow as j}from"./utils.esm.js";const q=10,A=(r,n)=>[a.createBadgeColumn(),a.createNameColumn({trackId:n}),a.createStatusColumn(r),a.createSystemColumn(),a.createOwnerColumn(),a.createSpecTypeColumn(),a.createSpecLifecycleColumn()],G=[i.CertificationLevel,i.Name,i.CheckPassRate,i.System,i.Owner,i.Type,i.Lifecycle],I=r=>{const{lifecycles:n,owners:s,types:c,systems:l}=r,g=n?.length?{"spec.lifecycle":n}:void 0,d=s?.length?{"relations.ownedBy":s}:void 0,m=c?.length?{"spec.type":c}:void 0,y=l?.length?{"relations.partOf":l}:void 0;return{...g,...d,...m,...y}},W=P({tableContainer:{display:"flex",flexDirection:"column",height:"100%"}}),H=({track:r,initialPageSize:n,lifecycles:s,owners:c,types:l,systems:g,getColor:d})=>{const m=W(),y=A(d,r.id),[e,u]=O({orderBy:void 0,filter:I({lifecycles:s,owners:c,types:l,systems:g}),pageInfo:{page:0,pageSize:n??q,direction:"forward",cursor:null}});D(()=>{u(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:I({lifecycles:s,owners:c,types:l,systems:g})}))},[s,c,l,g]);const{data:p,isLoading:h}=N({trackId:r.id,orderBy:e.orderBy,filter:e.filter,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),S=k((t,f)=>{let o;t===-1?o=void 0:o={field:G[t],direction:f==="asc"?w.Asc:w.Desc},u({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),E=k((t,f)=>{const o=t>e.pageInfo.page?"forward":"backward",R=o==="forward"?p?.trackEntities.pageInfo.endCursor??null:p?.trackEntities.pageInfo.startCursor??null;u({...e,pageInfo:{page:t,pageSize:f,direction:o,cursor:R}})},[p,e]),b=p?.trackEntities.edges.map(t=>t.node.entityRef)??[],{data:v,isLoading:T}=F({entityRefs:b}),B=x.compact(p?.trackEntities.edges.map(t=>{const f=v?.items.find(o=>!!o&&z(o)===t.node.entityRef);return f?j({trackDetails:t.node,track:r,entity:f}):void 0}))??[];return C("div",{className:m.tableContainer,children:C(L,{columns:y,data:B,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"both",emptyRowsWhenPaging:!1,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!1,padding:"dense"},onOrderChange:S,onPageChange:E,page:e.pageInfo.page,totalCount:p?.trackEntities.totalCount??0,isLoading:h||T,components:{Toolbar:()=>null}})})};export{H as TrackEntitiesTable};
2
2
  //# sourceMappingURL=TrackEntitiesTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as l,jsxs as h}from"react/jsx-runtime";import{makeStyles as k,lighten as R,darken as L,Typography as n}from"@material-ui/core";import{useState as T,useRef as $}from"react";import B from"../../RichTooltip/RichTooltip.esm.js";import{getProgressColor as i}from"../utils.esm.js";import{getApplicableCheckCount as m}from"./utils.esm.js";const v=t=>{const e=m(t);return e===0?-1:Math.round(t.passed/e*100)},N=(t,e)=>t.levels.find(o=>o.ordinal===e),A=k(t=>({cell:{backgroundColor:({passRate:e,getColor:o})=>o?o(e):i(t,e),color:({passRate:e,getColor:o})=>t.palette.getContrastText(o?o(e):i(t,e)),cursor:"default",borderRadius:"4px",textAlign:"center",fontSize:".9rem",width:"50px"},tooltip:{width:"225px"},topLevelStatus:{borderBottom:`1px solid ${t.palette.divider}`,paddingBottom:t.spacing(1)},levelStatus:{borderBottom:`1px solid ${t.palette.divider}`,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},bottomLevelStatus:{paddingTop:t.spacing(1)},levelPassRate:{backgroundColor:({passRate:e,getColor:o})=>R(o?o(e):i(t,e),.75),color:({passRate:e,getColor:o})=>L(o?o(e):i(t,e),.7),borderRadius:"4px",textAlign:"center",fontSize:".7rem",width:"32px",height:"15px"}})),j=({track:t,status:e,getColor:o})=>{const u=v(e),s=A({passRate:u,getColor:o}),[f,p]=T(!1),g=$(null),x=()=>{g.current=setTimeout(()=>p(!0),500)},C=()=>{clearTimeout(g.current),p(!1)},y=m(e);return l(B,{content:l("div",{className:s.tooltip,children:e.statusByLevel.map((a,d)=>{let r;d===0?r=s.topLevelStatus:d===e.statusByLevel.length-1?r=s.bottomLevelStatus:r=s.levelStatus;const c=m(a),b=N(t,a.ordinal),S=v(a);return h("div",{className:r,style:{display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[l("div",{children:l(n,{variant:"caption",style:{fontWeight:"bold"},children:b?.name??`Level ${a.ordinal}`})}),h("div",{style:{display:"flex",justifyContent:"space-between"},children:[l(n,{variant:"caption",children:c===0?"No Applicable Checks":`Passing ${a.passed} of ${c} checks`}),l(n,{className:s.levelPassRate,children:c===0?"N/A":`${S}%`})]})]},d)})}),open:f,placement:"bottom",onClose:()=>p(!1),children:l("div",{style:{display:"flex",justifyContent:"center",alignItems:"center"},onMouseEnter:x,onMouseLeave:C,children:l(n,{className:s.cell,children:y===0?"N/A":`${u}%`})})})};export{j as TrackStatusChip};
1
+ import{jsx as l,jsxs as f}from"react/jsx-runtime";import{makeStyles as R,lighten as T,darken as $,Typography as i}from"@material-ui/core";import{useTheme as B}from"@material-ui/core/styles";import{useState as N,useRef as A}from"react";import{ColorChip as j}from"../../ColorChip/ColorChip.esm.js";import w from"../../RichTooltip/RichTooltip.esm.js";import{getProgressColor as r}from"../utils.esm.js";import{getApplicableCheckCount as m}from"./utils.esm.js";const C=t=>{const e=m(t);return e===0?-1:Math.round(t.passed/e*100)},z=(t,e)=>t.levels.find(o=>o.ordinal===e),M=R(t=>({cell:{backgroundColor:({passRate:e,getColor:o})=>o?o(e):r(t,e),color:({passRate:e,getColor:o})=>t.palette.getContrastText(o?o(e):r(t,e)),cursor:"default",borderRadius:"4px",textAlign:"center",fontSize:".9rem",width:"50px"},tooltip:{width:"225px"},topLevelStatus:{borderBottom:`1px solid ${t.palette.divider}`,paddingBottom:t.spacing(1)},levelStatus:{borderBottom:`1px solid ${t.palette.divider}`,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},bottomLevelStatus:{paddingTop:t.spacing(1)},levelPassRate:{backgroundColor:({passRate:e,getColor:o})=>T(o?o(e):r(t,e),.75),color:({passRate:e,getColor:o})=>$(o?o(e):r(t,e),.7),borderRadius:"4px",textAlign:"center",fontSize:".7rem",width:"32px",height:"15px"}})),P=({track:t,status:e,getColor:o})=>{const x=B(),u=C(e),s=M({passRate:u,getColor:o}),[y,p]=N(!1),g=A(null),b=()=>{g.current=setTimeout(()=>p(!0),500)},S=()=>{clearTimeout(g.current),p(!1)},k=m(e);return l(w,{content:l("div",{className:s.tooltip,children:e.statusByLevel?.map((a,d)=>{let n;d===0?n=s.topLevelStatus:e.statusByLevel?.length&&d===e.statusByLevel.length-1?n=s.bottomLevelStatus:n=s.levelStatus;const c=m(a),L=z(t,a.ordinal),h=C(a);return f("div",{className:n,style:{display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[l("div",{children:l(i,{variant:"caption",style:{fontWeight:"bold"},children:L?.name??`Level ${a.ordinal}`})}),f("div",{style:{display:"flex",justifyContent:"space-between"},children:[l(i,{variant:"caption",children:c===0?"No Applicable Checks":`Passing ${a.passed} of ${c} checks`}),c===0?l(i,{className:s.levelPassRate,children:"N/A"}):l(j,{value:`${h}%`,getColor:v=>o?o(v):r(x,v),numericValue:h,size:"small"})]})]},d)})}),open:y,placement:"bottom",onClose:()=>p(!1),children:l("div",{style:{display:"flex",justifyContent:"center",alignItems:"center"},onMouseEnter:b,onMouseLeave:S,children:l(i,{className:s.cell,children:k===0?"N/A":`${u}%`})})})};export{P as TrackStatusChip};
2
2
  //# sourceMappingURL=TrackStatusChip.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,Fragment as o}from"react/jsx-runtime";import{OverflowTooltip as m}from"@backstage/core-components";import{EntityRefLink as u,EntityRefLinks as s}from"@backstage/plugin-catalog-react";import{makeStyles as c,withStyles as p,Chip as d}from"@material-ui/core";import f from"@material-ui/icons/RemoveCircleOutline";import{LevelBadge as y}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as g}from"../../Badges/NoLevelBadge.esm.js";import{CampaignBadge as h}from"../../Badges/CampaignBadge.esm.js";import{TrackStatusChip as S}from"./TrackStatusChip.esm.js";import{getApplicableCheckCount as C}from"./utils.esm.js";const l=c(()=>({linkHover:{"& span":{"&:hover":{textDecoration:"underline"}}}})),b=p(e=>({root:{color:e.palette.text.disabled}}))(f),v=Object.freeze({createBadgeColumn(){return{title:"",field:"badge",render:e=>C(e.status)===0?r(b,{}):e.track.type==="campaign"?r(h,{}):e.badge?r(y,{badge:e.badge}):r(g,{}),width:"auto",align:"center",sorting:!1}},createStatusColumn(e){return{title:"Checks",field:"status",render:t=>t.status&&r(S,{track:t.track,status:t.status,getColor:e}),width:"auto",align:"center",sorting:!1}},createNameColumn(e){return{title:"Name",field:"resolved.entityRef",highlight:!0,customSort(t,a){return 0},render:({entity:t})=>{const a=l();return r(u,{entityRef:t,defaultKind:e?.defaultKind||"Component",className:a.linkHover})}}},createSystemColumn(){return{title:"System",field:"resolved.partOfSystemRelationTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=l();return r(s,{entityRefs:e.partOfSystemRelations,defaultKind:"system",className:t.linkHover})}}},createOwnerColumn(){return{title:"Owner",field:"resolved.ownedByRelationsTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=l();return r(s,{entityRefs:e.ownedByRelations,defaultKind:"group",className:t.linkHover})}}},createSpecTypeColumn(){return{title:"Type",field:"entity.spec.type",customSort(e,t){return 0}}},createSpecLifecycleColumn(){return{title:"Lifecycle",field:"entity.spec.lifecycle",customSort(e,t){return 0},width:"auto"}},createMetadataDescriptionColumn(){return{title:"Description",field:"entity.metadata.description",customSort(e,t){return 0},render:({entity:e})=>r(m,{text:e.metadata.description,placement:"bottom-start"}),width:"auto"}},createTagsColumn(){return{title:"Tags",field:"entity.metadata.tags",cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:e})=>r(o,{children:e.metadata.tags&&e.metadata.tags.map(t=>r(d,{label:t,size:"small",variant:"outlined",style:{marginBottom:"0px"}},t))}),width:"auto",sorting:!1}},createTitleColumn(e){return{title:"Title",field:"entity.metadata.title",customSort(t,a){return 0},hidden:e?.hidden,searchable:!0}},createLabelColumn(e,t){return{title:t?.title||"Label",field:"entity.metadata.labels",customSort(a,n){return 0},cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:a})=>{const n=a.metadata?.labels,i=n&&n[e]||t?.defaultValue;return r(o,{children:i&&r(d,{label:i,size:"small",variant:"outlined"},i)})},width:"auto",sorting:!1}},createNamespaceColumn(){return{title:"Namespace",field:"entity.metadata.namespace",customSort(e,t){return 0},width:"auto"}}});export{v as columnFactories};
1
+ import{jsx as r,Fragment as l}from"react/jsx-runtime";import{OverflowTooltip as m}from"@backstage/core-components";import{EntityRefLink as c,EntityRefLinks as s}from"@backstage/plugin-catalog-react";import{makeStyles as u,withStyles as p,Chip as d}from"@material-ui/core";import f from"@material-ui/icons/RemoveCircleOutline";import{LevelBadge as y}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as g}from"../../Badges/NoLevelBadge.esm.js";import{CampaignBadge as h}from"../../Badges/CampaignBadge.esm.js";import{SoundcheckEntityLink as S}from"../../SoundcheckEntityLink/SoundcheckEntityLink.esm.js";import{TrackStatusChip as C}from"./TrackStatusChip.esm.js";import{getApplicableCheckCount as k}from"./utils.esm.js";const o=u(()=>({linkHover:{"& span":{"&:hover":{textDecoration:"underline"}}}})),v=p(t=>({root:{color:t.palette.text.disabled}}))(f),b=Object.freeze({createBadgeColumn(){return{title:"",field:"badge",render:t=>k(t.status)===0?r(v,{}):t.track.type==="campaign"?r(h,{}):t.badge?r(y,{badge:t.badge}):r(g,{}),width:"auto",align:"center",sorting:!1}},createStatusColumn(t){return{title:"Checks",field:"status",render:e=>e.status&&r(C,{track:e.track,status:e.status,getColor:t}),width:"auto",align:"center",sorting:!1}},createNameColumn(t){return{title:"Name",field:"resolved.entityRef",highlight:!0,customSort(e,a){return 0},render:({entity:e})=>{const a=o();return t?.trackId?r(S,{entity:e,trackId:t.trackId,className:a.linkHover}):r(c,{entityRef:e,defaultKind:t?.defaultKind||"Component",className:a.linkHover})}}},createSystemColumn(){return{title:"System",field:"resolved.partOfSystemRelationTitle",customSort(t,e){return 0},render:({resolved:t})=>{const e=o();return r(s,{entityRefs:t.partOfSystemRelations,defaultKind:"system",className:e.linkHover})}}},createOwnerColumn(){return{title:"Owner",field:"resolved.ownedByRelationsTitle",customSort(t,e){return 0},render:({resolved:t})=>{const e=o();return r(s,{entityRefs:t.ownedByRelations,defaultKind:"group",className:e.linkHover})}}},createSpecTypeColumn(){return{title:"Type",field:"entity.spec.type",customSort(t,e){return 0}}},createSpecLifecycleColumn(){return{title:"Lifecycle",field:"entity.spec.lifecycle",customSort(t,e){return 0},width:"auto"}},createMetadataDescriptionColumn(){return{title:"Description",field:"entity.metadata.description",customSort(t,e){return 0},render:({entity:t})=>r(m,{text:t.metadata.description,placement:"bottom-start"}),width:"auto"}},createTagsColumn(){return{title:"Tags",field:"entity.metadata.tags",cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:t})=>r(l,{children:t.metadata.tags&&t.metadata.tags.map(e=>r(d,{label:e,size:"small",variant:"outlined",style:{marginBottom:"0px"}},e))}),width:"auto",sorting:!1}},createTitleColumn(t){return{title:"Title",field:"entity.metadata.title",customSort(e,a){return 0},hidden:t?.hidden,searchable:!0}},createLabelColumn(t,e){return{title:e?.title||"Label",field:"entity.metadata.labels",customSort(a,n){return 0},cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:a})=>{const n=a.metadata?.labels,i=n&&n[t]||e?.defaultValue;return r(l,{children:i&&r(d,{label:i,size:"small",variant:"outlined"},i)})},width:"auto",sorting:!1}},createNamespaceColumn(){return{title:"Namespace",field:"entity.metadata.namespace",customSort(t,e){return 0},width:"auto"}}});export{b as columnFactories};
2
2
  //# sourceMappingURL=columns.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useTheme as g,Typography as x}from"@material-ui/core";import L from"lodash";import{DateTime as b}from"luxon";import{ResponsiveContainer as C,AreaChart as A,CartesianGrid as $,XAxis as I,YAxis as f,Tooltip as T,Area as y}from"recharts";import{compactNumberFormatter as W}from"../../utils/formatters.esm.js";import{getChartColors as D,formatDate as E}from"../Charts/chartUtils.esm.js";import{LoadingChart as N}from"../Charts/LoadingChart.esm.js";import{TimePeriodBar as O}from"../TimePeriodBar/TimePeriodBar.esm.js";const k=i=>{const a=i?.certificationStatusHistory.history??[],l=i?.certificationStatusHistory.numberOfEntities,o=b.utc();return L.map(a,(s,r)=>{let t={name:E(o,a.length-r-1),totalEntities:l??0};const p=[];for(const d of s.statusByLevel)p.push(d.cumulativelyPassed);const c=l??0;let m=0;s.statusByLevel.forEach((d,v)=>{const h=c>0?Math.round(p[v]/c*100):0;t={...t,[`Level ${d.ordinal}`]:h},m+=h});const u=Math.max(0,100-m);return t={...t,"No Level":u},t})},F=({track:i,data:a,isError:l})=>{const o=g();if(l)return e(x,{color:"error",children:"Failed to load track data."});if(!i||!a)return e(N,{type:"area",numLines:3});const s=k(a),r=D(o);return n("div",{style:{height:290,width:"100%",position:"relative",borderRadius:"4px"},children:[e(O,{}),e(C,{height:250,debounce:1,children:n(A,{data:s,margin:{top:0,right:0,bottom:0,left:0},children:[n("defs",{children:[i?.levels.map(t=>n("linearGradient",{id:`gradient-${t.ordinal}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[e("stop",{offset:"5%",stopColor:r[t.ordinal%r.length],stopOpacity:.4}),e("stop",{offset:"95%",stopColor:r[t.ordinal%r.length],stopOpacity:0})]},`gradient-${t.ordinal}`)),n("linearGradient",{id:"gradient-no-level",x1:"0",y1:"0",x2:"0",y2:"1",children:[e("stop",{offset:"5%",stopColor:o.palette.action.disabled,stopOpacity:.4}),e("stop",{offset:"95%",stopColor:o.palette.action.disabled,stopOpacity:0})]})]}),e($,{stroke:o.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),e(I,{dataKey:"name",tickLine:!1,axisLine:!1}),e(f,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:t=>`${t}%`,ticks:[0,25,50,75,100]}),e(f,{yAxisId:"right",orientation:"right",dataKey:"totalEntities",axisLine:!1,tickLine:!1,tickFormatter:t=>W(t)}),e(T,{contentStyle:{backgroundColor:o.palette.background.paper,color:o.palette.text.primary,border:`1px solid ${o.palette.divider}`},cursor:{stroke:o.palette.divider,strokeWidth:1}}),[...i?.levels??[]].reverse().map(t=>e(y,{type:"monotone",dataKey:`Level ${t.ordinal}`,name:`Level ${t.ordinal}`,stackId:"1",yAxisId:"left",stroke:r[t.ordinal%r.length],strokeWidth:2,fill:`url(#gradient-${t.ordinal})`,isAnimationActive:!1,activeDot:{fill:r[t.ordinal%r.length],stroke:o.palette.background.paper,strokeWidth:1,r:5}},`Level ${t.ordinal}`)),e(y,{type:"monotone",dataKey:"No Level",name:"No Level",stackId:"1",yAxisId:"left",stroke:o.palette.action.disabled,strokeWidth:2,fill:"url(#gradient-no-level)",isAnimationActive:!1,activeDot:{fill:o.palette.action.disabled,stroke:o.palette.background.paper,strokeWidth:1,r:5}},"No Level")]})})]})};export{F as TrackHistoryChart,k as formatLineChartData};
1
+ import{jsx as r,jsxs as l}from"react/jsx-runtime";import{useTheme as v,Typography as g}from"@material-ui/core";import x from"lodash";import{DateTime as L}from"luxon";import{ResponsiveContainer as b,AreaChart as C,CartesianGrid as A,XAxis as $,YAxis as h,Tooltip as O,Area as u}from"recharts";import{compactNumberFormatter as p}from"../../utils/formatters.esm.js";import{getChartColors as I,formatDate as T}from"../Charts/chartUtils.esm.js";import{LoadingChart as W}from"../Charts/LoadingChart.esm.js";import{TimePeriodBar as D}from"../TimePeriodBar/TimePeriodBar.esm.js";const y=i=>{const a=i?.certificationStatusHistory.history??[],n=i?.certificationStatusHistory.numberOfEntities??0,e=L.utc();return x.map(a,(d,o)=>{let t={name:T(e,a.length-o-1)},m=0,f=0;d.statusByLevel.sort((s,c)=>c.ordinal-s.ordinal).forEach(s=>{const c=s.cumulativelyPassed-f;t={...t,[`Level ${s.ordinal}`]:c},m+=c,f=s.cumulativelyPassed}),d.statusByLevel.reverse();const k=Math.max(0,n-m);return t={...t,"No Level":k},t})},E=(i,a)=>{if(typeof i=="number"){const n=a.certificationStatusHistory.numberOfEntities??0,e=n>0?Math.round(i/n*100):0;return`${p(i)} of ${p(n)} (${e}%)`}return i},H=({track:i,data:a,isError:n})=>{const e=v();if(n)return r(g,{color:"error",children:"Failed to load track data."});if(!i||!a)return r(W,{type:"area",numLines:3});const d=y(a),o=I(e);return l("div",{style:{height:290,width:"100%",position:"relative",borderRadius:"4px"},children:[r(D,{}),r(b,{height:250,debounce:1,children:l(C,{data:d,margin:{top:0,right:0,bottom:0,left:0},children:[l("defs",{children:[i?.levels.map(t=>l("linearGradient",{id:`gradient-${t.ordinal}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"5%",stopColor:o[t.ordinal%o.length],stopOpacity:.4}),r("stop",{offset:"95%",stopColor:o[t.ordinal%o.length],stopOpacity:0})]},`gradient-${t.ordinal}`)),l("linearGradient",{id:"gradient-no-level",x1:"0",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"5%",stopColor:e.palette.action.disabled,stopOpacity:.4}),r("stop",{offset:"95%",stopColor:e.palette.action.disabled,stopOpacity:0})]})]}),r(A,{stroke:e.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),r($,{dataKey:"name",tickLine:!1,axisLine:!1}),r(h,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:t=>`${t}%`,ticks:[0,25,50,75,100]}),r(h,{yAxisId:"right",orientation:"right",domain:[0,Math.max(a?.certificationStatusHistory.numberOfEntities,1)],axisLine:!1,tickLine:!1,tickFormatter:t=>p(t)}),r(O,{contentStyle:{backgroundColor:e.palette.background.paper,color:e.palette.text.primary,border:`1px solid ${e.palette.divider}`},cursor:{stroke:e.palette.divider,strokeWidth:1},formatter:t=>E(t,a)}),i?.levels?.map(t=>r(u,{type:"monotone",dataKey:`Level ${t.ordinal}`,name:t.name??`Level ${t.ordinal}`,stackId:"1",yAxisId:"right",stroke:o[t.ordinal%o.length],strokeWidth:2,fill:`url(#gradient-${t.ordinal})`,isAnimationActive:!1,activeDot:{fill:o[t.ordinal%o.length],stroke:e.palette.background.paper,strokeWidth:1,r:5}},`Level ${t.ordinal}`)),r(u,{type:"monotone",dataKey:"No Level",name:"No Level",stackId:"1",yAxisId:"right",stroke:e.palette.action.disabled,strokeWidth:2,fill:"url(#gradient-no-level)",isAnimationActive:!1,activeDot:{fill:e.palette.action.disabled,stroke:e.palette.background.paper,strokeWidth:1,r:5}},"No Level")]})})]})};export{H as TrackHistoryChart,y as formatLineChartData};
2
2
  //# sourceMappingURL=TrackHistoryChart.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as u,Fragment as ee}from"react/jsx-runtime";import{useRouteRef as te}from"@backstage/core-plugin-api";import{EntityRefLink as re}from"@backstage/plugin-catalog-react";import{usePermission as I}from"@backstage/plugin-permission-react";import{makeStyles as ie,Button as oe,Box as ae,Tabs as se,Tab as N}from"@material-ui/core";import{soundcheckTrackReadPermission as ne,soundcheckTrackUpdatePermission as ce,toEntityFilterQuery as le}from"@spotify/backstage-plugin-soundcheck-common";import v from"lodash/isEqual";import{useState as y,useMemo as a,useEffect as me,useCallback as x}from"react";import{useNavigate as pe,useSearchParams as de,useParams as fe}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as he}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as ge}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as ue}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as ye}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackEditRouteRef as ke}from"../../routes.esm.js";import{FilterSidebar as Ce}from"../FilterSidebar/FilterSidebar.esm.js";import{LevelsTable as ve}from"../LevelsTable/LevelsTable.esm.js";import{LoadingIndicator as we}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as be}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ee}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Se}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Le}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTable as Te}from"../TopFailingChecksTable/TopFailingChecksTable.esm.js";import{toFilter as Ne}from"./FilterBar/util.esm.js";import{TrackEntitiesTable as xe}from"./TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackProgressCard as Fe}from"./TrackProgressCard.esm.js";const Re=ie(e=>({root:{height:"100%",background:e.palette.background.default},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},trackProgressContainer:{padding:e.spacing(2,0,2,2),borderBottom:`1px solid ${e.palette.divider}`},levelCard:{margin:e.spacing(1,0,2)},editButton:{marginLeft:"auto"},contentArea:{flex:1,padding:e.spacing(0,2)},trackEntitiesContainer:{marginTop:e.spacing(1)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},tabs:{padding:e.spacing(2,2,0,2)}})),Be=()=>{const e=Re(),[k,O]=y("checksByLevel"),F=pe(),R=te(ke),[o,C]=de(),c=a(()=>o.getAll("owners"),[o]),l=a(()=>o.getAll("lifecycles"),[o]),m=a(()=>o.getAll("types"),[o]),p=a(()=>o.getAll("systems"),[o]),M=a(()=>Le(o.get("numberOfDays")),[o]),[d,w]=y(l),[f,b]=y(c),[h,E]=y(m),[g,S]=y(p);me(()=>{b(c??[]),w(l??[]),E(m??[]),S(p??[])},[c,l,m,p]);const $=a(()=>{const t={owners:!v(f,c??[]),lifecycles:!v(d,l??[]),types:!v(h,m??[]),systems:!v(g,p??[])};return Object.values(t).some(Boolean)},[f,c,d,l,h,m,g,p]),j=x(()=>{const t=new URLSearchParams(o);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),d.length>0&&d.forEach(n=>t.append("lifecycles",n)),f.length>0&&f.forEach(n=>t.append("owners",n)),h.length>0&&h.forEach(n=>t.append("types",n)),g.length>0&&g.forEach(n=>t.append("systems",n)),C(t)},[o,d,f,h,g,C]),H=x(()=>{w([]),b([]),E([]),S([]);const t=new URLSearchParams(o);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),C(t)},[o,C]),U=x((t,n)=>{O(n)},[]),{trackId:s}=fe(),L=a(()=>Ne({lifecycles:l,owners:c,types:m,systems:p}),[l,c,m,p]),{data:r,isLoading:T,isError:z}=he(s),{data:B,isLoading:W,isError:Q}=ge({trackId:s,filter:L},!!s),{data:V,isError:q}=ue({trackId:s,filter:L,numberOfDays:M},!!s),{loading:G,allowed:J}=I({permission:ne,resourceRef:s}),{loading:P,allowed:A}=I({permission:ce,resourceRef:s}),K=a(()=>r?.ownerEntityRef?i(re,{color:"inherit",entityRef:r.ownerEntityRef,className:e.ownerLink}):null,[r?.ownerEntityRef,e.ownerLink]),X=a(()=>!P&&A&&r?.isEditable?i(oe,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{F(R({trackId:r.id}))},children:"Edit Track"}):null,[A,e.editButton,R,P,F,r]),Y=a(()=>r?.description?i(Se,{className:e.headerDescription,content:r.description}):null,[e.headerDescription,r?.description]);Ee({title:r?.name,description:Y,customSubtitle:K,sectionRight:X});const Z=r?.levels?.flatMap(t=>t.checks)??[],{data:D}=ye({trackId:s,checkIds:Z.map(t=>t.id),filter:L},!!r),_=a(()=>le(r?.filter),[r]);return u(ee,{children:[i(be,{entityName:"track",entityId:s,showNotFound:!T&&!r,showCannotView:!G&&!J}),T&&i(we,{}),r&&i("div",{className:e.root,children:u("div",{className:e.pageContent,children:[i(Ce,{trackFilter:_,stagedTypes:h,stagedLifecycles:d,stagedOwners:f,stagedSystems:g,onTypesChange:E,onLifecyclesChange:w,onOwnersChange:b,onSystemsChange:S,onApplyFilters:j,onClearFilters:H,hasFilterChanges:$}),u("div",{className:e.mainContentArea,children:[i("div",{className:e.trackProgressContainer,children:i(Fe,{track:r,status:B,history:V,isError:z||Q||q})}),i(ae,{className:e.tabs,children:u(se,{value:k,onChange:U,indicatorColor:"primary",textColor:"primary",children:[i(N,{label:"Checks By Level",value:"checksByLevel"}),i(N,{label:"Top Failing Checks",value:"topFailingChecks"}),i(N,{label:"Entities",value:"entities"})]})}),u("div",{className:e.contentArea,children:[k==="checksByLevel"&&i("div",{className:e.levelCard,children:i(ve,{track:r,checkStatuses:D,isLoading:T||W})}),k==="entities"&&i("div",{className:e.trackEntitiesContainer,children:i(xe,{track:r,lifecycles:l,owners:c,types:m,systems:p})}),k==="topFailingChecks"&&i("div",{className:e.levelCard,children:i(Te,{track:r,checkStatuses:D,certificationStatus:B?.certificationStatus})})]})]})]})})]})};export{Be as TrackPage};
1
+ import{jsx as i,jsxs as m,Fragment as G}from"react/jsx-runtime";import{useRouteRef as K}from"@backstage/core-plugin-api";import{EntityRefLink as Y}from"@backstage/plugin-catalog-react";import{usePermission as w}from"@backstage/plugin-permission-react";import{makeStyles as Z,Button as ee,Box as te,Tabs as ie,Tab as f}from"@material-ui/core";import{soundcheckTrackReadPermission as re,soundcheckTrackUpdatePermission as oe,toEntityFilterQuery as ae}from"@spotify/backstage-plugin-soundcheck-common";import{useState as se,useMemo as o,useCallback as ne}from"react";import{useNavigate as ce,useSearchParams as le,useParams as me}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as de}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as pe}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as ge}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as fe}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useLCPReporting as he}from"../../hooks/useLCPReporting.esm.js";import{trackEditRouteRef as ue}from"../../routes.esm.js";import{FilterSidebar as ke}from"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as ye}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ce}from"../FilterSidebar/util.esm.js";import{LevelsTable as ve}from"../LevelsTable/LevelsTable.esm.js";import{LoadingIndicator as Se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as be}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as we}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Fe}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Te}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTable as Le}from"../TopFailingChecksTable/TopFailingChecksTable.esm.js";import{TrackEntitiesTable as Ne}from"./TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackProgressCard as Ee}from"./TrackProgressCard.esm.js";const xe=Z(e=>({root:{height:"100%",background:e.palette.background.default},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},trackProgressContainer:{padding:e.spacing(2,0,2,2),borderBottom:`1px solid ${e.palette.divider}`},levelCard:{margin:e.spacing(1,0,2)},editButton:{marginLeft:"auto"},contentArea:{flex:1,padding:e.spacing(0,2)},trackEntitiesContainer:{marginTop:e.spacing(1)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},tabs:{padding:e.spacing(2,2,0,2)}})),Re=()=>{const e=xe(),[a,F]=se("checksByLevel"),h=ce(),u=K(ue),[k]=le(),y=o(()=>Te(k.get("numberOfDays")),[k]),{owners:s,lifecycles:n,types:c,systems:l,stagedLifecycles:T,setStagedLifecycles:L,stagedOwners:N,setStagedOwners:E,stagedTypes:x,setStagedTypes:R,stagedSystems:P,setStagedSystems:B,hasFilterChanges:D,handleApplyFilters:I,handleClearFilters:A}=ye(),O=ne((d,q)=>{F(q)},[]),{trackId:r}=me(),p=o(()=>Ce({lifecycles:n,owners:s,types:c,systems:l}),[n,s,c,l]),{data:t,isLoading:g,isError:j}=de(r),{data:C,isLoading:M,isError:H}=pe({trackId:r,filter:p},!!r),{data:$,isError:z}=ge({trackId:r,filter:p,numberOfDays:y},!!r),{loading:V,allowed:W}=w({permission:re,resourceRef:r}),{loading:v,allowed:S}=w({permission:oe,resourceRef:r}),Q=o(()=>t?.ownerEntityRef?i(Y,{color:"inherit",entityRef:t.ownerEntityRef,className:e.ownerLink}):null,[t?.ownerEntityRef,e.ownerLink]),U=o(()=>!v&&S&&t?.isEditable?i(ee,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{h(u({trackId:t.id}))},children:"Edit Track"}):null,[S,e.editButton,u,v,h,t]),J=o(()=>t?.description?i(Fe,{className:e.headerDescription,content:t.description}):null,[e.headerDescription,t?.description]);we({title:t?.name,description:J,customSubtitle:Q,sectionRight:U}),he({routeName:"soundcheck-track-details",additionalAttributes:{trackId:r||"unknown",trackName:t?.name||"unknown",selectedView:a,filtersApplied:(s.length+n.length+c.length+l.length).toString(),ownersFilter:s.join(",")||"none",lifecyclesFilter:n.join(",")||"none",typesFilter:c.join(",")||"none",systemsFilter:l.join(",")||"none",numberOfDays:y.toString()}});const X=t?.levels?.flatMap(d=>d.checks)??[],{data:b}=fe({trackId:r,checkIds:X.map(d=>d.id),filter:p},!!t),_=o(()=>ae(t?.filter),[t]);return m(G,{children:[i(be,{entityName:"track",entityId:r,showNotFound:!g&&!t,showCannotView:!V&&!W}),g&&i(Se,{}),t&&i("div",{className:e.root,children:m("div",{className:e.pageContent,children:[i(ke,{trackFilter:_,stagedTypes:x,stagedLifecycles:T,stagedOwners:N,stagedSystems:P,onTypesChange:R,onLifecyclesChange:L,onOwnersChange:E,onSystemsChange:B,onApplyFilters:I,onClearFilters:A,hasFilterChanges:D}),m("div",{className:e.mainContentArea,children:[i("div",{className:e.trackProgressContainer,children:i(Ee,{track:t,status:C,history:$,isError:j||H||z})}),i(te,{className:e.tabs,children:m(ie,{value:a,onChange:O,indicatorColor:"primary",textColor:"primary",children:[i(f,{label:"Checks By Level",value:"checksByLevel"}),i(f,{label:"Top Failing Checks",value:"topFailingChecks"}),i(f,{label:"Entities",value:"entities"})]})}),m("div",{className:e.contentArea,children:[a==="checksByLevel"&&i("div",{className:e.levelCard,children:i(ve,{track:t,checkStatuses:b,isLoading:g||M})}),a==="entities"&&i("div",{className:e.trackEntitiesContainer,children:i(Ne,{track:t,lifecycles:n,owners:s,types:c,systems:l})}),a==="topFailingChecks"&&i("div",{className:e.levelCard,children:i(Le,{track:t,checkStatuses:b,certificationStatus:C?.certificationStatus})})]})]})]})})]})};export{Re as TrackPage};
2
2
  //# sourceMappingURL=TrackPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as n}from"react/jsx-runtime";import{useTheme as y,Box as v}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import{Skeleton as k}from"@material-ui/lab";import{useMemo as f}from"react";import{CategoryBar as C}from"../CategoryBar/CategoryBar.esm.js";import{getChartColors as N}from"../Charts/chartUtils.esm.js";const x=B(t=>({categoryBar:{"& .MuiBox-root > div":{height:"8px"}},skeleton:{height:"8px",width:"100%",margin:0,padding:0,display:"block"}})),L=({track:t,status:o,className:m})=>{const c=x(),l=y(),u=f(()=>{if(!o||!t)return{};const e={};let r=0;return o.statusByLevel.forEach(({ordinal:a,cumulativelyPassed:s})=>{const i=t.levels.find(h=>h.ordinal===a)?.name??`Level ${a}`;e[i]=s,r+=s}),e["Not Certified"]=o.numberOfEntities-r,e},[o,t]),p=f(()=>{if(!o||!t)return{};const e=N(l),r={};return o.statusByLevel.forEach(({ordinal:a})=>{const s=t.levels.find(i=>i.ordinal===a)?.name??`Level ${a}`;r[s]=e[a%e.length]}),r["Not Certified"]=l.palette.grey[700],r},[l,o,t]);if(!t||!o)return n(k,{className:`${c.skeleton} ${m}`});const g=e=>e,d=o.statusByLevel.map(({ordinal:e})=>t.levels.find(r=>r.ordinal===e)?.name??`Level ${e}`);return d.push("Not Certified"),n(v,{className:m,style:{width:"100%"},children:n(C,{className:c.categoryBar,data:u,categories:d,categoryColors:p,showTooltip:!1,valueFormatter:e=>e.toString(),categoryFormatter:g})})};export{L as TrackStatusBar};
1
+ import{jsx as n}from"react/jsx-runtime";import{useTheme as B,Box as L}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import{Skeleton as k}from"@material-ui/lab";import{useMemo as f}from"react";import{CategoryBar as N}from"../CategoryBar/CategoryBar.esm.js";import{getChartColors as $}from"../Charts/chartUtils.esm.js";const C=x(t=>({categoryBar:{"& .MuiBox-root > div":{height:"8px"}},skeleton:{height:"8px",width:"100%",margin:0,padding:0,display:"block"}})),S=({track:t,status:r,className:m})=>{const c=C(),i=B(),p=f(()=>{if(!r||!t)return{};const e={};let a=0,o=0;return(r.statusByLevel||[]).sort((s,l)=>l.ordinal-s.ordinal).forEach(({ordinal:s,cumulativelyPassed:l})=>{const g=t.levels.find(y=>y.ordinal===s)?.name??`Level ${s}`,u=l-o;e[g]=u,a+=u,o=l}),(r.statusByLevel||[]).reverse(),e["No Level"]=Math.max(0,r.numberOfEntities-a),e},[r,t]),v=f(()=>{if(!r||!t)return{};const e=$(i),a={};return(r.statusByLevel||[]).forEach(({ordinal:o})=>{const s=t.levels.find(l=>l.ordinal===o)?.name??`Level ${o}`;a[s]=e[o%e.length]}),a["No Level"]=i.palette.action.disabled,a},[i,r,t]);if(!t||!r)return n(k,{className:`${c.skeleton} ${m}`});const h=e=>e,d=(r.statusByLevel||[]).map(({ordinal:e})=>t.levels.find(a=>a.ordinal===e)?.name??`Level ${e}`);return d.push("No Level"),n(L,{className:m,style:{width:"100%"},children:n(N,{className:c.categoryBar,data:p,categories:d,categoryColors:v,showTooltip:!1,valueFormatter:e=>e.toString(),categoryFormatter:h})})};export{S as TrackStatusBar};
2
2
  //# sourceMappingURL=TrackStatusBar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as a,jsxs as l}from"react/jsx-runtime";import{useTheme as y,Typography as p}from"@material-ui/core";import{makeStyles as v,createStyles as k}from"@material-ui/core/styles";import{Skeleton as d}from"@material-ui/lab";import{memo as x,useMemo as N,Fragment as S}from"react";import{compactNumberFormatter as h}from"../../utils/formatters.esm.js";import{getChartColors as w}from"../Charts/chartUtils.esm.js";const C=v(e=>k({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:e.spacing(1),minWidth:0},item:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.875rem",minWidth:0,flex:1},value:{fontSize:"0.875rem",color:e.palette.text.primary},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{color:e.palette.text.secondary,marginLeft:e.spacing(1)},skeleton:{backgroundColor:e.palette.action.hover}})),T=x(({track:e,status:s})=>{const r=y(),t=C(),g=N(()=>{if(!e)return[{name:"",key:1,color:r.palette.action.hover},{name:"",key:2,color:r.palette.action.hover},{name:"",key:3,color:r.palette.action.hover}];const n=w(r);return e.levels.map(({name:i,ordinal:o})=>({name:i??`Level ${o}`,key:o,color:n[o%n.length]}))},[r,e]),c=s?.numberOfEntities??0;return a("div",{className:t.container,children:g.map(({name:n,key:i,color:o})=>{const m=s?.statusByLevel.find(({ordinal:u})=>u===i)?.cumulativelyPassed??0,f=c>0?Math.round(m/c*100):0;return l(S,{children:[a("div",{className:t.item,children:l("div",{className:t.category,children:[a("span",{className:t.legendDash,style:{backgroundColor:o}}),e?a(p,{className:t.categoryText,children:n}):a(d,{width:80,height:20,className:t.skeleton})]})}),a("div",{className:`${t.item} ${t.valueCell}`,children:e&&s?l(p,{className:t.value,children:[h(m)," of"," ",h(c),l("span",{className:t.percentage,children:["(",f,"%)"]})]}):a(d,{width:120,height:20,className:t.skeleton})})]},i)})})});export{T as TrackStatusTable};
1
+ import{jsx as a,jsxs as m}from"react/jsx-runtime";import{useTheme as w,Typography as v}from"@material-ui/core";import{makeStyles as b,createStyles as C}from"@material-ui/core/styles";import{Skeleton as f}from"@material-ui/lab";import{memo as T,useMemo as z,Fragment as L}from"react";import{compactNumberFormatter as y}from"../../utils/formatters.esm.js";import{getChartColors as O}from"../Charts/chartUtils.esm.js";const W=b(e=>C({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:e.spacing(1),minWidth:0},item:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.875rem",minWidth:0,flex:1},value:{fontSize:"0.875rem",color:e.palette.text.primary},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{color:e.palette.text.secondary,marginLeft:e.spacing(1)},skeleton:{backgroundColor:e.palette.action.hover}})),j=T(({track:e,status:l})=>{const r=w(),t=W(),k=z(()=>{if(!e)return[{name:"",key:1,color:r.palette.action.hover,value:0},{name:"",key:2,color:r.palette.action.hover,value:0},{name:"",key:3,color:r.palette.action.hover,value:0}];const i=O(r);let s=0,c=0;const n=e.levels.sort((h,o)=>o.ordinal-h.ordinal).map(({name:h,ordinal:o})=>{const g=l?.statusByLevel.find(S=>S.ordinal===o)?.cumulativelyPassed??0,u=g-c,N={name:h??`Level ${o}`,key:o,color:i[o%i.length],value:u};return s+=u,c=g,N}).reverse();e.levels.reverse();const p=l?.numberOfEntities??0,x=Math.max(0,p-s);return n.push({name:"No Level",key:-1,color:r.palette.action.disabled,value:x}),n},[r,e,l]),d=l?.numberOfEntities??0;return a("div",{className:t.container,children:k.map(({name:i,key:s,color:c,value:n})=>{const p=d>0?Math.round(n/d*100):0;return m(L,{children:[a("div",{className:t.item,children:m("div",{className:t.category,children:[a("span",{className:t.legendDash,style:{backgroundColor:c}}),e?a(v,{className:t.categoryText,children:i}):a(f,{width:80,height:20,className:t.skeleton})]})}),a("div",{className:`${t.item} ${t.valueCell}`,children:e&&l?m(v,{className:t.value,children:[y(n)," of"," ",y(d),m("span",{className:t.percentage,children:["(",p,"%)"]})]}):a(f,{width:120,height:20,className:t.skeleton})})]},s)})})});export{j as TrackStatusTable};
2
2
  //# sourceMappingURL=TrackStatusTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as y}from"react/jsx-runtime";import{makeStyles as A,TextField as G}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{sortBy as x,isEmpty as E}from"lodash";import{useState as I,useMemo as o}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as $}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as B}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetTracksApplicableEntityCount as F}from"../../hooks/tracks/useGetTracksApplicableEntityCount.esm.js";const j=A(a=>({input:{backgroundColor:a.palette.background.paper}})),D=({selectTrack:a,selectedTrackId:n,showArchived:d,showDraft:m,selectedGroupRef:h})=>{const T=j(),{data:s,isLoading:C}=B({}),{data:l,isLoading:v}=$({}),[S,b]=I(n??""),u=o(()=>new Set(l?.edges.filter(({node:t})=>t.archived).map(({node:t})=>t.track.id)??[]),[l?.edges]),r=o(()=>{let t=s?.edges?.map(({node:e})=>({id:e.id,name:e.name,type:e.type==="campaign"?"Campaign":"Track",draft:!!e.draft}))??[];return t=t?.filter(e=>(d||!u.has(e.id))&&(m||!e.draft)),x(t,"type")},[u,d,m,s?.edges]),{data:c,isLoading:f}=F(h??"",{ids:r.map(t=>t.id)}),p=o(()=>{if(f)return r;const t=c??[],e=r.map(i=>{const k=t.find(({id:L})=>L===i.id);return{...i,count:k?k.applicableEntityCount:void 0}}).filter(i=>i.count!==0);return E(e)?r:e},[c,f,r]),g=o(()=>p?.find(t=>t.id===n),[n,p]);return y(w,{loading:C||v,options:p,onChange:(t,e)=>a(e?.id??""),inputValue:S,value:g??null,getOptionLabel:t=>`${t.name}${t.count?` (${t.count})`:""}`,groupBy:t=>t.type,fullWidth:!0,onInputChange:(t,e)=>b(e),renderInput:t=>y(G,{...t,placeholder:"Select Track",className:T.input,style:{margin:0},margin:"dense",variant:"outlined"})},g?.id??"no-value")};export{D as TrackSelection};
2
+ //# sourceMappingURL=TrackSelection.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as g}from"react/jsx-runtime";import{useRouteRef as X,useApi as A,featureFlagsApiRef as Y}from"@backstage/core-plugin-api";import{usePermission as _}from"@backstage/plugin-permission-react";import{makeStyles as ee,Button as w,Grid as o}from"@material-ui/core";import{soundcheckTrackCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as I}from"react";import{useNavigate as ae}from"react-router-dom";import te from"react-use/lib/useDebounce";import{soundcheckApiRef as oe}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ie}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetTrackOwners as se}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import{useImportTracks as ne}from"../../../hooks/tracks/useImportTracks.esm.js";import ce from"../../../images/no-results.svg";import{trackCreateRouteRef as le}from"../../../routes.esm.js";import{exportTracks as me}from"../../../utils/export.esm.js";import{FilterDefault as N}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{ImportExportPanel as pe}from"../../ImportExportPanel/ImportExportPanel.esm.js";import{Pagination as de}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ge}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as u,TrackNoResults as B}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as ue}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as fe}from"./TrackSummaryCard.esm.js";const he=ee(a=>({headerButtons:{display:"flex",gap:a.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:a.spacing(0,0,1)},container:{padding:a.spacing(3),gap:a.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:a.spacing(1.5),paddingBottom:a.spacing(1.5)}})),ke=({tracksPerPage:a,currentCursor:R})=>{const s=he(),[f,h]=i(R),[m,F]=i(""),[k,O]=i(N.Alpha),[P,E]=i(N.Owner),[C,L]=i(""),{data:j,isLoading:D}=se();te(()=>{L(m)},500,[m]);const{loading:T,allowed:G}=_({permission:re}),H=ae(),W=X(le),y=()=>H(W()),{data:t,isLoading:n}=ie({ids:void 0,types:["standard","playlist"],first:a,after:f,orderAlphabetical:k,searchByOwner:P,searchByName:C}),[p,$]=i(t),c=p?.edges?.map(e=>e.node),[x,v]=i([]);I(()=>{h(void 0),v([])},[C]);const b=A(Y),q=!b.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-track-creation")||b.isActive("soundcheck-enable-track-creation"),d=!G||!q,z=e=>{O(e.target.value)},J=e=>{E(e.target.value)};I(()=>{t&&$(()=>({totalCount:t.totalCount,edges:t.edges,pageInfo:{startCursor:t.pageInfo.startCursor,endCursor:t.pageInfo.endCursor,hasNextPage:t?.pageInfo.hasNextPage??!1,hasPreviousPage:t?.pageInfo.hasPreviousPage??!1}}))},[t]);const K=A(oe),{mutateAsync:M}=ne(),Q=async e=>M(e),U=async()=>{const e=await K.getTracks({orderAlphabetical:"asc"});return me(e.edges.map(Z=>Z.node))};if(!n&&!c)return r(S,{title:u.title,description:u.description,imgSrc:ce,action:!T&&r(w,{disabled:d,variant:"contained",color:"primary",onClick:y,children:u.callToAction})});let l;n?l=r(ue,{}):c?.length?l=c?.map(e=>r(o,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`track card ${e.id}`,children:r(fe,{summary:e})},e.id)):l=r(o,{xs:12,item:!0,role:"listitem","aria-label":"result",children:r(S,{title:B.title,description:B.description})});const V=p?.pageInfo.hasNextPage||x?.length>0;return g(o,{container:!0,direction:"row",className:s.container,children:[g(o,{container:!0,className:s.header,children:[r(ge,{searchPlaceholder:"Search Available Tracks",isLoading:n||D,searchTerm:m,setSearchTerm:F,filterAlpha:k,handleAlphabeticalFilterChange:z,filterOwner:P,handleOwnerFilterChange:J,owners:j}),g(o,{item:!0,xs:4,className:s.headerButtons,children:[r(pe,{resourceType:"track",disableImport:d,disableExport:n||!c?.length,onImport:Q,onExport:U}),!T&&r(w,{disabled:d,variant:"contained",color:"primary",onClick:y,className:s.createButton,children:"Create Track"})]})]}),r(o,{container:!0,spacing:4,role:"list","aria-label":"tracks",children:l}),V&&r(o,{item:!0,xs:12,children:r(de,{response:p,listingsPerPage:a,cursor:f,setCursor:h,prevCursors:x,setPrevCursors:v,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})})]})};export{ke as TrackListPage};
1
+ import{jsx as r,jsxs as d}from"react/jsx-runtime";import{useRouteRef as K,useApi as C,featureFlagsApiRef as Q}from"@backstage/core-plugin-api";import{usePermission as U}from"@backstage/plugin-permission-react";import{makeStyles as Y,Button as v,Grid as a}from"@material-ui/core";import{soundcheckTrackCreatePermission as Z}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as _}from"react";import{useNavigate as ee}from"react-router-dom";import re from"react-use/lib/useDebounce";import{soundcheckApiRef as te}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ae}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetTrackOwners as ie}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import{useImportTracks as oe}from"../../../hooks/tracks/useImportTracks.esm.js";import se from"../../../images/no-results.svg";import{trackCreateRouteRef as ne}from"../../../routes.esm.js";import{exportTracks as ce}from"../../../utils/export.esm.js";import{FilterDefault as w}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{ImportExportPanel as le}from"../../ImportExportPanel/ImportExportPanel.esm.js";import{Pagination as me}from"../../Pagination/Pagination.esm.js";import{SearchFilters as pe}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as g,TrackNoResults as B}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as de}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as ge}from"./TrackSummaryCard.esm.js";const ue=Y(t=>({headerButtons:{display:"flex",gap:t.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:t.spacing(0,0,1)},container:{padding:t.spacing(3),gap:t.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:t.spacing(1.5),paddingBottom:t.spacing(1.5)}})),fe=({tracksPerPage:t,currentCursor:N})=>{const o=ue(),[u,f]=i(N),[l,R]=i(""),[h,F]=i(w.Alpha),[k,I]=i(w.Owner),[T,O]=i(""),{data:E,isLoading:L}=ie();re(()=>{O(l)},500,[l]);const{loading:P,allowed:j}=U({permission:Z}),G=ee(),D=K(ne),y=()=>G(D()),{data:m,isLoading:s}=ae({ids:void 0,types:["standard","playlist"],first:t,after:u,orderAlphabetical:h,searchByOwner:k,searchByName:T}),n=m?.edges?.map(e=>e.node),[b,x]=i([]);_(()=>{f(void 0),x([])},[T]);const A=C(Q),H=!A.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-track-creation")||A.isActive("soundcheck-enable-track-creation"),p=!j||!H,W=e=>{F(e.target.value)},$=e=>{I(e.target.value)},q=C(te),{mutateAsync:z}=oe(),J=async e=>z(e),M=async()=>{const e=await q.getTracks({orderAlphabetical:"asc"});return ce(e.edges.map(X=>X.node))};if(!s&&!n)return r(S,{title:g.title,description:g.description,imgSrc:se,action:!P&&r(v,{disabled:p,variant:"contained",color:"primary",onClick:y,children:g.callToAction})});let c;s?c=r(de,{}):n?.length?c=n?.map(e=>r(a,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`track card ${e.id}`,children:r(ge,{summary:e})},e.id)):c=r(a,{xs:12,item:!0,role:"listitem","aria-label":"result",children:r(S,{title:B.title,description:B.description})});const V=m?.pageInfo.hasNextPage||b?.length>0;return d(a,{container:!0,direction:"row",className:o.container,children:[d(a,{container:!0,className:o.header,children:[r(pe,{searchPlaceholder:"Search Available Tracks",isLoading:s||L,searchTerm:l,setSearchTerm:R,filterAlpha:h,handleAlphabeticalFilterChange:W,filterOwner:k,handleOwnerFilterChange:$,owners:E}),d(a,{item:!0,xs:4,className:o.headerButtons,children:[r(le,{resourceType:"track",disableImport:p,disableExport:s||!n?.length,onImport:J,onExport:M}),!P&&r(v,{disabled:p,variant:"contained",color:"primary",onClick:y,className:o.createButton,children:"Create Track"})]})]}),r(a,{container:!0,spacing:4,role:"list","aria-label":"tracks",children:c}),V&&r(a,{item:!0,xs:12,children:r(me,{response:m,listingsPerPage:t,cursor:u,setCursor:f,prevCursors:b,setPrevCursors:x,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})})]})};export{fe as TrackListPage};
2
2
  //# sourceMappingURL=TrackListPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as m}from"react/jsx-runtime";import{useSearchParams as p}from"react-router-dom";import{RESULTS_PER_PAGE as i}from"../../utils/filters.esm.js";import{TrackListPage as a}from"./TrackListPage/TrackListPage.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-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"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../SummaryCard/SummaryCard.esm.js";import"./TrackListPage/TrackMetadata.esm.js";const e=()=>{const[t]=p(),r=t.get("tracksPerPage"),o=r?parseInt(r,10):i;return m(a,{tracksPerPage:o})};export{e as TracksPage};
1
+ import{jsx as m}from"react/jsx-runtime";import{useSearchParams as i}from"react-router-dom";import{useLCPReporting as p}from"../../hooks/useLCPReporting.esm.js";import{RESULTS_PER_PAGE as e}from"../../utils/filters.esm.js";import{TrackListPage as a}from"./TrackListPage/TrackListPage.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-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"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../SummaryCard/SummaryCard.esm.js";import"./TrackListPage/TrackMetadata.esm.js";const s=()=>{const[o]=i(),r=o.get("tracksPerPage"),t=r?parseInt(r,10):e;return p({routeName:"soundcheck-tracks",additionalAttributes:{tracksPerPage:t.toString()}}),m(a,{tracksPerPage:t})};export{s as TracksPage};
2
2
  //# sourceMappingURL=TracksPage.esm.js.map