@spotify/backstage-plugin-soundcheck 0.14.0 → 0.14.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 (50) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/alpha/apis.esm.js +1 -1
  4. package/dist/alpha/entity-content.esm.js +1 -1
  5. package/dist/alpha/pages.esm.js +1 -1
  6. package/dist/alpha/plugin.esm.js +1 -1
  7. package/dist/alpha/sidebar-item.esm.js +1 -1
  8. package/dist/alpha.d.ts +121 -1
  9. package/dist/api.esm.js +1 -1
  10. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  11. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  12. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
  13. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  14. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  15. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  16. package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +1 -1
  17. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  18. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  19. package/dist/components/FactExplorer/FactExplorerContext.esm.js +1 -1
  20. package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
  21. package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
  22. package/dist/components/GroupSelector/GroupSelector.esm.js +1 -1
  23. package/dist/components/OverviewPage/CampaignBanner/CampaignArea.esm.js +2 -0
  24. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  25. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  26. package/dist/components/OverviewPage/OverviewPageHeader.esm.js +2 -0
  27. package/dist/components/OverviewPage/index.esm.js +1 -1
  28. package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
  29. package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +2 -0
  30. package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +1 -1
  31. package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +1 -1
  32. package/dist/components/OverviewTable/Cell/TrackLevelHeaderCell.esm.js +1 -1
  33. package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
  34. package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
  35. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  36. package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
  37. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  38. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  39. package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
  40. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  41. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  42. package/dist/graphql/generated/index.esm.js +7 -5
  43. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  44. package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +1 -1
  45. package/dist/hooks/checks/useGetChecks.esm.js +1 -1
  46. package/dist/index.d.ts +4 -4
  47. package/dist/utils/filters.esm.js +1 -1
  48. package/package.json +19 -20
  49. package/dist/components/OverviewPage/OverviewTabs.esm.js +0 -2
  50. package/dist/components/OverviewPage/OverviewTabsSkeleton.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.14.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Update to Backstage v1.31.1
8
+ - Minor fixes and improvements
9
+ - Replaces tabs on the Soundcheck overview page with selection based navigation including a basic entity name search function.
10
+ - Adjust Soundcheck header styling to show up better on certain backgrounds.
11
+ - Check Insights page's History chart now includes date labels on the X-axis.
12
+ - Making Fact Explorer Dialog aware of selected check filters and limiting the max number of entities it loads by default.
13
+ - Fixed standalone Soundcheck overview page by removing campaign headers for non SoundcheckRoutingPage usages.
14
+ - Campaign page will filter by status active by default.
15
+ - Resolved an issue with searching for campaigns, checks, and tracks by name.
16
+ - Fix issue with sorting entities on the check insights page.
17
+ - Add pivot function to overview table to flip x and y axis.
18
+ - Updated dependencies
19
+ - Updated dependencies
20
+ - Updated dependencies
21
+ - Updated dependencies
22
+ - Updated dependencies
23
+ - @spotify/backstage-plugin-core@0.8.1
24
+ - @spotify/backstage-plugin-soundcheck-common@0.14.1
25
+
3
26
  ## 0.14.0
4
27
 
5
28
  ### Minor Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck__alpha",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
@@ -1,2 +1,2 @@
1
- import{createApiExtension as c,createApiFactory as i,discoveryApiRef as o,fetchApiRef as p}from"@backstage/frontend-plugin-api";import{soundcheckApiRef as r,SoundcheckApi as t}from"../api.esm.js";const f=c({factory:i({api:r,deps:{discoveryApi:o,fetchApi:p},factory:e=>new t(e)})});export{f as soundcheckApi};
1
+ import{ApiBlueprint as p,createApiFactory as c,discoveryApiRef as i,fetchApiRef as o}from"@backstage/frontend-plugin-api";import{soundcheckApiRef as r,SoundcheckApi as t}from"../api.esm.js";const f=p.make({params:{factory:c({api:r,deps:{discoveryApi:i,fetchApi:o},factory:e=>new t(e)})}});export{f as soundcheckApi};
2
2
  //# sourceMappingURL=apis.esm.js.map
@@ -1,2 +1,2 @@
1
- import{convertLegacyRouteRef as n,compatWrapper as t}from"@backstage/core-compat-api";import{createEntityContentExtension as r,createEntityCardExtension as a}from"@backstage/plugin-catalog-react/alpha";import o from"react";import{entityRootRouteRef as c,groupRootRouteRef as u}from"../routes.esm.js";const i=r({defaultPath:"soundcheck",defaultTitle:"Soundcheck",name:"entity",routeRef:n(c),loader:()=>import("../components/EntitySoundcheckContent.esm.js").then(e=>t(o.createElement(e.EntitySoundcheckContent,null)))}),d=a({name:"card",loader:()=>import("../components/EntitySoundcheckCard/index.esm.js").then(e=>t(o.createElement(e.EntitySoundcheckCard,null)))}),l=r({defaultPath:"soundcheck",defaultTitle:"Soundcheck",name:"group",routeRef:n(u),attachTo:{id:"page:catalog/group-details",input:"contents"},loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>t(o.createElement(e.FixedGroupOverviewPage,null)))});export{d as entitySoundcheckCard,i as entitySoundcheckContent,l as groupSoundcheckContent};
1
+ import{convertLegacyRouteRef as n,compatWrapper as t}from"@backstage/core-compat-api";import{EntityContentBlueprint as a,EntityCardBlueprint as r}from"@backstage/plugin-catalog-react/alpha";import o from"react";import{entityRootRouteRef as c,groupRootRouteRef as u}from"../routes.esm.js";const i=a.make({name:"entity",params:{defaultPath:"soundcheck",defaultTitle:"Soundcheck",routeRef:n(c),loader:()=>import("../components/EntitySoundcheckContent.esm.js").then(e=>t(o.createElement(e.EntitySoundcheckContent,null)))}}),m=r.make({name:"card",params:{loader:()=>import("../components/EntitySoundcheckCard/index.esm.js").then(e=>t(o.createElement(e.EntitySoundcheckCard,null)))}}),d=a.make({name:"group",attachTo:{id:"page:catalog/group-details",input:"contents"},params:{defaultPath:"soundcheck",defaultTitle:"Soundcheck",routeRef:n(u),loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>t(o.createElement(e.FixedGroupOverviewPage,null)))}});export{m as entitySoundcheckCard,i as entitySoundcheckContent,d as groupSoundcheckContent};
2
2
  //# sourceMappingURL=entity-content.esm.js.map
@@ -1,2 +1,2 @@
1
- import{convertLegacyRouteRef as o,compatWrapper as t}from"@backstage/core-compat-api";import{createPageExtension as r}from"@backstage/frontend-plugin-api";import a from"react";import{rootRouteRef as n}from"../routes.esm.js";const c=r({name:"SoundcheckRoutingPage",namespace:"soundcheck",routeRef:o(n),defaultPath:"/soundcheck",loader:()=>import("../components/RoutingPage/index.esm.js").then(e=>t(a.createElement(e.RoutingPage,null)))}),u=r({name:"overview",namespace:"soundcheck",routeRef:o(n),defaultPath:"/soundcheck",loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>t(a.createElement(e.OverviewPage,null)))});export{u as soundcheckOverviewPage,c as soundcheckRoutingPage};
1
+ import{convertLegacyRouteRef as o,compatWrapper as t}from"@backstage/core-compat-api";import{PageBlueprint as r}from"@backstage/frontend-plugin-api";import a from"react";import{rootRouteRef as m}from"../routes.esm.js";const n=r.make({name:"SoundcheckRoutingPage",params:{routeRef:o(m),defaultPath:"/soundcheck",loader:()=>import("../components/RoutingPage/index.esm.js").then(e=>t(a.createElement(e.RoutingPage,null)))}}),u=r.make({name:"overview",params:{routeRef:o(m),defaultPath:"/soundcheck",loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>t(a.createElement(e.OverviewPage,null)))}});export{u as soundcheckOverviewPage,n as soundcheckRoutingPage};
2
2
  //# sourceMappingURL=pages.esm.js.map
@@ -1,2 +1,2 @@
1
- import{createPlugin as e}from"@backstage/frontend-plugin-api";import{soundcheckApi as o}from"./apis.esm.js";import{entitySoundcheckContent as n,entitySoundcheckCard as t,groupSoundcheckContent as c}from"./entity-content.esm.js";import{soundcheckRoutingPage as r,soundcheckOverviewPage as i}from"./pages.esm.js";import{soundcheckSidebarItem as u}from"./sidebar-item.esm.js";var d=e({id:"soundcheck",extensions:[r,i,o,n,t,c,u]});export{d as default};
1
+ import{createFrontendPlugin as e}from"@backstage/frontend-plugin-api";import{soundcheckApi as o}from"./apis.esm.js";import{entitySoundcheckContent as n,entitySoundcheckCard as t,groupSoundcheckContent as r}from"./entity-content.esm.js";import{soundcheckRoutingPage as c,soundcheckOverviewPage as i}from"./pages.esm.js";import{soundcheckSidebarItem as d}from"./sidebar-item.esm.js";var u=e({id:"soundcheck",extensions:[c,i,o,n,t,r,d]});export{u as default};
2
2
  //# sourceMappingURL=plugin.esm.js.map
@@ -1,2 +1,2 @@
1
- import{convertLegacyRouteRef as o}from"@backstage/core-compat-api";import{createNavItemExtension as e}from"@backstage/frontend-plugin-api";import t from"@material-ui/icons/DoneAll";import{rootRouteRef as r}from"../routes.esm.js";const m=e({title:"Soundcheck",icon:t,routeRef:o(r)});export{m as soundcheckSidebarItem};
1
+ import{convertLegacyRouteRef as o}from"@backstage/core-compat-api";import{NavItemBlueprint as e}from"@backstage/frontend-plugin-api";import t from"@material-ui/icons/DoneAll";import{rootRouteRef as r}from"../routes.esm.js";const m=e.make({params:{title:"Soundcheck",icon:t,routeRef:o(r)}});export{m as soundcheckSidebarItem};
2
2
  //# sourceMappingURL=sidebar-item.esm.js.map
package/dist/alpha.d.ts CHANGED
@@ -1,10 +1,130 @@
1
+ /// <reference types="react" />
2
+ import * as _backstage_catalog_model from '@backstage/catalog-model';
3
+ import * as react from 'react';
1
4
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
+ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
2
6
 
3
7
  /**
4
8
  * @public
5
9
  **
6
10
  * The Soundcheck plugin for use within Backstage´s new frontend system
7
11
  */
8
- declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{}, {}, {}>;
12
+ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
13
+ "api:soundcheck": _backstage_frontend_plugin_api.ExtensionDefinition<{
14
+ kind: "api";
15
+ namespace: undefined;
16
+ name: undefined;
17
+ config: {};
18
+ configInput: {};
19
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
20
+ inputs: {};
21
+ }>;
22
+ "entity-content:soundcheck/entity": _backstage_frontend_plugin_api.ExtensionDefinition<{
23
+ kind: "entity-content";
24
+ namespace: undefined;
25
+ name: "entity";
26
+ config: {
27
+ path: string | undefined;
28
+ title: string | undefined;
29
+ filter: string | undefined;
30
+ };
31
+ configInput: {
32
+ filter?: string | undefined;
33
+ title?: string | undefined;
34
+ path?: string | undefined;
35
+ };
36
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
37
+ optional: true;
38
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
39
+ optional: true;
40
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
41
+ optional: true;
42
+ }>;
43
+ inputs: {};
44
+ }>;
45
+ "nav-item:soundcheck": _backstage_frontend_plugin_api.ExtensionDefinition<{
46
+ kind: "nav-item";
47
+ namespace: undefined;
48
+ name: undefined;
49
+ config: {};
50
+ configInput: {};
51
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
52
+ title: string;
53
+ icon: _backstage_core_plugin_api.IconComponent;
54
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
55
+ }, "core.nav-item.target", {}>;
56
+ inputs: {};
57
+ }>;
58
+ "entity-card:soundcheck/card": _backstage_frontend_plugin_api.ExtensionDefinition<{
59
+ kind: "entity-card";
60
+ namespace: undefined;
61
+ name: "card";
62
+ config: {
63
+ filter: string | undefined;
64
+ };
65
+ configInput: {
66
+ filter?: string | undefined;
67
+ };
68
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
69
+ optional: true;
70
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
71
+ optional: true;
72
+ }>;
73
+ inputs: {};
74
+ }>;
75
+ "entity-content:soundcheck/group": _backstage_frontend_plugin_api.ExtensionDefinition<{
76
+ kind: "entity-content";
77
+ namespace: undefined;
78
+ name: "group";
79
+ config: {
80
+ path: string | undefined;
81
+ title: string | undefined;
82
+ filter: string | undefined;
83
+ };
84
+ configInput: {
85
+ filter?: string | undefined;
86
+ title?: string | undefined;
87
+ path?: string | undefined;
88
+ };
89
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
90
+ optional: true;
91
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
92
+ optional: true;
93
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
94
+ optional: true;
95
+ }>;
96
+ inputs: {};
97
+ }>;
98
+ "page:soundcheck/SoundcheckRoutingPage": _backstage_frontend_plugin_api.ExtensionDefinition<{
99
+ kind: "page";
100
+ namespace: undefined;
101
+ name: "SoundcheckRoutingPage";
102
+ config: {
103
+ path: string | undefined;
104
+ };
105
+ configInput: {
106
+ path?: string | undefined;
107
+ };
108
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
109
+ optional: true;
110
+ }>;
111
+ inputs: {};
112
+ }>;
113
+ "page:soundcheck/overview": _backstage_frontend_plugin_api.ExtensionDefinition<{
114
+ kind: "page";
115
+ namespace: undefined;
116
+ name: "overview";
117
+ config: {
118
+ path: string | undefined;
119
+ };
120
+ configInput: {
121
+ path?: string | undefined;
122
+ };
123
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
124
+ optional: true;
125
+ }>;
126
+ inputs: {};
127
+ }>;
128
+ }>;
9
129
 
10
130
  export { _default as default };
package/dist/api.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiRef as i}from"@backstage/core-plugin-api";import{GraphQLClient as c}from"graphql-request";import{getSdk as h}from"./graphql/generated/index.esm.js";const o=i({id:"plugin.soundcheck"}),u=r=>"response"in r&&"errors"in r.response,g=r=>"response"in r&&"message"in r.response;class y{#a;#s;#t;constructor(t){this.#a=t.fetchApi,this.#s=t.discoveryApi;const e=new c("/graphql",{fetch:async(a,s)=>{const n=`${await this.#s.getBaseUrl("soundcheck")}${a}`;return this.#a.fetch(n,s)}});this.#t=h(e)}#r=t=>u(t)?t.response?.errors?.[0].message??`${t}`:g(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){return this.#e(async()=>{const{programOverviewForOwner:n}=await this.#t.getProgramOverviewForOwner({ownerEntityRef:t,facet:e,first:a,after:s});return n})}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 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{y 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 o}from"./graphql/generated/index.esm.js";const u=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=o(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 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,u as soundcheckApiRef};
2
2
  //# sourceMappingURL=api.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as Y,useApi as $,featureFlagsApiRef as q}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{makeStyles as J,Grid as i,Button as K}from"@material-ui/core";import{soundcheckCampaignCreatePermission as Q}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as n,useEffect as U}from"react";import{useNavigate as V}from"react-router-dom";import X from"react-use/lib/useDebounce";import{useGetCampaignOwners as Z}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as _}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{campaignCreateRouteRef as ee}from"../../../routes.esm.js";import{FilterDefault as p}from"../../../utils/filters.esm.js";import{EmptyCampaignState as ae}from"../CampaignEmptyState.esm.js";import{EmptyState as te}from"../../EmptyState/EmptyState.esm.js";import{Pagination as re}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ne}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignsOverviewSkeleton as ie}from"./CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as se}from"./CampaignSummaryCard.esm.js";import oe from"./useArchiveConfirmationModal.esm.js";var E=(a=>(a.title="No campaigns found",a.description="No campaigns matched your search. Consider changing search term and filters.",a))(E||{});const me=J(a=>({headerButtons:{display:"flex",gap:a.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:a.spacing(0,0,1)},container:{padding:a.spacing(3),gap:a.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:a.spacing(1.5),paddingBottom:a.spacing(1.5)}})),le=({campaignsPerPage:a,currentCursor:v})=>{const s=me(),[d,N]=n(v),[m,y]=n(""),[S,w]=n(""),[u,x]=n(p.Alpha),[f,b]=n(p.Owner),[h,B]=n(p.Status),{data:A,isLoading:k}=Z();X(()=>{w(m)},500,[m]);const{loading:F,allowed:I}=z({permission:Q}),{data:r,isLoading:l}=_({ids:void 0,first:a,after:d,orderAlphabetical:u,searchByOwner:f,searchByName:S,searchByStatus:h}),R=V(),O=Y(ee),L=()=>R(O()),[c,G]=n(r),g=c?.edges.map(t=>t.node),[C,T]=n([]),P=$(q),D=!P.getRegisteredFlags().find(t=>t.name==="soundcheck-enable-campaigns")||P.isActive("soundcheck-enable-campaigns"),W=!I||!D,j=t=>{x(t.target.value)},H=t=>{b(t.target.value)},M=t=>{B(t.target.value)};if(U(()=>{r&&G(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]),!l&&!g)return e.createElement(ae,null);let o;return l?o=e.createElement(ie,null):g?.length?o=g.map(t=>e.createElement(i,{key:t.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},e.createElement(oe,null,e.createElement(se,{campaign:t})))):o=e.createElement(i,{xs:12,item:!0,role:"listitem","aria-label":"result"},e.createElement(te,{title:"No campaigns found",description:"No campaigns matched your search. Consider changing search term and filters."})),e.createElement(i,{container:!0,direction:"row",className:s.container},e.createElement(i,{container:!0,className:s.header},e.createElement(ne,{searchPlaceholder:"Search Available Campaigns",isLoading:l||k,searchTerm:m,setSearchTerm:y,filterAlpha:u,handleAlphabeticalFilterChange:j,filterOwner:f,handleOwnerFilterChange:H,filterStatus:h,handleStatusFilterChange:M,owners:A}),e.createElement(i,{item:!0,xs:2,className:s.headerButtons},!F&&e.createElement(K,{disabled:W,variant:"contained",color:"primary",onClick:L,className:s.createButton},"Create Campaign"))),e.createElement(i,{container:!0,spacing:4,role:"list","aria-label":"campaigns"},o),(c?.pageInfo.hasNextPage||C?.length>0)&&e.createElement(i,{item:!0,xs:12},e.createElement(re,{response:c,listingsPerPage:a,cursor:d,setCursor:N,prevCursors:C,setPrevCursors:T,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})))};export{le as CampaignListPage,E as CampaignNoResults};
1
+ import{useRouteRef as Y,useApi as $,featureFlagsApiRef as z}from"@backstage/core-plugin-api";import{usePermission as J}from"@backstage/plugin-permission-react";import{makeStyles as K,Grid as i,Button as Q}from"@material-ui/core";import{soundcheckCampaignCreatePermission as U}from"@spotify/backstage-plugin-soundcheck-common";import e,{useState as n,useEffect as y}from"react";import{useNavigate as V}from"react-router-dom";import X from"react-use/lib/useDebounce";import{useGetCampaignOwners as Z}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as _}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{campaignCreateRouteRef as ee}from"../../../routes.esm.js";import{FilterDefault as p}from"../../../utils/filters.esm.js";import{EmptyCampaignState as ae}from"../CampaignEmptyState.esm.js";import{EmptyState as te}from"../../EmptyState/EmptyState.esm.js";import{Pagination as re}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ne}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignsOverviewSkeleton as ie}from"./CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as se}from"./CampaignSummaryCard.esm.js";import oe from"./useArchiveConfirmationModal.esm.js";var S=(a=>(a.title="No campaigns found",a.description="No campaigns matched your search. Consider changing search term and filters.",a))(S||{});const me=K(a=>({headerButtons:{display:"flex",gap:a.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:a.spacing(0,0,1)},container:{padding:a.spacing(3),gap:a.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:a.spacing(1.5),paddingBottom:a.spacing(1.5)}})),le=({campaignsPerPage:a,currentCursor:x})=>{const s=me(),[d,u]=n(x),[m,b]=n(""),[f,w]=n(""),[h,B]=n(p.Alpha),[C,k]=n(p.Owner),[P,A]=n(p.Status),{data:F,isLoading:I}=Z();X(()=>{w(m)},500,[m]);const{loading:R,allowed:O}=J({permission:U}),{data:r,isLoading:l}=_({ids:void 0,first:a,after:d,orderAlphabetical:h,searchByOwner:C,searchByName:f,searchByStatus:P}),L=V(),G=Y(ee),T=()=>L(G()),[c,D]=n(r),g=c?.edges.map(t=>t.node),[E,v]=n([]);y(()=>{u(void 0),v([])},[f]);const N=$(z),W=!N.getRegisteredFlags().find(t=>t.name==="soundcheck-enable-campaigns")||N.isActive("soundcheck-enable-campaigns"),j=!O||!W,H=t=>{B(t.target.value)},q=t=>{k(t.target.value)},M=t=>{A(t.target.value)};if(y(()=>{r&&D(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]),!l&&!g)return e.createElement(ae,null);let o;return l?o=e.createElement(ie,null):g?.length?o=g.map(t=>e.createElement(i,{key:t.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},e.createElement(oe,null,e.createElement(se,{campaign:t})))):o=e.createElement(i,{xs:12,item:!0,role:"listitem","aria-label":"result"},e.createElement(te,{title:"No campaigns found",description:"No campaigns matched your search. Consider changing search term and filters."})),e.createElement(i,{container:!0,direction:"row",className:s.container},e.createElement(i,{container:!0,className:s.header},e.createElement(ne,{searchPlaceholder:"Search Available Campaigns",isLoading:l||I,searchTerm:m,setSearchTerm:b,filterAlpha:h,handleAlphabeticalFilterChange:H,filterOwner:C,handleOwnerFilterChange:q,filterStatus:P,handleStatusFilterChange:M,owners:F}),e.createElement(i,{item:!0,xs:2,className:s.headerButtons},!R&&e.createElement(Q,{disabled:j,variant:"contained",color:"primary",onClick:T,className:s.createButton},"Create Campaign"))),e.createElement(i,{container:!0,spacing:4,role:"list","aria-label":"campaigns"},o),(c?.pageInfo.hasNextPage||E?.length>0)&&e.createElement(i,{item:!0,xs:12},e.createElement(re,{response:c,listingsPerPage:a,cursor:d,setCursor:u,prevCursors:E,setPrevCursors:v,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})))};export{le as CampaignListPage,S as CampaignNoResults};
2
2
  //# sourceMappingURL=CampaignListPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Content as s}from"@backstage/core-components";import t from"react";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{formStyles as h}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormFilterSection as u}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as C}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as E}from"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as b}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as k}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as F}from"./Steps/CheckRulesStep.esm.js";import{CheckReviewStep as g}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as v}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as y}from"./useCheckForm.esm.js";const O=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:o,selectedItem:l}=f(),{formMethods:e,onSubmit:m}=y(p),a=h(),i=[{label:"Enter check details",content:()=>t.createElement(k,null)},{label:"Add rules",content:()=>t.createElement(F,null)},{label:"Choose the affected entities (Optional)",content:()=>t.createElement(u,{name:"filtersStep.filter",control:e.control,disabled:o,description:E.filter.description})},{label:"Set the check schedule (Optional)",content:()=>t.createElement(b,{control:e.control,disabled:o})},{label:"Review and test (Optional)",content:()=>t.createElement(g,null)}],c=l?[...Array(i.length).keys()]:[0];return t.createElement(S,null,t.createElement(s,{className:a.formWrapper},t.createElement(d,{...e},t.createElement("form",{onSubmit:e.handleSubmit(m)},t.createElement(C,{onClose:()=>r?r():void 0,handleSubmit:e.handleSubmit,trigger:e.trigger,onSubmit:m,initialVisited:c,stepNameMap:v,steps:i,isLoading:n,isReadOnly:o,saveButtonText:"Save Check"})))))};export{O as CheckForm};
1
+ import{Content as s}from"@backstage/core-components";import t from"react";import{FormProvider as d}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{formStyles as h}from"../../utils/formStyles.esm.js";import"@material-ui/core";import"@material-ui/icons/Search";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../FactExplorer/FactExplorer.esm.js";import{FactExplorerProvider as S}from"../FactExplorer/FactExplorerContext.esm.js";import{FormFilterSection as u}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as C}from"../FormStepper/FormStepper.esm.js";import"./FormFields/CheckNameInput/CheckNameInput.esm.js";import"./FormFields/PassFailMessageInput/PassFailMessageInput.esm.js";import"../FormMarkdownInput/FormMarkdownInput.esm.js";import{CHECK_FIELDS as E}from"./utils/checkFormUtils.esm.js";import"./FormFields/TeamDetailsInput/TeamDetailsInput.esm.js";import"./FormFields/RuleInput/AddMenuButton.esm.js";import"./FormFields/RuleInput/RuleInputBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionBox.esm.js";import"./FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js";import"@material-ui/icons/Close";import"@material-ui/icons/Delete";import"@material-ui/icons/List";import"@spotify/backstage-plugin-soundcheck-common";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"./FormFields/RuleInput/Conditions/styles.esm.js";import"@backstage/catalog-model";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"./FormFields/RuleInput/Conditions/ValueListInput.esm.js";import"./FormFields/RuleInput/Conditions/ConditionList.esm.js";import{ScheduleSection as b}from"./FormFields/CheckScheduleSection/ScheduleSection.esm.js";import"./FormFields/CheckPathResolverInput.esm.js";import{CheckDetailsStep as k}from"./Steps/CheckDetailsStep.esm.js";import{CheckRulesStep as F}from"./Steps/CheckRulesStep.esm.js";import{CheckReviewStep as g}from"./Steps/CheckReviewStep.esm.js";import"./types/ExpressionType.esm.js";import{CheckStepNameMapping as v}from"./types/CheckFormTypes.esm.js";import"../Frequency/types.esm.js";import"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";import"./types/Path.esm.js";import{useCheckForm as y}from"./useCheckForm.esm.js";const O=({onSave:p,onClose:r})=>{const{isLoading:n,isReadOnly:o,selectedItem:l}=f(),{formMethods:e,onSubmit:m}=y(p),a=h(),i=[{label:"Enter check details",content:()=>t.createElement(k,null)},{label:"Add rules",content:()=>t.createElement(F,null)},{label:"Choose the affected entities (Optional)",content:()=>t.createElement(u,{name:"filtersStep.filter",control:e.control,disabled:o,description:E.filter.description})},{label:"Set the check schedule (Optional)",content:()=>t.createElement(b,{control:e.control,disabled:o})},{label:"Review and test (Optional)",content:()=>t.createElement(g,null)}],c=l?[...Array(i.length).keys()]:[0];return t.createElement(s,{className:a.formWrapper},t.createElement(d,{...e},t.createElement(S,null,t.createElement("form",{onSubmit:e.handleSubmit(m)},t.createElement(C,{onClose:()=>r?r():void 0,handleSubmit:e.handleSubmit,trigger:e.trigger,onSubmit:m,initialVisited:c,stepNameMap:v,steps:i,isLoading:n,isReadOnly:o,saveButtonText:"Save Check"})))))};export{O as CheckForm};
2
2
  //# sourceMappingURL=CheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as R}from"@backstage/catalog-model";import{Table as v}from"@backstage/core-components";import{makeStyles as x}from"@material-ui/core";import L from"lodash";import d,{useState as z,useEffect as B,useCallback as p}from"react";import{CheckEntityField as a,Direction as f}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as T}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useCheckEntities as D}from"../../../hooks/entities/useCheckEntities.esm.js";import{toResultState as m}from"../utils.esm.js";import{columnFactories as n}from"./columns.esm.js";import{toCheckEntityRow as P}from"./utils.esm.js";const N=[n.createStateColumn(),n.createNameColumn(),n.createSystemColumn(),n.createOwnerColumn(),n.createSpecTypeColumn(),n.createSpecLifecycleColumn()],O=[a.State,a.Name,a.CheckPassRate,a.System,a.Owner,a.Type,a.Lifecycle],F=x({tableContainer:{display:"flex",flexDirection:"column",width:"100%",overflowX:"auto","& table":{boxSizing:"border-box","& th:first-child, & td:first-child":{paddingLeft:"6px"},"& th:last-child, & td:last-child":{paddingRight:"6px !important"}}}}),$=({checkId:g,trackId:u,filter:s,states:c})=>{const h=F(),[e,l]=z({orderBy:void 0,filter:s,states:c?.map(m).filter(t=>t!==void 0),pageInfo:{page:0,pageSize:10,direction:"forward",cursor:null}});B(()=>{l(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:s,states:c?.map(m).filter(i=>i!==void 0)}))},[s,c]);const{data:r,isLoading:y}=D({checkId:g,trackId:u,orderBy:e.orderBy,filter:e.filter,states:e.states?.length?e.states:void 0,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),C=p((t,i)=>{let o;t===-1?o=void 0:o={field:O[t],direction:i==="asc"?f.Asc:f.Desc},l({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),k=p((t,i)=>{const o=t>e.pageInfo.page?"forward":"backward",b=o==="forward"?r?.checkEntities.pageInfo.endCursor??null:r?.checkEntities.pageInfo.startCursor??null;l({...e,pageInfo:{page:t,pageSize:i,direction:o,cursor:b}})},[r,e]),I=r?.checkEntities.edges.map(t=>t.node.entityRef)??[],{data:w,isLoading:E}=T({entityRefs:I}),S=L.compact(r?.checkEntities.edges.map(t=>{const i=w?.items.find(o=>!!o&&R(o)===t.node.entityRef);return i?P({checkDetails:t.node,entity:i}):void 0}))??[];return d.createElement("div",{className:h.tableContainer},d.createElement(v,{title:"Entities",style:{width:"100%",border:"none",margin:0},columns:N,data:S,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"bottom",emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],pageSize:10,search:!1,showTitle:!0,padding:"dense"},onOrderChange:C,onPageChange:k,page:e.pageInfo.page,totalCount:r?.checkEntities.totalCount??0,isLoading:y||E,components:{Toolbar:()=>null}}))};export{$ as CheckEntitiesTable};
1
+ import{stringifyEntityRef as v}from"@backstage/catalog-model";import{Table as R}from"@backstage/core-components";import{makeStyles as x}from"@material-ui/core";import L from"lodash";import d,{useState as z,useEffect as B,useCallback as p}from"react";import{CheckEntityField as n,Direction as f}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as T}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useCheckEntities as D}from"../../../hooks/entities/useCheckEntities.esm.js";import{toResultState as m}from"../utils.esm.js";import{columnFactories as r}from"./columns.esm.js";import{toCheckEntityRow as N}from"./utils.esm.js";const O=["kind","metadata.name","metadata.namespace","relations","spec.lifecycle","spec.type"],P=[r.createStateColumn(),r.createNameColumn(),r.createSystemColumn(),r.createOwnerColumn(),r.createSpecTypeColumn(),r.createSpecLifecycleColumn()],F=[n.State,n.Name,n.System,n.Owner,n.Type,n.Lifecycle],$=x({tableContainer:{display:"flex",flexDirection:"column",width:"100%",overflowX:"auto","& table":{boxSizing:"border-box","& th:first-child, & td:first-child":{paddingLeft:"6px"},"& th:last-child, & td:last-child":{paddingRight:"6px !important"}}}}),A=({checkId:g,trackId:u,filter:s,states:c})=>{const h=$(),[e,l]=z({orderBy:void 0,filter:s,states:c?.map(m).filter(t=>t!==void 0),pageInfo:{page:0,pageSize:10,direction:"forward",cursor:null}});B(()=>{l(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:s,states:c?.map(m).filter(i=>i!==void 0)}))},[s,c]);const{data:a,isLoading:y}=D({checkId:g,trackId:u,orderBy:e.orderBy,filter:e.filter,states:e.states?.length?e.states:void 0,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),C=p((t,i)=>{let o;t===-1?o=void 0:o={field:F[t],direction:i==="asc"?f.Asc:f.Desc},l({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),k=p((t,i)=>{const o=t>e.pageInfo.page?"forward":"backward",b=o==="forward"?a?.checkEntities.pageInfo.endCursor??null:a?.checkEntities.pageInfo.startCursor??null;l({...e,pageInfo:{page:t,pageSize:i,direction:o,cursor:b}})},[a,e]),I=a?.checkEntities.edges.map(t=>t.node.entityRef)??[],{data:w,isLoading:E}=T({entityRefs:I,fields:O}),S=L.compact(a?.checkEntities.edges.map(t=>{const i=w?.items.find(o=>!!o&&v(o)===t.node.entityRef);return i?N({checkDetails:t.node,entity:i}):void 0}))??[];return d.createElement("div",{className:h.tableContainer},d.createElement(R,{title:"Entities",style:{width:"100%",border:"none",margin:0},columns:P,data:S,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"bottom",emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],pageSize:10,search:!1,showTitle:!0,padding:"dense"},onOrderChange:C,onPageChange:k,page:e.pageInfo.page,totalCount:a?.checkEntities.totalCount??0,isLoading:y||E,components:{Toolbar:()=>null}}))};export{A as CheckEntitiesTable};
2
2
  //# sourceMappingURL=CheckEntitiesTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as K,Content as F}from"@backstage/core-components";import{useRouteRef as X}from"@backstage/core-plugin-api";import{EntityRefLink as Y}from"@backstage/plugin-catalog-react";import{usePermission as H}from"@backstage/plugin-permission-react";import{makeStyles as Z,useTheme as _,Button as $,Paper as ee,Grid as g,Card as y,CardHeader as E,CardContent as k}from"@material-ui/core";import{soundcheckCheckReadPermission as te,soundcheckCheckUpdatePermission as re,toEntityFilterQuery as C,combineEntityFilterQueries as ie}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as w}from"react";import{useParams as ne,useNavigate as oe}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as se}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as ce}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useSearchParam as l}from"../../hooks/useSearchParam.esm.js";import{checkEditRouteRef as le}from"../../routes.esm.js";import{LoadingIndicator as me}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as D}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as de}from"../SoundcheckHeader/useHeader.esm.js";import{CheckEntitiesTable as pe}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusBar as fe}from"./CheckStatusBar.esm.js";import{CheckStatusHistoryChart as ue}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as he}from"./CheckStatusTable.esm.js";import{FilterBar as ge}from"./FilterBar/FilterBar.esm.js";const ye=t=>{const{lifecycles:n,owners:r,types:o,systems:m}=t,s=n?.length?{"spec.lifecycle":n}:void 0,d=r?.length?{"relations.ownedBy":r}:void 0,a=o?.length?{"spec.type":o}:void 0,p=m?.length?{"relations.partOf":m}:void 0;if(s||d||a||p)return{...s,...d,...a,...p}};function Ee(t,n){for(const r of t.levels)for(const o of r.checks)if(o.id===n)return o;return null}const ke=Z(t=>({root:{height:"100%",background:t.palette.background.default},header:{backgroundColor:t.palette.background.paper,borderRadius:0,marginBottom:t.spacing(2)},content:{display:"flex",flexDirection:"column",gap:t.spacing(2),paddingTop:t.spacing(0)},editButton:{marginLeft:"auto"},filterBar:{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},headerDescription:{fontSize:t.typography.body2.fontSize,margin:t.spacing(.5,0,0),"& p":{margin:0}}})),Ce=()=>{const t=ke(),{trackId:n,checkId:r}=ne(),[o,m]=l("states"),[s,d]=l("owners"),[a,p]=l("lifecycles"),[S,M]=l("types"),[b,z]=l("systems"),u=ye({lifecycles:a,owners:s,types:S,systems:b}),{data:G,isLoading:I}=ae({ids:[n??""],first:1},{enabled:!!n}),c=G?.edges?.[0]?.node,{data:O,isLoading:v}=se({ids:[r??""],first:1}),i=O?.edges?.[0]?.node,{loading:Q,allowed:A}=H({permission:te,resourceRef:r}),{loading:R,allowed:B}=H({permission:re,resourceRef:r}),N=oe(),P=X(le),U=_();let h;if(r)if(c){const q=C(c.filter),J=C(Ee(c,r)?.filter);h=ie(q,J,!0)}else i&&(h=C(i.filter));const{data:f,isLoading:T}=ce({checkId:r,trackId:n,filter:u,states:o?.length?o:void 0},!!r),V=w(()=>i?.ownerEntityRef?e.createElement(Y,{color:"inherit",entityRef:i.ownerEntityRef}):null,[i?.ownerEntityRef]),W=w(()=>!R&&B&&i?.isEditable?e.createElement($,{className:t.editButton,variant:"contained",color:"primary",onClick:()=>{N(P({checkId:i.id}))}},"Edit Check"):null,[B,i?.id,i?.isEditable,t.editButton,P,R,N]),j=w(()=>i?.description?e.createElement(K,{className:t.headerDescription,content:i.description}):null,[t.headerDescription,i?.description]);de({title:i?.name??r??"Soundcheck",description:j,customSubtitle:V,sectionRight:W});const x=!v&&!i&&!T&&f?.numberOfEntities===0,L=!!n&&I||v||T;return e.createElement("div",null,e.createElement(D,{entityName:"track",entityId:n,showNotFound:!!n&&!I&&!c}),e.createElement(D,{entityName:"check",entityId:r,showNotFound:x,showCannotView:i&&!Q&&!A}),L&&e.createElement(me,null),!L&&!x&&e.createElement("div",{className:t.root},e.createElement(ee,{elevation:3,className:t.header},e.createElement(F,{className:t.filterBar},e.createElement(ge,{filter:h,states:o,setStates:m,owners:s,setOwners:d,lifecycles:a,setLifecycles:p,types:S,setTypes:M,systems:b,setSystems:z}))),e.createElement(F,{className:t.content},e.createElement(g,{container:!0,spacing:2},e.createElement(g,{item:!0,xs:4},e.createElement(y,{style:{height:"100%"}},e.createElement(E,{title:"Current Status"}),e.createElement(k,null,e.createElement("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start"}},e.createElement(fe,{checkStatus:f})),e.createElement("div",{style:{paddingTop:U.spacing(1)}},e.createElement(he,{checkStatus:f}))))),e.createElement(g,{item:!0,xs:8},e.createElement(y,{style:{height:"100%"}},e.createElement(E,{title:"Historical Status"}),e.createElement(k,{style:{height:"100%",paddingBottom:0}},e.createElement(ue,{checkId:r,trackId:n,checkStatus:f,filter:u,states:o}))))),e.createElement(y,null,e.createElement(E,{title:"Entities"}),e.createElement(k,null,e.createElement(pe,{checkId:r,trackId:c?.id,filter:u,states:o}))))))};export{Ce as CheckInsightsPage};
1
+ import{MarkdownContent as j,Content as x}from"@backstage/core-components";import{useRouteRef as q}from"@backstage/core-plugin-api";import{EntityRefLink as J}from"@backstage/plugin-catalog-react";import{usePermission as L}from"@backstage/plugin-permission-react";import{makeStyles as K,useTheme as X,Button as Y,Paper as Z,Grid as y,Card as E,CardHeader as k,CardContent as C}from"@material-ui/core";import{soundcheckCheckReadPermission as _,soundcheckCheckUpdatePermission as $,toEntityFilterQuery as w,combineEntityFilterQueries as ee}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as S}from"react";import{useParams as te,useNavigate as re}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as ie}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ne}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as oe}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useSearchParam as l}from"../../hooks/useSearchParam.esm.js";import{checkEditRouteRef as ae}from"../../routes.esm.js";import{LoadingIndicator as se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as P}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ce}from"../SoundcheckHeader/useHeader.esm.js";import{CheckEntitiesTable as le}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusBar as me}from"./CheckStatusBar.esm.js";import{CheckStatusHistoryChart as de}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as pe}from"./CheckStatusTable.esm.js";import{FilterBar as fe}from"./FilterBar/FilterBar.esm.js";const ue=t=>{const{lifecycles:n,owners:r,types:o,systems:m}=t,a=n?.length?{"spec.lifecycle":n}:void 0,d=r?.length?{"relations.ownedBy":r}:void 0,s=o?.length?{"spec.type":o}:void 0,p=m?.length?{"relations.partOf":m}:void 0;if(a||d||s||p)return{...a,...d,...s,...p}};function he(t,n){for(const r of t.levels)for(const o of r.checks)if(o.id===n)return o;return null}const ge=K(t=>({root:{height:"100%",background:t.palette.background.default},header:{backgroundColor:t.palette.background.paper,borderRadius:0,marginBottom:t.spacing(2)},content:{display:"flex",flexDirection:"column",gap:t.spacing(2),paddingTop:t.spacing(0)},editButton:{marginLeft:"auto"},filterBar:{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},headerDescription:{fontSize:t.typography.body2.fontSize,margin:t.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}}})),ye=()=>{const t=ge(),{trackId:n,checkId:r}=te(),[o,m]=l("states"),[a,d]=l("owners"),[s,p]=l("lifecycles"),[v,T]=l("types"),[I,D]=l("systems"),f=ue({lifecycles:s,owners:a,types:v,systems:I}),{data:F,isLoading:H}=ne({ids:[n??""],first:1},{enabled:!!n}),c=F?.edges?.[0]?.node,{data:G,isLoading:u}=ie({ids:[r??""],first:1}),i=G?.edges?.[0]?.node,{loading:M,allowed:z}=L({permission:_,resourceRef:r}),{loading:b,allowed:R}=L({permission:$,resourceRef:r}),B=re(),N=q(ae),O=X();let h;if(r)if(c){const V=w(c.filter),W=w(he(c,r)?.filter);h=ee(V,W,!0)}else i&&(h=w(i.filter));const{data:g}=oe({checkId:r,trackId:n,filter:f,states:o?.length?o:void 0},!!r),Q=S(()=>i?.ownerEntityRef?e.createElement(J,{color:"inherit",entityRef:i.ownerEntityRef,className:t.ownerLink}):null,[i?.ownerEntityRef,t.ownerLink]),A=S(()=>!b&&R&&i?.isEditable?e.createElement(Y,{className:t.editButton,variant:"contained",color:"primary",onClick:()=>{B(N({checkId:i.id}))}},"Edit Check"):null,[R,i?.id,i?.isEditable,t.editButton,N,b,B]),U=S(()=>i?.description?e.createElement(j,{className:t.headerDescription,content:i.description}):null,[t.headerDescription,i?.description]);return ce({title:i?.name??r??"Soundcheck",description:U,customSubtitle:Q,sectionRight:A}),e.createElement("div",null,e.createElement(P,{entityName:"track",entityId:n,showNotFound:!!n&&!H&&!c}),e.createElement(P,{entityName:"check",entityId:r,showNotFound:!u&&!i,showCannotView:i&&!M&&!z}),u&&e.createElement(se,null),!u&&!!i&&e.createElement("div",{className:t.root},e.createElement(Z,{elevation:3,className:t.header},e.createElement(x,{className:t.filterBar},e.createElement(fe,{filter:h,states:o,setStates:m,owners:a,setOwners:d,lifecycles:s,setLifecycles:p,types:v,setTypes:T,systems:I,setSystems:D}))),e.createElement(x,{className:t.content},e.createElement(y,{container:!0,spacing:2},e.createElement(y,{item:!0,xs:4},e.createElement(E,{style:{height:"100%"}},e.createElement(k,{title:"Current Status"}),e.createElement(C,null,e.createElement("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start"}},e.createElement(me,{checkStatus:g})),e.createElement("div",{style:{paddingTop:O.spacing(1)}},e.createElement(pe,{checkStatus:g}))))),e.createElement(y,{item:!0,xs:8},e.createElement(E,{style:{height:"100%"}},e.createElement(k,{title:"Historical Status"}),e.createElement(C,{style:{height:"90%",paddingBottom:0}},e.createElement(de,{checkId:r,trackId:n,checkStatus:g,filter:f,states:o}))))),e.createElement(E,null,e.createElement(k,{title:"Entities"}),e.createElement(C,null,e.createElement(le,{checkId:r,trackId:c?.id,filter:f,states:o}))))))};export{ye as CheckInsightsPage};
2
2
  //# sourceMappingURL=CheckInsightsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useTheme as h}from"@material-ui/core";import k from"@material-ui/lab/Skeleton";import t from"react";import{LineChart as u,CartesianGrid as f,XAxis as E,YAxis as i,Label as s,Line as o}from"recharts";import{useCheckStatusHistory as g}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{ChartWrapper as x}from"../Charts/ChartWrapper/ChartWrapper.esm.js";import"../Charts/LineChart/LineChart.esm.js";import"../Charts/ChartTypes.esm.js";import"../Charts/chartUtils.esm.js";import"luxon";import"../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"@backstage/catalog-model";import"../Charts/BarChart/BarChart.esm.js";const I=({checkId:a,trackId:m,checkStatus:r,filter:d,states:c})=>{const e=h(),{data:n,isLoading:p}=g({checkId:a,trackId:m,filter:d,states:c,numberOfDays:30},!!a&&!!r);if(!r||p)return t.createElement(k,{variant:"rect",width:"100%",height:"100%"});const l=n?.history.every(({notReported:y})=>y>=0);return t.createElement(x,{height:"90%"},t.createElement(u,{data:n?.history??[],margin:{top:0,right:0,left:0,bottom:0}},t.createElement(f,{stroke:e.palette.divider,verticalPoints:[]}),t.createElement(E,{dataKey:"name"}),t.createElement(i,{yAxisId:"percentage",orientation:"right",domain:[0,100]},t.createElement(s,{value:"Percentage",position:"center",angle:90})),t.createElement(i,{yAxisId:"count",domain:[0,r?.numberOfEntities??0]},t.createElement(s,{value:"Count",position:"center",angle:270,offset:2})),t.createElement(o,{type:"monotone",dataKey:"passed",stroke:e.palette.success.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(o,{type:"monotone",dataKey:"failed",stroke:e.palette.error.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(o,{type:"monotone",dataKey:"warning",stroke:e.palette.warning.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(o,{type:"monotone",dataKey:"notApplicable",stroke:e.palette.text.disabled,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(o,{type:"monotone",dataKey:"error",stroke:e.palette.error.light,yAxisId:"count",strokeWidth:2,dot:!1}),l&&t.createElement(o,{type:"monotone",dataKey:"notReported",stroke:e.palette.info.main,yAxisId:"count",strokeWidth:2,dot:!1})))};export{I as CheckStatusHistoryChart};
1
+ import{useTheme as E}from"@material-ui/core";import g from"@material-ui/lab/Skeleton";import{DateTime as x}from"luxon";import t from"react";import{LineChart as I,CartesianGrid as A,XAxis as C,YAxis as m,Label as s,Line as r}from"recharts";import{useCheckStatusHistory as v}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{ChartWrapper as K}from"../Charts/ChartWrapper/ChartWrapper.esm.js";import"../Charts/LineChart/LineChart.esm.js";import"../Charts/ChartTypes.esm.js";import"../Charts/chartUtils.esm.js";import"../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"@backstage/catalog-model";import"../Charts/BarChart/BarChart.esm.js";const W=({checkId:i,trackId:d,checkStatus:a,filter:c,states:l})=>{const e=E(),{data:n,isLoading:p}=v({checkId:i,trackId:d,filter:c,states:l,numberOfDays:30},!!i&&!!a);if(!a||p)return t.createElement(g,{variant:"rect",width:"100%",height:"100%"});const y=n?.history.every(({notReported:o})=>o>=0);return t.createElement(K,{height:"90%"},t.createElement(I,{data:n?.history??[],margin:{top:0,right:0,left:0,bottom:0}},t.createElement(A,{stroke:e.palette.divider,verticalPoints:[]}),t.createElement(C,{dataKey:"date",tickFormatter:o=>x.fromISO(o).toFormat("MMM d"),allowDuplicatedCategory:!1,height:40,tick:({x:o,y:h,fill:f,payload:k,tickFormatter:u})=>t.createElement("g",{transform:`translate(${o},${h})`},t.createElement("text",{x:0,y:0,dy:16,textAnchor:"end",fill:f,transform:"rotate(-20)",fontSize:12},u(k.value)))}),t.createElement(m,{yAxisId:"percentage",orientation:"right",domain:[0,100]},t.createElement(s,{value:"Percentage",position:"center",angle:90})),t.createElement(m,{yAxisId:"count",domain:[0,a?.numberOfEntities??0]},t.createElement(s,{value:"Count",position:"center",angle:270,offset:2})),t.createElement(r,{type:"monotone",dataKey:"passed",stroke:e.palette.success.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"failed",stroke:e.palette.error.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"warning",stroke:e.palette.warning.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"notApplicable",stroke:e.palette.text.disabled,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"error",stroke:e.palette.error.light,yAxisId:"count",strokeWidth:2,dot:!1}),y&&t.createElement(r,{type:"monotone",dataKey:"notReported",stroke:e.palette.info.main,yAxisId:"count",strokeWidth:2,dot:!1})))};export{W as CheckStatusHistoryChart};
2
2
  //# sourceMappingURL=CheckStatusHistoryChart.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Content as i,ItemCardGrid as s}from"@backstage/core-components";import{useRouteRef as p}from"@backstage/core-plugin-api";import{Typography as a,Box as n,Card as u,CardContent as d}from"@material-ui/core";import{makeStyles as k}from"@material-ui/core/styles";import f from"lodash";import e,{useMemo as g}from"react";import{Link as h}from"react-router-dom";import{useCheckTemplates as C}from"../../hooks/checks/useCheckTemplates.esm.js";import{checkCreateRouteRef as y}from"../../routes.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as b}from"../SoundcheckHeader/useHeader.esm.js";import{TemplateCategory as x}from"./TemplateCategory.esm.js";const L=k(t=>({content:{display:"flex",flexDirection:"column",gap:t.spacing(2)},grid:{marginLeft:t.spacing(2)},cardContent:{"&:hover":{backgroundColor:t.palette.action.hover}},docsLink:{color:t.palette.text.primary},link:{textDecoration:"none"}})),N=()=>{const t=L(),m=p(y),{data:o,isLoading:l}=C(),c=g(()=>f.groupBy(o??[],"category"),[o]);return b({title:"What would you like to check?",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e.createElement("div",null,l&&e.createElement(E,null),o&&o.length===0&&e.createElement(a,null,"No check templates."),o&&o.length&&e.createElement(i,{className:t.content},e.createElement(n,{className:t.grid},e.createElement(s,null,e.createElement(h,{to:m(),className:t.link},e.createElement(u,null,e.createElement(d,{className:t.cardContent},e.createElement(n,{mb:1},e.createElement(a,{variant:"h6"},"Custom Check")),e.createElement(a,null,"Create a custom check using the facts collected about your entities.")))))),Object.keys(c).sort().map(r=>e.createElement(x,{name:r,templates:c[r],key:r}))))};export{N as CheckTemplatesPage};
1
+ import{Content as i,ItemCardGrid as s}from"@backstage/core-components";import{useRouteRef as p}from"@backstage/core-plugin-api";import{Typography as a,Box as c,Card as d,CardContent as u}from"@material-ui/core";import{makeStyles as f}from"@material-ui/core/styles";import g from"lodash";import e,{useMemo as k}from"react";import{Link as h}from"react-router-dom";import{useCheckTemplates as y}from"../../hooks/checks/useCheckTemplates.esm.js";import{checkCreateRouteRef as C}from"../../routes.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as b}from"../SoundcheckHeader/useHeader.esm.js";import{TemplateCategory as v}from"./TemplateCategory.esm.js";const x=f(t=>({content:{display:"flex",flexDirection:"column",gap:t.spacing(2)},grid:{marginLeft:t.spacing(2)},cardContent:{"&:hover":{backgroundColor:t.palette.action.hover}},docsLink:{color:t.palette.text.primary},link:{textDecoration:"none"}})),L=()=>{const t=x(),m=p(C),{data:o,isLoading:l}=y(),n=k(()=>g.groupBy(o??[],"category"),[o]);return b({title:"What would you like to check?",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e.createElement("div",null,l&&e.createElement(E,null),o&&o.length===0&&e.createElement(a,null,"No check templates."),o&&o.length&&e.createElement(i,{className:t.content},e.createElement(c,{className:t.grid},e.createElement(s,null,e.createElement(h,{to:m(),className:t.link},e.createElement(d,null,e.createElement(u,{className:t.cardContent},e.createElement(c,{mb:1},e.createElement(a,{variant:"subtitle1",style:{fontWeight:"bold"},component:"div"},"Custom Check")),e.createElement(a,{variant:"body1"},"Create a custom check using the facts collected about your entities.")))))),Object.keys(n).sort().map(r=>e.createElement(v,{name:r,templates:n[r],key:r}))))};export{L as CheckTemplatesPage};
2
2
  //# sourceMappingURL=CheckTemplatesPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{ItemCardGrid as c}from"@backstage/core-components";import{useRouteRef as i}from"@backstage/core-plugin-api";import{Typography as m,Box as n,Card as p,CardContent as s}from"@material-ui/core";import{makeStyles as f}from"@material-ui/core/styles";import E from"lodash";import e from"react";import{Link as d}from"react-router-dom";import{checkCreateRouteRef as h}from"../../routes.esm.js";const u=f(t=>({content:{marginLeft:t.spacing(2)},link:{textDecoration:"none"},cardContent:{"&:hover":{backgroundColor:t.palette.action.hover}}})),C=({name:t,templates:o})=>{const a=u(),l=i(h);return e.createElement(e.Fragment,null,e.createElement(m,{variant:"h4"},t),e.createElement(n,{className:a.content},e.createElement(c,null,E.sortBy(o,"title").map(r=>e.createElement(d,{to:`${l()}?template=${r.id}`,className:a.link,key:r.id},e.createElement(p,{style:{height:"100%"}},e.createElement(s,{className:a.cardContent},e.createElement(n,{mb:1},e.createElement(m,{variant:"h6"},r.title)),e.createElement(m,null,r.summary))))))))};export{C as TemplateCategory};
1
+ import{ItemCardGrid as c}from"@backstage/core-components";import{useRouteRef as i}from"@backstage/core-plugin-api";import{Typography as a,Box as n,Card as p,CardContent as s}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import f from"lodash";import e from"react";import{Link as y}from"react-router-dom";import{checkCreateRouteRef as E}from"../../routes.esm.js";const g=d(t=>({content:{marginLeft:t.spacing(2)},link:{textDecoration:"none"},cardContent:{"&:hover":{backgroundColor:t.palette.action.hover}}})),u=({name:t,templates:m})=>{const o=g(),l=i(E);return e.createElement(e.Fragment,null,e.createElement(a,{variant:"h6"},t),e.createElement(n,{className:o.content},e.createElement(c,null,f.sortBy(m,"title").map(r=>e.createElement(y,{to:`${l()}?template=${r.id}`,className:o.link,key:r.id},e.createElement(p,{style:{height:"100%"}},e.createElement(s,{className:o.cardContent},e.createElement(n,{mb:1},e.createElement(a,{variant:"subtitle1",style:{fontWeight:"bold"},component:"div"},r.title)),e.createElement(a,{variant:"body1"},r.summary))))))))};export{u as TemplateCategory};
2
2
  //# sourceMappingURL=TemplateCategory.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as W,featureFlagsApiRef as Y,useRouteRef as q}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{makeStyles as J,Button as E,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import t,{useState as c,useEffect as U}from"react";import{useNavigate as V}from"react-router-dom";import X from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as Z}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as _}from"../../../hooks/checks/useGetCheckOwners.esm.js";import ee from"../../../images/no-results.svg";import{checkTemplatesRouteRef as te}from"../../../routes.esm.js";import{FilterDefault as v}from"../../../utils/filters.esm.js";import{EmptyState as b}from"../../EmptyState/EmptyState.esm.js";import{Pagination as ae}from"../../Pagination/Pagination.esm.js";import{SearchFilters as re}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as oe}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ce}from"./CheckSummaryCard.esm.js";var N=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(N||{}),y=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(y||{});const ie=J(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),se=({checksPerPage:e,currentCursor:w})=>{const i=ie(),[d,x]=c(w),[n,A]=c(""),[h,S]=c(v.Alpha),[g,B]=c(v.Owner),[I,R]=c(""),{data:F,isLoading:O}=_();X(()=>{R(n)},500,[n]);const{loading:u,allowed:G}=z({permission:K}),{data:r,isLoading:l}=Z({ids:void 0,first:e,after:d,orderAlphabetical:h,searchByOwner:g,searchByName:I}),[m,T]=c(r),p=m?.edges?.map(a=>a.node),[f,L]=c([]),k=W(Y),D=!k.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-check-creation")||k.isActive("soundcheck-enable-check-creation"),C=!G||!D,j=a=>{S(a.target.value)},H=a=>{B(a.target.value)};U(()=>{r&&T(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]);const $=V(),M=q(te),P=()=>$(M());if(!l&&!p)return t.createElement(b,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ee,action:!u&&t.createElement(E,{disabled:C,variant:"contained",color:"primary",onClick:P},"Get started")});let s;l?s=t.createElement(oe,null):p?.length?s=p?.map(a=>t.createElement(o,{key:a.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${a.id}`},t.createElement(ce,{check:a}))):s=t.createElement(o,{xs:12,item:!0,role:"listitem","aria-label":"result"},t.createElement(b,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."}));const Q=m?.pageInfo.hasNextPage||f?.length>0;return t.createElement(o,{container:!0,direction:"row",className:i.container},t.createElement(o,{container:!0,className:i.header},t.createElement(re,{searchPlaceholder:"Search Available Checks",isLoading:l||O,searchTerm:n,setSearchTerm:A,filterAlpha:h,handleAlphabeticalFilterChange:j,filterOwner:g,handleOwnerFilterChange:H,owners:F}),t.createElement(o,{item:!0,xs:2,className:i.headerButtons},!u&&t.createElement(E,{disabled:C,variant:"contained",color:"primary",onClick:P,className:i.createButton},"Create Check"))),t.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"checks"},s),Q&&t.createElement(o,{item:!0,xs:12},t.createElement(ae,{response:m,listingsPerPage:e,cursor:d,setCursor:x,prevCursors:f,setPrevCursors:L,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})))};export{N as CheckEmptyState,se as CheckListPage,y as CheckNoResults};
1
+ import{useApi as Z,featureFlagsApiRef as $,useRouteRef as q}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{makeStyles as J,Button as N,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import t,{useState as c,useEffect as w}from"react";import{useNavigate as U}from"react-router-dom";import V from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as X}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as _}from"../../../hooks/checks/useGetCheckOwners.esm.js";import ee from"../../../images/no-results.svg";import{checkTemplatesRouteRef as te}from"../../../routes.esm.js";import{FilterDefault as y}from"../../../utils/filters.esm.js";import{EmptyState as x}from"../../EmptyState/EmptyState.esm.js";import{Pagination as ae}from"../../Pagination/Pagination.esm.js";import{SearchFilters as re}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as oe}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ce}from"./CheckSummaryCard.esm.js";var A=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(A||{}),S=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(S||{});const ie=J(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),se=({checksPerPage:e,currentCursor:B})=>{const i=ie(),[d,h]=c(B),[n,I]=c(""),[g,R]=c(y.Alpha),[u,F]=c(y.Owner),[f,O]=c(""),{data:T,isLoading:G}=_();V(()=>{O(n)},500,[n]);const{loading:k,allowed:L}=z({permission:K}),{data:r,isLoading:l}=X({ids:void 0,first:e,after:d,orderAlphabetical:g,searchByOwner:u,searchByName:f}),[m,D]=c(r),p=m?.edges?.map(a=>a.node),[C,P]=c([]);w(()=>{h(void 0),P([])},[f]);const v=Z($),j=!v.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-check-creation")||v.isActive("soundcheck-enable-check-creation"),E=!L||!j,H=a=>{R(a.target.value)},W=a=>{F(a.target.value)};w(()=>{r&&D(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]);const M=U(),Q=q(te),b=()=>M(Q());if(!l&&!p)return t.createElement(x,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ee,action:!k&&t.createElement(N,{disabled:E,variant:"contained",color:"primary",onClick:b},"Get started")});let s;l?s=t.createElement(oe,null):p?.length?s=p?.map(a=>t.createElement(o,{key:a.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${a.id}`},t.createElement(ce,{check:a}))):s=t.createElement(o,{xs:12,item:!0,role:"listitem","aria-label":"result"},t.createElement(x,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."}));const Y=m?.pageInfo.hasNextPage||C?.length>0;return t.createElement(o,{container:!0,direction:"row",className:i.container},t.createElement(o,{container:!0,className:i.header},t.createElement(re,{searchPlaceholder:"Search Available Checks",isLoading:l||G,searchTerm:n,setSearchTerm:I,filterAlpha:g,handleAlphabeticalFilterChange:H,filterOwner:u,handleOwnerFilterChange:W,owners:T}),t.createElement(o,{item:!0,xs:2,className:i.headerButtons},!k&&t.createElement(N,{disabled:E,variant:"contained",color:"primary",onClick:b,className:i.createButton},"Create Check"))),t.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"checks"},s),Y&&t.createElement(o,{item:!0,xs:12},t.createElement(ae,{response:m,listingsPerPage:e,cursor:d,setCursor:h,prevCursors:C,setPrevCursors:P,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})))};export{A as CheckEmptyState,se as CheckListPage,S as CheckNoResults};
2
2
  //# sourceMappingURL=CheckListPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as H,Box as n,Typography as o,Button as L}from"@material-ui/core";import{parseFactRef as z}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as E,useState as f,useEffect as U,useCallback as q}from"react";import{useGetEntityRefs as K}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetCollectors as Q}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as X}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as Y}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as Z}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as _}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as ee,CollectorLogo as te}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as O}from"../ExpandableSection/ExpandableSection.esm.js";import{FormattedPreview as F}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{useLabelOptions as ae}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as v}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as oe}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as ne}from"./useFactOptions.esm.js";const le=800,re=H(t=>({content:{padding:t.spacing(2,3),width:le},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),ce=({factRef:t,updateFactRef:N,path:m,updatePath:B,entityRef:p,updateEntityRef:G,pathResolver:i,onSave:x})=>{const a=re(),s=E(()=>{if(t)return z(t)},[t]),[g,R]=f(s?.source??null);U(()=>{s?.source&&R(s.source)},[s?.source]);const[h,W]=f("jsonpath"),[b,C]=f(),[S,k]=f(),{data:P}=Z(),I=E(()=>P?.map(c=>c.id)??[],[P]),{data:d}=X(s?.source,s?.name,!0),V=E(()=>d?_(d.schema):[],[d]),{data:y,isLoading:j}=Q(),M=y?.map(c=>c.id)?.sort()??[],{data:$}=K(),l=E(()=>y?.find(c=>c.id===g),[y,g]),{factOptions:D}=ne({selectedCollector:l}),{options:J,getOptionLabel:w}=ae(D),{data:r,isLoading:u}=Y({factRef:t||"",entityRef:S||"",path:b,pathResolver:i??h??void 0},!!t&&!!S),T=q(()=>{C(m),k(p)},[p,m]),A=E(()=>!!l?.config?.cache,[l]);return e.createElement(n,{className:a.content,"data-testid":"fact-explorer"},e.createElement(n,null,e.createElement(n,null,e.createElement(o,{variant:"subtitle1"},"Select an Integration"),e.createElement(v,{options:M,onChange:c=>{R(c),N("")},value:g,placeholder:"Integration",disabled:j,fullWidth:!0})),!!l&&e.createElement(e.Fragment,null,e.createElement(n,{className:a.section},ee(l.id)?e.createElement(te,{noMargin:!0,collectorId:l.id}):e.createElement(o,{variant:"h5",className:a.collectorName,component:"div"},l.name??l.id," "),!!l.description&&e.createElement(o,{variant:"body2"},l.description),e.createElement(v,{options:J,onChange:N,value:t??null,placeholder:"Select Fact",getOptionLabel:w,noOptionsText:"No Facts",fullWidth:!0}))),!!t&&e.createElement(e.Fragment,null,!!d?.schema&&e.createElement(n,{className:a.section},e.createElement(O,{elevation:1,title:"JSON Schema"},e.createElement("div",{className:a.preview},e.createElement(F,{data:d.schema})))),e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Path Resolver"),!i&&e.createElement(o,{variant:"caption"},"Defaults to jsonpath"),i?e.createElement(o,{variant:"body1"},i):e.createElement(v,{options:I,onChange:W,value:i??h,placeholder:"Path Resolver (Optional)",getOptionLabel:w,fullWidth:!0,disabled:!!i})),e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Path"),e.createElement(v,{options:(i??h)==="jsonpath"?V:[],onChange:c=>{b&&C(void 0),B(c)},value:m??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e.createElement("div",{className:a.pathSection},!!x&&e.createElement(L,{className:a.testPathButton,variant:"contained",onClick:()=>x({factRef:t,path:m??"",pathResolver:h??i??""}),disabled:!m,color:"primary"},"Save")))),!!t&&e.createElement(O,{elevation:0,title:"Sample Fact and Test Path"},e.createElement(n,{className:a.expandedSection},e.createElement(n,{marginBottom:1},e.createElement(o,{variant:"subtitle1"},"Select an Entity"),e.createElement(o,{variant:"caption"},"Fact will be sampled from this entity."),e.createElement(v,{options:$??[],onChange:G,value:p??null,placeholder:"Entity Selection",fullWidth:!0})),e.createElement(n,null,e.createElement(L,{className:a.testPathButton,variant:"contained",onClick:T,disabled:!p,color:"primary"},"Sample Fact")),e.createElement(e.Fragment,null,!!b&&!u&&e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Resolved Value"),r?.resolvedValue!==null&&r?.resolvedValue!==void 0?e.createElement(n,{className:a.preview},e.createElement(F,{data:r?.resolvedValue})):e.createElement(o,{color:"textSecondary",variant:"body2"},"Could not resolve path")),!!S&&e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Fact Data"),A&&e.createElement(o,{variant:"caption"},"Uses cache when available."),!!u&&e.createElement("div",{className:a.loading},e.createElement(oe,null)),!u&&!!r?.fact&&e.createElement(n,{className:a.preview},e.createElement(F,{data:r?.fact?.data})),!u&&!!r?.collectionError&&e.createElement(o,{color:"textSecondary",variant:"body2"},"Failed to collect:"," ",r?.collectionError?.errorMessage),!u&&!r?.fact&&!r?.collectionError&&e.createElement(o,{color:"textSecondary",variant:"body2"},"Fact ",t," unavailable for entity ",p)))))))};export{ce as FactExplorer};
1
+ import{makeStyles as Q,Box as n,Typography as o,Button as w}from"@material-ui/core";import{parseFactRef as U}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as E,useState as g,useEffect as q,useCallback as X}from"react";import{useGetEntityRefs as Y}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetCollectors as Z}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as _}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as ee}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as te}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as ae}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as oe,CollectorLogo as ne}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as O}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as le}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as re}from"../Filter/types.esm.js";import{FormattedPreview as N}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{useLabelOptions as ie}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as h}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as ce}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as se}from"./useFactOptions.esm.js";const me=800,de=Q(t=>({content:{padding:t.spacing(2,3),width:me},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),k=t=>{const f=!t||Object.values(t).every(s=>!s?.length)?{...re(),selectedKinds:["Component","System"]}:t;return le(f)},pe=({factRef:t,updateFactRef:f,path:s,updatePath:B,entityRef:d,updateEntityRef:G,pathResolver:c,filters:I,onSave:C})=>{const a=de(),m=E(()=>{if(t)return U(t)},[t]),[y,R]=g(m?.source??null);q(()=>{m?.source&&R(m.source)},[m?.source]);const[v,T]=g("jsonpath"),[b,x]=g(),[S,j]=g(),{data:P}=te(),V=E(()=>P?.map(i=>i.id)??[],[P]),{data:p}=_(m?.source,m?.name,!0),W=E(()=>p?ae(p.schema):[],[p]),{data:F,isLoading:M}=Z(),$=F?.map(i=>i.id)?.sort()??[],{data:D,isLoading:J}=Y(k(I),500),l=E(()=>F?.find(i=>i.id===y),[F,y]),{factOptions:z}=se({selectedCollector:l}),{options:A,getOptionLabel:L}=ie(z),{data:r,isLoading:u}=ee({factRef:t||"",entityRef:S||"",path:b,pathResolver:c??v??void 0},!!t&&!!S),H=X(()=>{x(s),j(d)},[d,s]),K=E(()=>!!l?.config?.cache,[l]);return e.createElement(n,{className:a.content,"data-testid":"fact-explorer"},e.createElement(n,null,e.createElement(n,null,e.createElement(o,{variant:"subtitle1"},"Select an Integration"),e.createElement(h,{options:$,onChange:i=>{R(i),f("")},value:y,placeholder:"Integration",disabled:M,fullWidth:!0})),!!l&&e.createElement(e.Fragment,null,e.createElement(n,{className:a.section},oe(l.id)?e.createElement(ne,{noMargin:!0,collectorId:l.id}):e.createElement(o,{variant:"h5",className:a.collectorName,component:"div"},l.name??l.id," "),!!l.description&&e.createElement(o,{variant:"body2"},l.description),e.createElement(h,{options:A,onChange:f,value:t??null,placeholder:"Select Fact",getOptionLabel:L,noOptionsText:"No Facts",fullWidth:!0}))),!!t&&e.createElement(e.Fragment,null,!!p?.schema&&e.createElement(n,{className:a.section},e.createElement(O,{elevation:1,title:"JSON Schema"},e.createElement("div",{className:a.preview},e.createElement(N,{data:p.schema})))),e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Path Resolver"),!c&&e.createElement(o,{variant:"caption"},"Defaults to jsonpath"),c?e.createElement(o,{variant:"body1"},c):e.createElement(h,{options:V,onChange:T,value:c??v,placeholder:"Path Resolver (Optional)",getOptionLabel:L,fullWidth:!0,disabled:!!c})),e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Path"),e.createElement(h,{options:(c??v)==="jsonpath"?W:[],onChange:i=>{b&&x(void 0),B(i)},value:s??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e.createElement("div",{className:a.pathSection},!!C&&e.createElement(w,{className:a.testPathButton,variant:"contained",onClick:()=>C({factRef:t,path:s??"",pathResolver:v??c??""}),disabled:!s,color:"primary"},"Save")))),!!t&&e.createElement(O,{elevation:0,title:"Sample Fact and Test Path"},e.createElement(n,{className:a.expandedSection},e.createElement(n,{marginBottom:1},e.createElement(o,{variant:"subtitle1"},"Select an Entity"),e.createElement(o,{variant:"caption"},"Fact will be sampled from this entity.",e.createElement("br",null),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."),e.createElement(h,{options:D??[],onChange:G,value:d??null,placeholder:"Entity Selection",isLoading:J,freeSolo:!0,fullWidth:!0})),e.createElement(n,null,e.createElement(w,{className:a.testPathButton,variant:"contained",onClick:H,disabled:!d,color:"primary"},"Sample Fact")),e.createElement(e.Fragment,null,!!b&&!u&&e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Resolved Value"),r?.resolvedValue!==null&&r?.resolvedValue!==void 0?e.createElement(n,{className:a.preview},e.createElement(N,{data:r?.resolvedValue})):e.createElement(o,{color:"textSecondary",variant:"body2"},"Could not resolve path")),!!S&&e.createElement(n,{className:a.section},e.createElement(o,{variant:"subtitle1"},"Fact Data"),K&&e.createElement(o,{variant:"caption"},"Uses cache when available."),!!u&&e.createElement("div",{className:a.loading},e.createElement(ce,null)),!u&&!!r?.fact&&e.createElement(n,{className:a.preview},e.createElement(N,{data:r?.fact?.data})),!u&&!!r?.collectionError&&e.createElement(o,{color:"textSecondary",variant:"body2"},"Failed to collect:"," ",r?.collectionError?.errorMessage),!u&&!r?.fact&&!r?.collectionError&&e.createElement(o,{color:"textSecondary",variant:"body2"},"Fact ",t," unavailable for entity ",d)))))))};export{pe as FactExplorer,k as toEntityFilterQuery};
2
2
  //# sourceMappingURL=FactExplorer.esm.js.map
@@ -1,2 +1,2 @@
1
- import t,{createContext as E,useState as e}from"react";import{FactExplorerDialog as h}from"./FactExplorerDialog.esm.js";const a=E({open:!1,updateOpen:()=>{},updateOnSave:()=>{},updateFactRef:()=>{},updatePath:()=>{},updateEntityRef:()=>{},updatePathResolver:()=>{}}),s=({children:r})=>{const[p,n]=e(!1),[o,u]=e(),[l,d]=e(),[c,f]=e(),[i,v]=e(),[R,m]=e();return t.createElement(a.Provider,{value:{open:p,updateOpen:n,onSave:o,updateOnSave:u,factRef:l,updateFactRef:d,path:c,updatePath:f,entityRef:i,updateEntityRef:v,pathResolver:R,updatePathResolver:m}},t.createElement(t.Fragment,null,r,t.createElement(h,null)))};export{a as FactExplorerContext,s as FactExplorerProvider};
1
+ import t,{createContext as h,useState as e}from"react";import{useFormContext as E}from"react-hook-form";import{FactExplorerDialog as x}from"./FactExplorerDialog.esm.js";const a=h({open:!1,updateOpen:()=>{},updateOnSave:()=>{},updateFactRef:()=>{},updatePath:()=>{},updateEntityRef:()=>{},updatePathResolver:()=>{}}),F=({children:r})=>{const[p,o]=e(!1),[n,l]=e(),[u,d]=e(),[c,f]=e(),[i,m]=e(),[s,v]=e(),R=E()?.getValues("filtersStep.filter");return t.createElement(a.Provider,{value:{open:p,updateOpen:o,onSave:n,updateOnSave:l,factRef:u,updateFactRef:d,path:c,updatePath:f,entityRef:i,updateEntityRef:m,pathResolver:s,updatePathResolver:v,filters:R}},t.createElement(t.Fragment,null,r,t.createElement(x,null)))};export{a as FactExplorerContext,F as FactExplorerProvider};
2
2
  //# sourceMappingURL=FactExplorerContext.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Button as R}from"@material-ui/core";import E from"@material-ui/icons/Search";import a,{useContext as i}from"react";import{SoundcheckDialog as x}from"../SoundcheckDialog/SoundcheckDialog.esm.js";import{FactExplorer as v}from"./FactExplorer.esm.js";import{FactExplorerContext as m}from"./FactExplorerContext.esm.js";const F=()=>{const{open:e,updateOpen:o,onSave:r,factRef:p,updateFactRef:n,path:c,updatePath:l,entityRef:t,updateEntityRef:f,pathResolver:u}=i(m);return a.createElement(x,{open:e,handleClose:()=>o(!1),title:"Fact Explorer",fullScreen:!1},a.createElement(v,{onSave:r,factRef:p,updateFactRef:n,path:c,updatePath:l,entityRef:t,updateEntityRef:f,pathResolver:u}))},S=({onSave:e,factRef:o,path:r,pathResolver:p,className:n,text:c="Explore Facts",hideIcon:l})=>{const{updateOpen:t,updateOnSave:f,updateFactRef:u,updatePath:d,updatePathResolver:s}=i(m);return a.createElement(R,{onClick:()=>{t(!0),u(o??""),d(r??""),s(p??""),f(()=>h=>{e&&e(h),t(!1)})},className:n,variant:"text",startIcon:l?void 0:a.createElement(E,null)},c)};export{F as FactExplorerDialog,S as FactExplorerDialogButton};
1
+ import{Button as R}from"@material-ui/core";import E from"@material-ui/icons/Search";import a,{useContext as s}from"react";import{SoundcheckDialog as x}from"../SoundcheckDialog/SoundcheckDialog.esm.js";import{FactExplorer as v}from"./FactExplorer.esm.js";import{FactExplorerContext as m}from"./FactExplorerContext.esm.js";const F=()=>{const{open:e,updateOpen:o,onSave:r,factRef:p,updateFactRef:n,path:l,updatePath:c,entityRef:t,updateEntityRef:f,pathResolver:i,filters:u}=s(m);return a.createElement(x,{open:e,handleClose:()=>o(!1),title:"Fact Explorer",fullScreen:!1},a.createElement(v,{onSave:r,factRef:p,updateFactRef:n,path:l,updatePath:c,entityRef:t,updateEntityRef:f,pathResolver:i,filters:u}))},S=({onSave:e,factRef:o,path:r,pathResolver:p,className:n,text:l="Explore Facts",hideIcon:c})=>{const{updateOpen:t,updateOnSave:f,updateFactRef:i,updatePath:u,updatePathResolver:d}=s(m);return a.createElement(R,{onClick:()=>{t(!0),i(o??""),u(r??""),d(p??""),f(()=>h=>{e&&e(h),t(!1)})},className:n,variant:"text",startIcon:c?void 0:a.createElement(E,null)},l)};export{F as FactExplorerDialog,S as FactExplorerDialogButton};
2
2
  //# sourceMappingURL=FactExplorerDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- import{TextField as f}from"@material-ui/core";import{Autocomplete as g}from"@material-ui/lab";import n,{useState as h}from"react";import{ListboxVirtualized as b}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const x=({options:l,onChange:i,value:e,placeholder:r,getOptionLabel:a,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:d=!1})=>{const[s,c]=h(e??"");return n.createElement(g,{options:l,inputValue:s,onInputChange:(o,t)=>c(t),onChange:(o,t)=>i(t),value:e===""?null:e,getOptionLabel:a,ListboxComponent:b,disabled:p,fullWidth:u,noOptionsText:m,freeSolo:d,autoSelect:!0,renderInput:o=>n.createElement(f,{...o,placeholder:r,variant:"outlined",margin:"dense"})})};export{x as ControlledAutocomplete};
1
+ import{TextField as g}from"@material-ui/core";import{Autocomplete as b}from"@material-ui/lab";import n,{useState as h}from"react";import{ListboxVirtualized as x}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const C=({options:l,onChange:i,value:e,placeholder:r,getOptionLabel:a,disabled:p,fullWidth:d,noOptionsText:u,freeSolo:m=!1,isLoading:s=!1})=>{const[c,f]=h(e??"");return n.createElement(b,{options:l,inputValue:c,onInputChange:(t,o)=>f(o),onChange:(t,o)=>i(o),value:e===""?null:e,getOptionLabel:a,ListboxComponent:x,disabled:p,fullWidth:d,noOptionsText:u,freeSolo:m,loading:s,autoSelect:!0,renderInput:t=>n.createElement(g,{...t,placeholder:r,variant:"outlined",margin:"dense"})})};export{C as ControlledAutocomplete};
2
2
  //# sourceMappingURL=ControlledAutocomplete.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as S,configApiRef as v}from"@backstage/core-plugin-api";import{makeStyles as E,alpha as b,TextField as O,CircularProgress as k}from"@material-ui/core";import y from"@material-ui/lab/Autocomplete";import u,{useMemo as F,useCallback as C,useEffect as g}from"react";import{useSearchParams as P}from"react-router-dom";import w from"react-use/lib/useLocalStorage";import{useOptions as x}from"./useOptions.esm.js";const A=E(r=>({root:{width:"100%",minWidth:250},textField:{"& $notchedOutline":{borderColor:b(r.page.fontColor,.25)},"&:hover $notchedOutline":{borderColor:r.page.fontColor}},input:{backgroundColor:"transparent",color:r.page.fontColor},clearIndicator:{color:r.page.fontColor},popupIndicator:{color:r.page.fontColor},notchedOutline:{}}),{name:"SoundcheckGroupSelector"}),G=({setError:r})=>{const{options:o,isLoading:a,isError:s}=x(),t=A(),[i,f]=P(),[n,h]=w("soundcheck.overview.groupRef",null),p=i.get("group"),d=S(v).getOptionalString("soundcheck.overview.defaultSelectedGroupType"),m=F(()=>{if(!a&&o.length){if(p||n){const e=p??n;return o.find(c=>c.ref===e)??o[0]}else if(d)return o.find(e=>e.type===d)??o[0];return o[0]}return null},[d,a,o,p,n]),l=C((e,c)=>{e&&i.get("group")!==e&&(i.set("group",e),f(i,{replace:c}),h(e))},[i,h,f]),I=C((e,c)=>{l?.(c?.ref)},[l]);return g(()=>{n&&!p&&l(n,!0)},[n,p,l]),g(()=>{l(m?.ref,!0)},[l,m]),g(()=>{r?.(s?new Error("Error loading groups"):void 0)},[s,r]),s?null:u.createElement(y,{"aria-label":"Current group",className:t.root,classes:{clearIndicator:t.clearIndicator,popupIndicator:t.popupIndicator},disableClearable:!0,options:o??[],loading:a,groupBy:e=>e.key,value:m,freeSolo:!1,onChange:I,getOptionLabel:e=>e.name,renderInput:e=>u.createElement(O,{...e,variant:"outlined",placeholder:a?"Loading":"Select a group",className:t.textField,InputProps:{...e.InputProps,className:t.input,classes:{notchedOutline:t.notchedOutline},endAdornment:u.createElement(u.Fragment,null,a?u.createElement(k,{color:"inherit",size:20}):null,e.InputProps.endAdornment)}})})};export{G as GroupSelector};
1
+ import{useApi as E,configApiRef as v}from"@backstage/core-plugin-api";import{makeStyles as O,alpha as k,TextField as w,CircularProgress as y}from"@material-ui/core";import P from"@material-ui/lab/Autocomplete";import s,{useMemo as x,useCallback as I,useEffect as f}from"react";import{useSearchParams as A}from"react-router-dom";import F from"react-use/lib/useLocalStorage";import{useOptions as G}from"./useOptions.esm.js";const L=O(r=>({root:{width:"100%",minWidth:250},textField:{"& $notchedOutline":{borderColor:k(r.page.fontColor,.25)},"&:hover $notchedOutline":{borderColor:r.page.fontColor}},input:{backgroundColor:"transparent",color:r.page.fontColor},clearIndicator:{color:r.page.fontColor},popupIndicator:{color:r.page.fontColor},notchedOutline:{}}),{name:"SoundcheckGroupSelector"}),N=({setError:r,margin:S,baseClass:a})=>{const{options:o,isLoading:i,isError:d}=G(),t=L(),[p,h]=A(),[n,C]=F("soundcheck.overview.groupRef",null),u=p.get("group"),m=E(v).getOptionalString("soundcheck.overview.defaultSelectedGroupType"),g=x(()=>{if(!i&&o.length){if(u||n){const e=u??n;return o.find(c=>c.ref===e)??o[0]}else if(m)return o.find(e=>e.type===m)??o[0];return o[0]}return null},[m,i,o,u,n]),l=I((e,c)=>{e&&p.get("group")!==e&&(p.set("group",e),h(p,{replace:c}),C(e))},[p,C,h]),b=I((e,c)=>{l?.(c?.ref)},[l]);return f(()=>{n&&!u&&l(n,!0)},[n,u,l]),f(()=>{l(g?.ref,!0)},[l,g]),f(()=>{r?.(d?new Error("Error loading groups"):void 0)},[d,r]),d?null:s.createElement(P,{"aria-label":"Current group",className:a?"":t.root,classes:{clearIndicator:a?"":t.clearIndicator,popupIndicator:a?"":t.popupIndicator},disableClearable:!0,options:o??[],loading:i,groupBy:e=>e.key,value:g,freeSolo:!1,onChange:b,getOptionLabel:e=>e.name,renderInput:e=>s.createElement(w,{...e,variant:"outlined",placeholder:i?"Loading":"Select a group",className:t.textField,margin:S,InputProps:{...e.InputProps,className:a?"":t.input,classes:{notchedOutline:a?"":t.notchedOutline},endAdornment:s.createElement(s.Fragment,null,i?s.createElement(y,{color:"inherit",size:20}):null,e.InputProps.endAdornment)}})})};export{N as GroupSelector};
2
2
  //# sourceMappingURL=GroupSelector.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as c}from"@backstage/core-plugin-api";import{makeStyles as s,Grid as l,Accordion as g,AccordionSummary as d,Typography as f,AccordionDetails as E}from"@material-ui/core";import u from"@material-ui/icons/ExpandMore";import e from"react";import{Link as y}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as h}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{campaignsPageRouteRef as x}from"../../../routes.esm.js";import{OVERVIEW_CAMPAIGNS_COUNT as m}from"../OverviewPageContent.esm.js";import{CampaignBanner as C}from"./CampaignBanner.esm.js";const A=s(a=>({campaignsGrid:{margin:`0 0 ${a.spacing(3)}px`,border:`1px solid ${a.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:a.spacing(2),gap:a.spacing(2)},campaignsLink:{textAlign:"center",margin:`${a.spacing(1)}rem 0 ${a.spacing(1)}`}})),R=({ownerEntityRef:a})=>{const i=A(),n=c(x),{data:o}=h({orderAlphabetical:"default",searchByOwner:a,searchByStatus:"active"},!!a),t=o?.edges.map(r=>r.node),p=t?.slice(0,m);return e.createElement(e.Fragment,null,t&&t.length>0&&e.createElement(l,{item:!0,xs:12,className:i.campaignsGrid},e.createElement(g,{style:{boxShadow:"none"}},e.createElement(d,{expandIcon:e.createElement(u,null)},e.createElement(f,{variant:"h6"},"Campaigns")),e.createElement(E,null,e.createElement("div",{className:i.campaignsCard},p?.map(r=>e.createElement("div",{key:r.id},e.createElement(C,{campaign:r})))),t.length>m&&e.createElement(y,{to:n(),className:i.campaignsLink},"More Campaigns")))))};export{R as CampaignArea};
2
+ //# sourceMappingURL=CampaignArea.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Page as m,Header as a}from"@backstage/core-components";import{makeStyles as c}from"@material-ui/core";import{SpotifyLicenseBanner as l}from"@spotify/backstage-plugin-core";import e,{useState as s}from"react";import{UserProvider as p}from"../../contexts/UserProvider.esm.js";import d from"../../hooks/useConfirmationModal.esm.js";import{soundcheckBackend as v,invalidLicenseMessage as f}from"../../utils/license.esm.js";import{GroupSelector as u}from"../GroupSelector/GroupSelector.esm.js";import{SoundcheckQueryClientProvider as E}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContent as g}from"./OverviewPageContent.esm.js";const S=c(r=>({overviewContainer:{padding:r.spacing(1,3)}})),k=r=>{const{title:t="Soundcheck"}=r,o=S(),[n,i]=s(void 0);return e.createElement(E,null,e.createElement(p,null,e.createElement(d,null,e.createElement(m,{themeId:"website"},e.createElement(l,{backend:v,invalidLicenseMessage:f}),e.createElement(a,{title:t},e.createElement(u,{setError:i})),e.createElement("div",{className:o.overviewContainer},e.createElement(g,{groupSelectorError:n}))))))};export{k as OverviewPage};
1
+ import{Page as o,Header as i}from"@backstage/core-components";import{makeStyles as m}from"@material-ui/core";import{SpotifyLicenseBanner as a}from"@spotify/backstage-plugin-core";import e from"react";import{UserProvider as c}from"../../contexts/UserProvider.esm.js";import l from"../../hooks/useConfirmationModal.esm.js";import{soundcheckBackend as s,invalidLicenseMessage as d}from"../../utils/license.esm.js";import{SoundcheckQueryClientProvider as p}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContent as v}from"./OverviewPageContent.esm.js";const f=m(r=>({overviewContainer:{padding:r.spacing(1,3)}})),u=r=>{const{title:t="Soundcheck"}=r,n=f();return e.createElement(p,null,e.createElement(c,null,e.createElement(l,null,e.createElement(o,{themeId:"website"},e.createElement(a,{backend:s,invalidLicenseMessage:d}),e.createElement(i,{title:t}),e.createElement("div",{className:n.overviewContainer},e.createElement(v,null))))))};export{u as OverviewPage};
2
2
  //# sourceMappingURL=OverviewPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Link as N}from"@backstage/core-components";import{useRouteRef as A}from"@backstage/core-plugin-api";import{makeStyles as G,Grid as p,Accordion as L,AccordionSummary as R,Typography as P,AccordionDetails as T}from"@material-ui/core";import F from"@material-ui/icons/ExpandMore";import e,{useState as k,useEffect as B,useCallback as I}from"react";import{useSearchParams as $}from"react-router-dom";import{useGetCampaigns as D}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useFacetsForOwner as H}from"../../hooks/facets/useFacetsForOwner.esm.js";import{campaignsPageRouteRef as M}from"../../routes.esm.js";import{LoadingIndicator as V}from"../LoadingIndicator/LoadingIndicator.esm.js";import{OverviewTable as _}from"../OverviewTable/OverviewTable.esm.js";import{RowHeights as j}from"../OverviewTable/resultsTableUtils.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as z}from"../SoundcheckHeader/useHeader.esm.js";import{CampaignBanner as J}from"./CampaignBanner/CampaignBanner.esm.js";import{OverviewTabs as U}from"./OverviewTabs.esm.js";import{OverviewTabsSkeleton as W}from"./OverviewTabsSkeleton.esm.js";const q=G(a=>({tableContainer:{padding:0,backgroundColor:"transparent",paddingBottom:j.paginationControl},campaignsGrid:{margin:`0 0 ${a.spacing(3)}px`,border:`1px solid ${a.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:a.spacing(2),gap:a.spacing(2)},campaignsLink:{textAlign:"center",margin:`${a.spacing(1)}rem 0 ${a.spacing(1)}`},tableLoading:{backgroundColor:a.palette.background.paper,padding:a.spacing(6)},noPadding:{padding:0},accordion:{boxShadow:"none"}})),l=3,K=({groupSelectorError:a,isFixedGroup:y=!1})=>{const[n,g]=$(),{group:o,kind:s,type:c}=Object.fromEntries(n.entries());z();const C=A(M),[r,f]=k(void 0),[b,v]=k(void 0);B(()=>{(r?.kind!==s||r?.type!==c)&&f({kind:s,type:c})},[s,c,r]);const{data:u,isLoading:E}=H(o),{data:x}=D({orderAlphabetical:"default",searchByOwner:o,searchByStatus:"active"},!!o),m=x?.edges.map(t=>t.node),h=m?.slice(0,l),w=b||a,S=I((t,d,O)=>{t&&(f({kind:t,type:d}),d?(n.set("kind",t),n.set("type",d)):(n.delete("type"),n.set("kind",t)),g(n,{replace:O}))},[n,g]),i=q();return e.createElement(p,{container:!0,spacing:0},m&&m.length>0&&e.createElement(p,{item:!0,xs:12,className:i.campaignsGrid},e.createElement(L,{style:{boxShadow:"none"}},e.createElement(R,{expandIcon:e.createElement(F,null)},e.createElement(P,{variant:"h6"},"Campaigns")),e.createElement(T,null,e.createElement("div",{className:i.campaignsCard},h?.map(t=>e.createElement("div",{key:t.id},e.createElement(J,{campaign:t})))),m.length>l&&e.createElement(N,{to:C(),className:i.campaignsLink},"More Campaigns")))),e.createElement(p,{item:!0,xs:12,className:i.noPadding},E?e.createElement(W,null):e.createElement(U,{unfilteredFacets:u,kind:r?.kind,type:r?.type,onChange:S})),e.createElement(p,{item:!0,xs:12,className:i.tableContainer},E?e.createElement("div",{className:i.tableLoading},e.createElement(V,{size:80})):e.createElement(_,{facets:u,kind:r?.kind,type:r?.type,setError:v,hasError:w,ownerEntityRef:o,isFixedGroup:y})))};export{l as OVERVIEW_CAMPAIGNS_COUNT,K as OverviewPageContent};
1
+ import{makeStyles as L,Grid as l}from"@material-ui/core";import t,{createContext as N,useState as i,useEffect as A,useCallback as D}from"react";import{useSearchParams as R}from"react-router-dom";import H from"react-use/lib/useDebounce";import{useFacetsForOwner as I}from"../../hooks/facets/useFacetsForOwner.esm.js";import{LoadingIndicator as $}from"../LoadingIndicator/LoadingIndicator.esm.js";import{OverviewTable as M}from"../OverviewTable/OverviewTable.esm.js";import{RowHeights as T}from"../OverviewTable/resultsTableUtils.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as _}from"../SoundcheckHeader/useHeader.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-catalog-react";import"@material-ui/icons/ArrowDropDown";import"@material-ui/icons/ArrowDropUp";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../routes.esm.js";import"../CampaignDetailsPage/CampaignDetails.esm.js";import"../TechHealth/Loading/Loading.esm.js";import"./CampaignBanner/useCampaignBannerStyles.esm.js";import{CampaignArea as j}from"./CampaignBanner/CampaignArea.esm.js";import{OverviewPageHeader as z}from"./OverviewPageHeader.esm.js";const B=L(e=>({tableContainer:{padding:0,backgroundColor:"transparent",paddingBottom:T.paginationControl},campaignsGrid:{margin:`0 0 ${e.spacing(3)}px`,border:`1px solid ${e.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:e.spacing(2),gap:e.spacing(2)},campaignsLink:{textAlign:"center",margin:`${e.spacing(1)}rem 0 ${e.spacing(1)}`},tableLoading:{backgroundColor:e.palette.background.paper,padding:e.spacing(6)},noPadding:{padding:0},accordion:{boxShadow:"none"}})),b=N({searchValue:"",updateSearchValue:e=>{},debouncedSearchValue:"",updateDebouncedSearchValue:e=>{},pivot:!1,updatePivot:e=>{}}),U=3,W=({isFixedGroup:e=!1,campaignsEnabled:k})=>{const[a,g]=R(),{group:n,kind:p,type:d}=Object.fromEntries(a.entries());_();const[r,u]=i(void 0),[h,x]=i(void 0),[y,C]=i(),[m,S]=i(""),[w,f]=i(""),[P,V]=i(!1);H(()=>{f(m)},800,[m]),A(()=>{(r?.kind!==p||r?.type!==d)&&u({kind:p,type:d})},[p,d,r]);const{data:E,isLoading:v}=I(n),O=h||y,F=D((o,s,G)=>{o&&(u({kind:o,type:s}),s?(a.set("kind",o),a.set("type",s)):(a.delete("type"),a.set("kind",o)),g(a,{replace:G}))},[a,g]),c=B();return t.createElement(b.Provider,{value:{searchValue:m,updateSearchValue:S,debouncedSearchValue:w,updateDebouncedSearchValue:f,pivot:P,updatePivot:V}},t.createElement(l,{container:!0,spacing:0},k&&t.createElement(j,{ownerEntityRef:n}),t.createElement(l,{item:!0,xs:12,className:c.noPadding},t.createElement(z,{unfilteredFacets:E,kind:r?.kind,type:r?.type,onChange:F,setError:C,isLoading:v,isFixedGroup:e})),t.createElement(l,{item:!0,xs:12,className:c.tableContainer},v?t.createElement("div",{className:c.tableLoading},t.createElement($,{size:80})):t.createElement(M,{facets:E,kind:r?.kind,type:r?.type,setError:x,hasError:O,ownerEntityRef:n,isFixedGroup:e}))))};export{U as OVERVIEW_CAMPAIGNS_COUNT,W as OverviewPageContent,b as OverviewPageContext};
2
2
  //# sourceMappingURL=OverviewPageContent.esm.js.map