@spotify/backstage-plugin-soundcheck 0.14.4 → 0.14.5

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 (87) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/config.d.ts +14 -0
  3. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  4. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  5. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
  6. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +1 -1
  7. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  8. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  9. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  10. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  11. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  12. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  13. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  14. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  15. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  16. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  17. package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
  18. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  19. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +1 -1
  20. package/dist/components/CheckPage/CheckDetailsView.esm.js +1 -1
  21. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  22. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
  23. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  24. package/dist/components/CollectorPage/Configurators/Common/CollectorSchedulingOptions.esm.js +2 -0
  25. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  26. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  27. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  28. package/dist/components/CollectorPage/Configurators/DataDog/utils.esm.js +1 -1
  29. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  30. package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
  31. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  32. package/dist/components/CollectorPage/Configurators/Gitlab/utils.esm.js +1 -1
  33. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  34. package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +1 -1
  35. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  36. package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +1 -1
  37. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  38. package/dist/components/CollectorPage/Configurators/NewRelic/utils.esm.js +1 -1
  39. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  40. package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +1 -1
  41. package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +1 -1
  42. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
  45. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +1 -1
  47. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  48. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  49. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  50. package/dist/components/OverviewPage/OverviewPageHeader.esm.js +1 -1
  51. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  52. package/dist/components/PassRateTable/PassRateTable.esm.js +2 -2
  53. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  54. package/dist/components/Router.esm.js +1 -1
  55. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  56. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  57. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
  58. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  59. package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
  60. package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
  61. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  62. package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
  63. package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
  64. package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
  65. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  66. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  67. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  68. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  69. package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +1 -1
  70. package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
  71. package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
  72. package/dist/hooks/facets/useFacetsForOwner.esm.js +1 -1
  73. package/dist/hooks/graphqlKeys.esm.js +1 -1
  74. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  75. package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
  76. package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
  77. package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
  78. package/dist/hooks/tracks/useUpdateTrack.esm.js +1 -1
  79. package/dist/utils/export.esm.js +3 -3
  80. package/dist/utils/getGroupFilterFromConfig.esm.js +2 -0
  81. package/package.json +21 -20
  82. package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +0 -2
  83. package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +0 -2
  84. package/dist/components/OverviewPage/CampaignBanner/CampaignArea.esm.js +0 -2
  85. package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +0 -2
  86. package/dist/components/OverviewPage/CampaignBanner/useCampaignBannerStyles.esm.js +0 -2
  87. package/dist/components/OverviewPage/CampaignBanner/utils.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.14.5
4
+
5
+ ### Patch Changes
6
+
7
+ - Update to Backstage `v1.34.0`
8
+ - Remove campaign card from Soundcheck overview page. This campagin card has been superceded by the campagin insights page.
9
+ - Add batch size configuration to UI for integrations.
10
+ - Added GitHub `BranchRules` fact type (returns all active rules that apply to the specified branch).
11
+ - Overview pivot view toggle setting is now saved in local storage.
12
+ - Added support for specifying a filter Soundcheck will use when querying the catalog for groups.
13
+ - Small fix to include the path resolver in exported checks.
14
+ - Overview page now fetches items from cache and database. This should improve load times for users with large amounts of entities and/or checks.
15
+ - Resolves an issue with initial page size on the insight pages.
16
+ - Updated dependencies
17
+ - @spotify/backstage-plugin-core@0.8.4
18
+ - @spotify/backstage-plugin-soundcheck-common@0.14.5
19
+
3
20
  ## 0.14.4
4
21
 
5
22
  ### Patch Changes
package/config.d.ts CHANGED
@@ -17,5 +17,19 @@ export interface Config {
17
17
  * @visibility frontend
18
18
  */
19
19
  flags?: string[];
20
+ /**
21
+ * Provide additional filters when loading entities from the catalog.
22
+ *
23
+ * @deepVisibility frontend
24
+ */
25
+ entityFilters?: {
26
+ /**
27
+ * The filter to use when Soundcheck is looking for groups in the catalog. This should restrict groups to only
28
+ * those types who can own entities, and their ancestors.
29
+ *
30
+ * @deepVisibility frontend
31
+ */
32
+ group?: EntityFilter;
33
+ };
20
34
  };
21
35
  }
@@ -1,2 +1,2 @@
1
- import t,{useEffect as s}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as r,useCampaignFormContext as c}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCreateCampaign as g}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{campaignsPageRouteRef as l}from"../../routes.esm.js";import{CampaignForm as f}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as C}from"../SoundcheckHeader/useHeader.esm.js";const d=()=>{const{setIsLoading:e}=c(),{mutateAsync:m,isLoading:o}=g();s(()=>{e(o)},[e,o]);const[a,i]=u(l),n=async p=>{await m(p,{onSuccess:i})};return C({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),t.createElement(r,null,t.createElement(f,{onSave:n,onCancel:a}))},E=()=>t.createElement(r,null,t.createElement(d,null));export{E as CampaignCreatePage};
1
+ import t,{useEffect as s}from"react";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as r,useCampaignFormContext as c}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useCreateCampaign as g}from"../../hooks/campaigns/useCreateCampaign.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{campaignsPageRouteRef as l}from"../../routes.esm.js";import{CampaignForm as f}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as C}from"../SoundcheckHeader/useHeader.esm.js";const d=()=>{const{setIsLoading:e}=c(),{mutateAsync:m,isLoading:o}=g();s(()=>{e(o)},[e,o]);const[a,i]=u(l),n=async p=>{await m(p,{onSuccess:i})};return C({title:"Create a Campaign",description:"Create, monitor, and manage software updates or system transitions.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"}),t.createElement(r,null,t.createElement(f,{onSave:n,onCancel:a}))},E=()=>t.createElement(r,null,t.createElement(d,null));export{E as CampaignCreatePage};
2
2
  //# sourceMappingURL=CampaignCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as h}from"@hookform/resolvers/zod";import{useMemo as d}from"react";import{useForm as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as F}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as V}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as k}from"../utils/validation.esm.js";import{mapCampaignToFormValues as M,mapCampaignFormDataToCampaignInput as v}from"./utils.esm.js";const L=(e,o)=>{const a=d(()=>o?M(o):V,[o]),{control:m,handleSubmit:t,getValues:i,setValue:p,trigger:s,formState:{errors:n}}=C({defaultValues:a,mode:"onChange",resolver:h(k)}),{showModal:u}=S(),{checksMap:c,checkChips:g,checksLoading:l}=F();return{control:m,handleSubmit:t,getValues:i,setValue:p,trigger:s,errors:n,onSubmit:async r=>{if(!await u({title:"Save Campaign",message:`Are you sure you want to save campaign: ${r.detailsStep.name}?`,error:!1}))return;const f=v(r,o,c);e(f)},checkChips:g,checksLoading:l}};export{L as useCampaignForm};
1
+ import{zodResolver as h}from"@hookform/resolvers/zod";import{useMemo as d}from"react";import{useForm as C}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as F}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as V}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as k}from"../utils/validation.esm.js";import{mapCampaignToFormValues as M,mapCampaignFormDataToCampaignInput as v}from"./utils.esm.js";const L=(e,o)=>{const m=d(()=>o?M(o):V,[o]),{control:t,handleSubmit:a,getValues:i,setValue:p,trigger:s,formState:{errors:n}}=C({defaultValues:m,mode:"onChange",resolver:h(k)}),{showModal:u}=S(),{checksMap:c,checkChips:g,checksLoading:l}=F();return{control:t,handleSubmit:a,getValues:i,setValue:p,trigger:s,errors:n,onSubmit:async r=>{if(!await u({title:"Save Campaign",message:`Are you sure you want to save campaign: ${r.detailsStep.name}?`,error:!1}))return;const f=v(r,o,c);e(f)},checkChips:g,checksLoading:l}};export{L as useCampaignForm};
2
2
  //# sourceMappingURL=useCampaignForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useTheme as l,Paper as f,Box as u}from"@material-ui/core";import{makeStyles as h}from"@material-ui/core/styles";import{DateTime as m}from"luxon";import i,{useMemo as y}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatusHistory as g}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{AreaChart as x}from"../AreaChart/AreaChart.esm.js";const S=h(t=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${t.palette.divider}`,height:"100%",width:"100%"},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${t.typography.h5.fontSize}px`,cursor:"default"},content:{padding:t.spacing(1,2,1,0),width:"100%",height:"100%"}}));function H({campaign:t,filter:n}){const p=l(),a=S(),c=m.fromISO(t.startDate),d=Math.max(Math.ceil(m.now().diff(c,"days").days),1),{data:e}=g({trackId:t.track.id,filter:n,numberOfDays:d},!!t),r=e?.certificationStatusHistory.numberOfEntities,o=y(()=>e?.certificationStatusHistory.history.map(s=>({date:s.date,Passed:s.statusByLevel[0].passed/r*100})),[r,e]);return i.createElement(f,{className:a.card},i.createElement(u,{className:a.content},o&&i.createElement(x,{data:o,categories:["Passed"],categoryColors:{Passed:p.palette.success.main},index:"date",minValue:0,maxValue:100,showLegend:!1})))}export{H as CampaignStatusHistoryTile};
1
+ import{useTheme as l,Paper as f,Box as u}from"@material-ui/core";import{makeStyles as h}from"@material-ui/core/styles";import{DateTime as m}from"luxon";import i,{useMemo as y}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatusHistory as g}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{AreaChart as x}from"../AreaChart/AreaChart.esm.js";const S=h(t=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${t.palette.divider}`,height:"100%",width:"100%"},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${t.typography.h5.fontSize}px`,cursor:"default"},content:{padding:t.spacing(1,2,1,0),width:"100%",height:"100%"}}));function H({campaign:t,filter:n}){const p=l(),a=S(),c=m.fromISO(t.startDate),d=Math.max(Math.ceil(m.now().diff(c,"days").days),1),{data:e}=g({trackId:t.track.id,filter:n,numberOfDays:d},!!t),r=e?.certificationStatusHistory.numberOfEntities,o=y(()=>e?.certificationStatusHistory.history.map(s=>({date:s.date,Passed:s.statusByLevel[0].passed/r*100})),[r,e]);return i.createElement(f,{className:a.card},i.createElement(u,{className:a.content},o&&i.createElement(x,{data:o,categories:["Passed"],categoryColors:{Passed:p.palette.success.main},index:"date",minValue:0,maxValue:100,showLegend:!1})))}export{H as CampaignStatusHistoryTile};
2
2
  //# sourceMappingURL=CampaignStatusHistoryTile.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useTheme as F,Paper as S,Box as c,Grid as x,Typography as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import T from"@material-ui/icons/TrendingDown";import k from"@material-ui/icons/TrendingFlat";import B from"@material-ui/icons/TrendingUp";import{DateTime as v}from"luxon";import t,{useMemo as D}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as I}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as N}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{CategoryBar as R}from"../CategoryBar/CategoryBar.esm.js";const E=C(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`},content:{padding:e.spacing(1),display:"flex",margin:e.spacing(1),gap:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(1),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:e.spacing(2)}}));function y({label:e,value:n,total:r,color:p,valueFormatter:s}){const a=E();return t.createElement(x,{item:!0,xs:12,className:a.item},t.createElement(c,{className:a.category},t.createElement("span",{className:a.legendDash,style:{backgroundColor:p}}),t.createElement(f,null,e)),r&&t.createElement(f,null,s(n)," of ",s(r)," (",Math.round(n/r*100),"%)"))}function $({campaign:e,filter:n}){const r=F(),p=E(),{data:s}=I({trackId:e.track.id,filter:n},!0),a=s?.certificationStatus.statusByLevel[0],h=Math.max(Math.ceil(v.now().diff(v.fromISO(e.startDate),"days").days),1),{data:g}=N({trackId:e.track.id,filter:n,numberOfDays:h},!!e),o=s?.certificationStatus.numberOfEntities??0,m=D(()=>{if(o===void 0||g===void 0||a===void 0)return;const i=g.certificationStatusHistory.history[0].statusByLevel[0].passed/o*100;return a.passed/o*100-i},[g,a,o]),d=i=>i>=1e6?`${(i/1e6).toFixed(1)}M`:i>=1e3?`${(i/1e3).toFixed(1)}K`:i.toString();let u=k,l;return m!==void 0&&(l=`${m.toFixed(0)}% since campaign start`,m<=-1?(u=T,l=`-${l}`):m>=1&&(u=B,l=`+${l}`)),t.createElement(S,{className:p.card},t.createElement(c,{className:p.content},a&&t.createElement(c,{width:"100%"},t.createElement(R,{data:a,valueFormatter:d,categories:["passed","failed","notReported"],categoryFormatter:i=>i.replace(/\b\w/g,b=>b.toUpperCase()),colors:[r.palette.success.main,r.palette.error.main,r.palette.text.disabled]}),t.createElement(c,{paddingTop:"12px"},t.createElement(x,{spacing:2},t.createElement(y,{label:"Passing",value:a.passed,total:o,color:r.palette.success.main,valueFormatter:d}),t.createElement(y,{label:"Failing",value:a.failed,total:o,color:r.palette.error.main,valueFormatter:d}),t.createElement(y,{label:"Not Reported",value:a.notReported,total:o,color:r.palette.text.disabled,valueFormatter:d}),m!==void 0&&t.createElement(c,{display:"flex",alignItems:"center",paddingTop:"12px"},t.createElement(u,null),t.createElement(f,{style:{marginLeft:r.spacing(1)}},l)))))))}export{$ as CampaignStatusTile};
1
+ import{useTheme as F,Paper as S,Box as c,Grid as x,Typography as f}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import T from"@material-ui/icons/TrendingDown";import k from"@material-ui/icons/TrendingFlat";import B from"@material-ui/icons/TrendingUp";import{DateTime as v}from"luxon";import t,{useMemo as D}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as I}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as N}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{CategoryBar as R}from"../CategoryBar/CategoryBar.esm.js";const E=C(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`},content:{padding:e.spacing(1),display:"flex",margin:e.spacing(1),gap:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(1),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:e.spacing(2)}}));function y({label:e,value:n,total:r,color:p,valueFormatter:s}){const a=E();return t.createElement(x,{item:!0,xs:12,className:a.item},t.createElement(c,{className:a.category},t.createElement("span",{className:a.legendDash,style:{backgroundColor:p}}),t.createElement(f,null,e)),r&&t.createElement(f,null,s(n)," of ",s(r)," (",Math.round(n/r*100),"%)"))}function $({campaign:e,filter:n}){const r=F(),p=E(),{data:s}=I({trackId:e.track.id,filter:n},!0),a=s?.certificationStatus.statusByLevel[0],h=Math.max(Math.ceil(v.now().diff(v.fromISO(e.startDate),"days").days),1),{data:g}=N({trackId:e.track.id,filter:n,numberOfDays:h},!!e),o=s?.certificationStatus.numberOfEntities??0,m=D(()=>{if(o===void 0||g===void 0||a===void 0)return;const i=g.certificationStatusHistory.history[0].statusByLevel[0].passed/o*100;return a.passed/o*100-i},[g,a,o]),d=i=>i>=1e6?`${(i/1e6).toFixed(1)}M`:i>=1e3?`${(i/1e3).toFixed(1)}K`:i.toString();let u=k,l;return m!==void 0&&(l=`${m.toFixed(0)}% since campaign start`,m<=-1?(u=T,l=`-${l}`):m>=1&&(u=B,l=`+${l}`)),t.createElement(S,{className:p.card},t.createElement(c,{className:p.content},a&&t.createElement(c,{width:"100%"},t.createElement(R,{data:a,valueFormatter:d,categories:["passed","failed","notReported"],categoryFormatter:i=>i.replace(/\b\w/g,b=>b.toUpperCase()),colors:[r.palette.success.main,r.palette.error.main,r.palette.text.disabled]}),t.createElement(c,{paddingTop:"12px"},t.createElement(x,{spacing:2},t.createElement(y,{label:"Passing",value:a.passed,total:o,color:r.palette.success.main,valueFormatter:d}),t.createElement(y,{label:"Failing",value:a.failed,total:o,color:r.palette.error.main,valueFormatter:d}),t.createElement(y,{label:"Not Reported",value:a.notReported,total:o,color:r.palette.text.disabled,valueFormatter:d}),m!==void 0&&t.createElement(c,{display:"flex",alignItems:"center",paddingTop:"12px"},t.createElement(u,null),t.createElement(f,{style:{marginLeft:r.spacing(1)}},l)))))))}export{$ as CampaignStatusTile};
2
2
  //# sourceMappingURL=CampaignStatusTile.esm.js.map
@@ -1,2 +1,2 @@
1
- import t,{useEffect as d}from"react";import{useParams as g}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as u}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as l}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as f}from"../../hooks/useNavigateBack.esm.js";import{useGetCampaign as C}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as E}from"../../routes.esm.js";import{CampaignForm as y}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as h}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as k}from"./CampaignEmptyState.esm.js";const F=()=>{L({title:"Update Campaign",description:"Update your campaign, including schedule, milestones, and other associated details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"});const[i,r]=f(E),{campaignId:p}=g(),{setIsLoading:e}=u(),{mutateAsync:n,isLoading:o}=l(),{data:s,isLoading:m}=C(p??""),a=s?.edges?.[0]?.node;return d(()=>e(o),[e,o]),!m&&!a?t.createElement(k,null):t.createElement(t.Fragment,null,m?t.createElement(h,null):t.createElement(y,{onSave:async c=>{await n(c,{onSuccess:r})},onCancel:i,selectedCampaign:a}))};export{F as EditCampaignView};
1
+ import t,{useEffect as d}from"react";import{useParams as g}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as u}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as l}from"../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as f}from"../../hooks/useNavigateBack.esm.js";import{useGetCampaign as C}from"../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as E}from"../../routes.esm.js";import{CampaignForm as y}from"../CampaignForm/CampaignForm.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../SoundcheckHeader/useHeader.esm.js";import{Loading as h}from"../TechHealth/Loading/Loading.esm.js";import{EmptyCampaignState as k}from"./CampaignEmptyState.esm.js";const F=()=>{L({title:"Update Campaign",description:"Update your campaign, including schedule, milestones, and other associated details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/campaigns"});const[a,r]=f(E),{campaignId:p}=g(),{setIsLoading:e}=u(),{mutateAsync:n,isLoading:o}=l(),{data:s,isLoading:m}=C(p??""),i=s?.edges?.[0]?.node;return d(()=>e(o),[e,o]),!m&&!i?t.createElement(k,null):t.createElement(t.Fragment,null,m?t.createElement(h,null):t.createElement(y,{onSave:async c=>{await n(c,{onSuccess:r})},onCancel:a,selectedCampaign:i}))};export{F as EditCampaignView};
2
2
  //# sourceMappingURL=EditCampaignView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useEntity as u}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as f,AccordionSummary as E,AccordionDetails as b,makeStyles as y,Box as h}from"@material-ui/core";import R from"@material-ui/icons/ExpandMore";import e,{useRef as v}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as x}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as k}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as I}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as L}from"../CertificationSidebar/CertificationLevel.esm.js";const C=o(f)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),S=o(({...t})=>e.createElement(E,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),A=o(b)(()=>({margin:"0 !important",borderRadius:0,padding:0})),n=y(()=>({sidebar:{width:"100%"}})),B=({playlistId:t,trackId:i,checkId:d})=>{const m=n(),{entity:c}=u(),p=v(null),{data:r,isLoading:l,isError:s}=x(c,i);if(s)return e.createElement("div",null,e.createElement(h,{padding:2},e.createElement(k,{severity:"error",title:"Error loading certification"})));if(l||!i)return e.createElement(I,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(C,{ref:p,defaultExpanded:!0,elevation:0},e.createElement(S,{expandIcon:e.createElement(R,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(T,{name:r.program.name,badge:r.highestLevel?.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(A,null,e.createElement("div",{className:m.sidebar},r?.levels.map(a=>e.createElement(L,{key:a.ordinal,level:a,checkId:d,trackId:i,playlistId:t,isCampaign:g})))))};export{B as CertificationAccordion,n as useStyles};
1
+ import{useEntity as u}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as f,AccordionSummary as E,AccordionDetails as b,makeStyles as y,Box as h}from"@material-ui/core";import R from"@material-ui/icons/ExpandMore";import e,{useRef as v}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as x}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as k}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as T}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as I}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as L}from"../CertificationSidebar/CertificationLevel.esm.js";const C=o(f)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),S=o(({...t})=>e.createElement(E,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),A=o(b)(()=>({margin:"0 !important",borderRadius:0,padding:0})),n=y(()=>({sidebar:{width:"100%"}})),B=({playlistId:t,trackId:i,checkId:d})=>{const m=n(),{entity:p}=u(),c=v(null),{data:r,isLoading:l,isError:s}=x(p,i);if(s)return e.createElement("div",null,e.createElement(h,{padding:2},e.createElement(k,{severity:"error",title:"Error loading certification"})));if(l||!i)return e.createElement(I,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(C,{ref:c,defaultExpanded:!0,elevation:0},e.createElement(S,{expandIcon:e.createElement(R,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(T,{name:r.program.name,badge:r.highestLevel?.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(A,null,e.createElement("div",{className:m.sidebar},r?.levels.map(a=>e.createElement(L,{key:a.ordinal,level:a,checkId:d,trackId:i,playlistId:t,isCampaign:g})))))};export{B as CertificationAccordion,n as useStyles};
2
2
  //# sourceMappingURL=CertificationAccordion.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as d,Box as s}from"@material-ui/core";import r from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as g}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as u}from"./CertificationLevel.esm.js";import{CertificationSummary as y}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as k}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const E=d(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),v=({playlistId:o,trackId:t,checkId:a})=>{const{entity:m}=c(),{data:e,isLoading:n,isError:l}=f(m,t);if(l)return r.createElement("div",null,r.createElement(s,{padding:2},r.createElement(g,{severity:"error",title:"Error loading certification"})));if(n||!t)return r.createElement(k,null);if(!e)return null;const p=e.program.type==="campaign";return r.createElement("div",null,r.createElement(y,{name:e.program.name,badge:e.highestLevel?.badge,description:e.program.description,documentationUrl:e.program.documentationURL,trackType:e.program.type}),e?.levels.map(i=>r.createElement(u,{key:i.ordinal,level:i,checkId:a,trackId:t,playlistId:o,isCampaign:p})))};export{v as CertificationSidebar,E as useStyles};
1
+ import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as d,Box as s}from"@material-ui/core";import r from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as g}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as u}from"./CertificationLevel.esm.js";import{CertificationSummary as y}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as k}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const E=d(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),v=({playlistId:o,trackId:t,checkId:a})=>{const{entity:m}=c(),{data:e,isLoading:n,isError:l}=f(m,t);if(l)return r.createElement("div",null,r.createElement(s,{padding:2},r.createElement(g,{severity:"error",title:"Error loading certification"})));if(n||!t)return r.createElement(k,null);if(!e)return null;const p=e.program.type==="campaign";return r.createElement("div",null,r.createElement(y,{name:e.program.name,badge:e.highestLevel?.badge,description:e.program.description,documentationUrl:e.program.documentationURL,trackType:e.program.type}),e?.levels.map(i=>r.createElement(u,{key:i.ordinal,level:i,checkId:a,trackId:t,playlistId:o,isCampaign:p})))};export{v as CertificationSidebar,E as useStyles};
2
2
  //# sourceMappingURL=CertificationSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as x,Tooltip as z,IconButton as I,CircularProgress as T}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}}})),M=({className:t,href:a,name:r,children:m})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},m):e.createElement("div",{className:t},m),P=({result:t,name:a,id:r,timestamp:m,isExecutable:h=!1,selected:f=!1,href:g})=>{const k=d(),E=S(k.root,{selected:f}),{entity:i}=b(),{mutateAsync:y,isLoading:l}=B(),[o,C]=F(),{data:n}=A({ids:r?[r]:[]},!!o),s=L(()=>{const c=n?.edges?.[0]?.node;return c?G(c):null},[n?.edges]),R=async()=>{if(!i||!r)return;const c=await y({checkerId:r,entityRef:p(i),shouldRefreshFacts:!0}).catch(j=>{});c&&C(c)},u=!i||!r||!h;return e.createElement(M,{href:g,className:E,name:a},e.createElement($,{result:t}),e.createElement(x,{variant:"body2"},a),m&&!l?e.createElement(H,{timestamp:m}):null,!l&&e.createElement(e.Fragment,null,e.createElement(z,{title:"Execute Check",disableHoverListener:u},e.createElement("span",null,e.createElement(I,{size:"small",color:"inherit",onClick:R,disabled:u,"aria-label":"Execute Check"},e.createElement(N,{fontSize:"small"})))),!!o&&!!s&&e.createElement(D,{entityRef:p(i),check:s,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(T,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
1
+ import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as x,Tooltip as z,IconButton as I,CircularProgress as T}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}}})),M=({className:t,href:a,name:r,children:m})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},m):e.createElement("div",{className:t},m),P=({result:t,name:a,id:r,timestamp:m,isExecutable:h=!1,selected:f=!1,href:g})=>{const k=d(),E=S(k.root,{selected:f}),{entity:c}=b(),{mutateAsync:y,isLoading:l}=B(),[o,C]=F(),{data:n}=A({ids:r?[r]:[]},!!o),s=L(()=>{const i=n?.edges?.[0]?.node;return i?G(i):null},[n?.edges]),R=async()=>{if(!c||!r)return;const i=await y({checkerId:r,entityRef:p(c),shouldRefreshFacts:!0}).catch(j=>{});i&&C(i)},u=!c||!r||!h;return e.createElement(M,{href:g,className:E,name:a},e.createElement($,{result:t}),e.createElement(x,{variant:"body2"},a),m&&!l?e.createElement(H,{timestamp:m}):null,!l&&e.createElement(e.Fragment,null,e.createElement(z,{title:"Execute Check",disableHoverListener:u},e.createElement("span",null,e.createElement(I,{size:"small",color:"inherit",onClick:R,disabled:u,"aria-label":"Execute Check"},e.createElement(N,{fontSize:"small"})))),!!o&&!!s&&e.createElement(D,{entityRef:p(c),check:s,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(T,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as l,Tab as d}from"@material-ui/core";import t from"react";import{Link as g}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{CertificationBadge as b}from"../Badges/CertificationBadge.esm.js";const a=l(e=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)},wrapper:{display:"inline-block",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},badge:{marginRight:e.spacing(1)}})),u=({id:e,name:o,badge:i,href:p,selected:m=!1})=>{const r=a(),{entity:n}=c(),{data:s}=f(n,e);return t.createElement(d,{className:r.root,classes:{wrapper:r.wrapper},value:e,label:t.createElement(t.Fragment,null,t.createElement(b,{badge:i,trackType:s?.program.type,className:r.badge}),o),component:g,to:p,selected:m})};export{u as CertificationTab,a as useStyles};
1
+ import{useEntity as c}from"@backstage/plugin-catalog-react";import{makeStyles as l,Tab as d}from"@material-ui/core";import t from"react";import{Link as g}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{CertificationBadge as b}from"../Badges/CertificationBadge.esm.js";const o=l(e=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)},wrapper:{display:"inline-block",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},badge:{marginRight:e.spacing(1)}})),u=({id:e,name:a,badge:i,href:p,selected:m=!1})=>{const r=o(),{entity:n}=c(),{data:s}=f(n,e);return t.createElement(d,{className:r.root,classes:{wrapper:r.wrapper},value:e,label:t.createElement(t.Fragment,null,t.createElement(b,{badge:i,trackType:s?.program.type,className:r.badge}),a),component:g,to:p,selected:m})};export{u as CertificationTab,o as useStyles};
2
2
  //# sourceMappingURL=CertificationTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as p}from"@backstage/core-plugin-api";import{useEntity as y}from"@backstage/plugin-catalog-react";import{Tabs as g}from"@material-ui/core";import n from"react";import{useAllCertifications as b}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as h}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as C,certificationTrackRouteRef as k}from"../../routes.esm.js";import{CertificationTab as I}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as R}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as T}from"./skeletons/CertificationTabsSkeleton.esm.js";function E(m=[],t=[],o,l){if(o){const i=m.findIndex(a=>a.id===o);return i<0?!1:i}const r=t.findIndex(i=>i.program.id===l);return r<0?!1:r+m.length}const v=({playlistId:m,trackId:t})=>{const{entity:o}=y(),{isLoading:l,data:r}=b(o),{isLoading:i,data:a}=h(o),c=p(C),s=p(k);if(i||l||!t)return n.createElement(T,null);const d=E(a,r,m,t);return n.createElement(g,{value:d,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},a?.length&&a.map(({id:e,name:f})=>n.createElement(R,{key:e,id:e,name:f,selected:e===t,href:c({playlistId:e})})),r&&r.filter(({program:{type:e}})=>e!=="playlist").map(({program:{id:e,name:f},highestLevel:u})=>n.createElement(I,{key:e,id:e,name:f,badge:u?.badge,selected:e===t,href:s({trackId:e})})))};export{v as CertificationTabs};
1
+ import{useRouteRef as p}from"@backstage/core-plugin-api";import{useEntity as y}from"@backstage/plugin-catalog-react";import{Tabs as g}from"@material-ui/core";import n from"react";import{useAllCertifications as b}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as h}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as C,certificationTrackRouteRef as k}from"../../routes.esm.js";import{CertificationTab as I}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as R}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as T}from"./skeletons/CertificationTabsSkeleton.esm.js";function E(m=[],e=[],o,l){if(o){const i=m.findIndex(a=>a.id===o);return i<0?!1:i}const r=e.findIndex(i=>i.program.id===l);return r<0?!1:r+m.length}const v=({playlistId:m,trackId:e})=>{const{entity:o}=y(),{isLoading:l,data:r}=b(o),{isLoading:i,data:a}=h(o),c=p(C),s=p(k);if(i||l||!e)return n.createElement(T,null);const d=E(a,r,m,e);return n.createElement(g,{value:d,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},a?.length&&a.map(({id:t,name:f})=>n.createElement(R,{key:t,id:t,name:f,selected:t===e,href:c({playlistId:t})})),r&&r.filter(({program:{type:t}})=>t!=="playlist").map(({program:{id:t,name:f},highestLevel:u})=>n.createElement(I,{key:t,id:t,name:f,badge:u?.badge,selected:t===e,href:s({trackId:t})})))};export{v as CertificationTabs};
2
2
  //# sourceMappingURL=CertificationTabs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as h,Paper as I,Divider as k}from"@material-ui/core";import e from"react";import{useParams as g}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as l}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";import{CheckDetails as w}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as D}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as N}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as S}from"./CertificationTabs.esm.js";import{PlaylistComponent as T}from"./Playlist/PlaylistComponent.esm.js";const n=h(t=>({paper:{overflow:"hidden",position:"relative",border:R(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),A=()=>{const{playlistId:t,trackId:r,checkId:a}=g(),m=n(),{entity:i}=v(),{isError:p,isFetched:s,data:c}=C(i),{isError:d,data:f}=P(i);if(p||d)return e.createElement(l,{severity:"error",title:"Error loading certifications"});const o=t&&f?.find(E=>E.id===t);if(t&&!o)return e.createElement(l,{severity:"error",title:"Playlist ${playlistId} not found."});if(s&&!c?.length)return e.createElement(N,null);const y=i?u(i):void 0;return e.createElement(D,null,e.createElement(I,{className:m.paper},e.createElement(x,null),e.createElement(S,{playlistId:t,trackId:r}),e.createElement(k,null),o&&e.createElement(T,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:m.view},e.createElement("div",{className:m.sidebar},e.createElement(b,{trackId:r,checkId:a})),e.createElement(w,{programId:r,checkId:a}),e.createElement($,{programId:r}))))};export{A as CertificationsPage,n as useStyles};
1
+ import{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as h,Paper as I,Divider as k}from"@material-ui/core";import e from"react";import{useParams as g}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as l}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as R}from"../Charts/chartUtils.esm.js";import{CheckDetails as w}from"../CheckDetails/CheckDetails.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import{CheckDryRunProvider as D}from"../CheckDryRun/CheckDryRunContext.esm.js";import"../CheckForm/utils/checkFormUtils.esm.js";import{NoCertifications as N}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as S}from"./CertificationTabs.esm.js";import{PlaylistComponent as T}from"./Playlist/PlaylistComponent.esm.js";const n=h(t=>({paper:{overflow:"hidden",position:"relative",border:R(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),A=()=>{const{playlistId:t,trackId:r,checkId:a}=g(),m=n(),{entity:i}=v(),{isError:p,isFetched:s,data:c}=C(i),{isError:d,data:f}=P(i);if(p||d)return e.createElement(l,{severity:"error",title:"Error loading certifications"});const o=t&&f?.find(E=>E.id===t);if(t&&!o)return e.createElement(l,{severity:"error",title:"Playlist ${playlistId} not found."});if(s&&!c?.length)return e.createElement(N,null);const y=i?u(i):void 0;return e.createElement(D,null,e.createElement(I,{className:m.paper},e.createElement(x,null),e.createElement(S,{playlistId:t,trackId:r}),e.createElement(k,null),o&&e.createElement(T,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:m.view},e.createElement("div",{className:m.sidebar},e.createElement(b,{trackId:r,checkId:a})),e.createElement(w,{programId:r,checkId:a}),e.createElement($,{programId:r}))))};export{A as CertificationsPage,n as useStyles};
2
2
  //# sourceMappingURL=CertificationsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import n,{createContext as m,useContext as s}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useCertificationDetails as a}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const i=m(void 0),c=()=>{const t=s(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},l=t=>{const{children:r,entityRef:e}=t,o=a(e);return n.createElement(i.Provider,{value:o},r)};export{l as PlaylistCertificationProvider,c as usePlaylistCertificationContext};
1
+ import n,{createContext as m,useContext as s}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import{useCertificationDetails as a}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const i=m(void 0),p=()=>{const t=s(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},c=t=>{const{children:r,entityRef:e}=t,o=a(e);return n.createElement(i.Provider,{value:o},r)};export{c as PlaylistCertificationProvider,p as usePlaylistCertificationContext};
2
2
  //# sourceMappingURL=PlaylistContext.esm.js.map
@@ -1,2 +1,2 @@
1
- import t,{useEffect as n}from"react";import{v4 as u}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as d,useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useCheckTemplates as h}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as k}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as C}from"../../hooks/useSearchParam.esm.js";import{checksPageRouteRef as y}from"../../routes.esm.js";import{CheckForm as E}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{LoadingIndicator as I}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as L}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../SoundcheckHeader/useHeader.esm.js";const P=({template:e})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=f(),{mutateAsync:i,isLoading:a}=k();n(()=>{r(e?{...e,id:u()}:null)},[e,r]),n(()=>{o(a)},[o,a]);const[c,s]=g(y),p=async l=>{await i(l,{onSuccess:s})};return F({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&!m?null:t.createElement(E,{onSave:p,onClose:c})},v=()=>{const[[e]]=C("template"),{isLoading:o,data:m}=h(),r=e&&m?m.find(i=>i.id===e)??null:null;return t.createElement(t.Fragment,null,t.createElement(L,{entityName:"check template",entityId:e,showNotFound:!!e&&!o&&!r}),o&&t.createElement(I,null),t.createElement(d,null,!o&&(!e||r)&&t.createElement(P,{template:r})))};export{v as CheckCreatePage};
1
+ import t,{useEffect as n}from"react";import{v4 as u}from"uuid";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as d,useCheckFormContext as f}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useCheckTemplates as h}from"../../hooks/checks/useCheckTemplates.esm.js";import{useCreateCheck as k}from"../../hooks/checks/useCreateCheck.esm.js";import{useSearchParam as C}from"../../hooks/useSearchParam.esm.js";import{checksPageRouteRef as y}from"../../routes.esm.js";import{CheckForm as E}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import{LoadingIndicator as I}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as L}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../SoundcheckHeader/useHeader.esm.js";const P=({template:e})=>{const{setIsLoading:o,selectedItem:m,setSelectedItem:r}=f(),{mutateAsync:i,isLoading:a}=k();n(()=>{r(e?{...e,id:u()}:null)},[e,r]),n(()=>{o(a)},[o,a]);const[c,s]=g(y),p=async l=>{await i(l,{onSuccess:s})};return F({title:"Create a Check",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&!m?null:t.createElement(E,{onSave:p,onClose:c})},v=()=>{const[[e]]=C("template"),{isLoading:o,data:m}=h(),r=e&&m?m.find(i=>i.id===e)??null:null;return t.createElement(t.Fragment,null,t.createElement(L,{entityName:"check template",entityId:e,showNotFound:!!e&&!o&&!r}),o&&t.createElement(I,null),t.createElement(d,null,!o&&(!e||r)&&t.createElement(P,{template:r})))};export{v as CheckCreatePage};
2
2
  //# sourceMappingURL=CheckCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as E}from"@backstage/core-components";import{useEntity as y}from"@backstage/plugin-catalog-react";import{makeStyles as k,Box as v,Typography as m}from"@material-ui/core";import t from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheckDetails as S}from"../../hooks/checks/useCheckDetails.esm.js";import{useGetChecks as x}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as C}from"../AlertPanel/AlertPanel.esm.js";import{RelativeTime as B}from"../RelativeTime/RelativeTime.esm.js";import{ResultStateBox as N}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as z}from"./skeletons/CheckDetailsSkeleton.esm.js";const s=k(e=>({root:{padding:`${e.spacing(3)}px ${e.spacing(5)}px`},title:{fontWeight:"normal",fontSize:e.typography.h5.fontSize},description:{padding:`${e.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:e.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)}})),D=({programId:e,checkId:r})=>{const i=s(),{entity:p}=y(),{data:a,isLoading:l,isError:c}=S(p,e,r),{data:d}=x({ids:[r??""],first:1}),f=d?.edges?.[0]?.node;if(c)return t.createElement(v,{padding:2},t.createElement(C,{severity:"error",title:"Error loading check details"}));if(l||!e||!r)return t.createElement(z,null);if(!a)return null;const{name:o,description:u,result:g,timestamp:n,notes:h}=a;return t.createElement("div",{className:i.root,"data-testid":"check-details-view"},t.createElement("div",{className:i.topBar},t.createElement(m,{variant:"h2",className:i.title},o),n?t.createElement(B,{timestamp:n,description:"Last updated"}):null),t.createElement(N,{name:o,state:g,notes:h,templateRef:f?.templateRef??void 0}),t.createElement("div",{className:i.description,"data-testid":"soundcheck-check-details-description"},t.createElement(m,{variant:"h3",className:i.subtitle},"Description"),t.createElement(E,{content:u})))};export{D as CheckDetails,s as useStyles};
1
+ import{MarkdownContent as E}from"@backstage/core-components";import{useEntity as y}from"@backstage/plugin-catalog-react";import{makeStyles as k,Box as v,Typography as m}from"@material-ui/core";import t from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useCheckDetails as S}from"../../hooks/checks/useCheckDetails.esm.js";import{useGetChecks as x}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as C}from"../AlertPanel/AlertPanel.esm.js";import{RelativeTime as B}from"../RelativeTime/RelativeTime.esm.js";import{ResultStateBox as N}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as z}from"./skeletons/CheckDetailsSkeleton.esm.js";const s=k(e=>({root:{padding:`${e.spacing(3)}px ${e.spacing(5)}px`},title:{fontWeight:"normal",fontSize:e.typography.h5.fontSize},description:{padding:`${e.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:e.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)}})),D=({programId:e,checkId:r})=>{const i=s(),{entity:p}=y(),{data:o,isLoading:l,isError:c}=S(p,e,r),{data:d}=x({ids:[r??""],first:1}),f=d?.edges?.[0]?.node;if(c)return t.createElement(v,{padding:2},t.createElement(C,{severity:"error",title:"Error loading check details"}));if(l||!e||!r)return t.createElement(z,null);if(!o)return null;const{name:a,description:u,result:g,timestamp:n,notes:h}=o;return t.createElement("div",{className:i.root,"data-testid":"check-details-view"},t.createElement("div",{className:i.topBar},t.createElement(m,{variant:"h2",className:i.title},a),n?t.createElement(B,{timestamp:n,description:"Last updated"}):null),t.createElement(N,{name:a,state:g,notes:h,templateRef:f?.templateRef??void 0}),t.createElement("div",{className:i.description,"data-testid":"soundcheck-check-details-description"},t.createElement(m,{variant:"h3",className:i.subtitle},"Description"),t.createElement(E,{content:u})))};export{D as CheckDetails,s as useStyles};
2
2
  //# sourceMappingURL=CheckDetails.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as b,ButtonGroup as g,Button as k}from"@material-ui/core";import n,{useState as E}from"react";import{useFormContext as f,Controller as y}from"react-hook-form";import{ExpressionType as a,ExpressionTypeReadableMap as C}from"../../../types/ExpressionType.esm.js";import"../../../../Frequency/types.esm.js";import"../../../../Frequency/util.esm.js";import"../../../../Frequency/FrequencyComponent.esm.js";import"../../../types/Path.esm.js";const x=b(e=>({button:{backgroundColor:e.palette.background.paper,padding:e.spacing(.5,1.5)},selectedButton:{backgroundColor:e.palette.action.selected}})),B=({name:e,disabled:l})=>{const o=x(),{control:p,getValues:s}=f(),m=`${e}`,c=s(m),[i,u]=E(c||a.AllOf),d=r=>{u(r)};return n.createElement(y,{control:p,name:e,render:({field:{onChange:r}})=>n.createElement(g,{color:"primary"},Object.values(a).map(t=>n.createElement(k,{key:t,className:i===t?`${o.selectedButton} ${o.button}`:`${o.button}`,onClick:()=>{d(t),r(t)},disabled:l},C[t])))})};export{B as ExpressionTypeToggle};
1
+ import{makeStyles as b,ButtonGroup as g,Button as k}from"@material-ui/core";import n,{useState as E}from"react";import{useFormContext as f,Controller as y}from"react-hook-form";import{ExpressionType as a,ExpressionTypeReadableMap as C}from"../../../types/ExpressionType.esm.js";import"../../../../Frequency/types.esm.js";import"../../../../Frequency/util.esm.js";import"../../../../Frequency/FrequencyComponent.esm.js";import"../../../types/Path.esm.js";const x=b(e=>({button:{backgroundColor:e.palette.background.paper,padding:e.spacing(.5,1.5)},selectedButton:{backgroundColor:e.palette.action.hover}})),B=({name:e,disabled:l})=>{const o=x(),{control:p,getValues:m}=f(),s=`${e}`,c=m(s),[i,u]=E(c||a.AllOf),d=r=>{u(r)};return n.createElement(y,{control:p,name:e,render:({field:{onChange:r}})=>n.createElement(g,{color:"primary"},Object.values(a).map(t=>n.createElement(k,{key:t,className:i===t?`${o.selectedButton} ${o.button}`:`${o.button}`,onClick:()=>{d(t),r(t)},disabled:l},C[t])))})};export{B as ExpressionTypeToggle};
2
2
  //# sourceMappingURL=ExpressionTypeToggle.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as n}from"@hookform/resolvers/zod";import{useForm as a}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as u}from"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{mapCheckerToFormValues as l,mapToCheckerInput as d,DEFAULT_FORM_VALUES as h}from"./utils/checkFormUtils.esm.js";import{checkFormSchema as C}from"./utils/validation.esm.js";const S=m=>{const{selectedItem:e}=c(),{userEntityRef:t}=u();let o=h;e&&(o=l(e)),t&&!o.detailsStep.ownerEntityRef&&(o.detailsStep.ownerEntityRef=t);const i=a({defaultValues:o,mode:"onChange",resolver:n(C)}),{showModal:s}=f();return{formMethods:i,onSubmit:async r=>{if(!await s({title:"Save Check",message:`Are you sure you want to save check: ${r.detailsStep.name}?`,error:!1}))return;const p=d(r,e);m(p)}}};export{S as useCheckForm};
1
+ import{zodResolver as n}from"@hookform/resolvers/zod";import{useForm as a}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{useLoggedInUser as u}from"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{mapCheckerToFormValues as l,mapToCheckerInput as d,DEFAULT_FORM_VALUES as h}from"./utils/checkFormUtils.esm.js";import{checkFormSchema as C}from"./utils/validation.esm.js";const S=m=>{const{selectedItem:e}=c(),{userEntityRef:t}=u();let o=h;e&&(o=l(e)),t&&!o.detailsStep.ownerEntityRef&&(o.detailsStep.ownerEntityRef=t);const i=a({defaultValues:o,mode:"onChange",resolver:n(C)}),{showModal:s}=f();return{formMethods:i,onSubmit:async r=>{if(!await s({title:"Save Check",message:`Are you sure you want to save check: ${r.detailsStep.name}?`,error:!1}))return;const p=d(r,e);m(p)}}};export{S as useCheckForm};
2
2
  //# sourceMappingURL=useCheckForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{FrequencySchema as b}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as T}from"lodash";import{v4 as k}from"uuid";import{mapInputFilterToFormFilters as S,mapFiltersToInputFilter as R,mapFiltersToCatalogFilter as C}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as P}from"../../Filter/types.esm.js";import{TimeUnit as y}from"../../Frequency/types.esm.js";import{isTimeUnit as A}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as p}from"../types/ExpressionType.esm.js";import{defaultSchedule as M}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as F}from"./validation.esm.js";const g=e=>{if(T(e)&&"frequency"in e){const r=b.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:y.Hours,value:1,cron:t.cron}};const s=Object.keys(t);if(s.length){const o=s[0];if(A(o))return{enabled:!0,frequency:{type:"HumanDuration",unit:o,value:t[o]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:y.Hours,value:1,cron:""}}},x=(e,r)=>{const{enabled:t,frequency:s}=e;if(t){const{cron:o,type:n,unit:a,value:c}=s;return n==="HumanDuration"?{frequency:{[a]:c},filter:C(r)}:{frequency:{cron:o}}}},d=e=>{if(Array.isArray(e))return e.map(r=>d(r));if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const r=Number(e);if(!isNaN(r))return r}return e},l=e=>{if(!e)return{};if(e.expressionType){const r={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operatorPrefix?`${t.operatorPrefix}:${t.operator}`:t.operator,value:d(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{r[e.expressionType]?.push(l(t))}),r}if(e.expressions)return e.expressions.map(l);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,value:d(r.value)}}return{}},v=e=>{if(e?.match(/.:./)){const r=e.split(":");if(["all","any","none"].includes(r[0]))return{operator:r[1],operatorPrefix:r[0]}}return{}},h=(e,r=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e);let s=t.includes("all")||r&&!t.includes("any")?p.AllOf:p.AnyOf;if(t.includes("not")&&(s=p.Not),t.includes(s)||r){const a=e[s]||[e],c=[],u=[];return a.forEach(i=>{const f=Object.keys(i);if(f.includes("all")||f.includes("any")||f.includes("not"))u.push(h(i,!1));else{const{operator:w,operatorPrefix:E}=v(i.operator);c.push({factRef:i.factRef,path:i.path,operator:w??i.operator,value:i.value,operatorPrefix:E})}}),{expressions:u.length>0?u:void 0,conditions:c,expressionType:s}}const{operator:o,operatorPrefix:n}=v(e.operator);return{expressionType:p.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:o??e.operator,value:e.value,operatorPrefix:n}]}},O=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{pathResolver:e.pathResolver??"jsonpath",expressions:h(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:S(e.filter)},scheduleStep:{schedule:g(e.schedule)}}),q=(e,r)=>{const{detailsStep:t,rulesStep:s,filtersStep:o,scheduleStep:n}=e;return{id:r?r.id:k(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,pathResolver:s.pathResolver,passedMessage:s.passedMessage??void 0,failedMessage:s.failedMessage??void 0,rule:l(s.expressions),warning:s.warning??!1,filter:o.filter?R(o.filter):void 0,schedule:x(n.schedule,o.filter)}},m=(e,r="$")=>{const t=[];if(e.type==="object"&&e.properties){const s=e.properties;for(const o in s)if(s.hasOwnProperty(o)){const n=`${r}.${o}`;t.push(n);const a=s[o];t.push(...m(a,n))}}if(e.type==="array"&&e.items){const s=`${r}[*]`;t.push(s);const o=Array.isArray(e.items)?e.items:[e.items];for(const n of o)t.push(...m(n,s))}return t},N={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{pathResolver:"jsonpath",expressions:{expressionType:p.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:P()},scheduleStep:{schedule:M()}},$={details:{name:{name:"Check name",helperText:`Max ${F} characters`,placeholder:"Name your check (e.g., 'Code Coverage\u2019)"},description:{name:"Check description",placeholder:"Describe your check clearly so others understand its purpose. e.g., 'Ensure code coverage meets the minimum threshold.'"},owner:{name:"Check owner",selectLabel:"Assign an owner"}},rulesStep:{rules:{name:"Check rules",description:"Define the rules the check will verify."},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages for check success and failure.",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable to classify failures as warnings, so they don\u2019t impact certification.",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{$ as CHECK_FIELDS,N as DEFAULT_FORM_VALUES,m as generateJsonPaths,O as mapCheckerToFormValues,l as mapExpressionToRule,g as mapInputScheduleToSchedule,h as mapRuleToExpression,x as mapScheduleToInputSchedule,q as mapToCheckerInput};
1
+ import{FrequencySchema as b}from"@spotify/backstage-plugin-soundcheck-common";import{isObject as S}from"lodash";import{v4 as T}from"uuid";import{mapInputFilterToFormFilters as k,mapFiltersToInputFilter as R,mapFiltersToCatalogFilter as A}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as C}from"../../Filter/types.esm.js";import{TimeUnit as y}from"../../Frequency/types.esm.js";import{isTimeUnit as O}from"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import{ExpressionType as p}from"../types/ExpressionType.esm.js";import{defaultSchedule as P}from"../types/Schedule.esm.js";import"../types/Path.esm.js";import{CHECK_NAME_MAX_LENGTH as M}from"./validation.esm.js";const g=e=>{if(S(e)&&"frequency"in e){const r=b.safeParse(e.frequency);if(r.success){const t=r.data;if("cron"in t)return{enabled:!0,frequency:{type:"cron",unit:y.Hours,value:1,cron:t.cron}};const s=Object.keys(t);if(s.length){const o=s[0];if(O(o))return{enabled:!0,frequency:{type:"HumanDuration",unit:o,value:t[o]??1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:y.Hours,value:1,cron:""}}},x=(e,r)=>{const{enabled:t,frequency:s}=e;if(t){const{cron:o,type:n,unit:a,value:l}=s;return n==="HumanDuration"?{frequency:{[a]:l},filter:A(r)}:{frequency:{cron:o}}}},h=e=>{if(Array.isArray(e))return e.map(r=>h(r));if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;const r=Number(e);if(!isNaN(r))return r}return e},f=e=>{if(!e)return{};if(e.expressionType){const r={[e.expressionType]:e.conditions?.map(t=>({factRef:t.factRef,path:t.path,operator:t.operatorPrefix?`${t.operatorPrefix}:${t.operator}`:t.operator,value:h(t.value)}))};return e.expressions&&e.expressions.forEach(t=>{r[e.expressionType]?.push(f(t))}),r}if(e.expressions)return e.expressions.map(f);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operatorPrefix?`${r.operatorPrefix}:${r.operator}`:r.operator,value:h(r.value)}}return{}},v=e=>{if(e?.match(/.:./)){const r=e.split(":");if(["all","any","none"].includes(r[0]))return{operator:r[1],operatorPrefix:r[0]}}return{}},m=(e,r=!0)=>{if(!e)return{conditions:[]};const t=Object.keys(e);let s=t.includes("all")||r&&!t.includes("any")?p.AllOf:p.AnyOf;if(t.includes("not")&&(s=p.Not),t.includes(s)||r){const a=e[s]||[e],l=[],u=[];return a.forEach(i=>{const d=Object.keys(i);if(d.includes("all")||d.includes("any")||d.includes("not"))u.push(m(i,!1));else{const{operator:w,operatorPrefix:E}=v(i.operator);l.push({factRef:i.factRef,path:i.path,operator:w??i.operator,value:i.value,operatorPrefix:E})}}),{expressions:u.length>0?u:void 0,conditions:l,expressionType:s}}const{operator:o,operatorPrefix:n}=v(e.operator);return{expressionType:p.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:o??e.operator,value:e.value,operatorPrefix:n}]}},F=e=>({detailsStep:{name:e.name??"",description:e.description??"",ownerEntityRef:e.ownerEntityRef??""},rulesStep:{pathResolver:e.pathResolver??"jsonpath",expressions:m(e.rule),passedMessage:e.passedMessage??void 0,failedMessage:e.failedMessage??void 0,warning:e.warning??!1},filtersStep:{filter:k(e.filter)},scheduleStep:{schedule:g(e.schedule)}}),q=(e,r)=>{const{detailsStep:t,rulesStep:s,filtersStep:o,scheduleStep:n}=e;return{id:r?r.id:T(),ownerEntityRef:t.ownerEntityRef??void 0,name:t.name,description:t.description,pathResolver:s.pathResolver,passedMessage:s.passedMessage??void 0,failedMessage:s.failedMessage??void 0,rule:f(s.expressions),warning:s.warning??!1,filter:o.filter?R(o.filter):void 0,schedule:x(n.schedule,o.filter)}},c=(e,r="$")=>{const t=[];if(e.type==="object"&&e.properties){const s=e.properties;for(const o in s)if(s.hasOwnProperty(o)){const n=`${r}.${o}`;t.push(n);const a=s[o];t.push(...c(a,n))}}if(e.type==="array"&&e.items){const s=`${r}[*]`;t.push(s);const o=Array.isArray(e.items)?e.items:[e.items];for(const n of o)t.push(...c(n,s))}if(e.oneOf){const s=Array.isArray(e.oneOf)?e.oneOf:[e.oneOf];for(const o of s)t.push(...c(o,r))}if(e.allOf){const s=Array.isArray(e.allOf)?e.allOf:[e.allOf];for(const o of s)t.push(...c(o,r))}return[...new Set(t)]},N={detailsStep:{name:"",description:"",ownerEntityRef:""},rulesStep:{pathResolver:"jsonpath",expressions:{expressionType:p.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",operatorPrefix:"",value:"",conditions:[]}]},warning:!1},filtersStep:{filter:C()},scheduleStep:{schedule:P()}},$={details:{name:{name:"Check name",helperText:`Max ${M} characters`,placeholder:"Name your check (e.g., 'Code Coverage\u2019)"},description:{name:"Check description",placeholder:"Describe your check clearly so others understand its purpose. e.g., 'Ensure code coverage meets the minimum threshold.'"},owner:{name:"Check owner",selectLabel:"Assign an owner"}},rulesStep:{rules:{name:"Check rules",description:"Define the rules the check will verify."},messages:{name:"Pass/Fail messages (Optional)",description:"Add the messages for check success and failure.",passMessagePlaceholder:"Enter pass message...",failMessagePlaceholder:"Enter fail message...",passedTabName:"Passed Message",failedTabName:"Failed Message"},warnings:{name:"Enable warnings",description:"Enable to classify failures as warnings, so they don\u2019t impact certification.",label:"Warning"}},filter:{description:'Setting the filters below will limit the scope of the Check so that only those Entities that match the filter will be monitored by the Check. As an example, choosing a "Kind" of "Component" will make this Check only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Check.'},schedule:{description:"Checks are automatically triggered whenever a dependent fact is updated. When collectors are scheduled, there is generally no need to schedule checks.",checkboxLabel:"Schedule check"}};export{$ as CHECK_FIELDS,N as DEFAULT_FORM_VALUES,c as generateJsonPaths,F as mapCheckerToFormValues,f as mapExpressionToRule,g as mapInputScheduleToSchedule,m as mapRuleToExpression,x as mapScheduleToInputSchedule,q as mapToCheckerInput};
2
2
  //# sourceMappingURL=checkFormUtils.esm.js.map
@@ -1,2 +1,2 @@
1
- import i,{useEffect as m}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as p}from"../../hooks/useNavigateBack.esm.js";import{checksPageRouteRef as s}from"../../routes.esm.js";import{CheckForm as a}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as n}from"../SoundcheckHeader/useHeader.esm.js";const f=({check:t})=>{const{selectedItem:e,showReadOnly:o}=c();m(()=>{o(t)},[t,o]);const[r]=p(s);return n({title:"Check Details",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&i.createElement(a,{onClose:r,onSave:()=>{}})};export{f as CheckDetailsView};
1
+ import i,{useEffect as m}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as p}from"../../hooks/useNavigateBack.esm.js";import{checksPageRouteRef as s}from"../../routes.esm.js";import{CheckForm as a}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as n}from"../SoundcheckHeader/useHeader.esm.js";const f=({check:t})=>{const{selectedItem:e,showReadOnly:o}=c();m(()=>{o(t)},[t,o]);const[r]=p(s);return n({title:"Check Details",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&i.createElement(a,{onClose:r,onSave:()=>{}})};export{f as CheckDetailsView};
2
2
  //# sourceMappingURL=CheckDetailsView.esm.js.map
@@ -1,2 +1,2 @@
1
- import d,{useEffect as c}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as i}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{useUpdateCheck as h}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as f}from"../../routes.esm.js";import{CheckForm as l}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as g}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:m,setSelectedItem:e}=i(),{setIsLoading:o}=i(),{mutateAsync:s,isLoading:r}=h();c(()=>{o(r)},[o,r]),c(()=>{e(t)},[t,e]);const[p,a]=u(f),n=async k=>{await s(k,{onSuccess:a})};return g({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),m&&d.createElement(l,{onClose:p,onSave:n})};export{C as CheckEditView};
1
+ import d,{useEffect as i}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{useUpdateCheck as h}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as f}from"../../routes.esm.js";import{CheckForm as l}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as g}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:m,setSelectedItem:o}=c(),{setIsLoading:e}=c(),{mutateAsync:s,isLoading:r}=h();i(()=>{e(r)},[e,r]),i(()=>{o(t)},[t,o]);const[p,a]=u(f),n=async k=>{await s(k,{onSuccess:a})};return g({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),m&&d.createElement(l,{onClose:p,onSave:n})};export{C as CheckEditView};
2
2
  //# sourceMappingURL=CheckEditView.esm.js.map
@@ -1,2 +1,2 @@
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};
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 z from"lodash";import p,{useState as L,useEffect as B,useCallback as d}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=10,P=["kind","metadata.name","metadata.namespace","relations","spec.lifecycle","spec.type"],F=[r.createStateColumn(),r.createNameColumn(),r.createSystemColumn(),r.createOwnerColumn(),r.createSpecTypeColumn(),r.createSpecLifecycleColumn()],A=[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"}}}}),Q=({checkId:g,trackId:u,filter:s,states:c})=>{const h=$(),[e,l]=L({orderBy:void 0,filter:s,states:c?.map(m).filter(t=>t!==void 0),pageInfo:{page:0,pageSize:O,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=d((t,i)=>{let o;t===-1?o=void 0:o={field:A[t],direction:i==="asc"?f.Asc:f.Desc},l({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),I=d((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]),k=a?.checkEntities.edges.map(t=>t.node.entityRef)??[],{data:S,isLoading:w}=T({entityRefs:k,fields:P}),E=z.compact(a?.checkEntities.edges.map(t=>{const i=S?.items.find(o=>!!o&&R(o)===t.node.entityRef);return i?N({checkDetails:t.node,entity:i}):void 0}))??[];return p.createElement("div",{className:h.tableContainer},p.createElement(v,{title:"Entities",style:{width:"100%",border:"none",margin:0},columns:F,data:E,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"bottom",emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!0,padding:"dense"},onOrderChange:C,onPageChange:I,page:e.pageInfo.page,totalCount:a?.checkEntities.totalCount??0,isLoading:y||w,components:{Toolbar:()=>null}}))};export{Q as CheckEntitiesTable};
2
2
  //# sourceMappingURL=CheckEntitiesTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{z as e}from"zod";import{FrequencySchema as r,FiltersSchema as c,CacheConfigSchema as i}from"../../../../utils/validation.esm.js";import{defaultCacheConfig as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{emptyFilters as m}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{defaultFrequency as n}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const o=()=>({filters:{...m(),selectedKinds:["Component"]},frequency:n(),cacheConfig:l()}),a=()=>({enabled:!1,...o()}),t=e.object({frequency:r,filters:c,cacheConfig:i}),f=t.extend({enabled:e.boolean()}).strict();export{t as BaseCollectorSchema,f as CollectorOptionSchema,o as defaultBaseCollectorOption,a as defaultCollectorOption};
1
+ import{z as e}from"zod";import{FrequencySchema as r,FiltersSchema as l,CacheConfigSchema as c}from"../../../../utils/validation.esm.js";import{defaultCacheConfig as i}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{emptyFilters as a}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{defaultFrequency as n}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const o=()=>({filters:{...a(),selectedKinds:["Component"]},frequency:n(),cacheConfig:i()}),m=()=>({enabled:!1,...o()}),t=e.object({frequency:r,filters:l,cacheConfig:c,batchSize:e.number().min(1,"Batch size should be at least 1").optional().nullable()}),f=t.extend({enabled:e.boolean()}).strict();export{t as BaseCollectorSchema,f as CollectorOptionSchema,o as defaultBaseCollectorOption,m as defaultCollectorOption};
2
2
  //# sourceMappingURL=CollectorOption.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as s,Box as l,Typography as d,TextField as p}from"@material-ui/core";import t from"react";import{useFormContext as g,Controller as h}from"react-hook-form";import{FormFieldLabel as u}from"../../../FormFieldLabel/FormFieldLabel.esm.js";const f=s(a=>({root:{borderTop:`1px solid ${a.palette.divider}`}})),v=({name:a,disabled:n})=>{const i=f(),{control:m}=g();return t.createElement(l,{padding:2,marginTop:3,className:i.root},t.createElement(u,{title:"Batch Size (Optional)"}),t.createElement(d,{variant:"caption"},"Modifies the batch size that the collector uses. In general this option should not be changed and can affect rate limits."),t.createElement(l,{marginTop:1},t.createElement(h,{name:`${a}.batchSize`,control:m,render:({field:r,fieldState:o})=>t.createElement(p,{...r,onChange:e=>{if(e.target.value){const c=parseInt(e.target.value,10)??null;r.onChange({...e,target:{...e.target,value:c}})}else r.onChange({...e,target:{...e.target,value:null}})},placeholder:"Default: 1",value:r.value??void 0,type:"number",variant:"outlined",margin:"dense",disabled:n,error:!!o.error,helperText:o.error?.message})})))};export{v as CollectorSchedulingOptions};
2
+ //# sourceMappingURL=CollectorSchedulingOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as I,FormControlLabel as G,Switch as R,Box as L,Typography as y,Divider as W,Tabs as j,Tab as p,Grid as g,Button as $}from"@material-ui/core";import H from"@material-ui/icons/Add";import J from"@material-ui/icons/Remove";import e,{useState as K}from"react";import{useFormContext as M,useFieldArray as O,useWatch as P,Controller as b}from"react-hook-form";import{validateCacheConfig as Q}from"../../../../utils/collectors.esm.js";import{validateFrequency as U}from"../../../../utils/frequency.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as V}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as X}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as Y}from"../../../Filter/FilterComponent.esm.js";const Z=I(t=>({root:{padding:t.spacing(1.5,6)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:t.spacing(1)},divider:{marginTop:t.spacing(1),marginBottom:t.spacing(1)},switchTrack:{backgroundColor:`${t.palette.primary.main} !important`},buttonsContainer:{marginTop:t.spacing(1),marginBottom:t.spacing(2)}})),C="FactDetails",v="Frequency",F="Filters",k="Caching",_=({name:t,label:E,description:x,disabled:i,FactDetailsComponent:s,multipleCollectors:o})=>{const{control:m,formState:q}=M(),d=q.errors?.[t],{fields:N,insert:D,remove:T}=O({control:m,name:o?.enable?`${t}.collectors`:t}),u=o?.enable?N:[{id:t}],h=s?C:v,[r,f]=K(Array(u.length).fill(h)),w=(l,a,n)=>{f([...r.slice(0,n),a,...r.slice(n+1)])},S=l=>{D(l+1,o?.defaultConfig),f([...r.slice(0,l+1),h,...r.slice(l+1)])},A=l=>{T(l),f([...r.slice(0,l),...r.slice(l+1)])},B=P({control:m,name:`${t}.enabled`}),c=Z();return e.createElement("div",{className:c.root},e.createElement(b,{name:`${t}.enabled`,control:m,render:({field:l})=>e.createElement(G,{control:e.createElement(R,{...l,checked:l.value,"data-testid":`${t}-switch`,classes:{track:l.value?c.switchTrack:void 0},disabled:i}),label:e.createElement(L,{display:"flex",flexDirection:"column"},e.createElement(y,{variant:"body1",component:"span"},e.createElement("b",null,`${E}`)),e.createElement(y,{variant:"caption",color:"textSecondary",component:"p"},`${x}`))})}),B&&e.createElement("div",null,u.map((l,a)=>e.createElement("div",{key:l.id},a!==0&&e.createElement(W,{className:c.divider}),e.createElement(j,{orientation:"horizontal",variant:"scrollable",value:r[a],onChange:(n,z)=>w(n,z,a),className:c.tabsContainer},s&&e.createElement(p,{label:"Fact Details",value:C,className:c.tab}),e.createElement(p,{label:"Frequency",value:v,className:c.tab}),e.createElement(p,{label:"Filters",value:F,className:c.tab}),e.createElement(p,{label:"Caching",value:k,className:c.tab})),e.createElement("div",{className:c.contentContainer},r[a]===C&&s&&e.createElement(s,{name:o?.enable?`${t}.collectors.${a}.factDetails`:`${t}.factDetails`,disabled:i}),r[a]===v&&e.createElement(b,{name:o?.enable?`${t}.collectors.${a}.frequency`:`${t}.frequency`,control:m,rules:{validate:U},render:({field:n})=>e.createElement(V,{disabled:i,value:n.value,onChange:n.onChange,errors:o?.enable?d?.collectors?.[a]?.frequency:d?.frequency})}),r[a]===F&&e.createElement(b,{name:o?.enable?`${t}.collectors.${a}.filters`:`${t}.filters`,control:m,render:({field:n})=>e.createElement(Y,{disabled:i,value:n.value,onChange:n.onChange})}),r[a]===k&&e.createElement(b,{name:o?.enable?`${t}.collectors.${a}.cacheConfig`:`${t}.cacheConfig`,control:m,rules:{validate:Q},render:({field:n})=>e.createElement(X,{disabled:i,value:n.value,onChange:n.onChange,errors:o?.enable?d?.collectors?.[a]?.cacheConfig:d?.cacheConfig})})),o?.enable&&e.createElement(g,{container:!0,spacing:1,className:c.buttonsContainer},u.length>1&&e.createElement(g,{item:!0},e.createElement($,{startIcon:e.createElement(J,null),onClick:()=>A(a),disabled:i,variant:"outlined",size:"small",color:"secondary"},"Remove")),e.createElement(g,{item:!0},e.createElement($,{startIcon:e.createElement(H,null),onClick:()=>S(a),disabled:i,variant:"outlined",size:"small",color:"primary"},"Add ",E)))))))};export{_ as FactCollectionConfig};
1
+ import{makeStyles as I,FormControlLabel as R,Switch as G,Box as L,Typography as y,Divider as O,Tabs as P,Tab as d,Grid as C,Button as F}from"@material-ui/core";import W from"@material-ui/icons/Add";import j from"@material-ui/icons/Remove";import e,{useState as H}from"react";import{useFormContext as J,useFieldArray as K,useWatch as M,Controller as p}from"react-hook-form";import{validateCacheConfig as Q}from"../../../../utils/collectors.esm.js";import{validateFrequency as U}from"../../../../utils/frequency.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as V}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as X}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as Y}from"../../../Filter/FilterComponent.esm.js";import{CollectorSchedulingOptions as Z}from"./CollectorSchedulingOptions.esm.js";const _=I(t=>({root:{padding:t.spacing(1.5,6)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:t.spacing(1)},divider:{marginTop:t.spacing(1),marginBottom:t.spacing(1)},switchTrack:{backgroundColor:`${t.palette.primary.main} !important`},buttonsContainer:{marginTop:t.spacing(1),marginBottom:t.spacing(2)}})),f="FactDetails",E="Schedule",k="Filters",S="Caching",ee=({name:t,label:v,description:x,disabled:i,FactDetailsComponent:s,multipleCollectors:o})=>{const{control:m,formState:N}=J(),h=N.errors?.[t],{fields:D,insert:T,remove:w}=K({control:m,name:o?.enable?`${t}.collectors`:t}),u=o?.enable?D:[{id:t}],$=s?f:E,[r,b]=H(Array(u.length).fill($)),q=(l,a,n)=>{b([...r.slice(0,n),a,...r.slice(n+1)])},A=l=>{T(l+1,o?.defaultConfig),b([...r.slice(0,l+1),$,...r.slice(l+1)])},B=l=>{w(l),b([...r.slice(0,l),...r.slice(l+1)])},z=M({control:m,name:`${t}.enabled`}),c=_();return e.createElement("div",{className:c.root},e.createElement(p,{name:`${t}.enabled`,control:m,render:({field:l})=>e.createElement(R,{control:e.createElement(G,{...l,checked:l.value,"data-testid":`${t}-switch`,classes:{track:l.value?c.switchTrack:void 0},disabled:i}),label:e.createElement(L,{display:"flex",flexDirection:"column"},e.createElement(y,{variant:"body1",component:"span"},e.createElement("b",null,`${v}`)),e.createElement(y,{variant:"caption",color:"textSecondary",component:"p"},`${x}`))})}),z&&e.createElement("div",null,u.map((l,a)=>e.createElement("div",{key:l.id},a!==0&&e.createElement(O,{className:c.divider}),e.createElement(P,{orientation:"horizontal",variant:"scrollable",value:r[a],onChange:(n,g)=>q(n,g,a),className:c.tabsContainer},s&&e.createElement(d,{label:"Fact Details",value:f,className:c.tab}),e.createElement(d,{label:"Schedule",value:E,className:c.tab}),e.createElement(d,{label:"Filters",value:k,className:c.tab}),e.createElement(d,{label:"Caching",value:S,className:c.tab})),e.createElement("div",{className:c.contentContainer},r[a]===f&&s&&e.createElement(s,{name:o?.enable?`${t}.collectors.${a}.factDetails`:`${t}.factDetails`,disabled:i}),r[a]===E&&e.createElement(e.Fragment,null,e.createElement(p,{name:o?.enable?`${t}.collectors.${a}.frequency`:`${t}.frequency`,control:m,rules:{validate:U},render:({field:n,fieldState:{error:g}})=>e.createElement(V,{disabled:i,value:n.value,onChange:n.onChange,errors:g})}),e.createElement(Z,{name:o?.enable?`${t}.collectors.${a}`:t})),r[a]===k&&e.createElement(p,{name:o?.enable?`${t}.collectors.${a}.filters`:`${t}.filters`,control:m,render:({field:n})=>e.createElement(Y,{disabled:i,value:n.value,onChange:n.onChange})}),r[a]===S&&e.createElement(p,{name:o?.enable?`${t}.collectors.${a}.cacheConfig`:`${t}.cacheConfig`,control:m,rules:{validate:Q},render:({field:n})=>e.createElement(X,{disabled:i,value:n.value,onChange:n.onChange,errors:o?.enable?h?.collectors?.[a]?.cacheConfig:h?.cacheConfig})})),o?.enable&&e.createElement(C,{container:!0,spacing:1,className:c.buttonsContainer},u.length>1&&e.createElement(C,{item:!0},e.createElement(F,{startIcon:e.createElement(j,null),onClick:()=>B(a),disabled:i,variant:"outlined",size:"small",color:"secondary"},"Remove")),e.createElement(C,{item:!0},e.createElement(F,{startIcon:e.createElement(W,null),onClick:()=>A(a),disabled:i,variant:"outlined",size:"small",color:"primary"},"Add ",v)))))))};export{ee as FactCollectionConfig};
2
2
  //# sourceMappingURL=FactCollectionConfig.esm.js.map
@@ -1,2 +1,2 @@
1
- const o=t=>({title:t.name??t.id,description:t.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t.id}`}),e=t=>({title:"Update Integration",message:`Are you sure you want to update the ${t.name} integration?`,error:!1});export{o as collectorHeaderContent,e as confirmationModalContent};
1
+ import{mapToCacheConfig as i,mapCacheConfigToHumanDurationOrBoolean as n}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as a,mapFiltersToCatalogFilter as r}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as c,mapFrequencyToHumanDurationOrCron as p}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const f=o=>({title:o.name??o.id,description:o.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${o.id}`}),m=o=>({title:"Update Integration",message:`Are you sure you want to update the ${o.name} integration?`,error:!1}),g=({configOption:o,factType:t,additionalParams:e={}})=>({type:t,frequency:p(o.frequency),filter:r(o.filters),cache:n(o.cacheConfig),batchSize:o.batchSize??void 0,...e}),l=({parentConfig:o,factTypeConfig:t})=>({frequency:c(t.frequency??o.frequency),filters:a(t.filter??o.filter),cacheConfig:i(t.cache??o.cache),batchSize:t.batchSize??o.batchSize});export{f as collectorHeaderContent,m as confirmationModalContent,l as mapBackendConfigToFormIntegrationConfig,g as mapFormIntegrationConfigToBackendConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as v,Paper as C,Divider as D}from"@material-ui/core";import e from"react";import{useForm as b,FormProvider as S}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as E}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as h}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}from"../../../../routes.esm.js";import{FooterButtons as L}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as k}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as B}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as O,defaultDataDogConfig as j,mapDataDogCollectorConfigToConfig as x}from"./utils.esm.js";const M=v(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)}})),N=({disabled:o,selectedCollector:t})=>{const i=b({defaultValues:t?O(t.config):j(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=i,n=M(),c=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:s}=y(),[f,d]=h(F),{showModal:p}=E(),m=async g=>{if(!await p(B(t)))return;const u=x(g);await s({collectorId:t.id,config:u})&&d()};return k(w(t)),e.createElement(e.Fragment,null,e.createElement(C,{className:n.section},e.createElement(S,{...i},e.createElement("form",{onSubmit:a(m)},e.createElement(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",disabled:o}),e.createElement(D,null),e.createElement(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",disabled:o})))),e.createElement("div",{className:n.section},e.createElement(L,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(m),disableSave:c})))};export{N as DataDogConfigurator};
1
+ import{makeStyles as v,Paper as C,Divider as D}from"@material-ui/core";import e from"react";import{useForm as b,FormProvider as S}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as E}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as h}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}from"../../../../routes.esm.js";import{FooterButtons as L}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as k}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as B}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as O,defaultDataDogConfig as j,mapDataDogCollectorConfigToConfig as x}from"./utils.esm.js";const M=v(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)}})),N=({disabled:o,selectedCollector:t})=>{const i=b({defaultValues:t?O(t.config):j(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=i,n=M(),c=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:s}=y(),[f,d]=h(F),{showModal:p}=E(),m=async g=>{if(!await p(B(t)))return;const u=x(g);await s({collectorId:t.id,config:u})&&d()};return k(w(t)),e.createElement(e.Fragment,null,e.createElement(C,{className:n.section},e.createElement(S,{...i},e.createElement("form",{onSubmit:a(m)},e.createElement(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",disabled:o}),e.createElement(D,null),e.createElement(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",disabled:o})))),e.createElement("div",{className:n.section},e.createElement(L,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(m),disableSave:c})))};export{N as DataDogConfigurator};
2
2
  //# sourceMappingURL=DataDogConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{asArray as h}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as s,mapCacheConfigToHumanDurationOrBoolean as u}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as C,mapFiltersToCatalogFilter as m}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as p,mapFrequencyToHumanDurationOrCron as g}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as v}from"../Common/CollectorOption.esm.js";const a="service-definition",l="service-level-objective",y=()=>({serviceDefinition:v(),serviceLevelObjective:v()});function T(e){const{serviceDefinition:i,serviceLevelObjective:r}=e;if(i.enabled||r.enabled){const o={},c=[];if(o.collects=c,i.enabled){const{cacheConfig:t,frequency:n,filters:f}=i;c.push({type:a,frequency:g(n),filter:m(f),cache:u(t)})}if(r.enabled){const{cacheConfig:t,frequency:n,filters:f}=r;c.push({type:l,frequency:g(n),filter:m(f),cache:u(t)})}return o}return{collects:[]}}function D(e){const i=y();if(e){const r=e.collects;if(r)for(const o of h(r)){const c=o.type;c===a&&(i.serviceDefinition={enabled:!0,frequency:p(o.frequency??e.frequency),filters:C(o.filter??e.filter),cacheConfig:s(o.cache??e.cache)}),c===l&&(i.serviceLevelObjective={enabled:!0,frequency:p(o.frequency??e.frequency),filters:C(o.filter??e.filter),cacheConfig:s(o.cache??e.cache)})}}return i}export{a as SERVICE_DEFINITION_COLLECTOR_TYPE,l as SERVICE_LEVEL_OBJECTIVE_COLLECTOR_TYPE,y as defaultDataDogConfig,D as mapConfigToDataDogCollectorConfig,T as mapDataDogCollectorConfigToConfig};
1
+ import{asArray as C}from"@spotify/backstage-plugin-soundcheck-common";import{defaultCollectorOption as a}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as g,mapFormIntegrationConfigToBackendConfig as l}from"../Common/utils.esm.js";const c="service-definition",f="service-level-objective",s=()=>({serviceDefinition:a(),serviceLevelObjective:a()});function p(t){const{serviceDefinition:e,serviceLevelObjective:o}=t;if(e.enabled||o.enabled){const n={},i=[];return n.collects=i,e.enabled&&i.push(l({factType:c,configOption:e})),o.enabled&&i.push(l({factType:f,configOption:o})),n}return{collects:[]}}function v(t){const e=s();if(t){const o=t.collects;if(o)for(const n of C(o)){const i=n.type,r={...g({factTypeConfig:n,parentConfig:t}),enabled:!0};i===c&&(e.serviceDefinition=r),i===f&&(e.serviceLevelObjective=r)}}return e}export{c as SERVICE_DEFINITION_COLLECTOR_TYPE,f as SERVICE_LEVEL_OBJECTIVE_COLLECTOR_TYPE,s as defaultDataDogConfig,v as mapConfigToDataDogCollectorConfig,p as mapDataDogCollectorConfigToConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as b,Paper as h,Divider as l}from"@material-ui/core";import e from"react";import{useForm as y,FormProvider as E}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as S}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as D,confirmationModalContent as G}from"../Common/utils.esm.js";import{mapConfigToGithubCollectorConfig as L,defaultGithubConfig as N,mapGithubCollectorConfigToConfig as R}from"./utils.esm.js";const M=b(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)},form:{marginBottom:o.spacing(2)}})),T=({disabled:o,selectedCollector:t})=>{const a=y({defaultValues:t?L(t.config):N(),mode:"onChange"}),{formState:{errors:r},handleSubmit:n}=a,m=M(),c=!!r.branchProtections||!!r.repositoryDetails||!!r.repositoryLanguages,{mutateAsync:p}=B(),[f,d]=S(P),{showModal:u}=v(),s=async g=>{if(!await u(G(t)))return;const C=R(g);await p({collectorId:t.id,config:C})&&d()};return w(D(t)),e.createElement(e.Fragment,null,e.createElement(h,{className:m.form},e.createElement(E,{...a},e.createElement("form",{onSubmit:n(s)},e.createElement(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",disabled:o}),e.createElement(l,null),e.createElement(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:o}),e.createElement(l,null),e.createElement(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",disabled:o})))),e.createElement("div",{className:m.section},e.createElement(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:c})))};export{T as GithubConfigurator};
1
+ import{makeStyles as C,Paper as h,Divider as a}from"@material-ui/core";import e from"react";import{useForm as y,FormProvider as E}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as S}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as R}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as D}from"../Common/utils.esm.js";import{mapConfigToGithubCollectorConfig as G,defaultGithubConfig as L,mapGithubCollectorConfigToConfig as N}from"./utils.esm.js";const M=C(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)},form:{marginBottom:o.spacing(2)}})),T=({disabled:o,selectedCollector:t})=>{const n=y({defaultValues:t?G(t.config):L(),mode:"onChange"}),{formState:{errors:r},handleSubmit:l}=n,m=M(),c=!!r.branchProtections||!!r.branchRules||!!r.repositoryDetails||!!r.repositoryLanguages,{mutateAsync:p}=B(),[f,u]=S(R),{showModal:d}=v(),s=async g=>{if(!await d(D(t)))return;const b=N(g);await p({collectorId:t.id,config:b})&&u()};return F(w(t)),e.createElement(e.Fragment,null,e.createElement(h,{className:m.form},e.createElement(E,{...n},e.createElement("form",{onSubmit:l(s)},e.createElement(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",disabled:o}),e.createElement(a,null),e.createElement(i,{name:"branchRules",label:"Branch Rules",description:"Collects branch rules information from an entity's repository.",disabled:o}),e.createElement(a,null),e.createElement(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:o}),e.createElement(a,null),e.createElement(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",disabled:o})))),e.createElement("div",{className:m.section},e.createElement(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(s),disableSave:c})))};export{T as GithubConfigurator};
2
2
  //# sourceMappingURL=GithubConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{asArray as b}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as l,mapCacheConfigToHumanDurationOrBoolean as s}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as u,mapFiltersToCatalogFilter as p}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as y,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as h}from"../Common/CollectorOption.esm.js";const m="BranchProtections",g="RepositoryDetails",T="RepositoryLanguages",q=()=>({branchProtections:h(),repositoryDetails:h(),repositoryLanguages:h()});function O(r){const{branchProtections:o,repositoryDetails:n,repositoryLanguages:e}=r;if(o.enabled||n.enabled||e.enabled){const c={},f=[];if(c.collects=f,o.enabled){const{cacheConfig:t,frequency:i,filters:a}=o;f.push({factName:"branch_protections",type:m,frequency:C(i),filter:p(a),cache:s(t)})}if(n.enabled){const{cacheConfig:t,frequency:i,filters:a}=n;f.push({factName:"repository_details",type:g,frequency:C(i),filter:p(a),cache:s(t)})}if(e.enabled){const{cacheConfig:t,frequency:i,filters:a}=e;f.push({factName:"repository_languages",type:T,frequency:C(i),filter:p(a),cache:s(t)})}return c}return[]}function d(r){const o=q();if(r){const n=r.collects;if(n)for(const e of b(n)){const c=e.type;c===m&&(o.branchProtections={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),c===g&&(o.repositoryDetails={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),c===T&&(o.repositoryLanguages={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)})}}return o}export{m as BRANCH_PROTECTIONS_COLLECTOR_TYPE,g as REPOSITORY_DETAILS_COLLECTOR_TYPE,T as REPOSITORY_LANGUAGES_COLLECTOR_TYPE,q as defaultGithubConfig,d as mapConfigToGithubCollectorConfig,O as mapGithubCollectorConfigToConfig};
1
+ import{asArray as u}from"@spotify/backstage-plugin-soundcheck-common";import{defaultCollectorOption as s}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as d,mapFormIntegrationConfigToBackendConfig as c}from"../Common/utils.esm.js";const l="BranchProtections",f="BranchRules",p="RepositoryDetails",g="RepositoryLanguages",C=()=>({branchProtections:s(),branchRules:s(),repositoryDetails:s(),repositoryLanguages:s()});function T(i){const{branchProtections:o,branchRules:n,repositoryDetails:a,repositoryLanguages:t}=i;if(o.enabled||n.enabled||a.enabled||t.enabled){const e={},r=[];return e.collects=r,o.enabled&&r.push(c({factType:l,configOption:o,additionalParams:{factName:"branch_protections"}})),n.enabled&&r.push(c({factType:f,configOption:n,additionalParams:{factName:"branch_rules"}})),a.enabled&&r.push(c({factType:p,configOption:a,additionalParams:{factName:"repository_details"}})),t.enabled&&r.push(c({factType:g,configOption:t,additionalParams:{factName:"repository_languages"}})),e}return{collects:[]}}function b(i){const o=C();if(i){const n=i.collects;if(n)for(const a of u(n)){const t=a.type,e={...d({parentConfig:i,factTypeConfig:a}),enabled:!0};t===l&&(o.branchProtections=e),t===f&&(o.branchRules=e),t===p&&(o.repositoryDetails=e),t===g&&(o.repositoryLanguages=e)}}return o}export{l as BRANCH_PROTECTIONS_COLLECTOR_TYPE,f as BRANCH_RULES_COLLECTOR_TYPE,p as REPOSITORY_DETAILS_COLLECTOR_TYPE,g as REPOSITORY_LANGUAGES_COLLECTOR_TYPE,C as defaultGithubConfig,b as mapConfigToGithubCollectorConfig,T as mapGithubCollectorConfigToConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import e from"react";import{useForm as E,FormProvider as j}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as P}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as S}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}from"../../../../routes.esm.js";import{FooterButtons as B}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as D}from"../Common/utils.esm.js";import{mapConfigToGitlabCollectorConfig as G,defaultGitlabConfig as L,mapGitlabCollectorConfigToConfig as x}from"./utils.esm.js";const M=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),N=({disabled:t,selectedCollector:o})=>{const i=E({defaultValues:o?G(o.config):L(),mode:"onChange"}),{formState:{errors:a},handleSubmit:n}=i,l=M(),s=!!a.branchProtections||!!a.projectDetails||!!a.projectLanguages,{mutateAsync:p}=S(),[f,d]=P(y),{showModal:g}=v(),m=async u=>{if(!await g(D(o)))return;const C=x(u);await p({collectorId:o.id,config:C})&&d()};return F(w(o)),e.createElement(e.Fragment,null,e.createElement(h,{className:l.form},e.createElement(j,{...i},e.createElement("form",{onSubmit:n(m)},e.createElement(r,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's project.",disabled:t}),e.createElement(c,null),e.createElement(r,{name:"projectDetails",label:"Project Details",description:"Collects details about an entity's project.",disabled:t}),e.createElement(c,null),e.createElement(r,{name:"projectLanguages",label:"Project Languages",description:"Collects details about the languages used in an entity's project.",disabled:t})))),e.createElement("div",{className:l.section},e.createElement(B,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(m),disableSave:s})))};export{N as GitlabConfigurator};
1
+ import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import e from"react";import{useForm as E,FormProvider as j}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as P}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as S}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}from"../../../../routes.esm.js";import{FooterButtons as B}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as D}from"../Common/utils.esm.js";import{mapConfigToGitlabCollectorConfig as G,defaultGitlabConfig as L,mapGitlabCollectorConfigToConfig as x}from"./utils.esm.js";const M=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),N=({disabled:t,selectedCollector:o})=>{const i=E({defaultValues:o?G(o.config):L(),mode:"onChange"}),{formState:{errors:a},handleSubmit:n}=i,m=M(),s=!!a.branchProtections||!!a.projectDetails||!!a.projectLanguages,{mutateAsync:p}=S(),[f,d]=P(y),{showModal:g}=v(),l=async u=>{if(!await g(D(o)))return;const C=x(u);await p({collectorId:o.id,config:C})&&d()};return F(w(o)),e.createElement(e.Fragment,null,e.createElement(h,{className:m.form},e.createElement(j,{...i},e.createElement("form",{onSubmit:n(l)},e.createElement(r,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's project.",disabled:t}),e.createElement(c,null),e.createElement(r,{name:"projectDetails",label:"Project Details",description:"Collects details about an entity's project.",disabled:t}),e.createElement(c,null),e.createElement(r,{name:"projectLanguages",label:"Project Languages",description:"Collects details about the languages used in an entity's project.",disabled:t})))),e.createElement("div",{className:m.section},e.createElement(B,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(l),disableSave:s})))};export{N as GitlabConfigurator};
2
2
  //# sourceMappingURL=GitlabConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{asArray as b}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as l,mapCacheConfigToHumanDurationOrBoolean as s}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as u,mapFiltersToCatalogFilter as p}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as C,mapFrequencyToHumanDurationOrCron as m}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as h}from"../Common/CollectorOption.esm.js";const g="branch_protections",y="project_details",T="project_languages",q=()=>({branchProtections:h(),projectDetails:h(),projectLanguages:h()});function O(r){const{branchProtections:c,projectDetails:o,projectLanguages:e}=r;if(c.enabled||o.enabled||e.enabled){const n={},f=[];if(n.collects=f,c.enabled){const{cacheConfig:t,frequency:a,filters:i}=c;f.push({type:g,frequency:m(a),filter:p(i),cache:s(t)})}if(o.enabled){const{cacheConfig:t,frequency:a,filters:i}=o;f.push({type:y,frequency:m(a),filter:p(i),cache:s(t)})}if(e.enabled){const{cacheConfig:t,frequency:a,filters:i}=e;f.push({type:T,frequency:m(a),filter:p(i),cache:s(t)})}return n}return{collects:[]}}function d(r){const c=q();if(r){const o=r.collects;if(o)for(const e of b(o)){const n=e.type;n===g&&(c.branchProtections={enabled:!0,frequency:C(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),n===y&&(c.projectDetails={enabled:!0,frequency:C(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),n===T&&(c.projectLanguages={enabled:!0,frequency:C(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)})}}return c}export{g as BRANCH_PROTECTIONS_COLLECTOR_TYPE,y as PROJECT_DETAILS_COLLECTOR_TYPE,T as PROJECT_LANGUAGES_COLLECTOR_TYPE,q as defaultGitlabConfig,d as mapConfigToGitlabCollectorConfig,O as mapGitlabCollectorConfigToConfig};
1
+ import{asArray as g}from"@spotify/backstage-plugin-soundcheck-common";import{defaultCollectorOption as r}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as C,mapFormIntegrationConfigToBackendConfig as i}from"../Common/utils.esm.js";const f="branch_protections",p="project_details",l="project_languages",s=()=>({branchProtections:r(),projectDetails:r(),projectLanguages:r()});function T(a){const{branchProtections:o,projectDetails:n,projectLanguages:e}=a;if(o.enabled||n.enabled||e.enabled){const c={},t=[];return c.collects=t,o.enabled&&t.push(i({factType:f,configOption:o})),n.enabled&&t.push(i({factType:p,configOption:n})),e.enabled&&t.push(i({factType:l,configOption:e})),c}return{collects:[]}}function b(a){const o=s();if(a){const n=a.collects;if(n)for(const e of g(n)){const c=e.type,t={...C({parentConfig:a,factTypeConfig:e}),enabled:!0};c===f&&(o.branchProtections=t),c===p&&(o.projectDetails=t),c===l&&(o.projectLanguages=t)}}return o}export{f as BRANCH_PROTECTIONS_COLLECTOR_TYPE,p as PROJECT_DETAILS_COLLECTOR_TYPE,l as PROJECT_LANGUAGES_COLLECTOR_TYPE,s as defaultGitlabConfig,b as mapConfigToGitlabCollectorConfig,T as mapGitlabCollectorConfigToConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as C}from"@hookform/resolvers/zod";import{makeStyles as g,Paper as S}from"@material-ui/core";import o from"react";import{useForm as h,FormProvider as v}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as b}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as E}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as J}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as y}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as H,confirmationModalContent as I}from"../Common/utils.esm.js";import{IssuesSearchFactDetailsComponent as M}from"./IssuesSearchFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as N,defaultJiraConfig as P,issueSearchCollectorConfig as R,mapJiraCollectorConfigToConfig as T}from"./utils.esm.js";import{jiraCollectorFormSchema as k}from"./validation.esm.js";const x=g(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),D=({disabled:t,selectedCollector:e})=>{const r=h({defaultValues:e?N(e.config):P(),mode:"onChange",resolver:C(k)}),{formState:{errors:n},handleSubmit:i}=r,a=x(),s=!!n.issuesSearch,{mutateAsync:l}=E(),[c,f]=F(J),{showModal:p}=b(),m=async u=>{if(!await p(I(e)))return;const d=T(u);await l({collectorId:e.id,config:d})&&f()};return B(H(e)),o.createElement(o.Fragment,null,o.createElement(S,{className:a.section},o.createElement(v,{...r},o.createElement("form",{onSubmit:i(m)},o.createElement(y,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",disabled:t,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:R()}})))),o.createElement("div",{className:a.section},o.createElement(w,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})))};export{D as JiraConfigurator};
1
+ import{zodResolver as C}from"@hookform/resolvers/zod";import{makeStyles as g,Paper as S}from"@material-ui/core";import o from"react";import{useForm as h,FormProvider as v}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as b}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as E}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as J}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as y}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as H,confirmationModalContent as I}from"../Common/utils.esm.js";import{IssuesSearchFactDetailsComponent as M}from"./IssuesSearchFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as N,defaultJiraConfig as P,issueSearchCollectorConfig as R,mapJiraCollectorConfigToConfig as T}from"./utils.esm.js";import{jiraCollectorFormSchema as k}from"./validation.esm.js";const x=g(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),D=({disabled:t,selectedCollector:e})=>{const r=h({defaultValues:e?N(e.config):P(),mode:"onChange",resolver:C(k)}),{formState:{errors:n},handleSubmit:i}=r,a=x(),s=!!n.issuesSearch,{mutateAsync:l}=E(),[c,p]=F(J),{showModal:f}=b(),m=async u=>{if(!await f(I(e)))return;const d=T(u);await l({collectorId:e.id,config:d})&&p()};return B(H(e)),o.createElement(o.Fragment,null,o.createElement(S,{className:a.section},o.createElement(v,{...r},o.createElement("form",{onSubmit:i(m)},o.createElement(y,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",disabled:t,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:R()}})))),o.createElement("div",{className:a.section},o.createElement(w,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})))};export{D as JiraConfigurator};
2
2
  //# sourceMappingURL=JiraConfigurator.esm.js.map