@spotify/backstage-plugin-soundcheck 0.22.0 → 0.22.1

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 (95) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/alpha/apis.esm.js +1 -1
  3. package/dist/alpha/plugin.esm.js +1 -1
  4. package/dist/alpha.d.ts +10 -1
  5. package/dist/api.esm.js +1 -1
  6. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  7. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  8. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  9. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
  10. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
  11. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
  12. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  13. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  14. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  15. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  16. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  17. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  18. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  19. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  20. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  21. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  22. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  23. package/dist/components/CheckDetails/CheckPullRequest.esm.js +2 -0
  24. package/dist/components/CheckDryRun/CheckDryRun.esm.js +1 -1
  25. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  26. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  27. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  28. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  29. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  30. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  31. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  32. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  33. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  34. package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
  35. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
  36. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  37. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
  38. package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
  39. package/dist/components/ChecksTable/FixMeCell.esm.js +2 -0
  40. package/dist/components/ChecksTable/PullRequestsTable.esm.js +2 -0
  41. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
  42. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  45. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  47. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  48. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  49. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  50. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  57. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
  58. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  59. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  60. package/dist/components/FixMeButton/FixMeButton.esm.js +2 -0
  61. package/dist/components/FixWithAiKAButton/FixWithAiKAButton.esm.js +2 -0
  62. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +1 -1
  63. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  64. package/dist/components/LoadingIcon/LoadingIcon.esm.js +2 -0
  65. package/dist/components/Menus/useCampaignActions.esm.js +1 -1
  66. package/dist/components/Menus/useCheckActions.esm.js +1 -1
  67. package/dist/components/Menus/useTrackActions.esm.js +1 -1
  68. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  69. package/dist/components/ProgressBar/ProgressBar.esm.js +2 -0
  70. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  71. package/dist/components/RelativeTime/RelativeTime.esm.js +1 -1
  72. package/dist/components/Router.esm.js +1 -1
  73. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
  74. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
  75. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
  76. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
  77. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
  78. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  79. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  80. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  81. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  82. package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
  83. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
  84. package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
  85. package/dist/components/ViewPullRequests/ViewPullRequests.esm.js +2 -0
  86. package/dist/contexts/UserProvider.esm.js +1 -1
  87. package/dist/hooks/fixMe/useFixMe.esm.js +2 -0
  88. package/dist/hooks/fixWithAika/useFixWithAika.esm.js +2 -0
  89. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  90. package/dist/hooks/remedy/useRemediesForCheck.esm.js +2 -0
  91. package/dist/hooks/remedy/useRemediesForEntity.esm.js +2 -0
  92. package/dist/index.d.ts +23 -2
  93. package/dist/index.esm.js +1 -1
  94. package/dist/plugin.esm.js +1 -1
  95. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.22.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Integrated API calls into Soundcheck 'Fix With Fleetshift' flows.
8
+ - Added `RemedyTrackerApi` API blueprint.
9
+ - Updated dependencies
10
+ - Updated dependencies
11
+ - @spotify/backstage-plugin-soundcheck-common@0.21.1
12
+
3
13
  ## 0.22.0
4
14
 
5
15
  ### Minor Changes
@@ -1,2 +1,2 @@
1
- import{ApiBlueprint as i,discoveryApiRef as c,fetchApiRef as o}from"@backstage/frontend-plugin-api";import{soundcheckApiRef as r,SoundcheckApi as f}from"../api.esm.js";const t=i.make({params:e=>e({api:r,deps:{discoveryApi:c,fetchApi:o},factory:p=>new f(p)})});export{t as soundcheckApi};
1
+ import{ApiBlueprint as r,discoveryApiRef as i,fetchApiRef as c}from"@backstage/frontend-plugin-api";import{soundcheckApiRef as a,SoundcheckApi as o,remedyTrackerApiRef as m,NoOpRemedyTrackerClient as d}from"../api.esm.js";const t=r.make({params:e=>e({api:a,deps:{discoveryApi:i,fetchApi:c},factory:p=>new o(p)})}),f=r.make({name:"remedy-tracker",params:e=>e({api:m,deps:{},factory:()=>new d})});export{f as remedyTrackerApi,t as soundcheckApi};
2
2
  //# sourceMappingURL=apis.esm.js.map
@@ -1,2 +1,2 @@
1
- import{createFrontendPlugin as t}from"@backstage/frontend-plugin-api";import{soundcheckApi as n}from"./apis.esm.js";import{entitySoundcheckContent as e,entitySoundcheckCard as o,groupSoundcheckContent as r}from"./entity-content.esm.js";import{azureIntegration as i,bigqueryIntegration as a,catalogIntegration as g,datadogIntegration as c,dataRegistryIntegration as u,githubIntegration as d,gitlabIntegration as I,httpIntegration as m,jiraIntegration as p,kubernetesIntegration as s,newrelicIntegration as h,pagerdutyIntegration as k,scmIntegration as f,sonarqubeIntegration as l}from"./integrations.esm.js";import{soundcheckRoutingPage as b,soundcheckOverviewPage as y}from"./pages.esm.js";import{soundcheckSidebarItem as S}from"./sidebar-item.esm.js";var v=t({pluginId:"soundcheck",extensions:[b,y,n,e,o,r,S,i,a,g,c,u,d,I,m,p,s,h,k,f,l]});export{v as default};
1
+ import{createFrontendPlugin as t}from"@backstage/frontend-plugin-api";import{soundcheckApi as n,remedyTrackerApi as e}from"./apis.esm.js";import{entitySoundcheckContent as r,entitySoundcheckCard as o,groupSoundcheckContent as i}from"./entity-content.esm.js";import{azureIntegration as a,bigqueryIntegration as g,catalogIntegration as c,datadogIntegration as u,dataRegistryIntegration as d,githubIntegration as I,gitlabIntegration as m,httpIntegration as p,jiraIntegration as s,kubernetesIntegration as h,newrelicIntegration as k,pagerdutyIntegration as f,scmIntegration as l,sonarqubeIntegration as b}from"./integrations.esm.js";import{soundcheckRoutingPage as y,soundcheckOverviewPage as S}from"./pages.esm.js";import{soundcheckSidebarItem as v}from"./sidebar-item.esm.js";var C=t({pluginId:"soundcheck",extensions:[y,S,n,e,r,o,i,v,a,g,c,u,d,I,m,p,s,h,k,f,l,b]});export{C as default};
2
2
  //# sourceMappingURL=plugin.esm.js.map
package/dist/alpha.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
2
1
  import * as react from 'react';
2
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
3
3
 
4
4
  /**
5
5
  * @public
@@ -7,6 +7,15 @@ import * as react from 'react';
7
7
  * The Soundcheck plugin for use within Backstage´s new frontend system
8
8
  */
9
9
  declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{}, {}, {
10
+ "api:soundcheck/remedy-tracker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
11
+ kind: "api";
12
+ name: "remedy-tracker";
13
+ config: {};
14
+ configInput: {};
15
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
16
+ inputs: {};
17
+ params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
18
+ }>;
10
19
  "integration:soundcheck/azure": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
11
20
  kind: "integration";
12
21
  name: "azure";
package/dist/api.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiRef as h}from"@backstage/core-plugin-api";import{GraphQLClient as o}from"graphql-request";import y from"pako";import{getSdk as l}from"./graphql/generated/index.esm.js";const g=h({id:"plugin.soundcheck"}),k=i=>"response"in i&&"errors"in i.response,p=i=>"response"in i&&"message"in i.response;class w{#a;#s;#t;constructor(t){this.#a=t.fetchApi,this.#s=t.discoveryApi;const e=new o("/graphql",{fetch:async(a,s)=>{const r=`${await this.#s.getBaseUrl("soundcheck")}${a}`;return this.#a.fetch(r,s)}});this.#t=l(e)}#r=t=>k(t)?t.response?.errors?.[0].message??`${t}`:p(t)?t.response.message:`${t}`;#e=async t=>{try{return await t()}catch(e){throw new Error(`Error from Soundcheck backend: ${this.#r(e)}`)}};async getMultipleTrackStatuses(t){return this.#e(async()=>{const{multipleTrackStatuses:e}=await this.#t.getMultipleTrackStatuses({input:t});return e})}async getAllCertifications(t,e=!1,a=!1){return this.#e(async()=>{const{certifications:s}=await this.#t.getAllCertifications({entityRef:t,includeFilteredChecks:e,includeDraftTracks:a});return s})}async getCertificationDetails(t,e=!1,a=!1){return this.#e(async()=>{const{certifications:s}=await this.#t.getCertificationDetails({entityRef:t,includeFilteredChecks:e,includeDraftTracks:a});return s})}async getCertificationDetailsForTrack(t,e,a){return this.#e(async()=>{const{trackCertification:s}=await this.#t.getCertificationDetailsForTrack({entityRef:t,trackId:e,includeFilteredChecks:a});return s})}async getCheckResultDetails(t,e,a){return this.#e(async()=>{const{checkResult:s}=await this.#t.getCheckResultDetails({entityRef:t,trackId:e,checkId:a});return s})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getTrackOverviewForOwner(t,e,a,s,r){return this.#e(async()=>{const{trackOverviewForOwner:n}=await this.#t.getTrackOverviewForOwner({ownerEntityRef:t,facet:e,first:a,after:s,entitySearch:r});return n})}async getTracks(t){return this.#e(async()=>{const{tracks:e}=await this.#t.getTracks({filter:t});return e})}async getTracksApplicableEntityCount(t,e){return this.#e(async()=>{const{tracks:a}=await this.#t.getTracksApplicableEntityCount({filter:t,groupRef:e});return a?.edges?.map(({node:s})=>({id:s.id,applicableEntityCount:s.applicableEntityCount??0}))})}async getTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.getTrack({id:t});return e})}async createTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.createTrack({input:t});return e})}async updateTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.updateTrack({input:t});return e})}async deleteTrack(t){return this.#e(async()=>{const{trackDeleted:e}=await this.#t.deleteTrack({trackId:t});return e})}async importTracks(t){return this.#e(async()=>{const{status:e}=await this.#t.importTracks({tracks:t});return e})}async recertifyTrack(t,e,a){return this.#e(async()=>{const{trackRecertified:s}=await this.#t.recertifyTrack({trackId:t,numberOfDays:e,loggedInUserRef:a});return s})}async getPlaylists(t){return this.#e(async()=>{const{playlists:e}=await this.#t.getPlaylists({entityRef:t});return e})}async getOperators(){return this.#e(async()=>{const{operators:t}=await this.#t.getOperators();return t})}async getCheck(t){return this.#e(async()=>(await this.#t.getCheck({id:t})).check)}async getChecks(t){return this.#e(async()=>{const{checkers:e}=await this.#t.getCheckers({filter:t});return e})}async getExecutableChecks(){return this.#e(async()=>{const{executableChecks:t}=await this.#t.getExecutableChecks();return t})}async createCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.createCheck({input:t});return e})}async updateCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.updateCheck({input:t});return e})}async deleteCheck(t){return this.#e(async()=>await this.#t.deleteChecker({checkerId:t}))}async executeCheck(t){return this.#e(async()=>{const{result:e}=await this.#t.executeCheck({input:t});return e})}async importChecks(t){return this.#e(async()=>{const{status:e}=await this.#t.importCheckers({checkers:t});return e})}async setEntityExempt(t){return this.#e(async()=>{const{setEntityExempt:e}=await this.#t.setEntityExempt({input:t});return e})}async setManualCheckResult(t){return this.#e(async()=>await this.#t.setManualCheckResult({input:t}))}async deleteExemption(t,e){return this.#e(async()=>await this.#t.deleteExemption({checkId:t,entityRef:e}))}async getExemption(t,e){return this.#e(async()=>await this.#t.getExemption({checkId:t,entityRef:e}))}async getExemptions(t,e,a,s,r){return this.#e(async()=>await this.#t.getExemptions({checkId:t,first:e,after:a,last:s,before:r}))}async getExemptCheckIds(t,e){return this.#e(async()=>await this.#t.getExemptCheckIds({entityRef:t,trackId:e}))}async getCollectors(t){return this.#e(async()=>{const{collectors:e}=await this.#t.getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return this.#e(async()=>{const{factSchema:a}=await this.#t.getFactSchemas({collectorId:t,factName:e});return a})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}async deleteCollectorConfig(t){return this.#e(async()=>await this.#t.deleteCollectorConfig({collectorId:t}))}async getOverallCheckPassRates(t){return this.#e(async()=>await this.#t.getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return this.#e(async()=>await this.#t.getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return this.#e(async()=>await this.#t.getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return this.#e(async()=>await this.#t.getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return this.#e(async()=>await this.#t.getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return this.#e(async()=>await this.#t.getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return this.#e(async()=>await this.#t.getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return this.#e(async()=>await this.#t.getIndividualGroupPassRates({input:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t,e){return this.#e(async()=>{const{campaigns:a}=await this.#t.getCampaigns({filter:t,byTrackIds:e});return a})}async createCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.createCampaign({input:t});return e})}async updateCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.updateCampaign({input:t});return e})}async deleteCampaign(t){return this.#e(async()=>{const{campaignDeleted:e}=await this.#t.deleteCampaign({campaignId:t});return e})}async sendCampaignNotification(t){return this.#e(async()=>{const{sendCampaignNotification:e}=await this.#t.sendCampaignNotification({input:t});return e})}async archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignOwners(){return this.#e(async()=>{const{campaignOwners:t}=await this.#t.getCampaignOwners();return t})}async getCheckOwners(){return this.#e(async()=>{const{checkOwners:t}=await this.#t.getCheckOwners();return t})}async getTrackOwners(){return this.#e(async()=>{const{trackOwners:t}=await this.#t.getTrackOwners();return t})}async getCertificationStatus(t){return this.#e(async()=>this.#t.getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return this.#e(async()=>this.#t.getCertificationStatusHistory({input:t}))}async getTrackStatusHistory(t){return this.#e(async()=>(await this.#t.getTrackStatusHistory({input:t})).trackStatusHistory)}async getTrackStatusHistories(t){return this.#e(async()=>(await this.#t.getTrackStatusHistories({input:t})).trackStatusHistories)}async getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatuses(t){return this.#e(async()=>(await this.#t.getCheckStatuses({input:t})).checkStatuses)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckStatusHistoriesMultiFilter(t){return this.#e(async()=>(await this.#t.getCheckStatusHistoriesMultiFilter({input:t})).checkStatusHistoriesMultiFilter)}async getCheckStatusHistories(t){return this.#e(async()=>(await this.#t.getCheckStatusHistories({input:t})).checkStatusHistories)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}async getSavedViews(t){return this.#e(async()=>await this.#t.getSavedViews({input:t}))}async saveView(t){return this.#e(async()=>{const{saveView:e}=await this.#t.saveView({input:t});return e})}async deleteView(t){return this.#e(async()=>{const{deleteView:e}=await this.#t.deleteView({input:t});return e})}async getPathResolvers(){return this.#e(async()=>{const{pathResolvers:t}=await this.#t.getPathResolvers();return t})}async getCheckTemplates(){return this.#e(async()=>{const{checkerTemplates:t}=await this.#t.getCheckTemplates();return t})}async getOutOfBoxTracks(){return this.#e(async()=>{const{outOfBoxTracks:t}=await this.#t.getOutOfBoxTracks();return t})}async saveOutOfBoxTracks(t){return this.#e(async()=>{const{status:e}=await this.#t.saveOutOfBoxTracks(t);return e})}async getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}async getGroupTypeHierarchy(){return this.#e(async()=>{const{groupTypeHierarchy:t}=await this.#t.getGroupTypeHierarchy();return t})}async getGroupHierarchy(t,e,a){return this.#e(async()=>{const{groupHierarchy:s}=await this.#t.getGroupHierarchy({groupRef:t,ownedEntitiesFilter:e,includeParent:a}),r=Uint8Array.from(atob(s.hierarchy),u=>u.charCodeAt(0)),n=y.inflate(r),c=new TextDecoder("utf-8").decode(n);return{hierarchy:JSON.parse(c)}})}async getHierarchicalTrackStatus(t,e){return this.#e(async()=>{const{hierarchicalTrackStatus:a}=await this.#t.getHierarchicalTrackStatus({trackId:t,groupRef:e});return a})}async getHierarchicalTrackStatuses(t,e){return this.#e(async()=>{const{hierarchicalTrackStatuses:a}=await this.#t.getHierarchicalTrackStatuses({trackIds:t,groupRef:e});return a})}async recordLoadTime(t){return this.#e(async()=>await this.#t.recordLoadTime({input:{metricType:t.metricType,routeName:t.routeName,loadTimeMs:t.loadTimeMs,additionalAttributes:t.additionalAttributes}}))}}export{w as SoundcheckApi,g as soundcheckApiRef};
1
+ import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as o}from"graphql-request";import y from"pako";import{getSdk as l}from"./graphql/generated/index.esm.js";const g=c({id:"plugin.soundcheck"}),k=r=>"response"in r&&"errors"in r.response,p=r=>"response"in r&&"message"in r.response;class d{#a;#s;#t;constructor(t){this.#a=t.fetchApi,this.#s=t.discoveryApi;const e=new o("/graphql",{fetch:async(a,s)=>{const i=`${await this.#s.getBaseUrl("soundcheck")}${a}`;return this.#a.fetch(i,s)}});this.#t=l(e)}#r=t=>k(t)?t.response?.errors?.[0].message??`${t}`:p(t)?t.response.message:`${t}`;#e=async t=>{try{return await t()}catch(e){throw new Error(`Error from Soundcheck backend: ${this.#r(e)}`)}};async getMultipleTrackStatuses(t){return this.#e(async()=>{const{multipleTrackStatuses:e}=await this.#t.getMultipleTrackStatuses({input:t});return e})}async getAllCertifications(t,e=!1,a=!1){return this.#e(async()=>{const{certifications:s}=await this.#t.getAllCertifications({entityRef:t,includeFilteredChecks:e,includeDraftTracks:a});return s})}async getCertificationDetails(t,e=!1,a=!1){return this.#e(async()=>{const{certifications:s}=await this.#t.getCertificationDetails({entityRef:t,includeFilteredChecks:e,includeDraftTracks:a});return s})}async getCertificationDetailsForTrack(t,e,a){return this.#e(async()=>{const{trackCertification:s}=await this.#t.getCertificationDetailsForTrack({entityRef:t,trackId:e,includeFilteredChecks:a});return s})}async getCheckResultDetails(t,e,a){return this.#e(async()=>{const{checkResult:s}=await this.#t.getCheckResultDetails({entityRef:t,trackId:e,checkId:a});return s})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getTrackOverviewForOwner(t,e,a,s,i){return this.#e(async()=>{const{trackOverviewForOwner:n}=await this.#t.getTrackOverviewForOwner({ownerEntityRef:t,facet:e,first:a,after:s,entitySearch:i});return n})}async getTracks(t){return this.#e(async()=>{const{tracks:e}=await this.#t.getTracks({filter:t});return e})}async getTracksApplicableEntityCount(t,e){return this.#e(async()=>{const{tracks:a}=await this.#t.getTracksApplicableEntityCount({filter:t,groupRef:e});return a?.edges?.map(({node:s})=>({id:s.id,applicableEntityCount:s.applicableEntityCount??0}))})}async getTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.getTrack({id:t});return e})}async createTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.createTrack({input:t});return e})}async updateTrack(t){return this.#e(async()=>{const{track:e}=await this.#t.updateTrack({input:t});return e})}async deleteTrack(t){return this.#e(async()=>{const{trackDeleted:e}=await this.#t.deleteTrack({trackId:t});return e})}async importTracks(t){return this.#e(async()=>{const{status:e}=await this.#t.importTracks({tracks:t});return e})}async recertifyTrack(t,e,a){return this.#e(async()=>{const{trackRecertified:s}=await this.#t.recertifyTrack({trackId:t,numberOfDays:e,loggedInUserRef:a});return s})}async getPlaylists(t){return this.#e(async()=>{const{playlists:e}=await this.#t.getPlaylists({entityRef:t});return e})}async getOperators(){return this.#e(async()=>{const{operators:t}=await this.#t.getOperators();return t})}async getCheck(t){return this.#e(async()=>(await this.#t.getCheck({id:t})).check)}async getChecks(t){return this.#e(async()=>{const{checkers:e}=await this.#t.getCheckers({filter:t});return e})}async getExecutableChecks(){return this.#e(async()=>{const{executableChecks:t}=await this.#t.getExecutableChecks();return t})}async createCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.createCheck({input:t});return e})}async updateCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.updateCheck({input:t});return e})}async deleteCheck(t){return this.#e(async()=>await this.#t.deleteChecker({checkerId:t}))}async executeCheck(t){return this.#e(async()=>{const{result:e}=await this.#t.executeCheck({input:t});return e})}async importChecks(t){return this.#e(async()=>{const{status:e}=await this.#t.importCheckers({checkers:t});return e})}async setEntityExempt(t){return this.#e(async()=>{const{setEntityExempt:e}=await this.#t.setEntityExempt({input:t});return e})}async setManualCheckResult(t){return this.#e(async()=>await this.#t.setManualCheckResult({input:t}))}async deleteExemption(t,e){return this.#e(async()=>await this.#t.deleteExemption({checkId:t,entityRef:e}))}async getExemption(t,e){return this.#e(async()=>await this.#t.getExemption({checkId:t,entityRef:e}))}async getExemptions(t,e,a,s,i){return this.#e(async()=>await this.#t.getExemptions({checkId:t,first:e,after:a,last:s,before:i}))}async getExemptCheckIds(t,e){return this.#e(async()=>await this.#t.getExemptCheckIds({entityRef:t,trackId:e}))}async getCollectors(t){return this.#e(async()=>{const{collectors:e}=await this.#t.getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return this.#e(async()=>{const{factSchema:a}=await this.#t.getFactSchemas({collectorId:t,factName:e});return a})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}async deleteCollectorConfig(t){return this.#e(async()=>await this.#t.deleteCollectorConfig({collectorId:t}))}async getOverallCheckPassRates(t){return this.#e(async()=>await this.#t.getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return this.#e(async()=>await this.#t.getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return this.#e(async()=>await this.#t.getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return this.#e(async()=>await this.#t.getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return this.#e(async()=>await this.#t.getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return this.#e(async()=>await this.#t.getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return this.#e(async()=>await this.#t.getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return this.#e(async()=>await this.#t.getIndividualGroupPassRates({input:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t,e){return this.#e(async()=>{const{campaigns:a}=await this.#t.getCampaigns({filter:t,byTrackIds:e});return a})}async createCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.createCampaign({input:t});return e})}async updateCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.updateCampaign({input:t});return e})}async deleteCampaign(t){return this.#e(async()=>{const{campaignDeleted:e}=await this.#t.deleteCampaign({campaignId:t});return e})}async sendCampaignNotification(t){return this.#e(async()=>{const{sendCampaignNotification:e}=await this.#t.sendCampaignNotification({input:t});return e})}async archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignOwners(){return this.#e(async()=>{const{campaignOwners:t}=await this.#t.getCampaignOwners();return t})}async getCheckOwners(){return this.#e(async()=>{const{checkOwners:t}=await this.#t.getCheckOwners();return t})}async getTrackOwners(){return this.#e(async()=>{const{trackOwners:t}=await this.#t.getTrackOwners();return t})}async getCertificationStatus(t){return this.#e(async()=>this.#t.getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return this.#e(async()=>this.#t.getCertificationStatusHistory({input:t}))}async getTrackStatusHistory(t){return this.#e(async()=>(await this.#t.getTrackStatusHistory({input:t})).trackStatusHistory)}async getTrackStatusHistories(t){return this.#e(async()=>(await this.#t.getTrackStatusHistories({input:t})).trackStatusHistories)}async getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatuses(t){return this.#e(async()=>(await this.#t.getCheckStatuses({input:t})).checkStatuses)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckStatusHistoriesMultiFilter(t){return this.#e(async()=>(await this.#t.getCheckStatusHistoriesMultiFilter({input:t})).checkStatusHistoriesMultiFilter)}async getCheckStatusHistories(t){return this.#e(async()=>(await this.#t.getCheckStatusHistories({input:t})).checkStatusHistories)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}async getSavedViews(t){return this.#e(async()=>await this.#t.getSavedViews({input:t}))}async saveView(t){return this.#e(async()=>{const{saveView:e}=await this.#t.saveView({input:t});return e})}async deleteView(t){return this.#e(async()=>{const{deleteView:e}=await this.#t.deleteView({input:t});return e})}async getPathResolvers(){return this.#e(async()=>{const{pathResolvers:t}=await this.#t.getPathResolvers();return t})}async getCheckTemplates(){return this.#e(async()=>{const{checkerTemplates:t}=await this.#t.getCheckTemplates();return t})}async getOutOfBoxTracks(){return this.#e(async()=>{const{outOfBoxTracks:t}=await this.#t.getOutOfBoxTracks();return t})}async saveOutOfBoxTracks(t){return this.#e(async()=>{const{status:e}=await this.#t.saveOutOfBoxTracks(t);return e})}async getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}async getGroupTypeHierarchy(){return this.#e(async()=>{const{groupTypeHierarchy:t}=await this.#t.getGroupTypeHierarchy();return t})}async getGroupHierarchy(t,e,a){return this.#e(async()=>{const{groupHierarchy:s}=await this.#t.getGroupHierarchy({groupRef:t,ownedEntitiesFilter:e,includeParent:a}),i=Uint8Array.from(atob(s.hierarchy),h=>h.charCodeAt(0)),n=y.inflate(i),u=new TextDecoder("utf-8").decode(n);return{hierarchy:JSON.parse(u)}})}async getHierarchicalTrackStatus(t,e){return this.#e(async()=>{const{hierarchicalTrackStatus:a}=await this.#t.getHierarchicalTrackStatus({trackId:t,groupRef:e});return a})}async getHierarchicalTrackStatuses(t,e){return this.#e(async()=>{const{hierarchicalTrackStatuses:a}=await this.#t.getHierarchicalTrackStatuses({trackIds:t,groupRef:e});return a})}async recordLoadTime(t){return this.#e(async()=>await this.#t.recordLoadTime({input:{metricType:t.metricType,routeName:t.routeName,loadTimeMs:t.loadTimeMs,additionalAttributes:t.additionalAttributes}}))}}const w=c({id:"plugin.soundcheck.remedy-tracker"});class C{async getRemediesForCheck(t){return[]}async getRemediesForEntity(t){return[]}}export{C as NoOpRemedyTrackerClient,d as SoundcheckApi,w as remedyTrackerApiRef,g as soundcheckApiRef};
2
2
  //# sourceMappingURL=api.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r}from"react/jsx-runtime";import{compatWrapper as u}from"@backstage/core-compat-api";import{createExtensionDataRef as c,createExtensionBlueprint as l,coreExtensionData as t,ExtensionBoundary as s}from"@backstage/frontend-plugin-api";import{lazy as f}from"react";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@backstage/ui";import"@spotify/backstage-plugin-soundcheck-common";import"react-helmet";import"react-router-dom";import"../routes.esm.js";import"../components/CampaignPage/CampaignPageBUI.esm.js";import"../components/CampaignPage/CampaignActionsContext.esm.js";import"../components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import"../components/CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../components/CampaignsPage/CampaignListPageBUI.esm.js";import"../contexts/TrackFormContext.esm.js";import"../contexts/CheckFormContext.esm.js";import"../contexts/CampaignFormContext.esm.js";import"../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../components/CampaignForm/CampaignForm.esm.js";import"@remixicon/react";import"../components/SoundcheckHeader/SoundcheckHeader.esm.js";import"../components/SoundcheckHeader/SoundcheckHeaderContext.esm.js";import"../components/Loading/Loading.esm.js";import"../components/PageWarningMessage/PageWarningMessage.esm.js";import"../components/CampaignsPage/CampaignEmptyState.esm.js";import"uuid";import"@backstage/core-components";import"react-hook-form";import"../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../components/SoundcheckDialog/SoundcheckDialog.esm.js";import"../components/FactExplorer/FactExplorer.esm.js";import"../components/FactExplorer/FactExplorerContext.esm.js";import"../components/FormStepper/FormStepper.esm.js";import"../components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js";import"../components/CheckForm/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../components/FormMarkdownInput/FormMarkdownInput.esm.js";import"../components/CheckForm/utils/checkFormUtils.esm.js";import"../components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js";import"../components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"../components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../components/CheckForm/FormFields/CheckPathResolverInput.esm.js";import"../components/CheckForm/Steps/CheckDetailsStep.esm.js";import"../components/CheckForm/Steps/CheckRulesStep.esm.js";import"../components/CheckForm/Steps/CheckApplicabilityStep.esm.js";import"../components/CheckForm/Steps/CheckReviewStep.esm.js";import"../components/CheckForm/types/ExpressionType.esm.js";import"../components/Frequency/types.esm.js";import"../components/Frequency/util.esm.js";import"../components/Frequency/FrequencyComponent.esm.js";import"../components/CheckForm/types/Path.esm.js";import"@hookform/resolvers/zod";import"../components/CheckForm/utils/validation.esm.js";import"../components/LoadingIndicator/LoadingIndicator.esm.js";import"../components/CheckPage/CheckPageBUI.esm.js";import"../components/ChecksPage/ChecksListPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import"../components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js";import"../components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js";import"../components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js";import"../components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js";import"../components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js";import"../components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js";import"../components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js";import"../components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js";import"../components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js";import"../components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js";import"../components/CollectorPage/CollectorDetailsPageBUI.esm.js";import"../components/CollectorPage/CollectorDetailsPageDeprecated.esm.js";import"../components/CollectorsPage/IntegrationsListPageBUI.esm.js";import"../components/CreateNewTrackPage/CreateNewTrackPage.esm.js";import"../components/OverviewPage/OverviewPageContent.esm.js";import"../components/TechInsights/TechInsightsPageBUI.esm.js";import"../components/TrackBuilderPage/TrackBuilderPage.esm.js";import"lodash";import"../components/Filter/FilterComponent.esm.js";import"../components/TrackForm/Steps/LevelsStep/LevelsStepNew.esm.js";import"../components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import"../components/TrackForm/utils/validation.esm.js";import"../graphql/generated/index.esm.js";import"../components/TrackPage/TrackPageBUI.esm.js";import"../components/TrackPage/TrackTechInsightsExplorerPage.esm.js";import"../components/TracksPage/TracksListPageBUI.esm.js";import"@spotify/backstage-plugin-core";import"../components/SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{RoutingPageWrapper as g}from"../components/RoutingPage/RoutingPageWrapper.esm.js";const o=c().with({id:"soundcheck.integrationId"}),h=l({kind:"integration",attachTo:{id:"app/routes",input:"routes"},output:[t.routePath,t.reactElement,t.routeRef.optional(),o],dataRefs:{integrationId:o},*factory({integrationId:i,loader:m,path:e,routeRef:p},{node:n}){const a=f(()=>m().then(d=>({default:()=>d})));yield t.routePath(e??`/soundcheck/integrations/${i}/edit`),yield t.reactElement(u(r(s,{node:n,children:r(g,{children:r(a,{})})}))),p&&(yield t.routeRef(p)),yield o(i)}});export{h as IntegrationPageBlueprint,o as integrationIdExtensionDataRef};
1
+ import{jsx as r}from"react/jsx-runtime";import{compatWrapper as u}from"@backstage/core-compat-api";import{createExtensionDataRef as c,createExtensionBlueprint as l,coreExtensionData as t,ExtensionBoundary as s}from"@backstage/frontend-plugin-api";import{lazy as f}from"react";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@backstage/ui";import"@spotify/backstage-plugin-soundcheck-common";import"react-helmet";import"react-router-dom";import"../routes.esm.js";import"../components/CampaignPage/CampaignPageBUI.esm.js";import"../components/CampaignPage/CampaignActionsContext.esm.js";import"../components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import"../components/CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../components/CampaignsPage/CampaignListPageBUI.esm.js";import"../contexts/TrackFormContext.esm.js";import"../contexts/CheckFormContext.esm.js";import"../contexts/CampaignFormContext.esm.js";import"../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import"../components/CampaignForm/CampaignForm.esm.js";import"@remixicon/react";import"../components/SoundcheckHeader/SoundcheckHeader.esm.js";import"../components/SoundcheckHeader/SoundcheckHeaderContext.esm.js";import"../components/Loading/Loading.esm.js";import"../components/PageWarningMessage/PageWarningMessage.esm.js";import"../components/CampaignsPage/CampaignEmptyState.esm.js";import"uuid";import"@backstage/core-components";import"react-hook-form";import"../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../components/SoundcheckDialog/SoundcheckDialog.esm.js";import"../components/FactExplorer/FactExplorer.esm.js";import"../components/FactExplorer/FactExplorerContext.esm.js";import"../components/FormStepper/FormStepper.esm.js";import"../components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js";import"../components/CheckForm/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../components/FormMarkdownInput/FormMarkdownInput.esm.js";import"../components/CheckForm/utils/checkFormUtils.esm.js";import"../components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js";import"../components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"../components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"../components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"../components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js";import"../components/CheckForm/FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"../components/CheckForm/FormFields/CheckPathResolverInput.esm.js";import"../components/CheckForm/Steps/CheckDetailsStep.esm.js";import"../components/CheckForm/Steps/CheckRulesStep.esm.js";import"../components/CheckForm/Steps/CheckApplicabilityStep.esm.js";import"../components/CheckForm/Steps/CheckReviewStep.esm.js";import"../components/CheckForm/types/ExpressionType.esm.js";import"../components/Frequency/types.esm.js";import"../components/Frequency/util.esm.js";import"../components/Frequency/FrequencyComponent.esm.js";import"../components/CheckForm/types/Path.esm.js";import"@hookform/resolvers/zod";import"../components/CheckForm/utils/validation.esm.js";import"../components/LoadingIndicator/LoadingIndicator.esm.js";import"../components/CheckPage/CheckPageBUI.esm.js";import"../components/ChecksPage/ChecksListPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import"../components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import"../components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js";import"../components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js";import"../components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js";import"../components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js";import"../components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js";import"../components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js";import"../components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js";import"../components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js";import"../components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js";import"../components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js";import"../components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js";import"../components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js";import"../components/CollectorPage/CollectorDetailsPageBUI.esm.js";import"../components/CollectorPage/CollectorDetailsPageDeprecated.esm.js";import"../components/CollectorsPage/IntegrationsListPageBUI.esm.js";import"../components/CreateNewTrackPage/CreateNewTrackPage.esm.js";import"../components/OverviewPage/OverviewPageContent.esm.js";import"../components/TechInsights/TechInsightsPageBUI.esm.js";import"../components/TrackBuilderPage/TrackBuilderPage.esm.js";import"lodash";import"../components/Filter/FilterComponent.esm.js";import"../components/TrackForm/Steps/LevelsStep/LevelsStepNew.esm.js";import"../components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import"../components/TrackForm/utils/validation.esm.js";import"../components/TrackPage/TrackPageBUI.esm.js";import"../components/TrackPage/TrackTechInsightsExplorerPage.esm.js";import"../components/TracksPage/TracksListPageBUI.esm.js";import"@spotify/backstage-plugin-core";import"../components/SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{RoutingPageWrapper as g}from"../components/RoutingPage/RoutingPageWrapper.esm.js";const o=c().with({id:"soundcheck.integrationId"}),h=l({kind:"integration",attachTo:{id:"app/routes",input:"routes"},output:[t.routePath,t.reactElement,t.routeRef.optional(),o],dataRefs:{integrationId:o},*factory({integrationId:i,loader:m,path:e,routeRef:p},{node:n}){const a=f(()=>m().then(d=>({default:()=>d})));yield t.routePath(e??`/soundcheck/integrations/${i}/edit`),yield t.reactElement(u(r(s,{node:n,children:r(g,{children:r(a,{})})}))),p&&(yield t.routeRef(p)),yield o(i)}});export{h as IntegrationPageBlueprint,o as integrationIdExtensionDataRef};
2
2
  //# sourceMappingURL=IntegrationPageBlueprint.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,Fragment as g,jsx as o}from"react/jsx-runtime";import{useRouteRef as f}from"@backstage/core-plugin-api";import{HeaderPage as u}from"@backstage/ui";import{useEffect as d}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as e,useCampaignFormContext as C}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useCreateCampaign as l}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as h}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{campaignsPageRouteRef as i}from"../../routes.esm.js";import{CampaignForm as k}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as y}from"../SoundcheckHeader/useHeader.esm.js";const x=()=>{const{setIsLoading:t}=C(),{mutateAsync:m,isLoading:r}=l();d(()=>{t(r)},[t,r]);const[a,s]=h(i),p=async n=>{await m(n,{onSuccess:s})};return y({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),o(e,{children:o(k,{onSave:p,onCancel:a})})},F=()=>{const t=f(i);return c(g,{children:[o(u,{title:"Create Campaign",breadcrumbs:[{label:"All Campaigns",href:t()}],customActions:o(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(e,{children:o(x,{})})]})};export{F as CampaignCreatePage};
1
+ import{jsxs as c,Fragment as g,jsx as o}from"react/jsx-runtime";import{useRouteRef as f}from"@backstage/core-plugin-api";import{HeaderPage as u}from"@backstage/ui";import{useEffect as d}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as e,useCampaignFormContext as C}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useCreateCampaign as l}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as h}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{campaignsPageRouteRef as i}from"../../routes.esm.js";import{CampaignForm as k}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as b}from"../DocLinkButton/DocLinkButton.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as y}from"../SoundcheckHeader/useHeader.esm.js";const x=()=>{const{setIsLoading:t}=C(),{mutateAsync:m,isLoading:r}=l();d(()=>{t(r)},[t,r]);const[a,p]=h(i),s=async n=>{await m(n,{onSuccess:p})};return y({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),o(e,{children:o(k,{onSave:s,onCancel:a})})},F=()=>{const t=f(i);return c(g,{children:[o(u,{title:"Create Campaign",breadcrumbs:[{label:"All Campaigns",href:t()}],customActions:o(b,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(e,{children:o(x,{})})]})};export{F as CampaignCreatePage};
2
2
  //# sourceMappingURL=CampaignCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as s}from"@hookform/resolvers/zod";import{useMemo as n}from"react";import{useForm as u}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"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useGetChecksMap as c}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as g}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as l}from"../utils/validation.esm.js";import{mapCampaignToFormValues as C,mapCampaignFormDataToCampaignInput as d}from"./utils.esm.js";const F=(r,o)=>{const a=n(()=>o?C(o):g,[o]),t=u({defaultValues:a,mode:"onChange",resolver:s(l)}),{showModal:e}=f(),{checksMap:i}=c();return{formMethods:t,onSubmit:async m=>{if(!await e({title:"Save Campaign",message:`Are you sure you want to save campaign: ${m.detailsStep.name}?`,error:!1}))return;const p=d(m,o,i);r(p)}}};export{F as useCampaignForm};
1
+ import{zodResolver as s}from"@hookform/resolvers/zod";import{useMemo as n}from"react";import{useForm as u}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"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useGetChecksMap as c}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as g}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as l}from"../utils/validation.esm.js";import{mapCampaignToFormValues as C,mapCampaignFormDataToCampaignInput as d}from"./utils.esm.js";const F=(r,o)=>{const t=n(()=>o?C(o):g,[o]),a=u({defaultValues:t,mode:"onChange",resolver:s(l)}),{showModal:e}=f(),{checksMap:i}=c();return{formMethods:a,onSubmit:async m=>{if(!await e({title:"Save Campaign",message:`Are you sure you want to save campaign: ${m.detailsStep.name}?`,error:!1}))return;const p=d(m,o,i);r(p)}}};export{F as useCampaignForm};
2
2
  //# sourceMappingURL=useCampaignForm.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{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 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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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};
2
2
  //# sourceMappingURL=CampaignPageBUI.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as p,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{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 ce}from"../../routes.esm.js";import{EmptyStateBUI as x}from"../EmptyState/EmptyStateBUI.esm.js";import{hierarchyToNivo as pe}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:c}=re({trackId:m?.id??"",groupRef:r??"",skip:!m?.id}),U=C(()=>{if(!r)return;const a=L?.[r];return a?pe(a,h||null,()=>"var(--bui-fg-primary)",N,void 0):void 0},[L,N,r,h]),P=G?.getLCPValue();Y(()=>{!s&&!u&&!c&&R({lcp:P})},[s,u,c,R,P]);const q=b(se),V=b(ce);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}.`})}):p(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}):""}]}),p(d,{className:o.container,children:[e(v,{className:o.teams,children:e(be,{trackStatus:h??void 0,isLoading:c,campaignId:i})}),p(v,{children:[p(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||c,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 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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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};
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{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 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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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};
2
2
  //# sourceMappingURL=CampaignListPageBUI.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 s}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{HeaderPage as b}from"@backstage/ui";import{soundcheckCampaignUpdatePermission as L}from"@spotify/backstage-plugin-soundcheck-common";import{useEffect as P}from"react";import{useParams as E}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as w}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as x}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as I}from"../../hooks/useNavigateBack.esm.js";import"react-use/lib/useLocalStorage";import{useGetCampaign as U}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as p,campaignDetailsRouteRef as A}from"../../routes.esm.js";import{CampaignForm as D}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as F}from"../DocLinkButton/DocLinkButton.esm.js";import{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(p),{campaignId:t}=E(),{setIsLoading:e}=w(),{mutateAsync:g,isLoading:a}=x(),{data:f,isLoading:m}=U(t??""),i=f?.edges?.[0]?.node,{loading:u,allowed:r}=R({permission:L,resourceRef:i?.id});P(()=>e(a),[e,a]);const l=s(p),C=s(A);if(!m&&!i)return o(B,{});const h=async k=>{await g(k,{onSuccess:d})};return y(n,{children:[o(b,{title:`Edit ${i?.name??t??"Campaign"}`,breadcrumbs:[{label:"All Campaigns",href:l()},{label:"Details",href:C({campaignId:t??""})}],customActions:o(F,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns/"})}),o(j,{entityId:i?.id,entityName:i?.name??"",showCannotEdit:!u&&!r}),m?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 n}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as R}from"@backstage/plugin-permission-react";import{HeaderPage as b}from"@backstage/ui";import{soundcheckCampaignUpdatePermission as L}from"@spotify/backstage-plugin-soundcheck-common";import{useEffect as P}from"react";import{useParams as E}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as w}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as x}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as I}from"../../hooks/useNavigateBack.esm.js";import"react-use/lib/useLocalStorage";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{useGetCampaign as U}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as p,campaignDetailsRouteRef as A}from"../../routes.esm.js";import{CampaignForm as D}from"../CampaignForm/CampaignForm.esm.js";import{DocLinkButton as F}from"../DocLinkButton/DocLinkButton.esm.js";import{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(p),{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=s(p),C=s(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};
2
2
  //# sourceMappingURL=EditCampaignView.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 o,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{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=o(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=o(({...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=o(k)(()=>({margin:"0 !important",borderRadius:0,padding:0})),d=y(()=>({sidebar:{width:"100%"}})),D=({playlistId:t,trackId:e,checkId:n})=>{const c=d(),{entity:m}=g(),p=v(null),{data:r,isLoading:s,isError:l}=I(m,e);if(l)return i("div",{children:i(R,{padding:2,children:i(L,{severity:"error",title:"Error loading certification"})})});if(s||!e)return i(C,{});if(!r)return null;const f=r.track.type==="campaign";return u(A,{ref:p,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:c.sidebar,children:r?.levels.map(a=>i(S,{level:a,checkId:n,trackId:e,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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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:c}=g(),p=v(null),{data:r,isLoading:s,isError:l}=I(c,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:p,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{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:m,trackId:e,checkId:c,showNotApplicable:p,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(a=>a.result===I.NotApplicable?p:d?.exemptCheckIds.includes(a.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:c,trackId:e,playlistId:m,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{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:m,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(a=>a.result===I.NotApplicable?c:d?.exemptCheckIds.includes(a.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:m,isCampaign:k},r.ordinal))]})};export{j as CertificationSidebar,R as useStyles};
2
2
  //# sourceMappingURL=CertificationSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as C,jsx as e,Fragment as N}from"react/jsx-runtime";import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as E,Box as $,Typography as I,Tooltip as R,IconButton as S,CircularProgress as T}from"@material-ui/core";import z from"@material-ui/icons/Refresh";import A from"classnames";import{Link as L}from"react-router-dom";import{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"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as j}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useExecuteCheck as w}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as B}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as F}from"../RelativeTime/RelativeTime.esm.js";const d=E(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}})),G=({className:t,href:r,name:o,children:c})=>r?e(L,{"aria-label":`select check ${o}`,to:r,className:t,children:c}):e("div",{className:t,children:c}),P=({result:t,name:r,id:o,timestamp:c,isExecutable:l=!0,selected:u=!1,href:f})=>{const m=d(),k=A(m.root,{selected:u}),{entity:a}=v(),{mutateAsync:y,isLoading:n}=w(),{data:s}=j(p(a),o),x=async()=>{if(!(!a||!o))try{await y({checkerId:o,entityRef:p(a),shouldRefreshFacts:!0})}catch{}},g=!a||!o||!l||n||!!s?.exemption||t===h.NotApplicable,b=()=>{const i="Cannot execute check";return a?o?l?n?`${i} - check is already executing.`:s?.exemption?`${i} - entity has been exempted from this check.`:t===h.NotApplicable?`${i} - check is not applicable to entity.`:"Execute Check":`${i} - check is not executable by Soundcheck`:`${i} - no check id.`:`${i} - no entity.`};return C(G,{href:f,className:k,name:r,children:[e(B,{className:m.checkIcon,result:t}),e($,{flex:1,children:e(I,{variant:"body2",children:r})}),c&&!n?e(F,{timestamp:c}):null,!n&&e(N,{children:e(R,{title:b(),children:e("span",{children:e(S,{size:"small",color:"inherit",onClick:x,disabled:g,"aria-label":"Execute Check",children:e(z,{fontSize:"small"})})})})}),n&&e(T,{color:"inherit",size:"1em"})]})};export{P as Check,d 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 S,Box as n,Typography as w,Tooltip as B,IconButton as R,CircularProgress as F}from"@material-ui/core";import T from"@material-ui/icons/Refresh";import W from"classnames";import{Link as z}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 j}from"../../hooks/checks/useCheck.esm.js";import"react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as G}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import{useExecuteCheck as L}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 q}from"../RelativeTime/RelativeTime.esm.js";const k=S(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}})),D=({className:t,href:r,name:i,children:c})=>r?e(z,{"aria-label":`select check ${i}`,to:r,className:t,children:c}):e("div",{className:t,children:c}),H=({result:t,name:r,id:i,timestamp:c,isExecutable:m=!0,selected:y=!1,href:x})=>{const s=k(),g=W(s.root,{selected:y}),{data:p}=j(i),{entity:l}=E(),h=A(l),{mutateAsync:b,isLoading:a}=L(),{data:d}=G(h,i),C=async()=>{if(!(!l||!i))try{await b({checkerId:i,entityRef:h,shouldRefreshFacts:!0})}catch{}},I=!l||!i||!m||a||!!d?.exemption||t===f.NotApplicable,N=()=>{const o="Cannot execute check";return l?i?m?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:v}=K({result:t,type:p?.type,rule:p?.rule});return e(D,{href:x,className:g,name:r,children:u(n,{display:"flex",alignItems:"center",width:"100%",children:[e(P,{className:s.checkIcon,result:t}),e(n,{ml:1,flex:1,minWidth:0,children:e(w,{variant:"body2",noWrap:!0,children:r})}),u($,{align:"center",gap:"2",children:[c&&!a?e(n,{children:e(q,{timestamp:c,showIcon:!1})}):null,!a&&e(n,{children:e(B,{title:N(),children:e("span",{children:e(R,{size:"small",color:"inherit",onClick:C,disabled:I,"aria-label":"Execute Check",children:e(T,{fontSize:"small"})})})})}),a&&e(n,{children:e(F,{color:"inherit",size:"1em"})}),v&&e(_,{})]})]})})};export{H as Check,k as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,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{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(e=>({buttonArea:{paddingLeft:e.spacing(1),paddingBottom:0,justifyContent:"flex-start"},content:{minWidth:480,maxWidth:640,marginTop:e.spacing(0),paddingLeft:e.spacing(1),paddingTop:e.spacing(0)}})),O=({entityRef:e,checkId:i,isOpen:y,setIsOpen:r})=>{const[P,m]=f(),{showAlert:s}=L(),p=g(),[n,l]=f(""),{mutateAsync:d}=J(),{mutateAsync:c}=B(),{data:t,isLoading:u}=I(e,i);T(()=>{t?.exemption&&l(t.exemption.justification)},[t?.exemption]);const v=h(async()=>{!e||!i||await d({checkId:i,entityRef:e,justification:n})&&m({id:i,entityRef:e,result:D.Exempt,details:{notes:{type:"notes",data:n,version:1}},facts:[],ruleResults:[]})},[e,i,n,d,m]),E=h(async()=>{if(!(!e||!i))try{await c({checkId:i,entityRef:e})}catch{s({severity:"error",title:"Failure",message:"Failed to delete exemption."})}},[e,i,c,s]);return a(w,{children:[u&&o("div",{children:"Loading..."}),!u&&a(W,{open:y,handleClose:()=>r(!1),title:t?.exemption?"Remove Exemption?":"Justify Exemption",fullScreen:!1,children:[o(S,{className:p.content,children:a(b,{children:[o(N,{title:t?.exemption?"Existing Justification":"Exemption Justification"}),!t?.exemption&&o(C,{variant:"caption",children:"Please explain why this exemption is necessary. Supports limited markdown."}),o(A,{disabled:!!t?.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."})]})}),a(j,{className:p.buttonArea,children:[o(x,{variant:"contained",onClick:async()=>{r(!1),t?.exemption?await E():await v()},color:"primary",disabled:!t?.exemption&&(!n||n?.length===0),children:t?.exemption?"Remove":"Submit"}),o(x,{onClick:()=>r(!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{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:s}=L(),p=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{s({severity:"error",title:"Failure",message:"Failed to delete exemption."})}},[t,i,c,s]);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:p.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:p.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 e,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{CertificationBadge as h}from"../Badges/CertificationBadge.esm.js";const o=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:a,href:p,selected:m=!1})=>{const r=o(),{entity:s}=l(),{data:n}=b(s,t);return e(g,{className:r.root,classes:{wrapper:r.wrapper},value:t,label:c(d,{children:[e(h,{badge:a,trackType:n?.track.type,className:r.badge}),i]}),component:w,to:p,selected:m})};export{x as CertificationTab,o as useStyles};
1
+ import{jsx as e,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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";import{CertificationBadge as h}from"../Badges/CertificationBadge.esm.js";const o=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:a,href:p,selected:m=!1})=>{const r=o(),{entity:s}=l(),{data:n}=b(s,t);return e(g,{className:r.root,classes:{wrapper:r.wrapper},value:t,label:c(d,{children:[e(h,{badge:a,trackType:n?.track.type,className:r.badge}),i]}),component:w,to:p,selected:m})};export{x as CertificationTab,o 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{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),[f,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:p}=U(g,!1,f),{isLoading:R,data:d}=X(g),z=b(Y),A=b($);if(R||T||!a)return i(G,{});const E=H(d,p,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)),p&&p.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(!f)},dense:!0,children:[i(k,{size:"small",checked:f}),"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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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{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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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 n}from"react/jsx-runtime";import{createContext as m,useContext as s}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 p}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";const i=m(void 0),a=()=>{const t=s(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},c=t=>{const{children:r,entityRef:o}=t,e=p(o);return n(i.Provider,{value:e,children:r})};export{c as PlaylistCertificationProvider,a as usePlaylistCertificationContext};
1
+ import{jsx as n}from"react/jsx-runtime";import{createContext as m,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"../../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";const i=m(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 n(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 t}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{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:e})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=y(),{mutateAsync:c,isLoading:i}=I();p(()=>{r(e?{...e,id:g()}:null)},[e,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"}),e&&!m?null:t(R,{onSave:f,onClose:s})},N=()=>{const[[e]]=L("template"),{isLoading:o,data:m}=F(),r=e&&m?m.find(s=>s.id===e)??null:null,c=a(P),i=a(n);return d(h,{children:[t(k,{title:"Create Check",breadcrumbs:[{label:"All Checks",href:i()},{label:"Templates",href:c()}],customActions:t(v,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),t(S,{entityName:"check template",entityId:e,showNotFound:!!e&&!o&&!r}),o&&t(x,{}),t(C,{children:!o&&(!e||r)&&t(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"../../graphql/generated/index.esm.js";import"react-use/lib/useAsync";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 t,jsxs as o,Fragment as M}from"react/jsx-runtime";import{stringifyEntityRef as h}from"@backstage/catalog-model";import{useEntity as O}from"@backstage/plugin-catalog-react";import{makeStyles as F,Box as p,Typography as m,Button as u,Tooltip as $}from"@material-ui/core";import{Alert as C}from"@material-ui/lab";import{useState as v}from"react";import{CheckerType as W,ResultState as l}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 q}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useSetManualResult as H}from"../../hooks/checks/useSetManualResult.esm.js";import{AlertPanel as K}from"../AlertPanel/AlertPanel.esm.js";import{CheckResultInputPopup as Q}from"../CertificationSidebar/CheckResultInputPopup.esm.js";import{ExemptionJustificationDialog as U}from"../CertificationSidebar/ExemptionJustificationDialog.esm.js";import{RelativeTime as V}from"../RelativeTime/RelativeTime.esm.js";import{SoundcheckMarkdownContentDeprecated as X}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{ResultStateBox as Y}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as Z}from"./skeletons/CheckDetailsSkeleton.esm.js";const c=F(e=>({root:{padding:`${e.spacing(3)}px ${e.spacing(5)}px`},title:{fontWeight:"normal",fontSize:e.typography.h5.fontSize},description:{padding:`${e.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:e.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)},exemptButton:{marginLeft:e.spacing(1)},exemptAlert:{marginBottom:e.spacing(2)}})),R=({setPopupDisplayed:e})=>{const i=c();return t(u,{className:i.exemptButton,size:"small",onClick:()=>e(!0),"aria-label":"Set Check Status Button",children:"Set Check Status"})},E=({isExempt:e,setPopupDisplayed:i})=>{const r=c();return t($,{title:e?"Remove Exemption":"Set Exempt From Check",children:t(u,{className:r.exemptButton,size:"small",color:"inherit",onClick:()=>i(!0),"aria-label":"Exempt From Check",children:e?"Remove Exemption":"Add Exemption"})})},_=({trackId:e,checkId:i})=>{const r=c(),{entity:a}=O(),{data:f,isLoading:B,isError:N}=J(a,e,i),[b,x]=v(!1),[D,d]=v(!1),{data:n,isLoading:T}=q(h(a),i??""),{data:k}=G(i),{mutateAsync:w}=H();if(N)return t(p,{padding:2,children:t(K,{severity:"error",title:"Error loading check details"})});if(B||!e||!i)return t(Z,{});if(!f)return null;const y=k?.type===W.Manual,{name:g,description:z,result:s,timestamp:S,details:A}=f,I=async(P,j)=>{if(!a||!i)return;const L=h(a);await w({checkId:i,entityRef:L,justification:j,state:P})};return o("div",{className:r.root,"data-testid":"check-details-view",children:[o("div",{className:r.topBar,children:[t(m,{variant:"h2",className:r.title,children:g}),o(p,{display:"flex",alignItems:"center",children:[S?t(V,{timestamp:S,description:"Last updated"}):null,y&&!n?.exemption&&s!==l.NotReported&&t(R,{setPopupDisplayed:d}),!T&&s!==l.NotApplicable&&t(E,{isExempt:!!n?.exemption,setPopupDisplayed:x})]})]}),t(U,{entityRef:h(a),checkId:i,isOpen:b,setIsOpen:x}),t(Q,{isOpen:D,setIsOpen:d,setCallback:I}),!n?.exemption&&s===l.Exempt&&t(C,{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."}),!!n?.exemption&&t(p,{marginBottom:2,children:t(C,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This entity has been exempted from this check."})}),y&&!n?.exemption&&s===l.NotReported?o(p,{children:[t(m,{children:"This check is manual and must have its state set by a user."}),t(p,{marginTop:1,children:t(u,{variant:"contained",color:"primary",onClick:()=>d(!0),"aria-label":"Set Check Status",size:"small",children:"Set Check Status"})})]}):o(M,{children:[t(m,{className:r.subtitle,children:"Most Recent Result:"}),t(Y,{name:g,state:s,details:A,templateRef:k?.templateRef??void 0})]}),o("div",{className:r.description,"data-testid":"soundcheck-check-details-description",children:[t(m,{variant:"h3",className:r.subtitle,children:"Description"}),t(X,{content:z})]})]})};export{_ as CheckDetails,E as ExemptDialogButton,R as SetCheckStatusButton,c as useStyles};
1
+ import{jsx as t,jsxs as o,Fragment as W}from"react/jsx-runtime";import{stringifyEntityRef as C}from"@backstage/catalog-model";import{useEntity as $}from"@backstage/plugin-catalog-react";import{makeStyles as q,Box as m,Typography as c,Button as x,Tooltip as U}from"@material-ui/core";import{Alert as R}from"@material-ui/lab";import{useState as E}from"react";import{useNavigate as G}from"react-router-dom";import{CheckerType as J,ResultState as d}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 V}from"../../hooks/checks/useCheck.esm.js";import{useCheckDetails as H}from"../../hooks/checks/useCheckDetails.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as K}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import{useSetManualResult as Q}from"../../hooks/checks/useSetManualResult.esm.js";import{useFixWithAika as X}from"../../hooks/fixWithAika/useFixWithAika.esm.js";import{AlertPanel as Y}from"../AlertPanel/AlertPanel.esm.js";import{CheckResultInputPopup as Z}from"../CertificationSidebar/CheckResultInputPopup.esm.js";import{ExemptionJustificationDialog as _}from"../CertificationSidebar/ExemptionJustificationDialog.esm.js";import{RelativeTime as tt}from"../RelativeTime/RelativeTime.esm.js";import{SoundcheckMarkdownContentDeprecated as et}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 it}from"./CheckPullRequest.esm.js";import{ResultStateBox as rt}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as ot}from"./skeletons/CheckDetailsSkeleton.esm.js";const h=q(e=>({root:{padding:`${e.spacing(3)}px ${e.spacing(5)}px`},title:{fontWeight:"normal",fontSize:e.typography.h5.fontSize},description:{padding:`${e.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:e.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)},exemptButton:{marginLeft:e.spacing(1)},exemptAlert:{marginBottom:e.spacing(2)}})),b=({setPopupDisplayed:e})=>{const i=h();return t(x,{className:i.exemptButton,size:"small",onClick:()=>e(!0),"aria-label":"Set Check Status Button",children:"Set Check Status"})},B=({isExempt:e,setPopupDisplayed:i})=>{const r=h();return t(U,{title:e?"Remove Exemption":"Set Exempt From Check",children:t(x,{className:r.exemptButton,size:"small",color:"inherit",onClick:()=>i(!0),"aria-label":"Exempt From Check",children:e?"Remove Exemption":"Add Exemption"})})},at=({trackId:e,checkId:i})=>{const r=h(),{entity:l}=$(),{data:u,isLoading:N,isError:D}=H(l,e,i),w=G(),[A,y]=E(!1),[T,f]=E(!1),k=C(l),{data:a,isLoading:I}=K(k,i??""),{data:n}=V(i),{showAikaButton:z,pullRequest:s}=X({result:u?.result,type:n?.type,rule:n?.rule,entityRef:k,checkId:n?.id}),{mutateAsync:P}=Q();if(D)return t(m,{padding:2,children:t(Y,{severity:"error",title:"Error loading check details"})});if(N||!e||!i)return t(ot,{});if(!u)return null;const g=n?.type===J.Manual,{name:S,description:M,result:p,timestamp:v,details:j}=u,F=async(L,O)=>{!l||!i||await P({checkId:i,entityRef:k,justification:O,state:L})};return o("div",{className:r.root,"data-testid":"check-details-view",children:[o("div",{className:r.topBar,children:[t(c,{variant:"h2",className:r.title,children:S}),o(m,{display:"flex",alignItems:"center",children:[v?t(tt,{timestamp:v,description:"Last updated"}):null,g&&!a?.exemption&&p!==d.NotReported&&t(b,{setPopupDisplayed:f}),!I&&p!==d.NotApplicable&&t(B,{isExempt:!!a?.exemption,setPopupDisplayed:y})]})]}),t(_,{entityRef:C(l),checkId:i,isOpen:A,setIsOpen:y}),t(Z,{isOpen:T,setIsOpen:f,setCallback:F}),!a?.exemption&&p===d.Exempt&&t(R,{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&&t(m,{marginBottom:2,children:t(R,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This entity has been exempted from this check."})}),g&&!a?.exemption&&p===d.NotReported?o(m,{children:[t(c,{children:"This check is manual and must have its state set by a user."}),t(m,{marginTop:1,children:t(x,{variant:"contained",color:"primary",onClick:()=>f(!0),"aria-label":"Set Check Status",size:"small",children:"Set Check Status"})})]}):o(W,{children:[t(c,{className:r.subtitle,children:"Most Recent Result:"}),t(rt,{name:S,state:p,details:j,templateRef:n?.templateRef??void 0}),z&&s&&t(it,{title:s.label,branch:s.provider,onView:()=>s.prUrl&&w(s.prUrl)})]}),o("div",{className:r.description,"data-testid":"soundcheck-check-details-description",children:[t(c,{variant:"h3",className:r.subtitle,children:"Description"}),t(et,{content:M})]})]})};export{at as CheckDetails,B as ExemptDialogButton,b as SetCheckStatusButton,h as useStyles};
2
2
  //# sourceMappingURL=CheckDetails.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as c,jsx as e}from"react/jsx-runtime";import{Flex as n,Card as d,CardBody as u,Text as i,Box as r,Button as h}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:a,onView:t})=>{const l=o();return c(n,{gap:"4",mt:"4",children:[e(b,{size:32,className:l.arrowIcon}),e(d,{className:l.card,children:e(u,{children:c(n,{gap:"4",direction:"column",align:"start",children:[c(n,{align:"center",gap:"2",children:[e(g,{className:l.statusIcon}),e(i,{weight:"bold",children:"Pull Request created by Aika"})]}),c(r,{children:[e(r,{children:e(i,{color:"secondary",children:"Title"})}),e(r,{children:e(i,{children:s})})]}),c(r,{children:[e(r,{children:e(i,{color:"secondary",children:"Branch"})}),e(r,{children:e(i,{children:a})})]}),e(h,{className:l.button,onClick:t,children:"View Pull Request"})]})})})]})};export{f as CheckPullRequest,o as useStyles};
2
+ //# sourceMappingURL=CheckPullRequest.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as m,jsx as e,Fragment as D}from"react/jsx-runtime";import{makeStyles as w,Tooltip as z,Box as n,IconButton as B,CircularProgress as F}from"@material-ui/core";import I from"@material-ui/icons/Refresh";import{useState as r,useCallback as S}from"react";import{useExecuteCheck as j}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as v}from"../CheckIcon/CheckIcon.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as A}from"./CheckDryRunDialogButton.esm.js";import"./CheckDryRunDetails.esm.js";import"./CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";const E=w(()=>({root:{display:"flex",alignItems:"center"},buttonWrapper:{height:24}})),N=({entityRef:s,check:l,refreshFact:c=!1})=>{const{mutateAsync:o}=j(),[i,f]=r(),[p,d]=r(null),[a,u]=r(!1),[y,R]=r(),[k,b]=r(),[g,x]=r(),h=E(),C=S(async()=>{if(a)return;u(!0);const t=await o({entityRef:s,checker:l,dryRun:!0,shouldRefreshFacts:c}).catch(T=>{});t?.details&&d(t.details),t?.facts&&R(t.facts),t?.ruleResults&&b(t.ruleResults),t?.applicabilityResults&&x(t.applicabilityResults),f(t?.result),u(!1)},[l,s,o,a,c]);return m("div",{className:h.root,children:[i&&e("span",{className:h.buttonWrapper,"aria-label":"check result",children:e(v,{result:i})}),e(z,{arrow:!0,placement:"top",title:e(n,{children:a?m(D,{children:[e(n,{children:"Executing dry run..."}),e(n,{children:c?"Refreshing facts for dry run can take a significant amount of time.":"Dry run can take additional time if facts are not cached."})]}):`Dry runs will ${c?"refresh facts":"use cached facts if available"}.`}),children:e("span",{children:e(B,{size:"small",color:"inherit",onClick:C,disabled:a,"aria-label":"refresh",children:a?e(F,{size:16}):e(I,{fontSize:"small"})})})}),i&&e(A,{entityRef:s,check:l,checkResult:{checkResult:i,details:p},facts:y,ruleResults:k,applicabilityResults:g})]})};export{N as CheckDryRun};
1
+ import{jsxs as m,jsx as e,Fragment as D}from"react/jsx-runtime";import{makeStyles as S,Tooltip as w,Box as n,IconButton as z,CircularProgress as B}from"@material-ui/core";import F from"@material-ui/icons/Refresh";import{useState as r,useCallback as I}from"react";import{useExecuteCheck as j}from"../../hooks/checks/useExecuteCheck.esm.js";import{CheckIcon as v}from"../CheckIcon/CheckIcon.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as A}from"./CheckDryRunDialogButton.esm.js";import"./CheckDryRunDetails.esm.js";import"./CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";const E=S(()=>({root:{display:"flex",alignItems:"center"},buttonWrapper:{height:24}})),N=({entityRef:s,check:l,refreshFact:c=!1})=>{const{mutateAsync:o}=j(),[i,f]=r(),[p,d]=r(null),[a,u]=r(!1),[y,R]=r(),[k,b]=r(),[g,x]=r(),h=E(),C=I(async()=>{if(a)return;u(!0);const t=await o({entityRef:s,checker:l,dryRun:!0,shouldRefreshFacts:c}).catch(W=>{});t?.details&&d(t.details),t?.facts&&R(t.facts),t?.ruleResults&&b(t.ruleResults),t?.applicabilityResults&&x(t.applicabilityResults),f(t?.result),u(!1)},[l,s,o,a,c]);return m("div",{className:h.root,children:[i&&e("span",{className:h.buttonWrapper,"aria-label":"check result",children:e(v,{result:i})}),e(w,{arrow:!0,placement:"top",title:e(n,{children:a?m(D,{children:[e(n,{children:"Executing dry run..."}),e(n,{children:c?"Refreshing facts for dry run can take a significant amount of time.":"Dry run can take additional time if facts are not cached."})]}):`Dry runs will ${c?"refresh facts":"use cached facts if available"}.`}),children:e("span",{children:e(z,{size:"small",color:"inherit",onClick:C,disabled:a,"aria-label":"refresh",children:a?e(B,{size:16}):e(F,{fontSize:"small"})})})}),i&&e(A,{entityRef:s,check:l,checkResult:{checkResult:i,details:p},facts:y,ruleResults:k,applicabilityResults:g})]})};export{N as CheckDryRun};
2
2
  //# sourceMappingURL=CheckDryRun.esm.js.map