@spotify/backstage-plugin-soundcheck 0.19.2 → 0.19.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/config.d.ts +54 -1
  3. package/dist/alpha/integrations.esm.js +1 -1
  4. package/dist/alpha/pages.esm.js +1 -1
  5. package/dist/alpha.d.ts +2 -2
  6. package/dist/api.esm.js +1 -1
  7. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  8. package/dist/components/Badges/NoLevelBadge.esm.js +2 -2
  9. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  10. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  11. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  12. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  13. package/dist/components/CampaignPage/CampaignPage.esm.js +2 -0
  14. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +2 -0
  15. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +2 -0
  16. package/dist/components/CampaignPage/CampaignStatusHistoryChart.esm.js +2 -0
  17. package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +2 -0
  18. package/dist/components/CampaignPage/CampaignStatusTile.esm.js +2 -0
  19. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +2 -0
  20. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +2 -0
  21. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +1 -1
  22. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +2 -0
  23. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  24. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  25. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +2 -0
  26. package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +2 -0
  27. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +2 -0
  28. package/dist/components/Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js +2 -0
  29. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +2 -0
  30. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  31. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  32. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  33. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  34. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  35. package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
  36. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  37. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  38. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  39. package/dist/components/CertificationsPage/Playlist/PlaylistComponent.esm.js +1 -1
  40. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  41. package/dist/components/CertificationsPage/Playlist/PlaylistSummary.esm.js +1 -1
  42. package/dist/components/Charts/chartUtils.esm.js +1 -1
  43. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  44. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  45. package/dist/components/CheckDetails/JustificationDetails.esm.js +1 -1
  46. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  47. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  48. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
  49. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  50. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  51. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  52. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  53. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  54. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  55. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  56. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  57. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  58. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  59. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  60. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +2 -0
  61. package/dist/components/CheckPage/CheckPage.esm.js +2 -0
  62. package/dist/components/CheckPage/CheckPageBUI.esm.js +2 -0
  63. package/dist/components/CheckPage/CheckPageDeprecated.esm.js +2 -0
  64. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  65. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +2 -0
  66. package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
  67. package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +2 -0
  68. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +2 -0
  69. package/dist/components/CheckPage/utils.esm.js +1 -1
  70. package/dist/components/CheckSelection/CheckPreview.esm.js +1 -1
  71. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  72. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +1 -1
  73. package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +2 -0
  74. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  75. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +2 -0
  76. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +2 -0
  77. package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +2 -0
  78. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +2 -0
  79. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +1 -1
  80. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +2 -0
  81. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  82. package/dist/components/ChecksTable/ChecksTable.esm.js +2 -0
  83. package/dist/components/ChipSelector/ChipSelector.esm.js +2 -0
  84. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
  85. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  86. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +2 -0
  87. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +2 -0
  88. package/dist/components/CollectorPage/CollectorFactTable.esm.js +1 -1
  89. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +2 -0
  90. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  91. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  92. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  93. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  94. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  95. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  96. package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
  97. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  98. package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
  99. package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
  100. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  101. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  102. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  103. package/dist/components/CollectorPage/Configurators/Jira/IssuesFactDetailsComponent.esm.js +2 -0
  104. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  105. package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +1 -1
  106. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
  107. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  108. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  109. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  110. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  111. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  112. package/dist/components/CollectorPage/DependantCheckCard.esm.js +2 -0
  113. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +2 -0
  114. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  115. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  116. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +2 -0
  117. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +2 -0
  118. package/dist/components/CustomCell/CustomCell.esm.js +2 -0
  119. package/dist/components/DescriptionCell/DescriptionCell.esm.js +2 -0
  120. package/dist/components/DocLinkButton/DocLinkButton.esm.js +2 -0
  121. package/dist/components/EmptyState/EmptyStateBUI.esm.js +2 -0
  122. package/dist/components/EmptyState/EmptyStateNoCampaigns.esm.js +2 -0
  123. package/dist/components/EmptyState/EmptyStateNoChecks.esm.js +2 -0
  124. package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +2 -0
  125. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  126. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  127. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  128. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  129. package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +2 -0
  130. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  131. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  132. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  133. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  134. package/dist/components/Filter/KeyValueInputDialog.esm.js +1 -1
  135. package/dist/components/FilterMenu/FilterMenu.esm.js +2 -0
  136. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  137. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  138. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  139. package/dist/components/FilterSidebar/util.esm.js +1 -1
  140. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
  141. package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
  142. package/dist/components/FormControlledAutocomplete/useLabelValueOptions.esm.js +2 -0
  143. package/dist/components/FormMarkdownInput/FormMarkdownInput.esm.js +1 -1
  144. package/dist/components/FormattedPreview/FormattedPreview.esm.js +1 -1
  145. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +1 -1
  146. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
  147. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +2 -0
  148. package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +2 -0
  149. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +2 -0
  150. package/dist/components/GroupSelectorBUI/GroupTag.esm.js +2 -0
  151. package/dist/components/GroupSelectorBUI/useGroupHistory.esm.js +2 -0
  152. package/dist/components/GroupSelectorBUI/usePreviousSelectedGroups.esm.js +2 -0
  153. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +1 -1
  154. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +1 -1
  155. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
  156. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  157. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +2 -0
  158. package/dist/components/ImportExportPanel/{ImportExportPanel.esm.js → ImportExportPanelDeprecated.esm.js} +2 -2
  159. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  160. package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
  161. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  162. package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +2 -0
  163. package/dist/components/LoadingTableSkeleton/LoadingTableSkeleton.esm.js +2 -0
  164. package/dist/components/Menus/SimpleMenu.esm.js +2 -0
  165. package/dist/components/Menus/useCampaignActions.esm.js +2 -0
  166. package/dist/components/Menus/useCheckActions.esm.js +2 -0
  167. package/dist/components/Menus/useTrackActions.esm.js +2 -0
  168. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  169. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  170. package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
  171. package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +1 -1
  172. package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
  173. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  174. package/dist/components/PageCustomActions/PageCustomActions.esm.js +2 -0
  175. package/dist/components/PassRateTable/PassRateTable.esm.js +1 -1
  176. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
  177. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  178. package/dist/components/Router.esm.js +1 -1
  179. package/dist/components/RoutingPage/RoutingMainMenu.esm.js +2 -0
  180. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  181. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +2 -0
  182. package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +2 -0
  183. package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +2 -0
  184. package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +2 -0
  185. package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +2 -0
  186. package/dist/components/RoutingPage/index.esm.js +1 -1
  187. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  188. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +1 -1
  189. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +2 -0
  190. package/dist/components/SoundcheckMarkdownContent/ComponentRenders.esm.js +1 -1
  191. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +2 -0
  192. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js +2 -0
  193. package/dist/components/StatusBar/StatusBar.esm.js +2 -0
  194. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  195. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
  196. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +2 -0
  197. package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +1 -1
  198. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  199. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
  200. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
  201. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  202. package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
  203. package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
  204. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  205. package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
  206. package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
  207. package/dist/components/TechHealthTabs/NameColumn.esm.js +1 -1
  208. package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
  209. package/dist/components/TechInsights/FilterControls.esm.js +1 -1
  210. package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
  211. package/dist/components/TechInsights/SummaryTilesBUI.esm.js +2 -0
  212. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  213. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +2 -0
  214. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +2 -0
  215. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +2 -0
  216. package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
  217. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +2 -0
  218. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  219. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +1 -1
  220. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +2 -0
  221. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +2 -0
  222. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +2 -0
  223. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  224. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  225. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  226. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
  227. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  228. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  229. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  230. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  231. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +2 -0
  232. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  233. package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +2 -0
  234. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  235. package/dist/components/TrackPage/TrackPageBUI.esm.js +2 -0
  236. package/dist/components/TrackPage/TrackPageDeprecated.esm.js +2 -0
  237. package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +2 -0
  238. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +2 -0
  239. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +2 -0
  240. package/dist/components/TrackSelection/TrackSelection.esm.js +1 -1
  241. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +2 -0
  242. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
  243. package/dist/components/TracksPage/TracksListPageBUI.esm.js +2 -0
  244. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  245. package/dist/graphql/generated/index.esm.js +126 -117
  246. package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
  247. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  248. package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +1 -1
  249. package/dist/hooks/catalog/useProfileImages.esm.js +2 -0
  250. package/dist/hooks/checks/useCheckDetails.esm.js +1 -1
  251. package/dist/hooks/entities/useTrackEntities.esm.js +1 -1
  252. package/dist/hooks/filters/useFilters.esm.js +2 -0
  253. package/dist/hooks/graphqlKeys.esm.js +1 -1
  254. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  255. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  256. package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
  257. package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +1 -1
  258. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
  259. package/dist/hooks/tracks/useRecertifyTrack.esm.js +2 -0
  260. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
  261. package/dist/hooks/useConfirmationModal.esm.js +1 -1
  262. package/dist/hooks/useLoadTimeReporting.esm.js +2 -0
  263. package/dist/hooks/usePagination.esm.js +2 -0
  264. package/dist/hooks/useSearchName.esm.js +2 -0
  265. package/dist/hooks/useSortTableLocalStorage.esm.js +2 -0
  266. package/dist/routes.esm.js +1 -1
  267. package/dist/utils/charts.esm.js +1 -1
  268. package/dist/utils/formStyles.esm.js +1 -1
  269. package/dist/utils/formatters.esm.js +1 -1
  270. package/dist/utils/helpers.esm.js +1 -1
  271. package/dist/utils/lcpReporting.esm.js +1 -1
  272. package/dist/utils/time.esm.js +1 -1
  273. package/package.json +25 -33
  274. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +0 -2
  275. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +0 -2
  276. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +0 -2
  277. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +0 -2
  278. package/dist/components/CheckPage/CheckInsightsPage.esm.js +0 -2
  279. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +0 -2
  280. package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +0 -2
  281. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +0 -2
  282. package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +0 -2
  283. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js +0 -2
  284. package/dist/components/TechInsights/TechInsightsCardsView.esm.js +0 -2
  285. package/dist/components/TechInsights/TrackStatusCard.esm.js +0 -2
  286. package/dist/components/TechInsights/ViewModeControls.esm.js +0 -2
  287. package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +0 -2
  288. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +0 -2
  289. /package/dist/components/{CampaignInsightsPage → CampaignPage}/DaysRemainingTile.esm.js +0 -0
  290. /package/dist/{components/GroupHierarchySelector → utils}/getAllOwnedEntityCount.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{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};
1
+ import{jsxs as a,jsx as i}from"react/jsx-runtime";import{parseEntityRef as h}from"@backstage/catalog-model";import{Typography as p}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{useLabelValueOptions as R}from"../../../../FormControlledAutocomplete/useLabelValueOptions.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(n=>({container:{display:"flex",flexDirection:"column",gap:n.spacing(1)}})),T=({disabled:n,ownerEntityRef:r})=>{const l=O(),{options:s,isLoading:d}=S(),{user:m,userEntityRef:t}=x(),{control:c,formState:{errors:f}}=w();let e=g(s.map(o=>({value:o.ref,label:o.name,description:o.description})),"value");t&&(e=[{value:t,label:m?.metadata.name??t,description:m?.metadata.description},...e]),r&&t!==r&&!e.some(o=>o.value===r)&&(e=[{value:r,label:h(r).name,description:void 0},...e]);const u=R(e),{name:v,description:y}=L.owner;return a("div",{className:l.container,children:[a("div",{children:[i(p,{variant:"subtitle2",children:v}),i(p,{variant:"caption",children:y})]}),i("div",{children:i(E,{name:"detailsStep.ownerEntityRef",control:c,width:300,freeSolo:!1,disabled:n||d,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 e}from"react/jsx-runtime";import{Content as d}from"@backstage/core-components";import{FormProvider as c}from"react-hook-form";import{useTrackFormContext as f}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as S}from"../../utils/formStyles.esm.js";import{FormFilterSection as u}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as F}from"../FormStepper/FormStepper.esm.js";import{LevelsStepNew as h}from"./Steps/LevelsStep/LevelsStepNew.esm.js";import{TrackDetailsStep as b}from"./Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import{TrackStepNameMapping as k}from"./utils/types.esm.js";import"./utils/validation.esm.js";import{TRACK_FIELDS as y}from"./utils/trackFormUtils.esm.js";import{useTrackForm as g}from"./utils/useTrackForm.esm.js";const x=({onSave:m,handleClose:l})=>{const{selectedItem:a,isLoading:n,isReadOnly:r}=f(),p=S(),{formMethods:t,onSubmit:i}=g(m),o=[{label:"Enter track details",content:()=>e(b,{})},{label:"Add levels",content:()=>e(h,{})},{label:"Choose the affected entities (Optional)",content:()=>e(u,{name:"filtersStep.filter",keyValueFilterName:"filtersStep.keyValueFilter",disabled:r,description:y.filter.description,excludeFilterName:"filtersStep.excludeFilter",excludeKeyValueFilterName:"filtersStep.excludeKeyValueFilter"})}],s=a?[...Array(o.length).keys()]:[0];return e(d,{className:p.formWrapper,children:e(c,{...t,children:e("form",{onSubmit:t.handleSubmit(i),children:e(F,{onClose:l,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:i,initialVisited:s,stepNameMap:k,steps:o,isLoading:n,isReadOnly:r,saveButtonText:"Save Track"})})})})};export{x as TrackForm};
1
+ import{jsx as e}from"react/jsx-runtime";import{Content as d}from"@backstage/core-components";import{FormProvider as f}from"react-hook-form";import{useTrackFormContext as u}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{useFeatureFlag as S}from"../../hooks/useFeatureFlag.esm.js";import{formStyles as F}from"../../utils/formStyles.esm.js";import{FormFilterSection as b}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as h}from"../FormStepper/FormStepper.esm.js";import{LevelsStepNew as k}from"./Steps/LevelsStep/LevelsStepNew.esm.js";import{TrackDetailsStep as g}from"./Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import{TrackStepNameMapping as y}from"./utils/types.esm.js";import"./utils/validation.esm.js";import{TRACK_FIELDS as x}from"./utils/trackFormUtils.esm.js";import{useTrackForm as T}from"./utils/useTrackForm.esm.js";const N=({onSave:l,handleClose:a})=>{const{selectedItem:p,isLoading:n,isReadOnly:r}=u(),o=F(),s=S("backstage-ui"),{formMethods:t,onSubmit:i}=T(l),m=[{label:"Enter track details",content:()=>e(g,{})},{label:"Add levels",content:()=>e(k,{})},{label:"Choose the affected entities (Optional)",content:()=>e(b,{name:"filtersStep.filter",keyValueFilterName:"filtersStep.keyValueFilter",disabled:r,description:x.filter.description,excludeFilterName:"filtersStep.excludeFilter",excludeKeyValueFilterName:"filtersStep.excludeKeyValueFilter"})}],c=p?[...Array(m.length).keys()]:[0];return e(d,{className:s?o.formWrapperBUI:o.formWrapper,children:e(f,{...t,children:e("form",{onSubmit:t.handleSubmit(i),children:e(h,{onClose:a,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:i,initialVisited:c,stepNameMap:y,steps:m,isLoading:n,isReadOnly:r,saveButtonText:"Save Track"})})})})};export{N as TrackForm};
2
2
  //# sourceMappingURL=TrackForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as k}from"@hookform/resolvers/zod";import{useMemo as T,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as g}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as w}from"../../../graphql/generated/index.esm.js";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{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as d,mapCatalogFilterToFormKeyValueFilters as c,mapFiltersToCatalogFilter as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f,emptyKeyValueFilters as y}from"../../Filter/types.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const F={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"status",draft:!1},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{filter:f(),keyValueFilter:y(),excludeFilter:f(),excludeKeyValueFilter:y()}},S=({name:e,description:r,ownerEntityRef:o,filter:t,levels:i,documentationURL:a,badge:p,exclude:l,draft:n})=>({detailsStep:{name:e,ownerEntityRef:o,description:r??"",documentationURL:a??void 0,badgeType:p?.variant===w.Status?"status":"medal",draft:n??!1},levelsStep:{levels:i?.map(m=>({name:m.name??`Level ${m.ordinal}`??"Level 1",description:m.description??"",checks:m.checks.map(s=>({id:s.id,name:s.name??s.id,description:s.description??""}))}))||[]},filtersStep:{filter:d(t),keyValueFilter:c(t),excludeFilter:d(l),excludeKeyValueFilter:c(l)}}),v=(e,r,o)=>({id:o?.id??g(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:o?.type??"standard",levels:e.levelsStep.levels?.map((t,i)=>({ordinal:i+1,name:t.name??"",description:t.description??"",checks:t.checks.map(a=>r[a.id])})),filter:u(e.filtersStep.filter,e.filtersStep.keyValueFilter),exclude:u(e.filtersStep.excludeFilter,e.filtersStep.excludeKeyValueFilter),draft:e.detailsStep.draft??!1}),M=e=>{const{selectedItem:r}=h(),o=T(()=>r?S(r):F,[r]),t=V({defaultValues:o,mode:"onChange",resolver:k(C)}),{userEntityRef:i}=E();R(()=>{!r&&i&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",i)},[r,i,t]);const{checksMap:a}=L(),{showModal:p}=x();return{formMethods:t,onSubmit:async l=>{if(!await p({title:"Save Track",message:`Are you sure you want to save track: ${l.detailsStep.name}?`,error:!1}))return;const n=v(l,a??{},r);e(n)}}};export{F as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,S as mapTrackToFormValues,M as useTrackForm};
1
+ import{zodResolver as k}from"@hookform/resolvers/zod";import{useMemo as T,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as g}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as w}from"../../../graphql/generated/index.esm.js";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{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as d,mapCatalogFilterToFormKeyValueFilters as c,mapFiltersToCatalogFilter as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f,emptyKeyValueFilters as y}from"../../Filter/types.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const F={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"status",draft:!1},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{filter:f(),keyValueFilter:y(),excludeFilter:f(),excludeKeyValueFilter:y()}},S=({name:e,description:r,ownerEntityRef:o,filter:t,levels:i,documentationURL:a,badge:p,exclude:l,draft:n})=>({detailsStep:{name:e,ownerEntityRef:o,description:r??"",documentationURL:a??void 0,badgeType:p?.variant===w.Status?"status":"medal",draft:n??!1},levelsStep:{levels:i?.map(m=>({name:m.name??`Level ${m.ordinal}`??"Level 1",description:m.description??"",checks:m.checks.map(s=>({id:s.id,name:s.name??s.id,description:s.description??""}))}))||[]},filtersStep:{filter:d(t),keyValueFilter:c(t),excludeFilter:d(l),excludeKeyValueFilter:c(l)}}),v=(e,r,o)=>({id:o?.id??g(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:o?.type??"standard",levels:e.levelsStep.levels?.map((t,i)=>({ordinal:i+1,name:t.name??"",description:t.description??"",checks:t.checks.map(a=>r[a.id])})),filter:u(e.filtersStep.filter,e.filtersStep.keyValueFilter),exclude:u(e.filtersStep.excludeFilter,e.filtersStep.excludeKeyValueFilter),draft:e.detailsStep.draft??!1}),M=e=>{const{selectedItem:r}=h(),o=T(()=>r?S(r):F,[r]),t=V({defaultValues:o,mode:"onChange",resolver:k(C)}),{userEntityRef:i}=E();R(()=>{!r&&i&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",i)},[r,i,t]);const{checksMap:a}=L(),{showModal:p}=x();return{formMethods:t,onSubmit:async l=>{if(!await p({title:"Save Track",message:`Are you sure you want to save track: ${l.detailsStep.name}?`,error:!1}))return;const n=v(l,a??{},r);e(n)}}};export{F as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,S as mapTrackToFormValues,M as useTrackForm};
2
2
  //# sourceMappingURL=useTrackForm.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 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};
1
+ import{jsx as C}from"react/jsx-runtime";import{stringifyEntityRef as L}from"@backstage/catalog-model";import{Table as P}from"@backstage/core-components";import{makeStyles as x}from"@material-ui/core";import O from"lodash";import{useState as D,useEffect as F,useCallback as k}from"react";import{TrackEntityField as a,Direction as w}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as N}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useTrackEntities as j}from"../../../hooks/entities/useTrackEntities.esm.js";import{columnFactories as r}from"./columns.esm.js";import{toTrackEntityRow as q}from"./utils.esm.js";const A=10,G=(i,n)=>[r.createBadgeColumn(),r.createNameColumn({trackId:n}),r.createStatusColumn(i),r.createSystemColumn(),r.createOwnerColumn(),r.createSpecTypeColumn(),r.createSpecLifecycleColumn()],U=[a.CertificationLevel,a.Name,a.CheckPassRate,a.System,a.Owner,a.Type,a.Lifecycle],I=i=>{const{lifecycles:n,owners:s,types:c,systems:l}=i,g=n?.length?{"spec.lifecycle":n}:void 0,d=s?.length?{"relations.ownedBy":s}:void 0,m=c?.length?{"spec.type":c}:void 0,u=l?.length?{"relations.partOf":l}:void 0;return{...g,...d,...m,...u}},W=x({tableContainer:{display:"flex",flexDirection:"column",height:"100%"}}),H=({track:i,initialPageSize:n,lifecycles:s,owners:c,types:l,systems:g,certificationStatus:d,getColor:m})=>{const u=W(),S=G(m,i.id),[e,y]=D({orderBy:void 0,filter:I({lifecycles:s,owners:c,types:l,systems:g}),pageInfo:{page:0,pageSize:n??A,direction:"forward",cursor:null}});F(()=>{y(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:I({lifecycles:s,owners:c,types:l,systems:g}),certificationStatus:d}))},[s,c,l,g,d]);const{data:f,isLoading:h}=j({trackId:i.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,certificationStatus:d}),E=k((t,p)=>{let o;t===-1?o=void 0:o={field:U[t],direction:p==="asc"?w.Asc:w.Desc},y({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),b=k((t,p)=>{const o=t>e.pageInfo.page?"forward":"backward",z=o==="forward"?f?.trackEntities.pageInfo.endCursor??null:f?.trackEntities.pageInfo.startCursor??null;y({...e,pageInfo:{page:t,pageSize:p,direction:o,cursor:z}})},[f,e]),T=f?.trackEntities.edges.map(t=>t.node.entityRef)??[],{data:v,isLoading:B}=N({entityRefs:T}),R=O.compact(f?.trackEntities.edges.map(t=>{const p=v?.items.find(o=>!!o&&L(o)===t.node.entityRef);return p?q({trackDetails:t.node,track:i,entity:p}):void 0}))??[];return C("div",{className:u.tableContainer,children:C(P,{columns:S,data:R,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"both",emptyRowsWhenPaging:!1,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!1,padding:"dense",draggable:!1},onOrderChange:E,onPageChange:b,page:e.pageInfo.page,totalCount:f?.trackEntities.totalCount??0,isLoading:h||B,components:{Toolbar:()=>null}})})};export{H as TrackEntitiesTable};
2
2
  //# sourceMappingURL=TrackEntitiesTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as y,Fragment as le}from"react/jsx-runtime";import{stringifyEntityRef as F,parseEntityRef as ce,RELATION_OWNED_BY as me,RELATION_PART_OF as de}from"@backstage/catalog-model";import{useRouteRef as pe}from"@backstage/core-plugin-api";import{entityRouteRef as fe,getEntityRelations as M,humanizeEntityRef as b}from"@backstage/plugin-catalog-react";import{Table as ye,TableHeader as ue,Column as c,TableBody as ge,TablePagination as he,Row as we,Flex as K,Cell as P,Box as $,Text as Re,CellProfile as ke}from"@backstage/ui";import{makeStyles as Pe}from"@material-ui/core";import{compact as Se,uniq as Be}from"lodash";import{useState as v,useMemo as n,useEffect as Te,useCallback as Ee}from"react";import{useNavigate as Ce}from"react-router-dom";import{TrackEntityField as l,Direction as q}from"../../../graphql/generated/index.esm.js";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{usePagination as be}from"../../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useEntitiesByRefs as ve}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Le}from"../../../hooks/catalog/useProfileImages.esm.js";import{useTrackEntities as xe}from"../../../hooks/entities/useTrackEntities.esm.js";import{getPercentage as w}from"../../../utils/formatters.esm.js";import{CertificationBadge as Ne}from"../../Badges/CertificationBadge.esm.js";import{CustomCell as z}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ie}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../../routes.esm.js";import{LoadingTableSkeleton as Oe}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as De}from"../../StatusBar/StatusBar.esm.js";import{toTrackEntityRow as Ae}from"./utils.esm.js";const H=10,Q=a=>{const{lifecycles:m,owners:d,types:p,systems:f}=a,u=m?.length?{"spec.lifecycle":m}:void 0,g=d?.length?{"relations.ownedBy":d}:void 0,S=p?.length?{"spec.type":p}:void 0,B=f?.length?{"relations.partOf":f}:void 0;return{...u,...g,...S,...B}},_e=Pe(a=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},passed:{color:`${a.palette.success.main} !important`},failed:{color:`${a.palette.error.main} !important`},statusBar:{width:"30%"}})),je={name:l.Name,owner:l.Owner,certificationLevel:l.CertificationLevel,checkPassRate:l.CheckPassRate,system:l.System,type:l.Type,lifecycle:l.Lifecycle},Fe=({track:a,lifecycles:m,owners:d,types:p,systems:f,certificationStatus:u,searchValue:g,isCampaign:S})=>{const B=_e(),L=Ce(),x=pe(fe),[T,U]=v("ascending"),[R,V]=v("name"),[N,I]=v({orderBy:void 0,filter:Q({lifecycles:m,owners:d,types:p,systems:f})}),{data:k,isLoading:W}=xe({trackId:a?.id??"",orderBy:N.orderBy,filter:N.filter,certificationStatus:u}),h=n(()=>k?.trackEntities.edges??[],[k]),Y=n(()=>k?.trackEntities.totalCount??0,[k])>H,G=h.map(e=>e.node.entityRef)??[],{data:E,isLoading:J}=ve({entityRefs:G}),C=n(()=>!a||!h?.length||!E?.items?.length?[]:Se(h.map(e=>{const i=E.items.find(o=>!!o&&F(o)===e.node.entityRef);return i?Ae({trackDetails:e.node,track:a,entity:i}):void 0})),[h,E?.items,a]),O=n(()=>{if(!g?.length)return C;const e=g.toLowerCase().trim();return C.filter(({entity:i})=>i.metadata.name.toLowerCase().includes(e))},[C,g]),{paginatedItems:D,paginationProps:X}=be({pageParam:"perPage",defaultPageSize:H,items:O}),Z=Be(D.flatMap(e=>e.entity.relations?.filter(({type:i,targetRef:o})=>i==="ownedBy"&&o).map(i=>i.targetRef)||[])),{profileImageMap:ee}=Le(Z);Te(()=>{let e;R?e={field:je[R]??l.Name,direction:T==="ascending"?q.Asc:q.Desc}:e=void 0,I(i=>({...i,orderBy:e,filter:Q({lifecycles:m,owners:d,types:p,systems:f}),certificationStatus:u}))},[I,R,T,u,m,d,f,p]);const te=Ee(e=>{const i=ce(F(e)),o=x(i);L(`${o}/soundcheck`)},[L,x]),ie=({row:e})=>{const i=M(e.entity,me).map(s=>b(s,{defaultKind:s.kind})).join(", "),o=e.entity.relations?.find(({type:s})=>s==="ownedBy")?.targetRef,re=M(e.entity,de,{kind:"system"}).map(s=>b(s,{defaultKind:"system"})).join(", ");let A;o&&(A=ee?.[o]);const _=b(e.entity,{defaultKind:e.entity.kind}),r=n(()=>(e.status?.passed??0)+(e.status?.failed??0)+(e.status?.warning??0)+(e.status?.error??0)+(e.status?.notReported??0)+(e.status?.exempt??0),[e.status]),j=n(()=>{let s;return e.status?.allPassPercentage!==null&&e.status?.allPassPercentage!==void 0?s=e.status.allPassPercentage:e.status&&(s=w(e.status.passed+e.status.exempt,r)),s},[e.status,r]),se=n(()=>w(e.status?.failed,r),[e.status,r]),ne=n(()=>w(e.status?.warning,r),[e.status,r]),ae=n(()=>w(e.status?.notReported,r),[e.status,r]),oe=n(()=>w(e.status?.error,r),[e.status,r]);return y(we,{onAction:()=>te(e.entity),children:[t(z,{children:t(K,{children:t(Ne,{badge:e.badge,trackType:S?"campaign":void 0})})}),t(P,{title:_}),t(z,{children:y(K,{align:"center",gap:"2",children:[t($,{children:y(Re,{children:[j,"%"]})}),t($,{className:B.statusBar,children:t(De,{passedPercent:j,failedPercent:se,warningPercent:ne,notReportedPercent:ae,errorPercent:oe})})]})}),t(P,{title:re}),t(P,{title:e.entity.spec?.type}),t(P,{title:e.entity.spec?.lifecycle}),t(ke,{name:i,src:A??_})]},e.id)};return W||J?t(Oe,{}):!h.length||!O.length?t(Ie,{title:"No track entities found",body:"There are no track entities found."}):y(le,{children:[y(ye,{onSortChange:({direction:e,column:i})=>{V(String(i)),U(e)},sortDescriptor:{direction:T,column:R},children:[y(ue,{children:[t(c,{id:"state",style:{width:"5%"}}),t(c,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"30%"},children:"Name"}),t(c,{id:"checks",style:{width:"15%"},children:"Checks"}),t(c,{id:"system",allowsSorting:!0,style:{width:"15%"},children:"System"}),t(c,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(c,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"}),t(c,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Owner"})]}),t(ge,{children:D.map(e=>t(ie,{row:e},e.id))})]}),Y&&t(he,{...X})]})};export{Fe as TrackEntitiesTableBUI};
2
+ //# sourceMappingURL=TrackEntitiesTableBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as r,jsxs as l}from"react/jsx-runtime";import{useApi as v,configApiRef as g}from"@backstage/core-plugin-api";import{useTheme as x,Typography as b}from"@material-ui/core";import L from"lodash";import{DateTime as A}from"luxon";import{ResponsiveContainer as C,AreaChart as $,CartesianGrid as O,XAxis as N,YAxis as h,Tooltip as D,Area as u}from"recharts";import{compactNumberFormatter as m}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 E}from"../TimePeriodBar/TimePeriodBar.esm.js";const y=o=>{const a=o?.certificationStatusHistory.history??[],n=o?.certificationStatusHistory.numberOfEntities??0,e=A.utc();return L.map(a,(d,p)=>{let i={name:T(e,a.length-p-1)},t=0,f=0;d.statusByLevel.sort((s,c)=>c.ordinal-s.ordinal).forEach(s=>{const c=s.cumulativelyPassed-f;i={...i,[`Level ${s.ordinal}`]:c},t+=c,f=s.cumulativelyPassed}),d.statusByLevel.reverse();const k=Math.max(0,n-t);return i={...i,"No Level":k},i})},H=(o,a)=>{if(typeof o=="number"){const n=a.certificationStatusHistory.numberOfEntities??0,e=n>0?Math.round(o/n*100):0;return`${m(o)} of ${m(n)} (${e}%)`}return o},S=({track:o,data:a,isError:n})=>{const e=x(),d=v(g).getOptionalNumber("soundcheck.certifications.history.retentionTimeInDays");if(n)return r(b,{color:"error",children:"Failed to load track data."});if(!o||!a)return r(W,{type:"area",numLines:3});const p=y(a),i=I(e);return l("div",{style:{height:290,width:"100%",position:"relative",borderRadius:"4px"},children:[r(E,{maxNumberOfDays:d}),r(C,{height:250,debounce:1,children:l($,{data:p,margin:{top:0,right:0,bottom:0,left:0},children:[l("defs",{children:[o?.levels.map(t=>l("linearGradient",{id:`gradient-${t.ordinal}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[r("stop",{offset:"5%",stopColor:i[t.ordinal%i.length],stopOpacity:.4}),r("stop",{offset:"95%",stopColor:i[t.ordinal%i.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(O,{stroke:e.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),r(N,{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=>m(t)}),r(D,{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=>H(t,a)}),o?.levels?.map(t=>r(u,{type:"monotone",dataKey:`Level ${t.ordinal}`,name:t.name??`Level ${t.ordinal}`,stackId:"1",yAxisId:"right",stroke:i[t.ordinal%i.length],strokeWidth:2,fill:`url(#gradient-${t.ordinal})`,isAnimationActive:!1,activeDot:{fill:i[t.ordinal%i.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{S as TrackHistoryChart,y as formatLineChartData};
2
2
  //# sourceMappingURL=TrackHistoryChart.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as i,jsxs as e}from"react/jsx-runtime";import{Box as m}from"@backstage/ui";import{makeStyles as f,useTheme as p}from"@material-ui/core";import{ResponsiveContainer as g,AreaChart as h,CartesianGrid as b,XAxis as v,YAxis as n,Tooltip as y,Area as s}from"recharts";import{compactNumberFormatter as u}from"../../utils/formatters.esm.js";import{getTrackHistoryLineChartData as k,getChartColors as x,formatTrackHistoryChartTooltip as L}from"../Charts/chartUtils.esm.js";import{LoadingTableSkeleton as A}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const C=f(()=>({container:{height:180,overflow:"hidden"},"@global":{".recharts-default-tooltip li":{margin:"0 !important",padding:"0 !important"}}})),I=({track:a,history:o})=>{const l=C(),d=k(o),c=p(),t=x(c);return!a||!o?i(A,{}):i(m,{className:l.container,children:i(g,{debounce:1,children:e(h,{data:d,margin:{top:0,right:0,bottom:0,left:0},children:[e("defs",{children:[a?.levels.map(r=>e("linearGradient",{id:`gradient-${r.ordinal}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[i("stop",{offset:"5%",stopColor:t[r.ordinal%t.length],stopOpacity:.4}),i("stop",{offset:"95%",stopColor:t[r.ordinal%t.length],stopOpacity:0})]},`gradient-${r.ordinal}`)),e("linearGradient",{id:"gradient-no-level",x1:"0",y1:"0",x2:"0",y2:"1",children:[i("stop",{offset:"5%",stopColor:"var(--bui-fg-disabled)",stopOpacity:.4}),i("stop",{offset:"95%",stopColor:"var(--bui-fg-disabled)",stopOpacity:0})]})]}),i(b,{stroke:"var(--bui-border)",strokeWidth:1,horizontal:!0,vertical:!1}),i(v,{dataKey:"name",tickLine:!1,axisLine:!1}),i(n,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:r=>`${r}%`,ticks:[0,25,50,75,100]}),i(n,{yAxisId:"right",orientation:"right",domain:[0,Math.max(o?.certificationStatusHistory.numberOfEntities,1)],axisLine:!1,tickLine:!1,tickFormatter:r=>u(r)}),i(y,{contentStyle:{backgroundColor:"var(--bui-bg-surface-1)",color:"var(--bui-fg-secondary)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-3)"},cursor:{stroke:"var(--bui-fg-secondary)",strokeWidth:1},formatter:r=>L(r,o)}),a?.levels?.map(r=>i(s,{type:"monotone",dataKey:`Level ${r.ordinal}`,name:r.name??`Level ${r.ordinal}`,stackId:"1",yAxisId:"right",stroke:t[r.ordinal%t.length]||"var(--bui-fg-disabled)",strokeWidth:2,fill:`url(#gradient-${r.ordinal})`,isAnimationActive:!1,activeDot:{fill:t[r.ordinal%t.length]||"var(--bui-fg-disabled)",stroke:"var(--bui-fg-secondary)",strokeWidth:1,r:5}},`Level ${r.ordinal}`)),i(s,{type:"monotone",dataKey:"No Level",name:"No Level",stackId:"1",yAxisId:"right",stroke:"var(--bui-fg-secondary)",strokeWidth:2,fill:"url(#gradient-no-level)",isAnimationActive:!1,activeDot:{fill:"var(--bui-fg-disabled)",stroke:"var(--bui-fg-secondary)",strokeWidth:1,r:5}},"No Level")]})})})};export{I as TrackHistoryChartBUI};
2
+ //# sourceMappingURL=TrackHistoryChartBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as r}from"react/jsx-runtime";import{useFeatureFlag as a}from"../../hooks/useFeatureFlag.esm.js";import{TrackPageBUI as e}from"./TrackPageBUI.esm.js";import{TrackPageDeprecated as o}from"./TrackPageDeprecated.esm.js";const t=()=>a("backstage-ui")?r(e,{}):r(o,{});export{t as TrackPage};
2
2
  //# sourceMappingURL=TrackPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as s,Fragment as ue}from"react/jsx-runtime";import{parseEntityRef as fe}from"@backstage/catalog-model";import{useRouteRef as R}from"@backstage/core-plugin-api";import{usePermission as he}from"@backstage/plugin-permission-react";import{Box as o,HeaderPage as ke,Flex as j,Text as K}from"@backstage/ui";import{makeStyles as ge}from"@material-ui/core";import{toEntityFilterQuery as Se,soundcheckTrackReadPermission as be}from"@spotify/backstage-plugin-soundcheck-common";import{useState as v,useMemo as C,useEffect as U}from"react";import{useSearchParams as ve,useParams as Ce}from"react-router-dom";import ye from"react-use/lib/useDebounce";import Ee from"react-use/lib/useLocalStorage";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Te}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Le}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as we}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as Ie}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Re}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Fe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ne}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as Pe,trackOverviewRouteRef as Be,trackExplorerRouteRef as Oe}from"../../routes.esm.js";import{getEntitiesBucket as _e,getChecksBucket as xe}from"../../utils/helpers.esm.js";import{DescriptionCard as He}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Ae}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as Ve}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as je}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Ke}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as D}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ue}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as De}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Me}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ye}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as $e}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{PageCustomActions as Ge}from"../PageCustomActions/PageCustomActions.esm.js";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"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as qe}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTableBUI as Qe}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as We}from"./TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const ze=ge(()=>({emptyContainer:{padding:"var(--bui-space-1)"},container:{padding:"0 var(--bui-space-1) var(--bui-space-6)"},tables:{margin:"0 var(--bui-space-2)"},cards:{margin:"0 var(--bui-space-2) var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"},tableContent:{margin:"var(--bui-space-3) 0 0"},levelSection:{margin:"0 0 var(--bui-space-6)"},levelHeading:{padding:"var(--bui-space-3)",background:"var(--bui-bg-surface-2)"}})),u={CHECKS_BY_LEVELS:"Checks By Levels",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},Je=()=>{const c=ze(),[a,y]=ve(),[F,M]=v(new Set([u.CHECKS_BY_LEVELS])),E=F.values().next().value??u.CHECKS_BY_LEVELS,[n,Y]=v(a.get("search")||""),[N,$]=v(""),{trackId:i}=Ce(),{data:r,isLoading:f,isError:G}=Te(i),q=R(Pe),P=$e(r??void 0),B=r?.ownerEntityRef,Q=B?fe(B).name:void 0,W=Array.from(new Set(r?.levels.flatMap(e=>e.checks).map(e=>e.id)??[])),{owners:m,lifecycles:l,types:p,systems:d}=Ue(),T=C(()=>De({lifecycles:l,owners:m,types:p,systems:d}),[l,m,p,d]),L=C(()=>qe(a.get("numberOfDays")),[a]),[g,O]=v(!1),[h,w]=Ee("track-overview-search-params","");U(()=>{!g&&a?.toString()?(h!==a.toString()&&w(a.toString()),O(!0)):!g&&h?(y(new URLSearchParams(h)),O(!0)):g&&h!==a.toString()&&w(a.toString())},[a,y,w,h,g]),ye(()=>{$(n);const e=new URLSearchParams(a.toString());n?e.set("search",n):e.delete("search"),y(e,{replace:!0})},300,[n]);const _=C(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:i||"",filtersApplied:m.length+l.length+p.length+d.length,ownersFilter:m.join(",")||"",lifecyclesFilter:l.join(",")||"",typesFilter:p.join(",")||"",systemsFilter:d.join(",")||"",numberOfDays:L,tracksSearch:N||""}}),[i,m,l,p,d,L,N]),{reportContentLoaded:x}=Ne(_),{reporter:z}=Fe(_),{data:S,isLoading:H,isError:J}=Le({trackId:i,filter:T},!!i),{data:X,isLoading:A,isError:Z}=we({trackId:i,filter:T,numberOfDays:L},!!i),{data:b,isLoading:I}=Ie({trackId:i,checkIds:W,filter:T},!!r),ee=C(()=>Se(r?.filter),[r]),te=G||J||Z,{loading:re,allowed:ie}=he({permission:be,resourceRef:i}),{filters:ae,selected:oe,setSelected:se,onRemoveTag:ce,selectedTags:ne}=Re({entityFilterQuery:ee}),me=r?.levels.flatMap(e=>{const k=n?.trim().toLowerCase();return{...e,checks:k?e.checks.filter(({name:de})=>de.toLowerCase().includes(k)):e.checks}})??[],V=z?.getLCPValue();U(()=>{if(!f&&!I&&!H&&!A){const e=S?.certificationStatus?.numberOfEntities??0,k=b?.length??0;x({lcp:V,numberOfEntities:e,entitiesBucket:_e(e),numberOfChecks:k,checksBucket:xe(k)})}},[f,I,H,A,b,S,x,V]);const le=R(Be),pe=R(Oe);return f?t(Me,{}):!f&&!r?t(o,{className:c.emptyContainer,children:t(D,{title:"Track not found",body:`There is no track with the requested id: ${i}.`})}):!re&&!ie?t(o,{className:c.emptyContainer,children:t(D,{title:"Cannot view track",body:`No permission to view track with the requested id: ${i}.`})}):s(ue,{children:[t(o,{children:t(ke,{title:r?.name,customActions:t(Ye,{label:"Track Actions",disabled:!P.length,placement:"left top",menuActions:P}),breadcrumbs:[{label:"Tracks",href:q()}],tabs:[{id:"overview",label:"Track Overview",href:i?le({trackId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?pe({trackId:i}):""}]})}),s(o,{className:c.container,children:[s(o,{className:c.cards,children:[t(He,{description:r?.description??void 0,owner:Q}),t(Ve,{track:r??void 0,status:S}),t(Ae,{track:r??void 0,history:X,isError:te})]}),r&&s(o,{className:c.tables,children:[s(j,{justify:"between",children:[t(o,{minWidth:"18rem",children:t(Ke,{options:Object.values(u),selected:F,ariaLabel:"Sections",onSelectionChange:M})}),t(Ge,{searchValue:n,setSearchValue:e=>Y(e),filters:ae,selected:oe,setSelected:se,onRemoveTag:ce,selectedTags:ne})]}),s(o,{className:c.tableContent,children:[E===u.CHECKS_BY_LEVELS&&t(o,{mt:"3",children:me.map(e=>s(o,{className:c.levelSection,children:[s(j,{align:"center",gap:"4",className:c.levelHeading,children:[s(K,{color:"secondary",children:["Level ",e.ordinal]})," ",t(K,{children:e.name})]}),t(je,{trackId:r.id,checks:e.checks,checkStatuses:b,isLoading:f||I})]},e.ordinal))}),E===u.TOP_FAILING_CHECKS&&t(Qe,{track:r,checkStatuses:b,certificationStatus:S?.certificationStatus,searchValue:n}),E===u.ENTITIES&&t(We,{track:r,lifecycles:l,owners:m,types:p,systems:d,searchValue:n})]})]})]})]})};export{Je as TrackPageBUI};
2
+ //# sourceMappingURL=TrackPageBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as d,Fragment as ie}from"react/jsx-runtime";import{useRouteRef as re}from"@backstage/core-plugin-api";import{EntityRefLink as oe}from"@backstage/plugin-catalog-react";import{usePermission as R}from"@backstage/plugin-permission-react";import{makeStyles as ae,Button as se,Box as ne,Tabs as ce,Tab as b}from"@material-ui/core";import{soundcheckTrackReadPermission as le,soundcheckTrackUpdatePermission as me,toEntityFilterQuery as pe}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as s,useState as de,useCallback as ge,useEffect as fe}from"react";import{useSearchParams as ue,useParams as he,useNavigate as ke}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 ye}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Ce}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as be}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-use/lib/useLocalStorage";import{useCheckStatuses as ve}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useLCPReporting as Se}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Le}from"../../hooks/useLoadTimeReporting.esm.js";import{trackEditRouteRef as Te}from"../../routes.esm.js";import{getEntitiesBucket as Fe,getChecksBucket as we}from"../../utils/helpers.esm.js";import{FilterSidebar as Ee}from"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ne}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as xe}from"../FilterSidebar/util.esm.js";import{LevelsTable as Re}from"../LevelsTable/LevelsTable.esm.js";import{LoadingIndicator as Be}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as De}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Pe}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContentDeprecated as Oe}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";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 Ie}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTable as Ae}from"../TopFailingChecksTable/TopFailingChecksTable.esm.js";import{TrackEntitiesTable as je}from"./TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackProgressCard as He}from"./TrackProgressCard.esm.js";const Me=ae(r=>({root:{height:"100%",background:r.palette.background.default},pageContent:{display:"flex",minHeight:`calc(100vh - ${r.spacing(15)}px)`,borderTop:`1px solid ${r.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},trackProgressContainer:{padding:r.spacing(2,0,2,2),borderBottom:`1px solid ${r.palette.divider}`},levelCard:{margin:r.spacing(1,0,2)},editButton:{marginLeft:"auto"},contentArea:{flex:1,padding:r.spacing(0,2)},trackEntitiesContainer:{marginTop:r.spacing(1)},headerDescription:{fontSize:r.typography.body2.fontSize,margin:r.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},tabs:{padding:r.spacing(2,2,0,2)}})),$e=()=>{const[r]=ue(),{trackId:o}=he(),k=s(()=>Ie(r.get("numberOfDays")),[r]),{owners:n,lifecycles:c,types:l,systems:m,stagedLifecycles:B,setStagedLifecycles:D,stagedOwners:P,setStagedOwners:O,stagedTypes:I,setStagedTypes:A,stagedSystems:j,setStagedSystems:H,hasFilterChanges:M,handleApplyFilters:$,handleClearFilters:z}=Ne(),v=s(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:o||"",filtersApplied:n.length+c.length+l.length+m.length,ownersFilter:n.join(",")||"",lifecyclesFilter:c.join(",")||"",typesFilter:l.join(",")||"",systemsFilter:m.join(",")||"",numberOfDays:k}}),[o,n,c,l,m,k]),{reportContentLoaded:S}=Le(v),{reporter:V}=Se(v),i=Me(),[g,W]=de("checksByLevel"),L=ke(),T=re(Te),Q=ge((a,h)=>{W(h)},[]),y=s(()=>xe({lifecycles:c,owners:n,types:l,systems:m}),[c,n,l,m]),{data:e,isLoading:p,isError:U}=ye(o),{data:f,isLoading:C,isError:q}=Ce({trackId:o,filter:y},!!o),{data:G,isLoading:F,isError:J}=be({trackId:o,filter:y,numberOfDays:k},!!o),{loading:K,allowed:X}=R({permission:le,resourceRef:o}),{loading:w,allowed:E}=R({permission:me,resourceRef:o}),Y=s(()=>e?.ownerEntityRef?t(oe,{color:"inherit",entityRef:e.ownerEntityRef,className:i.ownerLink}):null,[e?.ownerEntityRef,i.ownerLink]),Z=s(()=>!w&&E&&e?.isEditable?t(se,{className:i.editButton,variant:"contained",color:"primary",onClick:()=>{L(T({trackId:e.id}))},children:"Edit Track"}):null,[E,i.editButton,T,w,L,e]),_=s(()=>e?.description?t(Oe,{className:i.headerDescription,content:e.description}):null,[i.headerDescription,e?.description]);Pe({title:e?.name,description:_,customSubtitle:Y,sectionRight:Z});const ee=e?.levels?.flatMap(a=>a.checks)??[],{data:u,isLoading:N}=ve({trackId:o,checkIds:ee.map(a=>a.id),filter:y},!!e),te=s(()=>pe(e?.filter),[e]),x=V?.getLCPValue();return fe(()=>{if(!p&&!N&&!C&&!F){const a=f?.certificationStatus?.numberOfEntities??0,h=u?.length??0;S({lcp:x,numberOfEntities:a,entitiesBucket:Fe(a),numberOfChecks:h,checksBucket:we(h)})}},[p,N,C,F,u,f,S,x]),d(ie,{children:[t(De,{entityName:"track",entityId:o,showNotFound:!p&&!e,showCannotView:!K&&!X}),p&&t(Be,{}),e&&t("div",{className:i.root,children:d("div",{className:i.pageContent,children:[t(Ee,{trackFilter:te,stagedTypes:I,stagedLifecycles:B,stagedOwners:P,stagedSystems:j,onTypesChange:A,onLifecyclesChange:D,onOwnersChange:O,onSystemsChange:H,onApplyFilters:$,onClearFilters:z,hasFilterChanges:M}),d("div",{className:i.mainContentArea,children:[t("div",{className:i.trackProgressContainer,children:t(He,{track:e,status:f,history:G,isError:U||q||J})}),t(ne,{className:i.tabs,children:d(ce,{value:g,onChange:Q,indicatorColor:"primary",textColor:"primary",children:[t(b,{label:"Checks By Level",value:"checksByLevel"}),t(b,{label:"Top Failing Checks",value:"topFailingChecks"}),t(b,{label:"Entities",value:"entities"})]})}),d("div",{className:i.contentArea,children:[g==="checksByLevel"&&t("div",{className:i.levelCard,children:t(Re,{track:e,checkStatuses:u,isLoading:p||C})}),g==="entities"&&t("div",{className:i.trackEntitiesContainer,children:t(je,{track:e,lifecycles:c,owners:n,types:l,systems:m})}),g==="topFailingChecks"&&t("div",{className:i.levelCard,children:t(Ae,{track:e,checkStatuses:u,certificationStatus:f?.certificationStatus})})]})]})]})})]})};export{$e as TrackPageDeprecated};
2
+ //# sourceMappingURL=TrackPageDeprecated.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as u}from"react/jsx-runtime";import{Skeleton as $,Box as h,Flex as x}from"@backstage/ui";import{makeStyles as N,useTheme as S}from"@material-ui/core";import{useMemo as p}from"react";import{calculateAdjustedBarWidths as w}from"../../utils/charts.esm.js";import{getChartColors as C}from"../Charts/chartUtils.esm.js";const E=N(()=>({container:{gap:"var(--bui-space-1)",width:"100%"},barSegment:{height:"var(--bui-space-1_5)",borderRadius:"var(--bui-space-1)"},emptyBar:{width:"100%",background:"var(--bui-fg-disabled)"}})),j=({track:a,status:r})=>{const d=S(),l=E(),c=p(()=>{if(!r||!a)return{};const e={};let t=0,s=0;(r.statusByLevel||[]).sort((n,m)=>m.ordinal-n.ordinal).forEach(({ordinal:n,cumulativelyPassed:m})=>{const L=a.levels.find(k=>k.ordinal===n)?.name??`Level ${n}`,b=m-s;e[L]=b,t+=b,s=m}),(r.statusByLevel||[]).reverse();const o=Math.max(0,r.numberOfEntities-t);return e["No Level"]=o,e},[r,a]),g=p(()=>{if(!r||!a)return{};const e=C(d),t={};return(r.statusByLevel||[]).forEach(({ordinal:s})=>{const o=a.levels.find(n=>n.ordinal===s)?.name??`Level ${s}`;t[o]=e[s%e.length]}),t["No Level"]=d.palette.action.disabled,t},[d,r,a]),i=(r?.statusByLevel||[]).map(({ordinal:e})=>a?.levels.find(t=>t.ordinal===e)?.name??`Level ${e}`);i.push("No Level");const f=i.map(e=>c[e]).filter(e=>typeof e=="number"),y=i.every(e=>(c[e]||0)===0),B=p(()=>w(f),[f]);if(!a||!r)return u($,{width:"100%"});let v;return y?v=u(h,{className:`${l.barSegment} ${l.emptyBar}`}):v=i.map((e,t)=>{const s=c[e],o=g[e]||"var(--bui-fg-disabled)",n=B[t]||0;return s<=0?null:u(h,{className:l.barSegment,style:{backgroundColor:o,width:`${n}%`}},`track-status-bar-segment-${t}`)}),u(x,{className:l.container,children:v})};export{j as TrackStatusBarBUI};
2
+ //# sourceMappingURL=TrackStatusBarBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as a,jsxs as v}from"react/jsx-runtime";import{Text as g,Skeleton as b}from"@backstage/ui";import{makeStyles as N,createStyles as T,useTheme as S}from"@material-ui/core/styles";import{memo as L,useMemo as O,Fragment as W}from"react";import{compactNumberFormatter as y}from"../../utils/formatters.esm.js";import{getChartColors as j}from"../Charts/chartUtils.esm.js";const F=N(()=>T({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:"var(--bui-space-1)",minWidth:0},item:{display:"flex",alignItems:"center",minWidth:0},legendDash:{width:"var(--bui-space-3)",height:"var(--bui-space-1_5)",borderRadius:"var(--bui-space-1)",marginRight:"var(--bui-space-2)"},category:{display:"flex",alignItems:"center",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0,flex:1},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{marginLeft:"var(--bui-space-1)"}})),I=L(({track:r,status:i,isCampaign:d})=>{const h=S(),e=F(),x=O(()=>{if(!r)return[{name:"",key:1,color:"var(--bui-fg-disabled)",value:0},{name:"",key:2,color:"var(--bui-fg-disabled)",value:0},{name:"",key:3,color:"var(--bui-fg-disabled)",value:0}];const n=j(h);let s=0,o=0;const l=r.levels.sort((u,t)=>t.ordinal-u.ordinal).map(({name:u,ordinal:t})=>{const p=i?.statusByLevel.find(C=>C.ordinal===t)?.cumulativelyPassed??0,f=p-o,w={name:d?"Passed":u??`Level ${t}`,key:t,color:n[t%n.length]||"var(--bui-fg-disabled)",value:f};return s+=f,o=p,w}).reverse();r.levels.reverse();const c=i?.numberOfEntities??0,k=Math.max(0,c-s);return l.push({name:d?"Failed":"No Level",key:-1,color:"var(--bui-fg-disabled)",value:k}),l},[h,r,i,d]),m=i?.numberOfEntities??0;return a("div",{className:e.container,children:x.map(({name:n,key:s,color:o,value:l})=>{const c=m>0?Math.round(l/m*100):0;return v(W,{children:[a("div",{className:e.item,children:v("div",{className:e.category,children:[a("span",{className:e.legendDash,style:{backgroundColor:o}}),r?a(g,{className:e.categoryText,variant:"body-small",children:n}):a(b,{width:80,height:20})]})}),a("div",{className:`${e.item} ${e.valueCell}`,children:r&&i?v(g,{variant:"body-small",children:[y(l)," of"," ",y(m)," (",c,"%)"]}):a(b,{width:120,height:20})})]},s)})})});export{I as TrackStatusTableBUI};
2
+ //# sourceMappingURL=TrackStatusTableBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r,jsxs as d,Fragment as V}from"react/jsx-runtime";import{useRouteRef as y,useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as z}from"@backstage/plugin-catalog-react";import{usePermission as J}from"@backstage/plugin-permission-react";import{Box as a,HeaderPage as K,Flex as Q,SearchField as W}from"@backstage/ui";import{makeStyles as X}from"@material-ui/core";import{soundcheckTrackReadPermission as Y}from"@spotify/backstage-plugin-soundcheck-common";import{useState as A,useMemo as u,useEffect as Z}from"react";import{useSearchParams as _,useParams as ee}from"react-router-dom";import re from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as te}from"../../hooks/tracks/useGetAllTracks.esm.js";import{useTrack as ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useHierarchicalTrackStatus as oe}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as ae}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as me}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as se}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as ne,trackOverviewRouteRef as pe,trackExplorerRouteRef as ce}from"../../routes.esm.js";import{getAllOwnedEntityCount as le}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as de,getTracksBucket as ue}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as E}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as fe}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import"../FilterSidebar/util.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as he}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as ge}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as ke}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as be}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";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"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as ve}from"../TechHealth/Filters/utils.esm.js";import{TechInsightsExplorerTable as Te}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as ye}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as Se}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const Re=X(()=>({emptyContainer:{padding:"var(--bui-space-1)"},container:{padding:"0 var(--bui-space-1) var(--bui-space-6)"},teams:{margin:"0 var(--bui-space-2) var(--bui-space-12)"},tables:{margin:"0 var(--bui-space-2)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),we=()=>{const o=Re(),[m,F]=_(),[s,B]=A(m.get("search")||""),i=m.get("group"),[S,O]=A(""),{trackId:e}=ee(),{data:f,isLoading:p}=ie(e),R=be(f??void 0),{owners:h,lifecycles:g,types:k,systems:b}=fe(),j=y(ne),w=u(()=>ve(m.get("numberOfDays")),[m]);re(()=>{O(s);const t=new URLSearchParams(m.toString());s?t.set("search",s):t.delete("search"),F(t,{replace:!0})},300,[s]);const L=u(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:e||"",filtersApplied:h.length+g.length+k.length+b.length,ownersFilter:h.join(",")||"",lifecyclesFilter:g.join(",")||"",typesFilter:k.join(",")||"",systemsFilter:b.join(",")||"",numberOfDays:w,tracksSearch:S||""}}),[e,h,g,k,b,w,S]),{reportContentLoaded:P}=se(L),{reporter:D}=me(L),{loading:G,allowed:H}=J({permission:Y,resourceRef:e}),{data:v,isLoading:c}=oe({trackId:e??"",groupRef:i??"",skip:!e}),{data:C}=te({}),n=u(()=>C?.edges.find(t=>t.node.id===e)?.node,[C?.edges,e]),{data:l,isLoading:T}=ae(i||void 0,{enabled:!!i&&!!e&&!!n,ownedEntitiesFilter:n?.filter??void 0}),I=$(z),q=u(()=>{if(!i)return;const t=l?.[i];return t?he(t,v||null,()=>"var(--bui-fg-primary)",I,void 0):void 0},[l,I,i,v]),N=D?.getLCPValue();Z(()=>{if(!p&&!T&&!c){const t=i?le(l?.[i]):0,x=n?1:0;P({lcp:N,numberOfEntities:t,entitiesBucket:de(t),numberOfTracks:x,tracksBucket:ue(x)})}},[p,P,T,c,l,i,n,N]);const M=y(pe),U=y(ce);return p?r(ge,{}):!p&&!f?r(a,{className:o.emptyContainer,children:r(E,{title:"Track not found",body:`There is no track with the requested id: ${e}.`})}):!G&&!H?r(a,{className:o.emptyContainer,children:r(E,{title:"Cannot view track",body:`No permission to view track with the requested id: ${e}.`})}):d(V,{children:[r(a,{children:r(K,{title:f?.name,customActions:r(ke,{label:"Track Actions",disabled:!R.length,placement:"left top",menuActions:R}),breadcrumbs:[{label:"Tracks",href:j()}],tabs:[{id:"overview",label:"Track Overview",href:e?M({trackId:e}):""},{id:"explorer",label:"Tech Insights Explorer",href:e?U({trackId:e}):""}]})}),d(a,{className:o.container,children:[r(a,{className:o.teams,children:r(Se,{trackStatus:v??void 0,isLoading:c})}),d(a,{className:o.tables,children:[d(Q,{align:"center",gap:"3",className:o.filters,children:[r(ye,{}),r(W,{value:s,onChange:B,"aria-label":"Search",placeholder:"Search"})]}),r(a,{className:o.tableContent,children:r(Te,{tableData:q,isLoading:T||c,trackId:n?.id})})]})]})]})};export{we as TrackTechInsightsExplorerPage};
2
+ //# sourceMappingURL=TrackTechInsightsExplorerPage.esm.js.map
@@ -1,2 +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};
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"react-use/lib/useLocalStorage";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
2
  //# sourceMappingURL=TrackSelection.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r,jsxs as k}from"react/jsx-runtime";import{useRouteRef as _,useApi as S,featureFlagsApiRef as ee}from"@backstage/core-plugin-api";import{usePermission as re}from"@backstage/plugin-permission-react";import{makeStyles as te,Button as N,Grid as a}from"@material-ui/core";import{soundcheckTrackCreatePermission as ae}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useMemo as oe,useEffect as B}from"react";import{useNavigate as ie}from"react-router-dom";import se from"react-use/lib/useDebounce";import{soundcheckApiRef as ne}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 ce}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetTrackOwners as me}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import{useImportTracks as le}from"../../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as pe}from"../../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as de}from"../../../hooks/useLoadTimeReporting.esm.js";import ge from"../../../images/no-results.svg";import{trackCreateRouteRef as ue}from"../../../routes.esm.js";import{exportTracks as fe}from"../../../utils/export.esm.js";import{FilterDefault as L}from"../../../utils/filters.esm.js";import{EmptyState as F}from"../../EmptyState/EmptyState.esm.js";import"../../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{ImportExportPanelDeprecated as he}from"../../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{Pagination as ke}from"../../Pagination/Pagination.esm.js";import{SearchFilters as Pe}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as P,TrackNoResults as I}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as Te}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as ye}from"./TrackSummaryCard.esm.js";const Ce=te(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)}})),be=({tracksPerPage:t,currentCursor:O})=>{const[s,T]=i(O),[g,E]=i(""),[n,D]=i(L.Alpha),[c,j]=i(L.Owner),[m,G]=i(""),y=oe(()=>({routeName:"soundcheck-tracks",additionalAttributes:{tracksPerPage:t,pageCursor:s||"",sortOrder:n||"",ownerFilter:c||"",nameSearch:m||""}}),[t,s,n,c,m]),{reportContentLoaded:C}=de(y),{reporter:H}=pe(y),l=Ce(),{data:M,isLoading:u}=me();se(()=>{G(g)},500,[g]);const{loading:b,allowed:V}=re({permission:ae}),W=ie(),$=_(ue),x=()=>W($()),{data:f,isLoading:o}=ce({ids:void 0,types:["standard","playlist"],first:t,after:s,orderAlphabetical:n,searchByOwner:c,searchByName:m}),p=f?.edges?.map(e=>e.node),[A,v]=i([]);B(()=>{T(void 0),v([])},[m]);const w=S(ee),q=!w.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-track-creation")||w.isActive("soundcheck-enable-track-creation"),h=!V||!q,z=e=>{D(e.target.value)},J=e=>{j(e.target.value)},K=S(ne),{mutateAsync:Q}=le(),U=async e=>Q(e),X=async()=>{const e=await K.getTracks({orderAlphabetical:"asc"});return fe(e.edges.map(Z=>Z.node))},R=H?.getLCPValue();if(B(()=>{!o&&!u&&C({lcp:R})},[o,u,C,R]),!o&&!p)return r(F,{title:P.title,description:P.description,imgSrc:ge,action:!b&&r(N,{disabled:h,variant:"contained",color:"primary",onClick:x,children:P.callToAction})});let d;o?d=r(Te,{}):p?.length?d=p?.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(ye,{summary:e})},e.id)):d=r(a,{xs:12,item:!0,role:"listitem","aria-label":"result",children:r(F,{title:I.title,description:I.description})});const Y=f?.pageInfo.hasNextPage||A?.length>0;return k(a,{container:!0,direction:"row",className:l.container,children:[k(a,{container:!0,className:l.header,children:[r(Pe,{searchPlaceholder:"Search Available Tracks",isLoading:o||u,searchTerm:g,setSearchTerm:E,filterAlpha:n,handleAlphabeticalFilterChange:z,filterOwner:c,handleOwnerFilterChange:J,owners:M}),k(a,{item:!0,xs:4,className:l.headerButtons,children:[r(he,{resourceType:"track",disableImport:h,disableExport:o||!p?.length,onImport:U,onExport:X}),!b&&r(N,{disabled:h,variant:"contained",color:"primary",onClick:x,className:l.createButton,children:"Create Track"})]})]}),r(a,{container:!0,spacing:4,role:"list","aria-label":"tracks",children:d}),Y&&r(a,{item:!0,xs:12,children:r(ke,{response:f,listingsPerPage:t,cursor:s,setCursor:T,prevCursors:A,setPrevCursors:v,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})})]})};export{be as TrackListPageDeprecated};
2
+ //# sourceMappingURL=TrackListPageDeprecated.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as d}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{soundcheckTrackDeletePermission as T,soundcheckTrackUpdatePermission as w}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as i}from"react";import{useNavigate as y}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as g}from"../../../hooks/useConfirmationModal.esm.js";import{useDeleteTrack as D}from"../../../hooks/tracks/useDeleteTrack.esm.js";import{trackDetailsRouteRef as E,trackEditRouteRef as v}from"../../../routes.esm.js";import{exportTrack as x}from"../../../utils/export.esm.js";import{SummaryCard as C}from"../../SummaryCard/SummaryCard.esm.js";import{TrackMetadata as P}from"./TrackMetadata.esm.js";const b=({summary:r})=>{const{loading:c,allowed:p}=n({permission:T,resourceRef:r.id}),{loading:l,allowed:u}=n({permission:w,resourceRef:r.id}),{showModal:t}=g(),{mutate:e}=D(),o=y(),a=s(E),m=s(v),f=i(async()=>{await t({title:"Delete Track",message:`Are you sure you want to delete track ${r.name}?`})&&e(r.id)},[t,r.id,r.name,e]),k=i(()=>{o(a({trackId:r.id}))},[o,r.id,a]),h=i(()=>{o(m({trackId:r.id}))},[o,r.id,m]),R=i(()=>{x(r)},[r]);return d(C,{title:r.name,description:r.description,children:d(P,{track:r}),handleView:k,handleEdit:r.isEditable&&!l&&u?h:void 0,handleDelete:r.isEditable&&!c&&p?f:void 0,handleExport:R,viewIsPrimaryAction:!0})};export{b as TrackSummaryCard};
1
+ import{jsx as l}from"react/jsx-runtime";import{useRouteRef as p,useApi as I,configApiRef as v}from"@backstage/core-plugin-api";import{usePermission as a}from"@backstage/plugin-permission-react";import{soundcheckTrackUpdatePermission as u,soundcheckTrackDeletePermission as x}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as i}from"react";import{useNavigate as A}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as C}from"../../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useDeleteTrack as P}from"../../../hooks/tracks/useDeleteTrack.esm.js";import{useRecertifyTrack as M}from"../../../hooks/tracks/useRecertifyTrack.esm.js";import{trackDetailsRouteRef as N,trackEditRouteRef as O}from"../../../routes.esm.js";import{exportTrack as $}from"../../../utils/export.esm.js";import{SummaryCard as S}from"../../SummaryCard/SummaryCard.esm.js";import{TrackMetadata as j}from"./TrackMetadata.esm.js";const B=({summary:e})=>{const{loading:f,allowed:k}=a({permission:u,resourceRef:e.id}),{loading:y,allowed:h}=a({permission:x,resourceRef:e.id}),{loading:g,allowed:w}=a({permission:u,resourceRef:e.id}),{showModal:r}=C(),{mutate:m}=M(),{mutate:n}=P(),o=A(),s=p(N),c=p(O),d=I(v).getOptionalConfig("soundcheck.certifications.history");let t=d?.getOptionalBoolean("enable")?d?.getOptionalNumber("retentionTimeInDays")??120:1;t=Math.min(t,365);const R=i(async()=>{await r({title:"Recertify Track",message:`Are you sure you want to recertify track ${e.name}? It will erase existing certification data, which cannot be undone. New data will be generated for the past ${t} day(s), reflecting the track's current configuration. This process may take some time, you will be notified upon completion.`})&&m({trackId:e.id,numberOfDays:t})},[r,e.id,e.name,m,t]),T=i(async()=>{await r({title:"Delete Track",message:`Are you sure you want to delete track ${e.name}?`})&&n(e.id)},[r,e.id,e.name,n]),b=i(()=>{o(s({trackId:e.id}))},[o,e.id,s]),D=i(()=>{o(c({trackId:e.id}))},[o,e.id,c]),E=i(()=>{$(e)},[e]);return l(S,{title:e.name,description:e.description,children:l(j,{track:e}),handleView:b,handleEdit:e.isEditable&&!g&&w?D:void 0,handleDelete:e.isEditable&&!y&&h?T:void 0,handleExport:E,handleRecertify:!f&&k?R:void 0,viewIsPrimaryAction:!0})};export{B as TrackSummaryCard};
2
2
  //# sourceMappingURL=TrackSummaryCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as c,Fragment as J}from"react/jsx-runtime";import{useApi as L,useRouteRef as A}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Q}from"@backstage/plugin-catalog-react";import{usePermission as W}from"@backstage/plugin-permission-react";import{Box as x,HeaderPage as Y,Flex as q,Table as K,TableHeader as X,Column as s,TableBody as Z,TablePagination as _}from"@backstage/ui";import{makeStyles as ee}from"@material-ui/core";import{soundcheckTrackCreatePermission as te}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as re,isEmpty as y}from"lodash";import{useState as k,useMemo as l,useEffect as oe}from"react";import{soundcheckApiRef as ie}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as se}from"../../hooks/useSearchName.esm.js";import{usePagination as ne}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as me}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportTracks as ce}from"../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as pe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as le}from"../../hooks/useLoadTimeReporting.esm.js";import{trackCreateRouteRef as de,trackDetailsRouteRef as fe}from"../../routes.esm.js";import{exportTracks as ue}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ge}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as he}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@remixicon/react";import{ImportExportPanelBUI as ye}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as ke}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as we}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useTrackActions as Re}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as Te}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const N=10,Pe=ee(()=>({container:{padding:"0 var(--bui-space-3) var(--bui-space-6)"},emptySpacing:{margin:"var(--bui-space-3) 0"}})),Se=({track:r,profileImageMap:n})=>{const p=l(()=>r.levels.reduce((m,f)=>m+(f.checks?.length??0),0),[r.levels]),o=A(fe),d=Re(r);return e(Te,{ownerEntityRef:r.ownerEntityRef,href:o({trackId:r.id}),menuActions:d,profileImageSrc:n[r.ownerEntityRef],name:r.name??r.id,description:r.description??"",documentationURL:r.documentationURL??void 0,cells:[{title:r.draft?"Draft":"Active"},{title:`${r.levels.length} Level${r.levels.length===1?"":"s"}`},{title:`${p} Check${p===1?"":"s"}`}]})},ve=()=>{const r=Pe(),[n,p]=k("ascending"),[o,d]=k(""),[m,f]=k(""),w=l(()=>({routeName:"soundcheck-tracks"}),[]),{reportContentLoaded:R}=le(w),{reporter:B}=pe(w),{data:T,isLoading:i}=ae({types:["standard","playlist"]}),u=l(()=>T?.edges?.map(t=>t.node)??[],[T?.edges]),{profileImageMap:U}=me(u.map(t=>t.ownerEntityRef)),P=L(Q),g=se({items:u,searchTerm:m}),S=l(()=>{if(!o)return g;const t=re(g,a=>o==="owner"?P.forEntity(a.ownerEntityRef).snapshot.primaryTitle.toLowerCase():o==="status"?a.draft?"draft":"active":a.name.toLowerCase());return n==="descending"&&t.reverse(),t},[P,o,n,g]),{paginatedItems:h,reset:H,paginationProps:M}=ne({pageParam:"perPage",defaultPageSize:N,items:S}),v=B?.getLCPValue();oe(()=>{i||R({lcp:v})},[i,R,v]);const $=A(de),{loading:C,allowed:I}=W({permission:te}),D=L(ie),{mutateAsync:V}=ce(),F=async t=>V(t),O=async()=>{const t=await D.getTracks({orderAlphabetical:"asc"});return ue(t.edges.map(a=>a.node))},j=!i&&!y(h),G=S.length>N,b=!i&&y(h),z=i;let E=null;return b&&(E=m?e(ge,{title:"No tracks found",body:"Your current search term did not return any tracks. Please try a different search term."}):e(he,{})),c(J,{children:[e(x,{children:e(Y,{title:"Tracks",customActions:c(q,{gap:"2",align:"center",children:[e(ye,{resourceType:"track",disableImport:!C&&!I,disableExport:i||y(u),onImport:F,onExport:O}),e(ke,{searchValue:m,setSearchValue:t=>{H(),f(t)},canCreate:!C&&I,createHref:$()})]})})}),c(x,{className:r.container,children:[z&&e(we,{rowCount:10}),b&&e("div",{className:r.emptySpacing,children:E}),j&&c(K,{onSortChange:({direction:t,column:a})=>{d(String(a)),p(t)},sortDescriptor:{direction:n,column:o},children:[c(X,{children:[e(s,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"51%"},children:"Track Name"}),e(s,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),e(s,{id:"levels",style:{width:"10%"},children:"Levels"}),e(s,{id:"checks",style:{width:"10%"},children:"Checks"}),e(s,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"}),e(s,{id:"actions",style:{width:"2%"}})]}),e(Z,{children:!i&&h.map(t=>e(Se,{track:t,profileImageMap:U??{}},t.id))})]}),G&&e(_,{...M})]})]})};export{ve as TracksListPageBUI};
2
+ //# sourceMappingURL=TracksListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as t}from"react/jsx-runtime";import{useSearchParams as i}from"react-router-dom";import{useFeatureFlag as p}from"../../hooks/useFeatureFlag.esm.js";import{RESULTS_PER_PAGE as e}from"../../utils/filters.esm.js";import{TrackListPageDeprecated as a}from"./TrackListPage/TrackListPageDeprecated.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"react-use/lib/useLocalStorage";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../SummaryCard/SummaryCard.esm.js";import"./TrackListPage/TrackMetadata.esm.js";import{TracksListPageBUI as s}from"./TracksListPageBUI.esm.js";const c=()=>{const[o]=i(),r=o.get("tracksPerPage"),m=r?parseInt(r,10):e;return p("backstage-ui")?t(s,{}):t(a,{tracksPerPage:m})};export{c as TracksPage};
2
2
  //# sourceMappingURL=TracksPage.esm.js.map