@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
@@ -1,2 +1,2 @@
1
- import{useRouteRef as I}from"@backstage/core-plugin-api";import{Typography as T,Box as M,Grid as S}from"@material-ui/core";import a,{useState as i,useEffect as A,useMemo as B}from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as D}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useTrackPassRateTrend as F}from"../../../hooks/aggregations/useTrackPassRateTrend.esm.js";import"react-router-dom";import{campaignDetailsRouteRef as x}from"../../../routes.esm.js";import{campaignTrackPassRatesCsvFilename as N}from"../../../utils/charts.esm.js";import{PassRateGrid as V}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{PassRateTable as H}from"../../PassRateTable/PassRateTable.esm.js";import"../../PassRateTable/types.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as j}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as q}from"../../TechHealth/Loading/Loading.esm.js";import{PassRateTabHeader as z}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as J}from"../PassRateTabStyles.esm.js";import{trackPassRatesToCsv as K}from"../TechHealthExportFunctions.esm.js";import{ViewMode as u,generateTrackPassRateGridData as O}from"../techHealthTabUtils.esm.js";import{generateColumns as Q}from"../TrackResultsTab/TrackResultsTab.esm.js";const U=()=>{const k=J(),{filter:g}=j(),m=I(x),{data:P}=D({orderAlphabetical:"default",searchByStatus:"active"}),r=P?.edges.map(e=>e.node)?.map(({id:e,track:f})=>({campaignId:e,trackId:f.id})),v=r?.map(({trackId:e})=>({trackId:e})),{data:s,isLoading:R,isError:h}=F({...g,tracks:v,trackTypes:{included:["campaign"]}}),[c,C]=i(u.TABLE),[t,E]=i(""),[n,p]=i(0),[l,w]=i(10);A(()=>{p(0)},[g,t]);const b=B(()=>Q(s?.individualTrackPassRate??[],void 0,m,r),[s?.individualTrackPassRate,m,r]);if(R)return a.createElement(q,null);if(h)return a.createElement(T,{color:"error"},"Failed to load campaign tracks");const{individualTrackPassRate:d}=s;if(!d)return a.createElement(T,{color:"error"},"No available campaign tracks");const o=t.length?d.filter(({trackName:e})=>e?.toLowerCase()?.includes(t.toLowerCase())):d,L=async()=>K(o,r),y=(e,f)=>{p(()=>f)},G=e=>{w(+e.target.value),p(0)};return a.createElement(M,{className:k.root},a.createElement(S,{container:!0,direction:"row"},a.createElement(z,{viewMode:c,setViewMode:C,isLoading:R,searchTerm:t,setSearchTerm:E,searchPlaceholder:"Search Available Campaigns",fetchCsvData:L,csvFilename:N}),c===u.TABLE&&a.createElement(H,{data:o,columns:b}),c===u.GRID&&a.createElement(V,{data:O(o.slice(n*l,(n+1)*l),void 0,m,r),totalCount:o?.length??0,page:n,rowsPerPage:l,onPageChange:y,onRowsPerPageChange:G})))};export{U as CampaignResultsTab};
1
+ import{useRouteRef as I}from"@backstage/core-plugin-api";import{Typography as T,Box as M,Grid as S}from"@material-ui/core";import a,{useState as i,useEffect as A,useMemo as B}from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as D}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useTrackPassRateTrend as F}from"../../../hooks/aggregations/useTrackPassRateTrend.esm.js";import"react-router-dom";import{campaignDetailsRouteRef as x}from"../../../routes.esm.js";import{campaignTrackPassRatesCsvFilename as N}from"../../../utils/charts.esm.js";import{PassRateGrid as V}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{PassRateTable as H}from"../../PassRateTable/PassRateTable.esm.js";import"../../PassRateTable/types.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as j}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as q}from"../../TechHealth/Loading/Loading.esm.js";import{PassRateTabHeader as z}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as J}from"../PassRateTabStyles.esm.js";import{trackPassRatesToCsv as K}from"../TechHealthExportFunctions.esm.js";import{ViewMode as u,generateTrackPassRateGridData as O}from"../techHealthTabUtils.esm.js";import{generateColumns as Q}from"../TrackResultsTab/TrackResultsTab.esm.js";const U=()=>{const k=J(),{filter:g}=j(),m=I(x),{data:P}=D({orderAlphabetical:"default",searchByStatus:"active"}),r=P?.edges.map(e=>e.node)?.map(({id:e,track:f})=>({campaignId:e,trackId:f.id})),v=r?.map(({trackId:e})=>({trackId:e})),{data:s,isLoading:R,isError:h}=F({...g,tracks:v,trackTypes:{included:["campaign"]}}),[c,C]=i(u.TABLE),[t,E]=i(""),[n,p]=i(0),[l,w]=i(10);A(()=>{p(0)},[g,t]);const b=B(()=>Q(s?.individualTrackPassRate??[],void 0,m,r),[s?.individualTrackPassRate,m,r]);if(R)return a.createElement(q,null);if(h)return a.createElement(T,{color:"error"},"Failed to load campaign tracks");const{individualTrackPassRate:d}=s;if(!d)return a.createElement(T,{color:"error"},"No available campaign tracks");const o=t.length?d.filter(({trackName:e})=>e?.toLowerCase()?.includes(t.toLowerCase())):d,L=async()=>K(o,r),y=(e,f)=>{p(()=>f)},G=e=>{w(+e.target.value),p(0)};return a.createElement(M,{className:k.root},a.createElement(S,{container:!0,direction:"row"},a.createElement(z,{viewMode:c,setViewMode:C,isLoading:R,searchTerm:t,setSearchTerm:E,searchPlaceholder:"Search Available Campaigns",fetchCsvData:L,csvFilename:N}),c===u.TABLE&&a.createElement(H,{data:o,columns:b}),c===u.GRID&&a.createElement(V,{data:O(o.slice(n*l,(n+1)*l),void 0,m,r),totalCount:o?.length??0,page:n,rowsPerPage:l,onPageChange:y,onRowsPerPageChange:G})))};export{U as CampaignResultsTab};
2
2
  //# sourceMappingURL=CampaignResultsTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as v}from"@backstage/core-plugin-api";import{Typography as R,Box as L,Grid as N}from"@material-ui/core";import r,{useState as m,useEffect as A}from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useCheckPassRateTrend as D}from"../../../hooks/aggregations/useCheckPassRateTrend.esm.js";import"react-router-dom";import{checkDetailsRouteRef as y}from"../../../routes.esm.js";import{checkPassRatesCsvFilename as M}from"../../../utils/charts.esm.js";import{PassRateGrid as O}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{PassRateTable as S}from"../../PassRateTable/PassRateTable.esm.js";import"../../PassRateTable/types.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as x}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as F}from"../../TechHealth/Loading/Loading.esm.js";import{NameColumn as G}from"../NameColumn.esm.js";import{ActionColumn as B}from"../ActionColumn.esm.js";import{OwnerColumn as I}from"../OwnerColumn.esm.js";import{checkPassRatesToCsv as V}from"../TechHealthExportFunctions.esm.js";import{PassRateTabHeader as z}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as H}from"../PassRateTabStyles.esm.js";import{ViewMode as C,generateCheckPassRateGridData as W}from"../techHealthTabUtils.esm.js";import"recharts";import"../../Charts/ChartTypes.esm.js";import"../../Charts/LineChart/LineChart.esm.js";import"../../Charts/chartUtils.esm.js";import"luxon";import"../../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"../../Charts/BarChart/BarChart.esm.js";import"../../PassRateTable/NewPassRateTable.esm.js";import{MostRecentColumn as j}from"../MostRecentColumn.esm.js";import{CheckTrendColumn as q}from"./CheckTrendColumn.esm.js";function J(s){return[{label:"NAME",id:"checkName",renderCell:e=>r.createElement(G,{name:e.checkName??e.id,description:e.checkDescription})},{label:"LATEST",id:"snapshotPassRate",renderCell:e=>r.createElement(j,{snapshot:e.snapshotPassRate})},{label:"TREND",id:"trendPassRate",renderCell:e=>r.createElement(q,{row:e})},{label:"OWNER",id:"checkOwner",renderCell:e=>r.createElement(I,{ownerEntityRef:e.checkOwnerRef??void 0})},{label:"ACTION",id:"action",renderCell:(e,o,n)=>r.createElement(B,{navigateTo:s({checkId:e.id}),disabled:o,toolTipText:n})}]}const K=()=>{const s=H(),{filter:e}=x(),o=v(y),{data:n,isLoading:u,isError:E}=D(e),[c,k]=m(C.TABLE),[t,T]=m(""),[l,p]=m(0),[d,P]=m(10);if(A(()=>{p(0)},[e,t]),u)return r.createElement(F,null);if(E)return r.createElement(R,{color:"error"},"Failed to load checks");const{individualCheckPassRates:h}=n;if(!h)return r.createElement(R,{color:"error"},"No available checks");const a=t.length?h.filter(({id:i,checkName:f})=>f?.toLowerCase()?.includes(t.toLowerCase())||i.toLowerCase().includes(t.toLowerCase())):h,w=async()=>V(a),g=(i,f)=>{p(()=>f)},b=i=>{P(+i.target.value),p(0)};return r.createElement(L,{className:s.root},r.createElement(N,{container:!0,direction:"row"},r.createElement(z,{viewMode:c,setViewMode:k,isLoading:u,searchTerm:t,setSearchTerm:T,searchPlaceholder:"Search for Available Checks",fetchCsvData:w,csvFilename:M}),c===C.TABLE&&r.createElement(S,{data:a,columns:J(o),showsCheckData:!0}),c===C.GRID&&r.createElement(O,{data:W(a.slice(l*d,(l+1)*d),o),totalCount:a?.length??0,page:l,rowsPerPage:d,onPageChange:g,onRowsPerPageChange:b})))};export{K as CheckResultsTab};
1
+ import{useRouteRef as v}from"@backstage/core-plugin-api";import{Typography as R,Box as L,Grid as N}from"@material-ui/core";import r,{useState as m,useEffect as A}from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useCheckPassRateTrend as D}from"../../../hooks/aggregations/useCheckPassRateTrend.esm.js";import"react-router-dom";import{checkDetailsRouteRef as y}from"../../../routes.esm.js";import{checkPassRatesCsvFilename as M}from"../../../utils/charts.esm.js";import{PassRateGrid as O}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{PassRateTable as S}from"../../PassRateTable/PassRateTable.esm.js";import"../../PassRateTable/types.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as x}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as F}from"../../TechHealth/Loading/Loading.esm.js";import{NameColumn as G}from"../NameColumn.esm.js";import{ActionColumn as B}from"../ActionColumn.esm.js";import{OwnerColumn as I}from"../OwnerColumn.esm.js";import{checkPassRatesToCsv as V}from"../TechHealthExportFunctions.esm.js";import{PassRateTabHeader as z}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as H}from"../PassRateTabStyles.esm.js";import{ViewMode as C,generateCheckPassRateGridData as W}from"../techHealthTabUtils.esm.js";import"recharts";import"../../Charts/ChartTypes.esm.js";import"../../Charts/LineChart/LineChart.esm.js";import"../../Charts/chartUtils.esm.js";import"luxon";import"../../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"../../Charts/BarChart/BarChart.esm.js";import"../../PassRateTable/NewPassRateTable.esm.js";import{MostRecentColumn as j}from"../MostRecentColumn.esm.js";import{CheckTrendColumn as q}from"./CheckTrendColumn.esm.js";function J(s){return[{label:"NAME",id:"checkName",renderCell:e=>r.createElement(G,{name:e.checkName??e.id,description:e.checkDescription})},{label:"LATEST",id:"snapshotPassRate",renderCell:e=>r.createElement(j,{snapshot:e.snapshotPassRate})},{label:"TREND",id:"trendPassRate",renderCell:e=>r.createElement(q,{row:e})},{label:"OWNER",id:"checkOwner",renderCell:e=>r.createElement(I,{ownerEntityRef:e.checkOwnerRef??void 0})},{label:"ACTION",id:"action",renderCell:(e,o,n)=>r.createElement(B,{navigateTo:s({checkId:e.id}),disabled:o,toolTipText:n})}]}const K=()=>{const s=H(),{filter:e}=x(),o=v(y),{data:n,isLoading:u,isError:E}=D(e),[c,k]=m(C.TABLE),[t,T]=m(""),[l,p]=m(0),[d,P]=m(10);if(A(()=>{p(0)},[e,t]),u)return r.createElement(F,null);if(E)return r.createElement(R,{color:"error"},"Failed to load checks");const{individualCheckPassRates:h}=n;if(!h)return r.createElement(R,{color:"error"},"No available checks");const a=t.length?h.filter(({id:i,checkName:f})=>f?.toLowerCase()?.includes(t.toLowerCase())||i.toLowerCase().includes(t.toLowerCase())):h,w=async()=>V(a),g=(i,f)=>{p(()=>f)},b=i=>{P(+i.target.value),p(0)};return r.createElement(L,{className:s.root},r.createElement(N,{container:!0,direction:"row"},r.createElement(z,{viewMode:c,setViewMode:k,isLoading:u,searchTerm:t,setSearchTerm:T,searchPlaceholder:"Search for Available Checks",fetchCsvData:w,csvFilename:M}),c===C.TABLE&&r.createElement(S,{data:a,columns:J(o),showsCheckData:!0}),c===C.GRID&&r.createElement(O,{data:W(a.slice(l*d,(l+1)*d),o),totalCount:a?.length??0,page:l,rowsPerPage:d,onPageChange:g,onRowsPerPageChange:b})))};export{K as CheckResultsTab};
2
2
  //# sourceMappingURL=CheckResultsTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as N}from"@backstage/catalog-model";import{useApi as V,useRouteRef as H}from"@backstage/core-plugin-api";import{entityRouteRef as W}from"@backstage/plugin-catalog-react";import{Typography as L,Box as $,Grid as j}from"@material-ui/core";import t,{useState as i,useEffect as A}from"react";import{soundcheckApiRef as q}from"../../../api.esm.js";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useEntityPassRateTrend as z}from"../../../hooks/aggregations/useEntityPassRateTrend.esm.js";import"react-router-dom";import{entityPassRatesCsvFilename as J}from"../../../utils/charts.esm.js";import{PassRateGrid as K}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{NewPassRateTable as Q}from"../../PassRateTable/NewPassRateTable.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as U}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as X}from"../../TechHealth/Loading/Loading.esm.js";import{ActionColumn as Y}from"../ActionColumn.esm.js";import{MostRecentColumn as Z}from"../MostRecentColumn.esm.js";import{NameColumn as _}from"../NameColumn.esm.js";import{OwnerColumn as ee}from"../OwnerColumn.esm.js";import{PassRateTabHeader as te}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as re}from"../PassRateTabStyles.esm.js";import{entityPassRatesToCsv as oe}from"../TechHealthExportFunctions.esm.js";import{ViewMode as f,generateEntityPassRateGridData as ae}from"../techHealthTabUtils.esm.js";import{EntityTrendColumn as ie}from"./EntityTrendColumn.esm.js";function ne(d){return[{label:"NAME",id:"entityName",renderCell:({id:r,entityDescription:n})=>t.createElement(_,{name:N(r).name,description:n})},{label:"LATEST",id:"latest",renderCell:r=>t.createElement(Z,{snapshot:r.snapshotPassRate})},{label:"TREND",id:"trend",renderCell:r=>t.createElement(ie,{row:r})},{label:"OWNER",id:"entityOwnerRef",renderCell:({entityOwnerRef:r})=>t.createElement(ee,{ownerEntityRef:r??void 0})},{label:"ACTION",id:"action",renderCell:({id:r})=>t.createElement(Y,{navigateTo:`${d(N(r))}/soundcheck`})}]}const se=()=>{const d=re(),r=V(q),{filter:n}=U(),g=H(W),[E,P]=i([]),[R,s]=i(void 0),[C,p]=i(0),[u,I]=i(10),{data:o,isLoading:y,isError:x}=z({filter:n,first:u,after:R}),[a,D]=i(o?.individualEntityPassRates),S=a?.edges?a?.edges[a?.edges.length-1]:{cursor:""};A(()=>{o&&D(()=>({totalCount:o.individualEntityPassRates.totalCount,edges:o.individualEntityPassRates.edges,pageInfo:{endCursor:o.individualEntityPassRates.pageInfo.endCursor,hasNextPage:o.individualEntityPassRates.pageInfo.hasNextPage??!1,hasPreviousPage:o.individualEntityPassRates.pageInfo.hasPreviousPage??!1}}))},[o]);const[c,F]=i(f.TABLE),[m,G]=i("");if(A(()=>{p(0),s("")},[n]),y)return t.createElement(X,null);if(x)return t.createElement(L,{color:"error"},"Failed to load entities");if(!a?.edges?.length)return t.createElement(L,{color:"error"},"No available entities");const h=m.length?{...a,edges:a.edges.filter(({node:e})=>e.id.toLowerCase().includes(m.toLowerCase())),totalCount:a.edges.filter(({node:e})=>e.id.toLowerCase().includes(m.toLowerCase())).length}:a,v=h?.edges.map(({node:e})=>e)??[],w=h?.totalCount??0,M=async()=>{const{individualEntityPassRates:e}=await r.getIndividualEntityPassRates({filter:n});return oe(e.edges.map(({node:l})=>l))},O=()=>{P(e=>[...e,R]),s(S?.cursor)},B=()=>{s(E[E.length-1]),P(e=>e.slice(0,-1))},T=(e,l)=>{p(k=>(l>k?O():B(),l))},b=e=>{s(void 0),I(+e.target.value),p(0)};return t.createElement($,{className:d.root},t.createElement(j,{container:!0,direction:"row"},t.createElement(te,{viewMode:c,setViewMode:F,isLoading:y,searchTerm:m,setSearchTerm:G,searchPlaceholder:"Search available entities",fetchCsvData:M,csvFilename:J}),c===f.TABLE&&t.createElement(Q,{data:v,totalCount:w,page:C,rowsPerPage:u,columns:ne(g),onPageChange:T,onRowsPerPageChange:b}),c===f.GRID&&t.createElement(K,{data:ae(v,g),totalCount:w,page:C,rowsPerPage:u,onPageChange:T,onRowsPerPageChange:b})))};export{se as EntityResultsTab};
1
+ import{parseEntityRef as N}from"@backstage/catalog-model";import{useApi as V,useRouteRef as H}from"@backstage/core-plugin-api";import{entityRouteRef as W}from"@backstage/plugin-catalog-react";import{Typography as L,Box as $,Grid as j}from"@material-ui/core";import t,{useState as i,useEffect as A}from"react";import{soundcheckApiRef as q}from"../../../api.esm.js";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useEntityPassRateTrend as z}from"../../../hooks/aggregations/useEntityPassRateTrend.esm.js";import"react-router-dom";import{entityPassRatesCsvFilename as J}from"../../../utils/charts.esm.js";import{PassRateGrid as K}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{NewPassRateTable as Q}from"../../PassRateTable/NewPassRateTable.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as U}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as X}from"../../TechHealth/Loading/Loading.esm.js";import{ActionColumn as Y}from"../ActionColumn.esm.js";import{MostRecentColumn as Z}from"../MostRecentColumn.esm.js";import{NameColumn as _}from"../NameColumn.esm.js";import{OwnerColumn as ee}from"../OwnerColumn.esm.js";import{PassRateTabHeader as te}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as re}from"../PassRateTabStyles.esm.js";import{entityPassRatesToCsv as oe}from"../TechHealthExportFunctions.esm.js";import{ViewMode as f,generateEntityPassRateGridData as ae}from"../techHealthTabUtils.esm.js";import{EntityTrendColumn as ie}from"./EntityTrendColumn.esm.js";function ne(d){return[{label:"NAME",id:"entityName",renderCell:({id:r,entityDescription:n})=>t.createElement(_,{name:N(r).name,description:n})},{label:"LATEST",id:"latest",renderCell:r=>t.createElement(Z,{snapshot:r.snapshotPassRate})},{label:"TREND",id:"trend",renderCell:r=>t.createElement(ie,{row:r})},{label:"OWNER",id:"entityOwnerRef",renderCell:({entityOwnerRef:r})=>t.createElement(ee,{ownerEntityRef:r??void 0})},{label:"ACTION",id:"action",renderCell:({id:r})=>t.createElement(Y,{navigateTo:`${d(N(r))}/soundcheck`})}]}const se=()=>{const d=re(),r=V(q),{filter:n}=U(),g=H(W),[E,P]=i([]),[R,s]=i(void 0),[C,p]=i(0),[u,I]=i(10),{data:o,isLoading:y,isError:x}=z({filter:n,first:u,after:R}),[a,D]=i(o?.individualEntityPassRates),S=a?.edges?a?.edges[a?.edges.length-1]:{cursor:""};A(()=>{o&&D(()=>({totalCount:o.individualEntityPassRates.totalCount,edges:o.individualEntityPassRates.edges,pageInfo:{endCursor:o.individualEntityPassRates.pageInfo.endCursor,hasNextPage:o.individualEntityPassRates.pageInfo.hasNextPage??!1,hasPreviousPage:o.individualEntityPassRates.pageInfo.hasPreviousPage??!1}}))},[o]);const[c,F]=i(f.TABLE),[m,G]=i("");if(A(()=>{p(0),s("")},[n]),y)return t.createElement(X,null);if(x)return t.createElement(L,{color:"error"},"Failed to load entities");if(!a?.edges?.length)return t.createElement(L,{color:"error"},"No available entities");const h=m.length?{...a,edges:a.edges.filter(({node:e})=>e.id.toLowerCase().includes(m.toLowerCase())),totalCount:a.edges.filter(({node:e})=>e.id.toLowerCase().includes(m.toLowerCase())).length}:a,v=h?.edges.map(({node:e})=>e)??[],w=h?.totalCount??0,M=async()=>{const{individualEntityPassRates:e}=await r.getIndividualEntityPassRates({filter:n});return oe(e.edges.map(({node:l})=>l))},O=()=>{P(e=>[...e,R]),s(S?.cursor)},B=()=>{s(E[E.length-1]),P(e=>e.slice(0,-1))},T=(e,l)=>{p(k=>(l>k?O():B(),l))},b=e=>{s(void 0),I(+e.target.value),p(0)};return t.createElement($,{className:d.root},t.createElement(j,{container:!0,direction:"row"},t.createElement(te,{viewMode:c,setViewMode:F,isLoading:y,searchTerm:m,setSearchTerm:G,searchPlaceholder:"Search available entities",fetchCsvData:M,csvFilename:J}),c===f.TABLE&&t.createElement(Q,{data:v,totalCount:w,page:C,rowsPerPage:u,columns:ne(g),onPageChange:T,onRowsPerPageChange:b}),c===f.GRID&&t.createElement(K,{data:ae(v,g),totalCount:w,page:C,rowsPerPage:u,onPageChange:T,onRowsPerPageChange:b})))};export{se as EntityResultsTab};
2
2
  //# sourceMappingURL=EntityResultsTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as G}from"@backstage/catalog-model";import{useApi as H,useRouteRef as O}from"@backstage/core-plugin-api";import{entityRouteRef as j}from"@backstage/plugin-catalog-react";import{Typography as L,Box as q,Grid as z}from"@material-ui/core";import r,{useState as s,useEffect as A}from"react";import{soundcheckApiRef as J}from"../../../api.esm.js";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGroupPassRateTrend as K}from"../../../hooks/aggregations/useGroupPassRateTrend.esm.js";import"react-router-dom";import{groupPassRatesCsvFilename as Q}from"../../../utils/charts.esm.js";import{PassRateGrid as U}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{NewPassRateTable as W}from"../../PassRateTable/NewPassRateTable.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as X}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as Y}from"../../TechHealth/Loading/Loading.esm.js";import{ActionColumn as Z}from"../ActionColumn.esm.js";import{MostRecentColumn as _}from"../MostRecentColumn.esm.js";import{NameColumn as $}from"../NameColumn.esm.js";import{PassRateTabHeader as ee}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as re}from"../PassRateTabStyles.esm.js";import{groupPassRatesToCsv as te}from"../TechHealthExportFunctions.esm.js";import{ViewMode as c,generateGroupPassRateGridData as oe}from"../techHealthTabUtils.esm.js";import{GroupTrendColumn as ae}from"./GroupTrendColumn.esm.js";function se(p){return[{label:"NAME",id:"groupName",renderCell:({groupTitle:t,id:i})=>r.createElement($,{name:t??G(i).name})},{label:"LATEST",id:"latest",renderCell:t=>r.createElement(_,{snapshot:t.snapshotPassRate})},{label:"TREND",id:"trend",renderCell:t=>r.createElement(ae,{row:t})},{label:"ACTION",id:"action",renderCell:({id:t})=>r.createElement(Z,{navigateTo:p(G(t))})}]}const ie=()=>{const p=re(),t=H(J),{filter:i}=X();i.context=void 0;const f=O(j),[P,R]=s([]),[C,n]=s(void 0),[h,u]=s(0),[g,I]=s(10),{data:o,isLoading:E,isError:x}=K({filter:i,first:g,after:C}),[a,y]=s(o?.groupPassRates),S=a?.edges?a?.edges[a?.edges.length-1]:{cursor:""};A(()=>{o&&y(()=>({totalCount:o.groupPassRates.totalCount,edges:o.groupPassRates.edges,pageInfo:{endCursor:o.groupPassRates.pageInfo.endCursor,hasNextPage:o.groupPassRates.pageInfo.hasNextPage??!1,hasPreviousPage:o.groupPassRates.pageInfo.hasPreviousPage??!1}}))},[o]);const[d,D]=s(c.TABLE),[m,F]=s("");if(A(()=>{u(0),n("")},[i]),E)return r.createElement(Y,null);if(x)return r.createElement(L,{color:"error"},"Failed to load groups");if(!a?.edges?.length)return r.createElement(L,{color:"error"},"No available groups");const T=m.length?{...a,edges:a.edges.filter(({node:e})=>e.groupTitle?.toLowerCase()?.includes(m.toLowerCase())||e.id.toLowerCase().includes(m.toLowerCase()))}:a,v=T?.edges.map(({node:e})=>e)??[],w=T?.totalCount??0,M=async()=>{const{groupPassRates:e}=await t.getIndividualGroupPassRates({filter:i});return te(e.edges.map(({node:l})=>l))},B=()=>{R(e=>[...e,C]),n(S?.cursor)},V=()=>{n(P[P.length-1]),R(e=>e.slice(0,-1))},b=(e,l)=>{u(k=>(l>k?B():V(),l))},N=e=>{n(void 0),I(+e.target.value),u(0)};return r.createElement(q,{className:p.root},r.createElement(z,{container:!0,direction:"row"},r.createElement(ee,{viewMode:d,setViewMode:D,isLoading:E,searchTerm:m,setSearchTerm:F,searchPlaceholder:"Search available teams",csvFilename:Q,fetchCsvData:M}),d===c.TABLE&&r.createElement(W,{data:v,totalCount:w,page:h,rowsPerPage:g,columns:se(f),onPageChange:b,onRowsPerPageChange:N}),d===c.GRID&&r.createElement(U,{data:oe(v,f),totalCount:w,page:h,rowsPerPage:g,onPageChange:b,onRowsPerPageChange:N})))};export{ie as GroupResultsTab};
1
+ import{parseEntityRef as G}from"@backstage/catalog-model";import{useApi as H,useRouteRef as O}from"@backstage/core-plugin-api";import{entityRouteRef as j}from"@backstage/plugin-catalog-react";import{Typography as L,Box as q,Grid as z}from"@material-ui/core";import r,{useState as s,useEffect as A}from"react";import{soundcheckApiRef as J}from"../../../api.esm.js";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGroupPassRateTrend as K}from"../../../hooks/aggregations/useGroupPassRateTrend.esm.js";import"react-router-dom";import{groupPassRatesCsvFilename as Q}from"../../../utils/charts.esm.js";import{PassRateGrid as U}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{NewPassRateTable as W}from"../../PassRateTable/NewPassRateTable.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as X}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as Y}from"../../TechHealth/Loading/Loading.esm.js";import{ActionColumn as Z}from"../ActionColumn.esm.js";import{MostRecentColumn as _}from"../MostRecentColumn.esm.js";import{NameColumn as $}from"../NameColumn.esm.js";import{PassRateTabHeader as ee}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as re}from"../PassRateTabStyles.esm.js";import{groupPassRatesToCsv as te}from"../TechHealthExportFunctions.esm.js";import{ViewMode as c,generateGroupPassRateGridData as oe}from"../techHealthTabUtils.esm.js";import{GroupTrendColumn as ae}from"./GroupTrendColumn.esm.js";function se(p){return[{label:"NAME",id:"groupName",renderCell:({groupTitle:t,id:i})=>r.createElement($,{name:t??G(i).name})},{label:"LATEST",id:"latest",renderCell:t=>r.createElement(_,{snapshot:t.snapshotPassRate})},{label:"TREND",id:"trend",renderCell:t=>r.createElement(ae,{row:t})},{label:"ACTION",id:"action",renderCell:({id:t})=>r.createElement(Z,{navigateTo:p(G(t))})}]}const ie=()=>{const p=re(),t=H(J),{filter:i}=X();i.context=void 0;const f=O(j),[P,R]=s([]),[C,n]=s(void 0),[h,u]=s(0),[g,I]=s(10),{data:o,isLoading:E,isError:x}=K({filter:i,first:g,after:C}),[a,y]=s(o?.groupPassRates),S=a?.edges?a?.edges[a?.edges.length-1]:{cursor:""};A(()=>{o&&y(()=>({totalCount:o.groupPassRates.totalCount,edges:o.groupPassRates.edges,pageInfo:{endCursor:o.groupPassRates.pageInfo.endCursor,hasNextPage:o.groupPassRates.pageInfo.hasNextPage??!1,hasPreviousPage:o.groupPassRates.pageInfo.hasPreviousPage??!1}}))},[o]);const[d,D]=s(c.TABLE),[m,F]=s("");if(A(()=>{u(0),n("")},[i]),E)return r.createElement(Y,null);if(x)return r.createElement(L,{color:"error"},"Failed to load groups");if(!a?.edges?.length)return r.createElement(L,{color:"error"},"No available groups");const T=m.length?{...a,edges:a.edges.filter(({node:e})=>e.groupTitle?.toLowerCase()?.includes(m.toLowerCase())||e.id.toLowerCase().includes(m.toLowerCase()))}:a,v=T?.edges.map(({node:e})=>e)??[],w=T?.totalCount??0,M=async()=>{const{groupPassRates:e}=await t.getIndividualGroupPassRates({filter:i});return te(e.edges.map(({node:l})=>l))},B=()=>{R(e=>[...e,C]),n(S?.cursor)},V=()=>{n(P[P.length-1]),R(e=>e.slice(0,-1))},b=(e,l)=>{u(k=>(l>k?B():V(),l))},N=e=>{n(void 0),I(+e.target.value),u(0)};return r.createElement(q,{className:p.root},r.createElement(z,{container:!0,direction:"row"},r.createElement(ee,{viewMode:d,setViewMode:D,isLoading:E,searchTerm:m,setSearchTerm:F,searchPlaceholder:"Search available teams",csvFilename:Q,fetchCsvData:M}),d===c.TABLE&&r.createElement(W,{data:v,totalCount:w,page:h,rowsPerPage:g,columns:se(f),onPageChange:b,onRowsPerPageChange:N}),d===c.GRID&&r.createElement(U,{data:oe(v,f),totalCount:w,page:h,rowsPerPage:g,onPageChange:b,onRowsPerPageChange:N})))};export{ie as GroupResultsTab};
2
2
  //# sourceMappingURL=GroupResultsTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as N}from"@backstage/core-plugin-api";import{Typography as k,Box as O,Grid as A}from"@material-ui/core";import e,{useState as d,useEffect as y,useMemo as D}from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useTrackPassRateTrend as S}from"../../../hooks/aggregations/useTrackPassRateTrend.esm.js";import"react-router-dom";import{trackDetailsRouteRef as F}from"../../../routes.esm.js";import{trackPassRatesCsvFilename as G}from"../../../utils/charts.esm.js";import{PassRateGrid as x}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{PassRateTable as B}from"../../PassRateTable/PassRateTable.esm.js";import"../../PassRateTable/types.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as V}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as I}from"../../TechHealth/Loading/Loading.esm.js";import{trackPassRatesToCsv as $}from"../TechHealthExportFunctions.esm.js";import{ActionColumn as H}from"../ActionColumn.esm.js";import{NameColumn as W}from"../NameColumn.esm.js";import{OwnerColumn as j}from"../OwnerColumn.esm.js";import{PassRateTabHeader as q}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as z}from"../PassRateTabStyles.esm.js";import{ViewMode as g,generateTrackPassRateGridData as J,getDetailsRoute as K}from"../techHealthTabUtils.esm.js";import{TrackTrendColumn as Q}from"./TrackLevelTrendColumn.esm.js";const v=(m,n,a)=>{const i=Math.min(5,n-m+1);return Array.from({length:i}).map((l,s)=>{const o=m+s;return{label:a?"PROGRESS":`LEVEL ${o}`,id:`levels-${s}`,renderCell:r=>{const t=r.levels?.find(({levelOrdinal:u})=>u===o);return t?e.createElement(Q,{row:t}):e.createElement(e.Fragment,null)}}})},P=(m,n,a,i)=>{const l=m.flatMap(r=>r.levels?.map(t=>t.levelOrdinal)||[]),s=Math.min(...l),o=Math.max(...l);return[{label:"NAME",id:"trackName",renderCell:r=>e.createElement(W,{name:r.trackName??r.id,description:r.trackDescription})},...v(s,o,!!a),{label:"OWNER",id:"trackOwnerRef",renderCell:r=>e.createElement(j,{ownerEntityRef:r.trackOwnerRef??void 0})},{label:"ACTION",id:"action",renderCell:({id:r})=>e.createElement(H,{navigateTo:K(r,n,a,i)})}]},U=()=>{const m=z(),{filter:n}=V(),a=N(F),{data:i,isLoading:l,isError:s}=S(n),[o,r]=d(g.TABLE),[t,u]=d(""),[f,R]=d(0),[E,h]=d(10);y(()=>{R(0)},[n,t]);const w=D(()=>P(i?.individualTrackPassRate??[],a),[i?.individualTrackPassRate,a]);if(l)return e.createElement(I,null);if(s)return e.createElement(k,{color:"error"},"Failed to load tracks");const{individualTrackPassRate:T}=i;if(!T)return e.createElement(k,{color:"error"},"No available tracks");const c=t.length?T.filter(({id:p,trackName:C})=>C?.toLowerCase()?.includes(t.toLowerCase())||p.toLowerCase().includes(t.toLowerCase())):T,b=async()=>$(c),L=(p,C)=>{R(()=>C)},M=p=>{h(+p.target.value),R(0)};return e.createElement(O,{className:m.root},e.createElement(A,{container:!0,direction:"row"},e.createElement(q,{viewMode:o,setViewMode:r,isLoading:l,searchTerm:t,setSearchTerm:u,searchPlaceholder:"Search Available Tracks",fetchCsvData:b,csvFilename:G}),o===g.TABLE&&e.createElement(B,{data:c,columns:w}),o===g.GRID&&e.createElement(x,{data:J(c.slice(f*E,(f+1)*E),a),totalCount:c?.length??0,page:f,rowsPerPage:E,onPageChange:L,onRowsPerPageChange:M})))};export{U as TrackResultsTab,P as generateColumns,v as generateTrendColumns};
1
+ import{useRouteRef as N}from"@backstage/core-plugin-api";import{Typography as k,Box as O,Grid as A}from"@material-ui/core";import e,{useState as d,useEffect as y,useMemo as D}from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useTrackPassRateTrend as S}from"../../../hooks/aggregations/useTrackPassRateTrend.esm.js";import"react-router-dom";import{trackDetailsRouteRef as F}from"../../../routes.esm.js";import{trackPassRatesCsvFilename as G}from"../../../utils/charts.esm.js";import{PassRateGrid as x}from"../../PassRateGrid/PassRateGrid.esm.js";import"../../PassRateGrid/types.esm.js";import{PassRateTable as B}from"../../PassRateTable/PassRateTable.esm.js";import"../../PassRateTable/types.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as V}from"../../TechHealth/Filters/FilterProvider.esm.js";import"../../TechHealth/Filters/Filters.esm.js";import"../../TechHealth/Filters/FiltersHeader.esm.js";import"../../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{Loading as I}from"../../TechHealth/Loading/Loading.esm.js";import{trackPassRatesToCsv as $}from"../TechHealthExportFunctions.esm.js";import{ActionColumn as H}from"../ActionColumn.esm.js";import{NameColumn as W}from"../NameColumn.esm.js";import{OwnerColumn as j}from"../OwnerColumn.esm.js";import{PassRateTabHeader as q}from"../PassRateTabHeader.esm.js";import{usePassRateTabStyles as z}from"../PassRateTabStyles.esm.js";import{ViewMode as g,generateTrackPassRateGridData as J,getDetailsRoute as K}from"../techHealthTabUtils.esm.js";import{TrackTrendColumn as Q}from"./TrackLevelTrendColumn.esm.js";const v=(m,n,a)=>{const i=Math.min(5,n-m+1);return Array.from({length:i}).map((l,s)=>{const o=m+s;return{label:a?"PROGRESS":`LEVEL ${o}`,id:`levels-${s}`,renderCell:r=>{const t=r.levels?.find(({levelOrdinal:u})=>u===o);return t?e.createElement(Q,{row:t}):e.createElement(e.Fragment,null)}}})},P=(m,n,a,i)=>{const l=m.flatMap(r=>r.levels?.map(t=>t.levelOrdinal)||[]),s=Math.min(...l),o=Math.max(...l);return[{label:"NAME",id:"trackName",renderCell:r=>e.createElement(W,{name:r.trackName??r.id,description:r.trackDescription})},...v(s,o,!!a),{label:"OWNER",id:"trackOwnerRef",renderCell:r=>e.createElement(j,{ownerEntityRef:r.trackOwnerRef??void 0})},{label:"ACTION",id:"action",renderCell:({id:r})=>e.createElement(H,{navigateTo:K(r,n,a,i)})}]},U=()=>{const m=z(),{filter:n}=V(),a=N(F),{data:i,isLoading:l,isError:s}=S(n),[o,r]=d(g.TABLE),[t,u]=d(""),[f,R]=d(0),[E,h]=d(10);y(()=>{R(0)},[n,t]);const w=D(()=>P(i?.individualTrackPassRate??[],a),[i?.individualTrackPassRate,a]);if(l)return e.createElement(I,null);if(s)return e.createElement(k,{color:"error"},"Failed to load tracks");const{individualTrackPassRate:T}=i;if(!T)return e.createElement(k,{color:"error"},"No available tracks");const c=t.length?T.filter(({id:p,trackName:C})=>C?.toLowerCase()?.includes(t.toLowerCase())||p.toLowerCase().includes(t.toLowerCase())):T,b=async()=>$(c),L=(p,C)=>{R(()=>C)},M=p=>{h(+p.target.value),R(0)};return e.createElement(O,{className:m.root},e.createElement(A,{container:!0,direction:"row"},e.createElement(q,{viewMode:o,setViewMode:r,isLoading:l,searchTerm:t,setSearchTerm:u,searchPlaceholder:"Search Available Tracks",fetchCsvData:b,csvFilename:G}),o===g.TABLE&&e.createElement(B,{data:c,columns:w}),o===g.GRID&&e.createElement(x,{data:J(c.slice(f*E,(f+1)*E),a),totalCount:c?.length??0,page:f,rowsPerPage:E,onPageChange:L,onRowsPerPageChange:M})))};export{U as TrackResultsTab,P as generateColumns,v as generateTrendColumns};
2
2
  //# sourceMappingURL=TrackResultsTab.esm.js.map
@@ -1,2 +1,2 @@
1
- import t,{useEffect as s}from"react";import{TrackFormProvider as p,useTrackFormContext as l}from"../../contexts/TrackFormContext.esm.js";import"../../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{useCreateTrack as k}from"../../hooks/tracks/useCreateTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{tracksPageRouteRef as f}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as g}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as d}from"../TrackForm/TrackForm.esm.js";const o=()=>{const{setIsLoading:e}=l(),{mutateAsync:i,isLoading:r}=k();s(()=>{e(r)},[e,r]);const[a,m]=u(f),c=async n=>{await i(n,{onSuccess:m})};return g({title:"Create Track",description:"Create a new track that aligns with your organization's long-term tech health initiatives by entering the details below.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),t.createElement(d,{handleClose:a,onSave:c})},h=()=>t.createElement(p,null,t.createElement(o,null));export{h as TrackCreatePage,o as TrackCreateView};
1
+ import t,{useEffect as s}from"react";import{TrackFormProvider as p,useTrackFormContext as l}from"../../contexts/TrackFormContext.esm.js";import"../../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{useCreateTrack as k}from"../../hooks/tracks/useCreateTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{tracksPageRouteRef as f}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as g}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as d}from"../TrackForm/TrackForm.esm.js";const o=()=>{const{setIsLoading:e}=l(),{mutateAsync:i,isLoading:r}=k();s(()=>{e(r)},[e,r]);const[a,m]=u(f),c=async n=>{await i(n,{onSuccess:m})};return g({title:"Create Track",description:"Create a new track that aligns with your organization's long-term tech health initiatives by entering the details below.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),t.createElement(d,{handleClose:a,onSave:c})},h=()=>t.createElement(p,null,t.createElement(o,null));export{h as TrackCreatePage,o as TrackCreateView};
2
2
  //# sourceMappingURL=TrackCreatePage.esm.js.map
@@ -1,2 +1,2 @@
1
- import l,{useEffect as e,useCallback as f}from"react";import{useTrackFormContext as E}from"../../contexts/TrackFormContext.esm.js";import"../../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{useUpdateTrack as y}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as h}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as T}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const b=({track:t,canEdit:p})=>{const{setSelectedItem:i,setIsLoading:c,selectedItem:n,showReadOnly:r}=E(),{mutateAsync:m,isLoading:s}=y();e(()=>c(s),[c,s]);const o=!p||!t.isEditable;e(()=>{o?r(t):i(t)},[t,i,o,r]);const[d,a]=g(h),k=f(async u=>{await m(u,{onSuccess:a})},[a,m]);return e(()=>{},[t,r,o]),T({title:`${o?"View":"Edit"} Track`,description:"Edit your track's details to match your needs.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),n?l.createElement(w,{handleClose:d,onSave:k}):null};export{b as TrackEditView};
1
+ import l,{useEffect as e,useCallback as f}from"react";import{useTrackFormContext as E}from"../../contexts/TrackFormContext.esm.js";import"../../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{useUpdateTrack as y}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as h}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as T}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const b=({track:t,canEdit:p})=>{const{setSelectedItem:i,setIsLoading:m,selectedItem:n,showReadOnly:r}=E(),{mutateAsync:c,isLoading:s}=y();e(()=>m(s),[m,s]);const o=!p||!t.isEditable;e(()=>{o?r(t):i(t)},[t,i,o,r]);const[d,a]=g(h),k=f(async u=>{await c(u,{onSuccess:a})},[a,c]);return e(()=>{},[t,r,o]),T({title:`${o?"View":"Edit"} Track`,description:"Edit your track's details to match your needs.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),n?l.createElement(w,{handleClose:d,onSave:k}):null};export{b as TrackEditView};
2
2
  //# sourceMappingURL=TrackEditView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as S}from"@hookform/resolvers/zod";import{useMemo as v,useEffect as h}from"react";import{useForm as k}from"react-hook-form";import{v4 as R}from"uuid";import{useTrackFormContext as y}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as F}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 L}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as w}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as E,mapFiltersToInputFilter as T}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{trackFormSchema as g}from"./validation.esm.js";const l={detailsStep:{name:"",description:"",ownerEntityRef:""},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{}},M=({name:t,description:o,ownerEntityRef:r,filter:e,levels:i,documentationURL:a})=>({detailsStep:{name:t,ownerEntityRef:r,description:o??"",documentationURL:a??void 0},levelsStep:{levels:i?.map(s=>({name:s.name??`Level ${s.ordinal}`??"Level 1",description:s.description??"",checks:s.checks.map(n=>({id:n.id,name:n.name??n.id,description:n.description??""}))}))||[]},filtersStep:{filter:E(e)}}),c=(t,o,r)=>({id:r?.id??R(),ownerEntityRef:t.detailsStep.ownerEntityRef,description:t.detailsStep.description,name:t.detailsStep.name,documentationURL:t.detailsStep.documentationURL??"",type:r?.type??"standard",levels:t.levelsStep.levels?.map((e,i)=>({ordinal:i+1,name:e.name??"",description:e.description??"",checks:e.checks.map(a=>o[a.id])})),filter:T(t.filtersStep.filter)}),C=t=>{const{selectedItem:o}=y(),r=v(()=>o?M(o):l,[o]),e=k({defaultValues:r,mode:"onChange",resolver:S(g)}),{userEntityRef:i}=F();h(()=>{!o&&i&&!e.getValues("detailsStep.ownerEntityRef")&&e.setValue("detailsStep.ownerEntityRef",i)},[o,i,e]);const{checkChips:a,checksLoading:s,checksMap:n}=w(),d=new Set(e.getValues("levelsStep.levels").flatMap(m=>m.checks.map(p=>p.id))),f=a.filter(m=>!d.has(m.id)),{showModal:u}=L();return{formMethods:e,onSubmit:async m=>{if(!await u({title:"Save Track",message:`Are you sure you want to save track: ${m.detailsStep.name}?`,error:!1}))return;const p=c(m,n??{},o);t(p)},selectableChips:f,checksLoading:s}};export{l as DEFAULT_TRACK_FORM_VALUES,c as mapTrackFormToInput,C as useTrackForm};
1
+ import{zodResolver as S}from"@hookform/resolvers/zod";import{useMemo as v,useEffect as h}from"react";import{useForm as k}from"react-hook-form";import{v4 as R}from"uuid";import{useTrackFormContext as y}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as F}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 L}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as w}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as E,mapFiltersToInputFilter as T}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{trackFormSchema as g}from"./validation.esm.js";const l={detailsStep:{name:"",description:"",ownerEntityRef:""},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{}},M=({name:t,description:o,ownerEntityRef:r,filter:e,levels:i,documentationURL:p})=>({detailsStep:{name:t,ownerEntityRef:r,description:o??"",documentationURL:p??void 0},levelsStep:{levels:i?.map(s=>({name:s.name??`Level ${s.ordinal}`??"Level 1",description:s.description??"",checks:s.checks.map(n=>({id:n.id,name:n.name??n.id,description:n.description??""}))}))||[]},filtersStep:{filter:E(e)}}),c=(t,o,r)=>({id:r?.id??R(),ownerEntityRef:t.detailsStep.ownerEntityRef,description:t.detailsStep.description,name:t.detailsStep.name,documentationURL:t.detailsStep.documentationURL??"",type:r?.type??"standard",levels:t.levelsStep.levels?.map((e,i)=>({ordinal:i+1,name:e.name??"",description:e.description??"",checks:e.checks.map(p=>o[p.id])})),filter:T(t.filtersStep.filter)}),C=t=>{const{selectedItem:o}=y(),r=v(()=>o?M(o):l,[o]),e=k({defaultValues:r,mode:"onChange",resolver:S(g)}),{userEntityRef:i}=F();h(()=>{!o&&i&&!e.getValues("detailsStep.ownerEntityRef")&&e.setValue("detailsStep.ownerEntityRef",i)},[o,i,e]);const{checkChips:p,checksLoading:s,checksMap:n}=w(),d=new Set(e.getValues("levelsStep.levels").flatMap(m=>m.checks.map(a=>a.id))),f=p.filter(m=>!d.has(m.id)),{showModal:u}=L();return{formMethods:e,onSubmit:async m=>{if(!await u({title:"Save Track",message:`Are you sure you want to save track: ${m.detailsStep.name}?`,error:!1}))return;const a=c(m,n??{},o);t(a)},selectableChips:f,checksLoading:s}};export{l as DEFAULT_TRACK_FORM_VALUES,c as mapTrackFormToInput,C as useTrackForm};
2
2
  //# sourceMappingURL=useTrackForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as B}from"@backstage/catalog-model";import{Table as R}from"@backstage/core-components";import{makeStyles as L}from"@material-ui/core";import z from"lodash";import u,{useState as P,useEffect as O,useCallback as y}from"react";import{TrackEntityField as r,Direction as C}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as x}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useTrackEntities as D}from"../../../hooks/entities/useTrackEntities.esm.js";import{columnFactories as n}from"./columns.esm.js";import{toTrackEntityRow as F}from"./utils.esm.js";const N=[n.createBadgeColumn(),n.createNameColumn(),n.createStatusColumn(),n.createSystemColumn(),n.createOwnerColumn(),n.createSpecTypeColumn(),n.createSpecLifecycleColumn()],q=[r.CertificationLevel,r.Name,r.CheckPassRate,r.System,r.Owner,r.Type,r.Lifecycle],w=g=>{const{lifecycles:p,owners:a,types:i,systems:s}=g,f=p?.length?{"spec.lifecycle":p}:void 0,m=a?.length?{"relations.ownedBy":a}:void 0,e=i?.length?{"spec.type":i}:void 0,d=s?.length?{"relations.partOf":s}:void 0;return{...f,...m,...e,...d}},A=L({tableContainer:{display:"flex",flexDirection:"column",height:"100%"}}),W=({track:g,initialPageSize:p,lifecycles:a,owners:i,types:s,systems:f})=>{const m=A(),[e,d]=P({orderBy:void 0,filter:w({lifecycles:a,owners:i,types:s,systems:f}),pageInfo:{page:0,pageSize:p??10,direction:"forward",cursor:null}});O(()=>{d(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:w({lifecycles:a,owners:i,types:s,systems:f})}))},[a,i,s,f]);const{data:c,isLoading:k}=D({trackId:g.id,orderBy:e.orderBy,filter:e.filter,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),I=y((t,l)=>{let o;t===-1?o=void 0:o={field:q[t],direction:l==="asc"?C.Asc:C.Desc},d({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),h=y((t,l)=>{const o=t>e.pageInfo.page?"forward":"backward",v=o==="forward"?c?.trackEntities.pageInfo.endCursor??null:c?.trackEntities.pageInfo.startCursor??null;d({...e,pageInfo:{page:t,pageSize:l,direction:o,cursor:v}})},[c,e]),E=c?.trackEntities.edges.map(t=>t.node.entityRef)??[],{data:S,isLoading:T}=x({entityRefs:E}),b=z.compact(c?.trackEntities.edges.map(t=>{const l=S?.items.find(o=>!!o&&B(o)===t.node.entityRef);return l?F({trackDetails:t.node,track:g,entity:l}):void 0}))??[];return u.createElement("div",{className:m.tableContainer},u.createElement(R,{columns:N,data:b,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"both",emptyRowsWhenPaging:!1,pageSizeOptions:[10,25,50],pageSize:p??25,search:!1,showTitle:!1,padding:"dense"},onOrderChange:I,onPageChange:h,page:e.pageInfo.page,totalCount:c?.trackEntities.totalCount??0,isLoading:k||T,components:{Toolbar:()=>null}}))};export{W as TrackEntitiesTable};
1
+ import{stringifyEntityRef as B}from"@backstage/catalog-model";import{Table as R}from"@backstage/core-components";import{makeStyles as z}from"@material-ui/core";import L from"lodash";import u,{useState as P,useEffect as O,useCallback as y}from"react";import{TrackEntityField as r,Direction as C}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as x}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useTrackEntities as D}from"../../../hooks/entities/useTrackEntities.esm.js";import{columnFactories as a}from"./columns.esm.js";import{toTrackEntityRow as F}from"./utils.esm.js";const N=10,A=[a.createBadgeColumn(),a.createNameColumn(),a.createStatusColumn(),a.createSystemColumn(),a.createOwnerColumn(),a.createSpecTypeColumn(),a.createSpecLifecycleColumn()],W=[r.CertificationLevel,r.Name,r.CheckPassRate,r.System,r.Owner,r.Type,r.Lifecycle],k=g=>{const{lifecycles:d,owners:n,types:i,systems:s}=g,p=d?.length?{"spec.lifecycle":d}:void 0,m=n?.length?{"relations.ownedBy":n}:void 0,e=i?.length?{"spec.type":i}:void 0,f=s?.length?{"relations.partOf":s}:void 0;return{...p,...m,...e,...f}},_=z({tableContainer:{display:"flex",flexDirection:"column",height:"100%"}}),j=({track:g,initialPageSize:d,lifecycles:n,owners:i,types:s,systems:p})=>{const m=_(),[e,f]=P({orderBy:void 0,filter:k({lifecycles:n,owners:i,types:s,systems:p}),pageInfo:{page:0,pageSize:d??N,direction:"forward",cursor:null}});O(()=>{f(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:k({lifecycles:n,owners:i,types:s,systems:p})}))},[n,i,s,p]);const{data:c,isLoading:w}=D({trackId:g.id,orderBy:e.orderBy,filter:e.filter,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),I=y((t,l)=>{let o;t===-1?o=void 0:o={field:W[t],direction:l==="asc"?C.Asc:C.Desc},f({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),h=y((t,l)=>{const o=t>e.pageInfo.page?"forward":"backward",v=o==="forward"?c?.trackEntities.pageInfo.endCursor??null:c?.trackEntities.pageInfo.startCursor??null;f({...e,pageInfo:{page:t,pageSize:l,direction:o,cursor:v}})},[c,e]),S=c?.trackEntities.edges.map(t=>t.node.entityRef)??[],{data:E,isLoading:T}=x({entityRefs:S}),b=L.compact(c?.trackEntities.edges.map(t=>{const l=E?.items.find(o=>!!o&&B(o)===t.node.entityRef);return l?F({trackDetails:t.node,track:g,entity:l}):void 0}))??[];return u.createElement("div",{className:m.tableContainer},u.createElement(R,{columns:A,data:b,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"both",emptyRowsWhenPaging:!1,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!1,padding:"dense"},onOrderChange:I,onPageChange:h,page:e.pageInfo.page,totalCount:c?.trackEntities.totalCount??0,isLoading:w||T,components:{Toolbar:()=>null}}))};export{j as TrackEntitiesTable};
2
2
  //# sourceMappingURL=TrackEntitiesTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as c}from"@backstage/core-plugin-api";import{useQuery as m}from"@tanstack/react-query";import{soundcheckApiRef as u}from"../../api.esm.js";function f(e,r,o,n,i){const t=c(u);return m(["soundcheck/track-overview-for-owner",e,r,o,n,i],async()=>t.getProgramOverviewForOwner(e,r,o,n,i),{enabled:!!e&&!!r?.kind,staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{f as useProgramOverviewForOwner};
1
+ import{useApi as m}from"@backstage/core-plugin-api";import{useQuery as c}from"@tanstack/react-query";import{soundcheckApiRef as s}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";function f(e,r,o,t,n){const i=m(s);return c([u.GetTrackOverviewForOwner,e??"",r??"",o??"",t??"",n??""],async()=>i.getProgramOverviewForOwner(e,r,o,t,n),{enabled:!!e&&!!r?.kind,staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{f as useProgramOverviewForOwner};
2
2
  //# sourceMappingURL=useProgramOverviewForOwner.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as u}from"@backstage/core-plugin-api";import{useQueryClient as a,useMutation as n}from"@tanstack/react-query";import{soundcheckApiRef as h}from"../../api.esm.js";import{MutationKeys as l,QueryKeys as o}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as m}from"../useSoundcheckAlert.esm.js";const p="Error Creating Check";function d(){const i=u(h),t=a(),{showAlert:s}=m(),c=async r=>{const e=await i.updateCheck(r);if(!e)throw new Error("Failed to update check.");return e};return n([l.UpdateCheck],c,{onSuccess:()=>Promise.all([t.invalidateQueries({queryKey:[o.GetChecks]}),t.invalidateQueries({queryKey:[o.GetCheckOwners]}),t.invalidateQueries({queryKey:[o.ExecutableChecks]})]),onError:r=>{let e="Failed to update check.";r instanceof Error&&(e=r.message),s({severity:"error",title:p,message:e})}})}export{d as useUpdateCheck};
1
+ import{useApi as i}from"@backstage/core-plugin-api";import{useQueryClient as a,useMutation as u}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as p,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as h}from"../useSoundcheckAlert.esm.js";const k="Error Creating Check";function l(){const o=i(m),s=a(),{showAlert:c}=h(),n=async r=>{const e=await o.updateCheck(r);if(!e)throw new Error("Failed to update check.");return e};return u([p.UpdateCheck],n,{onSuccess:()=>{const r=[t.GetChecks,t.GetCheckOwners,t.ExecutableChecks,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return Promise.all(r.map(e=>s.invalidateQueries({queryKey:[e]})))},onError:r=>{let e="Failed to update check.";r instanceof Error&&(e=r.message),c({severity:"error",title:k,message:e})}})}export{l as useUpdateCheck};
2
2
  //# sourceMappingURL=useUpdateCheck.esm.js.map
@@ -1,2 +1,2 @@
1
- import{camelCase as l}from"lodash";import{useCallback as _,useEffect as g,useLayoutEffect as b}from"react";import{useSearchParams as N,useLocation as D,useNavigate as j}from"react-router-dom";import E from"react-use/lib/useLocalStorage";import{Facet as n}from"../../components/TechHealth/Filters/types.esm.js";import"../../components/TechHealth/Filters/FacetFilter.esm.js";import"../../components/TechHealth/Filters/FilterProvider.esm.js";import"../../components/TechHealth/Filters/Filters.esm.js";import"../../components/TechHealth/Filters/FiltersHeader.esm.js";import"../../components/TechHealth/Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import{emptyFacetFilters as h,DEFAULT_NUMBER_OF_DAYS as f,MIN_NUMBER_OF_DAYS as v,MAX_NUMBER_OF_DAYS as A}from"../../components/TechHealth/Filters/utils.esm.js";const M=(S,O)=>{const[e]=N(),s=D(),i=j(),u=O??S[n.EntityOwner][0]?.value,[a=h(u),p]=E("soundcheck.techHealth.facetFilters",h(u));a&&Object.values(n).forEach(t=>{a[t]||(a[t]=[])});const[c=f,F]=E("soundcheck.techHealth.numberOfDays",f),d=t=>!isNaN(t)&&t>=v&&t<=A,y=_((t,r)=>{const o={...a??h()};o[t]=r,p(o)},[a,p]);return g(()=>{const t=e.get("days");if(t&&t!==c.toString()){const r=parseInt(t,10);F(d(r)?r:f)}},[]),g(()=>{const t=e.get("days");(!t||t!==c.toString())&&(e.set("days",c.toString()),i({pathname:s.pathname,search:`?${e.toString()}`}))},[c,e,s,i]),b(()=>{let t=!0;const r=a;Object.values(n).forEach(o=>{const m=e.get(l(o));m?(t=!1,r[o]=m.split(",")):r[o]=[]}),t||p(r)},[]),g(()=>{Object.values(n).forEach(t=>{const r=a[t].join(","),o=l(t);r.length&&e.get(o)!==r&&(e.set(o,r),i({pathname:s.pathname,search:`?${e.toString()}`}))})},[a,e,s,i,u]),{setFacetFilter:(t,r)=>{y(t,r);const o=l(t);if(r.length){const m=r.join(",");e.get(o)!==m&&e.set(o,m)}else e.delete(o);i({pathname:s.pathname,search:`?${e.toString()}`})},getFacetFilter:t=>a?a[t]:[],clearFacetFilters:()=>{F(f),p(h()),e.delete("days"),Object.values(n).forEach(t=>{e.delete(l(t))}),i({pathname:s.pathname,search:`?${e.toString()}`})},facetFilters:a,numberOfDays:c,setNumberOfDays:F}};export{M as useFacetFilters};
1
+ import{camelCase as l}from"lodash";import{useCallback as _,useEffect as g,useLayoutEffect as b}from"react";import{useSearchParams as N,useLocation as D,useNavigate as j}from"react-router-dom";import E from"react-use/lib/useLocalStorage";import{Facet as n}from"../../components/TechHealth/Filters/types.esm.js";import"../../components/TechHealth/Filters/FacetFilter.esm.js";import"../../components/TechHealth/Filters/FilterProvider.esm.js";import"../../components/TechHealth/Filters/Filters.esm.js";import"../../components/TechHealth/Filters/FiltersHeader.esm.js";import"../../components/TechHealth/Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import{emptyFacetFilters as h,DEFAULT_NUMBER_OF_DAYS as f,MIN_NUMBER_OF_DAYS as v,MAX_NUMBER_OF_DAYS as A}from"../../components/TechHealth/Filters/utils.esm.js";const M=(S,O)=>{const[e]=N(),s=D(),i=j(),u=O??S[n.EntityOwner][0]?.value,[a=h(u),p]=E("soundcheck.techHealth.facetFilters",h(u));a&&Object.values(n).forEach(t=>{a[t]||(a[t]=[])});const[c=f,F]=E("soundcheck.techHealth.numberOfDays",f),d=t=>!isNaN(t)&&t>=v&&t<=A,y=_((t,r)=>{const o={...a??h()};o[t]=r,p(o)},[a,p]);return g(()=>{const t=e.get("days");if(t&&t!==c.toString()){const r=parseInt(t,10);F(d(r)?r:f)}},[]),g(()=>{const t=e.get("days");(!t||t!==c.toString())&&(e.set("days",c.toString()),i({pathname:s.pathname,search:`?${e.toString()}`}))},[c,e,s,i]),b(()=>{let t=!0;const r=a;Object.values(n).forEach(o=>{const m=e.get(l(o));m?(t=!1,r[o]=m.split(",")):r[o]=[]}),t||p(r)},[]),g(()=>{Object.values(n).forEach(t=>{const r=a[t].join(","),o=l(t);r.length&&e.get(o)!==r&&(e.set(o,r),i({pathname:s.pathname,search:`?${e.toString()}`}))})},[a,e,s,i,u]),{setFacetFilter:(t,r)=>{y(t,r);const o=l(t);if(r.length){const m=r.join(",");e.get(o)!==m&&e.set(o,m)}else e.delete(o);i({pathname:s.pathname,search:`?${e.toString()}`})},getFacetFilter:t=>a?a[t]:[],clearFacetFilters:()=>{F(f),p(h()),e.delete("days"),Object.values(n).forEach(t=>{e.delete(l(t))}),i({pathname:s.pathname,search:`?${e.toString()}`})},facetFilters:a,numberOfDays:c,setNumberOfDays:F}};export{M as useFacetFilters};
2
2
  //# sourceMappingURL=useFacetFilters.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as o}from"@backstage/core-plugin-api";import{useQuery as t}from"@tanstack/react-query";import{soundcheckApiRef as n}from"../../api.esm.js";function c(e){const r=o(n);return t(["soundcheck/facets-for-owner",e],async()=>r.getFacetsForOwner(e),{enabled:!!e,staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{c as useFacetsForOwner};
1
+ import{useApi as o}from"@backstage/core-plugin-api";import{useQuery as t}from"@tanstack/react-query";import{soundcheckApiRef as n}from"../../api.esm.js";import{QueryKeys as s}from"../graphqlKeys.esm.js";function c(e){const r=o(n);return t([s.GetFacetsForOwner,e],async()=>r.getFacetsForOwner(e),{enabled:!!e,staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{c as useFacetsForOwner};
2
2
  //# sourceMappingURL=useFacetsForOwner.esm.js.map
@@ -1,2 +1,2 @@
1
- var t=(e=>(e.GetAllPrograms="soundcheck/programs",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetEntityRefs="soundcheck/catalog/entityRefs",e.ExecutableChecks="soundcheck/executableChecks",e.GetCampaigns="soundcheck/campaigns",e.GetCampaignProgress="soundcheck/campaigns/getCampaignProgress",e.GetOverallCheckPassRateTrends="soundcheck/charts/overallCheckPassRateTrends",e.GetIndividualCheckPassRateTrends="soundcheck/charts/getIndividualCheckPassRateTrends",e.GetOverallTrackPassRateTrends="soundcheck/charts/overallTrackPassRateTrends",e.GetIndividualTrackPassRateTrends="soundcheck/charts/individualTrackPassRateTrends",e.GetOverallEntityPassRateTrends="soundcheck/charts/overallEntityPassRateTrends",e.GetIndividualEntityPassRateTrends="soundcheck/charts/individualEntityPassRateTrends",e.GetOverallGroupPassRateTrends="soundcheck/charts/overallGroupPassRateTrends",e.GetIndividualGroupPassRateTrends="soundcheck/charts/individualGroupPassRateTrends",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e.TrackEntities="soundcheck/track/entities",e.CheckEntities="soundcheck/check/entities",e.CertificationStatus="soundcheck/certificationStatus",e.CertificationStatusHistory="soundcheck/certificationStatusHistory",e.CheckStatus="soundcheck/checkStatus",e.CheckStatusHistory="soundcheck/checkStatusHistory",e.CheckDetails="soundcheck/checkDetails",e.Certifications="soundcheck/certifications",e.CertificationDetails="soundcheck/certificationDetails",e.GetCheckOwners="soundcheck/checks/getOwners",e.GetTrackOwners="soundcheck/tracks/getOwners",e.GetCampaignOwners="soundcheck/campaigns/getOwners",e.GetTrackRelatedGroups="soundcheck/track/getTrackRelatedGroups",e.CheckTemplates="soundcheck/checkTemplates",e))(t||{}),s=(e=>(e.DeleteCheck="soundcheck/deleteCheck",e.CreateCheck="soundcheck/createCheck",e.UpdateCheck="soundcheck/updateCheck",e.ExecuteCheck="soundcheck/executeCheck",e.DeleteProgram="soundcheck/deleteProgram",e.CreateProgram="soundcheck/createProgram",e.UpdateProgram="soundcheck/updateProgram",e.UpdateCollectorConfig="soundcheck/updateCollectorConfig",e.CreateCampaign="soundcheck/createCampaign",e.UpdateCampaign="soundcheck/updateCampaign",e.DeleteCampaign="soundcheck/deleteCampaign",e.ArchiveCampaign="soundcheck/archiveCampaign",e))(s||{});export{s as MutationKeys,t as QueryKeys};
1
+ var t=(e=>(e.GetAllPrograms="soundcheck/programs",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetEntityRefs="soundcheck/catalog/entityRefs",e.ExecutableChecks="soundcheck/executableChecks",e.GetCampaigns="soundcheck/campaigns",e.GetCampaignProgress="soundcheck/campaigns/getCampaignProgress",e.GetOverallCheckPassRateTrends="soundcheck/charts/overallCheckPassRateTrends",e.GetIndividualCheckPassRateTrends="soundcheck/charts/getIndividualCheckPassRateTrends",e.GetOverallTrackPassRateTrends="soundcheck/charts/overallTrackPassRateTrends",e.GetIndividualTrackPassRateTrends="soundcheck/charts/individualTrackPassRateTrends",e.GetOverallEntityPassRateTrends="soundcheck/charts/overallEntityPassRateTrends",e.GetIndividualEntityPassRateTrends="soundcheck/charts/individualEntityPassRateTrends",e.GetOverallGroupPassRateTrends="soundcheck/charts/overallGroupPassRateTrends",e.GetIndividualGroupPassRateTrends="soundcheck/charts/individualGroupPassRateTrends",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e.TrackEntities="soundcheck/track/entities",e.CheckEntities="soundcheck/check/entities",e.CertificationStatus="soundcheck/certificationStatus",e.CertificationStatusHistory="soundcheck/certificationStatusHistory",e.CheckStatus="soundcheck/checkStatus",e.CheckStatusHistory="soundcheck/checkStatusHistory",e.CheckDetails="soundcheck/checkDetails",e.Certifications="soundcheck/certifications",e.CertificationDetails="soundcheck/certificationDetails",e.GetCheckOwners="soundcheck/checks/getOwners",e.GetTrackOwners="soundcheck/tracks/getOwners",e.GetCampaignOwners="soundcheck/campaigns/getOwners",e.GetTrackRelatedGroups="soundcheck/track/getTrackRelatedGroups",e.CheckTemplates="soundcheck/checkTemplates",e.GetFacetsForOwner="soundcheck/facets-for-owner",e.GetTrackOverviewForOwner="soundcheck/track-overview-for-owner",e))(t||{}),s=(e=>(e.DeleteCheck="soundcheck/deleteCheck",e.CreateCheck="soundcheck/createCheck",e.UpdateCheck="soundcheck/updateCheck",e.ExecuteCheck="soundcheck/executeCheck",e.DeleteProgram="soundcheck/deleteProgram",e.CreateProgram="soundcheck/createProgram",e.UpdateProgram="soundcheck/updateProgram",e.UpdateCollectorConfig="soundcheck/updateCollectorConfig",e.CreateCampaign="soundcheck/createCampaign",e.UpdateCampaign="soundcheck/updateCampaign",e.DeleteCampaign="soundcheck/deleteCampaign",e.ArchiveCampaign="soundcheck/archiveCampaign",e))(s||{});export{s as MutationKeys,t as QueryKeys};
2
2
  //# sourceMappingURL=graphqlKeys.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as i}from"@backstage/catalog-model";import{useApi as r}from"@backstage/core-plugin-api";import{catalogApiRef as m}from"@backstage/plugin-catalog-react";import{useQuery as o}from"@tanstack/react-query";function n(){const t=r(m);return o(["soundcheck/all-groups"],async()=>{const{items:a}=await t.getEntities({filter:{kind:"Group"},fields:["spec.profile.displayName","metadata.title","metadata.name","metadata.namespace","kind"]});return a.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,ref:i(e)}))},{staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{n as useAllGroups};
1
+ import{stringifyEntityRef as n}from"@backstage/catalog-model";import{useApi as t,configApiRef as p}from"@backstage/core-plugin-api";import{catalogApiRef as f}from"@backstage/plugin-catalog-react";import{combineEntityFilterQueries as s}from"@spotify/backstage-plugin-soundcheck-common";import{useQuery as l}from"@tanstack/react-query";import{getGroupFilterFromConfig as c}from"../../utils/getGroupFilterFromConfig.esm.js";function u(){const i=t(f),r=t(p);return l(["soundcheck/all-groups"],async()=>{const a=c(r),o=s({kind:"Group"},a),{items:m}=await i.getEntities({filter:o,fields:["spec.profile.displayName","metadata.title","metadata.name","metadata.namespace","kind"]});return m.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,ref:n(e)}))},{staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{u as useAllGroups};
2
2
  //# sourceMappingURL=useAllGroups.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as a}from"@backstage/catalog-model";import{useApi as t,identityApiRef as n}from"@backstage/core-plugin-api";import{catalogApiRef as o}from"@backstage/plugin-catalog-react";import{useQuery as p}from"@tanstack/react-query";function m(){const i=t(n),r=t(o);return p(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:s}=await i.getBackstageIdentity();return(await r.getEntitiesByRefs({entityRefs:s})).items.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,ref:a(e),type:e.spec?.type}))})}export{m as useUsersGroupClaims};
1
+ import{stringifyEntityRef as n}from"@backstage/catalog-model";import{useApi as t,identityApiRef as p,configApiRef as f}from"@backstage/core-plugin-api";import{catalogApiRef as m}from"@backstage/plugin-catalog-react";import{useQuery as u}from"@tanstack/react-query";import{getGroupFilterFromConfig as c}from"../../utils/getGroupFilterFromConfig.esm.js";function y(){const i=t(p),r=t(m),o=t(f);return u(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:s}=await i.getBackstageIdentity(),a=c(o);return(await r.getEntitiesByRefs({entityRefs:s,filter:a})).items.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,ref:n(e),type:e.spec?.type}))})}export{y as useUsersGroupClaims};
2
2
  //# sourceMappingURL=useUsersGroupClaims.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as i}from"@backstage/core-plugin-api";import{useQueryClient as c,useMutation as u}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as l,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as k}from"../useSoundcheckAlert.esm.js";const d="Error Creating Track";function f(){const a=i(m),o=c(),{showAlert:s}=k(),n=async e=>{const r=await a.createProgram(e);if(!r)throw new Error("Failed to create track.");return r};return u([l.CreateProgram],n,{onSuccess:async()=>{const e=[t.GetAllPrograms,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners];return Promise.all(e.map(r=>o.invalidateQueries({queryKey:[r]})))},onError:e=>{let r="Failed to create track.";e instanceof Error&&(r=e.message),s({severity:"error",title:d,message:r})}})}export{f as useCreateTrack};
1
+ import{useApi as c}from"@backstage/core-plugin-api";import{useQueryClient as i,useMutation as u}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as l,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as k}from"../useSoundcheckAlert.esm.js";const p="Error Creating Track";function d(){const a=c(m),o=i(),{showAlert:s}=k(),n=async e=>{const r=await a.createProgram(e);if(!r)throw new Error("Failed to create track.");return r};return u([l.CreateProgram],n,{onSuccess:async()=>{const e=[t.GetAllPrograms,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return Promise.all(e.map(r=>o.invalidateQueries({queryKey:[r]})))},onError:e=>{let r="Failed to create track.";e instanceof Error&&(r=e.message),s({severity:"error",title:p,message:r})}})}export{d as useCreateTrack};
2
2
  //# sourceMappingURL=useCreateTrack.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as l}from"@backstage/core-plugin-api";import{useQueryClient as c,useMutation as u}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as d,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as f}from"../useSoundcheckAlert.esm.js";const k="Error Deleting Track";function p(){const s=l(m),a=c(),{showAlert:n}=f(),i=async e=>{const r=await s.deleteProgram(e);if(!r)throw new Error(`Failed to delete track ${e}`);return r};return u([d.DeleteProgram],i,{onSuccess:()=>{const e=[t.GetAllPrograms,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners];return Promise.all(e.map(r=>a.invalidateQueries({queryKey:[r]})))},onError:(e,r)=>{let o=`Failed to delete track ${r}`;e instanceof Error&&(o=e.message),n({severity:"error",title:k,message:o})}})}export{p as useDeleteTrack};
1
+ import{useApi as c}from"@backstage/core-plugin-api";import{useQueryClient as l,useMutation as u}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as d,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as k}from"../useSoundcheckAlert.esm.js";const f="Error Deleting Track";function p(){const s=c(m),a=l(),{showAlert:n}=k(),i=async e=>{const r=await s.deleteProgram(e);if(!r)throw new Error(`Failed to delete track ${e}`);return r};return u([d.DeleteProgram],i,{onSuccess:()=>{const e=[t.GetAllPrograms,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return Promise.all(e.map(r=>a.invalidateQueries({queryKey:[r]})))},onError:(e,r)=>{let o=`Failed to delete track ${r}`;e instanceof Error&&(o=e.message),n({severity:"error",title:f,message:o})}})}export{p as useDeleteTrack};
2
2
  //# sourceMappingURL=useDeleteTrack.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as n}from"@backstage/core-plugin-api";import{useQueryClient as u,useMutation as c}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as p,QueryKeys as a}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as d}from"../useSoundcheckAlert.esm.js";const l="Error Updating Track";function y(){const o=n(m),t=u(),{showAlert:i}=d(),s=async e=>{const r=await o.updateProgram(e);if(!r)throw new Error("Failed to update track.");return r};return c([p.UpdateProgram],s,{onSuccess:async()=>{await t.invalidateQueries({queryKey:[a.GetAllPrograms]}),await t.invalidateQueries({queryKey:[a.GetTrackOwners]})},onError:e=>{let r="Failed to update track.";e instanceof Error&&(r=e.message),i({severity:"error",title:l,message:r})}})}export{y as useUpdateTrack};
1
+ import{useApi as i}from"@backstage/core-plugin-api";import{useQueryClient as c,useMutation as u}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as l,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as d}from"../useSoundcheckAlert.esm.js";const p="Error Updating Track";function k(){const a=i(m),o=c(),{showAlert:s}=d(),n=async e=>{const r=await a.updateProgram(e);if(!r)throw new Error("Failed to update track.");return r};return u([l.UpdateProgram],n,{onSuccess:async()=>{const e=[t.GetAllPrograms,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return Promise.all(e.map(r=>o.invalidateQueries({queryKey:[r]})))},onError:e=>{let r="Failed to update track.";e instanceof Error&&(r=e.message),s({severity:"error",title:p,message:r})}})}export{k as useUpdateTrack};
2
2
  //# sourceMappingURL=useUpdateTrack.esm.js.map
@@ -1,6 +1,6 @@
1
- import{dump as a}from"js-yaml";const r=e=>{const n={ordinal:e.ordinal,checks:e.checks};return e.name&&(n.name=e.name),e.description&&(e.description=e.description),n},i=(e,n)=>{const t=new Blob([e],{type:"text/plain"}),s=window.document.createElement("a");s.href=window.URL.createObjectURL(t),s.download=n,s.click(),s.remove()},o=e=>{const n={id:e.id,name:e.name,ownerEntityRef:e.ownerEntityRef,levels:e.levels.map(r)};e.description&&(n.description=e.description),e.documentationURL&&(n.documentationURL=e.documentationURL),e.filter&&(n.filter=e.filter);const t=`# Exported YAML Track. You can rename the track id if needed.
1
+ import{dump as a}from"js-yaml";const r=e=>{const t={ordinal:e.ordinal,checks:e.checks};return e.name&&(t.name=e.name),e.description&&(e.description=e.description),t},i=(e,t)=>{const s=new Blob([e],{type:"text/plain"}),n=window.document.createElement("a");n.href=window.URL.createObjectURL(s),n.download=t,n.click(),n.remove()},o=e=>{const t={id:e.id,name:e.name,ownerEntityRef:e.ownerEntityRef,levels:e.levels.map(r)};e.description&&(t.description=e.description),e.documentationURL&&(t.documentationURL=e.documentationURL),e.filter&&(t.filter=e.filter);const s=`# Exported YAML Track. You can rename the track id if needed.
2
2
  # Please ensure you have also exported the associated checks and that the ids match.
3
- `+a(n,{noRefs:!0});return i(t,`track-${e.id}.yaml`),t},c=e=>{const n={id:e.id,rule:e.rule};e.ownerEntityRef&&(n.ownerEntityRef=e.ownerEntityRef),e.name&&(n.name=e.name),e.description&&(n.description=e.description),e.filter&&(n.filter=e.filter),e.warning&&(n.warning=e.warning),e.passedMessage&&(n.passedMessage=e.passedMessage),e.failedMessage&&(n.failedMessage=e.failedMessage),e.passedMessage&&(n.passedMessage=e.passedMessage),e.schedule&&(n.schedule=e.schedule);const t=`# Exported YAML Check. You can rename the check id if needed.
3
+ `+a(t,{noRefs:!0});return i(s,`track-${e.id}.yaml`),s},c=e=>{const t={id:e.id,rule:e.rule};e.ownerEntityRef&&(t.ownerEntityRef=e.ownerEntityRef),e.name&&(t.name=e.name),e.description&&(t.description=e.description),e.pathResolver&&(t.pathResolver=e.pathResolver),e.filter&&(t.filter=e.filter),e.warning&&(t.warning=e.warning),e.passedMessage&&(t.passedMessage=e.passedMessage),e.failedMessage&&(t.failedMessage=e.failedMessage),e.passedMessage&&(t.passedMessage=e.passedMessage),e.schedule&&(t.schedule=e.schedule);const s=`# Exported YAML Check. You can rename the check id if needed.
4
4
  # Please ensure the ids match in the associated tracks.
5
- `+a(n,{noRefs:!0});return i(t,`check-${e.id}.yaml`),t};export{c as exportCheck,o as exportTrack};
5
+ `+a(t,{noRefs:!0});return i(s,`check-${e.id}.yaml`),s};export{c as exportCheck,o as exportTrack};
6
6
  //# sourceMappingURL=export.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{FilterSchema as o}from"@spotify/backstage-plugin-soundcheck-common";function r(e){const t=e.getOptionalConfig("soundcheck.entityFilters.group")?.get();if(t&&o.safeParse(t).success)return t}export{r as getGroupFilterFromConfig};
2
+ //# sourceMappingURL=getGroupFilterFromConfig.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
3
  "description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
4
- "version": "0.14.4",
4
+ "version": "0.14.5",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://backstage.spotify.com",
7
7
  "main": "./dist/index.esm.js",
@@ -55,15 +55,16 @@
55
55
  "prepare": "yarn generate"
56
56
  },
57
57
  "dependencies": {
58
- "@backstage/catalog-client": "^1.8.0",
59
- "@backstage/catalog-model": "^1.7.1",
60
- "@backstage/core-compat-api": "^0.3.3",
61
- "@backstage/core-components": "^0.16.1",
62
- "@backstage/core-plugin-api": "^1.10.1",
63
- "@backstage/frontend-plugin-api": "^0.9.2",
64
- "@backstage/plugin-catalog-react": "^1.14.2",
65
- "@backstage/plugin-permission-react": "^0.4.28",
66
- "@backstage/plugin-scaffolder-react": "^1.14.1",
58
+ "@backstage/catalog-client": "^1.9.0",
59
+ "@backstage/catalog-model": "^1.7.2",
60
+ "@backstage/config": "^1.3.1",
61
+ "@backstage/core-compat-api": "^0.3.4",
62
+ "@backstage/core-components": "^0.16.2",
63
+ "@backstage/core-plugin-api": "^1.10.2",
64
+ "@backstage/frontend-plugin-api": "^0.9.3",
65
+ "@backstage/plugin-catalog-react": "^1.15.0",
66
+ "@backstage/plugin-permission-react": "^0.4.29",
67
+ "@backstage/plugin-scaffolder-react": "^1.14.2",
67
68
  "@backstage/types": "^1.2.0",
68
69
  "@date-io/luxon": "^1.0.0",
69
70
  "@hookform/resolvers": "^3.3.2",
@@ -72,8 +73,8 @@
72
73
  "@material-ui/lab": "4.0.0-alpha.61",
73
74
  "@material-ui/pickers": "3.3.11",
74
75
  "@mui/styles": "^5.14.7",
75
- "@spotify/backstage-plugin-core": "^0.8.3",
76
- "@spotify/backstage-plugin-soundcheck-common": "^0.14.4",
76
+ "@spotify/backstage-plugin-core": "^0.8.4",
77
+ "@spotify/backstage-plugin-soundcheck-common": "^0.14.5",
77
78
  "@tanstack/react-query": "^4.6.1",
78
79
  "@types/react-csv": "^1.1.6",
79
80
  "@uiw/react-md-editor": "3.20.10",
@@ -107,20 +108,20 @@
107
108
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
108
109
  },
109
110
  "devDependencies": {
110
- "@backstage/cli": "^0.29.2",
111
- "@backstage/core-app-api": "^1.15.2",
112
- "@backstage/dev-utils": "^1.1.4",
111
+ "@backstage/cli": "^0.29.4",
112
+ "@backstage/core-app-api": "^1.15.3",
113
+ "@backstage/dev-utils": "^1.1.5",
113
114
  "@backstage/e2e-test-utils": "^0.1.1",
114
- "@backstage/frontend-test-utils": "^0.2.3",
115
- "@backstage/test-utils": "^1.7.2",
115
+ "@backstage/frontend-test-utils": "^0.2.4",
116
+ "@backstage/test-utils": "^1.7.3",
116
117
  "@graphql-codegen/cli": "^5.0.0",
117
118
  "@graphql-codegen/typescript": "^4.0.0",
118
119
  "@graphql-codegen/typescript-graphql-request": "^6.0.0",
119
120
  "@graphql-codegen/typescript-operations": "^4.0.0",
120
121
  "@playwright/test": "^1.32.3",
121
- "@sp4b-dev/test-utils": "^0.0.9",
122
- "@spotify/backstage-plugin-core-common": "^0.6.3",
123
- "@spotify/backstage-plugin-soundcheck-node": "^0.8.5",
122
+ "@sp4b-dev/test-utils": "^0.0.10",
123
+ "@spotify/backstage-plugin-core-common": "^0.6.4",
124
+ "@spotify/backstage-plugin-soundcheck-node": "^0.8.6",
124
125
  "@testing-library/jest-dom": "^6.0.0",
125
126
  "@testing-library/react": "^14.0.0",
126
127
  "@testing-library/user-event": "^14.0.0",
@@ -1,2 +0,0 @@
1
- import"@material-ui/core";import{makeStyles as o}from"@material-ui/core/styles";import"react";o(t=>({detailRow:{marginBottom:t.spacing(1),"&:last-child":{marginBottom:0}},label:{fontWeight:"bold",color:t.palette.text.primary},value:{marginLeft:t.spacing(1)}}));
2
- //# sourceMappingURL=CampaignDetailRow.esm.js.map
@@ -1,2 +0,0 @@
1
- import"@backstage/plugin-catalog-react";import"@material-ui/core";import{makeStyles as o}from"@material-ui/core/styles";import"react";import"./CampaignDetailRow.esm.js";o(n=>({innerContainer:{padding:n.spacing(0,1),fontSize:n.typography.body2.fontSize},sectionLabel:{marginBottom:n.spacing(1)},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}}));const e=n=>new Date(n).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"});export{e as convertToReadableDate};
2
- //# sourceMappingURL=CampaignDetails.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useRouteRef as c}from"@backstage/core-plugin-api";import{makeStyles as s,Grid as l,Accordion as g,AccordionSummary as d,Typography as f,AccordionDetails as E}from"@material-ui/core";import u from"@material-ui/icons/ExpandMore";import e from"react";import{Link as y}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as h}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{campaignsPageRouteRef as x}from"../../../routes.esm.js";import{OVERVIEW_CAMPAIGNS_COUNT as m}from"../OverviewPageContent.esm.js";import{CampaignBanner as C}from"./CampaignBanner.esm.js";const A=s(a=>({campaignsGrid:{margin:`0 0 ${a.spacing(3)}px`,border:`1px solid ${a.palette.divider}`},campaignsCard:{display:"flex",width:"100%",flexDirection:"column",padding:a.spacing(2),gap:a.spacing(2)},campaignsLink:{textAlign:"center",margin:`${a.spacing(1)}rem 0 ${a.spacing(1)}`}})),R=({ownerEntityRef:a})=>{const i=A(),n=c(x),{data:o}=h({orderAlphabetical:"default",searchByOwner:a,searchByStatus:"active"},!!a),t=o?.edges.map(r=>r.node),p=t?.slice(0,m);return e.createElement(e.Fragment,null,t&&t.length>0&&e.createElement(l,{item:!0,xs:12,className:i.campaignsGrid},e.createElement(g,{style:{boxShadow:"none"}},e.createElement(d,{expandIcon:e.createElement(u,null)},e.createElement(f,{variant:"h6"},"Campaigns")),e.createElement(E,null,e.createElement("div",{className:i.campaignsCard},p?.map(r=>e.createElement("div",{key:r.id},e.createElement(C,{campaign:r})))),t.length>m&&e.createElement(y,{to:n(),className:i.campaignsLink},"More Campaigns")))))};export{R as CampaignArea};
2
- //# sourceMappingURL=CampaignArea.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useRouteRef as u}from"@backstage/core-plugin-api";import{EntityRefLink as L}from"@backstage/plugin-catalog-react";import{Typography as t,Button as M,Menu as B,MenuItem as E}from"@material-ui/core";import O from"@material-ui/icons/ArrowDropDown";import z from"@material-ui/icons/ArrowDropUp";import e,{useState as $}from"react";import{useNavigate as j}from"react-router-dom";import{useEntityPassRateTrend as q}from"../../../hooks/aggregations/useEntityPassRateTrend.esm.js";import{campaignDetailsRouteRef as A,campaignEditRouteRef as F}from"../../../routes.esm.js";import{convertToReadableDate as p}from"../../CampaignDetailsPage/CampaignDetails.esm.js";import{Loading as Q}from"../../TechHealth/Loading/Loading.esm.js";import{useCampaignBannerStyles as V}from"./useCampaignBannerStyles.esm.js";import{calculateOverallPassPercent as W,calculatePassingEntities as G}from"./utils.esm.js";const H=l=>{if(l?.edges.length){const a=G(l);return e.createElement(t,{variant:"body2"},a,"/",l.edges.length)}return e.createElement(t,{variant:"body2"},"No progress found.")},J=({campaign:l})=>{const a=V(),v=u(A),f=u(F),m=j(),[n,c]=$(null),o=150,g=l.track.levels.flatMap(({checks:s})=>s.map(({id:T})=>T)),{data:N,isLoading:b,isError:y}=q({filter:{tracks:[{trackId:l.track.id}],checkIds:{included:g},numberOfDays:void 0}}),i=N?.individualEntityPassRates??{totalCount:0,edges:[],pageInfo:{hasNextPage:!1,hasPreviousPage:!1}},C=s=>{c(s.currentTarget)},R=()=>{c(null)},h=()=>{m(f({campaignId:l.id}))},x=()=>{m(v({campaignId:l.id}))};if(b)return e.createElement("div",{"data-testid":"loading-indicator"},e.createElement(Q,null));if(y)return e.createElement(t,{color:"error"},"Failed to load campaigns progress.");const k=i.edges.length?W(i):0,w=H(i),{name:P,description:r,ownerEntityRef:D,targetCompletionDate:I,startDate:S,supportChannel:d}=l;return e.createElement("div",{className:a.campaignCards},e.createElement("div",{className:a.campaignCard},e.createElement("div",{className:a.flexRow,style:{justifyContent:"space-between"}},e.createElement("div",{className:a.flexColumn},e.createElement(t,{variant:"h5"},P),e.createElement(t,{variant:"body1",className:a.description},r.length>o?`${r.substring(0,o)}...`:r)),e.createElement("div",null,e.createElement(M,{variant:"text","aria-controls":"menu","aria-haspopup":"true",onClick:C},e.createElement("div",{className:a.actions},e.createElement("div",{className:a.actionsText},"Actions"),e.createElement("div",{className:a.flexRow},n?e.createElement(z,{fontSize:"small"}):e.createElement(O,{fontSize:"small"})))),e.createElement(B,{id:"campaign-menu",anchorEl:n,keepMounted:!0,open:!!n,onClose:R,classes:{list:a.menuList}},e.createElement(E,{onClick:x},"View"),e.createElement(E,{onClick:h},"Edit")))),e.createElement("div",{className:a.detailSection},e.createElement("div",{className:a.flexColumn},e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Owner:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},e.createElement(L,{className:a.ownerLink,entityRef:D}))),d&&e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Support Channel:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},d))),e.createElement("div",{className:a.flexColumn},e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Start Date:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},p(S))),e.createElement("div",{className:a.flexRow},e.createElement(t,{variant:"subtitle1",className:a.label},"Target Completion Date:"),e.createElement(t,{variant:"body1",display:"inline",className:a.value},p(I)))),e.createElement("div",{className:a.flexRow,style:{minWidth:"300px"}},e.createElement("div",{className:a.flexColumn},e.createElement(t,{variant:"subtitle1",className:a.label},"Checks Passing"),e.createElement(t,{variant:"body2"},k,"%")),e.createElement("div",{className:a.flexColumn},e.createElement(t,{variant:"subtitle1",className:a.label},"Entities Complete"),w)))))};export{J as CampaignBanner};
2
- //# sourceMappingURL=CampaignBanner.esm.js.map
@@ -1,2 +0,0 @@
1
- import{makeStyles as i}from"@material-ui/core";const a=i(e=>({campaignCards:{display:"flex",flexDirection:"column"},campaignCard:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,padding:e.spacing(2),gap:e.spacing(5),borderRadius:e.shape.borderRadius},actions:{display:"flex",alignItems:"center",gap:e.spacing(1)},actionsText:{textTransform:"lowercase","&:first-letter":{textTransform:"uppercase"}},flexRow:{display:"flex",gap:e.spacing(1)},campaignDescription:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},progress:{display:"flex",alignItems:"center",gap:e.spacing(1),width:"90%"},flexColumn:{width:"100%",display:"flex",flexDirection:"column",gap:e.spacing(1)},detailSection:{display:"flex",flexDirection:"row",justifyContent:"space-between",gap:e.spacing(.5)},label:{fontWeight:"bold",color:e.palette.text.primary},value:{marginTop:"2px"},description:{maxWidth:"90%"},menuList:{backgroundColor:e.palette.background.paper},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}}));export{a as useCampaignBannerStyles};
2
- //# sourceMappingURL=useCampaignBannerStyles.esm.js.map
@@ -1,2 +0,0 @@
1
- const a=e=>{let s=0;return e?.edges.forEach(({node:t})=>{s+=t.snapshotPassRate}),Math.round(s/(e?.edges.length??1))},n=e=>e?.edges.filter(({node:s})=>s.snapshotPassRate===100).length;export{a as calculateOverallPassPercent,n as calculatePassingEntities};
2
- //# sourceMappingURL=utils.esm.js.map