@spotify/backstage-plugin-soundcheck 0.14.4 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/config.d.ts +14 -0
- package/dist/alpha.d.ts +17 -17
- package/dist/api.esm.js +1 -1
- package/dist/components/Badges/LevelBadge.esm.js +1 -1
- package/dist/components/Badges/StatusBadge.esm.js +2 -0
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
- package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/DaysRemainingTile.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
- package/dist/components/CertificationSidebar/StatusDetails.esm.js +2 -0
- package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistProgress.esm.js +1 -1
- package/dist/components/Charts/LineChart/LineChartPlaceholder.esm.js +1 -1
- package/dist/components/CheckCard/CheckCard.esm.js +1 -1
- package/dist/components/CheckCard/CheckHistoryChart.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
- package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
- package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckForm/utils/checkFormUtils.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditPage.esm.js +2 -0
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/BigQuery/css/prism-dark-sql.css.esm.js +260 -0
- package/dist/components/CollectorPage/Configurators/BigQuery/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorSchedulingOptions.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Gitlab/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/NewRelic/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ExistsFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/FactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
- package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/EntityTableColumns.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
- package/dist/components/Filter/types.esm.js +1 -1
- package/dist/components/Filter/utils.esm.js +1 -1
- package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +2 -0
- package/dist/components/FormFilterSection/FormFilterSection.esm.js +1 -1
- package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
- package/dist/components/Frequency/util.esm.js +1 -1
- package/dist/components/LevelCard/LevelCard.esm.js +1 -1
- package/dist/components/LevelCard/LevelTooltip.esm.js +1 -1
- package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageHeader.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/TrackBadgeCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
- package/dist/components/OverviewTable/resultsTableUtils.esm.js +1 -1
- package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
- package/dist/components/PassRateTable/PassRateTable.esm.js +2 -2
- package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
- package/dist/components/Router.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
- package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
- package/dist/components/TechHealth/TechHealth.esm.js +1 -1
- package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
- package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +2 -0
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
- package/dist/components/TrackPage/TrackLevelsChart.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +141 -109
- package/dist/hooks/aggregations/useCheckStatusHistories.esm.js +2 -0
- package/dist/hooks/aggregations/useCheckStatuses.esm.js +2 -0
- package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +1 -1
- package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
- package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
- package/dist/hooks/facets/useFacetsForOwner.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/groups/useAllGroups.esm.js +1 -1
- package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
- package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
- package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
- package/dist/hooks/tracks/useUpdateTrack.esm.js +1 -1
- package/dist/images/bigquery-rgb.svg +15 -0
- package/dist/images/bigquery-white.svg +15 -0
- package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +2 -0
- package/dist/utils/export.esm.js +3 -3
- package/dist/utils/getGroupFilterFromConfig.esm.js +2 -0
- package/package.json +25 -21
- package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +0 -2
- package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +0 -2
- package/dist/components/CheckPage/CheckDetailsView.esm.js +0 -2
- package/dist/components/CheckPage/CheckPage.esm.js +0 -2
- package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +0 -2
- package/dist/components/Filter/FilterPreviewTable/EntityKindsFilter.esm.js +0 -2
- package/dist/components/Filter/FilterPreviewTable/EntitySystemsFilter.esm.js +0 -2
- package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +0 -2
- package/dist/components/Filter/FilterPreviewTable/EntityTagFilter.esm.js +0 -2
- package/dist/components/OverviewPage/CampaignBanner/CampaignArea.esm.js +0 -2
- package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +0 -2
- package/dist/components/OverviewPage/CampaignBanner/useCampaignBannerStyles.esm.js +0 -2
- package/dist/components/OverviewPage/CampaignBanner/utils.esm.js +0 -2
- package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# @spotify/backstage-plugin-soundcheck
|
|
2
2
|
|
|
3
|
+
## 0.15.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 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.
|
|
8
|
+
|
|
9
|
+
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.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Fixes code block in descriptions overflowing summary card content.
|
|
14
|
+
- Add better display when there is no data or there are no applicable entities on the track and campaign insights pages.
|
|
15
|
+
- Align SCM Integration UI with rest of Integration UI styles.
|
|
16
|
+
- Adjust entity preview table to work with exclude filters.
|
|
17
|
+
- Aligning check state icons across Soundcheck.
|
|
18
|
+
- Adjust check, track and campaign edit page permissions.
|
|
19
|
+
- Added possibility to configure track badges that display check status and check pass percentage:
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
badge:
|
|
23
|
+
type: 'status'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- Added regex `flags` configuration option to SCM Integration No-Code UI.
|
|
27
|
+
- Default values from yaml for SCM, Github, GitLab and Kubernetes integrations now propagate to new entries in the UI.
|
|
28
|
+
- Add Initial Delay to integration UI config. Previously this was a YAML only config option.
|
|
29
|
+
- Update to Backstage `v1.35.0`
|
|
30
|
+
- Updated dependencies
|
|
31
|
+
- @spotify/backstage-plugin-core@0.8.5
|
|
32
|
+
- @spotify/backstage-plugin-soundcheck-common@0.15.0
|
|
33
|
+
|
|
34
|
+
## 0.14.5
|
|
35
|
+
|
|
36
|
+
### Patch Changes
|
|
37
|
+
|
|
38
|
+
- Update to Backstage `v1.34.0`
|
|
39
|
+
- Remove campaign card from Soundcheck overview page. This campagin card has been superceded by the campagin insights page.
|
|
40
|
+
- Add batch size configuration to UI for integrations.
|
|
41
|
+
- Added GitHub `BranchRules` fact type (returns all active rules that apply to the specified branch).
|
|
42
|
+
- Overview pivot view toggle setting is now saved in local storage.
|
|
43
|
+
- Added support for specifying a filter Soundcheck will use when querying the catalog for groups.
|
|
44
|
+
- Small fix to include the path resolver in exported checks.
|
|
45
|
+
- Overview page now fetches items from cache and database. This should improve load times for users with large amounts of entities and/or checks.
|
|
46
|
+
- Resolves an issue with initial page size on the insight pages.
|
|
47
|
+
- Updated dependencies
|
|
48
|
+
- @spotify/backstage-plugin-core@0.8.4
|
|
49
|
+
- @spotify/backstage-plugin-soundcheck-common@0.14.5
|
|
50
|
+
|
|
3
51
|
## 0.14.4
|
|
4
52
|
|
|
5
53
|
### Patch Changes
|
package/config.d.ts
CHANGED
|
@@ -17,5 +17,19 @@ export interface Config {
|
|
|
17
17
|
* @visibility frontend
|
|
18
18
|
*/
|
|
19
19
|
flags?: string[];
|
|
20
|
+
/**
|
|
21
|
+
* Provide additional filters when loading entities from the catalog.
|
|
22
|
+
*
|
|
23
|
+
* @deepVisibility frontend
|
|
24
|
+
*/
|
|
25
|
+
entityFilters?: {
|
|
26
|
+
/**
|
|
27
|
+
* The filter to use when Soundcheck is looking for groups in the catalog. This should restrict groups to only
|
|
28
|
+
* those types who can own entities, and their ancestors.
|
|
29
|
+
*
|
|
30
|
+
* @deepVisibility frontend
|
|
31
|
+
*/
|
|
32
|
+
group?: EntityFilter;
|
|
33
|
+
};
|
|
20
34
|
};
|
|
21
35
|
}
|
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;#
|
|
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
|
|
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 t,{useEffect as s}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as r,useCampaignFormContext as c}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{useCreateCampaign as g}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{campaignsPageRouteRef as l}from"../../routes.esm.js";import{CampaignForm as f}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as C}from"../SoundcheckHeader/useHeader.esm.js";const d=()=>{const{setIsLoading:e}=c(),{mutateAsync:m,isLoading:o}=g();s(()=>{e(o)},[e,o]);const[a,i]=u(l),n=async p=>{await m(p,{onSuccess:i})};return C({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),t.createElement(r,null,t.createElement(f,{onSave:n,onCancel:a}))},E=()=>t.createElement(r,null,t.createElement(d,null));export{E as CampaignCreatePage};
|
|
1
|
+
import t,{useEffect as s}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as r,useCampaignFormContext as c}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{useCreateCampaign as g}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{campaignsPageRouteRef as l}from"../../routes.esm.js";import{CampaignForm as f}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as C}from"../SoundcheckHeader/useHeader.esm.js";const d=()=>{const{setIsLoading:e}=c(),{mutateAsync:m,isLoading:o}=g();s(()=>{e(o)},[e,o]);const[a,i]=u(l),n=async p=>{await m(p,{onSuccess:i})};return C({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),t.createElement(r,null,t.createElement(f,{onSave:n,onCancel:a}))},E=()=>t.createElement(r,null,t.createElement(d,null));export{E as CampaignCreatePage};
|
|
2
2
|
//# sourceMappingURL=CampaignCreatePage.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{zodResolver as h}from"@hookform/resolvers/zod";import{useMemo as d}from"react";import{useForm as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as F}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as V}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as k}from"../utils/validation.esm.js";import{mapCampaignToFormValues as M,mapCampaignFormDataToCampaignInput as v}from"./utils.esm.js";const L=(e,o)=>{const
|
|
1
|
+
import{zodResolver as h}from"@hookform/resolvers/zod";import{useMemo as d}from"react";import{useForm as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as F}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as V}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as k}from"../utils/validation.esm.js";import{mapCampaignToFormValues as M,mapCampaignFormDataToCampaignInput as v}from"./utils.esm.js";const L=(e,o)=>{const m=d(()=>o?M(o):V,[o]),{control:t,handleSubmit:a,getValues:i,setValue:p,trigger:s,formState:{errors:n}}=C({defaultValues:m,mode:"onChange",resolver:h(k)}),{showModal:u}=S(),{checksMap:c,checkChips:g,checksLoading:l}=F();return{control:t,handleSubmit:a,getValues:i,setValue:p,trigger:s,errors:n,onSubmit:async r=>{if(!await u({title:"Save Campaign",message:`Are you sure you want to save campaign: ${r.detailsStep.name}?`,error:!1}))return;const f=v(r,o,c);e(f)},checkChips:g,checksLoading:l}};export{L as useCampaignForm};
|
|
2
2
|
//# sourceMappingURL=useCampaignForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{MarkdownContent as
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as l,Tab as d}from"@material-ui/core";import t from"react";import{Link as g}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{CertificationBadge as b}from"../Badges/CertificationBadge.esm.js";const
|
|
1
|
+
import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as l,Tab as d}from"@material-ui/core";import t from"react";import{Link as g}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{CertificationBadge as b}from"../Badges/CertificationBadge.esm.js";const o=l(e=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)},wrapper:{display:"inline-block",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},badge:{marginRight:e.spacing(1)}})),u=({id:e,name:a,badge:i,href:p,selected:m=!1})=>{const r=o(),{entity:n}=c(),{data:s}=f(n,e);return t.createElement(d,{className:r.root,classes:{wrapper:r.wrapper},value:e,label:t.createElement(t.Fragment,null,t.createElement(b,{badge:i,trackType:s?.program.type,className:r.badge}),a),component:g,to:p,selected:m})};export{u as CertificationTab,o as useStyles};
|
|
2
2
|
//# sourceMappingURL=CertificationTab.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
|
|
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{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as h,Paper as I,Divider as k}from"@material-ui/core";import e from"react";import{useParams as g}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as l}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";import{CheckDetails as w}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as D}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as N}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as S}from"./CertificationTabs.esm.js";import{PlaylistComponent as T}from"./Playlist/PlaylistComponent.esm.js";const n=h(t=>({paper:{overflow:"hidden",position:"relative",border:R(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),A=()=>{const{playlistId:t,trackId:r,checkId:a}=g(),m=n(),{entity:i}=v(),{isError:p,isFetched:s,data:c}=C(i),{isError:d,data:f}=P(i);if(p||d)return e.createElement(l,{severity:"error",title:"Error loading certifications"});const o=t&&f?.find(E=>E.id===t);if(t&&!o)return e.createElement(l,{severity:"error",title:"Playlist ${playlistId} not found."});if(s&&!c?.length)return e.createElement(N,null);const y=i?u(i):void 0;return e.createElement(D,null,e.createElement(I,{className:m.paper},e.createElement(x,null),e.createElement(S,{playlistId:t,trackId:r}),e.createElement(k,null),o&&e.createElement(T,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:m.view},e.createElement("div",{className:m.sidebar},e.createElement(b,{trackId:r,checkId:a})),e.createElement(w,{programId:r,checkId:a}),e.createElement($,{programId:r}))))};export{A as CertificationsPage,n as useStyles};
|
|
1
|
+
import{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as h,Paper as I,Divider as k}from"@material-ui/core";import e from"react";import{useParams as g}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as l}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";import{CheckDetails as w}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as D}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as N}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as S}from"./CertificationTabs.esm.js";import{PlaylistComponent as T}from"./Playlist/PlaylistComponent.esm.js";const n=h(t=>({paper:{overflow:"hidden",position:"relative",border:R(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),A=()=>{const{playlistId:t,trackId:r,checkId:a}=g(),m=n(),{entity:i}=v(),{isError:p,isFetched:s,data:c}=C(i),{isError:d,data:f}=P(i);if(p||d)return e.createElement(l,{severity:"error",title:"Error loading certifications"});const o=t&&f?.find(E=>E.id===t);if(t&&!o)return e.createElement(l,{severity:"error",title:"Playlist ${playlistId} not found."});if(s&&!c?.length)return e.createElement(N,null);const y=i?u(i):void 0;return e.createElement(D,null,e.createElement(I,{className:m.paper},e.createElement(x,null),e.createElement(S,{playlistId:t,trackId:r}),e.createElement(k,null),o&&e.createElement(T,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:m.view},e.createElement("div",{className:m.sidebar},e.createElement(b,{trackId:r,checkId:a})),e.createElement(w,{programId:r,checkId:a}),e.createElement($,{programId:r}))))};export{A as CertificationsPage,n as useStyles};
|
|
2
2
|
//# sourceMappingURL=CertificationsPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import n,{createContext as m,useContext as s}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useCertificationDetails as a}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const i=m(void 0),
|
|
1
|
+
import n,{createContext as m,useContext as s}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useCertificationDetails as a}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const i=m(void 0),p=()=>{const t=s(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},c=t=>{const{children:r,entityRef:e}=t,o=a(e);return n.createElement(i.Provider,{value:o},r)};export{c as PlaylistCertificationProvider,p as usePlaylistCertificationContext};
|
|
2
2
|
//# sourceMappingURL=PlaylistContext.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{LinearGauge as
|
|
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
|
|
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
|
|
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
|
|
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 t,{useEffect as n}from"react";import{v4 as u}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as d,useCheckFormContext as f}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"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useCheckTemplates as h}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as k}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as C}from"../../hooks/useSearchParam.esm.js";import{checksPageRouteRef as y}from"../../routes.esm.js";import{CheckForm as E}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{LoadingIndicator as I}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as L}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../SoundcheckHeader/useHeader.esm.js";const P=({template:e})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=f(),{mutateAsync:i,isLoading:a}=k();n(()=>{r(e?{...e,id:u()}:null)},[e,r]),n(()=>{o(a)},[o,a]);const[c,s]=g(y),p=async l=>{await i(l,{onSuccess:s})};return F({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&!m?null:t.createElement(E,{onSave:p,onClose:c})},v=()=>{const[[e]]=C("template"),{isLoading:o,data:m}=h(),r=e&&m?m.find(i=>i.id===e)??null:null;return t.createElement(t.Fragment,null,t.createElement(L,{entityName:"check template",entityId:e,showNotFound:!!e&&!o&&!r}),o&&t.createElement(I,null),t.createElement(d,null,!o&&(!e||r)&&t.createElement(P,{template:r})))};export{v as CheckCreatePage};
|
|
1
|
+
import t,{useEffect as n}from"react";import{v4 as u}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as d,useCheckFormContext as f}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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useCheckTemplates as h}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as k}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as C}from"../../hooks/useSearchParam.esm.js";import{checksPageRouteRef as y}from"../../routes.esm.js";import{CheckForm as E}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{LoadingIndicator as I}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as L}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../SoundcheckHeader/useHeader.esm.js";const P=({template:e})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=f(),{mutateAsync:i,isLoading:a}=k();n(()=>{r(e?{...e,id:u()}:null)},[e,r]),n(()=>{o(a)},[o,a]);const[c,s]=g(y),p=async l=>{await i(l,{onSuccess:s})};return F({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&!m?null:t.createElement(E,{onSave:p,onClose:c})},v=()=>{const[[e]]=C("template"),{isLoading:o,data:m}=h(),r=e&&m?m.find(i=>i.id===e)??null:null;return t.createElement(t.Fragment,null,t.createElement(L,{entityName:"check template",entityId:e,showNotFound:!!e&&!o&&!r}),o&&t.createElement(I,null),t.createElement(d,null,!o&&(!e||r)&&t.createElement(P,{template:r})))};export{v as CheckCreatePage};
|
|
2
2
|
//# sourceMappingURL=CheckCreatePage.esm.js.map
|