@spotify/backstage-plugin-soundcheck 0.14.5 → 0.15.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 (94) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/alpha.d.ts +17 -17
  3. package/dist/api.esm.js +1 -1
  4. package/dist/components/Badges/LevelBadge.esm.js +1 -1
  5. package/dist/components/Badges/StatusBadge.esm.js +2 -0
  6. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  7. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
  8. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
  9. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +1 -1
  10. package/dist/components/CampaignInsightsPage/DaysRemainingTile.esm.js +1 -1
  11. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  12. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  13. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  14. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  15. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  16. package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
  17. package/dist/components/CertificationSidebar/StatusDetails.esm.js +2 -0
  18. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  19. package/dist/components/CertificationsPage/Playlist/PlaylistProgress.esm.js +1 -1
  20. package/dist/components/Charts/LineChart/LineChartPlaceholder.esm.js +1 -1
  21. package/dist/components/CheckCard/CheckCard.esm.js +1 -1
  22. package/dist/components/CheckCard/CheckHistoryChart.esm.js +1 -1
  23. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  24. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +1 -1
  25. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +1 -1
  26. package/dist/components/CheckPage/CheckEditPage.esm.js +2 -0
  27. package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
  28. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +2 -0
  29. package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +2 -0
  30. package/dist/components/CollectorPage/Configurators/BigQuery/css/prism-dark-sql.css.esm.js +260 -0
  31. package/dist/components/CollectorPage/Configurators/BigQuery/utils.esm.js +2 -0
  32. package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +2 -0
  33. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  34. package/dist/components/CollectorPage/Configurators/Common/CollectorSchedulingOptions.esm.js +1 -1
  35. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  36. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  37. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  38. package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
  39. package/dist/components/CollectorPage/Configurators/Gitlab/utils.esm.js +1 -1
  40. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  41. package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +1 -1
  42. package/dist/components/CollectorPage/Configurators/SCM/ExistsFactDetailsComponent.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/SCM/FactDetailsComponent.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +1 -1
  45. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  47. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
  48. package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
  49. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
  50. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  51. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  52. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  53. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  54. package/dist/components/Filter/FilterPreviewTable/EntityTableColumns.esm.js +1 -1
  55. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  56. package/dist/components/Filter/types.esm.js +1 -1
  57. package/dist/components/Filter/utils.esm.js +1 -1
  58. package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +2 -0
  59. package/dist/components/FormFilterSection/FormFilterSection.esm.js +1 -1
  60. package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
  61. package/dist/components/Frequency/util.esm.js +1 -1
  62. package/dist/components/LevelCard/LevelCard.esm.js +1 -1
  63. package/dist/components/LevelCard/LevelTooltip.esm.js +1 -1
  64. package/dist/components/OverviewTable/Cell/TrackBadgeCell.esm.js +2 -0
  65. package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
  66. package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
  67. package/dist/components/OverviewTable/resultsTableUtils.esm.js +1 -1
  68. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
  69. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  70. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  71. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  72. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  73. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  74. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +2 -0
  75. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js +1 -1
  76. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  77. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  78. package/dist/components/TrackPage/TrackLevelsChart.esm.js +1 -1
  79. package/dist/graphql/generated/index.esm.js +141 -109
  80. package/dist/hooks/aggregations/useCheckStatusHistories.esm.js +2 -0
  81. package/dist/hooks/aggregations/useCheckStatuses.esm.js +2 -0
  82. package/dist/hooks/graphqlKeys.esm.js +1 -1
  83. package/dist/images/bigquery-rgb.svg +15 -0
  84. package/dist/images/bigquery-white.svg +15 -0
  85. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +2 -0
  86. package/package.json +25 -22
  87. package/dist/components/CheckPage/CheckDetailsView.esm.js +0 -2
  88. package/dist/components/CheckPage/CheckPage.esm.js +0 -2
  89. package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +0 -2
  90. package/dist/components/Filter/FilterPreviewTable/EntityKindsFilter.esm.js +0 -2
  91. package/dist/components/Filter/FilterPreviewTable/EntitySystemsFilter.esm.js +0 -2
  92. package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +0 -2
  93. package/dist/components/Filter/FilterPreviewTable/EntityTagFilter.esm.js +0 -2
  94. package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.15.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Enables filtering by system, type, lifecycle, and owner on the Check Insights page.
8
+
9
+ ## 0.15.0
10
+
11
+ ### Minor Changes
12
+
13
+ - Updated Check, Track, Campaign, and Integration forms to save filters in the new catalog filter format. This will be backwards compatible with existing items. Updated items will be saved with this new format. Please include latest versions of soundcheck-backend and soundcheck-common to have the latest schemas.
14
+
15
+ This also converts the filter `spec.owner` to `relations.ownedBy`. When updating an existing item that has `spec.owner` filter, the form will automatically convert this to a group entityRef, as the `relations.ownedBy` filter requires an entityRef not an entity name. This will not break existing items that use the `spec.owner` filter.
16
+
17
+ ### Patch Changes
18
+
19
+ - Fixes code block in descriptions overflowing summary card content.
20
+ - Add better display when there is no data or there are no applicable entities on the track and campaign insights pages.
21
+ - Align SCM Integration UI with rest of Integration UI styles.
22
+ - Adjust entity preview table to work with exclude filters.
23
+ - Aligning check state icons across Soundcheck.
24
+ - Adjust check, track and campaign edit page permissions.
25
+ - Added possibility to configure track badges that display check status and check pass percentage:
26
+
27
+ ```yaml
28
+ badge:
29
+ type: 'status'
30
+ ```
31
+
32
+ - Added regex `flags` configuration option to SCM Integration No-Code UI.
33
+ - Default values from yaml for SCM, Github, GitLab and Kubernetes integrations now propagate to new entries in the UI.
34
+ - Add Initial Delay to integration UI config. Previously this was a YAML only config option.
35
+ - Update to Backstage `v1.35.0`
36
+ - Updated dependencies
37
+ - @spotify/backstage-plugin-core@0.8.5
38
+ - @spotify/backstage-plugin-soundcheck-common@0.15.0
39
+
3
40
  ## 0.14.5
4
41
 
5
42
  ### Patch Changes
package/dist/alpha.d.ts CHANGED
@@ -21,6 +21,23 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
21
21
  factory: _backstage_core_plugin_api_index.AnyApiFactory;
22
22
  };
23
23
  }>;
24
+ "nav-item:soundcheck": _backstage_frontend_plugin_api.ExtensionDefinition<{
25
+ kind: "nav-item";
26
+ name: undefined;
27
+ config: {};
28
+ configInput: {};
29
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
30
+ title: string;
31
+ icon: _backstage_core_plugin_api_index.IconComponent;
32
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
33
+ }, "core.nav-item.target", {}>;
34
+ inputs: {};
35
+ params: {
36
+ title: string;
37
+ icon: _backstage_core_plugin_api_index.IconComponent;
38
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
39
+ };
40
+ }>;
24
41
  "entity-content:soundcheck/entity": _backstage_frontend_plugin_api.ExtensionDefinition<{
25
42
  kind: "entity-content";
26
43
  name: "entity";
@@ -50,23 +67,6 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
50
67
  filter?: string | ((entity: _backstage_catalog_model_index.Entity) => boolean) | undefined;
51
68
  };
52
69
  }>;
53
- "nav-item:soundcheck": _backstage_frontend_plugin_api.ExtensionDefinition<{
54
- kind: "nav-item";
55
- name: undefined;
56
- config: {};
57
- configInput: {};
58
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
59
- title: string;
60
- icon: _backstage_core_plugin_api_index.IconComponent;
61
- routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
62
- }, "core.nav-item.target", {}>;
63
- inputs: {};
64
- params: {
65
- title: string;
66
- icon: _backstage_core_plugin_api_index.IconComponent;
67
- routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
68
- };
69
- }>;
70
70
  "entity-card:soundcheck/card": _backstage_frontend_plugin_api.ExtensionDefinition<{
71
71
  kind: "entity-card";
72
72
  name: "card";
package/dist/api.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as h}from"graphql-request";import{getSdk as u}from"./graphql/generated/index.esm.js";const o=c({id:"plugin.soundcheck"}),g=r=>"response"in r&&"errors"in r.response,y=r=>"response"in r&&"message"in r.response;class l{#a;#s;#t;constructor(t){this.#a=t.fetchApi,this.#s=t.discoveryApi;const e=new h("/graphql",{fetch:async(a,s)=>{const n=`${await this.#s.getBaseUrl("soundcheck")}${a}`;return this.#a.fetch(n,s)}});this.#t=u(e)}#r=t=>g(t)?t.response?.errors?.[0].message??`${t}`:y(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 getAllCertifications(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getAllCertifications({entityRef:t});return e})}async getCertificationDetails(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getCertificationDetails({entityRef:t});return e})}async getCertificationDetailsForTrack(t,e){return this.#e(async()=>{const{programCertification:a}=await this.#t.getCertificationDetailsForTrack({entityRef:t,programId:e});return a})}async getCheckResultDetails(t,e,a){return this.#e(async()=>{const{checkResult:s}=await this.#t.getCheckResultDetails({entityRef:t,programId:e,checkId:a});return s})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getProgramOverviewForOwner(t,e,a,s,n){return this.#e(async()=>{const{programOverviewForOwner:i}=await this.#t.getProgramOverviewForOwner({ownerEntityRef:t,facet:e,first:a,after:s,entitySearch:n});return i})}async getTracks(t){return this.#e(async()=>{const{programs:e}=await this.#t.getTracks({filter:t});return e})}async createProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.createProgram({input:t});return e})}async updateProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.updateProgram({input:t});return e})}async deleteProgram(t){return this.#e(async()=>{const{programDeleted:e}=await this.#t.deleteProgram({programId:t});return e})}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 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 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 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 getEntityRefsForTechHealthFilter(t){return this.#e(async()=>await this.#t.getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t){return this.#e(async()=>{const{campaigns:e}=await this.#t.getCampaigns({filter:t});return e})}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 archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignProgress(t,e,a){return this.#e(async()=>{const{campaignProgress:s}=await this.#t.getCampaignProgress({id:t,first:e,after:a});return s})}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 getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}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 getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}}export{l as SoundcheckApi,o as soundcheckApiRef};
1
+ import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as h}from"graphql-request";import{getSdk as u}from"./graphql/generated/index.esm.js";const o=c({id:"plugin.soundcheck"}),g=r=>"response"in r&&"errors"in r.response,y=r=>"response"in r&&"message"in r.response;class l{#s;#a;#t;constructor(t){this.#s=t.fetchApi,this.#a=t.discoveryApi;const e=new h("/graphql",{fetch:async(s,a)=>{const n=`${await this.#a.getBaseUrl("soundcheck")}${s}`;return this.#s.fetch(n,a)}});this.#t=u(e)}#r=t=>g(t)?t.response?.errors?.[0].message??`${t}`:y(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 getAllCertifications(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getAllCertifications({entityRef:t});return e})}async getCertificationDetails(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getCertificationDetails({entityRef:t});return e})}async getCertificationDetailsForTrack(t,e){return this.#e(async()=>{const{programCertification:s}=await this.#t.getCertificationDetailsForTrack({entityRef:t,programId:e});return s})}async getCheckResultDetails(t,e,s){return this.#e(async()=>{const{checkResult:a}=await this.#t.getCheckResultDetails({entityRef:t,programId:e,checkId:s});return a})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getProgramOverviewForOwner(t,e,s,a,n){return this.#e(async()=>{const{programOverviewForOwner:i}=await this.#t.getProgramOverviewForOwner({ownerEntityRef:t,facet:e,first:s,after:a,entitySearch:n});return i})}async getTracks(t){return this.#e(async()=>{const{programs:e}=await this.#t.getTracks({filter:t});return e})}async createProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.createProgram({input:t});return e})}async updateProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.updateProgram({input:t});return e})}async deleteProgram(t){return this.#e(async()=>{const{programDeleted:e}=await this.#t.deleteProgram({programId:t});return e})}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 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 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:s}=await this.#t.getFactSchemas({collectorId:t,factName:e});return s})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}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 getEntityRefsForTechHealthFilter(t){return this.#e(async()=>await this.#t.getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t){return this.#e(async()=>{const{campaigns:e}=await this.#t.getCampaigns({filter:t});return e})}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 archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignProgress(t,e,s){return this.#e(async()=>{const{campaignProgress:a}=await this.#t.getCampaignProgress({id:t,first:e,after:s});return a})}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 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 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 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 getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}}export{l as SoundcheckApi,o as soundcheckApiRef};
2
2
  //# sourceMappingURL=api.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as a,alpha as l}from"@material-ui/core";import p from"classnames";import i from"react";import{BaseBadge as s}from"./BaseBadge.esm.js";const m=a(t=>({root:{background:({color:e})=>e,color:({color:e})=>e?t.palette.getContrastText(e):t.palette.text.primary,border:({size:e})=>t.palette.type==="dark"?void 0:`${e==="small"?"1px":"2px"} solid ${l(t.palette.text.primary,.8)}`,"&::after":{position:"absolute",display:"block",content:'""',top:0,left:0,width:"100%",height:"100%",borderRadius:"50%",boxShadow:["inset 0 -0.10em 0 0 rgba(0, 0, 0, 0.15)","inset 0px 0.10em 0px 0px rgba(255, 255, 255, 0.4)","inset 0px 0.9em 0px -0.4em rgba(255, 255, 255, 0.1)"].join(",")}},borderTheme:{borderColor:t.palette.text.primary,borderStyle:"solid",color:t.palette.text.primary}})),d=({className:t,badge:e,size:o="small"})=>{const r=m({color:e.options.color,size:o});return i.createElement(s,{className:p(t,e.options.color?r.root:r.borderTheme),size:o,label:`L${e.options.level}`})};export{d as LevelBadge};
1
+ import{makeStyles as i,alpha as p}from"@material-ui/core";import m from"classnames";import r from"react";import{BadgeVariant as s}from"../../graphql/generated/index.esm.js";import{BaseBadge as n}from"./BaseBadge.esm.js";import{StatusBadge as c}from"./StatusBadge.esm.js";const d=i(t=>({root:{background:({color:e})=>e,color:({color:e})=>e?t.palette.getContrastText(e):t.palette.text.primary,border:({size:e})=>t.palette.type==="dark"?void 0:`${e==="small"?"1px":"2px"} solid ${p(t.palette.text.primary,.8)}`,"&::after":{position:"absolute",display:"block",content:'""',top:0,left:0,width:"100%",height:"100%",borderRadius:"50%",boxShadow:["inset 0 -0.10em 0 0 rgba(0, 0, 0, 0.15)","inset 0px 0.10em 0px 0px rgba(255, 255, 255, 0.4)","inset 0px 0.9em 0px -0.4em rgba(255, 255, 255, 0.1)"].join(",")}},borderTheme:{borderColor:t.palette.text.primary,borderStyle:"solid",color:t.palette.text.primary}})),b=({className:t,badge:e,size:a="small"})=>{const l=d({color:"color"in e.options?e.options.color:void 0,size:a});if(e.variant===s.Status){const o=e.options;return r.createElement(c,{className:t,size:a,status:o.status})}if(e.variant===s.Medal){const o=e.options;return r.createElement(n,{className:m(t,o.color?l.root:l.borderTheme),size:a,label:`L${o.level}`})}return r.createElement(r.Fragment,null)};export{b as LevelBadge};
2
2
  //# sourceMappingURL=LevelBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as g,useTheme as k,Box as C,Tooltip as E}from"@material-ui/core";import b from"@material-ui/icons/Check";import y from"@material-ui/icons/Close";import N from"@material-ui/icons/PriorityHigh";import v from"@mui/icons-material/QuestionMark";import z from"classnames";import e from"react";import{CircularProgressbarWithChildren as m,buildStyles as c}from"react-circular-progressbar";import"react-circular-progressbar/dist/styles.css";const u=24,W=15,d=i=>i==="small"?1:2,w=g(i=>({root:{position:"relative",display:"inline-block",alignItems:"center",justifyContent:"center",cursor:"default",lineHeight:0,width:({size:t})=>`${u*d(t)}px`,height:({size:t})=>`${u*d(t)}px`},icon:{color:i.palette.background.default,fontSize:({size:t})=>W*d(t)}})),x=({className:i,status:t,size:h="small"})=>{const s=w({size:h}),n=k();if(!t)return e.createElement(e.Fragment,null);const a=t.passed+t.failed+t.warning+t.error+t.notReported,r=a?t.passed/a*100:0,o=a?t.warning/a*100:0,l=a?(t.failed+t.error)/a*100:0,p=100-r-o-l,f=e.createElement(C,{className:z(i,s.root),role:"img","aria-label":`${r} badge`},e.createElement(m,{value:r,strokeWidth:r<100?15:50,styles:c({pathColor:n.palette.success.main,trailColor:"transparent",strokeLinecap:"butt",rotation:0})},r===100&&e.createElement(b,{className:s.icon}),r<100&&e.createElement(m,{value:o,strokeWidth:o<100?15:50,styles:c({pathColor:n.palette.warning.main,trailColor:"transparent",strokeLinecap:"butt",rotation:r/100})},o===100&&e.createElement(N,{className:s.icon}),o<100&&e.createElement(m,{value:l,strokeWidth:l<100?15:50,styles:c({pathColor:n.palette.error.main,trailColor:"transparent",strokeLinecap:"butt",rotation:(r+o)/100})},l===100&&e.createElement(y,{className:s.icon}),l<100&&e.createElement(m,{value:p,strokeWidth:p<100?15:50,styles:c({pathColor:n.palette.divider,trailColor:"transparent",strokeLinecap:"butt",rotation:(r+o+l)/100})},p===100&&e.createElement(v,{className:s.icon}))))));return e.createElement(E,{title:`${t.passed}/${a} checks passed (${Math.round(r)}%)`},f)};export{x as StatusBadge};
2
+ //# sourceMappingURL=StatusBadge.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Content as k}from"@backstage/core-components";import{Typography as y}from"@material-ui/core";import e from"react";import{Controller as v}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as F}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import L from"../../hooks/useFeatureFlag.esm.js";import{formStyles as M}from"../../utils/formStyles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{emptyFilters as A}from"../Filter/types.esm.js";import{FilterComponent as D}from"../Filter/FilterComponent.esm.js";import{FormStepper as N}from"../FormStepper/FormStepper.esm.js";import{useCampaignForm as O}from"./hooks/useCampaignForm.esm.js";import{CampaignDetailsStep as x}from"./Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js";import{CampaignTrackStep as T}from"./Steps/CampaignTrackStep.esm.js";import{CampaignMilestonesStep as I}from"./Steps/CampaignMilestonesStep.esm.js";import{StepNameMapping as R}from"./types/CampaignFormTypes.esm.js";import{CAMPAIGN_FIELDS as V}from"./utils/campaignFormUtils.esm.js";var d=(t=>(t.Details="Enter campaign details",t.Checks="Add checks",t.Entities="Choose the affected entities (Optional)",t.Milestones="Set campaign milestones",t))(d||{});const B=({onSave:t,onCancel:g,selectedCampaign:i})=>{const n=M(),{isLoading:o,isReadOnly:f}=F(),{control:r,handleSubmit:m,errors:a,trigger:C,getValues:S,onSubmit:s,checkChips:h,checksLoading:b}=O(t,i),l=S(),u=l.detailsStep.startDate;L("debugMode")&&console.log(l);const p=[{label:"Enter campaign details",content:()=>e.createElement(x,{control:r,isLoading:o,disabled:!1,errors:a.detailsStep,startDate:u})},{label:"Add checks",content:()=>e.createElement(T,{control:r,isLoading:o||b,disabled:!1,errors:a.tracksStep,checkChips:h})},{label:"Choose the affected entities (Optional)",content:()=>e.createElement("div",{className:n.filters},e.createElement(y,{variant:"body2"},V.filter.description),e.createElement(v,{name:"filtersStep",control:r,render:({field:c})=>e.createElement(D,{value:c.value??A(),onChange:c.onChange})}))},{label:"Set campaign milestones",content:()=>e.createElement(I,{control:r,isLoading:o,disabled:!1,errors:a.milestonesStep})}],E=i?[...Array(p.length).keys()]:[0];return e.createElement(e.Fragment,null,e.createElement(k,{className:n.formWrapper},e.createElement("form",{onSubmit:m(s)},e.createElement(N,{onClose:g,handleSubmit:m,trigger:C,onSubmit:s,initialVisited:E,stepNameMap:R,steps:p,isLoading:o,isReadOnly:f,saveButtonText:"Save Campaign"}))))};export{B as CampaignForm,d as CampaignStepLabel};
1
+ import{Content as k}from"@backstage/core-components";import{Typography as y}from"@material-ui/core";import e from"react";import{Controller as v}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as F}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import L from"../../hooks/useFeatureFlag.esm.js";import{formStyles as M}from"../../utils/formStyles.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import{emptyFilters as A}from"../Filter/types.esm.js";import{FilterComponent as D}from"../Filter/FilterComponent.esm.js";import{FormStepper as N}from"../FormStepper/FormStepper.esm.js";import{useCampaignForm as O}from"./hooks/useCampaignForm.esm.js";import{CampaignDetailsStep as x}from"./Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js";import{CampaignTrackStep as T}from"./Steps/CampaignTrackStep.esm.js";import{CampaignMilestonesStep as I}from"./Steps/CampaignMilestonesStep.esm.js";import{StepNameMapping as R}from"./types/CampaignFormTypes.esm.js";import{CAMPAIGN_FIELDS as V}from"./utils/campaignFormUtils.esm.js";var d=(t=>(t.Details="Enter campaign details",t.Checks="Add checks",t.Entities="Choose the affected entities (Optional)",t.Milestones="Set campaign milestones",t))(d||{});const B=({onSave:t,onCancel:g,selectedCampaign:i})=>{const n=M(),{isLoading:o,isReadOnly:f}=F(),{control:r,handleSubmit:m,errors:a,trigger:C,getValues:S,onSubmit:s,checkChips:h,checksLoading:b}=O(t,i),l=S(),u=l.detailsStep.startDate;L("debugMode")&&console.log(l);const p=[{label:"Enter campaign details",content:()=>e.createElement(x,{control:r,isLoading:o,disabled:!1,errors:a.detailsStep,startDate:u})},{label:"Add checks",content:()=>e.createElement(T,{control:r,isLoading:o||b,disabled:!1,errors:a.tracksStep,checkChips:h})},{label:"Choose the affected entities (Optional)",content:()=>e.createElement("div",{className:n.filters},e.createElement(y,{variant:"body2"},V.filter.description),e.createElement(v,{name:"filtersStep",control:r,render:({field:c})=>e.createElement(D,{value:c.value??A(),onChange:c.onChange})}))},{label:"Set campaign milestones",content:()=>e.createElement(I,{control:r,isLoading:o,disabled:!1,errors:a.milestonesStep})}],E=i?[...Array(p.length).keys()]:[0];return e.createElement(e.Fragment,null,e.createElement(k,{className:n.formWrapper},e.createElement("form",{onSubmit:m(s)},e.createElement(N,{onClose:g,handleSubmit:m,trigger:C,onSubmit:s,initialVisited:E,stepNameMap:R,steps:p,isLoading:o,isReadOnly:f,saveButtonText:"Save Campaign"}))))};export{B as CampaignForm,d as CampaignStepLabel};
2
2
  //# sourceMappingURL=CampaignForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as z,Content as F}from"@backstage/core-components";import{useRouteRef as G}from"@backstage/core-plugin-api";import{EntityRefLink as O}from"@backstage/plugin-catalog-react";import{usePermission as w}from"@backstage/plugin-permission-react";import{makeStyles as H,Button as U,Paper as V,Grid as i,Typography as N,Box as W}from"@material-ui/core";import{soundcheckCampaignReadPermission as $,soundcheckCampaignUpdatePermission as j}from"@spotify/backstage-plugin-soundcheck-common";import{DateTime as R}from"luxon";import t,{useMemo as l}from"react";import{useParams as q,useNavigate as A}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as J}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchParam as p}from"../../hooks/useSearchParam.esm.js";import{campaignEditRouteRef as K}from"../../routes.esm.js";import{CheckCard as Q}from"../CheckCard/CheckCard.esm.js";import{LoadingIndicator as X}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as Y}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Z}from"../SoundcheckHeader/useHeader.esm.js";import{FilterBar as _}from"../TrackPage/FilterBar/FilterBar.esm.js";import{toFilter as ee}from"../TrackPage/FilterBar/util.esm.js";import{TrackEntitiesTable as te}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{CampaignStatusHistoryTile as ae}from"./CampaignStatusHistoryTile.esm.js";import{CampaignStatusTile as re}from"./CampaignStatusTile.esm.js";import{DaysRemainingTile as ne}from"./DaysRemainingTile.esm.js";const ie=H(e=>({root:{height:"100%",background:e.palette.background.default},header:{backgroundColor:e.palette.background.paper,borderRadius:0,marginBottom:e.spacing(2),paddingLeft:e.spacing(1),borderLeft:"none",borderRight:"none"},progressContainer:{display:"flex",marginBottom:e.spacing(3)},trackContainerContent:{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),backgroundColor:e.palette.background.paper},editButton:{marginLeft:"auto"},checksContainer:{},entitiesContainer:{marginTop:e.spacing(3)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},content:{paddingTop:0},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},sectionTitle:{paddingBottom:e.spacing(1)}})),oe=()=>{const e=ie(),[o,b]=p("owners"),[s,T]=p("lifecycles"),[m,v]=p("types"),[c,x]=p("systems"),d=l(()=>ee({lifecycles:s,owners:o,types:m,systems:c}),[s,o,m,c]),{campaignId:n}=q(),{data:B,isLoading:g}=J({ids:[n],first:1}),r=B?.edges?.[0]?.node,a=r?.track,f=a?.levels?.[0],{loading:L,allowed:S}=w({permission:$,resourceRef:n}),{loading:u,allowed:y}=w({permission:j,resourceRef:n}),E=r?R.fromISO(r.startDate):void 0,D=E?Math.max(Math.ceil(R.now().diff(E,"days").days),1):void 0,h=A(),k=G(K),P=l(()=>a?.ownerEntityRef?t.createElement(O,{color:"inherit",entityRef:a.ownerEntityRef,className:e.ownerLink}):null,[a?.ownerEntityRef,e.ownerLink]),I=l(()=>!u&&y&&a?.isEditable?t.createElement(U,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{h(k({campaignId:n}))}},"Edit Campaign"):null,[y,e.editButton,k,u,h,a,n]),M=l(()=>a?.description?t.createElement(z,{className:e.headerDescription,content:a.description}):null,[e.headerDescription,a?.description]);return Z({title:a?.name,description:M,customSubtitle:P,sectionRight:I}),t.createElement("div",null,t.createElement(Y,{entityName:"track",entityId:n,showNotFound:!g&&!r,showCannotView:!L&&!S}),g&&t.createElement(X,null),a&&t.createElement("div",{className:e.root},t.createElement(V,{elevation:1,className:e.header},t.createElement(_,{track:a,owners:o,setOwners:b,lifecycles:s,setLifecycles:T,types:m,setTypes:v,systems:c,setSystems:x})),t.createElement(F,{className:e.content},t.createElement("div",{className:e.progressContainer},t.createElement(i,{container:!0,spacing:2},t.createElement(i,{item:!0,xs:2},t.createElement(ne,{campaign:r})),t.createElement(i,{item:!0,xs:4},t.createElement(re,{campaign:r,filter:d})),t.createElement(i,{item:!0,xs:6},t.createElement(ae,{campaign:r,filter:d})))),t.createElement("div",{className:e.checksContainer},t.createElement(N,{variant:"h3",className:e.sectionTitle},"Checks"),f&&t.createElement(W,{className:e.content},t.createElement(i,{container:!0,spacing:1},f.checks.map(C=>t.createElement(i,{item:!0,xs:12,sm:6,md:4,key:C.id},t.createElement(Q,{track:a,check:C,filter:d,numberOfDays:D}))))),a&&t.createElement("div",{className:e.entitiesContainer},t.createElement(N,{variant:"h3",className:e.sectionTitle},"Entities"),t.createElement(te,{track:a,initialPageSize:10,lifecycles:s,owners:o,types:m,systems:c}))))))};export{oe as CampaignInsightsPage};
1
+ import{MarkdownContent as U,Content as N}from"@backstage/core-components";import{useRouteRef as A}from"@backstage/core-plugin-api";import{EntityRefLink as V}from"@backstage/plugin-catalog-react";import{usePermission as R}from"@backstage/plugin-permission-react";import{makeStyles as W,Button as $,Paper as j,Grid as o,Typography as b,Box as q}from"@material-ui/core";import{soundcheckCampaignReadPermission as J,soundcheckCampaignUpdatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import{DateTime as S}from"luxon";import t,{useMemo as d}from"react";import{useParams as Q,useNavigate as X}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as Y}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatuses as Z}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useCheckStatusHistories as _}from"../../hooks/aggregations/useCheckStatusHistories.esm.js";import{useSearchParam as g}from"../../hooks/useSearchParam.esm.js";import{campaignEditRouteRef as ee}from"../../routes.esm.js";import{CheckCard as te}from"../CheckCard/CheckCard.esm.js";import{LoadingIndicator as ae}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as ie}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as re}from"../SoundcheckHeader/useHeader.esm.js";import{FilterBar as ne}from"../TrackPage/FilterBar/FilterBar.esm.js";import{toFilter as oe}from"../TrackPage/FilterBar/util.esm.js";import{TrackEntitiesTable as se}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{CampaignStatusHistoryTile as me}from"./CampaignStatusHistoryTile.esm.js";import{CampaignStatusTile as ce}from"./CampaignStatusTile.esm.js";import{DaysRemainingTile as le}from"./DaysRemainingTile.esm.js";const pe=W(e=>({root:{height:"100%",background:e.palette.background.default},header:{backgroundColor:e.palette.background.paper,borderRadius:0,marginBottom:e.spacing(2),paddingLeft:e.spacing(1),borderLeft:"none",borderRight:"none"},progressContainer:{display:"flex",marginBottom:e.spacing(3)},campaignContainerContent:{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),backgroundColor:e.palette.background.paper},editButton:{marginLeft:"auto"},checksContainer:{},entitiesContainer:{marginTop:e.spacing(3)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},content:{paddingTop:0},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},sectionTitle:{paddingBottom:e.spacing(1)}})),de=()=>{const e=pe(),[s,T]=g("owners"),[m,x]=g("lifecycles"),[c,I]=g("types"),[l,L]=g("systems"),p=d(()=>oe({lifecycles:m,owners:s,types:c,systems:l}),[m,s,c,l]),{campaignId:n}=Q(),{data:B,isLoading:u}=Y({ids:[n],first:1}),r=B?.edges?.[0]?.node,a=r?.track,y=a?.levels?.[0],{loading:D,allowed:P}=R({permission:J,resourceRef:n}),{loading:h,allowed:E}=R({permission:K,resourceRef:n}),k=r?S.fromISO(r.startDate):void 0,M=k?Math.max(Math.ceil(S.now().diff(k,"days").days),1):void 0,C=Array.from(new Set(a?.levels.flatMap(i=>i.checks).map(i=>i.id)??[])),{data:z}=Z({trackId:a?.id,checkIds:C,filter:p},!!a),{data:F}=_({trackId:a?.id,checkIds:C,numberOfDays:M??30,filter:p},!!a),w=X(),v=A(ee),H=d(()=>a?.ownerEntityRef?t.createElement(V,{color:"inherit",entityRef:a.ownerEntityRef,className:e.ownerLink}):null,[a?.ownerEntityRef,e.ownerLink]),O=d(()=>!h&&E&&a?.isEditable?t.createElement($,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{w(v({campaignId:n}))}},"Edit Campaign"):null,[E,e.editButton,v,h,w,a,n]),G=d(()=>a?.description?t.createElement(U,{className:e.headerDescription,content:a.description}):null,[e.headerDescription,a?.description]);return re({title:a?.name,description:G,customSubtitle:H,sectionRight:O}),t.createElement("div",null,t.createElement(ie,{entityName:"track",entityId:n,showNotFound:!u&&!r,showCannotView:!D&&!P}),u&&t.createElement(ae,null),a&&t.createElement("div",{className:e.root},t.createElement(j,{elevation:1,className:e.header},t.createElement(N,{className:e.campaignContainerContent},t.createElement(ne,{track:a,owners:s,setOwners:T,lifecycles:m,setLifecycles:x,types:c,setTypes:I,systems:l,setSystems:L}))),t.createElement(N,{className:e.content},t.createElement("div",{className:e.progressContainer},t.createElement(o,{container:!0,spacing:2},t.createElement(o,{item:!0,xs:2},t.createElement(le,{campaign:r})),t.createElement(o,{item:!0,xs:4},t.createElement(ce,{campaign:r,filter:p})),t.createElement(o,{item:!0,xs:6},t.createElement(me,{campaign:r,filter:p})))),t.createElement("div",{className:e.checksContainer},t.createElement(b,{variant:"h3",className:e.sectionTitle},"Checks"),y&&t.createElement(q,{className:e.content},t.createElement(o,{container:!0,spacing:1},y.checks.map(i=>t.createElement(o,{item:!0,xs:12,sm:6,md:4,key:i.id},t.createElement(te,{track:a,check:i,status:z?.find(f=>f.id===i.id),history:F?.find(f=>f.id===i.id)}))))),a&&t.createElement("div",{className:e.entitiesContainer},t.createElement(b,{variant:"h3",className:e.sectionTitle},"Entities"),t.createElement(se,{track:a,initialPageSize:10,lifecycles:m,owners:s,types:c,systems:l}))))))};export{de as CampaignInsightsPage};
2
2
  //# sourceMappingURL=CampaignInsightsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useTheme as l,Paper as f,Box as u}from"@material-ui/core";import{makeStyles as h}from"@material-ui/core/styles";import{DateTime as m}from"luxon";import i,{useMemo as y}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatusHistory as g}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{AreaChart as x}from"../AreaChart/AreaChart.esm.js";const S=h(t=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${t.palette.divider}`,height:"100%",width:"100%"},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${t.typography.h5.fontSize}px`,cursor:"default"},content:{padding:t.spacing(1,2,1,0),width:"100%",height:"100%"}}));function H({campaign:t,filter:n}){const p=l(),a=S(),c=m.fromISO(t.startDate),d=Math.max(Math.ceil(m.now().diff(c,"days").days),1),{data:e}=g({trackId:t.track.id,filter:n,numberOfDays:d},!!t),r=e?.certificationStatusHistory.numberOfEntities,o=y(()=>e?.certificationStatusHistory.history.map(s=>({date:s.date,Passed:s.statusByLevel[0].passed/r*100})),[r,e]);return i.createElement(f,{className:a.card},i.createElement(u,{className:a.content},o&&i.createElement(x,{data:o,categories:["Passed"],categoryColors:{Passed:p.palette.success.main},index:"date",minValue:0,maxValue:100,showLegend:!1})))}export{H as CampaignStatusHistoryTile};
1
+ import{useTheme as d,Paper as f,Box as h}from"@material-ui/core";import{makeStyles as u}from"@material-ui/core/styles";import{DateTime as m}from"luxon";import i,{useMemo as g}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatusHistory as y}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{AreaChart as x}from"../AreaChart/AreaChart.esm.js";import{LineChartPlaceholder as S}from"../Charts/LineChart/LineChartPlaceholder.esm.js";const C=u(t=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${t.palette.divider}`,height:"100%",width:"100%"},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${t.typography.h5.fontSize}px`,cursor:"default"},content:{padding:t.spacing(1,2,1,0),width:"100%",height:"100%"}}));function E({campaign:t,filter:n}){const p=d(),r=C(),c=m.fromISO(t.startDate),l=Math.max(Math.ceil(m.now().diff(c,"days").days),1),{data:a}=y({trackId:t.track.id,filter:n,numberOfDays:l},!!t),e=a?.certificationStatusHistory.numberOfEntities??0,o=g(()=>e>0?a?.certificationStatusHistory.history.map(s=>({date:s.date,Passed:s.statusByLevel[0].passed/e*100})):[],[e,a]);return i.createElement(f,{className:r.card},i.createElement(h,{className:r.content},o?.length?i.createElement(x,{data:o,categories:["Passed"],categoryColors:{Passed:p.palette.success.main},index:"date",minValue:0,maxValue:100,showLegend:!1}):i.createElement(S,{height:200,text:e>0?"No Historical Data":"No Applicable Entities"})))}export{E as CampaignStatusHistoryTile};
2
2
  //# sourceMappingURL=CampaignStatusHistoryTile.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useTheme as F,Paper as S,Box as c,Grid as x,Typography as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import T from"@material-ui/icons/TrendingDown";import k from"@material-ui/icons/TrendingFlat";import B from"@material-ui/icons/TrendingUp";import{DateTime as v}from"luxon";import t,{useMemo as D}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as I}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as N}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{CategoryBar as R}from"../CategoryBar/CategoryBar.esm.js";const E=C(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`},content:{padding:e.spacing(1),display:"flex",margin:e.spacing(1),gap:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(1),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:e.spacing(2)}}));function y({label:e,value:n,total:r,color:p,valueFormatter:s}){const a=E();return t.createElement(x,{item:!0,xs:12,className:a.item},t.createElement(c,{className:a.category},t.createElement("span",{className:a.legendDash,style:{backgroundColor:p}}),t.createElement(f,null,e)),r&&t.createElement(f,null,s(n)," of ",s(r)," (",Math.round(n/r*100),"%)"))}function $({campaign:e,filter:n}){const r=F(),p=E(),{data:s}=I({trackId:e.track.id,filter:n},!0),a=s?.certificationStatus.statusByLevel[0],h=Math.max(Math.ceil(v.now().diff(v.fromISO(e.startDate),"days").days),1),{data:g}=N({trackId:e.track.id,filter:n,numberOfDays:h},!!e),o=s?.certificationStatus.numberOfEntities??0,m=D(()=>{if(o===void 0||g===void 0||a===void 0)return;const i=g.certificationStatusHistory.history[0].statusByLevel[0].passed/o*100;return a.passed/o*100-i},[g,a,o]),d=i=>i>=1e6?`${(i/1e6).toFixed(1)}M`:i>=1e3?`${(i/1e3).toFixed(1)}K`:i.toString();let u=k,l;return m!==void 0&&(l=`${m.toFixed(0)}% since campaign start`,m<=-1?(u=T,l=`-${l}`):m>=1&&(u=B,l=`+${l}`)),t.createElement(S,{className:p.card},t.createElement(c,{className:p.content},a&&t.createElement(c,{width:"100%"},t.createElement(R,{data:a,valueFormatter:d,categories:["passed","failed","notReported"],categoryFormatter:i=>i.replace(/\b\w/g,b=>b.toUpperCase()),colors:[r.palette.success.main,r.palette.error.main,r.palette.text.disabled]}),t.createElement(c,{paddingTop:"12px"},t.createElement(x,{spacing:2},t.createElement(y,{label:"Passing",value:a.passed,total:o,color:r.palette.success.main,valueFormatter:d}),t.createElement(y,{label:"Failing",value:a.failed,total:o,color:r.palette.error.main,valueFormatter:d}),t.createElement(y,{label:"Not Reported",value:a.notReported,total:o,color:r.palette.text.disabled,valueFormatter:d}),m!==void 0&&t.createElement(c,{display:"flex",alignItems:"center",paddingTop:"12px"},t.createElement(u,null),t.createElement(f,{style:{marginLeft:r.spacing(1)}},l)))))))}export{$ as CampaignStatusTile};
1
+ import{useTheme as D,Paper as x,Box as n,Grid as v,Typography as u}from"@material-ui/core";import{makeStyles as I}from"@material-ui/core/styles";import N from"@material-ui/icons/TrendingDown";import C from"@material-ui/icons/TrendingFlat";import k from"@material-ui/icons/TrendingUp";import{DateTime as h}from"luxon";import e,{useMemo as B}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as R}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as T}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{CategoryBar as w}from"../CategoryBar/CategoryBar.esm.js";import{LoadingIndicator as L}from"../LoadingIndicator/LoadingIndicator.esm.js";const b=I(t=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${t.palette.divider}`,height:"100%"},content:{padding:t.spacing(1),display:"flex",margin:t.spacing(1),gap:t.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:t.spacing(.5)},legendDash:{width:t.spacing(2),height:t.spacing(1),borderRadius:t.spacing(.375),marginRight:t.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:t.spacing(2)}}));function E({label:t,value:m,total:a,color:s,valueFormatter:c}){const p=b();return e.createElement(v,{item:!0,xs:12,className:p.item},e.createElement(n,{className:p.category},e.createElement("span",{className:p.legendDash,style:{backgroundColor:s}}),e.createElement(u,null,t)),a&&e.createElement(u,null,c(m)," of ",c(a)," (",Math.round(m/a*100),"%)"))}function M({campaign:t,filter:m}){const a=D(),s=b(),{data:c,isLoading:p}=R({trackId:t.track.id,filter:m},!0),i=c?.certificationStatus.statusByLevel[0],F=Math.max(Math.ceil(h.now().diff(h.fromISO(t.startDate),"days").days),1),{data:f}=T({trackId:t.track.id,filter:m,numberOfDays:F},!!t),o=c?.certificationStatus.numberOfEntities??0,d=B(()=>{if(o===void 0||f===void 0||i===void 0)return;const r=(f.certificationStatusHistory.history[0]?.statusByLevel[0].passed??0)/o*100;return i.passed/o*100-r},[f,i,o]),g=r=>r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}K`:r.toString();let y=C,l;return d&&(l=`${d.toFixed(0)}% since campaign start`,d<=-1?(y=N,l=`-${l}`):d>=1&&(y=k,l=`+${l}`)),p?e.createElement(x,{className:s.card},e.createElement(L,null)):e.createElement(x,{className:s.card},i?e.createElement(n,{className:s.content},e.createElement(n,{width:"100%"},e.createElement(w,{data:i,valueFormatter:g,categories:["passed","failed","notReported"],categoryFormatter:r=>r.replace(/\b\w/g,S=>S.toUpperCase()),colors:[a.palette.success.main,a.palette.error.main,a.palette.text.disabled]}),e.createElement(n,{paddingTop:"12px"},e.createElement(v,{spacing:2},e.createElement(E,{label:"Passing",value:i.passed,total:o,color:a.palette.success.main,valueFormatter:g}),e.createElement(E,{label:"Failing",value:i.failed,total:o,color:a.palette.error.main,valueFormatter:g}),e.createElement(E,{label:"Not Reported",value:i.notReported,total:o,color:a.palette.text.disabled,valueFormatter:g}),!!d&&e.createElement(n,{display:"flex",alignItems:"center",paddingTop:"12px"},e.createElement(y,null),e.createElement(u,{style:{marginLeft:a.spacing(1)}},l)))))):e.createElement(n,{margin:"auto"},e.createElement(u,{variant:"subtitle1"},"No Data")))}export{M as CampaignStatusTile};
2
2
  //# sourceMappingURL=CampaignStatusTile.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Paper as c,Typography as i,Divider as s}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import{DateTime as n}from"luxon";import t from"react";const p=d(a=>({root:{display:"flex",flexDirection:"column",alignItems:"center",overflow:"hidden",width:"100%",height:"100%",padding:a.spacing(.75)},textWrapper:{display:"flex",flexDirection:"column",flexGrow:1,alignItems:"center",justifyContent:"center"},daysRemaining:{textAlign:"center",fontSize:"4em",fontWeight:"bold"},daysRemainingText:{textAlign:"center",fontSize:"0.9em",fontWeight:"bold"},divider:{width:"100%"},dateContainer:{display:"flex",flexDirection:"row",justifyContent:"flex-start",width:"100%",paddingTop:"4px",flexGrow:0},dateSection:{width:"100%",paddingLeft:"4px"},dateLabel:{fontSize:"0.7em",color:a.palette.text.secondary},dateValue:{fontSize:"0.95em",color:a.palette.info.contrastText},verticalDivider:{height:"100%"}}));function f({campaign:a}){const e=p(),l=n.fromISO(a.startDate),r=n.fromISO(a.targetCompletionDate),m=n.now(),o=Math.max(Math.ceil(r.diff(m,"days").days),0);return t.createElement(c,{className:e.root},t.createElement("div",{className:e.textWrapper},t.createElement(i,{className:e.daysRemaining},o),t.createElement(i,{className:e.daysRemainingText},o===1?"DAY REMAINING":"DAYS REMAINING")),t.createElement(s,{className:e.divider}),t.createElement("div",{className:e.dateContainer},t.createElement("div",{className:e.dateSection},t.createElement(i,{className:e.dateLabel},"START"),t.createElement(i,{className:e.dateValue},l.toLocaleString({month:"short",day:"numeric"}).toLocaleUpperCase())),t.createElement("div",{className:`${e.dateSection}`},t.createElement(i,{className:e.dateLabel},"END"),t.createElement(i,{className:e.dateValue},r.toLocaleString({month:"short",day:"numeric"}).toLocaleUpperCase()))))}export{f as DaysRemainingTile};
1
+ import{Paper as m,Typography as i,Divider as s}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import{DateTime as n}from"luxon";import t from"react";const p=d(a=>({root:{display:"flex",flexDirection:"column",alignItems:"center",overflow:"hidden",width:"100%",height:"100%",padding:0},textWrapper:{display:"flex",flexDirection:"column",flexGrow:1,alignItems:"center",justifyContent:"center",padding:a.spacing(1)},daysRemaining:{textAlign:"center",marginBottom:a.spacing(.5)},daysRemainingText:{textAlign:"center",fontWeight:"bold"},divider:{width:"100%"},dateContainer:{display:"flex",flexDirection:"row",justifyContent:"flex-start",width:"100%",padding:a.spacing(1),flexGrow:0},dateSection:{width:"100%",paddingLeft:a.spacing(.5)},dateLabel:{fontSize:a.typography.caption.fontSize,color:a.palette.text.secondary},dateValue:{fontSize:a.typography.subtitle2.fontSize,color:a.palette.text.primary},verticalDivider:{height:"100%"}}));function g({campaign:a}){const e=p(),l=n.fromISO(a.startDate),r=n.fromISO(a.targetCompletionDate),c=n.now(),o=Math.max(Math.ceil(r.diff(c,"days").days),0);return t.createElement(m,{className:e.root},t.createElement("div",{className:e.textWrapper},t.createElement(i,{variant:"h1",className:e.daysRemaining},o),t.createElement(i,{variant:"subtitle2",className:e.daysRemainingText},o===1?"DAY REMAINING":"DAYS REMAINING")),t.createElement(s,{className:e.divider}),t.createElement("div",{className:e.dateContainer},t.createElement("div",{className:e.dateSection},t.createElement(i,{className:e.dateLabel},"START"),t.createElement(i,{className:e.dateValue},l.toLocaleString({month:"short",day:"numeric"}).toLocaleUpperCase())),t.createElement("div",{className:`${e.dateSection}`},t.createElement(i,{className:e.dateLabel},"END"),t.createElement(i,{className:e.dateValue},r.toLocaleString({month:"short",day:"numeric"}).toLocaleUpperCase()))))}export{g as DaysRemainingTile};
2
2
  //# sourceMappingURL=DaysRemainingTile.esm.js.map
@@ -1,2 +1,2 @@
1
- import t,{useEffect as d}from"react";import{useParams as g}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as u}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as l}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as f}from"../../hooks/useNavigateBack.esm.js";import{useGetCampaign as C}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as E}from"../../routes.esm.js";import{CampaignForm as y}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as h}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as k}from"./CampaignEmptyState.esm.js";const F=()=>{L({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[a,r]=f(E),{campaignId:p}=g(),{setIsLoading:e}=u(),{mutateAsync:n,isLoading:o}=l(),{data:s,isLoading:m}=C(p??""),i=s?.edges?.[0]?.node;return d(()=>e(o),[e,o]),!m&&!i?t.createElement(k,null):t.createElement(t.Fragment,null,m?t.createElement(h,null):t.createElement(y,{onSave:async c=>{await n(c,{onSuccess:r})},onCancel:a,selectedCampaign:i}))};export{F as EditCampaignView};
1
+ import{usePermission as u}from"@backstage/plugin-permission-react";import{soundcheckCampaignUpdatePermission as f}from"@spotify/backstage-plugin-soundcheck-common";import e,{useEffect as C}from"react";import{useParams as E}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as y}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.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"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as h}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as k}from"../../hooks/useNavigateBack.esm.js";import{useGetCampaign as L}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as P}from"../../routes.esm.js";import{CampaignForm as w}from"../CampaignForm/CampaignForm.esm.js";import{PageWarningMessage as F}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as U}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as I}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as R}from"./CampaignEmptyState.esm.js";const S=()=>{U({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[r,n]=k(P),{campaignId:p}=E(),{setIsLoading:o}=y(),{mutateAsync:s,isLoading:i}=h(),{data:c,isLoading:m}=L(p??""),t=c?.edges?.[0]?.node,{loading:d,allowed:a}=u({permission:f,resourceRef:t?.id});if(C(()=>o(i),[o,i]),!m&&!t)return e.createElement(R,null);const g=async l=>{await s(l,{onSuccess:n})};return e.createElement(e.Fragment,null,e.createElement(F,{entityId:t?.id,entityName:t?.name??"",showCannotEdit:!d&&!a}),m?e.createElement(I,null):e.createElement(e.Fragment,null,a&&e.createElement(w,{onSave:g,onCancel:r,selectedCampaign:t})))};export{S as EditCampaignView};
2
2
  //# sourceMappingURL=EditCampaignView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useEntity as u}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as f,AccordionSummary as E,AccordionDetails as b,makeStyles as y,Box as h}from"@material-ui/core";import R from"@material-ui/icons/ExpandMore";import e,{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 x}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{AlertPanel as k}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as I}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as L}from"../CertificationSidebar/CertificationLevel.esm.js";const C=o(f)(({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)}})),S=o(({...t})=>e.createElement(E,{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"}})),A=o(b)(()=>({margin:"0 !important",borderRadius:0,padding:0})),n=y(()=>({sidebar:{width:"100%"}})),B=({playlistId:t,trackId:i,checkId:d})=>{const m=n(),{entity:p}=u(),c=v(null),{data:r,isLoading:l,isError:s}=x(p,i);if(s)return e.createElement("div",null,e.createElement(h,{padding:2},e.createElement(k,{severity:"error",title:"Error loading certification"})));if(l||!i)return e.createElement(I,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(C,{ref:c,defaultExpanded:!0,elevation:0},e.createElement(S,{expandIcon:e.createElement(R,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(T,{name:r.program.name,badge:r.highestLevel?.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(A,null,e.createElement("div",{className:m.sidebar},r?.levels.map(a=>e.createElement(L,{key:a.ordinal,level:a,checkId:d,trackId:i,playlistId:t,isCampaign:g})))))};export{B as CertificationAccordion,n as useStyles};
1
+ import{useEntity as u}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as f,AccordionSummary as E,AccordionDetails as b,makeStyles as y,Box as R}from"@material-ui/core";import h from"@material-ui/icons/ExpandMore";import e,{useRef as x}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 k}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{AlertPanel as v}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as I}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as T}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as C}from"../CertificationSidebar/CertificationLevel.esm.js";const L=o(f)(({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)}})),S=o(({...t})=>e.createElement(E,{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"}})),A=o(b)(()=>({margin:"0 !important",borderRadius:0,padding:0})),n=y(()=>({sidebar:{width:"100%"}})),B=({playlistId:t,trackId:i,checkId:d})=>{const m=n(),{entity:p}=u(),c=x(null),{data:r,isLoading:l,isError:s}=k(p,i);if(s)return e.createElement("div",null,e.createElement(R,{padding:2},e.createElement(v,{severity:"error",title:"Error loading certification"})));if(l||!i)return e.createElement(T,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(L,{ref:c,defaultExpanded:!0,elevation:0},e.createElement(S,{expandIcon:e.createElement(h,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(I,{name:r.program.name,badge:r.program.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(A,null,e.createElement("div",{className:m.sidebar},r?.levels.map(a=>e.createElement(C,{key:a.ordinal,level:a,checkId:d,trackId:i,playlistId:t,isCampaign:g})))))};export{B as CertificationAccordion,n as useStyles};
2
2
  //# sourceMappingURL=CertificationAccordion.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as d,Box as s}from"@material-ui/core";import r 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 f}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{AlertPanel as g}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as u}from"./CertificationLevel.esm.js";import{CertificationSummary as y}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as k}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const E=d(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),v=({playlistId:o,trackId:t,checkId:a})=>{const{entity:m}=c(),{data:e,isLoading:n,isError:l}=f(m,t);if(l)return r.createElement("div",null,r.createElement(s,{padding:2},r.createElement(g,{severity:"error",title:"Error loading certification"})));if(n||!t)return r.createElement(k,null);if(!e)return null;const p=e.program.type==="campaign";return r.createElement("div",null,r.createElement(y,{name:e.program.name,badge:e.highestLevel?.badge,description:e.program.description,documentationUrl:e.program.documentationURL,trackType:e.program.type}),e?.levels.map(i=>r.createElement(u,{key:i.ordinal,level:i,checkId:a,trackId:t,playlistId:o,isCampaign:p})))};export{v as CertificationSidebar,E as useStyles};
1
+ import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as d,Box as s}from"@material-ui/core";import e 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 f}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{AlertPanel as g}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as u}from"./CertificationLevel.esm.js";import{CertificationSummary as y}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as k}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const E=d(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),S=({playlistId:o,trackId:t,checkId:a})=>{const{entity:m}=c(),{data:r,isLoading:n,isError:p}=f(m,t);if(p)return e.createElement("div",null,e.createElement(s,{padding:2},e.createElement(g,{severity:"error",title:"Error loading certification"})));if(n||!t)return e.createElement(k,null);if(!r)return null;const l=r.program.type==="campaign";return e.createElement("div",null,e.createElement(y,{name:r.program.name,badge:r.program.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type}),r?.levels.map(i=>e.createElement(u,{key:i.ordinal,level:i,checkId:a,trackId:t,playlistId:o,isCampaign:l})))};export{S as CertificationSidebar,E as useStyles};
2
2
  //# sourceMappingURL=CertificationSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as i,Link as l}from"@backstage/core-components";import{makeStyles as p,Typography as s}from"@material-ui/core";import e from"react";import{CertificationBadge as d}from"../Badges/CertificationBadge.esm.js";const o=p(t=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:t.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:t.spacing(2)},title:{fontSize:t.typography.pxToRem(18),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:t.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function g({description:t,documentationUrl:r}){const n=o();return r?e.createElement("div",{className:n.description},e.createElement(i,{content:t}),e.createElement(l,{to:r},"Learn more")):e.createElement("div",{className:n.description},e.createElement(i,{content:t}))}const u=({name:t,badge:r,description:n,documentationUrl:c,trackType:m="standard"})=>{const a=o();return e.createElement("div",{className:a.root},e.createElement(d,{badge:r,trackType:m,size:"large",showTooltip:!0}),e.createElement("div",null,e.createElement(s,{className:a.title},t),n&&e.createElement(g,{description:n,documentationUrl:c})))};export{u as CertificationSummary,o as useStyles};
1
+ import{MarkdownContent as o,Link as p}from"@backstage/core-components";import{makeStyles as s,Typography as d,Grid as c}from"@material-ui/core";import e from"react";import{CertificationBadge as g}from"../Badges/CertificationBadge.esm.js";import{StatusDetails as u}from"./StatusDetails.esm.js";const i=s(t=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:t.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:t.spacing(2)},title:{fontSize:t.typography.pxToRem(18),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:t.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function y({description:t,documentationUrl:n}){const a=i();return n?e.createElement("div",{className:a.description},e.createElement(o,{content:t}),e.createElement(p,{to:n},"Learn more")):e.createElement("div",{className:a.description},e.createElement(o,{content:t}))}const E=({name:t,badge:n,description:a,documentationUrl:m,trackType:l="standard"})=>{const r=i();return e.createElement("div",{className:r.root},e.createElement(g,{badge:n,trackType:l,size:"large",showTooltip:!0}),e.createElement("div",null,e.createElement(d,{className:r.title},t),e.createElement(c,{container:!0,direction:"column",spacing:0},a&&e.createElement(c,{item:!0},e.createElement(y,{description:a,documentationUrl:m})),e.createElement(u,{badge:n}))))};export{E as CertificationSummary,i as useStyles};
2
2
  //# sourceMappingURL=CertificationSummary.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as x,Tooltip as z,IconButton as I,CircularProgress as T}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";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{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr 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}}})),M=({className:t,href:a,name:r,children:m})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},m):e.createElement("div",{className:t},m),P=({result:t,name:a,id:r,timestamp:m,isExecutable:h=!1,selected:f=!1,href:g})=>{const k=d(),E=S(k.root,{selected:f}),{entity:c}=b(),{mutateAsync:y,isLoading:l}=B(),[o,C]=F(),{data:n}=A({ids:r?[r]:[]},!!o),s=L(()=>{const i=n?.edges?.[0]?.node;return i?G(i):null},[n?.edges]),R=async()=>{if(!c||!r)return;const i=await y({checkerId:r,entityRef:p(c),shouldRefreshFacts:!0}).catch(j=>{});i&&C(i)},u=!c||!r||!h;return e.createElement(M,{href:g,className:E,name:a},e.createElement($,{result:t}),e.createElement(x,{variant:"body2"},a),m&&!l?e.createElement(H,{timestamp:m}):null,!l&&e.createElement(e.Fragment,null,e.createElement(z,{title:"Execute Check",disableHoverListener:u},e.createElement("span",null,e.createElement(I,{size:"small",color:"inherit",onClick:R,disabled:u,"aria-label":"Execute Check"},e.createElement(N,{fontSize:"small"})))),!!o&&!!s&&e.createElement(D,{entityRef:p(c),check:s,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(T,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
1
+ import{stringifyEntityRef as h}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as I,Tooltip as N,IconButton as x,CircularProgress as T}from"@material-ui/core";import z from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";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{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr 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}})),M=({className:t,href:a,name:r,children:c})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},c):e.createElement("div",{className:t},c),P=({result:t,name:a,id:r,timestamp:c,isExecutable:f=!1,selected:k=!1,href:g})=>{const n=d(),E=S(n.root,{selected:k}),{entity:i}=b(),{mutateAsync:y,isLoading:l}=B(),[o,C]=F(),{data:s}=A({ids:r?[r]:[]},!!o),u=L(()=>{const m=s?.edges?.[0]?.node;return m?G(m):null},[s?.edges]),R=async()=>{if(!i||!r)return;const m=await y({checkerId:r,entityRef:h(i),shouldRefreshFacts:!0}).catch(j=>{});m&&C(m)},p=!i||!r||!f;return e.createElement(M,{href:g,className:E,name:a},e.createElement($,{className:n.checkIcon,result:t}),e.createElement(I,{variant:"body2"},a),c&&!l?e.createElement(H,{timestamp:c}):null,!l&&e.createElement(e.Fragment,null,e.createElement(N,{title:"Execute Check",disableHoverListener:p},e.createElement("span",null,e.createElement(x,{size:"small",color:"inherit",onClick:R,disabled:p,"aria-label":"Execute Check"},e.createElement(z,{fontSize:"small"})))),!!o&&!!u&&e.createElement(D,{entityRef:h(i),check:u,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(T,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as a}from"@backstage/core-components";import{makeStyles as o,Typography as p}from"@material-ui/core";import r from"react";import{LevelBadge as d}from"../Badges/LevelBadge.esm.js";import"../Badges/NoLevelBadge.esm.js";import"../Badges/CampaignBadge.esm.js";const i=o(e=>({wrapper:{backgroundColor:e.palette.background.default,color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,minHeight:"auto",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(1),display:"grid",gridTemplateAreas:({badge:t})=>[`"${t?"badge":"title"} title"`,`"${t?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:e.palette.text.primary,fontSize:e.typography.body2.fontSize,paddingTop:e.spacing(.5),paddingBottom:e.spacing(.5),lineHeight:1},badge:{gridArea:"badge",marginRight:e.spacing(1)},description:{gridArea:"description",color:e.palette.text.primary,fontSize:e.typography.subtitle2.fontSize,"& p":{marginBlockStart:0,marginBlockEnd:0}}})),n=e=>{const t=i({badge:e.badge});return r.createElement("div",{className:t.wrapper},e.badge?r.createElement(d,{className:t.badge,badge:e.badge}):null,r.createElement(p,{className:t.title},e.title),e.description?r.createElement(a,{className:t.description,content:e.description}):null)};export{n as LevelSummary,i as useStyles};
1
+ import{MarkdownContent as i}from"@backstage/core-components";import{makeStyles as n,Typography as p,Grid as a}from"@material-ui/core";import r from"react";import{LevelBadge as d}from"../Badges/LevelBadge.esm.js";import"../Badges/NoLevelBadge.esm.js";import"../Badges/CampaignBadge.esm.js";import{StatusDetails as l}from"./StatusDetails.esm.js";const o=n(e=>({wrapper:{backgroundColor:e.palette.background.default,color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,minHeight:"auto",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(1),display:"grid",gridTemplateAreas:({badge:t})=>[`"${t?"badge":"title"} title"`,`"${t?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:e.palette.text.primary,fontSize:e.typography.body2.fontSize,paddingTop:e.spacing(.5),paddingBottom:e.spacing(.5),lineHeight:1},badge:{gridArea:"badge",marginRight:e.spacing(1)},description:{gridArea:"description",color:e.palette.text.primary,fontSize:e.typography.subtitle2.fontSize,"& p":{marginBlockStart:0,marginBlockEnd:0}}})),m=e=>{const t=o({badge:e.badge});return r.createElement("div",{className:t.wrapper},e.badge?r.createElement(d,{className:t.badge,badge:e.badge}):null,r.createElement(p,{className:t.title},e.title),r.createElement(a,{container:!0,direction:"column",spacing:0,className:t.description},e.description?r.createElement(a,{item:!0},r.createElement(i,{content:e.description})):null,r.createElement(l,{badge:e.badge})))};export{m as LevelSummary,o as useStyles};
2
2
  //# sourceMappingURL=LevelSummary.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as i,Grid as l,Typography as m}from"@material-ui/core";import e from"react";import{BadgeVariant as p}from"../../graphql/generated/index.esm.js";const s=i(a=>({status:{fontSize:"12px",color:a.palette.text.secondary}})),c=a=>{const n=s();if(a.badge?.variant!==p.Status)return e.createElement(e.Fragment,null);const t=a.badge.options.status;if(!t)return e.createElement(e.Fragment,null);const r=t.passed+t.failed+t.warning+t.error+t.notReported,o=r?t.passed/r*100:0;return e.createElement(l,{item:!0},e.createElement(m,{variant:"caption",className:n.status},`${t.passed}/${r} checks passed (${Math.round(o)}%)`))};export{c as StatusDetails,s as useStyles};
2
+ //# sourceMappingURL=StatusDetails.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as p}from"@backstage/core-plugin-api";import{useEntity as y}from"@backstage/plugin-catalog-react";import{Tabs as g}from"@material-ui/core";import n from"react";import{useAllCertifications as b}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 h}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as C,certificationTrackRouteRef as k}from"../../routes.esm.js";import{CertificationTab as I}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as R}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as T}from"./skeletons/CertificationTabsSkeleton.esm.js";function E(m=[],e=[],o,l){if(o){const i=m.findIndex(a=>a.id===o);return i<0?!1:i}const r=e.findIndex(i=>i.program.id===l);return r<0?!1:r+m.length}const v=({playlistId:m,trackId:e})=>{const{entity:o}=y(),{isLoading:l,data:r}=b(o),{isLoading:i,data:a}=h(o),c=p(C),s=p(k);if(i||l||!e)return n.createElement(T,null);const d=E(a,r,m,e);return n.createElement(g,{value:d,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},a?.length&&a.map(({id:t,name:f})=>n.createElement(R,{key:t,id:t,name:f,selected:t===e,href:c({playlistId:t})})),r&&r.filter(({program:{type:t}})=>t!=="playlist").map(({program:{id:t,name:f},highestLevel:u})=>n.createElement(I,{key:t,id:t,name:f,badge:u?.badge,selected:t===e,href:s({trackId:t})})))};export{v as CertificationTabs};
1
+ import{useRouteRef as p}from"@backstage/core-plugin-api";import{useEntity as y}from"@backstage/plugin-catalog-react";import{Tabs as b}from"@material-ui/core";import n from"react";import{useAllCertifications as g}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 C}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as k,certificationTrackRouteRef as I}from"../../routes.esm.js";import{CertificationTab as R}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as T}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as h}from"./skeletons/CertificationTabsSkeleton.esm.js";function E(m=[],e=[],o,l){if(o){const i=m.findIndex(a=>a.id===o);return i<0?!1:i}const r=e.findIndex(i=>i.program.id===l);return r<0?!1:r+m.length}const x=({playlistId:m,trackId:e})=>{const{entity:o}=y(),{isLoading:l,data:r}=g(o),{isLoading:i,data:a}=C(o),c=p(k),s=p(I);if(i||l||!e)return n.createElement(h,null);const d=E(a,r,m,e);return n.createElement(b,{value:d,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},a?.length&&a.map(({id:t,name:f})=>n.createElement(T,{key:t,id:t,name:f,selected:t===e,href:c({playlistId:t})})),r&&r.filter(({program:{type:t}})=>t!=="playlist").map(({program:{id:t,name:f,badge:u}})=>n.createElement(R,{key:t,id:t,name:f,badge:u,selected:t===e,href:s({trackId:t})})))};export{x as CertificationTabs};
2
2
  //# sourceMappingURL=CertificationTabs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{LinearGauge as p}from"@backstage/core-components";import{makeStyles as g,useTheme as f,Typography as u}from"@material-ui/core";import s from"lodash";import t,{useMemo as y}from"react";import{ResultState as n}from"../../../graphql/generated/index.esm.js";import{LevelBadge as h}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as k}from"../../Badges/NoLevelBadge.esm.js";import"../../Badges/CampaignBadge.esm.js";import{usePlaylistCertificationContext as v}from"./PlaylistContext.esm.js";const x=(o,r)=>{if(r)return r.filter(e=>o.trackIds.includes(e.program.id)).map(e=>{const i=s.sumBy(e.levels,m=>s.filter(m.checks,{result:n.Passed}).length),l=s.sumBy(e.levels,m=>s.reject(m.checks,{result:n.NotApplicable}).length),a=l===0?0:i/l;return{id:e.program.id,name:e.program.name,checkPassRate:a}})},c=g(()=>({root:{margin:0,width:"250px"},trackItem:{display:"flex",flexDirection:"column",alignItems:"flex-start"},badgeAndName:{display:"flex",flexDirection:"row",alignItems:"center"},trackName:{marginLeft:"8px"}})),N=({playlist:o})=>{const r=c(),{data:e}=v(),i=f(),l=y(()=>x(o,e),[e,o]);return t.createElement("div",{className:r.root},l&&l.map(a=>{const m=e?.find(d=>d.program.id===a.id)?.highestLevel?.badge;return t.createElement("div",{className:r.trackItem,key:a.id},t.createElement("div",{className:r.badgeAndName},m?t.createElement(h,{badge:m}):t.createElement(k,null),t.createElement(u,{variant:"caption",color:"textSecondary",className:r.trackName},a.name)),t.createElement("div",{style:{width:"100%",marginBottom:"8px"}},t.createElement(p,{value:a.checkPassRate,getColor:()=>i.palette.status.ok})))}))};export{N as PlaylistProgress,c as useStyles};
1
+ import{LinearGauge as d}from"@backstage/core-components";import{makeStyles as g,useTheme as f,Typography as u}from"@material-ui/core";import s from"lodash";import t,{useMemo as y}from"react";import{ResultState as n}from"../../../graphql/generated/index.esm.js";import{LevelBadge as k}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as h}from"../../Badges/NoLevelBadge.esm.js";import"../../Badges/CampaignBadge.esm.js";import{usePlaylistCertificationContext as x}from"./PlaylistContext.esm.js";const v=(l,r)=>{if(r)return r.filter(e=>l.trackIds.includes(e.program.id)).map(e=>{const i=s.sumBy(e.levels,m=>s.filter(m.checks,{result:n.Passed}).length),o=s.sumBy(e.levels,m=>s.reject(m.checks,{result:n.NotApplicable}).length),a=o===0?0:i/o;return{id:e.program.id,name:e.program.name,checkPassRate:a}})},c=g(()=>({root:{margin:0,width:"250px"},trackItem:{display:"flex",flexDirection:"column",alignItems:"flex-start"},badgeAndName:{display:"flex",flexDirection:"row",alignItems:"center"},trackName:{marginLeft:"8px"}})),N=({playlist:l})=>{const r=c(),{data:e}=x(),i=f(),o=y(()=>v(l,e),[e,l]);return t.createElement("div",{className:r.root},o&&o.map(a=>{const m=e?.find(p=>p.program.id===a.id)?.program?.badge;return t.createElement("div",{className:r.trackItem,key:a.id},t.createElement("div",{className:r.badgeAndName},m?t.createElement(k,{badge:m}):t.createElement(h,null),t.createElement(u,{variant:"caption",color:"textSecondary",className:r.trackName},a.name)),t.createElement("div",{style:{width:"100%",marginBottom:"8px"}},t.createElement(d,{value:a.checkPassRate,getColor:()=>i.palette.status.ok})))}))};export{N as PlaylistProgress,c as useStyles};
2
2
  //# sourceMappingURL=PlaylistProgress.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Typography as r}from"@material-ui/core";import{makeStyles as o}from"@material-ui/core/styles";import e from"react";import{LineChart as n,CartesianGrid as c,XAxis as i,YAxis as s,Line as m}from"recharts";import{CARTESIAN_GRID_OPACITY as l,AXIS_DOMAIN as d}from"../ChartTypes.esm.js";import{ChartWrapper as p}from"../ChartWrapper/ChartWrapper.esm.js";const h=o(t=>({container:{position:"relative"},chartMessage:{position:"absolute",top:"50%",left:"50%",fontWeight:"bold",transform:"translate(-50%, -50%)",backgroundColor:t.palette.background.default,padding:t.spacing(1),borderRadius:"5px",textAlign:"center",width:"50%",zIndex:2}})),y=()=>{const t=[{x:"A",y:25},{x:"B",y:50},{x:"C",y:75}],a=h();return e.createElement("div",{className:a.container},e.createElement(p,null,e.createElement(n,{data:t},e.createElement(c,{strokeDasharray:"3 3",vertical:!1,opacity:l}),e.createElement(i,{dataKey:"x",stroke:"#ccc",hide:!0}),e.createElement(s,{domain:d,stroke:"#ccc",hide:!0}),e.createElement(m,{type:"monotone",dataKey:"y",stroke:"#ccc",dot:!1}))),e.createElement(r,{className:a.chartMessage},"No Data"))};export{y as LineChartPlaceholder};
1
+ import{Typography as n}from"@material-ui/core";import{makeStyles as i}from"@material-ui/core/styles";import e from"react";import{LineChart as c,CartesianGrid as s,XAxis as m,YAxis as l,Line as d}from"recharts";import{CARTESIAN_GRID_OPACITY as p,AXIS_DOMAIN as h}from"../ChartTypes.esm.js";import{ChartWrapper as g}from"../ChartWrapper/ChartWrapper.esm.js";const y=i(t=>({container:{position:"relative"},chartMessage:{position:"absolute",top:"50%",left:"50%",fontWeight:"bold",transform:"translate(-50%, -50%)",backgroundColor:t.palette.background.default,padding:t.spacing(1),borderRadius:"5px",textAlign:"center",width:"50%",zIndex:2}})),x=({height:t,text:r})=>{const o=[{x:"A",y:0},{x:"B",y:50},{x:"C",y:100}],a=y();return e.createElement("div",{className:a.container},e.createElement(g,{height:t},e.createElement(c,{data:o},e.createElement(s,{strokeDasharray:"3 3",vertical:!1,opacity:p}),e.createElement(m,{dataKey:"x",stroke:"#ccc",hide:!0}),e.createElement(l,{domain:h,stroke:"#ccc",hide:!0}),e.createElement(d,{type:"monotone",dataKey:"y",stroke:"#ccc",dot:!1}))),e.createElement(n,{className:a.chartMessage},r??"No Data"))};export{x as LineChartPlaceholder};
2
2
  //# sourceMappingURL=LineChartPlaceholder.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as b,useTheme as D,Box as r,Paper as R,Typography as $,Tooltip as B}from"@material-ui/core";import x from"@material-ui/lab/Skeleton";import{DateTime as I}from"luxon";import t from"react";import{CircularProgressbar as O,buildStyles as P}from"react-circular-progressbar";import{useCheckStatus as T}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useCheckStatusHistory as W}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getChartFontColor as y,formatDate as M}from"../Charts/chartUtils.esm.js";import{getApplicableCheckCount as p}from"../TrackPage/TrackEntitiesTable/utils.esm.js";import{getProgressColor as C}from"../TrackPage/utils.esm.js";import{CheckHistoryChart as j}from"./CheckHistoryChart.esm.js";import{getCheckName as z}from"./utils.esm.js";const S=b(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,width:"99%"},title:{fontWeight:"bold",fontSize:"0.9rem",cursor:"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},headerRow:{display:"flex",padding:e.spacing(1,1),borderBottom:`1px solid ${e.palette.divider}`,width:"100%"},headerSection:{display:"flex",flexDirection:"column",gap:e.spacing(.5),flexGrow:1,width:"100%"},contentRow:{padding:e.spacing(1,1,0),display:"flex"},leftSection:{width:"75px",minWidth:"75px"},summaryCard:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:1,width:"100%",minWidth:"150px"},chartSkeletonSection:{flex:1,width:"100%",minWidth:"150px",padding:e.spacing(0,0,1,1)},overallSummaryBox:{display:"flex",flexDirection:"column",height:"100%",color:y(e),textAlign:"center",gap:e.spacing(2)}})),A=()=>{const e=S();return t.createElement(r,{className:e.contentRow},t.createElement(r,{className:e.leftSection},t.createElement(r,{className:e.summaryCard},t.createElement(x,{variant:"circle",height:75}))),t.createElement(r,{className:e.chartSkeletonSection},t.createElement(x,{variant:"rect",height:92})))};function H(e){if(!e)return[];const{history:o}=e,i=I.utc();return o.map((l,a)=>{const n=p(l);return{name:M(i,o.length-a-1),passRate:n?Math.round(l.passed/n*100):100}})}function L(e){if(!e)return 0;const{passed:o}=e,i=p(e);return i?Math.round(o/i*100):100}function F(e){if(!e)return{numerator:0,denominator:0};const{passed:o}=e,i=p(e);return{numerator:o,denominator:i}}const G=({check:e,track:o,filter:i,numberOfDays:l=30})=>{const a=S(),n=D(),{data:c,isLoading:E}=T({checkId:e.id,trackId:o.id,filter:i}),{data:f,isLoading:w}=W({checkId:e.id,trackId:o.id,numberOfDays:l,filter:i}),N={dataKey:"passRate",name:"Pass rate"},k=f?.history?.length??0,v=H(f),s=L(c);let d;c?d=`${s}%`:d="No Data";let m;if(!c)m="No Data";else{const{numerator:u,denominator:g}=F(c);g>0?m=`${u} of ${g} entities passing`:m=`${u} entities passing`}const h=t.createElement(r,{className:a.overallSummaryBox},t.createElement(O,{value:s,text:d,styles:P({textColor:y(n),pathColor:C(n,s),trailColor:n.palette.divider,textSize:k?void 0:10})}));return t.createElement(R,{className:a.card,elevation:0},t.createElement(r,{className:a.headerRow},t.createElement(r,{className:a.headerSection},t.createElement($,{className:a.title},z(o,e)))),w||E?t.createElement(A,null):t.createElement(B,{title:m},t.createElement(r,{className:a.contentRow},h&&t.createElement(r,{className:a.leftSection},t.createElement(r,{className:a.summaryCard},h)),t.createElement(r,{className:a.chartSection},t.createElement(j,{data:v,lineConfig:N,color:C(n,s)})))))};export{G as CheckCard};
1
+ import{makeStyles as w,useTheme as v,Box as o,Paper as k,Typography as b,Tooltip as D}from"@material-ui/core";import u from"@material-ui/lab/Skeleton";import{DateTime as R}from"luxon";import t from"react";import{CircularProgressbar as $,buildStyles as B}from"react-circular-progressbar";import{getChartFontColor as g,formatDate as P}from"../Charts/chartUtils.esm.js";import{getApplicableCheckCount as p}from"../TrackPage/TrackEntitiesTable/utils.esm.js";import{getProgressColor as x}from"../TrackPage/utils.esm.js";import{CheckHistoryChart as T}from"./CheckHistoryChart.esm.js";import{getCheckName as W}from"./utils.esm.js";const y=w(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,width:"99%"},title:{fontWeight:"bold",fontSize:"0.9rem",cursor:"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},headerRow:{display:"flex",padding:e.spacing(1.5,2),borderBottom:`1px solid ${e.palette.divider}`,width:"100%"},headerSection:{display:"flex",flexDirection:"column",gap:e.spacing(.5),flexGrow:1,width:"100%"},contentRow:{padding:e.spacing(1.5,2,.5),display:"flex"},leftSection:{width:"75px",minWidth:"75px"},summaryCard:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:1,width:"100%",minWidth:"150px"},chartSkeletonSection:{flex:1,width:"100%",minWidth:"150px",padding:e.spacing(0,0,1,1)},overallSummaryBox:{display:"flex",flexDirection:"column",height:"100%",color:g(e),textAlign:"center",gap:e.spacing(2)}})),z=()=>{const e=y();return t.createElement(o,{className:e.contentRow},t.createElement(o,{className:e.leftSection},t.createElement(o,{className:e.summaryCard},t.createElement(u,{variant:"circle",height:75}))),t.createElement(o,{className:e.chartSkeletonSection},t.createElement(u,{variant:"rect",height:92})))};function A(e){if(!e)return[];const{history:n}=e,a=R.utc();return n.map((l,r)=>{const i=p(l);return{name:P(a,n.length-r-1),passRate:i?Math.round(l.passed/i*100):0}})}function M(e){if(!e)return 0;const{passed:n}=e,a=p(e);return a?Math.round(n/a*100):0}function j(e){if(!e)return{numerator:0,denominator:0};const{passed:n}=e,a=p(e);return{numerator:n,denominator:a}}const F=({check:e,track:n,status:a,history:l})=>{const r=y(),i=v(),E={dataKey:"passRate",name:"Pass rate"},C=l?.history?.length??0,S=A(l),c=M(a);let m;a?m=`${c}%`:m="No Data";let d=!1,s;if(!a)s="No Data";else{const{numerator:N,denominator:f}=j(a);f>0?(d=!0,s=`${N} of ${f} entities passing`):s="No Applicable Entities"}const h=d?t.createElement(o,{className:r.overallSummaryBox},t.createElement($,{value:c,text:m,styles:B({textColor:g(i),pathColor:x(i,c),trailColor:i.palette.divider,textSize:C?void 0:10})})):null;return t.createElement(k,{className:r.card,elevation:0},t.createElement(o,{className:r.headerRow},t.createElement(o,{className:r.headerSection},t.createElement(b,{className:r.title},W(n,e)))),!a||!l?t.createElement(z,null):t.createElement(D,{title:s},t.createElement(o,{className:r.contentRow},h&&t.createElement(o,{className:r.leftSection},t.createElement(o,{className:r.summaryCard},h)),t.createElement(o,{className:r.chartSection},t.createElement(T,{data:d?S:[],lineConfig:E,color:x(i,c)})))))};export{F as CheckCard};
2
2
  //# sourceMappingURL=CheckCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useTheme as m}from"@material-ui/core";import e from"react";import{ResponsiveContainer as n,AreaChart as l,CartesianGrid as c,XAxis as s,YAxis as p,Area as A}from"recharts";import{CARTESIAN_GRID_OPACITY as d,CHART_DATA_KEY as C,HORIZONTAL_Y_AXIS_WIDTH as h,AXIS_DOMAIN as f}from"../Charts/ChartTypes.esm.js";import"../Charts/LineChart/LineChart.esm.js";import{getChartFontColor as y}from"../Charts/chartUtils.esm.js";import"luxon";import"../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"@backstage/catalog-model";import"../Charts/BarChart/BarChart.esm.js";import{LineChartPlaceholder as E}from"../Charts/LineChart/LineChartPlaceholder.esm.js";const I=({data:r,lineConfig:t,color:o})=>{const i=m(),a=y(i);return r.length?e.createElement(n,{minHeight:100,debounce:1},e.createElement(l,{data:r},e.createElement(c,{vertical:!1,opacity:d}),e.createElement(s,{dataKey:C,stroke:a,style:{fontSize:"0.7rem"}}),e.createElement(p,{width:h,domain:f,stroke:a,style:{fontSize:"0.7rem"}}),e.createElement(A,{key:t.dataKey,dataKey:t.dataKey,name:t.name,stackId:"1",type:"monotone",stroke:o,strokeWidth:1.2,fill:o}))):e.createElement(E,null)};export{I as CheckHistoryChart};
1
+ import{useTheme as m}from"@material-ui/core";import e from"react";import{ResponsiveContainer as n,AreaChart as l,CartesianGrid as c,XAxis as s,YAxis as p,Area as A}from"recharts";import{CARTESIAN_GRID_OPACITY as d,CHART_DATA_KEY as h,HORIZONTAL_Y_AXIS_WIDTH as C,AXIS_DOMAIN as f}from"../Charts/ChartTypes.esm.js";import"../Charts/LineChart/LineChart.esm.js";import{getChartFontColor as y}from"../Charts/chartUtils.esm.js";import"luxon";import"../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"@backstage/catalog-model";import"../Charts/BarChart/BarChart.esm.js";import{LineChartPlaceholder as E}from"../Charts/LineChart/LineChartPlaceholder.esm.js";const I=({data:r,lineConfig:t,color:o})=>{const i=m(),a=y(i);return r.length?e.createElement(n,{minHeight:100,debounce:1},e.createElement(l,{data:r},e.createElement(c,{vertical:!1,opacity:d}),e.createElement(s,{dataKey:h,stroke:a,style:{fontSize:"0.7rem"}}),e.createElement(p,{width:C,domain:f,stroke:a,style:{fontSize:"0.7rem"}}),e.createElement(A,{key:t.dataKey,dataKey:t.dataKey,name:t.name,stackId:"1",type:"monotone",stroke:o,strokeWidth:1.2,fill:o}))):e.createElement(E,{height:100})};export{I as CheckHistoryChart};
2
2
  //# sourceMappingURL=CheckHistoryChart.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as u}from"@backstage/core-components";import{useApi as k,configApiRef as C}from"@backstage/core-plugin-api";import{makeStyles as h,useTheme as x,Paper as E,Typography as R,Box as N,Button as b}from"@material-ui/core";import y from"@material-ui/icons/CheckCircleOutlined";import w from"@material-ui/icons/ErrorOutline";import i from"@material-ui/icons/InfoOutlined";import A from"@material-ui/icons/RemoveCircleOutline";import F from"@material-ui/icons/WarningOutlined";import r,{useState as S}from"react";import{ResultState as e}from"../../graphql/generated/index.esm.js";import{FixMeDialog as v}from"./FixMeDialog.esm.js";const B=h(a=>({markdownContent:{"& :last-child":{marginBottom:0},"& pre":{background:`${a.palette.background.paper} !important`}},root:{padding:a.spacing(2),display:"flex",gap:a.spacing(1.5)},iconContainer:{marginTop:1},passed:{},failed:{},warning:{},notReported:{},notApplicable:{},error:{},icon:{}}),{name:"CheckResultStateBox"}),P={[e.Passed]:y,[e.Failed]:w,[e.Warning]:F,[e.NotReported]:i,[e.NotApplicable]:i,[e.Error]:A},W={[e.Passed]:"Check passed",[e.Failed]:"Check did not pass",[e.Warning]:"Check produced warning(s)",[e.NotReported]:"Check not reported",[e.NotApplicable]:"Check not applicable",[e.Error]:"Check encountered an error."},$={[e.Passed]:"passed",[e.Failed]:"failed",[e.Warning]:"warning",[e.NotReported]:"notReported",[e.NotApplicable]:"notApplicable",[e.Error]:"error"},O=(a,t)=>({[e.Passed]:t.palette.success.main,[e.Failed]:t.palette.error.main,[e.Warning]:t.palette.warning.main,[e.NotReported]:t.palette.text.primary,[e.NotApplicable]:t.palette.text.primary,[e.Error]:t.palette.error.main})[a],T=({name:a,state:t,notes:l,templateRef:p})=>{const n=B(),m=x(),c=P[t]??i,[s,o]=S(!1),d=k(C).getOptionalStringArray("soundcheck.flags")?.includes("enable-fix-me"),g=()=>{o(!0)},f=()=>{o(!1)};return r.createElement(E,{variant:"outlined",className:`${n.root} ${n[$[t]]}`},r.createElement("div",{className:n.iconContainer},r.createElement(c,{className:n.icon,htmlColor:O(t,m)})),r.createElement("div",{style:{width:"100%"}},r.createElement(R,{variant:"subtitle1"},W[t]),l?r.createElement(u,{className:n.markdownContent,content:l}):null,d&&t===e.Failed&&p&&r.createElement(N,{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:2,width:"100%"},r.createElement(b,{color:"primary",variant:"contained",onClick:g},"Fix"),r.createElement(v,{title:`Fix ${a}`,open:s,setOpen:o,onClose:f,templateRef:p}))))};export{T as ResultStateBox};
1
+ import{MarkdownContent as d}from"@backstage/core-components";import{useApi as g,configApiRef as f}from"@backstage/core-plugin-api";import{makeStyles as u,Paper as k,Typography as C,Box as h,Button as x}from"@material-ui/core";import t,{useState as E}from"react";import{ResultState as e}from"../../graphql/generated/index.esm.js";import{CheckIcon as R}from"../CheckIcon/CheckIcon.esm.js";import{FixMeDialog as b}from"./FixMeDialog.esm.js";const w=u(a=>({markdownContent:{"& :last-child":{marginBottom:0},"& pre":{background:`${a.palette.background.paper} !important`}},root:{padding:a.spacing(2),display:"flex",gap:a.spacing(1.5)},iconContainer:{marginTop:1},passed:{},failed:{},warning:{},notReported:{},notApplicable:{},error:{},icon:{}}),{name:"CheckResultStateBox"}),y={[e.Passed]:"Check passed",[e.Failed]:"Check did not pass",[e.Warning]:"Check produced warning(s)",[e.NotReported]:"Check not reported",[e.NotApplicable]:"Check not applicable",[e.Error]:"Check encountered an error."},N={[e.Passed]:"passed",[e.Failed]:"failed",[e.Warning]:"warning",[e.NotReported]:"notReported",[e.NotApplicable]:"notApplicable",[e.Error]:"error"},A=({name:a,state:n,notes:i,templateRef:l})=>{const o=w(),[c,r]=E(!1),p=g(f).getOptionalStringArray("soundcheck.flags")?.includes("enable-fix-me"),s=()=>{r(!0)},m=()=>{r(!1)};return t.createElement(k,{variant:"outlined",className:`${o.root} ${o[N[n]]}`},t.createElement("div",{className:o.iconContainer},t.createElement(R,{className:o.icon,result:n})),t.createElement("div",{style:{width:"100%"}},t.createElement(C,{variant:"subtitle1"},y[n]),i?t.createElement(d,{className:o.markdownContent,content:i}):null,p&&n===e.Failed&&l&&t.createElement(h,{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:2,width:"100%"},t.createElement(x,{color:"primary",variant:"contained",onClick:s},"Fix"),t.createElement(b,{title:`Fix ${a}`,open:c,setOpen:r,onClose:m,templateRef:l}))))};export{A as ResultStateBox};
2
2
  //# sourceMappingURL=ResultStateBox.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as C,Box as p,Typography as k,TextField as y,IconButton as v,Button as d,Divider as x}from"@material-ui/core";import B from"@material-ui/icons/Add";import S from"@material-ui/icons/Delete";import e,{useContext as E,useCallback as r}from"react";import{SoundcheckDialog as h}from"../../../../SoundcheckDialog/SoundcheckDialog.esm.js";import{ValueListContext as f}from"./ValueListContext.esm.js";const V=C(t=>({dialogButton:{padding:t.spacing(1,1.5)}})),I=()=>{const{values:t,updateValues:n,updateOpen:i,onSave:o}=E(f),u=r((a,l)=>{const s=[...t];s[a]=l,n(s)},[n,t]),c=r(a=>{const l=[...t];l.splice(a,1),n(l)},[n,t]),m=r(()=>{const a=[...t,""];n(a)},[n,t]),g=r(()=>{o(t.filter(a=>!!a)),i(!1)},[o,i,t]);return e.createElement(p,{minWidth:640,paddingLeft:2,paddingRight:2,"data-testid":"rule-value-list-input"},e.createElement(k,{component:"div",variant:"subtitle2"},"Rule Value"),t.map((a,l)=>e.createElement(p,{display:"flex",marginBottom:1,alignItems:"center",key:l},e.createElement(y,{value:a,onChange:s=>u(l,s.currentTarget.value),variant:"outlined",margin:"dense",fullWidth:!0}),e.createElement(v,{onClick:()=>c(l),size:"small"},e.createElement(S,null)))),e.createElement(p,{marginTop:1,marginBottom:2},e.createElement(d,{onClick:m,startIcon:e.createElement(B,null),size:"small",variant:"outlined"},"Add")),e.createElement(x,null),e.createElement(p,{marginTop:2,display:"flex",gridGap:8,justifyContent:"flex-end"},e.createElement(d,{onClick:()=>i(!1),variant:"text"},"Cancel"),e.createElement(d,{onClick:g,variant:"contained",color:"primary"},"Save")))},L=({values:t=Array(5).fill(""),onSave:n,iconButton:i})=>{const{updateOpen:o,updateValues:u,updateOnSave:c}=E(f),m=r(()=>{const a=[...t.map(l=>String(l)),"","",""];o(!0),u(a),c(()=>n||(()=>{}))},[n,c,o,u,t]),g=V();return i?e.createElement(v,{"aria-label":"edit list",onClick:m,size:"small"},i):e.createElement(d,{className:g.dialogButton,onClick:m},"List")},T=()=>{const{open:t,updateOpen:n}=E(f);return e.createElement(h,{open:t,handleClose:()=>n(!1),title:"Input Value List",fullScreen:!1},e.createElement(I,null))};export{T as ValueListInputDialog,L as ValueListInputDialogButton};
1
+ import{makeStyles as C,Box as p,Typography as k,TextField as x,IconButton as v,Button as d,Divider as y}from"@material-ui/core";import B from"@material-ui/icons/Add";import S from"@material-ui/icons/Delete";import e,{useContext as E,useCallback as r}from"react";import{SoundcheckDialog as V}from"../../../../SoundcheckDialog/SoundcheckDialog.esm.js";import{ValueListContext as f}from"./ValueListContext.esm.js";const h=C(t=>({dialogButton:{padding:t.spacing(1,1.5)}})),I=()=>{const{values:t,updateValues:n,updateOpen:i,onSave:o}=E(f),u=r((a,l)=>{const s=[...t];s[a]=l,n(s)},[n,t]),c=r(a=>{const l=[...t];l.splice(a,1),n(l)},[n,t]),m=r(()=>{const a=[...t,""];n(a)},[n,t]),g=r(()=>{o(t.filter(a=>!!a)),i(!1)},[o,i,t]);return e.createElement(p,{minWidth:640,paddingLeft:2,paddingRight:2,"data-testid":"rule-value-list-input"},e.createElement(k,{component:"div",variant:"subtitle2"},"Rule Value"),t.map((a,l)=>e.createElement(p,{display:"flex",marginBottom:1,alignItems:"center",key:l},e.createElement(x,{value:a,onChange:s=>u(l,s.currentTarget.value),variant:"outlined",margin:"dense",fullWidth:!0}),e.createElement(v,{onClick:()=>c(l),size:"small"},e.createElement(S,null)))),e.createElement(p,{marginTop:1,marginBottom:2},e.createElement(d,{onClick:m,startIcon:e.createElement(B,null),size:"small",variant:"outlined"},"Add")),e.createElement(y,null),e.createElement(p,{marginTop:2,display:"flex",gridGap:8,justifyContent:"flex-end"},e.createElement(d,{onClick:()=>i(!1),variant:"text"},"Cancel"),e.createElement(d,{onClick:g,variant:"contained",color:"primary"},"Save")))},L=({values:t=Array(5).fill(""),onSave:n,iconButton:i})=>{const{updateOpen:o,updateValues:u,updateOnSave:c}=E(f),m=r(()=>{const a=[...t.map(l=>String(l)),"","",""];o(!0),u(a),c(()=>n||(()=>{}))},[n,c,o,u,t]),g=h();return i?e.createElement(v,{"aria-label":"edit list",onClick:m,size:"small"},i):e.createElement(d,{className:g.dialogButton,onClick:m},"List")},T=()=>{const{open:t,updateOpen:n}=E(f);return e.createElement(V,{open:t,handleClose:()=>n(!1),title:"Input Value List",fullScreen:!1},e.createElement(I,null))};export{T as ValueListInputDialog,L as ValueListInputDialogButton};
2
2
  //# sourceMappingURL=ValueListInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{FrequencySchema as b}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as S}from"lodash";import{v4 as T}from"uuid";import{mapInputFilterToFormFilters as k,mapFiltersToInputFilter as R,mapFiltersToCatalogFilter as A}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as C}from"../../Filter/types.esm.js";import{TimeUnit as y}from"../../Frequency/types.esm.js";import{isTimeUnit as O}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as p}from"../types/ExpressionType.esm.js";import{defaultSchedule as P}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as M}from"./validation.esm.js";const g=e=>{if(S(e)&&"frequency"in e){const r=b.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:y.Hours,value:1,cron:t.cron}};const s=Object.keys(t);if(s.length){const o=s[0];if(O(o))return{enabled:!0,frequency:{type:"HumanDuration",unit:o,value:t[o]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:y.Hours,value:1,cron:""}}},x=(e,r)=>{const{enabled:t,frequency:s}=e;if(t){const{cron:o,type:n,unit:a,value:l}=s;return n==="HumanDuration"?{frequency:{[a]:l},filter:A(r)}:{frequency:{cron:o}}}},h=e=>{if(Array.isArray(e))return e.map(r=>h(r));if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const r=Number(e);if(!isNaN(r))return r}return e},f=e=>{if(!e)return{};if(e.expressionType){const r={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operatorPrefix?`${t.operatorPrefix}:${t.operator}`:t.operator,value:h(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{r[e.expressionType]?.push(f(t))}),r}if(e.expressions)return e.expressions.map(f);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,value:h(r.value)}}return{}},v=e=>{if(e?.match(/.:./)){const r=e.split(":");if(["all","any","none"].includes(r[0]))return{operator:r[1],operatorPrefix:r[0]}}return{}},m=(e,r=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e);let s=t.includes("all")||r&&!t.includes("any")?p.AllOf:p.AnyOf;if(t.includes("not")&&(s=p.Not),t.includes(s)||r){const a=e[s]||[e],l=[],u=[];return a.forEach(i=>{const d=Object.keys(i);if(d.includes("all")||d.includes("any")||d.includes("not"))u.push(m(i,!1));else{const{operator:w,operatorPrefix:E}=v(i.operator);l.push({factRef:i.factRef,path:i.path,operator:w??i.operator,value:i.value,operatorPrefix:E})}}),{expressions:u.length>0?u:void 0,conditions:l,expressionType:s}}const{operator:o,operatorPrefix:n}=v(e.operator);return{expressionType:p.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:o??e.operator,value:e.value,operatorPrefix:n}]}},F=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{pathResolver:e.pathResolver??"jsonpath",expressions:m(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:k(e.filter)},scheduleStep:{schedule:g(e.schedule)}}),q=(e,r)=>{const{detailsStep:t,rulesStep:s,filtersStep:o,scheduleStep:n}=e;return{id:r?r.id:T(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,pathResolver:s.pathResolver,passedMessage:s.passedMessage??void 0,failedMessage:s.failedMessage??void 0,rule:f(s.expressions),warning:s.warning??!1,filter:o.filter?R(o.filter):void 0,schedule:x(n.schedule,o.filter)}},c=(e,r="$")=>{const t=[];if(e.type==="object"&&e.properties){const s=e.properties;for(const o in s)if(s.hasOwnProperty(o)){const n=`${r}.${o}`;t.push(n);const a=s[o];t.push(...c(a,n))}}if(e.type==="array"&&e.items){const s=`${r}[*]`;t.push(s);const o=Array.isArray(e.items)?e.items:[e.items];for(const n of o)t.push(...c(n,s))}if(e.oneOf){const s=Array.isArray(e.oneOf)?e.oneOf:[e.oneOf];for(const o of s)t.push(...c(o,r))}if(e.allOf){const s=Array.isArray(e.allOf)?e.allOf:[e.allOf];for(const o of s)t.push(...c(o,r))}return[...new Set(t)]},N={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{pathResolver:"jsonpath",expressions:{expressionType:p.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:C()},scheduleStep:{schedule:P()}},$={details:{name:{name:"Check name",helperText:`Max ${M} characters`,placeholder:"Name your check (e.g., 'Code Coverage\u2019)"},description:{name:"Check description",placeholder:"Describe your check clearly so others understand its purpose. e.g., 'Ensure code coverage meets the minimum threshold.'"},owner:{name:"Check owner",selectLabel:"Assign an owner"}},rulesStep:{rules:{name:"Check rules",description:"Define the rules the check will verify."},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages for check success and failure.",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable to classify failures as warnings, so they don\u2019t impact certification.",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{$ as CHECK_FIELDS,N as DEFAULT_FORM_VALUES,c as generateJsonPaths,F as mapCheckerToFormValues,f as mapExpressionToRule,g as mapInputScheduleToSchedule,m as mapRuleToExpression,x as mapScheduleToInputSchedule,q as mapToCheckerInput};
1
+ import{FrequencySchema as S}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as k}from"lodash";import{v4 as T}from"uuid";import{mapInputFilterToFormFilters as R,mapFiltersToCatalogFilter as y}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as A}from"../../Filter/types.esm.js";import{TimeUnit as g}from"../../Frequency/types.esm.js";import{isTimeUnit as C}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as p}from"../types/ExpressionType.esm.js";import{defaultSchedule as O}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as P}from"./validation.esm.js";const x=e=>{if(k(e)&&"frequency"in e){const r=S.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:g.Hours,value:1,cron:t.cron}};const s=Object.keys(t);if(s.length){const o=s[0];if(C(o))return{enabled:!0,frequency:{type:"HumanDuration",unit:o,value:t[o]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:g.Hours,value:1,cron:""}}},v=(e,r)=>{const{enabled:t,frequency:s}=e;if(t){const{cron:o,type:n,unit:a,value:l}=s;return n==="HumanDuration"?{frequency:{[a]:l},filter:y(r)}:{frequency:{cron:o}}}},h=e=>{if(Array.isArray(e))return e.map(r=>h(r));if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const r=Number(e);if(!isNaN(r))return r}return e},f=e=>{if(!e)return{};if(e.expressionType){const r={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operatorPrefix?`${t.operatorPrefix}:${t.operator}`:t.operator,value:h(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{r[e.expressionType]?.push(f(t))}),r}if(e.expressions)return e.expressions.map(f);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,value:h(r.value)}}return{}},w=e=>{if(e?.match(/.:./)){const r=e.split(":");if(["all","any","none"].includes(r[0]))return{operator:r[1],operatorPrefix:r[0]}}return{}},m=(e,r=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e);let s=t.includes("all")||r&&!t.includes("any")?p.AllOf:p.AnyOf;if(t.includes("not")&&(s=p.Not),t.includes(s)||r){const a=e[s]||[e],l=[],u=[];return a.forEach(i=>{const d=Object.keys(i);if(d.includes("all")||d.includes("any")||d.includes("not"))u.push(m(i,!1));else{const{operator:E,operatorPrefix:b}=w(i.operator);l.push({factRef:i.factRef,path:i.path,operator:E??i.operator,value:i.value,operatorPrefix:b})}}),{expressions:u.length>0?u:void 0,conditions:l,expressionType:s}}const{operator:o,operatorPrefix:n}=w(e.operator);return{expressionType:p.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:o??e.operator,value:e.value,operatorPrefix:n}]}},M=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{pathResolver:e.pathResolver??"jsonpath",expressions:m(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:R(e.filter)},scheduleStep:{schedule:x(e.schedule)}}),F=(e,r)=>{const{detailsStep:t,rulesStep:s,filtersStep:o,scheduleStep:n}=e;return{id:r?r.id:T(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,pathResolver:s.pathResolver,passedMessage:s.passedMessage??void 0,failedMessage:s.failedMessage??void 0,rule:f(s.expressions),warning:s.warning??!1,filter:o.filter?y(o.filter):void 0,schedule:v(n.schedule,o.filter)}},c=(e,r="$")=>{const t=[];if(e.type==="object"&&e.properties){const s=e.properties;for(const o in s)if(s.hasOwnProperty(o)){const n=`${r}.${o}`;t.push(n);const a=s[o];t.push(...c(a,n))}}if(e.type==="array"&&e.items){const s=`${r}[*]`;t.push(s);const o=Array.isArray(e.items)?e.items:[e.items];for(const n of o)t.push(...c(n,s))}if(e.oneOf){const s=Array.isArray(e.oneOf)?e.oneOf:[e.oneOf];for(const o of s)t.push(...c(o,r))}if(e.allOf){const s=Array.isArray(e.allOf)?e.allOf:[e.allOf];for(const o of s)t.push(...c(o,r))}return[...new Set(t)]},q={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{pathResolver:"jsonpath",expressions:{expressionType:p.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:A()},scheduleStep:{schedule:O()}},N={details:{name:{name:"Check name",helperText:`Max ${P} characters`,placeholder:"Name your check (e.g., 'Code Coverage\u2019)"},description:{name:"Check description",placeholder:"Describe your check clearly so others understand its purpose. e.g., 'Ensure code coverage meets the minimum threshold.'"},owner:{name:"Check owner",selectLabel:"Assign an owner"}},rulesStep:{rules:{name:"Check rules",description:"Define the rules the check will verify."},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages for check success and failure.",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable to classify failures as warnings, so they don\u2019t impact certification.",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{N as CHECK_FIELDS,q as DEFAULT_FORM_VALUES,c as generateJsonPaths,M as mapCheckerToFormValues,f as mapExpressionToRule,x as mapInputScheduleToSchedule,m as mapRuleToExpression,v as mapScheduleToInputSchedule,F as mapToCheckerInput};
2
2
  //# sourceMappingURL=checkFormUtils.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{usePermission as p}from"@backstage/plugin-permission-react";import{soundcheckCheckUpdatePermission as c}from"@spotify/backstage-plugin-soundcheck-common";import e from"react";import{useParams as d}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as l}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.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{useGetChecks as f}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{LoadingIndicator as h}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as u}from"../PageWarningMessage/PageWarningMessage.esm.js";import{CheckEditView as g}from"./CheckEditView.esm.js";const k=()=>{const{checkId:o}=d(),{data:m,isLoading:n}=f({ids:[o??""],first:1}),r=m?.edges?.[0]?.node,{loading:s,allowed:a}=p({permission:c,resourceRef:o}),t=s||n,i=a&&r?.isEditable;return e.createElement(e.Fragment,null,e.createElement(u,{entityName:"check",entityId:o,showCannotEdit:!t&&!i,showNotFound:!t&&!r}),t&&e.createElement(h,null),e.createElement(l,null,!t&&!!r&&i&&e.createElement(g,{check:r})))};export{k as CheckEditPage};
2
+ //# sourceMappingURL=CheckEditPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as T}from"@backstage/catalog-model";import{useApi as D,configApiRef as P}from"@backstage/core-plugin-api";import{EntityDisplayName as B}from"@backstage/plugin-catalog-react";import{makeStyles as G,Checkbox as f,Box as W,Typography as _}from"@material-ui/core";import j from"@material-ui/icons/Category";import z from"@material-ui/icons/Class";import K from"@material-ui/icons/Group";import M from"@material-ui/icons/Loop";import Q from"@material-ui/icons/PlaylistAddCheckRounded";import e,{useMemo as d}from"react";import{useGetEntityFacets as s}from"../../../hooks/catalog/useGetEntityFacets.esm.js";import{useGroupOptions as U}from"../../../hooks/groups/useGroupOptions.esm.js";import{CheckIcon as V}from"../../CheckIcon/CheckIcon.esm.js";import l from"../../MultiSelectFilter/MultiSelectFilter.esm.js";function X(t){return t.toLowerCase().split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}const y=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(f,{value:t,checked:r,color:"primary"}),e.createElement(B,{entityRef:t,hideIcon:!0})),$=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(f,{value:t,checked:r,color:"primary"}),e.createElement(V,{result:t}),e.createElement(W,{mr:1}),e.createElement(_,null,X(t))),q=G(t=>({root:{display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(2)}})),H=({filter:t,states:r,setStates:u,owners:E,setOwners:g,lifecycles:h,setLifecycles:L,types:b,setTypes:A,systems:F,setSystems:k})=>{const O=q(),n=D(P).getOptionalStringArray("soundcheck.flags")?.includes("enable-check-insights"),{options:i,isLoading:w}=U(),S=d(()=>i.map(o=>o.ref),[i]),{data:a,isLoading:C}=s("spec.lifecycle",t,n),{data:m,isLoading:R}=s("spec.type",t,n),{data:c,isLoading:x}=s("relations.partOf",t,n),p=d(()=>c?.filter(o=>{try{return T(o).kind.toLowerCase()==="system"}catch{return!1}}),[c]),I=(a||[]).length<=1,N=(m||[]).length<=1,v=(p||[]).length<=1;return e.createElement("div",{className:O.root},e.createElement(l,{name:"state",label:"State",icon:e.createElement(Q,null),options:["PASSED","FAILED","WARNING","NOT_APPLICABLE"],filters:r,setFilters:u,customRenderOption:$}),n&&e.createElement("div",null,e.createElement(l,{name:"system",label:"System",icon:e.createElement(j,null),filters:F,setFilters:k,options:p??[],disabled:x||v,customRenderOption:y}),e.createElement(l,{name:"owner",label:"Owner",icon:e.createElement(K,null),filters:E,setFilters:g,options:S??[],disabled:w,customRenderOption:y}),e.createElement(l,{name:"type",label:"Type",icon:e.createElement(z,null),filters:b,setFilters:A,options:m??[],disabled:R||N}),e.createElement(l,{name:"lifecycle",label:"Lifecycle",icon:e.createElement(M,null),filters:h,setFilters:L,options:a??[],disabled:C||I})))};export{H as FilterBar};
1
+ import{parseEntityRef as x}from"@backstage/catalog-model";import{EntityDisplayName as T}from"@backstage/plugin-catalog-react";import{makeStyles as D,Checkbox as p,Box as P,Typography as B}from"@material-ui/core";import G from"@material-ui/icons/Category";import j from"@material-ui/icons/Class";import W from"@material-ui/icons/Group";import _ from"@material-ui/icons/Loop";import z from"@material-ui/icons/PlaylistAddCheckRounded";import e,{useMemo as f}from"react";import{useGetEntityFacets as o}from"../../../hooks/catalog/useGetEntityFacets.esm.js";import{useGroupOptions as H}from"../../../hooks/groups/useGroupOptions.esm.js";import{CheckIcon as J}from"../../CheckIcon/CheckIcon.esm.js";import l from"../../MultiSelectFilter/MultiSelectFilter.esm.js";function M(t){return t.toLowerCase().split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}const d=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(p,{value:t,checked:r,color:"primary"}),e.createElement(T,{entityRef:t,hideIcon:!0})),Q=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(p,{value:t,checked:r,color:"primary"}),e.createElement(J,{result:t}),e.createElement(P,{mr:1}),e.createElement(B,null,M(t))),U=D(t=>({root:{display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(2)}})),$=({filter:t,states:r,setStates:y,owners:E,setOwners:u,lifecycles:g,setLifecycles:L,types:h,setTypes:b,systems:F,setSystems:w})=>{const O=U(),{options:s,isLoading:k}=H(),A=f(()=>s.map(n=>n.ref),[s]),{data:i,isLoading:C}=o("spec.lifecycle",t),{data:a,isLoading:I}=o("spec.type",t),{data:m,isLoading:S}=o("relations.partOf",t),c=f(()=>m?.filter(n=>{try{return x(n).kind.toLowerCase()==="system"}catch{return!1}}),[m]),N=(i||[]).length<=1,R=(a||[]).length<=1,v=(c||[]).length<=1;return e.createElement("div",{className:O.root},e.createElement(l,{name:"state",label:"State",icon:e.createElement(z,null),options:["PASSED","FAILED","WARNING","NOT_APPLICABLE"],filters:r,setFilters:y,customRenderOption:Q}),e.createElement("div",null,e.createElement(l,{name:"system",label:"System",icon:e.createElement(G,null),filters:F,setFilters:w,options:c??[],disabled:S||v,customRenderOption:d}),e.createElement(l,{name:"owner",label:"Owner",icon:e.createElement(W,null),filters:E,setFilters:u,options:A??[],disabled:k,customRenderOption:d}),e.createElement(l,{name:"type",label:"Type",icon:e.createElement(j,null),filters:h,setFilters:b,options:a??[],disabled:I||R}),e.createElement(l,{name:"lifecycle",label:"Lifecycle",icon:e.createElement(_,null),filters:g,setFilters:L,options:i??[],disabled:C||N})))};export{$ as FilterBar};
2
2
  //# sourceMappingURL=FilterBar.esm.js.map