@spotify/backstage-plugin-soundcheck 0.19.8 → 0.19.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/alpha/entity-content.esm.js +1 -1
  3. package/dist/alpha.d.ts +3 -116
  4. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  5. package/dist/components/AreaChart/AreaChart.esm.js +1 -1
  6. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  7. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  8. package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +1 -1
  9. package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
  10. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +2 -2
  11. package/dist/components/CampaignPage/CampaignPage.esm.js +1 -1
  12. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  13. package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +2 -0
  14. package/dist/components/CampaignPage/CampaignStatusCard.esm.js +2 -0
  15. package/dist/components/CampaignPage/CampaignStatusTableBUI.esm.js +2 -0
  16. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  17. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  18. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  19. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +1 -1
  20. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +1 -1
  21. package/dist/components/CategoryBar/CategoryBar.esm.js +1 -1
  22. package/dist/components/Charts/chartUtils.esm.js +1 -1
  23. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  24. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  25. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  26. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  27. package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +1 -1
  28. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
  29. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  30. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  31. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  32. package/dist/components/CheckPage/CheckPage.esm.js +1 -1
  33. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  34. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +1 -1
  35. package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +1 -1
  36. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  37. package/dist/components/CheckPage/utils.esm.js +1 -1
  38. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  39. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +1 -1
  40. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  41. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +1 -1
  42. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +1 -1
  43. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  44. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  45. package/dist/components/ChecksTab/ChecksTab.esm.js +1 -1
  46. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  47. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  48. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  49. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
  50. package/dist/components/CollectorPage/CollectorFactTable.esm.js +1 -1
  51. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +1 -1
  52. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  57. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  58. package/dist/components/CollectorPage/Configurators/HTTP/HttpRequestComponent.esm.js +1 -1
  59. package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +1 -1
  60. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
  61. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +1 -1
  62. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  63. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  64. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  65. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  66. package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
  67. package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +1 -1
  68. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  69. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  70. package/dist/components/Filter/KeyValueInputDialog.esm.js +1 -1
  71. package/dist/components/Filter/types.esm.js +1 -1
  72. package/dist/components/Filter/utils.esm.js +1 -1
  73. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  74. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  75. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  76. package/dist/components/FormFilterSection/FormFilterSection.esm.js +1 -1
  77. package/dist/components/FormStepper/FormStepper.esm.js +1 -1
  78. package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +1 -1
  79. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +1 -1
  80. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +1 -1
  81. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +1 -1
  82. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +1 -1
  83. package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +1 -1
  84. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +1 -1
  85. package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +1 -1
  86. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  87. package/dist/components/OverviewPage/OverviewPageHeader.esm.js +1 -1
  88. package/dist/components/Pagination/Pagination.esm.js +1 -1
  89. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
  90. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  91. package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +1 -1
  92. package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +1 -1
  93. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  94. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
  95. package/dist/components/SoundcheckHeader/useHeader.esm.js +1 -1
  96. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
  97. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  98. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  99. package/dist/components/TechHealthTabs/PassRateTabHeader.esm.js +1 -1
  100. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  101. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  102. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  103. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  104. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  105. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  106. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  107. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  108. package/dist/components/TrackForm/Steps/LevelsStep/LevelsStepNew.esm.js +1 -1
  109. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  110. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  111. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  112. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
  113. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  114. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  115. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
  116. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  117. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  118. package/dist/components/TracksTab/TracksTab.esm.js +1 -1
  119. package/dist/hooks/aggregations/useAggregatedCheckPassRateTrend.esm.js +1 -1
  120. package/dist/hooks/aggregations/useAggregatedEntityPassRateTrend.esm.js +1 -1
  121. package/dist/hooks/aggregations/useAggregatedGroupPassRateTrend.esm.js +1 -1
  122. package/dist/hooks/aggregations/useAggregatedTrackPassRateTrend.esm.js +1 -1
  123. package/dist/hooks/aggregations/useCertificationStatus.esm.js +1 -1
  124. package/dist/hooks/aggregations/useCertificationStatusHistory.esm.js +1 -1
  125. package/dist/hooks/aggregations/useCheckPassRateTrend.esm.js +1 -1
  126. package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
  127. package/dist/hooks/aggregations/useCheckStatusHistory.esm.js +1 -1
  128. package/dist/hooks/aggregations/useCheckStatuses.esm.js +1 -1
  129. package/dist/hooks/aggregations/useEntityPassRateTrend.esm.js +1 -1
  130. package/dist/hooks/aggregations/useGroupPassRateTrend.esm.js +1 -1
  131. package/dist/hooks/aggregations/useTrackPassRateTrend.esm.js +1 -1
  132. package/dist/hooks/cache/useEntityCountCached.esm.js +1 -1
  133. package/dist/hooks/cache/useTrackCountCached.esm.js +1 -1
  134. package/dist/hooks/campaigns/useGetCampaign.esm.js +1 -1
  135. package/dist/hooks/catalog/useGetEntityCount.esm.js +1 -1
  136. package/dist/hooks/checks/useCheck.esm.js +1 -1
  137. package/dist/hooks/checks/useExecutableChecks.esm.js +1 -1
  138. package/dist/hooks/checks/useGetChecks.esm.js +1 -1
  139. package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
  140. package/dist/hooks/collectors/useGetFactSchema.esm.js +1 -1
  141. package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
  142. package/dist/hooks/entities/useEntityRefsForUser.esm.js +1 -1
  143. package/dist/hooks/exemptions/useExemptions.esm.js +1 -1
  144. package/dist/hooks/facets/useFacetsForOwner.esm.js +1 -1
  145. package/dist/hooks/filters/useFilters.esm.js +1 -1
  146. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  147. package/dist/hooks/tracks/useGetTracksApplicableEntityCount.esm.js +1 -1
  148. package/dist/hooks/tracks/useTrack.esm.js +1 -1
  149. package/dist/hooks/useSortSearchParams.esm.js +2 -0
  150. package/dist/index.d.ts +11 -11
  151. package/dist/routes.esm.js +1 -1
  152. package/dist/utils/filters.esm.js +1 -1
  153. package/dist/utils/formStyles.esm.js +1 -1
  154. package/dist/utils/helpers.esm.js +1 -1
  155. package/dist/utils/json.esm.js +2 -0
  156. package/dist/utils/validation.esm.js +1 -1
  157. package/package.json +19 -19
  158. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +0 -2
  159. package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +0 -2
  160. package/dist/components/CampaignPage/CampaignStatusTile.esm.js +0 -2
  161. package/dist/components/CampaignPage/DaysRemainingTile.esm.js +0 -2
  162. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +0 -2
  163. package/dist/components/CampaignsPage/CampaignListPage/CampaignMetadata.esm.js +0 -2
  164. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +0 -2
  165. package/dist/components/CampaignsPage/CampaignListPage/CampaignTypes.esm.js +0 -2
  166. package/dist/components/CampaignsPage/CampaignListPage/CampaignsOverviewSkeleton.esm.js +0 -2
  167. package/dist/components/Charts/LoadingChart.esm.js +0 -2
  168. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +0 -2
  169. package/dist/components/CheckPage/CheckEntitiesTable/columns.esm.js +0 -2
  170. package/dist/components/CheckPage/CheckPageDeprecated.esm.js +0 -2
  171. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +0 -2
  172. package/dist/components/CheckPage/CheckStatusTable.esm.js +0 -2
  173. package/dist/components/CheckPage/ExemptionsTable.esm.js +0 -2
  174. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +0 -2
  175. package/dist/components/ChecksPage/CheckListPage/CheckMetadata.esm.js +0 -2
  176. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +0 -2
  177. package/dist/components/ChecksPage/skeletons/ChecksOverviewSkeleton.esm.js +0 -2
  178. package/dist/components/CollectorsPage/CollectorListPage/CollectorListSkeleton.esm.js +0 -2
  179. package/dist/components/ColorChip/ColorChip.esm.js +0 -2
  180. package/dist/components/GroupHierarchySelector/GroupHierarchyCategorySelection.esm.js +0 -2
  181. package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +0 -2
  182. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +0 -2
  183. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +0 -2
  184. package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +0 -2
  185. package/dist/components/HierarchicalTechInsightsPage/ColorLegend.esm.js +0 -2
  186. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +0 -2
  187. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +0 -2
  188. package/dist/components/HierarchicalTechInsightsPage/LowestPerformingTeams.esm.js +0 -2
  189. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +0 -2
  190. package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceCard.esm.js +0 -2
  191. package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceListCard.esm.js +0 -2
  192. package/dist/components/HierarchicalTechInsightsPage/TopPerformingTeams.esm.js +0 -2
  193. package/dist/components/HierarchicalTechInsightsPage/visualizations/findNodePath.esm.js +0 -2
  194. package/dist/components/LevelsTable/CheckRowContent.esm.js +0 -2
  195. package/dist/components/LevelsTable/LevelsTable.esm.js +0 -2
  196. package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +0 -2
  197. package/dist/components/QuickstartPage/HowDoIListItem.esm.js +0 -2
  198. package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +0 -2
  199. package/dist/components/QuickstartPage/QuickstartPage.esm.js +0 -3
  200. package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +0 -7
  201. package/dist/components/QuickstartPage/styles.esm.js +0 -2
  202. package/dist/components/RichTooltip/RichTooltip.esm.js +0 -2
  203. package/dist/components/RoutingPage/NewFeatureTab.esm.js +0 -2
  204. package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +0 -2
  205. package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +0 -2
  206. package/dist/components/SearchFilters/SearchFilters.esm.js +0 -2
  207. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +0 -2
  208. package/dist/components/SoundcheckEntityLink/SoundcheckEntityLink.esm.js +0 -2
  209. package/dist/components/SoundcheckHeader/headerUtil.esm.js +0 -2
  210. package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +0 -2
  211. package/dist/components/TechInsights/FilterControls.esm.js +0 -2
  212. package/dist/components/TechInsights/SummaryTiles.esm.js +0 -2
  213. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +0 -2
  214. package/dist/components/TechInsights/TechInsightsTableView.esm.js +0 -2
  215. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +0 -2
  216. package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +0 -2
  217. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +0 -2
  218. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +0 -2
  219. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +0 -2
  220. package/dist/components/TrackPage/TrackHistoryChart.esm.js +0 -2
  221. package/dist/components/TrackPage/TrackPageDeprecated.esm.js +0 -2
  222. package/dist/components/TrackPage/TrackProgressCard.esm.js +0 -2
  223. package/dist/components/TrackPage/TrackStatus.esm.js +0 -2
  224. package/dist/components/TrackPage/TrackStatusBar.esm.js +0 -2
  225. package/dist/components/TrackPage/TrackStatusTable.esm.js +0 -2
  226. package/dist/components/TrackPage/utils.esm.js +0 -2
  227. package/dist/components/TrackSelection/TrackSelection.esm.js +0 -2
  228. package/dist/components/TracksPage/TrackListPage/TrackEmptyState.esm.js +0 -2
  229. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +0 -2
  230. package/dist/components/TracksPage/TrackListPage/TrackMetadata.esm.js +0 -2
  231. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +0 -2
  232. package/dist/components/TracksPage/TrackListPage/TracksOverviewSkeleton.esm.js +0 -2
  233. package/dist/hooks/campaigns/useGetCampaignOwners.esm.js +0 -2
  234. package/dist/hooks/checks/useGetCheckOwners.esm.js +0 -2
  235. package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +0 -2
  236. package/dist/hooks/tracks/useGetTrackOwners.esm.js +0 -2
  237. package/dist/utils/colors.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.19.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependency `cronstrue` to `^3.0.0`.
8
+ - Updated dependency `backstage` to `1.46.0`.
9
+ - Fixed search on Tech Insights Explorer BUI pages.
10
+ - Removed feature flag for tech health.
11
+ - Fixed an issue where updates to an integration configuration were not immediately reflected in the UI.
12
+ - Fix issue where facts with periods in their name were not being suggested properly.
13
+ - Fixed a regression in the Current Status card for a Campaign.
14
+ - Make the Backstage UI theme the default Soundcheck theme.
15
+ - Fix missing Soundcheck Scorecard Extension for Group Entities
16
+ - Get check entities from catalog when user-provided filters are present (owner filter)
17
+ - Added possibility to configure more complex filter conditions in No-Code UI.
18
+ - Fix collection configuration not showing as being scheduled or having a source.
19
+ - Fix Check Current Status card and Historical Status card to use the same applicable count.
20
+ - Fix imported tracks so external checks render correctly in the Edit Check form
21
+ - Updated dependencies
22
+ - @spotify/backstage-plugin-core@0.8.13
23
+ - @spotify/backstage-plugin-soundcheck-common@0.19.4
24
+
3
25
  ## 0.19.8
4
26
 
5
27
  ### Patch Changes
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{convertLegacyRouteRef as n,compatWrapper as o}from"@backstage/core-compat-api";import{EntityContentBlueprint as r,EntityCardBlueprint as a}from"@backstage/plugin-catalog-react/alpha";import{entityRootRouteRef as c,groupRootRouteRef as p}from"../routes.esm.js";const i=r.make({name:"entity",params:{path:"soundcheck",title:"Soundcheck",routeRef:n(c),loader:()=>import("../components/EntitySoundcheckContent.esm.js").then(t=>o(e(t.EntitySoundcheckContent,{})))}}),u=a.make({name:"card",params:{loader:()=>import("../components/EntitySoundcheckCard/index.esm.js").then(t=>o(e(t.EntitySoundcheckCard,{})))}}),m=r.make({name:"group",attachTo:{id:"page:catalog/group-details",input:"contents"},params:{path:"soundcheck",title:"Soundcheck",routeRef:n(p),loader:()=>import("../components/OverviewPage/index.esm.js").then(t=>o(e(t.FixedGroupOverviewPage,{})))}});export{u as entitySoundcheckCard,i as entitySoundcheckContent,m as groupSoundcheckContent};
1
+ import{jsx as t}from"react/jsx-runtime";import{convertLegacyRouteRef as r,compatWrapper as o}from"@backstage/core-compat-api";import{EntityContentBlueprint as n,EntityCardBlueprint as a}from"@backstage/plugin-catalog-react/alpha";import{entityRootRouteRef as i,groupRootRouteRef as c}from"../routes.esm.js";const p=n.make({name:"entity",params:{path:"soundcheck",title:"Soundcheck",routeRef:r(i),loader:()=>import("../components/EntitySoundcheckContent.esm.js").then(e=>o(t(e.EntitySoundcheckContent,{})))}}),m=a.make({name:"card",params:{loader:()=>import("../components/EntitySoundcheckCard/index.esm.js").then(e=>o(t(e.EntitySoundcheckCard,{})))}}),u=n.make({name:"group",params:{path:"soundcheck-overview",title:"Soundcheck Overview",filter:"kind:group",routeRef:r(c),loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>o(t(e.FixedGroupOverviewPage,{})))}});export{m as entitySoundcheckCard,p as entitySoundcheckContent,u as groupSoundcheckContent};
2
2
  //# sourceMappingURL=entity-content.esm.js.map
package/dist/alpha.d.ts CHANGED
@@ -1,8 +1,5 @@
1
- import * as _backstage_catalog_model from '@backstage/catalog-model';
2
1
  import * as react from 'react';
3
- import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
4
2
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
- import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
6
3
 
7
4
  /**
8
5
  * @public
@@ -10,114 +7,6 @@ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
10
7
  * The Soundcheck plugin for use within Backstage´s new frontend system
11
8
  */
12
9
  declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{}, {}, {
13
- "api:soundcheck": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
14
- kind: "api";
15
- name: undefined;
16
- config: {};
17
- configInput: {};
18
- output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
19
- inputs: {};
20
- params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_core_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_core_plugin_api.AnyApiFactory>;
21
- }>;
22
- "entity-card:soundcheck/card": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
23
- kind: "entity-card";
24
- name: "card";
25
- config: {
26
- filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
27
- type: "content" | "summary" | "info" | undefined;
28
- };
29
- configInput: {
30
- filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
31
- type?: "content" | "summary" | "info" | undefined;
32
- };
33
- output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
34
- optional: true;
35
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
36
- optional: true;
37
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
38
- optional: true;
39
- }>;
40
- inputs: {};
41
- params: {
42
- loader: () => Promise<JSX.Element>;
43
- filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
44
- type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
45
- };
46
- }>;
47
- "entity-content:soundcheck/entity": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
48
- kind: "entity-content";
49
- name: "entity";
50
- config: {
51
- path: string | undefined;
52
- title: string | undefined;
53
- filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
54
- group: string | false | undefined;
55
- };
56
- configInput: {
57
- filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
58
- title?: string | undefined;
59
- path?: string | undefined;
60
- group?: string | false | undefined;
61
- };
62
- output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
63
- optional: true;
64
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
65
- optional: true;
66
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
67
- optional: true;
68
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-group", {
69
- optional: true;
70
- }>;
71
- inputs: {};
72
- params: {
73
- defaultPath?: [Error: `Use the 'path' param instead`];
74
- path: string;
75
- defaultTitle?: [Error: `Use the 'title' param instead`];
76
- title: string;
77
- defaultGroup?: [Error: `Use the 'group' param instead`];
78
- group?: ("operation" | "development" | "overview" | "documentation" | "deployment" | "observability") | (string & {});
79
- loader: () => Promise<JSX.Element>;
80
- routeRef?: _backstage_frontend_plugin_api.RouteRef;
81
- filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
82
- };
83
- }>;
84
- "entity-content:soundcheck/group": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
85
- kind: "entity-content";
86
- name: "group";
87
- config: {
88
- path: string | undefined;
89
- title: string | undefined;
90
- filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
91
- group: string | false | undefined;
92
- };
93
- configInput: {
94
- filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
95
- title?: string | undefined;
96
- path?: string | undefined;
97
- group?: string | false | undefined;
98
- };
99
- output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
100
- optional: true;
101
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
102
- optional: true;
103
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
104
- optional: true;
105
- }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-group", {
106
- optional: true;
107
- }>;
108
- inputs: {};
109
- params: {
110
- defaultPath?: [Error: `Use the 'path' param instead`];
111
- path: string;
112
- defaultTitle?: [Error: `Use the 'title' param instead`];
113
- title: string;
114
- defaultGroup?: [Error: `Use the 'group' param instead`];
115
- group?: ("operation" | "development" | "overview" | "documentation" | "deployment" | "observability") | (string & {});
116
- loader: () => Promise<JSX.Element>;
117
- routeRef?: _backstage_frontend_plugin_api.RouteRef;
118
- filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
119
- };
120
- }>;
121
10
  "integration:soundcheck/azure": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
122
11
  kind: "integration";
123
12
  name: "azure";
@@ -349,26 +238,24 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
349
238
  configInput: {};
350
239
  output: _backstage_frontend_plugin_api.ExtensionDataRef<{
351
240
  title: string;
352
- icon: _backstage_core_plugin_api.IconComponent;
241
+ icon: _backstage_frontend_plugin_api.IconComponent;
353
242
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
354
243
  }, "core.nav-item.target", {}>;
355
244
  inputs: {};
356
245
  params: {
357
246
  title: string;
358
- icon: _backstage_core_plugin_api.IconComponent;
247
+ icon: _backstage_frontend_plugin_api.IconComponent;
359
248
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
360
249
  };
361
250
  }>;
362
251
  "page:soundcheck/SoundcheckRoutingPage": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
363
252
  config: {
364
253
  title: string | undefined;
365
- } & {
366
254
  path: string | undefined;
367
255
  };
368
256
  configInput: {
369
257
  title?: string | undefined;
370
- } & {
371
- path?: string | undefined;
258
+ path?: string | undefined | undefined;
372
259
  };
373
260
  output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
374
261
  optional: true;
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import{compatWrapper as u}from"@backstage/core-compat-api";import{createExtensionDataRef as c,createExtensionBlueprint as s,coreExtensionData as t,ExtensionBoundary as g}from"@backstage/frontend-plugin-api";import{lazy as l}from"react";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@backstage/ui";import"@spotify/backstage-plugin-soundcheck-common";import"react-helmet";import"react-router-dom";import"../routes.esm.js";import"../components/CampaignPage/CampaignPageBUI.esm.js";import"../components/CampaignPage/CampaignPageDeprecated.esm.js";import"../components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import"../utils/filters.esm.js";import"../components/SoundcheckHeader/SoundcheckHeader.esm.js";import"../components/SoundcheckHeader/SoundcheckHeaderContext.esm.js";import"../components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js";import"../components/CampaignsPage/CampaignListPage/CampaignTypes.esm.js";import"../components/CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../components/CampaignsPage/CampaignListPageBUI.esm.js";import"../contexts/TrackFormContext.esm.js";import"../contexts/CheckFormContext.esm.js";import"../contexts/CampaignFormContext.esm.js";import"../contexts/UserProvider.esm.js";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"../components/CampaignForm/CampaignForm.esm.js";import"@remixicon/react";import"../components/PageWarningMessage/PageWarningMessage.esm.js";import"../components/TechHealth/Loading/Loading.esm.js";import"../components/CampaignsPage/CampaignEmptyState.esm.js";import"uuid";import"@backstage/core-components";import"react-hook-form";import"../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../components/SoundcheckDialog/SoundcheckDialog.esm.js";import"../components/FactExplorer/FactExplorer.esm.js";import"../components/FactExplorer/FactExplorerContext.esm.js";import"../components/FormStepper/FormStepper.esm.js";import"../components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js";import"../components/CheckForm/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../components/FormMarkdownInput/FormMarkdownInput.esm.js";import"../components/CheckForm/utils/checkFormUtils.esm.js";import"../components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js";import"../components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"../components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../components/CheckForm/FormFields/CheckPathResolverInput.esm.js";import"../components/CheckForm/Steps/CheckDetailsStep.esm.js";import"../components/CheckForm/Steps/CheckRulesStep.esm.js";import"../components/CheckForm/Steps/CheckApplicabilityStep.esm.js";import"../components/CheckForm/Steps/CheckReviewStep.esm.js";import"../components/CheckForm/types/ExpressionType.esm.js";import"../components/Frequency/types.esm.js";import"../components/Frequency/util.esm.js";import"../components/Frequency/FrequencyComponent.esm.js";import"../components/CheckForm/types/Path.esm.js";import"@hookform/resolvers/zod";import"../components/CheckForm/utils/validation.esm.js";import"../components/LoadingIndicator/LoadingIndicator.esm.js";import"../components/CheckPage/CheckPageBUI.esm.js";import"../components/CheckPage/CheckPageDeprecated.esm.js";import"../components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js";import"../components/ChecksPage/ChecksListPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import"../components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js";import"../components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js";import"../components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js";import"../components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js";import"../components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js";import"../components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js";import"../components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js";import"../components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js";import"../components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js";import"../components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js";import"../components/CollectorPage/CollectorDetailsPageBUI.esm.js";import"../components/CollectorPage/CollectorDetailsPageDeprecated.esm.js";import"../components/CollectorsPage/CollectorsPage.esm.js";import"../components/OverviewPage/OverviewPageContent.esm.js";import"../components/TechHealth/TechHealth.esm.js";import"../components/TechInsights/TechInsightsPageBUI.esm.js";import"../components/TechInsights/TechInsightsPageDeprecated.esm.js";import"lodash";import"../components/Filter/FilterComponent.esm.js";import"../components/TrackForm/Steps/LevelsStep/LevelsStepNew.esm.js";import"../components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import"../components/TrackForm/utils/validation.esm.js";import"../graphql/generated/index.esm.js";import"../components/TrackPage/TrackPageBUI.esm.js";import"../components/TrackPage/TrackPageDeprecated.esm.js";import"../components/TrackPage/TrackTechInsightsExplorerPage.esm.js";import"../components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js";import"js-yaml";import"../components/SummaryCard/SummaryCard.esm.js";import"../components/TracksPage/TrackListPage/TrackMetadata.esm.js";import"../components/TracksPage/TracksListPageBUI.esm.js";import"@spotify/backstage-plugin-core";import"../components/SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import"../components/RoutingPage/RoutingPageDeprecated.esm.js";import{RoutingPageWrapper as f}from"../components/RoutingPage/RoutingPageWrapper.esm.js";const o=c().with({id:"soundcheck.integrationId"}),h=s({kind:"integration",attachTo:[{id:"page:soundcheck/SoundcheckRoutingPage",input:"integrations"},{id:"app/routes",input:"routes"}],output:[t.routePath,t.reactElement,t.routeRef.optional(),o],dataRefs:{integrationId:o},*factory({integrationId:r,loader:m,path:e,routeRef:p},{node:n}){const a=l(()=>m().then(d=>({default:()=>d})));yield t.routePath(e??`/soundcheck/integrations/${r}/edit`),yield t.reactElement(u(i(g,{node:n,children:i(f,{children:i(a,{})})}))),p&&(yield t.routeRef(p)),yield o(r)}});export{h as IntegrationPageBlueprint,o as integrationIdExtensionDataRef};
1
+ import{jsx as i}from"react/jsx-runtime";import{compatWrapper as u}from"@backstage/core-compat-api";import{createExtensionDataRef as c,createExtensionBlueprint as s,coreExtensionData as t,ExtensionBoundary as g}from"@backstage/frontend-plugin-api";import{lazy as l}from"react";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@backstage/ui";import"@spotify/backstage-plugin-soundcheck-common";import"react-helmet";import"react-router-dom";import"../routes.esm.js";import"../components/CampaignPage/CampaignPageBUI.esm.js";import"../components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import"../components/CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../components/CampaignsPage/CampaignListPageBUI.esm.js";import"../contexts/TrackFormContext.esm.js";import"../contexts/CheckFormContext.esm.js";import"../contexts/CampaignFormContext.esm.js";import"../contexts/UserProvider.esm.js";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"../components/CampaignForm/CampaignForm.esm.js";import"@remixicon/react";import"../components/SoundcheckHeader/SoundcheckHeader.esm.js";import"../components/SoundcheckHeader/SoundcheckHeaderContext.esm.js";import"../components/PageWarningMessage/PageWarningMessage.esm.js";import"../components/TechHealth/Loading/Loading.esm.js";import"../components/CampaignsPage/CampaignEmptyState.esm.js";import"uuid";import"@backstage/core-components";import"react-hook-form";import"../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../components/SoundcheckDialog/SoundcheckDialog.esm.js";import"../components/FactExplorer/FactExplorer.esm.js";import"../components/FactExplorer/FactExplorerContext.esm.js";import"../components/FormStepper/FormStepper.esm.js";import"../components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js";import"../components/CheckForm/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../components/FormMarkdownInput/FormMarkdownInput.esm.js";import"../components/CheckForm/utils/checkFormUtils.esm.js";import"../components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js";import"../components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"../components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../components/CheckForm/FormFields/CheckPathResolverInput.esm.js";import"../components/CheckForm/Steps/CheckDetailsStep.esm.js";import"../components/CheckForm/Steps/CheckRulesStep.esm.js";import"../components/CheckForm/Steps/CheckApplicabilityStep.esm.js";import"../components/CheckForm/Steps/CheckReviewStep.esm.js";import"../components/CheckForm/types/ExpressionType.esm.js";import"../components/Frequency/types.esm.js";import"../components/Frequency/util.esm.js";import"../components/Frequency/FrequencyComponent.esm.js";import"../components/CheckForm/types/Path.esm.js";import"@hookform/resolvers/zod";import"../components/CheckForm/utils/validation.esm.js";import"../components/LoadingIndicator/LoadingIndicator.esm.js";import"../components/CheckPage/CheckPageBUI.esm.js";import"../components/ChecksPage/ChecksListPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import"../components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js";import"../components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js";import"../components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js";import"../components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js";import"../components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js";import"../components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js";import"../components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js";import"../components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js";import"../components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js";import"../components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js";import"../components/CollectorPage/CollectorDetailsPageBUI.esm.js";import"../components/CollectorPage/CollectorDetailsPageDeprecated.esm.js";import"../components/CollectorsPage/IntegrationsListPageBUI.esm.js";import"../components/OverviewPage/OverviewPageContent.esm.js";import"../components/TechHealth/TechHealth.esm.js";import"../components/TechInsights/TechInsightsPageBUI.esm.js";import"lodash";import"../components/Filter/FilterComponent.esm.js";import"../components/TrackForm/Steps/LevelsStep/LevelsStepNew.esm.js";import"../components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import"../components/TrackForm/utils/validation.esm.js";import"../graphql/generated/index.esm.js";import"../components/TrackPage/TrackPageBUI.esm.js";import"../components/TrackPage/TrackTechInsightsExplorerPage.esm.js";import"../components/TracksPage/TracksListPageBUI.esm.js";import"@spotify/backstage-plugin-core";import"../components/SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{RoutingPageWrapper as f}from"../components/RoutingPage/RoutingPageWrapper.esm.js";const o=c().with({id:"soundcheck.integrationId"}),h=s({kind:"integration",attachTo:[{id:"page:soundcheck/SoundcheckRoutingPage",input:"integrations"},{id:"app/routes",input:"routes"}],output:[t.routePath,t.reactElement,t.routeRef.optional(),o],dataRefs:{integrationId:o},*factory({integrationId:r,loader:m,path:e,routeRef:p},{node:n}){const a=l(()=>m().then(d=>({default:()=>d})));yield t.routePath(e??`/soundcheck/integrations/${r}/edit`),yield t.reactElement(u(i(g,{node:n,children:i(f,{children:i(a,{})})}))),p&&(yield t.routeRef(p)),yield o(r)}});export{h as IntegrationPageBlueprint,o as integrationIdExtensionDataRef};
2
2
  //# sourceMappingURL=IntegrationPageBlueprint.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as C,Fragment as ce}from"react/jsx-runtime";import{makeStyles as pe,useTheme as ye}from"@material-ui/core/styles";import{schemeCategory10 as me}from"d3-scale-chromatic";import{useState as b,useRef as D,createElement as ue,Fragment as z}from"react";import{ResponsiveContainer as he,AreaChart as xe,CartesianGrid as fe,XAxis as ge,Label as G,YAxis as ve,Tooltip as ke,Legend as Ae,Area as Le,Dot as E,Line as Ce}from"recharts";import{ChartTooltip as be}from"./ChartTooltip.esm.js";import Ke from"./Legend.esm.js";import{yDomain as we,hasUniqueValueForKey as P}from"./utils.esm.js";const Te=pe(o=>({root:{height:"100%",width:"100%"},gridLine:{stroke:o.palette.divider},xAxis:{fontSize:"0.75rem",fill:o.palette.text.secondary},yAxis:{fontSize:"0.75rem",fill:o.palette.text.secondary},tooltip:{borderRadius:o.shape.borderRadius,border:`1px solid ${o.palette.divider}`,backgroundColor:o.palette.background.paper,color:o.palette.text.primary,boxShadow:o.shadows[1]}})),Se=({data:o=[],categories:A=[],index:h,colors:K=me,categoryColors:W={},valueFormatter:w=s=>s.toString(),startEndOnly:T=!1,showXAxis:j=!0,showYAxis:R=!0,showGridLines:q=!0,yAxisWidth:I=56,intervalType:M="equidistantPreserveStart",showTooltip:X=!0,showLegend:Y=!0,autoMinValue:B=!1,minValue:H,maxValue:U,allowDecimals:Z=!0,connectNulls:S=!1,className:J,onValueChange:p,enableLegendSlider:Q=!0,tickGap:_=5,xAxisLabel:L,yAxisLabel:x,type:f="default",legendPosition:Ne="right",fill:ee="gradient",tooltipCallback:N,customTooltip:O,...te})=>{const s=Te(),y=ye(),[ae,ie]=b(60),[l,g]=b(void 0),[d,u]=b(void 0),m=A.reduce((e,a,i)=>(e[a]=W[a]||K[i%K.length],e),{}),oe=we({autoMinValue:B,minValue:H,maxValue:U}),v=!!p,ne=f==="stacked"||f==="percent",F=D(void 0),V=D(void 0),re=({fillType:e,dot:a,legend:i,category:r})=>{const n=a||i&&i!==r?.1:.3,c=m[r]||y.palette.primary.main;switch(e){case"none":return t("stop",{stopColor:c,stopOpacity:0});case"gradient":return C(ce,{children:[t("stop",{offset:"5%",stopColor:c,stopOpacity:n}),t("stop",{offset:"95%",stopColor:c,stopOpacity:0})]});case"solid":default:return t("stop",{stopColor:c,stopOpacity:n})}};function le(e){return`${(e*100).toFixed(0)}%`}function se(e,a){a.stopPropagation(),v&&(e.index===l?.index&&e.dataKey===l?.dataKey||P(o,e.dataKey)&&d&&d===e.dataKey?(u(void 0),g(void 0),p?.(null)):(u(e.dataKey),g({index:e.index,dataKey:e.dataKey}),p?.({eventType:"dot",categoryClicked:e.dataKey,...e.payload})))}function $(e){v&&(e===d&&!l||P(o,e)&&l&&l.dataKey===e?(u(void 0),p?.(null)):(u(e),p?.({eventType:"category",categoryClicked:e})),g(void 0))}return t("div",{className:`${s.root} ${J}`,...te,children:t(he,{children:C(xe,{data:o,onClick:v&&(d||l)?()=>{g(void 0),u(void 0),p?.(null)}:void 0,margin:{bottom:L?30:void 0,left:x?20:void 0,right:x?5:void 0,top:5},stackOffset:f==="percent"?"expand":void 0,children:[q?t(fe,{className:s.gridLine,horizontal:!0,vertical:!1}):null,t(ge,{padding:{left:20,right:20},hide:!j,dataKey:h,interval:T?"preserveStartEnd":M,tick:{transform:"translate(0, 6)"},ticks:T?[o[0][h],o[o.length-1][h]]:void 0,className:s.xAxis,tickLine:!1,axisLine:!1,minTickGap:_,children:L&&t(G,{position:"insideBottom",offset:-20,className:s.xAxis,children:L})}),t(ve,{width:I,hide:!R,axisLine:!1,tickLine:!1,type:"number",domain:oe,tick:{transform:"translate(-3, 0)"},className:s.yAxis,tickFormatter:f==="percent"?le:w,allowDecimals:Z,children:x&&t(G,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:s.yAxis,children:x})}),t(ke,{wrapperStyle:{outline:"none"},isAnimationActive:!0,animationDuration:100,cursor:{stroke:y.palette.divider,strokeWidth:1},offset:20,position:{y:0},content:({active:e,payload:a,label:i})=>{const r=a?a.map(n=>({category:n.dataKey,value:n.value,index:n.payload[h],color:m[n.dataKey]??"#000",type:n.type,payload:n.payload})):[];return N&&(e!==F.current||i!==V.current)&&(N({active:e,payload:r,label:i}),F.current=e,V.current=i),X&&e?O?ue(O,{active:e,payload:r,label:i}):t(be,{active:e,payload:r,label:i,valueFormatter:w}):null}}),Y?t(Ae,{verticalAlign:"top",height:ae,content:({payload:e})=>t(Ke,{categories:e?.map(a=>a.value)??[],colors:e?.map(a=>m[a.value]||y.palette.primary.main)??[],onClickLegendItem:v?$:void 0,activeLegend:d,enableLegendSlider:Q,setLegendHeight:ie})}):null,A.map(e=>{const a=`${e.replace(/[^a-zA-Z0-9]/g,"")}`;return C(z,{children:[t("defs",{children:t("linearGradient",{id:a,x1:"0",y1:"0",x2:"0",y2:"1",children:re({fillType:ee,dot:l,legend:d,category:e})})},e),t(Le,{stroke:m[e]||y.palette.primary.main,strokeOpacity:l||d&&d!==e?.3:1,activeDot:i=>{const{cx:r,cy:n,dataKey:c}=i;return t(E,{cx:r,cy:n,r:5,fill:m[c]||y.palette.primary.main,onClick:(k,de)=>se(i,de)})},dot:i=>{const{cx:r,cy:n,dataKey:c,index:k}=i;return l?.index===k&&l?.dataKey===e?t(E,{cx:r,cy:n,r:5,fill:m[c]||y.palette.primary.main},k):t(z,{},k)},name:e,type:"linear",dataKey:e,strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:!1,connectNulls:S,stackId:ne?"stack":void 0,fill:`url(#${a})`},e)]},e)}),p?A.map(e=>t(Ce,{strokeOpacity:0,name:e,type:"linear",dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:S,onClick:(a,i)=>{i.stopPropagation();const{name:r}=a;$(r)}},e)):null]})})})};export{Se as AreaChart};
1
+ import{jsx as t,jsxs as C,Fragment as ce}from"react/jsx-runtime";import{makeStyles as pe,useTheme as ye}from"@material-ui/core/styles";import{schemeCategory10 as me}from"d3-scale-chromatic";import{useState as b,useRef as D,createElement as ue,Fragment as z}from"react";import{ResponsiveContainer as he,AreaChart as xe,CartesianGrid as fe,XAxis as ge,Label as G,YAxis as ve,Tooltip as ke,Legend as Ae,Area as Le,Dot as E,Line as Ce}from"recharts";import{ChartTooltip as be}from"./ChartTooltip.esm.js";import Ke from"./Legend.esm.js";import{yDomain as we,hasUniqueValueForKey as P}from"./utils.esm.js";const Te=pe(o=>({root:{height:"100%",width:"100%"},gridLine:{stroke:o.palette.divider},xAxis:{fontSize:"0.75rem",fill:o.palette.text.secondary},yAxis:{fontSize:"0.75rem",fill:o.palette.text.secondary},tooltip:{borderRadius:o.shape.borderRadius,border:`1px solid ${o.palette.divider}`,backgroundColor:o.palette.background.paper,color:o.palette.text.primary,boxShadow:o.shadows[1]}})),Se=({data:o=[],categories:A=[],index:h,colors:K=me,categoryColors:W={},valueFormatter:w=d=>d.toString(),startEndOnly:T=!1,showXAxis:j=!0,showYAxis:R=!0,showGridLines:q=!0,yAxisWidth:I=56,intervalType:M="equidistantPreserveStart",showTooltip:X=!0,showLegend:Y=!0,autoMinValue:B=!1,minValue:H,maxValue:U,allowDecimals:Z=!0,connectNulls:S=!1,className:J,onValueChange:p,enableLegendSlider:Q=!0,tickGap:_=5,xAxisLabel:L,yAxisLabel:x,type:f="default",legendPosition:Ne="right",fill:ee="gradient",tooltipCallback:N,customTooltip:O,...te})=>{const d=Te(),y=ye(),[ae,ie]=b(60),[l,g]=b(void 0),[s,u]=b(void 0),m=A.reduce((e,a,i)=>(e[a]=W[a]||K[i%K.length],e),{}),oe=we({autoMinValue:B,minValue:H,maxValue:U}),v=!!p,ne=f==="stacked"||f==="percent",F=D(void 0),V=D(void 0),re=({fillType:e,dot:a,legend:i,category:r})=>{const n=a||i&&i!==r?.1:.3,c=m[r]||y.palette.primary.main;switch(e){case"none":return t("stop",{stopColor:c,stopOpacity:0});case"gradient":return C(ce,{children:[t("stop",{offset:"5%",stopColor:c,stopOpacity:n}),t("stop",{offset:"95%",stopColor:c,stopOpacity:0})]});default:return t("stop",{stopColor:c,stopOpacity:n})}};function le(e){return`${(e*100).toFixed(0)}%`}function de(e,a){a.stopPropagation(),v&&(e.index===l?.index&&e.dataKey===l?.dataKey||P(o,e.dataKey)&&s&&s===e.dataKey?(u(void 0),g(void 0),p?.(null)):(u(e.dataKey),g({index:e.index,dataKey:e.dataKey}),p?.({eventType:"dot",categoryClicked:e.dataKey,...e.payload})))}function $(e){v&&(e===s&&!l||P(o,e)&&l&&l.dataKey===e?(u(void 0),p?.(null)):(u(e),p?.({eventType:"category",categoryClicked:e})),g(void 0))}return t("div",{className:`${d.root} ${J}`,...te,children:t(he,{children:C(xe,{data:o,onClick:v&&(s||l)?()=>{g(void 0),u(void 0),p?.(null)}:void 0,margin:{bottom:L?30:void 0,left:x?20:void 0,right:x?5:void 0,top:5},stackOffset:f==="percent"?"expand":void 0,children:[q?t(fe,{className:d.gridLine,horizontal:!0,vertical:!1}):null,t(ge,{padding:{left:20,right:20},hide:!j,dataKey:h,interval:T?"preserveStartEnd":M,tick:{transform:"translate(0, 6)"},ticks:T?[o[0][h],o[o.length-1][h]]:void 0,className:d.xAxis,tickLine:!1,axisLine:!1,minTickGap:_,children:L&&t(G,{position:"insideBottom",offset:-20,className:d.xAxis,children:L})}),t(ve,{width:I,hide:!R,axisLine:!1,tickLine:!1,type:"number",domain:oe,tick:{transform:"translate(-3, 0)"},className:d.yAxis,tickFormatter:f==="percent"?le:w,allowDecimals:Z,children:x&&t(G,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:d.yAxis,children:x})}),t(ke,{wrapperStyle:{outline:"none"},isAnimationActive:!0,animationDuration:100,cursor:{stroke:y.palette.divider,strokeWidth:1},offset:20,position:{y:0},content:({active:e,payload:a,label:i})=>{const r=a?a.map(n=>({category:n.dataKey,value:n.value,index:n.payload[h],color:m[n.dataKey]??"#000",type:n.type,payload:n.payload})):[];return N&&(e!==F.current||i!==V.current)&&(N({active:e,payload:r,label:i}),F.current=e,V.current=i),X&&e?O?ue(O,{active:e,payload:r,label:i}):t(be,{active:e,payload:r,label:i,valueFormatter:w}):null}}),Y?t(Ae,{verticalAlign:"top",height:ae,content:({payload:e})=>t(Ke,{categories:e?.map(a=>a.value)??[],colors:e?.map(a=>m[a.value]||y.palette.primary.main)??[],onClickLegendItem:v?$:void 0,activeLegend:s,enableLegendSlider:Q,setLegendHeight:ie})}):null,A.map(e=>{const a=`${e.replace(/[^a-zA-Z0-9]/g,"")}`;return C(z,{children:[t("defs",{children:t("linearGradient",{id:a,x1:"0",y1:"0",x2:"0",y2:"1",children:re({fillType:ee,dot:l,legend:s,category:e})})},e),t(Le,{stroke:m[e]||y.palette.primary.main,strokeOpacity:l||s&&s!==e?.3:1,activeDot:i=>{const{cx:r,cy:n,dataKey:c}=i;return t(E,{cx:r,cy:n,r:5,fill:m[c]||y.palette.primary.main,onClick:(k,se)=>de(i,se)})},dot:i=>{const{cx:r,cy:n,dataKey:c,index:k}=i;return l?.index===k&&l?.dataKey===e?t(E,{cx:r,cy:n,r:5,fill:m[c]||y.palette.primary.main},k):t(z,{},k)},name:e,type:"linear",dataKey:e,strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:!1,connectNulls:S,stackId:ne?"stack":void 0,fill:`url(#${a})`},e)]},e)}),p?A.map(e=>t(Ce,{strokeOpacity:0,name:e,type:"linear",dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:S,onClick:(a,i)=>{i.stopPropagation();const{name:r}=a;$(r)}},e)):null]})})})};export{Se as AreaChart};
2
2
  //# sourceMappingURL=AreaChart.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,Fragment as g,jsx as o}from"react/jsx-runtime";import{useRouteRef as u}from"@backstage/core-plugin-api";import{HeaderPage as f}from"@backstage/ui";import{useEffect as d}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as i,useCampaignFormContext as C}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";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{useCreateCampaign as l}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as h}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useFeatureFlag as k}from"../../hooks/useFeatureFlag.esm.js";import{campaignsPageRouteRef as m}from"../../routes.esm.js";import{CampaignForm as b}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as F}from"../DocLinkButton/DocLinkButton.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as y}from"../SoundcheckHeader/useHeader.esm.js";const x=()=>{const{setIsLoading:t}=C(),{mutateAsync:r,isLoading:e}=l();d(()=>{t(e)},[t,e]);const[a,s]=h(m),p=async n=>{await r(n,{onSuccess:s})};return y({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),o(i,{children:o(b,{onSave:p,onCancel:a})})},L=()=>{const t=k("backstage-ui"),r=u(m);return c(g,{children:[t&&o(f,{title:"Create Campaign",breadcrumbs:[{label:"All Campaigns",href:r()}],customActions:o(F,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(i,{children:o(x,{})})]})};export{L as CampaignCreatePage};
1
+ import{jsxs as c,Fragment as g,jsx as o}from"react/jsx-runtime";import{useRouteRef as f}from"@backstage/core-plugin-api";import{HeaderPage as u}from"@backstage/ui";import{useEffect as d}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as e,useCampaignFormContext as C}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";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{useCreateCampaign as l}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as h}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{campaignsPageRouteRef as i}from"../../routes.esm.js";import{CampaignForm as k}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as y}from"../SoundcheckHeader/useHeader.esm.js";const x=()=>{const{setIsLoading:t}=C(),{mutateAsync:m,isLoading:r}=l();d(()=>{t(r)},[t,r]);const[a,s]=h(i),p=async n=>{await m(n,{onSuccess:s})};return y({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),o(e,{children:o(k,{onSave:p,onCancel:a})})},F=()=>{const t=f(i);return c(g,{children:[o(u,{title:"Create Campaign",breadcrumbs:[{label:"All Campaigns",href:t()}],customActions:o(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(e,{children:o(x,{})})]})};export{F as CampaignCreatePage};
2
2
  //# sourceMappingURL=CampaignCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,Fragment as d}from"react/jsx-runtime";import{Content as k}from"@backstage/core-components";import{FormProvider as x}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as N}from"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{useFeatureFlag as f}from"../../hooks/useFeatureFlag.esm.js";import{formStyles as M}from"../../utils/formStyles.esm.js";import{FormFilterSection as V}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as L}from"../FormStepper/FormStepper.esm.js";import{useCampaignForm as v}from"./hooks/useCampaignForm.esm.js";import{CampaignDetailsStep as A}from"./Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js";import{CampaignTrackStepNew as D}from"./Steps/CampaignTrackStepNew.esm.js";import{CampaignMilestonesStep as E}from"./Steps/CampaignMilestonesStep.esm.js";import{StepNameMapping as O}from"./types/CampaignFormTypes.esm.js";import{CAMPAIGN_FIELDS as I}from"./utils/campaignFormUtils.esm.js";var g=(t=>(t.Details="Enter campaign details",t.Checks="Add checks",t.Entities="Choose the affected entities (Optional)",t.Milestones="Set campaign milestones",t))(g||{});const B=({onSave:t,onCancel:S,selectedCampaign:r})=>{const o=M(),{isLoading:i,isReadOnly:u}=N(),{formMethods:a,onSubmit:m}=v(t,r),{getValues:C,control:n,formState:{errors:l},handleSubmit:s,trigger:F}=a,p=C(),h=p.detailsStep.startDate,b=f("backstage-ui");f("debugMode")&&console.log(p);const c=[{label:"Enter campaign details",content:()=>e(A,{control:n,isLoading:i,disabled:!1,errors:l.detailsStep,startDate:h})},{label:"Add checks",content:()=>e(d,{children:e(D,{})})},{label:"Set campaign milestones",content:()=>e(E,{control:n,isLoading:i,disabled:!1,errors:l.milestonesStep})},{label:"Choose the affected entities (Optional)",content:()=>e(V,{name:"filtersStep.filter",keyValueFilterName:"filtersStep.keyValueFilter",description:I.filter.description,excludeFilterName:"filtersStep.excludeFilter",excludeKeyValueFilterName:"filtersStep.excludeKeyValueFilter"})}],y=r?[...Array(c.length).keys()]:[0];return e(d,{children:e(k,{className:b?o.formWrapperBUI:o.formWrapper,children:e(x,{...a,children:e("form",{onSubmit:s(m),children:e(L,{onClose:S,handleSubmit:s,trigger:F,onSubmit:m,initialVisited:y,stepNameMap:O,steps:c,isLoading:i,isReadOnly:u,saveButtonText:"Save Campaign"})})})})})};export{B as CampaignForm,g as CampaignStepLabel};
1
+ import{jsx as e,Fragment as d}from"react/jsx-runtime";import{Content as b}from"@backstage/core-components";import{FormProvider as M}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as N}from"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{useFeatureFlag as x}from"../../hooks/useFeatureFlag.esm.js";import{formStyles as L}from"../../utils/formStyles.esm.js";import{FormFilterSection as k}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as v}from"../FormStepper/FormStepper.esm.js";import{useCampaignForm as y}from"./hooks/useCampaignForm.esm.js";import{CampaignDetailsStep as A}from"./Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js";import{CampaignTrackStepNew as D}from"./Steps/CampaignTrackStepNew.esm.js";import{CampaignMilestonesStep as E}from"./Steps/CampaignMilestonesStep.esm.js";import{StepNameMapping as O}from"./types/CampaignFormTypes.esm.js";import{CAMPAIGN_FIELDS as I}from"./utils/campaignFormUtils.esm.js";var c=(t=>(t.Details="Enter campaign details",t.Checks="Add checks",t.Entities="Choose the affected entities (Optional)",t.Milestones="Set campaign milestones",t))(c||{});const P=({onSave:t,onCancel:g,selectedCampaign:o})=>{const f=L(),{isLoading:i,isReadOnly:S}=N(),{formMethods:r,onSubmit:a}=y(t,o),{getValues:u,control:n,formState:{errors:m},handleSubmit:s,trigger:C}=r,l=u(),h=l.detailsStep.startDate;x("debugMode")&&console.log(l);const p=[{label:"Enter campaign details",content:()=>e(A,{control:n,isLoading:i,disabled:!1,errors:m.detailsStep,startDate:h})},{label:"Add checks",content:()=>e(d,{children:e(D,{})})},{label:"Set campaign milestones",content:()=>e(E,{control:n,isLoading:i,disabled:!1,errors:m.milestonesStep})},{label:"Choose the affected entities (Optional)",content:()=>e(k,{includeFilterName:"filtersStep.include",excludeFilterName:"filtersStep.exclude",description:I.filter.description})}],F=o?[...Array(p.length).keys()]:[0];return e(d,{children:e(b,{className:f.formWrapper,children:e(M,{...r,children:e("form",{onSubmit:s(a),children:e(v,{onClose:g,handleSubmit:s,trigger:C,onSubmit:a,initialVisited:F,stepNameMap:O,steps:p,isLoading:i,isReadOnly:S,saveButtonText:"Save Campaign"})})})})})};export{P as CampaignForm,c as CampaignStepLabel};
2
2
  //# sourceMappingURL=CampaignForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,Fragment as y,jsx as e}from"react/jsx-runtime";import{makeStyles as S,Divider as C,Grid as h,Typography as o,TextField as x}from"@material-ui/core";import F from"@material-ui/icons/Remove";import{useFieldArray as R,Controller as u}from"react-hook-form";import{NoBorderButton as f}from"../../NoBorderButton/NoBorderButton.esm.js";import{CAMPAIGN_FIELDS as H}from"../utils/campaignFormUtils.esm.js";const A=S(s=>({milestoneHeader:{display:"flex",alignItems:"center",marginBottom:s.spacing(1)},divider:{margin:"20px 0"},helperText:{marginLeft:0},selectContainer:{width:"250px"},section:{marginBottom:s.spacing(2)}})),B=({control:s,errors:n,isLoading:d,disabled:t})=>{const r=A(),{name:m,description:p,passrate:c}=H.milestones,{fields:g,append:v,remove:T}=R({control:s,name:"milestonesStep.milestones"}),b=()=>v({name:"",description:"",passRate:"0"});return l(y,{children:[g.map((N,i)=>l("div",{children:[i!==0&&e(C,{className:r.divider}),l(h,{container:!0,spacing:1,className:r.milestoneHeader,children:[l(h,{item:!0,xs:!0,children:[e(o,{variant:"subtitle2",children:m.name}),e(u,{name:`milestonesStep.milestones.${i}.name`,control:s,defaultValue:"",render:({field:a})=>e(x,{...a,FormHelperTextProps:{className:r.helperText},variant:"outlined",fullWidth:!0,placeholder:m.placeholder,disabled:d||t,type:"text",margin:"dense",error:!!n?.milestones?.[i]?.name,helperText:n?.milestones?.[i]?.name?.message??m.helperText})})]}),i!==0&&!t&&e(h,{item:!0,children:e(f,{label:"Remove Milestone",startIcon:e(F,{}),onClick:()=>T(i),disabled:t})})]}),l("div",{className:r.section,children:[e(o,{variant:"subtitle2",children:p.name}),e(o,{variant:"caption",children:p.description}),e(u,{name:`milestonesStep.milestones.${i}.description`,control:s,defaultValue:"",render:({field:a})=>e(x,{...a,FormHelperTextProps:{className:r.helperText},variant:"outlined",multiline:!0,minRows:4,fullWidth:!0,placeholder:p.placeholder,disabled:d||t,type:"text",margin:"dense",error:!!n?.milestones?.[i]?.description,helperText:n?.milestones?.[i]?.description?.message})})]}),l("div",{className:r.section,children:[e(o,{variant:"subtitle2",children:c.name}),e(o,{variant:"caption",children:c.description}),e("div",{className:r.selectContainer,children:e(u,{name:`milestonesStep.milestones.${i}.passRate`,control:s,defaultValue:"",render:({field:a})=>e(x,{...a,FormHelperTextProps:{className:r.helperText},variant:"outlined",fullWidth:!0,placeholder:c.placeholder,disabled:d||t,type:"number",margin:"dense",error:!!n?.milestones?.[i]?.passRate,helperText:n?.milestones?.[i]?.passRate?.message??void 0})})})]})]},N.id)),e(f,{label:"Add Milestone",onClick:()=>b(),disabled:t})]})};export{B as CampaignMilestonesStep};
1
+ import{jsxs as l,Fragment as y,jsx as e}from"react/jsx-runtime";import{makeStyles as C,Divider as S,Grid as h,Typography as o,TextField as x}from"@material-ui/core";import F from"@material-ui/icons/Remove";import{useFieldArray as R,Controller as u}from"react-hook-form";import{NoBorderButton as f}from"../../NoBorderButton/NoBorderButton.esm.js";import{CAMPAIGN_FIELDS as H}from"../utils/campaignFormUtils.esm.js";const A=C(s=>({milestoneHeader:{display:"flex",alignItems:"center",marginBottom:s.spacing(1)},divider:{margin:"20px 0"},helperText:{marginLeft:0},selectContainer:{width:"250px"},section:{marginBottom:s.spacing(2)}})),B=({control:s,errors:n,isLoading:d,disabled:t})=>{const r=A(),{name:m,description:p,passrate:c}=H.milestones,{fields:g,append:v,remove:T}=R({control:s,name:"milestonesStep.milestones"}),b=()=>v({name:"",description:"",passRate:"0"});return l(y,{children:[g.map((N,i)=>l("div",{children:[i!==0&&e(S,{className:r.divider}),l(h,{container:!0,spacing:1,className:r.milestoneHeader,children:[l(h,{item:!0,xs:!0,children:[e(o,{variant:"subtitle2",children:m.name}),e(u,{name:`milestonesStep.milestones.${i}.name`,control:s,defaultValue:"",render:({field:a})=>e(x,{...a,FormHelperTextProps:{className:r.helperText},variant:"outlined",fullWidth:!0,placeholder:m.placeholder,disabled:d||t,type:"text",margin:"dense",error:!!n?.milestones?.[i]?.name,helperText:n?.milestones?.[i]?.name?.message??m.helperText})})]}),i!==0&&!t&&e(h,{item:!0,children:e(f,{label:"Remove Milestone",startIcon:e(F,{}),onClick:()=>T(i),disabled:t})})]}),l("div",{className:r.section,children:[e(o,{variant:"subtitle2",children:p.name}),e(o,{variant:"caption",children:p.description}),e(u,{name:`milestonesStep.milestones.${i}.description`,control:s,defaultValue:"",render:({field:a})=>e(x,{...a,FormHelperTextProps:{className:r.helperText},variant:"outlined",multiline:!0,minRows:4,fullWidth:!0,placeholder:p.placeholder,disabled:d||t,type:"text",margin:"dense",error:!!n?.milestones?.[i]?.description,helperText:n?.milestones?.[i]?.description?.message})})]}),l("div",{className:r.section,children:[e(o,{variant:"subtitle2",children:c.name}),e(o,{variant:"caption",children:c.description}),e("div",{className:r.selectContainer,children:e(u,{name:`milestonesStep.milestones.${i}.passRate`,control:s,defaultValue:"",render:({field:a})=>e(x,{...a,FormHelperTextProps:{className:r.helperText},variant:"outlined",fullWidth:!0,placeholder:c.placeholder,disabled:d||t,type:"number",margin:"dense",error:!!n?.milestones?.[i]?.passRate,helperText:n?.milestones?.[i]?.passRate?.message??void 0})})})]})]},N.id)),e(f,{label:"Add Milestone",onClick:()=>b(),disabled:t})]})};export{B as CampaignMilestonesStep};
2
2
  //# sourceMappingURL=CampaignMilestonesStep.esm.js.map
@@ -1,2 +1,2 @@
1
- import{v4 as S}from"uuid";import{mapInputFilterToFormFilters as c,mapCatalogFilterToFormKeyValueFilters as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{mapTrackFormToInput as D}from"../../TrackForm/utils/useTrackForm.esm.js";const x=({name:o,ownerEntityRef:i,description:p,targetCompletionDate:s,supportChannel:a,milestones:r,startDate:n,track:t})=>({detailsStep:{name:o,description:p,ownerEntityRef:i,supportChannel:a,startDate:n,targetCompletionDate:s,draft:t.draft??!1},tracksStep:{checks:t?.levels?.[0].checks.map(e=>({id:e.id,name:e.name??e.id,description:e.description}))},filtersStep:{filter:c(t.filter),keyValueFilter:u(t.filter),excludeFilter:c(t.exclude),excludeKeyValueFilter:u(t.exclude)},milestonesStep:{milestones:r.map(e=>({id:Number(e.id),name:e.name,description:e.description??void 0,passRate:e.targetPercent.toString()}))}}),h=(o,i,p)=>{const{tracksStep:{checks:s},detailsStep:{name:a,description:r,ownerEntityRef:n,supportChannel:t,startDate:e,targetCompletionDate:m,draft:f},filtersStep:l,milestonesStep:{milestones:F}}=o,d=D({detailsStep:{name:a,description:r,ownerEntityRef:n,draft:f},levelsStep:{levels:[{name:"Level 1",checks:s,description:""}]},filtersStep:{filter:l.filter,keyValueFilter:l.keyValueFilter,excludeFilter:l.excludeFilter,excludeKeyValueFilter:l.excludeKeyValueFilter}},p??{},i?.track);return{id:i?.id??S(),track:{...d,type:"campaign"},name:a,description:r,ownerEntityRef:n,supportChannel:t,startDate:e,targetCompletionDate:m,milestones:F.map(({id:g,name:k,description:y,passRate:C})=>({id:g,trackId:d.id,name:k,description:y||void 0,targetPercent:parseInt(C,10),targetCompletionDate:m}))}};export{h as mapCampaignFormDataToCampaignInput,x as mapCampaignToFormValues};
1
+ import{v4 as D}from"uuid";import{mapInputFilterToFormFilters as c}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{mapTrackFormToInput as h}from"../../TrackForm/utils/useTrackForm.esm.js";const v=({name:o,ownerEntityRef:i,description:p,targetCompletionDate:s,supportChannel:a,milestones:n,startDate:r,track:t})=>({detailsStep:{name:o,description:p,ownerEntityRef:i,supportChannel:a,startDate:r,targetCompletionDate:s,draft:t.draft??!1},tracksStep:{checks:t?.levels?.[0].checks.map(e=>({id:e.id,name:e.name??e.id,description:e.description}))},filtersStep:{include:c(t.filter),exclude:c(t.exclude)},milestonesStep:{milestones:n.map(e=>({id:Number(e.id),name:e.name,description:e.description??void 0,passRate:e.targetPercent.toString()}))}}),R=(o,i,p)=>{const{tracksStep:{checks:s},detailsStep:{name:a,description:n,ownerEntityRef:r,supportChannel:t,startDate:e,targetCompletionDate:m,draft:f},filtersStep:d,milestonesStep:{milestones:u}}=o,l=h({detailsStep:{name:a,description:n,ownerEntityRef:r,draft:f},levelsStep:{levels:[{name:"Level 1",checks:s,description:""}]},filtersStep:{include:d.include,exclude:d.exclude}},p??{},i?.track);return{id:i?.id??D(),track:{...l,type:"campaign"},name:a,description:n,ownerEntityRef:r,supportChannel:t,startDate:e,targetCompletionDate:m,milestones:u.map(({id:g,name:C,description:S,passRate:k})=>({id:g,trackId:l.id,name:C,description:S||void 0,targetPercent:parseInt(k,10),targetCompletionDate:m}))}};export{R as mapCampaignFormDataToCampaignInput,v as mapCampaignToFormValues};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,3 +1,3 @@
1
- import{DateTime as a}from"luxon";import{emptyFilters as e,emptyKeyValueFilters as t}from"../../Filter/types.esm.js";import{CAMPAIGN_NAME_MAX_LENGTH as i,MILESTONE_NAME_MAX_LENGTH as n}from"./validation.esm.js";const r={detailsStep:{name:"",description:"",ownerEntityRef:"",supportChannel:"",startDate:a.now(),targetCompletionDate:null,draft:!1},tracksStep:{checks:[]},filtersStep:{filter:e(),keyValueFilter:t(),excludeFilter:e(),excludeKeyValueFilter:t()},milestonesStep:{milestones:[{name:"Target",description:"",passRate:"0"}]}},l={details:{name:{name:"Campaign name",helperText:`Max ${i} characters`,placeholder:"Example: Check for latest version of javascript and Readme files"},description:{name:"Campaign description",placeholder:"Example: Check for the latest versions of JavaScript and README files to meet this quarter's quality standards."},owner:{name:"Campaign owner",description:"Add a team as the owner of this Campaign."},support:{name:"Support channel (Optional)",description:"Set up a Slack channel for notifications.",placeholder:"Channel name"},startingDate:{name:"Starting date",placeholder:"Starting date"},endingDate:{name:"Ending date",placeholder:"Ending date"}},milestones:{name:{name:"Milestone name",helperText:`Max ${n} characters`,placeholder:"Example: 80% pass rate"},description:{name:"Milestone description",description:"Provide a detailed description of this milestone, outlining its objectives.",placeholder:"Example: The track in my campaign expects a pass rate of 80% or above"},passrate:{name:"Milestone pass rate",description:"Enter the pass rate that your tracks have to meet.",placeholder:"Example: 80%"}},filter:{description:`Use the filters below to narrow the scope of the Campaign. Only Entities that match the selected include and exclude filters will be monitored. Exclude filters must be used with with an include filter.
2
- For example, selecting an include filter of 'Kind' as 'Component' and an exclude filter of 'Type' as 'Service' will select all entities with kind Component where type is NOT Service.`}};export{l as CAMPAIGN_FIELDS,r as DEFAULT_FORM_VALUES};
1
+ import{DateTime as t}from"luxon";import{emptyFilters as e}from"../../Filter/types.esm.js";import{CAMPAIGN_NAME_MAX_LENGTH as a,MILESTONE_NAME_MAX_LENGTH as i}from"./validation.esm.js";const n={detailsStep:{name:"",description:"",ownerEntityRef:"",supportChannel:"",startDate:t.now(),targetCompletionDate:null,draft:!1},tracksStep:{checks:[]},filtersStep:{include:[e()],exclude:[e()]},milestonesStep:{milestones:[{name:"Target",description:"",passRate:"0"}]}},r={details:{name:{name:"Campaign name",helperText:`Max ${a} characters`,placeholder:"Example: Check for latest version of javascript and Readme files"},description:{name:"Campaign description",placeholder:"Example: Check for the latest versions of JavaScript and README files to meet this quarter's quality standards."},owner:{name:"Campaign owner",description:"Add a team as the owner of this Campaign."},support:{name:"Support channel (Optional)",description:"Set up a Slack channel for notifications.",placeholder:"Channel name"},startingDate:{name:"Starting date",placeholder:"Starting date"},endingDate:{name:"Ending date",placeholder:"Ending date"}},milestones:{name:{name:"Milestone name",helperText:`Max ${i} characters`,placeholder:"Example: 80% pass rate"},description:{name:"Milestone description",description:"Provide a detailed description of this milestone, outlining its objectives.",placeholder:"Example: The track in my campaign expects a pass rate of 80% or above"},passrate:{name:"Milestone pass rate",description:"Enter the pass rate that your tracks have to meet.",placeholder:"Example: 80%"}},filter:{description:`Use the filters below to narrow the scope of the Campaign. Only Entities that match the selected include and exclude filters will be monitored. Exclude filters must be used with with an include filter.
2
+ For example, selecting an include filter of 'Kind' as 'Component' and an exclude filter of 'Type' as 'Service' will select all entities with kind Component where type is NOT Service.`}};export{r as CAMPAIGN_FIELDS,n as DEFAULT_FORM_VALUES};
3
3
  //# sourceMappingURL=campaignFormUtils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as a}from"react/jsx-runtime";import{useFeatureFlag as e}from"../../hooks/useFeatureFlag.esm.js";import{CampaignPageBUI as m}from"./CampaignPageBUI.esm.js";import{CampaignPageDeprecated as r}from"./CampaignPageDeprecated.esm.js";const o=()=>e("backstage-ui")?a(m,{}):a(r,{});export{o as CampaignPage};
1
+ import{jsx as a}from"react/jsx-runtime";import{CampaignPageBUI as m}from"./CampaignPageBUI.esm.js";const o=()=>a(m,{});export{o as CampaignPage};
2
2
  //# sourceMappingURL=CampaignPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as a,Fragment as G}from"react/jsx-runtime";import{parseEntityRef as Ee}from"@backstage/catalog-model";import{useRouteRef as F}from"@backstage/core-plugin-api";import{usePermission as we}from"@backstage/plugin-permission-react";import{Container as v,HeaderPage as Re,Box as c,Flex as $,Text as g,Grid as N}from"@backstage/ui";import{makeStyles as Le}from"@material-ui/core";import{toEntityFilterQuery as Fe,soundcheckCampaignReadPermission as Ne}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as Pe}from"lodash";import{DateTime as C}from"luxon";import{useState as I,useMemo as T,useEffect as q}from"react";import{useParams as xe,useSearchParams as Ae}from"react-router-dom";import De from"react-use/lib/useDebounce";import Oe from"react-use/lib/useLocalStorage";import{useCheckStatuses as He}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Me}from"../../hooks/filters/useFilters.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as Ue}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Be}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as je}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useLCPReporting as Ke}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ve}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as _e,campaignOverviewRouteRef as Ge,campaignExplorerRouteRef as $e}from"../../routes.esm.js";import{DescriptionCard as qe}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Qe}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as We}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as ze}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Je}from"../ChipSelector/ChipSelector.esm.js";import{EmptyStateBUI as Q}from"../EmptyState/EmptyStateBUI.esm.js";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Xe}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ye,CERTIFICATION_STATUS_MAP as Ze}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as ei}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as ii}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as ti}from"../Menus/useCampaignActions.esm.js";import{PageCustomActions as ri}from"../PageCustomActions/PageCustomActions.esm.js";import{SendCampaignNotificationDialogBUI as ai}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TopFailingChecksTableBUI as oi}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as si}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const ni=Le(()=>({container:{marginBottom:"var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},tabPanel:{padding:"var(--bui-space-6) 0 0"},tabs:{margin:"0 0 var(--bui-space-12)"},cards:{margin:"0 0 var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"}})),u={CHECKS:"Checks",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},ci=()=>{const{owners:m,lifecycles:l,types:d,systems:p,certificationStatuses:P}=Xe(),{campaignId:o}=xe(),W=F(_e),[s,k]=Ae(),[n,z]=I(s.get("search")||""),[x,J]=I(""),[A,X]=I(new Set([u.CHECKS])),y=A.values().next().value??u.CHECKS;De(()=>{J(n);const r=new URLSearchParams(s.toString());n?r.set("search",n):r.delete("search"),k(r,{replace:!0})},300,[n]);const D=T(()=>({routeName:"soundcheck-campaign-insights",additionalAttributes:{campaignId:o||"",filtersApplied:m.length+l.length+d.length+p.length,ownersFilter:m?.join(",")||"",lifecyclesFilter:l?.join(",")||"",typesFilter:d?.join(",")||"",systemsFilter:p?.join(",")||"",campaignsSearch:x||""}}),[o,m,l,d,p,x]),{reportContentLoaded:O}=Ve(D),{reporter:Y}=Ke(D),h=ni(),E=T(()=>Ye({lifecycles:l,owners:m,types:d,systems:p}),[l,m,d,p]),{data:Z,isLoading:f,isError:ee}=Ue({ids:[o],first:1}),i=Z?.edges?.[0]?.node,{actions:H,showNotificationDialog:M,setShowNotificationDialog:ie}=ti(i??void 0),t=i?.track,te=T(()=>t?.levels.flatMap(r=>r.checks),[t?.levels]),re=Array.from(new Set(t?.levels.flatMap(r=>r.checks).map(r=>r.id)??[])),{data:U,isLoading:ae}=He({trackId:t?.id,checkIds:re,filter:E},!!t),oe=T(()=>Fe(t?.filter),[t]),{filters:se,selected:ne,setSelected:ce,onRemoveTag:me,selectedTags:le}=Me({entityFilterQuery:oe,hasCertificationStatusFilters:!0}),{data:B,isLoading:w,isError:de}=Be({trackId:t?.id??"",filter:E},!!i),pe=C.fromISO(i?.startDate),he=Math.max(Math.ceil(C.now().diff(pe,"days").days),1),{data:fe,isLoading:ge,isError:ue}=je({trackId:t?.id??"",filter:E,numberOfDays:he},!!i),R=ee||de||ue,{loading:Se,allowed:Ce}=we({permission:Ne,resourceRef:o}),j=Y?.getLCPValue();q(()=>{!f&&!w&&O({lcp:j})},[f,w,O,j]);const[b,K]=I(!1),[S,L]=Oe("campaign-overview-search-params","");q(()=>{!b&&s?.toString()?(S!==s.toString()&&L(s.toString()),K(!0)):!b&&S?(k(new URLSearchParams(S)),K(!0)):b&&S!==s.toString()&&L(s.toString())},[s,k,L,S,b]);const ye=F(Ge),be=F($e);if(f)return e(v,{className:h.container,children:e(ei,{})});if(!f&&!i)return e(v,{className:h.container,children:e(Q,{title:"Campaign not found",body:`There is no campaign with the requested id: ${o}.`})});if(!Se&&!Ce)return e(v,{className:h.container,children:e(Q,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${o}.`})});const V=i?.ownerEntityRef,ve=V?Ee(V).name:void 0,Ie=C.fromISO(i?.startDate),_=C.fromISO(i?.targetCompletionDate),Te=C.now(),ke=Math.max(Math.ceil(_.diff(Te,"days").days),0);return a(G,{children:[e(Re,{title:i?.name,customActions:e(ii,{disabled:!H.length,placement:"left top",menuActions:H,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:W()}],tabs:[{id:"overview",label:"Campaign Overview",href:o?ye({campaignId:o}):""},{id:"explorer",label:"Tech Insights Explorer",href:o?be({campaignId:o}):""}]}),a(v,{className:h.container,children:[a(c,{className:h.cards,children:[e(qe,{description:i?.description??void 0,owner:ve,isError:R,isLoading:f}),e(We,{track:t??void 0,status:B,isError:R,isLoading:w,isCampaign:!0,children:a(G,{children:[a($,{align:"baseline",mt:"3",children:[e(g,{as:"h1",variant:"title-medium",weight:"bold",children:ke}),e(g,{variant:"body-small",children:"Days remaining"})]}),a(N.Root,{children:[a(N.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"Start date"})}),e(c,{children:e(g,{variant:"body-small",children:Ie.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]}),a(N.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"End date"})}),e(c,{children:e(g,{variant:"body-small",children:_.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]})]})]})}),e(Qe,{track:i?.track,history:fe,isCampaign:!0,isError:R,isLoading:ge})]}),t&&a(c,{children:[a($,{justify:"between",children:[e(c,{minWidth:"16rem",children:e(Je,{options:["Checks","Top Failing Checks","Entities"],selected:A,ariaLabel:"Sections",onSelectionChange:X})}),e(ri,{searchValue:n,setSearchValue:r=>z(r),filters:se,selected:ne,setSelected:ce,onRemoveTag:me,selectedTags:le,showSearch:y!==u.ENTITIES})]}),a(c,{className:h.tableContent,children:[y===u.CHECKS&&e(ze,{trackId:t.id,checks:te,checkStatuses:U,isLoading:f||ae,searchValue:n}),y===u.TOP_FAILING_CHECKS&&e(oi,{track:t,checkStatuses:U,certificationStatus:B?.certificationStatus,searchValue:n}),y===u.ENTITIES&&e(si,{isCampaign:!0,track:t,lifecycles:l,owners:m,types:d,systems:p,certificationStatus:Pe(P)?void 0:Ze[P[0]],searchValue:n})]})]}),i&&M&&e(ai,{campaign:i,isOpen:M,handleClose:()=>ie(!1)})]})]})};export{ci as CampaignPageBUI};
1
+ import{jsx as e,jsxs as a,Fragment as $}from"react/jsx-runtime";import{parseEntityRef as we}from"@backstage/catalog-model";import{useRouteRef as F}from"@backstage/core-plugin-api";import{usePermission as Re}from"@backstage/plugin-permission-react";import{Container as b,HeaderPage as Le,Box as c,Flex as Q,Text as g,Grid as N}from"@backstage/ui";import{makeStyles as Fe}from"@material-ui/core";import{toEntityFilterQuery as Ne,soundcheckCampaignReadPermission as Pe}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as xe}from"lodash";import{DateTime as S}from"luxon";import{useState as v,useMemo as I,useEffect as J}from"react";import{useParams as Ae,useSearchParams as De}from"react-router-dom";import Oe from"react-use/lib/useDebounce";import He from"react-use/lib/useLocalStorage";import{useCheckStatuses as Me}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as je}from"../../hooks/filters/useFilters.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as Be}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Ue}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as Ke}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useLCPReporting as Ve}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as _e}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as Ge,campaignOverviewRouteRef as qe,campaignExplorerRouteRef as $e}from"../../routes.esm.js";import{DescriptionCard as Qe}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Je}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as We}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Xe}from"../ChipSelector/ChipSelector.esm.js";import{EmptyStateBUI as W}from"../EmptyState/EmptyStateBUI.esm.js";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ye}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ze,CERTIFICATION_STATUS_MAP as ze}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as ei}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as ii}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as ti}from"../Menus/useCampaignActions.esm.js";import{PageCustomActions as ri}from"../PageCustomActions/PageCustomActions.esm.js";import{SendCampaignNotificationDialogBUI as ai}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TopFailingChecksTableBUI as oi}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as si}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";import{CampaignStatusCard as ni}from"./CampaignStatusCard.esm.js";const ci=Fe(()=>({container:{marginBottom:"var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},tabPanel:{padding:"var(--bui-space-6) 0 0"},tabs:{margin:"0 0 var(--bui-space-12)"},cards:{margin:"0 0 var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"}})),u={CHECKS:"Checks",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},mi=()=>{const{owners:m,lifecycles:l,types:d,systems:p,certificationStatuses:P}=Ye(),{campaignId:o}=Ae(),X=F(Ge),[s,E]=De(),[n,x]=v(s.get("search")||""),[A,Y]=v(""),[D,Z]=v(new Set([u.CHECKS])),C=D.values().next().value??u.CHECKS;Oe(()=>{Y(n);const r=new URLSearchParams(s.toString());n?r.set("search",n):r.delete("search"),E(r,{replace:!0})},300,[n]);const O=I(()=>({routeName:"soundcheck-campaign-insights",additionalAttributes:{campaignId:o||"",filtersApplied:m.length+l.length+d.length+p.length,ownersFilter:m?.join(",")||"",lifecyclesFilter:l?.join(",")||"",typesFilter:d?.join(",")||"",systemsFilter:p?.join(",")||"",campaignsSearch:A||""}}),[o,m,l,d,p,A]),{reportContentLoaded:H}=_e(O),{reporter:z}=Ve(O),h=ci(),T=I(()=>Ze({lifecycles:l,owners:m,types:d,systems:p}),[l,m,d,p]),{data:ee,isLoading:f,isError:ie}=Be({ids:[o],first:1}),i=ee?.edges?.[0]?.node,{actions:M,showNotificationDialog:j,setShowNotificationDialog:te}=ti(i??void 0),t=i?.track,re=I(()=>t?.levels.flatMap(r=>r.checks),[t?.levels]),ae=Array.from(new Set(t?.levels.flatMap(r=>r.checks).map(r=>r.id)??[])),{data:B,isLoading:oe}=Me({trackId:t?.id,checkIds:ae,filter:T},!!t),se=I(()=>Ne(t?.filter),[t]),{filters:ne,selected:ce,setSelected:me,onRemoveTag:le,selectedTags:de}=je({entityFilterQuery:se,hasCertificationStatusFilters:!0}),{data:U,isLoading:k,isError:pe}=Ue({trackId:t?.id??"",filter:T},!!i),he=S.fromISO(i?.startDate),fe=Math.max(Math.ceil(S.now().diff(he,"days").days),1),{data:K,isLoading:ge,isError:ue}=Ke({trackId:t?.id??"",filter:T,numberOfDays:fe},!!i),w=ie||pe||ue,{loading:Se,allowed:Ce}=Re({permission:Pe,resourceRef:o}),V=z?.getLCPValue();J(()=>{!f&&!k&&H({lcp:V})},[f,k,H,V]);const[y,_]=v(!1),[R,L]=He("campaign-overview-search-params","");J(()=>{!y&&s?.toString()?(R!==s.toString()&&L(s.toString()),_(!0)):y?y&&R!==s.toString()&&L(s.toString()):_(!0)},[s,E,L,R,y]);const ye=r=>{Z(r),x(""),E({},{replace:!0})},be=F(qe),ve=F($e);if(f)return e(b,{className:h.container,children:e(ei,{})});if(!f&&!i)return e(b,{className:h.container,children:e(W,{title:"Campaign not found",body:`There is no campaign with the requested id: ${o}.`})});if(!Se&&!Ce)return e(b,{className:h.container,children:e(W,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${o}.`})});const G=i?.ownerEntityRef,Ie=G?we(G).name:void 0,Ee=S.fromISO(i?.startDate),q=S.fromISO(i?.targetCompletionDate),Te=S.now(),ke=Math.max(Math.ceil(q.diff(Te,"days").days),0);return a($,{children:[e(Le,{title:i?.name,customActions:e(ii,{disabled:!M.length,placement:"left top",menuActions:M,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:X()}],tabs:[{id:"overview",label:"Campaign Overview",href:o?be({campaignId:o}):""},{id:"explorer",label:"Tech Insights Explorer",href:o?ve({campaignId:o}):""}]}),a(b,{className:h.container,children:[a(c,{className:h.cards,children:[e(Qe,{description:i?.description??void 0,owner:Ie,isError:w,isLoading:f}),e(ni,{campaign:i,status:U,history:K,isError:w,isLoading:k,children:a($,{children:[a(Q,{align:"baseline",mt:"3",children:[e(g,{as:"h1",variant:"title-medium",weight:"bold",children:ke}),e(g,{variant:"body-small",children:"Days remaining"})]}),a(N.Root,{children:[a(N.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"Start date"})}),e(c,{children:e(g,{variant:"body-small",children:Ee.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]}),a(N.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"End date"})}),e(c,{children:e(g,{variant:"body-small",children:q.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]})]})]})}),e(Je,{track:i?.track,history:K,isCampaign:!0,isError:w,isLoading:ge})]}),t&&a(c,{children:[a(Q,{justify:"between",children:[e(c,{minWidth:"16rem",children:e(Xe,{options:["Checks","Top Failing Checks","Entities"],selected:D,ariaLabel:"Sections",onSelectionChange:ye})}),e(ri,{searchValue:n,setSearchValue:r=>x(r),filters:ne,selected:ce,setSelected:me,onRemoveTag:le,selectedTags:de,showSearch:C!==u.ENTITIES})]}),a(c,{className:h.tableContent,children:[C===u.CHECKS&&e(We,{trackId:t.id,checks:re,checkStatuses:B,isLoading:f||oe,searchValue:n}),C===u.TOP_FAILING_CHECKS&&e(oi,{track:t,checkStatuses:B,certificationStatus:U?.certificationStatus,searchValue:n}),C===u.ENTITIES&&e(si,{isCampaign:!0,track:t,lifecycles:l,owners:m,types:d,systems:p,certificationStatus:xe(P)?void 0:ze[P[0]],searchValue:n})]})]}),i&&j&&e(ai,{campaign:i,isOpen:j,handleClose:()=>te(!1)})]})]})};export{mi as CampaignPageBUI};
2
2
  //# sourceMappingURL=CampaignPageBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{Skeleton as v,Box as c,Flex as h}from"@backstage/ui";import{makeStyles as B}from"@material-ui/core";import{useMemo as n}from"react";import{calculateAdjustedBarWidths as S}from"../../utils/charts.esm.js";const k=B(()=>({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)"}})),y=({campaign:u,status:m})=>{const a=k(),d=u?.track,e=m?.certificationStatus?.statusByLevel[0],l=["var(--bui-fg-success)","var(--bui-fg-danger)","var(--bui-fg-disabled)"],t=n(()=>[e?.passed??0,e?.failed??0,e?.notReported??0],[e]),b=t.every(i=>i===0),p=n(()=>S(t),[t]);if(!d||!m)return r(v,{width:"100%"});let s;return b?s=r(c,{className:`${a.barSegment} ${a.emptyBar}`}):s=t.map((i,o)=>{const g=l[o]||"var(--bui-fg-disabled)",f=p[o]||0;return i<=0?null:r(c,{className:a.barSegment,style:{backgroundColor:g,width:`${f}%`}},`track-status-bar-segment-${o}`)}),r(h,{className:a.container,children:s})};export{y as CampaignStatusBarBUI};
2
+ //# sourceMappingURL=CampaignStatusBarBUI.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as o,Fragment as c}from"react/jsx-runtime";import{Text as m,Flex as l,Card as u,CardHeader as g,CardBody as h}from"@backstage/ui";import{makeStyles as C}from"@material-ui/core";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as f}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as y}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{CampaignStatusBarBUI as S}from"./CampaignStatusBarBUI.esm.js";import{CampaignStatusTableBUI as x}from"./CampaignStatusTableBUI.esm.js";const B=C(()=>({card:{minHeight:"15.1rem"}})),H=({campaign:i,status:a,children:e,isLoading:n,isError:s,history:d})=>{const p=B();let r;return!i||!a?r=t(f,{title:"Campaign status not found",body:"There is no status for the requested campaign."}):n?r=t(y,{rowCount:3}):s?r=t(m,{color:"warning",children:"Failed to load campaign data."}):r=o(c,{children:[o(l,{direction:"column",gap:"6",children:[t(S,{campaign:i,status:a}),t(x,{status:a,statusHistory:d})]}),e]}),o(u,{className:p.card,children:[t(g,{children:t(m,{color:"secondary",children:"Current Status"})}),t(h,{children:r})]})};export{H as CampaignStatusCard};
2
+ //# sourceMappingURL=CampaignStatusCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as l,jsx as r}from"react/jsx-runtime";import{Text as d,Flex as S}from"@backstage/ui";import{makeStyles as N,createStyles as C}from"@material-ui/core/styles";import{RiLineChartLine as L,RiArrowRightDownBoxLine as B,RiArrowRightUpBoxLine as F}from"@remixicon/react";import{memo as T,useMemo as $,Fragment as D}from"react";import{compactNumberFormatter as v}from"../../utils/formatters.esm.js";const M=N(()=>C({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)"}})),W=T(({status:m,statusHistory:n})=>{const a=M(),e=m?.certificationStatus.numberOfEntities??0,t=m?.certificationStatus.statusByLevel[0],p=t?.passed??0,h=e>0?Math.round(p/e*100):0,u=t?.failed??0,f=e>0?Math.round(u/e*100):0,g=t?.notReported??0,b=e>0?Math.round(g/e*100):0,s=$(()=>{if(e===void 0||n===void 0||t===void 0)return;const o=(n.certificationStatusHistory.history[0]?.statusByLevel[0].passed??0)/e*100;return t.passed/e*100-o},[n,t,e]);let c=L,i;s&&(i=`${s.toFixed(0)}% since campaign start`,s<=-1?(c=B,i=`${i}`):s>=1&&(c=F,i=`+${i}`));const y=[{label:"Passing",value:p,percentage:h,color:"var(--bui-fg-success)"},{label:"Failing",value:u,percentage:f,color:"var(--bui-fg-danger)"},{label:"Not Reported",value:g,percentage:b,color:"var(--bui-fg-disabled)"}];return l("div",{className:a.container,children:[y.map(({label:o,value:x,percentage:w,color:R})=>l(D,{children:[r("div",{className:a.item,children:l("div",{className:a.category,children:[r("span",{className:a.legendDash,style:{backgroundColor:R}}),r(d,{className:a.categoryText,variant:"body-small",children:o})]})}),r("div",{className:`${a.item} ${a.valueCell}`,children:l(d,{variant:"body-small",children:[v(x)," of"," ",v(e)," (",w,"%)"]})})]},o)),!!s&&l(S,{align:"center",gap:"1",children:[r(c,{size:"16",color:"var(--bui-gray-5)"}),r(d,{variant:"body-x-small",style:{color:"var(--bui-gray-8)"},children:i})]})]})});export{W as CampaignStatusTableBUI};
2
+ //# sourceMappingURL=CampaignStatusTableBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as d,Fragment as k}from"react/jsx-runtime";import{useApi as Q,useRouteRef as N}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Y}from"@backstage/plugin-catalog-react";import{usePermission as _}from"@backstage/plugin-permission-react";import{HeaderPage as q,Container as J,Table as X,TableHeader as Z,Column as s,TableBody as ee,TablePagination as te}from"@backstage/ui";import{makeStyles as re}from"@material-ui/core";import{RiCalendarLine as ie}from"@remixicon/react";import{soundcheckCampaignCreatePermission as oe}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ae,isEmpty as T}from"lodash";import{DateTime as A}from"luxon";import{useState as P,useMemo as l,useEffect as ne}from"react";import{useSearchParams as me}from"react-router-dom";import se 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{useGetCampaigns as pe}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as ce}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as de}from"../../hooks/catalog/useProfileImages.esm.js";import{useLCPReporting as le}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ge}from"../../hooks/useLoadTimeReporting.esm.js";import{useSearchNameOwner as fe}from"../../hooks/useSearchNameOwner.esm.js";import{campaignCreateRouteRef as he,campaignDetailsRouteRef as ue}from"../../routes.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as we}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoCampaigns as ye}from"../EmptyState/EmptyStateNoCampaigns.esm.js";import{ListPageCustomActions as Ce}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Se}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import"js-yaml";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{useCampaignActions as Pe}from"../Menus/useCampaignActions.esm.js";import"@material-ui/icons/AddAlert";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import"../FormFieldLabel/FormFieldLabel.esm.js";import"../LoadingIndicator/LoadingIndicator.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{SendCampaignNotificationDialogBUI as Re}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TableRowWithOwner as Le}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const M=10,ve=["name","status","days-remaining","owner"],B=t=>{const i=A.fromISO(t),n=A.now();return Math.max(Math.ceil(i.diff(n,"days").days),0)},De=({campaign:t,profileImageMap:i})=>{const n=l(()=>t.archived?0:B(t.targetCompletionDate),[t.archived,t.targetCompletionDate]),o=N(ue),g=l(()=>t.track.levels.reduce((w,h)=>w+(h.checks?.length??0),0),[t.track.levels]),{actions:p,showNotificationDialog:f,setShowNotificationDialog:a}=Pe(t);return d(k,{children:[r(Le,{ownerEntityRef:t.ownerEntityRef,href:o({campaignId:t.id}),profileImageSrc:i[t.ownerEntityRef],menuActions:p,name:t.name??"",description:t.description??"",cells:[{title:t.archived?"Archived":"Active"},{title:`${n} day${n===1?"":"s"} remaining`,icon:r(ie,{size:16})},{title:`${g} Check${g===1?"":"s"}`}]}),t&&f&&r(Re,{campaign:t,isOpen:f,handleClose:()=>a(!1)})]})},Ee=re(()=>({container:{marginBottom:"var(--bui-space-12)"}})),be=()=>{const t=Ee(),[i,n]=me(),[o,g]=P(()=>i.get("search")??""),[p,f]=P(()=>i.get("sortDirection")==="descending"?"descending":"ascending"),[a,w]=P(()=>{const e=i.get("sort");return e&&ve.includes(e)?e:""}),{data:h,isLoading:c}=pe({}),R=l(()=>h?.edges?.map(e=>e.node)??[],[h?.edges]),{profileImageMap:O}=de(R.map(e=>e.ownerEntityRef)),L=Q(Y),y=fe(R,o),v=l(()=>{if(!a)return y;const e=ae(y,m=>a==="owner"?L.forEntity(m.ownerEntityRef).snapshot.primaryTitle.toLowerCase():a==="status"?m.archived?"archived":"active":a==="days-remaining"?m.archived?-1:B(m.targetCompletionDate):m.name.toLowerCase());return p==="descending"&&e.reverse(),e},[L,a,p,y]),{paginatedItems:C,reset:D,paginationProps:U}=ce({pageParam:"perPage",defaultPageSize:M,items:v});se(()=>{D();const e=new URLSearchParams(i.toString());o?e.set("search",o):e.delete("search"),n(e,{replace:!0})},300,[o]);const x=({direction:e,column:m})=>{const S=String(m);w(S),f(e),D();const u=new URLSearchParams(i);S?u.set("sort",S):u.delete("sort"),u.set("sortDirection",e),n(u,{replace:!0})},{loading:H,allowed:$}=_({permission:oe}),V=N(he),E=l(()=>({routeName:"soundcheck-campaigns",additionalAttributes:{}}),[]),{reportContentLoaded:b}=ge(E),{reporter:z}=le(E),I=z?.getLCPValue();ne(()=>{c||b({lcp:I})},[c,b,I]);const j=!c&&!T(C),G=v.length>M,W=!c&&T(C),F=c,K=o?r(we,{title:"No campaigns found",body:"Your current search term did not return any campaigns. Please try a different search term."}):r(ye,{});return d(k,{children:[r(q,{customActions:r(Ce,{searchValue:o,setSearchValue:g,canCreate:!H&&$,createHref:V()}),title:"Campaigns"}),d(J,{className:t.container,children:[F&&r(Se,{rowCount:10}),W&&K,j&&d(X,{onSortChange:x,sortDescriptor:{direction:p,column:a},children:[d(Z,{children:[r(s,{allowsSorting:!0,isRowHeader:!0,id:"name",style:{width:"48%"},children:"Name"}),r(s,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),r(s,{allowsSorting:!0,id:"days-remaining",style:{width:"15%"},children:"Days Remaining"}),r(s,{id:"checks",style:{width:"10%"},children:"Checks"}),r(s,{allowsSorting:!0,id:"owner",style:{width:"15%"},children:"Campaign Owner"}),r(s,{style:{width:"2%"}})]}),r(ee,{children:C.map(e=>r(De,{campaign:e,profileImageMap:O??{}},e.id))})]}),G&&r(te,{...U})]})]})};export{be as CampaignListPageBUI};
1
+ import{jsx as r,jsxs as d,Fragment as I}from"react/jsx-runtime";import{useApi as Q,useRouteRef as T}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Y}from"@backstage/plugin-catalog-react";import{usePermission as _}from"@backstage/plugin-permission-react";import{HeaderPage as q,Container as J,Table as X,TableHeader as Z,Column as p,TableBody as ee,TablePagination as te}from"@backstage/ui";import{makeStyles as re}from"@material-ui/core";import{RiCalendarLine as ie}from"@remixicon/react";import{soundcheckCampaignCreatePermission as oe}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ae,isEmpty as N}from"lodash";import{DateTime as A}from"luxon";import{useState as S,useMemo as l,useCallback as ne,useEffect as me}from"react";import se 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{useGetCampaigns as pe}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePagination as ce}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as de}from"../../hooks/useSortSearchParams.esm.js";import{useProfileImages as le}from"../../hooks/catalog/useProfileImages.esm.js";import{useLCPReporting as ge}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as fe}from"../../hooks/useLoadTimeReporting.esm.js";import{useSearchNameOwner as he}from"../../hooks/useSearchNameOwner.esm.js";import{campaignCreateRouteRef as ue,campaignDetailsRouteRef as we}from"../../routes.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ye}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoCampaigns as Ce}from"../EmptyState/EmptyStateNoCampaigns.esm.js";import{ListPageCustomActions as Se}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Pe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import"js-yaml";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{useCampaignActions as Re}from"../Menus/useCampaignActions.esm.js";import"@material-ui/icons/AddAlert";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import"../FormFieldLabel/FormFieldLabel.esm.js";import"../LoadingIndicator/LoadingIndicator.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{SendCampaignNotificationDialogBUI as Le}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TableRowWithOwner as ve}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const M=10,De=["name","status","days-remaining","owner"],B=t=>{const m=A.fromISO(t),i=A.now();return Math.max(Math.ceil(m.diff(i,"days").days),0)},ke=({campaign:t,profileImageMap:m})=>{const i=l(()=>t.archived?0:B(t.targetCompletionDate),[t.archived,t.targetCompletionDate]),g=T(we),o=l(()=>t.track.levels.reduce((a,u)=>a+(u.checks?.length??0),0),[t.track.levels]),{actions:f,showNotificationDialog:s,setShowNotificationDialog:h}=Re(t);return d(I,{children:[r(ve,{ownerEntityRef:t.ownerEntityRef,href:g({campaignId:t.id}),profileImageSrc:m[t.ownerEntityRef],menuActions:f,name:t.name??"",description:t.description??"",cells:[{title:t.archived?"Archived":"Active"},{title:`${i} day${i===1?"":"s"} remaining`,icon:r(ie,{size:16})},{title:`${o} Check${o===1?"":"s"}`}]}),t&&s&&r(Le,{campaign:t,isOpen:s,handleClose:()=>h(!1)})]})},Ee=re(()=>({container:{marginBottom:"var(--bui-space-12)"}})),be=()=>{const t=Ee(),{updateSortParams:m,searchParams:i,setSearchParams:g}=de(),[o,f]=S(()=>i.get("search")??""),[s,h]=S(()=>i.get("sortDirection")==="descending"?"descending":"ascending"),[a,u]=S(()=>{const e=i.get("sort");return e&&De.includes(e)?e:""}),{data:P,isLoading:c}=pe({}),R=l(()=>P?.edges?.map(e=>e.node)??[],[P?.edges]),{profileImageMap:O}=le(R.map(e=>e.ownerEntityRef)),L=Q(Y),w=he(R,o),v=l(()=>{if(!a)return w;const e=ae(w,n=>a==="owner"?L.forEntity(n.ownerEntityRef).snapshot.primaryTitle.toLowerCase():a==="status"?n.archived?"archived":"active":a==="days-remaining"?n.archived?-1:B(n.targetCompletionDate):n.name.toLowerCase());return s==="descending"&&e.reverse(),e},[L,a,s,w]),{paginatedItems:y,reset:C,paginationProps:x}=ce({pageParam:"perPage",defaultPageSize:M,items:v});se(()=>{C();const e=new URLSearchParams(i.toString());o?e.set("search",o):e.delete("search"),g(e,{replace:!0})},300,[o]);const H=ne(({direction:e,column:n})=>{const b=String(n);u(b),h(e),C(),m({sort:b,sortDirection:e})},[C,m]),{loading:U,allowed:$}=_({permission:oe}),V=T(ue),D=l(()=>({routeName:"soundcheck-campaigns",additionalAttributes:{}}),[]),{reportContentLoaded:k}=fe(D),{reporter:z}=ge(D),E=z?.getLCPValue();me(()=>{c||k({lcp:E})},[c,k,E]);const j=!c&&!N(y),G=v.length>M,W=!c&&N(y),F=c,K=o?r(ye,{title:"No campaigns found",body:"Your current search term did not return any campaigns. Please try a different search term."}):r(Ce,{});return d(I,{children:[r(q,{customActions:r(Se,{searchValue:o,setSearchValue:f,canCreate:!U&&$,createHref:V()}),title:"Campaigns"}),d(J,{className:t.container,children:[F&&r(Pe,{rowCount:10}),W&&K,j&&d(X,{onSortChange:H,sortDescriptor:{direction:s,column:a},children:[d(Z,{children:[r(p,{allowsSorting:!0,isRowHeader:!0,id:"name",style:{width:"47%"},children:"Name"}),r(p,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),r(p,{allowsSorting:!0,id:"days-remaining",style:{width:"15%"},children:"Days Remaining"}),r(p,{id:"checks",style:{width:"10%"},children:"Checks"}),r(p,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Campaign Owner"}),r(p,{id:"actions",style:{width:"3%"}})]}),r(ee,{children:y.map(e=>r(ke,{campaign:e,profileImageMap:O??{}},e.id))})]}),G&&r(te,{...x})]})]})};export{be as CampaignListPageBUI};
2
2
  //# sourceMappingURL=CampaignListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r}from"react/jsx-runtime";import{useSearchParams as t}from"react-router-dom";import{useFeatureFlag as o}from"../../hooks/useFeatureFlag.esm.js";import{RESULTS_PER_PAGE as i}from"../../utils/filters.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as p}from"../SoundcheckHeader/useHeader.esm.js";import{CampaignListPageDeprecated as s}from"./CampaignListPage/CampaignListPageDeprecated.esm.js";import"./CampaignListPage/CampaignTypes.esm.js";import g from"./CampaignListPage/useArchiveConfirmationModal.esm.js";import{CampaignListPageBUI as n}from"./CampaignListPageBUI.esm.js";const P=()=>{const[a]=t(),e=a.get("campaignsPerPage"),m=e?parseInt(e,10):i;return p(),o("backstage-ui")?r(g,{children:r(n,{})}):r(s,{campaignsPerPage:m})};export{P as CampaignsPage};
1
+ import{jsx as m}from"react/jsx-runtime";import o from"./CampaignListPage/useArchiveConfirmationModal.esm.js";import{CampaignListPageBUI as r}from"./CampaignListPageBUI.esm.js";const i=()=>m(o,{children:m(r,{})});export{i as CampaignsPage};
2
2
  //# sourceMappingURL=CampaignsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as b,Fragment as s}from"react/jsx-runtime";import{useRouteRef as n}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{HeaderPage as L}from"@backstage/ui";import{soundcheckCampaignUpdatePermission as P}from"@spotify/backstage-plugin-soundcheck-common";import{useEffect as E}from"react";import{useParams as F}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as w}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";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{useUpdateCampaign as x}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as I}from"../../hooks/useNavigateBack.esm.js";import"react-use/lib/useLocalStorage";import{useGetCampaign as U}from"../../hooks/campaigns/useGetCampaign.esm.js";import{useFeatureFlag as A}from"../../hooks/useFeatureFlag.esm.js";import{campaignsPageRouteRef as p,campaignDetailsRouteRef as D}from"../../routes.esm.js";import{CampaignForm as S}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as j}from"../DocLinkButton/DocLinkButton.esm.js";import{PageWarningMessage as v}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as H}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as N}from"./CampaignEmptyState.esm.js";const G=()=>{B({title:"Update Campaign",description:"Update your campaign, including schedule, milestones, and other associated details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"});const[c,d]=I(p),{campaignId:t}=F(),{setIsLoading:e}=w(),{mutateAsync:g,isLoading:a}=x(),{data:f,isLoading:m}=U(t??""),i=f?.edges?.[0]?.node,{loading:u,allowed:r}=R({permission:P,resourceRef:i?.id});E(()=>e(a),[e,a]);const l=A("backstage-ui"),C=n(p),h=n(D);if(!m&&!i)return o(N,{});const k=async y=>{await g(y,{onSuccess:d})};return b(s,{children:[l&&o(L,{title:`Edit ${i?.name??t??"Campaign"}`,breadcrumbs:[{label:"All Campaigns",href:C()},{label:"Details",href:h({campaignId:t??""})}],customActions:o(j,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(v,{entityId:i?.id,entityName:i?.name??"",showCannotEdit:!u&&!r}),m?o(H,{}):o(s,{children:r&&o(S,{onSave:k,onCancel:c,selectedCampaign:i})})]})};export{G as EditCampaignView};
1
+ import{jsx as o,jsxs as y,Fragment as n}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{HeaderPage as b}from"@backstage/ui";import{soundcheckCampaignUpdatePermission as L}from"@spotify/backstage-plugin-soundcheck-common";import{useEffect as P}from"react";import{useParams as E}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as w}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";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{useUpdateCampaign as x}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as I}from"../../hooks/useNavigateBack.esm.js";import"react-use/lib/useLocalStorage";import{useGetCampaign as U}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as p,campaignDetailsRouteRef as A}from"../../routes.esm.js";import{CampaignForm as D}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as F}from"../DocLinkButton/DocLinkButton.esm.js";import{PageWarningMessage as S}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as j}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as v}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as B}from"./CampaignEmptyState.esm.js";const H=()=>{j({title:"Update Campaign",description:"Update your campaign, including schedule, milestones, and other associated details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"});const[c,d]=I(p),{campaignId:t}=E(),{setIsLoading:e}=w(),{mutateAsync:g,isLoading:a}=x(),{data:f,isLoading:m}=U(t??""),i=f?.edges?.[0]?.node,{loading:u,allowed:r}=R({permission:L,resourceRef:i?.id});P(()=>e(a),[e,a]);const l=s(p),C=s(A);if(!m&&!i)return o(B,{});const h=async k=>{await g(k,{onSuccess:d})};return y(n,{children:[o(b,{title:`Edit ${i?.name??t??"Campaign"}`,breadcrumbs:[{label:"All Campaigns",href:l()},{label:"Details",href:C({campaignId:t??""})}],customActions:o(F,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(S,{entityId:i?.id,entityName:i?.name??"",showCannotEdit:!u&&!r}),m?o(v,{}):o(n,{children:r&&o(D,{onSave:h,onCancel:c,selectedCampaign:i})})]})};export{H as EditCampaignView};
2
2
  //# sourceMappingURL=EditCampaignView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as t,jsx as r}from"react/jsx-runtime";import{useApi as n,configApiRef as d}from"@backstage/core-plugin-api";import{Card as l,CardHeader as f,Flex as h,Text as p,CardBody as u}from"@backstage/ui";import{makeStyles as y}from"@material-ui/core";import{CheckStatusHistoryChartBUI as k}from"../../CheckPage/CheckStatusHistoryChartBUI.esm.js";import{TimePeriodBarBUI as C}from"../../TimePeriodBar/TimePeriodBarBUI.esm.js";const I=y(()=>({card:{minHeight:"15.1rem"},cardBody:{marginTop:"var(--bui-space-1)"}})),b=({checkId:a,trackId:i,filter:c,states:o,numberOfDays:s})=>{const e=I(),m=n(d).getOptionalNumber("soundcheck.certifications.history.retentionTimeInDays");return t(l,{className:e.card,children:[r(f,{children:t(h,{align:"center",justify:"between",children:[r(p,{color:"secondary",children:"Historical Status"}),r(C,{maxNumberOfDays:m})]})}),r(u,{className:e.cardBody,children:r(k,{checkId:a,trackId:i,filter:c,states:o,numberOfDays:s})})]})};export{b as HistoricalCheckStatusCard};
1
+ import{jsxs as t,jsx as r}from"react/jsx-runtime";import{useApi as n,configApiRef as l}from"@backstage/core-plugin-api";import{Card as f,CardHeader as h,Flex as u,Text as p,CardBody as y}from"@backstage/ui";import{makeStyles as k}from"@material-ui/core";import{CheckStatusHistoryChartBUI as C}from"../../CheckPage/CheckStatusHistoryChartBUI.esm.js";import{TimePeriodBarBUI as I}from"../../TimePeriodBar/TimePeriodBarBUI.esm.js";const b=k(()=>({card:{minHeight:"15.1rem"},cardBody:{marginTop:"var(--bui-space-1)"}})),g=({checkId:a,trackId:c,filter:i,states:s,numberOfDays:o,checkStatus:d})=>{const e=b(),m=n(l).getOptionalNumber("soundcheck.certifications.history.retentionTimeInDays");return t(f,{className:e.card,children:[r(h,{children:t(u,{align:"center",justify:"between",children:[r(p,{color:"secondary",children:"Historical Status"}),r(I,{maxNumberOfDays:m})]})}),r(y,{className:e.cardBody,children:r(C,{checkId:a,trackId:c,filter:i,states:s,checkStatus:d,numberOfDays:o})})]})};export{g as HistoricalCheckStatusCard};
2
2
  //# sourceMappingURL=HistoricalCheckStatusCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as i,Fragment as l}from"react/jsx-runtime";import{Text as e,Flex as p,Card as u,CardHeader as f,CardBody as h}from"@backstage/ui";import{makeStyles as k}from"@material-ui/core";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as g}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../../routes.esm.js";import{LoadingTableSkeleton as S}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{TrackStatusBarBUI as C}from"../../TrackPage/TrackStatusBarBUI.esm.js";import{TrackStatusTableBUI as T}from"../../TrackPage/TrackStatusTableBUI.esm.js";const x=k(()=>({card:{minHeight:"15.1rem"}})),y=({track:a,status:o,children:c,isLoading:s,isError:n,isCampaign:m})=>{const d=x();let r;return!a||!o?r=t(g,{title:"Track status not found",body:"There is no status for the requested track."}):s?r=t(S,{rowCount:3}):n?r=t(e,{color:"warning",children:"Failed to load track data."}):r=i(l,{children:[i(p,{direction:"column",gap:"6",children:[t(C,{track:a,status:o?.certificationStatus}),t(T,{track:a,status:o?.certificationStatus,isCampaign:m})]}),c]}),i(u,{className:d.card,children:[t(f,{children:t(e,{color:"secondary",children:"Current Status"})}),t(h,{children:r})]})};export{y as TrackStatusCard};
1
+ import{jsx as r,Fragment as n,jsxs as i}from"react/jsx-runtime";import{Text as e,Flex as d,Card as l,CardHeader as p,CardBody as u}from"@backstage/ui";import{makeStyles as k}from"@material-ui/core";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as f}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../../routes.esm.js";import{LoadingTableSkeleton as h}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{TrackStatusBarBUI as S}from"../../TrackPage/TrackStatusBarBUI.esm.js";import{TrackStatusTableBUI as T}from"../../TrackPage/TrackStatusTableBUI.esm.js";const g=k(()=>({card:{minHeight:"15.1rem"}})),C=({track:o,status:a,isLoading:c,isError:s})=>{const m=g();let t;return!o||!a?t=r(f,{title:"Track status not found",body:"There is no status for the requested track."}):c?t=r(h,{rowCount:3}):s?t=r(e,{color:"warning",children:"Failed to load track data."}):t=r(n,{children:i(d,{direction:"column",gap:"6",children:[r(S,{track:o,status:a?.certificationStatus}),r(T,{track:o,status:a})]})}),i(l,{className:m.card,children:[r(p,{children:r(e,{color:"secondary",children:"Current Status"})}),r(u,{children:t})]})};export{C as TrackStatusCard};
2
2
  //# sourceMappingURL=TrackStatusCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as w,jsx as s}from"react/jsx-runtime";import{Typography as N,useTheme as U,Tooltip as M}from"@material-ui/core";import{makeStyles as q,createStyles as G}from"@material-ui/core/styles";import{schemeCategory10 as H}from"d3-scale-chromatic";import $ from"lodash";import{memo as L,useRef as J,useState as X,useEffect as K,useMemo as C}from"react";const P=e=>{let r=e;for(;r;){const t=window.getComputedStyle(r).backgroundColor;if(t&&t!=="rgba(0, 0, 0, 0)"&&t!=="transparent")return t;r=r.parentElement}return"transparent"},O=(e,r,t,c,l)=>{if($.isUndefined(e))return"";if(e===0){for(let a=0;a<r.length;a++)if(r[a]>0)return l?.[t[a]]??c[a]}let p=0;for(let a=0;a<r.length;a++)if(p+=r[a],p>=e)return l?.[t[a]]??c[a];return l?.[t[r.length-1]]??c[r.length-1]},j=(e,r)=>e?e/r*100:0,Q=(e,r=2)=>{if(e.length===0)return[];const t=e.filter(i=>i>0),c=$.sum(t);if(c===0)return e.map(()=>0);const l=e.map(i=>i>0?i/c*100:0),p=l.filter(i=>i>0&&i<r).length,a=p*r;if(p===0||a>=100)return l;const o=100-a,m=l.filter(i=>i>=r).reduce((i,d)=>i+d,0);return l.map(i=>i===0?0:i<r?r:m>0?i/m*o:i)},z=q(e=>G({container:{display:"flex",flexDirection:"column",width:"100%"},barWrapper:{position:"relative",width:"100%"},barContainer:{display:"flex",height:e.spacing(1),overflow:"hidden",borderRadius:4,width:"100%",gap:1},barSegment:{height:"100%",minWidth:8},barLabel:{position:"absolute",fontSize:"0.875rem",whiteSpace:"nowrap",transform:"translateX(-50%)"},marker:{position:"absolute",width:6,height:16,top:0,bottom:0,borderRadius:4,transform:"translate(-50%, -25%)"},tooltip:{color:e.palette.text.primary,fontSize:12,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,fontSize:"0.875rem",marginRight:e.spacing(2)},value:{fontWeight:e.typography.fontWeightMedium,fontSize:"0.875rem",color:e.palette.text.primary}})),D=L(({data:e,categories:r,valueFormatter:t,type:c,labelPosition:l})=>{const p=z(),a=r.map(d=>e[d]),o=$.sum(a);let m=0,i=0;return w("div",{className:p.barWrapper,children:[a.map((d,x)=>{m+=d;const y=(d>=.1*o||i>=.09*o)&&o-m>=.1*o&&m>=.1*o&&m<.9*o;i=y?0:i+=d;const g=j(m,o),k=c==="percent"?`${Math.round(m/o*100)}%`:t(m);return s("div",{className:p.barLabel,style:{left:`${g}%`,top:l==="top"?"-1.5rem":"1.5rem"},children:y&&s(N,{variant:"caption",children:k})},`item-${x}`)}),s(N,{variant:"caption",style:{position:"absolute",bottom:0,left:0},children:c==="percent"?"0%":t(0)}),s(N,{variant:"caption",style:{position:"absolute",bottom:0,right:0},children:c==="percent"?"100%":t(o)})]})}),V=L(e=>{const r=U(),t=z(),{data:c={},categories:l=[],colors:p=H,categoryColors:a,marker:o,showLabels:m=!1,showTooltip:i=!0,valueFormatter:d=n=>n.toString(),categoryFormatter:x=n=>n,type:y="value",labelPosition:g="top",className:k,...E}=e,f=l.map(n=>c[n]).filter(n=>typeof n=="number"),S=J(null),[T,B]=X("transparent");K(()=>{if(S.current){const n=P(S.current);B(n)}},[S]);const A=C(()=>O(o?.value,f,l,p,a),[o,f,l,p,a]),h=C(()=>$.sum(f),[f]),W=C(()=>Q(f),[f]),F=C(()=>{if(!$.isUndefined(o))return o.value<0?0:o.value>h?h:o.value},[o,h]),I=C(()=>j(F,h),[F,h]);return h<=0?null:s("div",{ref:S,className:`${k} ${t.container}`,...E,children:w("div",{className:t.barWrapper,children:[m&&g==="top"&&s(D,{data:c,categories:l,valueFormatter:d,type:y,labelPosition:g}),s("div",{className:t.barContainer,children:i?s(M,{title:s("div",{className:t.tooltip,children:l.filter(n=>c[n]>0).map((n,u)=>{const b=c[n],v=a?.[n]??p[u]??"gray";return w("div",{className:t.item,children:[w("div",{className:t.category,children:[s("span",{className:t.legendDash,style:{backgroundColor:v}}),s(N,{variant:"caption",children:x(n)})]}),s("div",{className:t.value,children:w(N,{variant:"caption",children:[d(b)," of ",d(h)," ","(",Math.round(b/h*100),"%)"]})})]},`tooltip-item-${u}`)})}),placement:"top",arrow:!0,classes:{tooltip:t.tooltip},children:s("div",{className:t.barContainer,children:l.map((n,u)=>{const b=c[n],v=a?.[n]??p[u]??"gray",R=W[u]||0;return b<=0?null:s("div",{className:t.barSegment,style:{backgroundColor:v,width:`${R}%`}},`item-${u}`)})})}):s("div",{className:t.barContainer,children:l.map((n,u)=>{const b=c[n],v=a?.[n]??p[u]??r.palette.text.disabled,R=W[u]||0;return b<=0?null:s("div",{className:t.barSegment,style:{backgroundColor:v,width:`${R}%`}},`item-${u}`)})})}),o!==void 0&&s(M,{title:o.tooltip||"",arrow:!0,children:s("div",{className:t.marker,style:{left:`${I}%`,backgroundColor:A,border:`1px solid ${T}`,transition:o.showAnimation?"all 0.3s ease-in-out":"none"}})}),m&&g==="bottom"&&s(D,{data:c,categories:l,valueFormatter:d,type:y,labelPosition:g})]})})});export{V as CategoryBar,P as getEffectiveBackgroundColor};
1
+ import{jsxs as w,jsx as s}from"react/jsx-runtime";import{Typography as N,useTheme as U,Tooltip as M}from"@material-ui/core";import{makeStyles as q,createStyles as G}from"@material-ui/core/styles";import{schemeCategory10 as H}from"d3-scale-chromatic";import $ from"lodash";import{memo as L,useRef as X,useState as J,useEffect as K,useMemo as C}from"react";const P=e=>{let r=e;for(;r;){const t=window.getComputedStyle(r).backgroundColor;if(t&&t!=="rgba(0, 0, 0, 0)"&&t!=="transparent")return t;r=r.parentElement}return"transparent"},O=(e,r,t,c,l)=>{if($.isUndefined(e))return"";if(e===0){for(let a=0;a<r.length;a++)if(r[a]>0)return l?.[t[a]]??c[a]}let p=0;for(let a=0;a<r.length;a++)if(p+=r[a],p>=e)return l?.[t[a]]??c[a];return l?.[t[r.length-1]]??c[r.length-1]},j=(e,r)=>e?e/r*100:0,Q=(e,r=2)=>{if(e.length===0)return[];const t=e.filter(i=>i>0),c=$.sum(t);if(c===0)return e.map(()=>0);const l=e.map(i=>i>0?i/c*100:0),p=l.filter(i=>i>0&&i<r).length,a=p*r;if(p===0||a>=100)return l;const o=100-a,m=l.filter(i=>i>=r).reduce((i,d)=>i+d,0);return l.map(i=>i===0?0:i<r?r:m>0?i/m*o:i)},z=q(e=>G({container:{display:"flex",flexDirection:"column",width:"100%"},barWrapper:{position:"relative",width:"100%"},barContainer:{display:"flex",height:e.spacing(1),overflow:"hidden",borderRadius:4,width:"100%",gap:1},barSegment:{height:"100%",minWidth:8},barLabel:{position:"absolute",fontSize:"0.875rem",whiteSpace:"nowrap",transform:"translateX(-50%)"},marker:{position:"absolute",width:6,height:16,top:0,bottom:0,borderRadius:4,transform:"translate(-50%, -25%)"},tooltip:{color:e.palette.text.primary,fontSize:12,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,fontSize:"0.875rem",marginRight:e.spacing(2)},value:{fontWeight:e.typography.fontWeightMedium,fontSize:"0.875rem",color:e.palette.text.primary}})),D=L(({data:e,categories:r,valueFormatter:t,type:c,labelPosition:l})=>{const p=z(),a=r.map(d=>e[d]),o=$.sum(a);let m=0,i=0;return w("div",{className:p.barWrapper,children:[a.map((d,x)=>{m+=d;const v=(d>=.1*o||i>=.09*o)&&o-m>=.1*o&&m>=.1*o&&m<.9*o;i=v?0:i+=d;const g=j(m,o),k=c==="percent"?`${Math.round(m/o*100)}%`:t(m);return s("div",{className:p.barLabel,style:{left:`${g}%`,top:l==="top"?"-1.5rem":"1.5rem"},children:v&&s(N,{variant:"caption",children:k})},`item-${x}`)}),s(N,{variant:"caption",style:{position:"absolute",bottom:0,left:0},children:c==="percent"?"0%":t(0)}),s(N,{variant:"caption",style:{position:"absolute",bottom:0,right:0},children:c==="percent"?"100%":t(o)})]})});L(e=>{const r=U(),t=z(),{data:c={},categories:l=[],colors:p=H,categoryColors:a,marker:o,showLabels:m=!1,showTooltip:i=!0,valueFormatter:d=n=>n.toString(),categoryFormatter:x=n=>n,type:v="value",labelPosition:g="top",className:k,...E}=e,f=l.map(n=>c[n]).filter(n=>typeof n=="number"),S=X(null),[T,A]=J("transparent");K(()=>{if(S.current){const n=P(S.current);A(n)}},[S]);const B=C(()=>O(o?.value,f,l,p,a),[o,f,l,p,a]),h=C(()=>$.sum(f),[f]),W=C(()=>Q(f),[f]),F=C(()=>{if(!$.isUndefined(o))return o.value<0?0:o.value>h?h:o.value},[o,h]),I=C(()=>j(F,h),[F,h]);return h<=0?null:s("div",{ref:S,className:`${k} ${t.container}`,...E,children:w("div",{className:t.barWrapper,children:[m&&g==="top"&&s(D,{data:c,categories:l,valueFormatter:d,type:v,labelPosition:g}),s("div",{className:t.barContainer,children:i?s(M,{title:s("div",{className:t.tooltip,children:l.filter(n=>c[n]>0).map((n,u)=>{const b=c[n],y=a?.[n]??p[u]??"gray";return w("div",{className:t.item,children:[w("div",{className:t.category,children:[s("span",{className:t.legendDash,style:{backgroundColor:y}}),s(N,{variant:"caption",children:x(n)})]}),s("div",{className:t.value,children:w(N,{variant:"caption",children:[d(b)," of ",d(h)," ","(",Math.round(b/h*100),"%)"]})})]},`tooltip-item-${u}`)})}),placement:"top",arrow:!0,classes:{tooltip:t.tooltip},children:s("div",{className:t.barContainer,children:l.map((n,u)=>{const b=c[n],y=a?.[n]??p[u]??"gray",R=W[u]||0;return b<=0?null:s("div",{className:t.barSegment,style:{backgroundColor:y,width:`${R}%`}},`item-${u}`)})})}):s("div",{className:t.barContainer,children:l.map((n,u)=>{const b=c[n],y=a?.[n]??p[u]??r.palette.text.disabled,R=W[u]||0;return b<=0?null:s("div",{className:t.barSegment,style:{backgroundColor:y,width:`${R}%`}},`item-${u}`)})})}),o!==void 0&&s(M,{title:o.tooltip||"",arrow:!0,children:s("div",{className:t.marker,style:{left:`${I}%`,backgroundColor:B,border:`1px solid ${T}`,transition:o.showAnimation?"all 0.3s ease-in-out":"none"}})}),m&&g==="bottom"&&s(D,{data:c,categories:l,valueFormatter:d,type:v,labelPosition:g})]})})});export{P as getEffectiveBackgroundColor};
2
2
  //# sourceMappingURL=CategoryBar.esm.js.map