@spotify/backstage-plugin-soundcheck 0.22.4 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/alpha/CampaignsRouterPage.esm.js +2 -0
  3. package/dist/alpha/ChecksRouterPage.esm.js +2 -0
  4. package/dist/alpha/IntegrationsRouterPage.esm.js +2 -0
  5. package/dist/alpha/OverviewPageWrapper.esm.js +2 -0
  6. package/dist/alpha/TracksRouterPage.esm.js +2 -0
  7. package/dist/alpha/plugin.esm.js +1 -1
  8. package/dist/alpha.d.ts +155 -59
  9. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  10. package/dist/components/Badge/Badge.esm.js +2 -0
  11. package/dist/components/Badges/LevelBadge.esm.js +1 -1
  12. package/dist/components/Badges/StatusBadge.esm.js +1 -1
  13. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  14. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  15. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  16. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  17. package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +1 -1
  18. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  19. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  20. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  21. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  22. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +1 -1
  23. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  24. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  25. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  26. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  27. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  28. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  29. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  30. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  31. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  32. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  33. package/dist/components/CheckDetails/CheckPullRequest.esm.js +1 -1
  34. package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
  35. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  36. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  37. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  38. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  39. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  40. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  41. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  42. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  43. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  44. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  45. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  46. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  47. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
  48. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  49. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  50. package/dist/components/CheckPage/utils.esm.js +1 -1
  51. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  52. package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +1 -1
  53. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
  54. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  55. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  56. package/dist/components/ChecksTable/FixMeCell.esm.js +1 -1
  57. package/dist/components/ChecksTable/PullRequestsTable.esm.js +1 -1
  58. package/dist/components/ChecksTable/utils.esm.js +2 -0
  59. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  60. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  61. package/dist/components/CollectorPage/CollectorStatus.esm.js +2 -0
  62. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  63. package/dist/components/CollectorPage/Configurators/AzureDevOps/validation.esm.js +1 -1
  64. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  65. package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +1 -1
  66. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  67. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  68. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  69. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  70. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  71. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  72. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  73. package/dist/components/CollectorPage/Configurators/Github/validation.esm.js +1 -1
  74. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  75. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  76. package/dist/components/CollectorPage/Configurators/HTTP/validation.esm.js +1 -1
  77. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  78. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
  79. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  80. package/dist/components/CollectorPage/Configurators/Kubernetes/validation.esm.js +1 -1
  81. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  82. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  83. package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +1 -1
  84. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
  85. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  86. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
  87. package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
  88. package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaBasedConfigurator.esm.js +2 -0
  89. package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaField.esm.js +2 -0
  90. package/dist/components/CollectorPage/Configurators/SchemaBased/utils.esm.js +2 -0
  91. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  92. package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +1 -1
  93. package/dist/components/CollectorPage/utils.esm.js +2 -0
  94. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  95. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
  96. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  97. package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +1 -1
  98. package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
  99. package/dist/components/EntityChip/EntityChip.esm.js +1 -1
  100. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  101. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  102. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  103. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  104. package/dist/components/Filter/FilterPreviewDisplay.esm.js +2 -0
  105. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  106. package/dist/components/FilterSidebar/util.esm.js +1 -1
  107. package/dist/components/FixMeBetaBadge/FixMeBetaBadge.esm.js +2 -0
  108. package/dist/components/FixMeButton/FixMeButton.esm.js +1 -1
  109. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  110. package/dist/components/FormattedPreview/FormattedPreview.esm.js +3 -3
  111. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +1 -1
  112. package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +1 -1
  113. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
  114. package/dist/components/GroupSelectorBUI/GroupTagsDisplay.esm.js +2 -0
  115. package/dist/components/GroupSelectorBUI/ListViewMode.esm.js +2 -0
  116. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  117. package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
  118. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  119. package/dist/components/Menus/useCheckActions.esm.js +1 -1
  120. package/dist/components/Menus/useTrackActions.esm.js +1 -1
  121. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  122. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  123. package/dist/components/Router.esm.js +1 -1
  124. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
  125. package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +1 -1
  126. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
  127. package/dist/components/StatusBar/StatusBar.esm.js +1 -1
  128. package/dist/components/Stepper/Stepper.esm.js +1 -1
  129. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  130. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  131. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
  132. package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
  133. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  134. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  135. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
  136. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
  137. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  138. package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +1 -1
  139. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  140. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  141. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  142. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  143. package/dist/components/TrackForm/utils/validation.esm.js +1 -1
  144. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
  145. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  146. package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +1 -1
  147. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
  148. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  149. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  150. package/dist/contexts/UserProvider.esm.js +1 -1
  151. package/dist/graphql/generated/index.esm.js +22 -13
  152. package/dist/hooks/catalog/useEntityPresentation.esm.js +2 -0
  153. package/dist/hooks/catalog/useEntityPrimaryTitle.esm.js +2 -0
  154. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  155. package/dist/hooks/checks/useChecks.esm.js +2 -0
  156. package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
  157. package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
  158. package/dist/hooks/filters/useFilters.esm.js +1 -1
  159. package/dist/hooks/filters/useListPageFilters.esm.js +2 -0
  160. package/dist/hooks/fixMe/useFixMe.esm.js +1 -1
  161. package/dist/hooks/fixWithAika/useFixWithAika.esm.js +1 -1
  162. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  163. package/dist/hooks/useChipScopedUrlState.esm.js +2 -0
  164. package/dist/hooks/usePagination.esm.js +1 -1
  165. package/dist/index.d.ts +130 -4
  166. package/dist/index.esm.js +1 -1
  167. package/dist/plugins/soundcheck/package.json.esm.js +2 -0
  168. package/dist/utils/charts.esm.js +1 -1
  169. package/dist/utils/facetFilters/utils.esm.js +1 -1
  170. package/dist/utils/filters.esm.js +1 -1
  171. package/dist/utils/validation.esm.js +1 -1
  172. package/package.json +24 -22
  173. package/dist/alpha/pages.esm.js +0 -2
  174. package/dist/components/CategoryBar/CategoryBar.esm.js +0 -2
  175. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +0 -2
  176. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +0 -2
  177. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +0 -2
  178. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +0 -2
  179. package/dist/components/CollectorPage/CollectorFactTable.esm.js +0 -2
  180. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +0 -2
  181. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +0 -2
  182. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +0 -2
  183. package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +0 -2
  184. package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +0 -2
  185. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +0 -2
  186. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +0 -2
  187. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +0 -2
  188. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +0 -2
  189. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +0 -2
  190. package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +0 -2
  191. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +0 -2
  192. package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +0 -2
  193. package/dist/components/SummaryCard/SummaryCard.esm.js +0 -2
  194. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +0 -2
  195. package/dist/images/GitHub_Logo.svg +0 -9
  196. package/dist/images/GitHub_Logo_White.svg +0 -9
  197. package/dist/images/SCM_DARK.svg +0 -10
  198. package/dist/images/SCM_LIGHT.svg +0 -10
  199. package/dist/images/azure-devops-rgb.svg +0 -13
  200. package/dist/images/azure-devops-white.svg +0 -13
  201. package/dist/images/bigquery-rgb.svg +0 -15
  202. package/dist/images/bigquery-white.svg +0 -15
  203. package/dist/images/cat-blk.svg +0 -12
  204. package/dist/images/cat-wht.svg +0 -12
  205. package/dist/images/data-registry-blk.svg +0 -36
  206. package/dist/images/data-registry-wht.svg +0 -36
  207. package/dist/images/dd_logo_h_rgb.svg +0 -17
  208. package/dist/images/dd_logo_h_white.svg +0 -17
  209. package/dist/images/gitlab-rgb.svg +0 -1
  210. package/dist/images/gitlab-white.svg +0 -1
  211. package/dist/images/http-rgb.svg +0 -11
  212. package/dist/images/http-white.svg +0 -11
  213. package/dist/images/jira-rgb.svg +0 -25
  214. package/dist/images/jira-white.svg +0 -25
  215. package/dist/images/k8s_blue.svg +0 -108
  216. package/dist/images/k8s_white.svg +0 -108
  217. package/dist/images/new-relic-rgb.svg +0 -1
  218. package/dist/images/new-relic-white.svg +0 -1
  219. package/dist/images/pd-black.svg +0 -9
  220. package/dist/images/pd-white.svg +0 -9
  221. package/dist/images/sonarqube-rgb.svg +0 -14
  222. package/dist/images/sonarqube-white.svg +0 -14
  223. package/dist/images/soundcheck-black.svg +0 -13
  224. package/dist/images/soundcheck-white.svg +0 -13
  225. package/dist/images/tech-black.svg +0 -11
  226. package/dist/images/tech-white.svg +0 -11
  227. /package/dist/components/CampaignsPage/{CampaignListPage/useArchiveConfirmationModal.esm.js → useArchiveConfirmationModal.esm.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{TrackCheckSchema as o,CampaignDetailsSchema as p}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod";import{CHECK_IS_REQUIRED_MSG as S,FIELD_IS_REQUIRED_MSG as a,formFiltersSchema as E}from"../../../utils/validation.esm.js";const r=0,i=100,_=100,s=100,c="Ending date must come after the Starting Date",l=t.strictObject({checks:t.array(o.extend({key:t.string().optional()})).min(1,S)}),g=t.strictObject({id:t.number().optional(),name:t.string().min(1,a).max(s,`Input must be less than ${s} characters`),description:t.string().optional(),passRate:t.coerce.number().min(r,`Minimum pass rate is ${r}%`).max(i,`Maximum pass rate is ${i}%`)}),D=t.strictObject({milestones:t.array(g).min(1,a)}),m=t.coerce.string().nullable().refine(e=>e!==null,{message:a}),M=t.strictObject({startDate:m,targetCompletionDate:m}),A=t.strictObject({draft:t.boolean().optional()}),T=({startDate:e,targetCompletionDate:n})=>e&&n?new Date(e)<new Date(n):!0,b=p.merge(M).merge(A),h=e=>e.refine(T,{message:c,path:["targetCompletionDate"]}),I=t.strictObject({detailsStep:h(b),tracksStep:l,filtersStep:E,milestonesStep:D});export{_ as CAMPAIGN_NAME_MAX_LENGTH,c as END_AFTER_START_DATE_MSG,i as MILESTONE_MAX_PASS_RATE,r as MILESTONE_MIN_PASS_RATE,s as MILESTONE_NAME_MAX_LENGTH,m as campaignDateTimeSchema,I as campaignFormSchema};
1
+ import{TrackCheckSchema as o,CampaignDetailsSchema as p}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod/v3";import{CHECK_IS_REQUIRED_MSG as S,FIELD_IS_REQUIRED_MSG as a,formFiltersSchema as E}from"../../../utils/validation.esm.js";const r=0,i=100,_=100,s=100,c="Ending date must come after the Starting Date",l=t.strictObject({checks:t.array(o.extend({key:t.string().optional()})).min(1,S)}),g=t.strictObject({id:t.number().optional(),name:t.string().min(1,a).max(s,`Input must be less than ${s} characters`),description:t.string().optional(),passRate:t.coerce.number().min(r,`Minimum pass rate is ${r}%`).max(i,`Maximum pass rate is ${i}%`)}),D=t.strictObject({milestones:t.array(g).min(1,a)}),m=t.coerce.string().nullable().refine(e=>e!==null,{message:a}),M=t.strictObject({startDate:m,targetCompletionDate:m}),A=t.strictObject({draft:t.boolean().optional()}),T=({startDate:e,targetCompletionDate:n})=>e&&n?new Date(e)<new Date(n):!0,b=p.merge(M).merge(A),h=e=>e.refine(T,{message:c,path:["targetCompletionDate"]}),I=t.strictObject({detailsStep:h(b),tracksStep:l,filtersStep:E,milestonesStep:D});export{_ as CAMPAIGN_NAME_MAX_LENGTH,c as END_AFTER_START_DATE_MSG,i as MILESTONE_MAX_PASS_RATE,r as MILESTONE_MIN_PASS_RATE,s as MILESTONE_NAME_MAX_LENGTH,m as campaignDateTimeSchema,I as campaignFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as o,Fragment as W}from"react/jsx-runtime";import{parseEntityRef as Fe}from"@backstage/catalog-model";import{useRouteRef as R}from"@backstage/core-plugin-api";import{usePermission as Ne}from"@backstage/plugin-permission-react";import{Container as T,HeaderPage as Re,Box as m,Flex as Y,Text as u,Grid as P}from"@backstage/ui";import{makeStyles as Pe}from"@material-ui/core";import{toEntityFilterQuery as xe,soundcheckCampaignReadPermission as Ae}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as He}from"lodash";import{DateTime as S}from"luxon";import{useState as b,useMemo as v,useEffect as Z}from"react";import{useParams as Oe,useSearchParams as De}from"react-router-dom";import Ke from"react-use/lib/useDebounce";import _e 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 Ge}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as Ue}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useLCPReporting as Ve}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as $e}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as qe,campaignOverviewRouteRef as Qe,campaignExplorerRouteRef as We}from"../../routes.esm.js";import{DescriptionCard as Ye}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Ze}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../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 z}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 ei,CERTIFICATION_STATUS_MAP as ii}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as ti}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as ri}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as ai}from"../Menus/useCampaignActions.esm.js";import{PageCustomActions as oi}from"../PageCustomActions/PageCustomActions.esm.js";import{SendCampaignNotificationDialogBUI as si}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TopFailingChecksTableBUI as ni}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as ci}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";import{CampaignStatusCard as mi}from"./CampaignStatusCard.esm.js";const li=Pe(()=>({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)"}})),a={CHECKS:"Checks",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},di={checks:a.CHECKS,"top-failing-checks":a.TOP_FAILING_CHECKS,entities:a.ENTITIES},pi={[a.CHECKS]:"checks",[a.TOP_FAILING_CHECKS]:"top-failing-checks",[a.ENTITIES]:"entities"},hi=()=>{const{owners:l,lifecycles:d,types:p,systems:h,certificationStatuses:x}=Xe(),{campaignId:s}=Oe(),J=R(qe),[n,C]=De(),[c,A]=b(n.get("search")||""),[H,X]=b(""),[O,ee]=b(()=>{const i=n.get("section"),I=i?di[i]:null;return new Set([I??a.CHECKS])}),y=O.values().next().value??a.CHECKS;Ke(()=>{X(c);const i=new URLSearchParams(n.toString());c?i.set("search",c):i.delete("search"),C(i,{replace:!0})},300,[c]);const D=v(()=>({routeName:"soundcheck-campaign-insights",additionalAttributes:{campaignId:s||"",filtersApplied:l.length+d.length+p.length+h.length,ownersFilter:l?.join(",")||"",lifecyclesFilter:d?.join(",")||"",typesFilter:p?.join(",")||"",systemsFilter:h?.join(",")||"",campaignsSearch:H||""}}),[s,l,d,p,h,H]),{reportContentLoaded:K}=$e(D),{reporter:ie}=Ve(D),f=li(),k=v(()=>ei({lifecycles:d,owners:l,types:p,systems:h}),[d,l,p,h]),{data:te,isLoading:g,isError:re}=Be({ids:[s],first:1}),t=te?.edges?.[0]?.node,{actions:_,showNotificationDialog:M,setShowNotificationDialog:ae}=ai(t??void 0),r=t?.track,oe=v(()=>r?.levels.flatMap(i=>i.checks),[r?.levels]),se=Array.from(new Set(r?.levels.flatMap(i=>i.checks).map(i=>i.id)??[])),{data:j,isLoading:ne}=Me({trackId:r?.id,checkIds:se,filter:k},!!r),ce=v(()=>xe(r?.filter),[r]),{filters:me,selected:le,setSelected:de,onRemoveTag:pe,selectedTags:he}=je({entityFilterQuery:ce,hasCertificationStatusFilters:!0}),{data:B,isLoading:w,isError:fe}=Ge({trackId:r?.id??"",filter:k},!!t),ge=S.fromISO(t?.startDate),ue=Math.max(Math.ceil(S.now().diff(ge,"days").days),1),{data:G,isLoading:Se,isError:Ce}=Ue({trackId:r?.id??"",filter:k,numberOfDays:ue},!!t),L=re||fe||Ce,{loading:ye,allowed:Ee}=Ne({permission:Ae,resourceRef:s}),U=ie?.getLCPValue();Z(()=>{!g&&!w&&K({lcp:U})},[g,w,K,U]);const[E,V]=b(!1),[F,N]=_e("campaign-overview-search-params","");Z(()=>{!E&&n?.toString()?(F!==n.toString()&&N(n.toString()),V(!0)):E?E&&F!==n.toString()&&N(n.toString()):V(!0)},[n,C,N,F,E]);const Ie=i=>{ee(i),A("");const I=i.values().next().value,Q=I?pi[I]:void 0;Q?C({section:Q},{replace:!0}):C({},{replace:!0})},Te=R(Qe),be=R(We);if(g)return e(T,{className:f.container,children:e(ti,{})});if(!g&&!t)return e(T,{className:f.container,children:e(z,{title:"Campaign not found",body:`There is no campaign with the requested id: ${s}.`})});if(!ye&&!Ee)return e(T,{className:f.container,children:e(z,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${s}.`})});const $=t?.ownerEntityRef,ve=$?Fe($).name:void 0,ke=S.fromISO(t?.startDate),q=S.fromISO(t?.targetCompletionDate),we=S.now(),Le=Math.max(Math.ceil(q.diff(we,"days").days),0);return o(W,{children:[e(Re,{title:t?.name,customActions:e(ri,{disabled:!_.length,placement:"left top",menuActions:_,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:J()}],tabs:[{id:"overview",label:"Campaign Overview",href:s?Te({campaignId:s}):""},{id:"explorer",label:"Tech Insights Explorer",href:s?be({campaignId:s}):""}]}),o(T,{className:f.container,children:[o(m,{className:f.cards,children:[e(Ye,{description:t?.description??void 0,owner:ve,isError:L,isLoading:g}),e(mi,{campaign:t,status:B,history:G,isError:L,isLoading:w,children:o(W,{children:[o(Y,{align:"baseline",mt:"3",children:[e(u,{as:"h1",variant:"title-medium",weight:"bold",children:Le}),e(u,{variant:"body-small",children:"Days remaining"})]}),o(P.Root,{children:[o(P.Item,{children:[e(m,{children:e(u,{color:"secondary",variant:"body-small",children:"Start date"})}),e(m,{children:e(u,{variant:"body-small",children:ke.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]}),o(P.Item,{children:[e(m,{children:e(u,{color:"secondary",variant:"body-small",children:"End date"})}),e(m,{children:e(u,{variant:"body-small",children:q.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]})]})]})}),e(Ze,{track:t?.track,history:G,isCampaign:!0,isError:L,isLoading:Se})]}),r&&o(m,{children:[o(Y,{justify:"between",children:[e(m,{minWidth:"16rem",children:e(Je,{options:["Checks","Top Failing Checks","Entities"],selected:O,ariaLabel:"Sections",onSelectionChange:Ie})}),e(oi,{searchValue:c,setSearchValue:i=>A(i),filters:me,selected:le,setSelected:de,onRemoveTag:pe,selectedTags:he,showSearch:y!==a.ENTITIES})]}),o(m,{className:f.tableContent,children:[y===a.CHECKS&&e(ze,{trackId:r.id,checks:oe,checkStatuses:j,isLoading:g||ne,searchValue:c}),y===a.TOP_FAILING_CHECKS&&e(ni,{track:r,checkStatuses:j,certificationStatus:B?.certificationStatus,searchValue:c}),y===a.ENTITIES&&e(ci,{isCampaign:!0,track:r,lifecycles:d,owners:l,types:p,systems:h,certificationStatus:He(x)?void 0:ii[x[0]],searchValue:c})]})]}),t&&M&&e(si,{campaign:t,isOpen:M,handleClose:()=>ae(!1)})]})]})};export{hi as CampaignPageBUI};
1
+ import{jsx as e,jsxs as o,Fragment as G}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{usePermission as Te}from"@backstage/plugin-permission-react";import{Container as y,HeaderPage as be,Box as c,Flex as U,Text as g,Grid as v}from"@backstage/ui";import{makeStyles as ke}from"@material-ui/core";import{toEntityFilterQuery as ve,soundcheckCampaignReadPermission as we}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as Pe}from"lodash";import{DateTime as u}from"luxon";import{useState as w,useMemo as E,useEffect as Fe}from"react";import{useParams as Le,useSearchParams as Ne}from"react-router-dom";import Re from"react-use/lib/useDebounce";import{useCheckStatuses as Ae}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useEntityPrimaryTitle as He}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useFilters as xe}from"../../hooks/filters/useFilters.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{useGetCampaigns as Ke}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Oe}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as De}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useChipScopedUrlState as _e}from"../../hooks/useChipScopedUrlState.esm.js";import{useLCPReporting as Me}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Be}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as Ge,campaignOverviewRouteRef as Ue,campaignExplorerRouteRef as Ve}from"../../routes.esm.js";import{DescriptionCard as je}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as $e}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as qe}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Qe}from"../ChipSelector/ChipSelector.esm.js";import{EmptyStateBUI as V}from"../EmptyState/EmptyStateBUI.esm.js";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as We}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as ze,CERTIFICATION_STATUS_MAP as Je}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Xe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ye}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as Ze}from"../Menus/useCampaignActions.esm.js";import{PageCustomActions as ei}from"../PageCustomActions/PageCustomActions.esm.js";import{SendCampaignNotificationDialogBUI as ii}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TopFailingChecksTableBUI as ti}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as ri}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";import{CampaignStatusCard as ai}from"./CampaignStatusCard.esm.js";const oi=ke(()=>({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)"}})),a={CHECKS:"Checks",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},j={checks:a.CHECKS,"top-failing-checks":a.TOP_FAILING_CHECKS,entities:a.ENTITIES},si={[a.CHECKS]:"checks",[a.TOP_FAILING_CHECKS]:"top-failing-checks",[a.ENTITIES]:"entities"},ni="checks",ci=()=>{const{owners:m,lifecycles:l,types:p,systems:d,certificationStatuses:P}=We(),{campaignId:s}=Le(),$=k(Ge),[S,F]=Ne(),[n,L]=w(S.get("search")||""),[N,q]=w(""),[R,Q]=w(()=>{const t=S.get("section"),Ie=t?j[t]:null;return new Set([Ie??a.CHECKS])}),C=R.values().next().value??a.CHECKS;Re(()=>{q(n);const t=new URLSearchParams(S.toString());n?t.set("search",n):t.delete("search"),F(t,{replace:!0})},300,[n]);const A=E(()=>({routeName:"soundcheck-campaign-insights",additionalAttributes:{campaignId:s||"",filtersApplied:m.length+l.length+p.length+d.length,ownersFilter:m?.join(",")||"",lifecyclesFilter:l?.join(",")||"",typesFilter:p?.join(",")||"",systemsFilter:d?.join(",")||"",campaignsSearch:N||""}}),[s,m,l,p,d,N]),{reportContentLoaded:H}=Be(A),{reporter:W}=Me(A),h=oi(),I=E(()=>ze({lifecycles:l,owners:m,types:p,systems:d}),[l,m,p,d]),{data:z,isLoading:f,isError:J}=Ke({ids:[s],first:1}),i=z?.edges?.[0]?.node,{actions:x,showNotificationDialog:K,setShowNotificationDialog:X}=Ze(i??void 0),r=i?.track,Y=E(()=>r?.levels.flatMap(t=>t.checks),[r?.levels]),Z=Array.from(new Set(r?.levels.flatMap(t=>t.checks).map(t=>t.id)??[])),{data:O,isLoading:ee}=Ae({trackId:r?.id,checkIds:Z,filter:I},!!r),ie=E(()=>ve(r?.filter),[r]),{filters:te,selected:re,setSelected:ae,onRemoveTag:oe,selectedTags:se}=xe({entityFilterQuery:ie,hasCertificationStatusFilters:!0}),{data:D,isLoading:T,isError:ne}=Oe({trackId:r?.id??"",filter:I},!!i),ce=u.fromISO(i?.startDate),me=Math.max(Math.ceil(u.now().diff(ce,"days").days),1),{data:_,isLoading:le,isError:pe}=De({trackId:r?.id??"",filter:I,numberOfDays:me},!!i),b=J||ne||pe,{loading:de,allowed:he}=Te({permission:we,resourceRef:s}),M=W?.getLCPValue();Fe(()=>{!f&&!T&&H({lcp:M})},[f,T,H,M]);const{handleSectionChange:fe}=_e({searchParams:S,setSearchParams:F,sectionParamToSection:j,sectionToParam:si,defaultSectionParam:ni,defaultSection:a.CHECKS,pageFiltersStorageKey:"campaign-page-filters",pageSearchParamsStorageKey:"campaign-overview-search-params",setSectionSelection:Q,setSearchValue:L}),ge=k(Ue),ue=k(Ve),Se=He(i?.ownerEntityRef);if(f)return e(y,{className:h.container,children:e(Xe,{})});if(!f&&!i)return e(y,{className:h.container,children:e(V,{title:"Campaign not found",body:`There is no campaign with the requested id: ${s}.`})});if(!de&&!he)return e(y,{className:h.container,children:e(V,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${s}.`})});const Ce=u.fromISO(i?.startDate),B=u.fromISO(i?.targetCompletionDate),ye=u.now(),Ee=Math.max(Math.ceil(B.diff(ye,"days").days),0);return o(G,{children:[e(be,{title:i?.name,customActions:e(Ye,{disabled:!x.length,placement:"left top",menuActions:x,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:$()}],tabs:[{id:"overview",label:"Campaign Overview",href:s?ge({campaignId:s}):""},{id:"explorer",label:"Tech Insights Explorer",href:s?ue({campaignId:s}):""}]}),o(y,{className:h.container,children:[o(c,{className:h.cards,children:[e(je,{description:i?.description??void 0,owner:Se,isError:b,isLoading:f}),e(ai,{campaign:i,status:D,history:_,isError:b,isLoading:T,children:o(G,{children:[o(U,{align:"baseline",mt:"3",children:[e(g,{as:"h1",variant:"title-medium",weight:"bold",children:Ee}),e(g,{variant:"body-small",children:"Days remaining"})]}),o(v.Root,{children:[o(v.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"Start date"})}),e(c,{children:e(g,{variant:"body-small",children:Ce.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]}),o(v.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"End date"})}),e(c,{children:e(g,{variant:"body-small",children:B.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]})]})]})}),e($e,{track:i?.track,history:_,isCampaign:!0,isError:b,isLoading:le})]}),r&&o(c,{children:[o(U,{justify:"between",children:[e(c,{minWidth:"16rem",children:e(Qe,{options:["Checks","Top Failing Checks","Entities"],selected:R,ariaLabel:"Sections",onSelectionChange:fe})}),e(ei,{searchValue:n,setSearchValue:t=>L(t),filters:te,selected:re,setSelected:ae,onRemoveTag:oe,selectedTags:se,showSearch:C!==a.ENTITIES})]}),o(c,{className:h.tableContent,children:[C===a.CHECKS&&e(qe,{trackId:r.id,checks:Y,checkStatuses:O,isLoading:f||ee,searchValue:n}),C===a.TOP_FAILING_CHECKS&&e(ti,{track:r,checkStatuses:O,certificationStatus:D?.certificationStatus,searchValue:n}),C===a.ENTITIES&&e(ri,{isCampaign:!0,track:r,lifecycles:l,owners:m,types:p,systems:d,certificationStatus:Pe(P)?void 0:Je[P[0]],searchValue:n})]})]}),i&&K&&e(ii,{campaign:i,isOpen:K,handleClose:()=>X(!1)})]})]})};export{ci as CampaignPageBUI};
2
2
  //# sourceMappingURL=CampaignPageBUI.esm.js.map
@@ -1,2 +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};
1
+ import{jsx as r}from"react/jsx-runtime";import{Skeleton as f,Flex as v}from"@backstage/ui";import{makeStyles as h}from"@material-ui/core";import{useMemo as o}from"react";import{calculateAdjustedBarWidths as S}from"../../utils/charts.esm.js";const k=h(()=>({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:c,status:m})=>{const a=k(),n=c?.track,e=m?.certificationStatus?.statusByLevel[0],u=["var(--bui-fg-success)","var(--bui-fg-danger)","var(--bui-fg-disabled)"],t=o(()=>[e?.passed??0,e?.failed??0,e?.notReported??0],[e]),l=t.every(i=>i===0),b=o(()=>S(t),[t]);if(!n||!m)return r(f,{width:"100%"});let s;return l?s=r("div",{className:`${a.barSegment} ${a.emptyBar}`}):s=t.map((i,d)=>{const p=u[d]||"var(--bui-fg-disabled)",g=b[d]||0;return i<=0?null:r("div",{className:a.barSegment,style:{backgroundColor:p,width:`${g}%`}},`track-status-bar-segment-${d}`)}),r(v,{className:a.container,children:s})};export{y as CampaignStatusBarBUI};
2
2
  //# sourceMappingURL=CampaignStatusBarBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as c,Fragment as j}from"react/jsx-runtime";import{useRouteRef as b,useApi as M}from"@backstage/core-plugin-api";import{entityPresentationApiRef as $}from"@backstage/plugin-catalog-react";import{usePermission as z}from"@backstage/plugin-permission-react";import{Container as d,HeaderPage as J,Box as v,Flex as K,SearchField as Q}from"@backstage/ui";import{makeStyles as W}from"@material-ui/core";import{soundcheckCampaignReadPermission as X}from"@spotify/backstage-plugin-soundcheck-common";import{useState as k,useMemo as C,useEffect as Y}from"react";import{useParams as Z,useSearchParams as _}from"react-router-dom";import ee from"react-use/lib/useDebounce";import{useGroupHierarchy as ie}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useHierarchicalTrackStatus as re}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";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 ae}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as oe}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useLCPReporting as te}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ne}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as me,campaignOverviewRouteRef as se,campaignExplorerRouteRef as pe}from"../../routes.esm.js";import{EmptyStateBUI as x}from"../EmptyState/EmptyStateBUI.esm.js";import{hierarchyToNivo as ce}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as de}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as le}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as ge}from"../Menus/useCampaignActions.esm.js";import{SendCampaignNotificationDialogBUI as fe}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TechInsightsExplorerTable as ue}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as he}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as be}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const ve=W(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),Ce=()=>{const o=ve(),{campaignId:i}=Z(),[l,A]=_(),[n,y]=k(l.get("search")||""),r=l.get("group"),[g,E]=k(""),B=b(me);ee(()=>{E(n);const a=new URLSearchParams(l.toString());n?a.set("search",n):a.delete("search"),A(a,{replace:!0})},300,[n]);const S=C(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{campaignId:i||"",group:r||"",groupsSearch:g||""}}),[i,r,g]),{reportContentLoaded:R}=ne(S),{reporter:G}=te(S),{data:D,isLoading:s}=ae({ids:[i],first:1}),t=D?.edges?.[0]?.node,{actions:w,showNotificationDialog:I,setShowNotificationDialog:F}=ge(t??void 0),m=t?.track,N=M($),{data:T}=oe({}),f=C(()=>T?.edges.find(a=>a.node.id===m?.id)?.node,[T?.edges,m?.id]),{data:L,isLoading:u}=ie(r||void 0,{enabled:!!r&&!!m?.id&&!!f,ownedEntitiesFilter:f?.filter??void 0}),{loading:H,allowed:O}=z({permission:X,resourceRef:i}),{data:h,isLoading:p}=re({trackId:m?.id??"",groupRef:r??"",skip:!m?.id}),U=C(()=>{if(!r)return;const a=L?.[r];return a?ce(a,h||null,()=>"var(--bui-fg-primary)",N,void 0):void 0},[L,N,r,h]),P=G?.getLCPValue();Y(()=>{!s&&!u&&!p&&R({lcp:P})},[s,u,p,R,P]);const q=b(se),V=b(pe);return s?e(d,{className:o.container,children:e(de,{})}):!s&&!t?e(d,{className:o.container,children:e(x,{title:"Campaign not found",body:`There is no campaign with the requested id: ${i}.`})}):!H&&!O?e(d,{className:o.container,children:e(x,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${i}.`})}):c(j,{children:[e(J,{title:t?.name,customActions:e(le,{disabled:!w.length,placement:"left top",menuActions:w,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:B()}],tabs:[{id:"overview",label:"Campaign Overview",href:i?q({campaignId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?V({campaignId:i}):""}]}),c(d,{className:o.container,children:[e(v,{className:o.teams,children:e(be,{trackStatus:h??void 0,isLoading:p,campaignId:i})}),c(v,{children:[c(K,{align:"center",gap:"3",className:o.filters,children:[e(he,{}),e(Q,{value:n,onChange:y,"aria-label":"Search",placeholder:"Search"})]}),e(v,{className:o.tableContent,children:e(ue,{tableData:U,isLoading:u||p,selectedGroup:r??void 0,searchValue:g,trackId:f?.id,campaignId:i})})]}),t&&I&&e(fe,{campaign:t,isOpen:I,handleClose:()=>F(!1)})]})]})};export{Ce as CampaignTechInsightsExplorerPage};
1
+ import{jsx as e,jsxs as c,Fragment as j}from"react/jsx-runtime";import{useRouteRef as b,useApi as M}from"@backstage/core-plugin-api";import{entityPresentationApiRef as $}from"@backstage/plugin-catalog-react";import{usePermission as z}from"@backstage/plugin-permission-react";import{Container as d,HeaderPage as J,Box as v,Flex as K,SearchField as Q}from"@backstage/ui";import{makeStyles as W}from"@material-ui/core";import{soundcheckCampaignReadPermission as X}from"@spotify/backstage-plugin-soundcheck-common";import{useState as k,useMemo as C,useEffect as Y}from"react";import{useParams as Z,useSearchParams as _}from"react-router-dom";import ee from"react-use/lib/useDebounce";import{useGroupHierarchy as ie}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useHierarchicalTrackStatus as re}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";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 oe}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useLCPReporting as te}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ne}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as me,campaignOverviewRouteRef as se,campaignExplorerRouteRef as pe}from"../../routes.esm.js";import{EmptyStateBUI as x}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as ce}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as de}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as le}from"../Menus/useCampaignActions.esm.js";import{SendCampaignNotificationDialogBUI as ge}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import"../TechInsights/TechInsightsPageBUI.esm.js";import{hierarchyToNivo as fe}from"../TechInsights/hierarchyToNivo.esm.js";import{TechInsightsExplorerTable as ue}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as he}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as be}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const ve=W(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),Ce=()=>{const a=ve(),{campaignId:i}=Z(),[l,A]=_(),[n,y]=k(l.get("search")||""),r=l.get("group"),[g,E]=k(""),B=b(me);ee(()=>{E(n);const o=new URLSearchParams(l.toString());n?o.set("search",n):o.delete("search"),A(o,{replace:!0})},300,[n]);const S=C(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{campaignId:i||"",group:r||"",groupsSearch:g||""}}),[i,r,g]),{reportContentLoaded:R}=ne(S),{reporter:G}=te(S),{data:D,isLoading:s}=oe({ids:[i],first:1}),t=D?.edges?.[0]?.node,{actions:w,showNotificationDialog:I,setShowNotificationDialog:F}=le(t??void 0),m=t?.track,N=M($),{data:T}=ae({}),f=C(()=>T?.edges.find(o=>o.node.id===m?.id)?.node,[T?.edges,m?.id]),{data:L,isLoading:u}=ie(r||void 0,{enabled:!!r&&!!m?.id&&!!f,ownedEntitiesFilter:f?.filter??void 0}),{loading:H,allowed:O}=z({permission:X,resourceRef:i}),{data:h,isLoading:p}=re({trackId:m?.id??"",groupRef:r??"",skip:!m?.id}),U=C(()=>{if(!r)return;const o=L?.[r];return o?fe(o,h||null,()=>"var(--bui-fg-primary)",N,void 0):void 0},[L,N,r,h]),P=G?.getLCPValue();Y(()=>{!s&&!u&&!p&&R({lcp:P})},[s,u,p,R,P]);const q=b(se),V=b(pe);return s?e(d,{className:a.container,children:e(ce,{})}):!s&&!t?e(d,{className:a.container,children:e(x,{title:"Campaign not found",body:`There is no campaign with the requested id: ${i}.`})}):!H&&!O?e(d,{className:a.container,children:e(x,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${i}.`})}):c(j,{children:[e(J,{title:t?.name,customActions:e(de,{disabled:!w.length,placement:"left top",menuActions:w,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:B()}],tabs:[{id:"overview",label:"Campaign Overview",href:i?q({campaignId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?V({campaignId:i}):""}]}),c(d,{className:a.container,children:[e(v,{className:a.teams,children:e(be,{trackStatus:h??void 0,isLoading:p,campaignId:i})}),c(v,{children:[c(K,{align:"center",gap:"3",className:a.filters,children:[e(he,{}),e(Q,{value:n,onChange:y,"aria-label":"Search",placeholder:"Search"})]}),e(v,{className:a.tableContent,children:e(ue,{tableData:U,isLoading:u||p,selectedGroup:r??void 0,searchValue:g,trackId:f?.id,campaignId:i})})]}),t&&I&&e(ge,{campaign:t,isOpen:I,handleClose:()=>F(!1)})]})]})};export{Ce as CampaignTechInsightsExplorerPage};
2
2
  //# sourceMappingURL=CampaignTechInsightsExplorerPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as g,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,TableRoot as X,TableHeader as Z,Column as c,TableBody as ee,TablePagination as te}from"@backstage/ui";import{makeStyles as ie}from"@material-ui/core";import{RiCalendarLine as re}from"@remixicon/react";import{soundcheckCampaignCreatePermission as oe}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ae,isEmpty as A}from"lodash";import{DateTime as x}from"luxon";import{useState as R,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"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useProfileImages as ge}from"../../hooks/catalog/useProfileImages.esm.js";import{useLCPReporting as le}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 Ce}from"../../routes.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Pe}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoCampaigns as we}from"../EmptyState/EmptyStateNoCampaigns.esm.js";import{ListPageCustomActions as ye}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 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 ve}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TableRowWithOwner as Le}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const z=10,Ne=["name","status","days-remaining","owner"],B=t=>{const s=x.fromISO(t),r=x.now();return Math.max(Math.ceil(s.diff(r,"days").days),0)},De=({campaign:t,profileImageMap:s})=>{const r=l(()=>t.archived?0:B(t.targetCompletionDate),[t.archived,t.targetCompletionDate]),h=T(Ce),o=l(()=>t.track.levels.reduce((a,P)=>a+(P.checks?.length??0),0),[t.track.levels]),{actions:u,showNotificationDialog:p,setShowNotificationDialog:C}=Re(t);return g(I,{children:[i(Le,{ownerEntityRef:t.ownerEntityRef,href:h({campaignId:t.id}),profileImageSrc:s[t.ownerEntityRef],menuActions:u,name:t.name??"",description:t.description??"",cells:[{title:t.archived?"Archived":"Active"},{title:`${r} day${r===1?"":"s"} remaining`,icon:i(re,{size:16})},{title:`${o} Check${o===1?"":"s"}`}]}),t&&p&&i(ve,{campaign:t,isOpen:p,handleClose:()=>C(!1)})]})},Ee=ie(()=>({container:{marginBottom:"var(--bui-space-12)"}})),be=()=>{const t=Ee(),{updateSortParams:s,searchParams:r,setSearchParams:h}=de(),[o,u]=R(()=>r.get("search")??""),[p,C]=R(()=>r.get("sortDirection")==="descending"?"descending":"ascending"),[a,P]=R(()=>{const e=r.get("sort");return e&&Ne.includes(e)?e:""}),{data:v,isLoading:d}=pe({}),L=l(()=>v?.edges?.map(e=>e.node)??[],[v?.edges]),{profileImageMap:M}=ge(L.map(e=>e.ownerEntityRef)),N=Q(Y),w=he(L,o),f=l(()=>{if(!a)return w;const e=ae(w,m=>a==="owner"?N.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},[N,a,p,w]),{paginatedItems:y,reset:S,paginationProps:n}=ce({pageParam:"perPage",defaultPageSize:z,items:f});se(()=>{S();const e=new URLSearchParams(r.toString());o?e.set("search",o):e.delete("search"),h(e,{replace:!0})},300,[o]);const O=ne(({direction:e,column:m})=>{const k=String(m);P(k),C(e),S(),s({sort:k,sortDirection:e})},[S,s]),{loading:H,allowed:U}=_({permission:oe}),$=T(ue),D=l(()=>({routeName:"soundcheck-campaigns",additionalAttributes:{}}),[]),{reportContentLoaded:E}=fe(D),{reporter:V}=le(D),b=V?.getLCPValue();me(()=>{d||E({lcp:b})},[d,E,b]);const j=!d&&!A(y),G=f.length>z,W=!d&&A(y),F=d,K=o?i(Pe,{title:"No campaigns found",body:"Your current search term did not return any campaigns. Please try a different search term."}):i(we,{});return g(I,{children:[i(q,{customActions:i(ye,{searchValue:o,setSearchValue:u,canCreate:!H&&U,createHref:$()}),title:"Campaigns"}),g(J,{className:t.container,children:[F&&i(Se,{rowCount:10}),W&&K,j&&g(X,{onSortChange:O,sortDescriptor:{direction:p,column:a},children:[g(Z,{children:[i(c,{allowsSorting:!0,isRowHeader:!0,id:"name",style:{width:"47%"},children:"Name"}),i(c,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),i(c,{allowsSorting:!0,id:"days-remaining",style:{width:"15%"},children:"Days Remaining"}),i(c,{id:"checks",style:{width:"10%"},children:"Checks"}),i(c,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Campaign Owner"}),i(c,{id:"actions",style:{width:"3%"}})]}),i(ee,{children:y.map(e=>i(De,{campaign:e,profileImageMap:M??{}},e.id))})]}),G&&i(te,{totalCount:f.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(f.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{be as CampaignListPageBUI};
1
+ import{jsx as i,jsxs as f,Fragment as N}from"react/jsx-runtime";import{useApi as oe,useRouteRef as x}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ae}from"@backstage/plugin-catalog-react";import{usePermission as ne}from"@backstage/plugin-permission-react";import{HeaderPage as se,Container as me,TableRoot as ce,TableHeader as le,Column as p,TableBody as pe,TablePagination as de}from"@backstage/ui";import{makeStyles as ge}from"@material-ui/core";import{RiCalendarLine as fe}from"@remixicon/react";import{soundcheckCampaignCreatePermission as he}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ue,isEmpty as O}from"lodash";import{DateTime as F}from"luxon";import{useState as R,useMemo as s,useCallback as we,useEffect as Pe}from"react";import ye 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 Se}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePagination as ve,DEFAULT_PAGE_SIZE as z}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as Ce}from"../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useProfileImages as Re}from"../../hooks/catalog/useProfileImages.esm.js";import{useOwnerFilterOptions as Ae,useListPageFilters as be}from"../../hooks/filters/useListPageFilters.esm.js";import{useLCPReporting as Le}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ee}from"../../hooks/useLoadTimeReporting.esm.js";import{useSearchNameOwner as Te}from"../../hooks/useSearchNameOwner.esm.js";import{campaignCreateRouteRef as De,campaignDetailsRouteRef as ke}from"../../routes.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ie}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoCampaigns as Ne}from"../EmptyState/EmptyStateNoCampaigns.esm.js";import{ListPageCustomActions as xe}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Oe}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 Fe}from"../Menus/useCampaignActions.esm.js";import{SendCampaignNotificationDialogBUI as ze}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TableRowWithOwner as Ve}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const Be=["name","status","days-remaining","owner"];var Me=(t=>(t.Active="Active",t.Archived="Archived",t))(Me||{});const Ue=[{label:"Active",value:"Active"},{label:"Archived",value:"Archived"}],V=t=>{const c=F.fromISO(t),r=F.now();return Math.max(Math.ceil(c.diff(r,"days").days),0)},He=({campaign:t,profileImageMap:c})=>{const r=s(()=>t.archived?0:V(t.targetCompletionDate),[t.archived,t.targetCompletionDate]),u=x(ke),o=s(()=>t.track.levels.reduce((a,y)=>a+(y.checks?.length??0),0),[t.track.levels]),{actions:w,showNotificationDialog:l,setShowNotificationDialog:P}=Fe(t);return f(N,{children:[i(Ve,{ownerEntityRef:t.ownerEntityRef,href:u({campaignId:t.id}),profileImageSrc:c[t.ownerEntityRef],menuActions:w,name:t.name??"",description:t.description??"",cells:[{title:t.archived?"Archived":"Active"},{title:`${r} day${r===1?"":"s"} remaining`,icon:i(fe,{size:16})},{title:`${o} Check${o===1?"":"s"}`}]}),t&&l&&i(ze,{campaign:t,isOpen:l,handleClose:()=>P(!1)})]})},$e=ge(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ge=()=>{const t=$e(),{updateSortParams:c,searchParams:r,setSearchParams:u}=Ce(),[o,w]=R(()=>r.get("search")??""),[l,P]=R(()=>r.get("sortDirection")==="descending"?"descending":"ascending"),[a,y]=R(()=>{const e=r.get("sort");return e&&Be.includes(e)?e:""}),{data:A,isLoading:d}=Se({}),g=s(()=>A?.edges?.map(e=>e.node)??[],[A?.edges]),{profileImageMap:B}=Re(g.map(e=>e.ownerEntityRef)),b=oe(ae),M=s(()=>g.map(e=>e.ownerEntityRef),[g]),L=Ae(M),U=s(()=>[{key:"owners",label:"Owner",options:L,tagLabelPrefix:"owner"},{key:"statuses",label:"Status",options:Ue,tagLabelPrefix:"status"}],[L]),{filters:H,selected:$,setSelected:G,selectedTags:_,onRemoveTag:j,filterItems:E,hasActiveFilters:W}=be(U,"campaigns"),Y=s(()=>E(g,{owners:{getValue:e=>e.ownerEntityRef},statuses:{getValue:e=>e.archived?"Archived":"Active",defaultFilter:e=>!e.archived}}),[g,E]),S=Te(Y,o),h=s(()=>{if(!a)return S;const e=ue(S,m=>a==="owner"?b.forEntity(m.ownerEntityRef).snapshot.primaryTitle.toLowerCase():a==="status"?m.archived?"archived":"active":a==="days-remaining"?m.archived?-1:V(m.targetCompletionDate):m.name.toLowerCase());return l==="descending"&&e.reverse(),e},[b,a,l,S]),{paginatedItems:v,reset:C,paginationProps:n}=ve({pageParam:"perPage",defaultPageSize:z,items:h});ye(()=>{C();const e=new URLSearchParams(r.toString());o?e.set("search",o):e.delete("search"),u(e,{replace:!0})},300,[o]);const Z=we(({direction:e,column:m})=>{const I=String(m);y(I),P(e),C(),c({sort:I,sortDirection:e})},[C,c]),{loading:q,allowed:J}=ne({permission:he}),K=x(De),T=s(()=>({routeName:"soundcheck-campaigns",additionalAttributes:{}}),[]),{reportContentLoaded:D}=Ee(T),{reporter:Q}=Le(T),k=Q?.getLCPValue();Pe(()=>{d||D({lcp:k})},[d,D,k]);const X=!d&&!O(v),ee=h.length>z,te=!d&&O(v),ie=d,re=o||W?i(Ie,{title:"No campaigns found",body:"Your current search or filter did not return any campaigns. Please try a different search term or filter."}):i(Ne,{});return f(N,{children:[i(se,{customActions:i(xe,{searchValue:o,setSearchValue:w,canCreate:!q&&J,createHref:K(),filterProps:{filters:H,selected:$,setSelected:G,selectedTags:_,onRemoveTag:j}}),title:"Campaigns"}),f(me,{className:t.container,children:[ie&&i(Oe,{rowCount:10}),te&&re,X&&f(ce,{onSortChange:Z,sortDescriptor:{direction:l,column:a},children:[f(le,{children:[i(p,{allowsSorting:!0,isRowHeader:!0,id:"name",style:{width:"47%"},children:"Name"}),i(p,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),i(p,{allowsSorting:!0,id:"days-remaining",style:{width:"15%"},children:"Days Remaining"}),i(p,{id:"checks",style:{width:"10%"},children:"Checks"}),i(p,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Campaign Owner"}),i(p,{id:"actions",style:{width:"3%"}})]}),i(pe,{children:v.map(e=>i(He,{campaign:e,profileImageMap:B??{}},e.id))})]}),ee&&i(de,{totalCount:h.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(h.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{Ge as CampaignListPageBUI};
2
2
  //# sourceMappingURL=CampaignListPageBUI.esm.js.map
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as m}from"react/jsx-runtime";import{CampaignListPageBUI as o}from"./CampaignListPageBUI.esm.js";import r from"./useArchiveConfirmationModal.esm.js";const i=()=>m(r,{children:m(o,{})});export{i as CampaignsPage};
2
2
  //# sourceMappingURL=CampaignsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as y,Fragment as n}from"react/jsx-runtime";import{useRouteRef as p}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"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCampaign as U}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as s,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{Loading as S}from"../Loading/Loading.esm.js";import{PageWarningMessage as j}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as v}from"../SoundcheckHeader/useHeader.esm.js";import{EmptyCampaignState as B}from"./CampaignEmptyState.esm.js";const H=()=>{v({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(s),{campaignId:t}=E(),{setIsLoading:e}=w(),{mutateAsync:g,isLoading:m}=x(),{data:f,isLoading:a}=U(t??""),i=f?.edges?.[0]?.node,{loading:u,allowed:r}=R({permission:L,resourceRef:i?.id});P(()=>e(m),[e,m]);const l=p(s),C=p(A);if(!a&&!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(j,{entityId:i?.id,entityName:i?.name??"",showCannotEdit:!u&&!r}),a?o(S,{}):o(n,{children:r&&o(D,{onSave:h,onCancel:c,selectedCampaign:i})})]})};export{H as EditCampaignView};
1
+ import{jsx as o,jsxs as y,Fragment as p}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 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"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCampaign as U}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as s,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{Loading as S}from"../Loading/Loading.esm.js";import{PageWarningMessage as j}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as v}from"../SoundcheckHeader/useHeader.esm.js";import{EmptyCampaignState as B}from"./CampaignEmptyState.esm.js";const H=()=>{v({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(s),{campaignId:t}=E(),{setIsLoading:e}=w(),{mutateAsync:g,isLoading:m}=x(),{data:f,isLoading:a}=U(t??""),i=f?.edges?.[0]?.node,{loading:u,allowed:r}=R({permission:L,resourceRef:i?.id});P(()=>e(m),[e,m]);const l=n(s),C=n(A);if(!a&&!i)return o(B,{});const h=async k=>{await g(k,{onSuccess:d})};return y(p,{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(j,{entityId:i?.id,entityName:i?.name??"",showCannotEdit:!u&&!r}),a?o(S,{}):o(p,{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{jsx as t,jsxs as a}from"react/jsx-runtime";import{Text as s,Flex as n,Card as l,CardHeader as m,CardBody as h}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{CheckStatusTableBUI as p}from"../../CheckPage/CheckStatusTableBUI.esm.js";import"../../CheckStatusBar/CheckStatusBar.esm.js";import{CheckStatusBarBUI as C}from"../../CheckStatusBar/CheckStatusBarBUI.esm.js";import{LoadingTableSkeleton as k}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const S=u(()=>({card:{minHeight:"15.1rem"}})),f=({status:e,states:o,isLoading:c,isError:i})=>{const d=S();let r;return c?r=t(k,{rowCount:3}):i?r=t(s,{color:"warning",children:"Failed to load check data."}):r=a(n,{direction:"column",gap:"6",children:[t(C,{status:e,states:o}),t(p,{checkStatus:e,states:o})]}),a(l,{className:d.card,children:[t(m,{children:t(s,{color:"secondary",children:"Current Status"})}),t(h,{children:r})]})};export{f as CheckStatusCard};
1
+ import{jsx as t,jsxs as a}from"react/jsx-runtime";import{Text as s,Flex as n,Card as l,CardHeader as m,CardBody as h}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{CheckStatusTableBUI as p}from"../../CheckPage/CheckStatusTableBUI.esm.js";import{CheckStatusBarBUI as C}from"../../CheckStatusBar/CheckStatusBarBUI.esm.js";import{LoadingTableSkeleton as k}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const S=u(()=>({card:{minHeight:"15.1rem"}})),f=({status:e,states:o,isLoading:c,isError:i})=>{const d=S();let r;return c?r=t(k,{rowCount:3}):i?r=t(s,{color:"warning",children:"Failed to load check data."}):r=a(n,{direction:"column",gap:"6",children:[t(C,{status:e,states:o}),t(p,{checkStatus:e,states:o})]}),a(l,{className:d.card,children:[t(m,{children:t(s,{color:"secondary",children:"Current Status"})}),t(h,{children:r})]})};export{f as CheckStatusCard};
2
2
  //# sourceMappingURL=CheckStatusCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as u}from"react/jsx-runtime";import{useEntity as g}from"@backstage/plugin-catalog-react";import{styled as e,Accordion as h,AccordionSummary as b,AccordionDetails as k,makeStyles as y,Box as R}from"@material-ui/core";import x from"@material-ui/icons/ExpandMore";import{useRef as v}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as I}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{AlertPanel as L}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as C}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as S}from"../CertificationSidebar/CertificationLevel.esm.js";const A=e(h)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),B=e(({...t})=>i(b,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),E=e(k)(()=>({margin:"0 !important",borderRadius:0,padding:0})),d=y(()=>({sidebar:{width:"100%"}})),D=({playlistId:t,trackId:o,checkId:n})=>{const m=d(),{entity:p}=g(),c=v(null),{data:r,isLoading:s,isError:l}=I(p,o);if(l)return i("div",{children:i(R,{padding:2,children:i(L,{severity:"error",title:"Error loading certification"})})});if(s||!o)return i(C,{});if(!r)return null;const f=r.track.type==="campaign";return u(A,{ref:c,defaultExpanded:!0,elevation:0,children:[i(B,{expandIcon:i(x,{}),"aria-controls":"certification-content",id:"certification-summary",children:i(T,{name:r.track.name,badge:r.track.badge,description:r.track.description,documentationUrl:r.track.documentationURL,trackType:r.track.type})}),i(E,{children:i("div",{className:m.sidebar,children:r?.levels.map(a=>i(S,{level:a,checkId:n,trackId:o,playlistId:t,isCampaign:f},a.ordinal))})})]})};export{D as CertificationAccordion,d as useStyles};
1
+ import{jsx as i,jsxs as u}from"react/jsx-runtime";import{useEntity as g}from"@backstage/plugin-catalog-react";import{styled as e,Accordion as h,AccordionSummary as b,AccordionDetails as k,makeStyles as y,Box as R}from"@material-ui/core";import x from"@material-ui/icons/ExpandMore";import{useRef as v}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as I}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{AlertPanel as L}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as C}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as S}from"../CertificationSidebar/CertificationLevel.esm.js";const A=e(h)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),B=e(({...t})=>i(b,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),E=e(k)(()=>({margin:"0 !important",borderRadius:0,padding:0})),d=y(()=>({sidebar:{width:"100%"}})),D=({playlistId:t,trackId:o,checkId:n})=>{const m=d(),{entity:p}=g(),c=v(null),{data:r,isLoading:s,isError:l}=I(p,o);if(l)return i("div",{children:i(R,{padding:2,children:i(L,{severity:"error",title:"Error loading certification"})})});if(s||!o)return i(C,{});if(!r)return null;const f=r.track.type==="campaign";return u(A,{ref:c,defaultExpanded:!0,elevation:0,children:[i(B,{expandIcon:i(x,{}),"aria-controls":"certification-content",id:"certification-summary",children:i(T,{name:r.track.name,badge:r.track.badge,description:r.track.description,documentationUrl:r.track.documentationURL,trackType:r.track.type})}),i(E,{children:i("div",{className:m.sidebar,children:r?.levels.map(a=>i(S,{level:a,checkId:n,trackId:o,playlistId:t,isCampaign:f},a.ordinal))})})]})};export{D as CertificationAccordion,d as useStyles};
2
2
  //# sourceMappingURL=CertificationAccordion.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as y}from"react/jsx-runtime";import{stringifyEntityRef as h}from"@backstage/catalog-model";import{useEntity as g}from"@backstage/plugin-catalog-react";import{makeStyles as x,Box as C}from"@material-ui/core";import{ResultState as I}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as S}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useExemptCheckIds as b}from"../../hooks/exemptions/useExemptCheckIds.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"react-use/lib/useAsyncRetry";import{AlertPanel as v}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as E}from"./CertificationLevel.esm.js";import{CertificationSummary as L}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as A}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const R=x(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),j=({playlistId:a,trackId:e,checkId:p,showNotApplicable:c,showExempt:n})=>{const{entity:o}=g(),{data:t,isLoading:l,isError:s}=S(o,e),{data:d,isLoading:f}=b(h(o),e);if(s)return i("div",{children:i(C,{padding:2,children:i(v,{severity:"error",title:"Error loading certification"})})});if(l||f||!e)return i(A,{});if(!t)return null;const k=t.track.type==="campaign",u=t.levels.map(r=>({...r,checks:r.checks?.filter(m=>m.result===I.NotApplicable?c:d?.exemptCheckIds.includes(m.id)?n:!0)}));return y("div",{children:[i(L,{name:t.track.name,badge:t.track.badge,description:t.track.description,documentationUrl:t.track.documentationURL,trackType:t.track.type}),u.map(r=>i(E,{level:r,checkId:p,trackId:e,playlistId:a,isCampaign:k},r.ordinal))]})};export{j as CertificationSidebar,R as useStyles};
1
+ import{jsx as i,jsxs as y}from"react/jsx-runtime";import{stringifyEntityRef as h}from"@backstage/catalog-model";import{useEntity as g}from"@backstage/plugin-catalog-react";import{makeStyles as x,Box as C}from"@material-ui/core";import{ResultState as I}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as S}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useExemptCheckIds as b}from"../../hooks/exemptions/useExemptCheckIds.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"react-use/lib/useAsyncRetry";import{AlertPanel as v}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as E}from"./CertificationLevel.esm.js";import{CertificationSummary as L}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as A}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const R=x(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),j=({playlistId:a,trackId:e,checkId:p,showNotApplicable:c,showExempt:n})=>{const{entity:o}=g(),{data:t,isLoading:l,isError:s}=S(o,e),{data:d,isLoading:f}=b(h(o),e);if(s)return i("div",{children:i(C,{padding:2,children:i(v,{severity:"error",title:"Error loading certification"})})});if(l||f||!e)return i(A,{});if(!t)return null;const k=t.track.type==="campaign",u=t.levels.map(r=>({...r,checks:r.checks?.filter(m=>m.result===I.NotApplicable?c:d?.exemptCheckIds.includes(m.id)?n:!0)}));return y("div",{children:[i(L,{name:t.track.name,badge:t.track.badge,description:t.track.description,documentationUrl:t.track.documentationURL,trackType:t.track.type}),u.map(r=>i(E,{level:r,checkId:p,trackId:e,playlistId:a,isCampaign:k},r.ordinal))]})};export{j as CertificationSidebar,R as useStyles};
2
2
  //# sourceMappingURL=CertificationSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as u}from"react/jsx-runtime";import{stringifyEntityRef as A}from"@backstage/catalog-model";import{useEntity as E}from"@backstage/plugin-catalog-react";import{Flex as $}from"@backstage/ui";import{makeStyles as w,Box as l,Typography as B,Tooltip as F,IconButton as S,CircularProgress as T}from"@material-ui/core";import W from"@material-ui/icons/Refresh";import z from"classnames";import{Link as j}from"react-router-dom";import{ResultState as f}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as G}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as L}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"react-use/lib/useAsyncRetry";import{useExecuteCheck as q}from"../../hooks/checks/useExecuteCheck.esm.js";import{useFixWithAika as K}from"../../hooks/fixWithAika/useFixWithAika.esm.js";import{CheckIcon as P}from"../CheckIcon/CheckIcon.esm.js";import{FixWithAiKAButton as _}from"../FixWithAiKAButton/FixWithAiKAButton.esm.js";import{RelativeTime as D}from"../RelativeTime/RelativeTime.esm.js";const k=w(t=>({root:{display:"flex",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}},checkIcon:{height:20}})),H=({className:t,href:r,name:i,children:c})=>r?e(j,{"aria-label":`select check ${i}`,to:r,className:t,children:c}):e("div",{className:t,children:c}),J=({result:t,name:r,id:i,timestamp:c,isExecutable:s=!0,selected:y=!1,href:x})=>{const h=k(),g=z(h.root,{selected:y}),{data:p}=G(i),{entity:n}=E(),m=A(n),{mutateAsync:b,isLoading:a}=q(),{data:d}=L(m,i),C=async()=>{if(!(!n||!i))try{await b({checkerId:i,entityRef:m,shouldRefreshFacts:!0})}catch{}},I=!n||!i||!s||a||!!d?.exemption||t===f.NotApplicable,R=()=>{const o="Cannot execute check";return n?i?s?a?`${o} - check is already executing.`:d?.exemption?`${o} - entity has been exempted from this check.`:t===f.NotApplicable?`${o} - check is not applicable to entity.`:"Execute Check":`${o} - check is not executable by Soundcheck`:`${o} - no check id.`:`${o} - no entity.`},{showAikaButton:N,pullRequest:v}=K({result:t,type:p?.type,rule:p?.rule});return e(H,{href:x,className:g,name:r,children:u(l,{display:"flex",alignItems:"center",width:"100%",children:[e(P,{className:h.checkIcon,result:t}),e(l,{ml:1,flex:1,minWidth:0,children:e(B,{variant:"body2",noWrap:!0,children:r})}),u($,{align:"center",gap:"2",children:[c&&!a?e(l,{children:e(D,{timestamp:c,showIcon:!1})}):null,!a&&e(l,{children:e(F,{title:R(),children:e("span",{children:e(S,{size:"small",color:"inherit",onClick:C,disabled:I,"aria-label":"Execute Check",children:e(W,{fontSize:"small"})})})})}),a&&e(l,{children:e(T,{color:"inherit",size:"1em"})}),N&&!v&&e(_,{checkReference:{entityRef:m,checkId:i,checkName:r}})]})]})})};export{J as Check,k as useStyles};
1
+ import{jsx as e,jsxs as u}from"react/jsx-runtime";import{stringifyEntityRef as A}from"@backstage/catalog-model";import{useEntity as E}from"@backstage/plugin-catalog-react";import{Flex as $}from"@backstage/ui";import{makeStyles as w,Box as l,Typography as B,Tooltip as F,IconButton as S,CircularProgress as T}from"@material-ui/core";import W from"@material-ui/icons/Refresh";import z from"classnames";import{Link as j}from"react-router-dom";import{ResultState as f}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as G}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as L}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"react-use/lib/useAsyncRetry";import{useExecuteCheck as q}from"../../hooks/checks/useExecuteCheck.esm.js";import{useFixWithAika as K}from"../../hooks/fixWithAika/useFixWithAika.esm.js";import{CheckIcon as P}from"../CheckIcon/CheckIcon.esm.js";import{FixWithAiKAButton as _}from"../FixWithAiKAButton/FixWithAiKAButton.esm.js";import{RelativeTime as D}from"../RelativeTime/RelativeTime.esm.js";const k=w(t=>({root:{display:"flex",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}},checkIcon:{height:20}})),H=({className:t,href:r,name:i,children:c})=>r?e(j,{"aria-label":`select check ${i}`,to:r,className:t,children:c}):e("div",{className:t,children:c}),J=({result:t,name:r,id:i,timestamp:c,isExecutable:s=!0,selected:y=!1,href:x})=>{const h=k(),g=z(h.root,{selected:y}),{data:p}=G(i),{entity:n}=E(),m=A(n),{mutateAsync:b,isLoading:a}=q(),{data:d}=L(m,i),C=async()=>{if(!(!n||!i))try{await b({checkerId:i,entityRef:m,shouldRefreshFacts:!0})}catch{}},I=!n||!i||!s||a||!!d?.exemption||t===f.NotApplicable,R=()=>{const o="Cannot execute check";return n?i?s?a?`${o} - check is already executing.`:d?.exemption?`${o} - entity has been exempted from this check.`:t===f.NotApplicable?`${o} - check is not applicable to entity.`:"Execute Check":`${o} - check is not executable by Soundcheck`:`${o} - no check id.`:`${o} - no entity.`},{showAikaButton:N,pullRequest:v}=K({result:t,type:p?.type,rule:p?.rule});return e(H,{href:x,className:g,name:r,children:u(l,{display:"flex",alignItems:"center",width:"100%",children:[e(P,{className:h.checkIcon,result:t}),e(l,{ml:1,flex:1,minWidth:0,children:e(B,{variant:"body2",noWrap:!0,children:r})}),u($,{align:"center",gap:"2",children:[c&&!a?e(l,{children:e(D,{timestamp:c,showIcon:!1})}):null,!a&&e(l,{children:e(F,{title:R(),children:e("span",{children:e(S,{size:"small",color:"inherit",onClick:C,disabled:I,"aria-label":"Execute Check",children:e(W,{fontSize:"small"})})})})}),a&&e(l,{children:e(T,{color:"inherit",size:"1em"})}),N&&!v&&e(_,{checkReference:{entityRef:m,checkId:i,checkName:r}})]})]})})};export{J as Check,k as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as R,DialogContent as S,Box as b,Typography as C,TextField as A,FormHelperText as F,DialogActions as j,Button as x}from"@material-ui/core";import{useState as f,useEffect as T,useCallback as h}from"react";import{ResultState as D}from"../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useSoundcheckAlert as L}from"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as I}from"../../hooks/exemptions/useGetExemption.esm.js";import{useSetEntityExempt as J}from"../../hooks/exemptions/useSetEntityExempt.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"react-use/lib/useAsyncRetry";import{useDeleteExemption as B}from"../../hooks/exemptions/useDeleteExemption.esm.js";import{FormFieldLabel as N}from"../FormFieldLabel/FormFieldLabel.esm.js";import{SoundcheckDialog as W}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const g=R(t=>({buttonArea:{paddingLeft:t.spacing(1),paddingBottom:0,justifyContent:"flex-start"},content:{minWidth:480,maxWidth:640,marginTop:t.spacing(0),paddingLeft:t.spacing(1),paddingTop:t.spacing(0)}})),O=({entityRef:t,checkId:i,isOpen:y,setIsOpen:a})=>{const[P,m]=f(),{showAlert:p}=L(),s=g(),[n,l]=f(""),{mutateAsync:d}=J(),{mutateAsync:c}=B(),{data:e,isLoading:u}=I(t,i);T(()=>{e?.exemption&&l(e.exemption.justification)},[e?.exemption]);const v=h(async()=>{!t||!i||await d({checkId:i,entityRef:t,justification:n})&&m({id:i,entityRef:t,result:D.Exempt,details:{notes:{type:"notes",data:n,version:1}},facts:[],ruleResults:[]})},[t,i,n,d,m]),E=h(async()=>{if(!(!t||!i))try{await c({checkId:i,entityRef:t})}catch{p({severity:"error",title:"Failure",message:"Failed to delete exemption."})}},[t,i,c,p]);return r(w,{children:[u&&o("div",{children:"Loading..."}),!u&&r(W,{open:y,handleClose:()=>a(!1),title:e?.exemption?"Remove Exemption?":"Justify Exemption",fullScreen:!1,children:[o(S,{className:s.content,children:r(b,{children:[o(N,{title:e?.exemption?"Existing Justification":"Exemption Justification"}),!e?.exemption&&o(C,{variant:"caption",children:"Please explain why this exemption is necessary. Supports limited markdown."}),o(A,{disabled:!!e?.exemption,variant:"outlined",margin:"dense",fullWidth:!0,value:n,inputProps:{"aria-label":"Exemption Reason"},multiline:!0,rows:3,maxRows:6,onChange:k=>l(k.target.value)}),o(F,{children:"Note: The act of adding or removing an exemption is tied to your user id and is monitored and recorded. Exemptions should only be added or removed with proper cause."})]})}),r(j,{className:s.buttonArea,children:[o(x,{variant:"contained",onClick:async()=>{a(!1),e?.exemption?await E():await v()},color:"primary",disabled:!e?.exemption&&(!n||n?.length===0),children:e?.exemption?"Remove":"Submit"}),o(x,{onClick:()=>a(!1),color:"primary",children:"Cancel"})]})]})]})};export{O as ExemptionJustificationDialog,g as useStyles};
1
+ import{jsxs as r,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as R,DialogContent as S,Box as b,Typography as C,TextField as A,FormHelperText as F,DialogActions as j,Button as x}from"@material-ui/core";import{useState as f,useEffect as T,useCallback as h}from"react";import{ResultState as D}from"../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useSoundcheckAlert as L}from"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as I}from"../../hooks/exemptions/useGetExemption.esm.js";import{useSetEntityExempt as J}from"../../hooks/exemptions/useSetEntityExempt.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"react-use/lib/useAsyncRetry";import{useDeleteExemption as B}from"../../hooks/exemptions/useDeleteExemption.esm.js";import{FormFieldLabel as N}from"../FormFieldLabel/FormFieldLabel.esm.js";import{SoundcheckDialog as W}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const g=R(t=>({buttonArea:{paddingLeft:t.spacing(1),paddingBottom:0,justifyContent:"flex-start"},content:{minWidth:480,maxWidth:640,marginTop:t.spacing(0),paddingLeft:t.spacing(1),paddingTop:t.spacing(0)}})),O=({entityRef:t,checkId:i,isOpen:y,setIsOpen:a})=>{const[P,m]=f(),{showAlert:p}=L(),s=g(),[n,l]=f(""),{mutateAsync:d}=J(),{mutateAsync:c}=B(),{data:e,isLoading:u}=I(t,i);T(()=>{e?.exemption&&l(e.exemption.justification)},[e?.exemption]);const v=h(async()=>{!t||!i||await d({checkId:i,entityRef:t,justification:n})&&m({id:i,entityRef:t,result:D.Exempt,details:{notes:{type:"notes",data:n,version:1}},facts:[],ruleResults:[]})},[t,i,n,d,m]),E=h(async()=>{if(!(!t||!i))try{await c({checkId:i,entityRef:t})}catch{p({severity:"error",title:"Failure",message:"Failed to delete exemption."})}},[t,i,c,p]);return r(w,{children:[u&&o("div",{children:"Loading..."}),!u&&r(W,{open:y,handleClose:()=>a(!1),title:e?.exemption?"Remove Exemption?":"Justify Exemption",fullScreen:!1,children:[o(S,{className:s.content,children:r(b,{children:[o(N,{title:e?.exemption?"Existing Justification":"Exemption Justification"}),!e?.exemption&&o(C,{variant:"caption",children:"Please explain why this exemption is necessary. Supports limited markdown."}),o(A,{disabled:!!e?.exemption,variant:"outlined",margin:"dense",fullWidth:!0,value:n,inputProps:{"aria-label":"Exemption Reason"},multiline:!0,rows:3,maxRows:6,onChange:k=>l(k.target.value)}),o(F,{children:"Note: The act of adding or removing an exemption is tied to your user id and is monitored and recorded. Exemptions should only be added or removed with proper cause."})]})}),r(j,{className:s.buttonArea,children:[o(x,{variant:"contained",onClick:async()=>{a(!1),e?.exemption?await E():await v()},color:"primary",disabled:!e?.exemption&&(!n||n?.length===0),children:e?.exemption?"Remove":"Submit"}),o(x,{onClick:()=>a(!1),color:"primary",children:"Cancel"})]})]})]})};export{O as ExemptionJustificationDialog,g as useStyles};
2
2
  //# sourceMappingURL=ExemptionJustificationDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as o,jsxs as c,Fragment as d}from"react/jsx-runtime";import{useEntity as l}from"@backstage/plugin-catalog-react";import{makeStyles as f,Tab as g}from"@material-ui/core";import{Link as w}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as b}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{CertificationBadge as h}from"../Badges/CertificationBadge.esm.js";const e=f(t=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:t.spacing(2),paddingBottom:t.spacing(2)},wrapper:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden",flexDirection:"row"},badge:{marginRight:t.spacing(1)}})),x=({id:t,name:i,badge:p,href:a,selected:m=!1})=>{const r=e(),{entity:s}=l(),{data:n}=b(s,t);return o(g,{className:r.root,classes:{wrapper:r.wrapper},value:t,label:c(d,{children:[o(h,{badge:p,trackType:n?.track.type,className:r.badge}),i]}),component:w,to:a,selected:m})};export{x as CertificationTab,e as useStyles};
1
+ import{jsx as o,jsxs as c,Fragment as d}from"react/jsx-runtime";import{useEntity as l}from"@backstage/plugin-catalog-react";import{makeStyles as f,Tab as g}from"@material-ui/core";import{Link as w}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as b}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{CertificationBadge as h}from"../Badges/CertificationBadge.esm.js";const i=f(t=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:t.spacing(2),paddingBottom:t.spacing(2)},wrapper:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden",flexDirection:"row"},badge:{marginRight:t.spacing(1)}})),x=({id:t,name:e,badge:p,href:a,selected:m=!1})=>{const r=i(),{entity:s}=l(),{data:n}=b(s,t);return o(g,{className:r.root,classes:{wrapper:r.wrapper},value:t,label:c(d,{children:[o(h,{badge:p,trackType:n?.track.type,className:r.badge}),e]}),component:w,to:a,selected:m})};export{x as CertificationTab,i as useStyles};
2
2
  //# sourceMappingURL=CertificationTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as n}from"react/jsx-runtime";import{useRouteRef as b}from"@backstage/core-plugin-api";import{useEntity as P}from"@backstage/plugin-catalog-react";import{makeStyles as v,Tabs as B,IconButton as M,Menu as j,MenuItem as u,Switch as k}from"@material-ui/core";import D from"@material-ui/icons/ArrowDropDown";import L from"@material-ui/icons/Settings.js";import{useState as O,useEffect as Q}from"react";import C from"react-use/lib/useLocalStorage";import{useAllCertifications as U}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as X}from"../../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{certificationPlaylistRouteRef as Y,certificationTrackRouteRef as $}from"../../routes.esm.js";import{CertificationTab as q}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as F}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as G}from"./skeletons/CertificationTabsSkeleton.esm.js";function H(r=[],a=[],c,l){if(c){const o=r.findIndex(s=>s.id===c);return o<0?!1:o}const e=a.findIndex(o=>o.track.id===l);return e<0?!1:e+r.length}const J=v(r=>({tabsContainer:{display:"flex",alignItems:"center"},tabs:{flex:1},settingsButton:{display:"flex",alignItems:"center",marginRight:r.spacing(1)}})),K=({playlistId:r,trackId:a,onSettingsChange:c})=>{const l=J(),[e,o]=O(null),[s,y]=C("soundcheck.certifications.showNotApplicable",!1),[m,x]=C("soundcheck.certifications.showExempt",!0),[p,I]=C("soundcheck.certifications.showDraftTracksAndCampaigns",!1);Q(()=>{c?.({showNotApplicable:!!s,showExempt:!!m})},[s,m,c]);const S=t=>{o({top:t.clientY,left:t.clientX})},w=()=>{o(null)},{entity:g}=P(),{isLoading:T,data:f}=U(g,!1,p),{isLoading:R,data:d}=X(g),z=b(Y),A=b($);if(R||T||!a)return i(G,{});const E=H(d,f,r,a);return n("div",{className:l.tabsContainer,children:[n(B,{className:l.tabs,value:E,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable",children:[d?.length&&d.map(({id:t,name:h})=>i(F,{id:t,name:h,selected:t===a,href:z({playlistId:t})},t)),f&&f.filter(({track:{type:t}})=>t!=="playlist").map(({track:{id:t,name:h,badge:N}})=>i(q,{id:t,name:h,badge:N,selected:t===a,href:A({trackId:t})},t))]}),n(M,{className:l.settingsButton,onClick:S,size:"small",children:[i(L,{fontSize:"small"}),i(D,{fontSize:"small"})]}),n(j,{open:!!e,onClose:w,anchorReference:"anchorPosition",anchorPosition:e?{top:e.top,left:e.left}:void 0,transformOrigin:{vertical:"top",horizontal:"right"},children:[n(u,{onClick:()=>{y(!s)},dense:!0,children:[i(k,{size:"small",checked:s}),"Show Not Applicable Checks"]}),n(u,{onClick:()=>{x(!m)},dense:!0,children:[i(k,{size:"small",checked:m}),"Show Exempt Checks"]}),n(u,{onClick:()=>{I(!p)},dense:!0,children:[i(k,{size:"small",checked:p}),"Show Draft Tracks and Campaigns"]})]})]})};export{K as CertificationTabs};
1
+ import{jsx as i,jsxs as n}from"react/jsx-runtime";import{useRouteRef as b}from"@backstage/core-plugin-api";import{useEntity as P}from"@backstage/plugin-catalog-react";import{makeStyles as v,Tabs as B,IconButton as M,Menu as j,MenuItem as u,Switch as k}from"@material-ui/core";import D from"@material-ui/icons/ArrowDropDown";import L from"@material-ui/icons/Settings.js";import{useState as O,useEffect as Q}from"react";import C from"react-use/lib/useLocalStorage";import{useAllCertifications as U}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as X}from"../../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{certificationPlaylistRouteRef as Y,certificationTrackRouteRef as $}from"../../routes.esm.js";import{CertificationTab as q}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as F}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as G}from"./skeletons/CertificationTabsSkeleton.esm.js";function H(r=[],a=[],c,l){if(c){const o=r.findIndex(s=>s.id===c);return o<0?!1:o}const e=a.findIndex(o=>o.track.id===l);return e<0?!1:e+r.length}const J=v(r=>({tabsContainer:{display:"flex",alignItems:"center"},tabs:{flex:1},settingsButton:{display:"flex",alignItems:"center",marginRight:r.spacing(1)}})),K=({playlistId:r,trackId:a,onSettingsChange:c})=>{const l=J(),[e,o]=O(null),[s,y]=C("soundcheck.certifications.showNotApplicable",!1),[m,x]=C("soundcheck.certifications.showExempt",!0),[p,I]=C("soundcheck.certifications.showDraftTracksAndCampaigns",!1);Q(()=>{c?.({showNotApplicable:!!s,showExempt:!!m})},[s,m,c]);const S=t=>{o({top:t.clientY,left:t.clientX})},w=()=>{o(null)},{entity:g}=P(),{isLoading:T,data:f}=U(g,!1,p),{isLoading:R,data:d}=X(g),z=b(Y),A=b($);if(R||T||!a)return i(G,{});const E=H(d,f,r,a);return n("div",{className:l.tabsContainer,children:[n(B,{className:l.tabs,value:E,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable",children:[d?.length&&d.map(({id:t,name:h})=>i(F,{id:t,name:h,selected:t===a,href:z({playlistId:t})},t)),f&&f.filter(({track:{type:t}})=>t!=="playlist").map(({track:{id:t,name:h,badge:N}})=>i(q,{id:t,name:h,badge:N,selected:t===a,href:A({trackId:t})},t))]}),n(M,{className:l.settingsButton,onClick:S,size:"small",children:[i(L,{fontSize:"small"}),i(D,{fontSize:"small"})]}),n(j,{open:!!e,onClose:w,anchorReference:"anchorPosition",anchorPosition:e?{top:e.top,left:e.left}:void 0,transformOrigin:{vertical:"top",horizontal:"right"},children:[n(u,{onClick:()=>{y(!s)},dense:!0,children:[i(k,{size:"small",checked:s}),"Show Not Applicable Checks"]}),n(u,{onClick:()=>{x(!m)},dense:!0,children:[i(k,{size:"small",checked:m}),"Show Exempt Checks"]}),n(u,{onClick:()=>{I(!p)},dense:!0,children:[i(k,{size:"small",checked:p}),"Show Draft Tracks and Campaigns"]})]})]})};export{K as CertificationTabs};
2
2
  //# sourceMappingURL=CertificationTabs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as d}from"react/jsx-runtime";import{stringifyEntityRef as I}from"@backstage/catalog-model";import{useEntity as C}from"@backstage/plugin-catalog-react";import{makeStyles as g,Paper as x,Divider as E}from"@material-ui/core";import{useState as N,useCallback as P}from"react";import{useParams as A}from"react-router-dom";import{useAllCertifications as R}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as S}from"../../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{AlertPanel as c}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as D}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as T}from"../Charts/chartUtils.esm.js";import{CheckDetails as $}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as j}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as F}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LevelUpParty as L}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as U}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as q}from"./CertificationTabs.esm.js";import{PlaylistComponent as z}from"./Playlist/PlaylistComponent.esm.js";const n=g(i=>({paper:{overflow:"hidden",position:"relative",border:T(i)?`1px solid ${i.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${i.palette.divider}`}})),B=()=>{const{playlistId:i,trackId:t,checkId:s}=A(),p=n(),{entity:o}=C(),{isError:f,isFetched:h,data:y}=R(o),{isError:v,data:u}=S(o),[a,l]=N({showNotApplicable:!1,showExempt:!1}),k=P(({showNotApplicable:m,showExempt:b})=>{l({showNotApplicable:m,showExempt:b})},[l]);if(f||v)return r(c,{severity:"error",title:"Error loading certifications"});const e=i&&u?.find(m=>m.id===i);if(i&&!e)return r(c,{severity:"error",title:"Playlist ${playlistId} not found."});if(h&&!y?.length)return r(F,{});const w=o?I(o):void 0;return r(j,{children:d(x,{className:p.paper,children:[r(U,{}),r(q,{playlistId:i,trackId:t,onSettingsChange:k}),r(E,{}),e&&r(z,{playlist:e,entityRef:w}),!e&&t&&d("div",{"data-testid":"soundcheck-certification-view",className:p.view,children:[r("div",{className:p.sidebar,children:r(D,{trackId:t,checkId:s,showNotApplicable:a.showNotApplicable,showExempt:a.showExempt})}),r($,{trackId:t,checkId:s}),r(L,{trackId:t})]})]})})};export{B as CertificationsPage,n as useStyles};
1
+ import{jsx as r,jsxs as d}from"react/jsx-runtime";import{stringifyEntityRef as I}from"@backstage/catalog-model";import{useEntity as C}from"@backstage/plugin-catalog-react";import{makeStyles as g,Paper as x,Divider as E}from"@material-ui/core";import{useState as N,useCallback as P}from"react";import{useParams as A}from"react-router-dom";import{useAllCertifications as R}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as S}from"../../hooks/playlists/usePlaylists.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{AlertPanel as c}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as D}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as T}from"../Charts/chartUtils.esm.js";import{CheckDetails as $}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as j}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as F}from"../EmptyState/EmptyState.esm.js";import"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LevelUpParty as L}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as U}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as q}from"./CertificationTabs.esm.js";import{PlaylistComponent as z}from"./Playlist/PlaylistComponent.esm.js";const n=g(i=>({paper:{overflow:"hidden",position:"relative",border:T(i)?`1px solid ${i.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${i.palette.divider}`}})),B=()=>{const{playlistId:i,trackId:t,checkId:s}=A(),p=n(),{entity:o}=C(),{isError:f,isFetched:h,data:y}=R(o),{isError:v,data:u}=S(o),[a,l]=N({showNotApplicable:!1,showExempt:!1}),k=P(({showNotApplicable:m,showExempt:b})=>{l({showNotApplicable:m,showExempt:b})},[l]);if(f||v)return r(c,{severity:"error",title:"Error loading certifications"});const e=i&&u?.find(m=>m.id===i);if(i&&!e)return r(c,{severity:"error",title:"Playlist ${playlistId} not found."});if(h&&!y?.length)return r(F,{});const w=o?I(o):void 0;return r(j,{children:d(x,{className:p.paper,children:[r(U,{}),r(q,{playlistId:i,trackId:t,onSettingsChange:k}),r(E,{}),e&&r(z,{playlist:e,entityRef:w}),!e&&t&&d("div",{"data-testid":"soundcheck-certification-view",className:p.view,children:[r("div",{className:p.sidebar,children:r(D,{trackId:t,checkId:s,showNotApplicable:a.showNotApplicable,showExempt:a.showExempt})}),r($,{trackId:t,checkId:s}),r(L,{trackId:t})]})]})})};export{B as CertificationsPage,n as useStyles};
2
2
  //# sourceMappingURL=CertificationsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as m}from"react/jsx-runtime";import{createContext as n,useContext as p}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useCertificationDetails as s}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";const i=n(void 0),a=()=>{const t=p(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},c=t=>{const{children:r,entityRef:o}=t,e=s(o);return m(i.Provider,{value:e,children:r})};export{c as PlaylistCertificationProvider,a as usePlaylistCertificationContext};
1
+ import{jsx as m}from"react/jsx-runtime";import{createContext as n,useContext as p}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useCertificationDetails as s}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";const i=n(void 0),a=()=>{const t=p(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},c=t=>{const{children:r,entityRef:o}=t,e=s(o);return m(i.Provider,{value:e,children:r})};export{c as PlaylistCertificationProvider,a as usePlaylistCertificationContext};
2
2
  //# sourceMappingURL=PlaylistContext.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as d,Fragment as h,jsx as e}from"react/jsx-runtime";import{useRouteRef as a}from"@backstage/core-plugin-api";import{HeaderPage as k}from"@backstage/ui";import{useEffect as p}from"react";import{v4 as g}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as C,useCheckFormContext as y}from"../../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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useCheckTemplates as F}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as I}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as L}from"../../hooks/useSearchParam.esm.js";import{checkTemplatesRouteRef as P,checksPageRouteRef as n}from"../../routes.esm.js";import{CheckForm as R}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{DocLinkButton as v}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as x}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as S}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../SoundcheckHeader/useHeader.esm.js";const A=({template:t})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=y(),{mutateAsync:c,isLoading:i}=I();p(()=>{r(t?{...t,id:g()}:null)},[t,r]),p(()=>{o(i)},[o,i]);const[s,l]=b(n),f=async u=>{await c(u,{onSuccess:l})};return w({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),t&&!m?null:e(R,{onSave:f,onClose:s})},N=()=>{const[[t]]=L("template"),{isLoading:o,data:m}=F(),r=t&&m?m.find(s=>s.id===t)??null:null,c=a(P),i=a(n);return d(h,{children:[e(k,{title:"Create Check",breadcrumbs:[{label:"All Checks",href:i()},{label:"Templates",href:c()}],customActions:e(v,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),e(S,{entityName:"check template",entityId:t,showNotFound:!!t&&!o&&!r}),o&&e(x,{}),e(C,{children:!o&&(!t||r)&&e(A,{template:r})})]})};export{N as CheckCreatePage};
1
+ import{jsxs as d,Fragment as h,jsx as e}from"react/jsx-runtime";import{useRouteRef as a}from"@backstage/core-plugin-api";import{HeaderPage as k}from"@backstage/ui";import{useEffect as p}from"react";import{v4 as g}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as C,useCheckFormContext as y}from"../../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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useCheckTemplates as F}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as I}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as L}from"../../hooks/useSearchParam.esm.js";import{checkTemplatesRouteRef as P,checksPageRouteRef as n}from"../../routes.esm.js";import{CheckForm as R}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{DocLinkButton as v}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as x}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as S}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../SoundcheckHeader/useHeader.esm.js";const A=({template:t})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=y(),{mutateAsync:c,isLoading:i}=I();p(()=>{r(t?{...t,id:g()}:null)},[t,r]),p(()=>{o(i)},[o,i]);const[s,l]=b(n),f=async u=>{await c(u,{onSuccess:l})};return w({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),t&&!m?null:e(R,{onSave:f,onClose:s})},N=()=>{const[[t]]=L("template"),{isLoading:o,data:m}=F(),r=t&&m?m.find(s=>s.id===t)??null:null,c=a(P),i=a(n);return d(h,{children:[e(k,{title:"Create Check",breadcrumbs:[{label:"All Checks",href:i()},{label:"Templates",href:c()}],customActions:e(v,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),e(S,{entityName:"check template",entityId:t,showNotFound:!!t&&!o&&!r}),o&&e(x,{}),e(C,{children:!o&&(!t||r)&&e(A,{template:r})})]})};export{N as CheckCreatePage};
2
2
  //# sourceMappingURL=CheckCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as n,Fragment as O}from"react/jsx-runtime";import{stringifyEntityRef as B}from"@backstage/catalog-model";import{useEntity as W}from"@backstage/plugin-catalog-react";import{makeStyles as $,Box as m,Typography as d,Button as g,Tooltip as q}from"@material-ui/core";import{Alert as b}from"@material-ui/lab";import{useState as E}from"react";import{CheckerType as U,ResultState as h}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as G}from"../../hooks/checks/useCheck.esm.js";import{useCheckDetails as J}from"../../hooks/checks/useCheckDetails.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as V}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{getBranchName as _}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useSetManualResult as H}from"../../hooks/checks/useSetManualResult.esm.js";import{useFixWithAika as K}from"../../hooks/fixWithAika/useFixWithAika.esm.js";import{AlertPanel as Q}from"../AlertPanel/AlertPanel.esm.js";import{CheckResultInputPopup as X}from"../CertificationSidebar/CheckResultInputPopup.esm.js";import{ExemptionJustificationDialog as Y}from"../CertificationSidebar/ExemptionJustificationDialog.esm.js";import{RelativeTime as Z}from"../RelativeTime/RelativeTime.esm.js";import{SoundcheckMarkdownContentDeprecated as ee}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{CheckPullRequest as te}from"./CheckPullRequest.esm.js";import{ResultStateBox as ie}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as re}from"./skeletons/CheckDetailsSkeleton.esm.js";const u=$(t=>({root:{padding:`${t.spacing(3)}px ${t.spacing(5)}px`},title:{fontWeight:"normal",fontSize:t.typography.h5.fontSize},description:{padding:`${t.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:t.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:t.spacing(2)},exemptButton:{marginLeft:t.spacing(1)},exemptAlert:{marginBottom:t.spacing(2)}})),N=({setPopupDisplayed:t})=>{const i=u();return e(g,{className:i.exemptButton,size:"small",onClick:()=>t(!0),"aria-label":"Set Check Status Button",children:"Set Check Status"})},w=({isExempt:t,setPopupDisplayed:i})=>{const r=u();return e(q,{title:t?"Remove Exemption":"Set Exempt From Check",children:e(g,{className:r.exemptButton,size:"small",color:"inherit",onClick:()=>i(!0),"aria-label":"Exempt From Check",children:t?"Remove Exemption":"Add Exemption"})})},oe=({trackId:t,checkId:i})=>{const r=u(),{entity:l}=W(),{data:f,isLoading:D,isError:A}=J(l,t,i),[T,S]=E(!1),[I,k]=E(!1),y=B(l),{data:a,isLoading:z}=V(y,i??""),{data:o}=G(i),{pullRequest:s}=K({result:f?.result,type:o?.type,rule:o?.rule,entityRef:y,checkId:o?.id}),{mutateAsync:P}=H();if(A)return e(m,{padding:2,children:e(Q,{severity:"error",title:"Error loading check details"})});if(D||!t||!i)return e(re,{});if(!f)return null;const C=o?.type===U.Manual,{name:R,description:L,result:p,timestamp:v,details:M}=f,j=async(x,c)=>{!l||!i||await P({checkId:i,entityRef:y,justification:c,state:x})},F=x=>{const c=window.open(x,"_blank","noopener,noreferrer");c&&(c.opener=null)};return n("div",{className:r.root,"data-testid":"check-details-view",children:[n("div",{className:r.topBar,children:[e(d,{variant:"h2",className:r.title,children:R}),n(m,{display:"flex",alignItems:"center",children:[v?e(Z,{timestamp:v,description:"Last updated"}):null,C&&!a?.exemption&&p!==h.NotReported&&e(N,{setPopupDisplayed:k}),!z&&p!==h.NotApplicable&&e(w,{isExempt:!!a?.exemption,setPopupDisplayed:S})]})]}),e(Y,{entityRef:B(l),checkId:i,isOpen:T,setIsOpen:S}),e(X,{isOpen:I,setIsOpen:k,setCallback:j}),!a?.exemption&&p===h.Exempt&&e(b,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This check's exemption for this entity was recently removed. The recent exemption state will clear once the check has been run."}),!!a?.exemption&&e(m,{marginBottom:2,children:e(b,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This entity has been exempted from this check."})}),C&&!a?.exemption&&p===h.NotReported?n(m,{children:[e(d,{children:"This check is manual and must have its state set by a user."}),e(m,{marginTop:1,children:e(g,{variant:"contained",color:"primary",onClick:()=>k(!0),"aria-label":"Set Check Status",size:"small",children:"Set Check Status"})})]}):n(O,{children:[e(d,{className:r.subtitle,children:"Most Recent Result:"}),e(ie,{name:R,state:p,details:M,templateRef:o?.templateRef??void 0}),s&&e(te,{title:s.label,branch:s.prBranch??_(o?.name??""),onView:()=>{s.prUrl&&F(s.prUrl)}})]}),n("div",{className:r.description,"data-testid":"soundcheck-check-details-description",children:[e(d,{variant:"h3",className:r.subtitle,children:"Description"}),e(ee,{content:L})]})]})};export{oe as CheckDetails,w as ExemptDialogButton,N as SetCheckStatusButton,u as useStyles};
1
+ import{jsx as e,jsxs as a,Fragment as W}from"react/jsx-runtime";import{stringifyEntityRef as B}from"@backstage/catalog-model";import{useEntity as $}from"@backstage/plugin-catalog-react";import{makeStyles as q,Box as l,Typography as h,Button as g,Tooltip as U}from"@material-ui/core";import{Alert as b}from"@material-ui/lab";import{useState as E}from"react";import{CheckerType as G,ResultState as s}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as J}from"../../hooks/checks/useCheck.esm.js";import{useCheckDetails as V}from"../../hooks/checks/useCheckDetails.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as _}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{getBranchName as H}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useSetManualResult as K}from"../../hooks/checks/useSetManualResult.esm.js";import{useFixWithAika as Q}from"../../hooks/fixWithAika/useFixWithAika.esm.js";import{AlertPanel as X}from"../AlertPanel/AlertPanel.esm.js";import{CheckResultInputPopup as Y}from"../CertificationSidebar/CheckResultInputPopup.esm.js";import{ExemptionJustificationDialog as Z}from"../CertificationSidebar/ExemptionJustificationDialog.esm.js";import{RelativeTime as ee}from"../RelativeTime/RelativeTime.esm.js";import{SoundcheckMarkdownContentDeprecated as te}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{CheckPullRequest as ie}from"./CheckPullRequest.esm.js";import{ResultStateBox as re}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as oe}from"./skeletons/CheckDetailsSkeleton.esm.js";const u=q(t=>({root:{padding:`${t.spacing(3)}px ${t.spacing(5)}px`},title:{fontWeight:"normal",fontSize:t.typography.h5.fontSize},description:{padding:`${t.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:t.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:t.spacing(2)},exemptButton:{marginLeft:t.spacing(1)},exemptAlert:{marginBottom:t.spacing(2)}})),N=({setPopupDisplayed:t})=>{const i=u();return e(g,{className:i.exemptButton,size:"small",onClick:()=>t(!0),"aria-label":"Set Check Status Button",children:"Set Check Status"})},w=({isExempt:t,setPopupDisplayed:i})=>{const r=u();return e(U,{title:t?"Remove Exemption":"Set Exempt From Check",children:e(g,{className:r.exemptButton,size:"small",color:"inherit",onClick:()=>i(!0),"aria-label":"Exempt From Check",children:t?"Remove Exemption":"Add Exemption"})})},ne=({trackId:t,checkId:i})=>{const r=u(),{entity:c}=$(),{data:f,isLoading:D,isError:A}=V(c,t,i),[T,S]=E(!1),[I,k]=E(!1),y=B(c),{data:p,isLoading:z}=_(y,i??""),{data:n}=J(i),{pullRequest:m}=Q({result:f?.result,type:n?.type,rule:n?.rule,entityRef:y,checkId:n?.id}),{mutateAsync:P}=K();if(A)return e(l,{padding:2,children:e(X,{severity:"error",title:"Error loading check details"})});if(D||!t||!i)return e(oe,{});if(!f)return null;const C=n?.type===G.Manual,{name:R,description:F,result:o,timestamp:v,details:L}=f,M=(o===s.Failed||o===s.Warning)&&m,j=async(x,d)=>{!c||!i||await P({checkId:i,entityRef:y,justification:d,state:x})},O=x=>{const d=window.open(x,"_blank","noopener,noreferrer");d&&(d.opener=null)};return a("div",{className:r.root,"data-testid":"check-details-view",children:[a("div",{className:r.topBar,children:[e(h,{variant:"h2",className:r.title,children:R}),a(l,{display:"flex",alignItems:"center",children:[v?e(ee,{timestamp:v,description:"Last updated"}):null,C&&!p?.exemption&&o!==s.NotReported&&e(N,{setPopupDisplayed:k}),!z&&o!==s.NotApplicable&&e(w,{isExempt:!!p?.exemption,setPopupDisplayed:S})]})]}),e(Z,{entityRef:B(c),checkId:i,isOpen:T,setIsOpen:S}),e(Y,{isOpen:I,setIsOpen:k,setCallback:j}),!p?.exemption&&o===s.Exempt&&e(b,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This check's exemption for this entity was recently removed. The recent exemption state will clear once the check has been run."}),!!p?.exemption&&e(l,{marginBottom:2,children:e(b,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This entity has been exempted from this check."})}),C&&!p?.exemption&&o===s.NotReported?a(l,{children:[e(h,{children:"This check is manual and must have its state set by a user."}),e(l,{marginTop:1,children:e(g,{variant:"contained",color:"primary",onClick:()=>k(!0),"aria-label":"Set Check Status",size:"small",children:"Set Check Status"})})]}):a(W,{children:[e(h,{className:r.subtitle,children:"Most Recent Result:"}),e(re,{name:R,state:o,details:L,templateRef:n?.templateRef??void 0}),M&&e(ie,{title:m.label,branch:m.prBranch??H(n?.name??""),onView:()=>{m.prUrl&&O(m.prUrl)}})]}),a("div",{className:r.description,"data-testid":"soundcheck-check-details-description",children:[e(h,{variant:"h3",className:r.subtitle,children:"Description"}),e(te,{content:F})]})]})};export{ne as CheckDetails,w as ExemptDialogButton,N as SetCheckStatusButton,u as useStyles};
2
2
  //# sourceMappingURL=CheckDetails.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,jsx as e}from"react/jsx-runtime";import{Flex as n,Card as d,CardBody as h,Text as l,Box as r,Button as u}from"@backstage/ui";import{makeStyles as m}from"@material-ui/core";import{RiCornerDownRightFill as b,RiTriangleLine as g}from"@remixicon/react";const o=m(()=>({arrowIcon:{color:"var(--bui-fg-disabled)"},card:{borderLeft:"var(--bui-space-1) solid var(--bui-fg-success)"},statusIcon:{color:"var(--bui-fg-success)"},button:{background:"var(--bui-fg-success)"}})),f=({title:s,branch:t,onView:a})=>{const i=o();return c(n,{gap:"4",mt:"4",children:[e(b,{size:32,className:i.arrowIcon}),e(d,{className:i.card,children:e(h,{children:c(n,{gap:"4",direction:"column",align:"start",children:[c(n,{align:"center",gap:"2",children:[e(g,{className:i.statusIcon}),e(l,{weight:"bold",children:"Pull Request created by Fleetshift"})]}),c(r,{children:[e(r,{children:e(l,{color:"secondary",children:"Title"})}),e(r,{children:e(l,{children:s})})]}),c(r,{children:[e(r,{children:e(l,{color:"secondary",children:"Branch"})}),e(r,{children:e(l,{children:t})})]}),e(u,{className:i.button,onClick:a,children:"View Pull Request"})]})})})]})};export{f as CheckPullRequest,o as useStyles};
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Flex as n,Card as d,CardBody as h,Text as l,Box as c,Button as u}from"@backstage/ui";import{makeStyles as m}from"@material-ui/core";import{RiCornerDownRightFill as g,RiTriangleLine as b}from"@remixicon/react";import{Badge as f}from"../Badge/Badge.esm.js";const s=m(()=>({arrowIcon:{color:"var(--bui-fg-disabled)"},card:{borderLeft:"var(--bui-space-1) solid var(--bui-fg-success)"},statusIcon:{color:"var(--bui-fg-success)"},button:{background:"var(--bui-fg-success)"}})),p=({title:t,branch:o,onView:a})=>{const i=s();return r(n,{gap:"4",mt:"4",children:[e(g,{size:32,className:i.arrowIcon}),e(d,{className:i.card,children:e(h,{children:r(n,{gap:"4",direction:"column",children:[r(n,{align:"center",justify:"between",children:[r(n,{align:"center",gap:"2",children:[e(b,{className:i.statusIcon}),e(l,{weight:"bold",children:"Pull Request created by Fleetshift"})]}),e(f,{variant:"success",children:"Beta"})]}),r(c,{children:[e(c,{children:e(l,{color:"secondary",children:"Title"})}),e(c,{children:e(l,{children:t})})]}),r(c,{children:[e(c,{children:e(l,{color:"secondary",children:"Branch"})}),e(c,{children:e(l,{children:o})})]}),e(u,{className:i.button,onClick:a,style:{alignSelf:"flex-start"},children:"View Pull Request"})]})})})]})};export{p as CheckPullRequest,s as useStyles};
2
2
  //# sourceMappingURL=CheckPullRequest.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as o}from"react/jsx-runtime";import{Progress as R}from"@backstage/core-components";import{useApi as u,errorApiRef as T}from"@backstage/core-plugin-api";import{useEntity as b}from"@backstage/plugin-catalog-react";import{scaffolderApiRef as D,useTemplateSecrets as I,useCustomFieldExtensions as B}from"@backstage/plugin-scaffolder-react";import{useTemplateParameterSchema as F,useFilteredSchemaProperties as O,Stepper as U}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as j,Dialog as A,DialogTitle as P,Typography as J,IconButton as N,DialogContent as W}from"@material-ui/core";import M from"@material-ui/icons/Close";import Q from"git-url-parse";import{useState as V,useEffect as q}from"react";import{useOutlet as z}from"react-router-dom";import{OngoingTaskComponent as G}from"./OngoingTaskComponent.esm.js";import{ReviewStateComponent as H}from"./ReviewStateComponent.esm.js";class h{type;name;owner;lifecycle;title;description;sourceLocation;managedByLocation;slackChannel;entity;constructor(e){this.lifecycle=e.spec?.lifecycle||"unknown",this.name=e.metadata.name,this.owner=e.spec?.owner||"unknown",this.type=e.spec?.type||"unknown",this.title=e.metadata.title,this.description=e.metadata.description||"",this.sourceLocation=e.metadata.annotations?.["backstage.io/source-location"]?.replace("url:",""),this.managedByLocation=e.metadata.annotations?.["backstage.io/managed-by-location"],this.slackChannel=e.metadata.annotations?.["spotify.net/slack-channel"],this.entity=e}}const K=t=>{const e={};if(e.componentId=t.name,t.sourceLocation){const{name:n,owner:a,protocol:r,source:i}=Q(t.sourceLocation);e.repoUrl=`${r}://${i}/${a}/${n}`,e.repo={host:i,org:a,repo:n,url:e.repoUrl,gitUrl:`git@${i}:${a}/${n}.git`,paramUrl:`${r}://${i}?owner=${a}&repo=${n}`}}e.facts=JSON.parse(t.entity.metadata.annotations?.["sysmodel.spotify.net/raw-component-facts"]||"{}");const s=t;return delete s.entity,{...e,...s}},X=j({titleContent:{display:"flex",justifyContent:"space-between",alignItems:"center"}}),Y=t=>{const{title:e,open:s,setOpen:n,onClose:a,templateRef:r}=t,i=X(),m=u(T),y=u(D),{loading:g,manifest:w,error:c}=F(r),{secrets:k}=I(),C=z(),$=B(C),p=O(w),{entity:S}=b(),[d,f]=V(void 0),x=async E=>{const{taskId:L}=await y.scaffold({templateRef:r,values:E,secrets:k});f(L)},v=()=>{n(!1),f(void 0)};return q(()=>{c&&m.post(new Error(`Failed to load template, ${c}`))},[c,m]),l(A,{open:s,onClose:a,fullWidth:!0,maxWidth:"md",children:[o(P,{children:l("div",{className:i.titleContent,children:[o(J,{variant:"h5",children:e}),o(N,{onClick:v,children:o(M,{})})]})}),l(W,{children:[g&&o(R,{}),d?o(G,{taskId:d}):p&&o(U,{manifest:p,onCreate:x,extensions:$,components:{createButtonText:"Execute",ReviewStateComponent:H},initialState:{backstage:K(new h(S))},...t})]})]})};export{Y as FixMeDialog,h as SimplifiedEntity};
1
+ import{jsxs as l,jsx as o}from"react/jsx-runtime";import{Progress as L}from"@backstage/core-components";import{useApi as u,errorApiRef as R}from"@backstage/core-plugin-api";import{useEntity as T}from"@backstage/plugin-catalog-react";import{scaffolderApiRef as b,useTemplateSecrets as D,useCustomFieldExtensions as B}from"@backstage/plugin-scaffolder-react";import{useTemplateParameterSchema as F,useFilteredSchemaProperties as O,Stepper as U}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as j,Dialog as A,DialogTitle as P,Typography as J,IconButton as N,DialogContent as W}from"@material-ui/core";import M from"@material-ui/icons/Close";import Q from"git-url-parse";import{useState as V,useEffect as q}from"react";import{useOutlet as z}from"react-router-dom";import{OngoingTaskComponent as G}from"./OngoingTaskComponent.esm.js";import{ReviewStateComponent as H}from"./ReviewStateComponent.esm.js";class h{type;name;owner;lifecycle;title;description;sourceLocation;managedByLocation;slackChannel;entity;constructor(e){this.lifecycle=e.spec?.lifecycle||"unknown",this.name=e.metadata.name,this.owner=e.spec?.owner||"unknown",this.type=e.spec?.type||"unknown",this.title=e.metadata.title,this.description=e.metadata.description||"",this.sourceLocation=e.metadata.annotations?.["backstage.io/source-location"]?.replace("url:",""),this.managedByLocation=e.metadata.annotations?.["backstage.io/managed-by-location"],this.slackChannel=e.metadata.annotations?.["spotify.net/slack-channel"],this.entity=e}}const K=t=>{const e={};if(e.componentId=t.name,t.sourceLocation){const{name:n,owner:a,protocol:r,source:i}=Q(t.sourceLocation);e.repoUrl=`${r}://${i}/${a}/${n}`,e.repo={host:i,org:a,repo:n,url:e.repoUrl,gitUrl:`git@${i}:${a}/${n}.git`,paramUrl:`${r}://${i}?owner=${a}&repo=${n}`}}e.facts=JSON.parse(t.entity.metadata.annotations?.["sysmodel.spotify.net/raw-component-facts"]||"{}");const s=t;return delete s.entity,{...e,...s}},X=j({titleContent:{display:"flex",justifyContent:"space-between",alignItems:"center"}}),Y=t=>{const{title:e,open:s,setOpen:n,onClose:a,templateRef:r}=t,i=X(),m=u(R),y=u(b),{loading:g,manifest:w,error:c}=F(r),{secrets:k}=D(),C=z(),$=B(C),p=O(w),{entity:S}=T(),[d,f]=V(void 0),x=async E=>{const{taskId:I}=await y.scaffold({templateRef:r,values:E,secrets:k});f(I)},v=()=>{n(!1),f(void 0)};return q(()=>{c&&m.post(new Error(`Failed to load template, ${c}`))},[c,m]),l(A,{open:s,onClose:a,fullWidth:!0,maxWidth:"md",children:[o(P,{children:l("div",{className:i.titleContent,children:[o(J,{variant:"h5",children:e}),o(N,{onClick:v,children:o(M,{})})]})}),l(W,{children:[g&&o(L,{}),d?o(G,{taskId:d}):p&&o(U,{manifest:p,onCreate:x,extensions:$,components:{createButtonText:"Execute",ReviewStateComponent:H},initialState:{backstage:K(new h(S))},...t})]})]})};export{Y as FixMeDialog,h as SimplifiedEntity};
2
2
  //# sourceMappingURL=FixMeDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{Content as s}from"@backstage/core-components";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as h}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as f}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as C}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as b}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as k}from"./Steps/CheckRulesStep.esm.js";import{CheckApplicabilityStep as g}from"./Steps/CheckApplicabilityStep.esm.js";import{CheckReviewStep as v}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as y}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as F}from"./useCheckForm.esm.js";const R=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:i,selectedItem:l}=h(),{formMethods:o,onSubmit:e}=F(p),c=f(),m=[{label:"Enter check details",content:()=>t(b,{})},{label:"Add rules",content:()=>t(k,{})},{label:"Choose the affected entities (Optional)",content:()=>t(g,{})},{label:"Review and test (Optional)",content:()=>t(v,{})},{label:"Set the check schedule (Not Recommended)",content:()=>t(C,{control:o.control,disabled:i})}],a=l?[...Array(m.length).keys()]:[0];return t(s,{className:c.formWrapper,children:t(d,{...o,children:t(S,{children:t("form",{onSubmit:o.handleSubmit(e),children:t(u,{onClose:()=>r?r():void 0,handleSubmit:o.handleSubmit,trigger:o.trigger,onSubmit:e,initialVisited:a,stepNameMap:y,steps:m,isLoading:n,isReadOnly:i,saveButtonText:"Save Check"})})})})})};export{R as CheckForm};
1
+ import{jsx as t}from"react/jsx-runtime";import{Content as s}from"@backstage/core-components";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as h}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{formStyles as f}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormStepper as u}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as C}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as b}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as k}from"./Steps/CheckRulesStep.esm.js";import{CheckApplicabilityStep as g}from"./Steps/CheckApplicabilityStep.esm.js";import{CheckReviewStep as v}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as y}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as F}from"./useCheckForm.esm.js";const R=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:i,selectedItem:l}=h(),{formMethods:o,onSubmit:e}=F(p),c=f(),m=[{label:"Enter check details",content:()=>t(b,{})},{label:"Add rules",content:()=>t(k,{})},{label:"Choose the affected entities (Optional)",content:()=>t(g,{})},{label:"Review and test (Optional)",content:()=>t(v,{})},{label:"Set the check schedule (Not Recommended)",content:()=>t(C,{control:o.control,disabled:i})}],a=l?[...Array(m.length).keys()]:[0];return t(s,{className:c.formWrapper,children:t(d,{...o,children:t(S,{children:t("form",{onSubmit:o.handleSubmit(e),children:t(u,{onClose:()=>r?r():void 0,handleSubmit:o.handleSubmit,trigger:o.trigger,onSubmit:e,initialVisited:a,stepNameMap:y,steps:m,isLoading:n,isReadOnly:i,saveButtonText:"Save Check"})})})})})};export{R as CheckForm};
2
2
  //# sourceMappingURL=CheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as a,Fragment as G}from"react/jsx-runtime";import{Box as o,FormLabel as p,TextField as H,IconButton as S}from"@material-ui/core";import M from"@material-ui/icons/Close";import W from"@material-ui/icons/Delete";import z from"@material-ui/icons/List";import{asArray as q}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as u,useCallback as b}from"react";import{useFormContext as J,Controller as K}from"react-hook-form";import{useOperators as Q}from"../../../../../hooks/operators/useOperators.esm.js";import{FactExplorerDialogButton as V}from"../../../../FactExplorer/FactExplorerDialog.esm.js";import"../../../../FactExplorer/FactExplorerContext.esm.js";import{FormControlledAutocomplete as v}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FactValueDisplay as U}from"./FactValueDisplay.esm.js";import{useRuleConditionStyles as X}from"./styles.esm.js";import{useRuleOptions as Y}from"./useRuleOptions.esm.js";import{ValueListInputDialogButton as j}from"./ValueListInput.esm.js";const Z=({name:l,handleDelete:w,disabled:d,disableDelete:y})=>{const t=X(),{control:c,setValue:s,watch:m,clearErrors:f}=J(),{data:L,isLoading:O}=Q(),B=m("rulesStep.pathResolver")==="jsonpath",h=u(()=>L?.map(e=>({value:e.name,label:e.title})).sort((e,r)=>e.label.localeCompare(r.label))??[],[L]),I=u(()=>h.map(({value:e})=>({label:e,value:e})),[h]),{pathOptions:C,factRefOptions:g,isLoading:$}=Y(l,c),P=u(()=>g?.map(({value:e})=>({label:e,value:e}))??[],[g]),D=u(()=>C?.map(e=>({label:e,value:e}))??[],[C]),T=["all","any","none"].map(e=>({label:e,value:e})),E=b(({factRef:e,path:r})=>{s(`${l}.factRef`,e),s(`${l}.path`,r),f()},[f,l,s]),k=b(({factRef:e,path:r})=>{s(`${l}.value`,{factRef:e,path:r}),f()},[f,l,s]),A=b(e=>{s(`${l}.value`,e.length>0?e:""),f()},[f,l,s]),i=m(`${l}.value`),F=b(()=>{s(`${l}.value`,"")},[l,s]),x=e=>typeof e=="string"?e:e.label??"",R=e=>typeof e=="string"?e:e?.value??"";return n(o,{className:t.container,children:[a(o,{className:t.connector}),n(o,{paddingTop:2,paddingLeft:2,paddingRight:2,paddingBottom:2,width:"100%",className:t.innerContainer,children:[n(o,{className:t.inputsContainer,children:[g&&n(o,{children:[a(p,{className:t.formLabel,children:"Fact"}),a(v,{name:`${l}.factRef`,control:c,placeholder:"Fact",options:P,getOptionLabel:x,getOptionValue:R,disabled:d||$,width:428})]}),n(o,{flexGrow:1,children:[a(p,{className:t.formLabel,children:"Path"}),a(v,{name:`${l}.path`,placeholder:"Path",control:c,disabled:d||$,options:B?D:[],fullWidth:!0,getOptionLabel:x,getOptionValue:R})]}),n(o,{children:[a(p,{className:t.formLabel,style:{visibility:"hidden"},children:"Explore"}),a(o,{width:150,children:a(V,{factRef:m(`${l}.factRef`),path:m(`${l}.path`),onSave:E,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,hideIcon:!0})})]})]}),n(o,{className:t.inputsContainer,children:[h&&n(G,{children:[n(o,{children:[a(p,{className:t.formLabel,children:"Prefix (Optional)"}),a(v,{name:`${l}.operatorPrefix`,control:c,placeholder:"Prefix",options:T,disabled:O||d,width:120,getOptionLabel:x,getOptionValue:R})]}),n(o,{children:[a(p,{className:t.formLabel,children:"Operator"}),a(v,{name:`${l}.operator`,control:c,placeholder:"Operator",options:I,disabled:O||d,getOptionLabel:e=>(r=>h?.find(N=>r===N.value)?.label??r??"")(typeof e=="string"?e:e.label),getOptionValue:e=>(r=>h?.find(N=>r===N.label)?.value??r??"")(typeof e=="string"?e:e?.label??""),width:300})]})]}),n(o,{flexGrow:1,children:[a(p,{className:t.formLabel,children:"Value"}),typeof i=="object"&&!Array.isArray(i)?a(U,{value:i,handleClear:F}):a(K,{name:`${l}.value`,control:c,defaultValue:"",render:({field:e,fieldState:r})=>a(H,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:t.helperText},error:r.invalid,helperText:r.error?r.error.message:null,margin:"dense",disabled:d||typeof i=="object",className:t.noMargin,fullWidth:!0,InputProps:{endAdornment:a(S,{onClick:F,size:"small",children:a(M,{})}),startAdornment:Array.isArray(i)?a(j,{values:i,onSave:A,iconButton:a(z,{})}):null}})})]}),n(o,{children:[a(p,{className:t.formLabel,style:{visibility:"hidden"},children:"Alternative Input"}),n(o,{display:"flex",width:150,children:[a(V,{factRef:typeof i=="object"?i?.factRef:void 0,path:typeof i=="object"?i?.path:void 0,onSave:k,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,text:"Fact",hideIcon:!0}),a(j,{values:typeof i=="object"&&!Array.isArray(i)?void 0:q(i),onSave:A})]})]})]})]}),a(S,{onClick:w,className:t.deleteButton,"data-testid":`${l}-delete-button`,disabled:d||y,hidden:d||y,style:{visibility:d||y?"hidden":void 0},children:a(W,{className:t.deleteIcon})})]})};export{Z as RuleConditionInput};
1
+ import{jsxs as n,jsx as a,Fragment as G}from"react/jsx-runtime";import{Box as o,FormLabel as p,TextField as H,IconButton as I}from"@material-ui/core";import M from"@material-ui/icons/Close";import W from"@material-ui/icons/Delete";import z from"@material-ui/icons/List";import{asArray as q}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as u,useCallback as b}from"react";import{useFormContext as J,Controller as K}from"react-hook-form";import{useOperators as Q}from"../../../../../hooks/operators/useOperators.esm.js";import{FactExplorerDialogButton as S}from"../../../../FactExplorer/FactExplorerDialog.esm.js";import"../../../../FactExplorer/FactExplorerContext.esm.js";import{FormControlledAutocomplete as v}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FactValueDisplay as U}from"./FactValueDisplay.esm.js";import{useRuleConditionStyles as X}from"./styles.esm.js";import{useRuleOptions as Y}from"./useRuleOptions.esm.js";import{ValueListInputDialogButton as V}from"./ValueListInput.esm.js";const Z=({name:l,handleDelete:j,disabled:d,disableDelete:g})=>{const t=X(),{control:c,setValue:s,watch:m,clearErrors:f}=J(),{data:L,isLoading:O}=Q(),w=m("rulesStep.pathResolver")==="jsonpath",h=u(()=>L?.map(e=>({value:e.name,label:e.title})).sort((e,r)=>e.label.localeCompare(r.label))??[],[L]),B=u(()=>h.map(({value:e})=>({label:e,value:e})),[h]),{pathOptions:$,factRefOptions:y,isLoading:C}=Y(l,c),P=u(()=>y?.map(({value:e})=>({label:e,value:e}))??[],[y]),D=u(()=>$?.map(e=>({label:e,value:e}))??[],[$]),T=["all","any","none"].map(e=>({label:e,value:e})),E=b(({factRef:e,path:r})=>{s(`${l}.factRef`,e),s(`${l}.path`,r),f()},[f,l,s]),k=b(({factRef:e,path:r})=>{s(`${l}.value`,{factRef:e,path:r}),f()},[f,l,s]),A=b(e=>{s(`${l}.value`,e.length>0?e:""),f()},[f,l,s]),i=m(`${l}.value`),F=b(()=>{s(`${l}.value`,"")},[l,s]),x=e=>typeof e=="string"?e:e.label??"",R=e=>typeof e=="string"?e:e?.value??"";return n(o,{className:t.container,children:[a(o,{className:t.connector}),n(o,{paddingTop:2,paddingLeft:2,paddingRight:2,paddingBottom:2,width:"100%",className:t.innerContainer,children:[n(o,{className:t.inputsContainer,children:[y&&n(o,{children:[a(p,{className:t.formLabel,children:"Fact"}),a(v,{name:`${l}.factRef`,control:c,placeholder:"Fact",options:P,getOptionLabel:x,getOptionValue:R,disabled:d||C,width:428})]}),n(o,{flexGrow:1,children:[a(p,{className:t.formLabel,children:"Path"}),a(v,{name:`${l}.path`,placeholder:"Path",control:c,disabled:d||C,options:w?D:[],fullWidth:!0,getOptionLabel:x,getOptionValue:R})]}),n(o,{children:[a(p,{className:t.formLabel,style:{visibility:"hidden"},children:"Explore"}),a(o,{width:150,children:a(S,{factRef:m(`${l}.factRef`),path:m(`${l}.path`),onSave:E,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,hideIcon:!0})})]})]}),n(o,{className:t.inputsContainer,children:[h&&n(G,{children:[n(o,{children:[a(p,{className:t.formLabel,children:"Prefix (Optional)"}),a(v,{name:`${l}.operatorPrefix`,control:c,placeholder:"Prefix",options:T,disabled:O||d,width:120,getOptionLabel:x,getOptionValue:R})]}),n(o,{children:[a(p,{className:t.formLabel,children:"Operator"}),a(v,{name:`${l}.operator`,control:c,placeholder:"Operator",options:B,disabled:O||d,getOptionLabel:e=>(r=>h?.find(N=>r===N.value)?.label??r??"")(typeof e=="string"?e:e.label),getOptionValue:e=>(r=>h?.find(N=>r===N.label)?.value??r??"")(typeof e=="string"?e:e?.label??""),width:300})]})]}),n(o,{flexGrow:1,children:[a(p,{className:t.formLabel,children:"Value"}),typeof i=="object"&&!Array.isArray(i)?a(U,{value:i,handleClear:F}):a(K,{name:`${l}.value`,control:c,defaultValue:"",render:({field:e,fieldState:r})=>a(H,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:t.helperText},error:r.invalid,helperText:r.error?r.error.message:null,margin:"dense",disabled:d||typeof i=="object",className:t.noMargin,fullWidth:!0,InputProps:{endAdornment:a(I,{onClick:F,size:"small",children:a(M,{})}),startAdornment:Array.isArray(i)?a(V,{values:i,onSave:A,iconButton:a(z,{})}):null}})})]}),n(o,{children:[a(p,{className:t.formLabel,style:{visibility:"hidden"},children:"Alternative Input"}),n(o,{display:"flex",width:150,children:[a(S,{factRef:typeof i=="object"?i?.factRef:void 0,path:typeof i=="object"?i?.path:void 0,onSave:k,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,text:"Fact",hideIcon:!0}),a(V,{values:typeof i=="object"&&!Array.isArray(i)?void 0:q(i),onSave:A})]})]})]})]}),a(I,{onClick:j,className:t.deleteButton,"data-testid":`${l}-delete-button`,disabled:d||g,hidden:d||g,style:{visibility:d||g?"hidden":void 0},children:a(W,{className:t.deleteIcon})})]})};export{Z as RuleConditionInput};
2
2
  //# sourceMappingURL=RuleConditionInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseFactRef as u,stringifyFactRef as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useEffect as y,useMemo as f}from"react";import{useWatch as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../../api.esm.js";import"../../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as F}from"../../../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCollectors as G}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as O}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as L}from"../../../utils/checkFormUtils.esm.js";const M=(o,d)=>{const{data:c,isLoading:h}=G(),{data:i}=F({}),a=C({control:d,name:`${o}.factRef`}),[p,g]=b(()=>l(a));y(()=>{g(l(a))},[a]);const{data:m}=O(p?.source,p?.name),k=f(()=>m?L(m.schema):[],[m]),R=f(()=>c?.flatMap(t=>t.factNames.map(r=>{const e=t.id==="soundcheck"?{source:t.id,scope:"default",name:r}:u(r,{defaultSource:t.id,defaultScope:"default"});let s=e.name;if(e.source==="soundcheck"){const n=i?.edges.find(S=>S.node.id===e.name.replace("track/",""))?.node;s=n?`${n.type==="campaign"?"Campaign: ":"Track: "}${n.name}`:e.name}return{label:`${e.source} - ${s}`,value:$(e)}}))?.sort((t,r)=>t.label.localeCompare(r.label))??[],[c,i]);return{isLoading:h,pathOptions:k,factRefOptions:R}};function l(o){if(o)try{return u(o,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{M as useRuleOptions};
1
+ import{parseFactRef as u,stringifyFactRef as $}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useEffect as y,useMemo as f}from"react";import{useWatch as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../../api.esm.js";import"../../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as F}from"../../../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../ChecksTable/utils.esm.js";import"../../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useGetCollectors as G}from"../../../../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as O}from"../../../../../hooks/collectors/useGetFactSchema.esm.js";import{generateJsonPaths as L}from"../../../utils/checkFormUtils.esm.js";const M=(o,d)=>{const{data:c,isLoading:h}=G(),{data:i}=F({}),a=C({control:d,name:`${o}.factRef`}),[p,g]=b(()=>l(a));y(()=>{g(l(a))},[a]);const{data:m}=O(p?.source,p?.name),k=f(()=>m?L(m.schema):[],[m]),R=f(()=>c?.flatMap(t=>t.factNames.map(r=>{const e=t.id==="soundcheck"?{source:t.id,scope:"default",name:r}:u(r,{defaultSource:t.id,defaultScope:"default"});let s=e.name;if(e.source==="soundcheck"){const n=i?.edges.find(S=>S.node.id===e.name.replace("track/",""))?.node;s=n?`${n.type==="campaign"?"Campaign: ":"Track: "}${n.name}`:e.name}return{label:`${e.source} - ${s}`,value:$(e)}}))?.sort((t,r)=>t.label.localeCompare(r.label))??[],[c,i]);return{isLoading:h,pathOptions:k,factRefOptions:R}};function l(o){if(o)try{return u(o,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}export{M as useRuleOptions};
2
2
  //# sourceMappingURL=useRuleOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as e}from"react/jsx-runtime";import{Box as r,Grid as p,Button as y}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import{useFormContext as b,useFieldArray as x}from"react-hook-form";import{ExpressionType as N}from"../../types/ExpressionType.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";import{AddMenuButton as $}from"./AddMenuButton.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"@material-ui/icons/Search";import"../../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../../FactExplorer/FactExplorer.esm.js";import"../../../FactExplorer/FactExplorerContext.esm.js";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../../utils/checkFormUtils.esm.js";import"./Conditions/ValueListInput.esm.js";import{ConditionList as A}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as E}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as P}from"./Expressions/ExpressionTypeToggle.esm.js";const L=B(i=>({root:{padding:0},inner:{marginLeft:i.spacing(2),paddingBottom:i.spacing(2),borderLeft:`1px solid ${i.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${i.palette.border}`,padding:i.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0},marginBottom:{marginBottom:i.spacing(1)},empty:{border:`1px solid ${i.palette.error.main}`,padding:i.spacing(2),margin:i.spacing(2,0)},gap:{borderLeft:`1px solid ${i.palette.border}`,marginLeft:i.spacing(2)},removeButton:{padding:i.spacing(.5,1.5),color:i.palette.text.primary}})),T=({name:i,depth:m,disabled:t,removeExpression:s})=>{const o=L(),{control:l}=b(),{fields:a,append:f,remove:h}=x({control:l,name:`${i}.expressions`}),{fields:d,append:u,remove:v}=x({control:l,name:`${i}.conditions`});return n(r,{className:m>0?o.inner:o.root,children:[m>0&&e(r,{className:o.connector}),n(p,{container:!0,spacing:0,direction:"column",className:o.noPadding,children:[e(p,{item:!0,className:o.noPadding,children:e(P,{disabled:t,name:`${i}.expressionType`})}),n(p,{item:!0,container:!0,spacing:0,direction:"column",className:o.noPadding,children:[d.length===0&&!a.length&&e(r,{className:o.empty,children:"Add an expression or condition."}),d.length===0&&a.length>0&&e(r,{padding:1,className:o.gap}),e(A,{remove:v,conditions:d,disabled:t,name:i}),a.map((c,g)=>e(E,{exists:!!c,name:`${i}.expressions[${g}]`,depth:m,disabled:t,removeExpression:()=>h(g)},c.id))]}),!t&&e(p,{item:!0,className:o.noPadding,children:n(r,{display:"flex",gridGap:8,children:[e($,{onAddCondition:()=>u({factRef:"",path:"",operator:"",value:""}),onAddExpression:()=>f({expressionType:N.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]})}),s&&e(y,{className:o.removeButton,variant:"text",onClick:s,children:"Remove"})]})})]})]})};export{T as RuleInputBox};
1
+ import{jsxs as n,jsx as e}from"react/jsx-runtime";import{Box as r,Grid as p,Button as y}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import{useFormContext as b,useFieldArray as x}from"react-hook-form";import{ExpressionType as N}from"../../types/ExpressionType.esm.js";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import"../../types/Path.esm.js";import{AddMenuButton as $}from"./AddMenuButton.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"@material-ui/icons/Search";import"../../../SoundcheckDialog/SoundcheckDialog.esm.js";import"../../../FactExplorer/FactExplorer.esm.js";import"../../../FactExplorer/FactExplorerContext.esm.js";import"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import"../../utils/checkFormUtils.esm.js";import"./Conditions/ValueListInput.esm.js";import{ConditionList as A}from"./Conditions/ConditionList.esm.js";import{ExpressionBox as E}from"./Expressions/ExpressionBox.esm.js";import{ExpressionTypeToggle as P}from"./Expressions/ExpressionTypeToggle.esm.js";const L=B(i=>({root:{padding:0},inner:{marginLeft:i.spacing(2),paddingBottom:i.spacing(2),borderLeft:`1px solid ${i.palette.border}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${i.palette.border}`,padding:i.spacing(0),width:"15px",height:"20px"},noPadding:{padding:0},marginBottom:{marginBottom:i.spacing(1)},empty:{border:`1px solid ${i.palette.error.main}`,padding:i.spacing(2),margin:i.spacing(2,0)},gap:{borderLeft:`1px solid ${i.palette.border}`,marginLeft:i.spacing(2)},removeButton:{padding:i.spacing(.5,1.5),color:i.palette.text.primary}})),T=({name:i,depth:m,disabled:t,removeExpression:s})=>{const o=L(),{control:l}=b(),{fields:a,append:f,remove:h}=x({control:l,name:`${i}.expressions`}),{fields:d,append:u,remove:v}=x({control:l,name:`${i}.conditions`});return n(r,{className:m>0?o.inner:o.root,children:[m>0&&e(r,{className:o.connector}),n(p,{container:!0,spacing:0,direction:"column",className:o.noPadding,children:[e(p,{item:!0,className:o.noPadding,children:e(P,{disabled:t,name:`${i}.expressionType`})}),n(p,{item:!0,container:!0,spacing:0,direction:"column",className:o.noPadding,children:[d.length===0&&!a.length&&e(r,{className:o.empty,children:"Add an expression or condition."}),d.length===0&&a.length>0&&e(r,{padding:1,className:o.gap}),e(A,{remove:v,conditions:d,disabled:t,name:i}),a.map((c,g)=>e(E,{exists:!!c,name:`${i}.expressions[${g}]`,depth:m,disabled:t,removeExpression:()=>h(g)},c.id))]}),!t&&e(p,{item:!0,className:o.noPadding,children:n(r,{display:"flex",gridGap:8,children:[e($,{onAddCondition:()=>u({factRef:"",path:"",operator:"",value:""}),onAddExpression:()=>f({expressionType:N.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]})}),s&&e(y,{className:o.removeButton,variant:"text",onClick:s,children:"Remove"})]})})]})]})};export{T as RuleInputBox};
2
2
  //# sourceMappingURL=RuleInputBox.esm.js.map