@spotify/backstage-plugin-soundcheck 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/config.d.ts +14 -0
- package/dist/api.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
- package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +2 -0
- package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
- package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
- package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
- package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +2 -0
- package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +1 -1
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
- package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FilterProvider.esm.js +1 -1
- package/dist/components/TechHealth/Filters/utils.esm.js +1 -1
- package/dist/components/TechInsights/ColorLegend.esm.js +2 -0
- package/dist/components/TechInsights/LoadingOverlay.esm.js +2 -0
- package/dist/components/TechInsights/LowestPerformingTeams.esm.js +2 -0
- package/dist/components/TechInsights/NivoCirclePacking.esm.js +2 -0
- package/dist/components/TechInsights/NivoIcicle.esm.js +2 -0
- package/dist/components/TechInsights/NivoSunburst.esm.js +2 -0
- package/dist/components/TechInsights/NivoTreemap.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/CheckComparison.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/LineChartContainer.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/MultiTrackHistoryChart.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/TeamComparison.esm.js +2 -0
- package/dist/components/TechInsights/TeamComparison/TrackComparison.esm.js +2 -0
- package/dist/components/TechInsights/TeamPerformanceCard.esm.js +2 -0
- package/dist/components/TechInsights/TeamPerformanceListCard.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsGroupSelector.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsPage.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsPage2.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsSidebar.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +2 -0
- package/dist/components/TechInsights/Tiles/CheckStatusTile.esm.js +2 -0
- package/dist/components/TechInsights/Tiles/TileUtils.esm.js +2 -0
- package/dist/components/TechInsights/Tiles/TrackStatusTile.esm.js +2 -0
- package/dist/components/TechInsights/TopPerformingTeams.esm.js +2 -0
- package/dist/components/TechInsights/TrackCardGrid.esm.js +2 -0
- package/dist/components/TechInsights/TrackCardGridBox.esm.js +2 -0
- package/dist/components/TechInsights/colorContrast.esm.js +2 -0
- package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +2 -0
- package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +2 -0
- package/dist/components/TechInsights/hierarchy/VirtualRow.esm.js +2 -0
- package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
- package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +2 -0
- package/dist/components/TechInsights/styles.esm.js +2 -0
- package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +2 -0
- package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +250 -80
- package/dist/hooks/aggregations/useCertificationStatusHistories.esm.js +2 -0
- package/dist/hooks/aggregations/useCertificationStatuses.esm.js +2 -0
- package/dist/hooks/aggregations/useCheckStatusByGroups.esm.js +2 -0
- package/dist/hooks/aggregations/useCheckStatusHistoriesMultiFilter.esm.js +2 -0
- package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
- package/dist/hooks/campaigns/useSendCampaignNotification.esm.js +2 -0
- package/dist/hooks/checks/useImportChecks.esm.js +2 -0
- package/dist/hooks/facets/useFacetFilters.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/groups/useAllGroups.esm.js +1 -1
- package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
- package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +2 -0
- package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +2 -0
- package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +2 -0
- package/dist/hooks/heirarchy/useRootGroups.esm.js +2 -0
- package/dist/hooks/savedViews/useDeleteView.esm.js +2 -0
- package/dist/hooks/savedViews/useSaveView.esm.js +2 -0
- package/dist/hooks/savedViews/useSavedViews.esm.js +2 -0
- package/dist/hooks/tracks/useImportTracks.esm.js +2 -0
- package/dist/utils/colors.esm.js +1 -1
- package/dist/utils/export.esm.js +7 -3
- package/dist/utils/helpers.esm.js +2 -0
- package/package.json +32 -16
- package/dist/components/OrgInsights/OrgInsightsPage.esm.js +0 -2
- package/dist/components/OrgInsights/OrgInsightsSidebar.esm.js +0 -2
- package/dist/components/OrgInsights/OrgInsightsViewSelector.esm.js +0 -2
- package/dist/components/OrgInsights/TrackCardGrid.esm.js +0 -2
- package/dist/components/OrgInsights/TrackComparison.esm.js +0 -2
- package/dist/components/OrgInsights/TrackStatusTile.esm.js +0 -2
- package/dist/components/OrgInsights/styles.esm.js +0 -2
- package/dist/utils/getGroupFilterFromConfig.esm.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as g}from"react/jsx-runtime";import{ResultState as R}from"../../graphql/generated/index.esm.js";import{entityHeaderCell as v,trackHeaderCell as w,trackBadgeCell as C,levelHeaderCell as H,checkTitleCell as E,checkResultCell as T}from"./Cell/cellRenderer.esm.js";import{CheckLabelCellType as y,CheckLabelCell as b}from"./Cell/CheckLabelCell.esm.js";import{TrackLevelHeaderFill as F}from"./Cell/TrackLevelHeaderCell.esm.js";import{findLongestRefTitle as L,calculateHeightForRefTitle as M,RowHeights as m}from"./resultsTableUtils.esm.js";const S=i=>{const r=L(i??[]);return{height:Math.min(M(r.length??1)-10,125),cells:[v(""),...i.map(t=>v(t||""))]}},A=(i,r,t)=>{const e=[];return i.forEach(({track:o,levels:s,trackStatuses:n})=>{e.push({height:m.trackTitle,cells:[w(o.name),...r.map(c=>{const l=c?n.find(a=>a.entityRef===c):void 0;return C(l,o.type??void 0)})]}),s.forEach(c=>{e.push({height:m.levelTitle,cells:[H(c.name),...r.map(l=>H(""))]}),c.checks.forEach(({check:l,results:a,totalPassing:k,totalFailing:p})=>{const f={PASSED:k,FAILED:p};e.push({height:m.check,cells:[E(l.name,f,l.id),...r.map(h=>{const d=a.find(u=>u.entityRef===h);return T(o.id,l,h,d?.result??R.NotApplicable,t,d?.timestamp??void 0)})]})})})}),e},P=i=>{const r=i.flatMap(({track:t,levels:e})=>{const o={label:t.name??t.id,description:t.description??"",cellType:y.track},s=e.flatMap(n=>{const c={label:n.name??`level ${n.ordinal}`,cellType:y.level},l=n.checks.map(({check:a})=>({label:a.name??a.id,description:a.description??"",cellType:y.check}));return[c,...l]});return[o,...s]});return{height:125,cells:[{type:"CheckHeader",render:()=>g(b,{})},...r.map(t=>({render:()=>g(b,{...t}),type:"CheckHeader"}))]}},x=(i,r,t)=>r.map(e=>{const o=v(e,!0),s=i.flatMap(({track:n,levels:c,trackStatuses:l})=>{const a=e?l.find(p=>p.entityRef===e):void 0,k=c.flatMap(p=>{const f=p.checks.map(({check:h,results:d})=>T(n.id,h,e,d.find(u=>u.entityRef===e)?.result??R.NotApplicable,t));return[{type:"Filler",render:()=>g(F,{pivot:!0})},...f]});return[C(a,n.type??void 0,!0),...k]});return[o,...s]}).map(e=>({height:m.check,cells:e}));export{S as generateHeaderRow,P as generateHeaderRowPivoted,A as generateRows,x as generateRowsPivoted};
|
|
2
2
|
//# sourceMappingURL=ResultsTableRow.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as a,Fragment as n,jsx as t}from"react/jsx-runtime";import{makeStyles as c,useTheme as p,Box as m,Typography as g}from"@material-ui/core";import d from"@material-ui/icons/Check";import{CircularProgressbarWithChildren as h,buildStyles as f}from"react-circular-progressbar";import{getPercentageColor as u}from"../../utils/colors.esm.js";const C=c(e=>({progressCircle:{width:"24px !important",height:"24px !important"},passPercentage:{fontWeight:"bold",fontSize:"1.25em",minWidth:"50px"},icon:{color:e.palette.background.default,fontSize:15}})),P=({passPercentage:e,getColor:i})=>{const r=p(),o=C(r),s=i||(l=>u(r,l));return a(n,{children:[t(m,{className:o.progressCircle,children:t(h,{value:e,strokeWidth:e===100?50:15,styles:f({strokeLinecap:"round",pathColor:s(e),trailColor:r.palette.divider}),children:e===100&&t(d,{className:o.icon})})}),a(g,{className:o.passPercentage,style:{color:s(e)},children:[e,"%"]})]})};export{P as PassPercentageProgressbar};
|
|
2
|
+
//# sourceMappingURL=PassPercentageProgressbar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as o,Fragment as f}from"react/jsx-runtime";import{Page as O,TabbedLayout as a}from"@backstage/core-components";import{useApi as k,featureFlagsApiRef as j,configApiRef as z}from"@backstage/core-plugin-api";import{usePermission as l}from"@backstage/plugin-permission-react";import{makeStyles as G,Box as h}from"@material-ui/core";import{SpotifyLicenseBanner as Q}from"@spotify/backstage-plugin-core";import{soundcheckCampaignCreatePermission as V,soundcheckCollectorReadPermission as W,soundcheckCheckCreatePermission as q,soundcheckTrackCreatePermission as M}from"@spotify/backstage-plugin-soundcheck-common";import{Routes as U,Route as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{UserProvider as $}from"../../contexts/UserProvider.esm.js";import J from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as K}from"../../hooks/useSoundcheckAlert.esm.js";import{CampaignInsightsPage as X}from"../CampaignInsightsPage/CampaignInsightsPage.esm.js";import{CampaignsPage as Y}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as Z}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as _}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as ee}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as te}from"../CheckPage/CheckEditPage.esm.js";import{CheckInsightsPage as u}from"../CheckPage/CheckInsightsPage.esm.js";import{ChecksTab as ie}from"../ChecksTab/ChecksTab.esm.js";import{CheckTemplatesPage as ae}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import{CollectorPage as re}from"../CollectorPage/CollectorPage.esm.js";import{CollectorsPage as ce}from"../CollectorsPage/CollectorsPage.esm.js";import{OverviewPageContent as oe}from"../OverviewPage/OverviewPageContent.esm.js";import{QuickstartPage as ne}from"../QuickstartPage/QuickstartPage.esm.js";import{SoundcheckHeader as se}from"../SoundcheckHeader/SoundcheckHeader.esm.js";import{SoundcheckHeaderProvider as le}from"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{SoundcheckQueryClientProvider as me}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{TechHealth as he}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage2 as de}from"../TechInsights/TechInsightsPage2.esm.js";import{TechInsightsPage as pe}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as ge}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as fe}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as ke}from"../TrackPage/TrackPage.esm.js";import{TracksTab as ue}from"../TracksTab/TracksTab.esm.js";const C=G(r=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}},pageContent:{display:"flex",flexDirection:"row",flexGrow:1},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",maxWidth:"100%","& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",padding:`${r.spacing(3)}px !important`}}})),P=({title:r="Soundcheck",children:m})=>{const n=C();return e(K,{children:e($,{children:e(me,{children:e(le,{defaultTitle:r,children:e(J,{children:e(h,{className:n.root,children:o(O,{themeId:"website",children:[e(Q,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),e(se,{documentTitle:r}),e(h,{className:n.pageContent,children:e(h,{className:n.pageLayout,children:m})})]})})})})})})})},Ce=({title:r="Soundcheck",integrations:m})=>{const n=C(),c=k(j),d=k(z).getOptionalStringArray("soundcheck.flags"),s=c.getRegisteredFlags(),p=d?.includes("enable-tech-insights")??!1,b=(!s.find(i=>i.name==="soundcheck-enable-tech-health")||c.isActive("soundcheck-enable-tech-health"))&&!d?.includes("soundcheck-disable-tech-health"),v=!s.find(i=>i.name==="soundcheck-enable-collectors")||c.isActive("soundcheck-enable-collectors"),g=!s.find(i=>i.name==="soundcheck-enable-campaigns")||c.isActive("soundcheck-enable-campaigns"),{loading:x,allowed:T}=l({permission:V}),I=!x&&T,{loading:R,allowed:w}=l({permission:W}),{loading:y,allowed:A}=l({permission:q}),S=!s.find(i=>i.name==="soundcheck-enable-check-creation")||c.isActive("soundcheck-enable-check-creation"),L=!y&&A&&S,{loading:H,allowed:N}=l({permission:M}),D=!s.find(i=>i.name==="soundcheck-enable-track-creation")||c.isActive("soundcheck-enable-track-creation"),E=!H&&N&&D,F=v&&!R&&w,B=b;return o(P,{title:r,children:[o(U,{children:[g&&o(f,{children:[e(t,{path:"/campaigns/:campaignId/edit",element:e(_,{})}),e(t,{path:"/campaigns/:campaignId",element:e(X,{})}),I&&e(t,{path:"/campaigns/create",element:e(Z,{})})]}),e(t,{path:"/quickstart",element:e(ne,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(fe,{})}),E&&e(t,{path:"/tracks/create",element:e(ge,{})}),e(t,{path:"/tracks/:trackId",element:e(ke,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(u,{})}),e(t,{path:"/checks/:checkId",element:e(u,{})}),e(t,{path:"/checks/:checkId/edit",element:e(te,{})}),L&&o(f,{children:[e(t,{path:"/checks/create",element:e(ee,{})}),e(t,{path:"/checks/templates",element:e(ae,{})})]}),e(t,{path:"/integrations/:integrationId",element:e(re,{})}),e(t,{path:"/*",element:o(a,{children:[e(a.Route,{title:"Overview",path:"/",children:e("div",{className:n.tabContent,children:e(oe,{})})}),p&&e(a.Route,{title:"Tech Insights",path:"/tech-insights",children:e(pe,{})}),p&&e(a.Route,{title:"Tech Insights - Viz",path:"/tech-insights/viz",children:e(de,{})}),B&&e(a.Route,{title:"Tech Health",path:"/tech-health",children:e(he,{})}),e(a.Route,{title:"Checks",path:"/checks",children:e(ie,{})}),e(a.Route,{title:"Tracks",path:"/tracks",children:e(ue,{})}),g&&e(a.Route,{title:"Campaigns",path:"/campaigns",children:e(Y,{})}),F&&e(a.Route,{title:"Integrations",path:"/integrations",children:e(ce,{integrations:m})})]})})]})," "]})};export{Ce as RoutingPage,P as RoutingPageWrapper};
|
|
2
2
|
//# sourceMappingURL=RoutingPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as i,jsx as a}from"react/jsx-runtime";import{parseEntityRef as F}from"@backstage/catalog-model";import{makeStyles as v,Grid as S,InputLabel as t,NativeSelect as s}from"@material-ui/core";import{Fragment as w}from"react";import"../CampaignsPage/CampaignListPage/CampaignListPage.esm.js";import{CampaignStatus as d}from"../CampaignsPage/CampaignListPage/CampaignTypes.esm.js";import{SearchBar as y}from"../SearchBar/SearchBar.esm.js";const x=v(r=>({searchbar:{maxWidth:"275px","& input":{paddingTop:r.spacing(1),paddingBottom:r.spacing(1)}},filters:{display:"flex",alignItems:"center",padding:0},dropdownFilters:{margin:"0 15px",alignItems:"center"},selectHolder:{minWidth:105,"& select":{paddingTop:r.spacing(1),paddingBottom:r.spacing(1)}},label:{marginBottom:r.spacing(.5)}})),B=({searchPlaceholder:r,isLoading:o,searchTerm:m,setSearchTerm:h,filterAlpha:p,handleAlphabeticalFilterChange:g,filterOwner:u,handleOwnerFilterChange:f,filterStatus:n,handleStatusFilterChange:c,owners:N})=>{const e=x();return i(S,{item:!0,xs:
|
|
1
|
+
import{jsxs as i,jsx as a}from"react/jsx-runtime";import{parseEntityRef as F}from"@backstage/catalog-model";import{makeStyles as v,Grid as S,InputLabel as t,NativeSelect as s}from"@material-ui/core";import{Fragment as w}from"react";import"../CampaignsPage/CampaignListPage/CampaignListPage.esm.js";import{CampaignStatus as d}from"../CampaignsPage/CampaignListPage/CampaignTypes.esm.js";import{SearchBar as y}from"../SearchBar/SearchBar.esm.js";const x=v(r=>({searchbar:{maxWidth:"275px","& input":{paddingTop:r.spacing(1),paddingBottom:r.spacing(1)}},filters:{display:"flex",alignItems:"center",padding:0},dropdownFilters:{margin:"0 15px",alignItems:"center"},selectHolder:{minWidth:105,"& select":{paddingTop:r.spacing(1),paddingBottom:r.spacing(1)}},label:{marginBottom:r.spacing(.5)}})),B=({searchPlaceholder:r,isLoading:o,searchTerm:m,setSearchTerm:h,filterAlpha:p,handleAlphabeticalFilterChange:g,filterOwner:u,handleOwnerFilterChange:f,filterStatus:n,handleStatusFilterChange:c,owners:N})=>{const e=x();return i(S,{item:!0,xs:8,className:e.filters,children:[i("div",{children:[a(t,{className:e.label,htmlFor:"search-bar",children:r||"Search"}),a(y,{searchTerm:m,disabled:o,setSearchTerm:h,placeholder:"Name",variant:"outlined",size:"small",className:e.searchbar,id:"search-bar"})]}),i("div",{className:e.dropdownFilters,children:[a(t,{className:e.label,htmlFor:"sort-by",children:"Sort By"}),i(s,{id:"sort-by",className:e.selectHolder,value:p,onChange:g,children:[a("option",{value:"ascending",children:"Name A-Z"}),a("option",{value:"descending",children:"Name Z-A"})]})]}),i("div",{className:e.dropdownFilters,children:[a(t,{className:e.label,htmlFor:"filter-owner",children:"Filter By Owner"}),i(s,{id:"filter-owner",className:e.selectHolder,value:u,onChange:f,children:[a("option",{value:"all",children:"All"},"all"),N?.map((l,b)=>a("option",{value:l,children:F(l).name},l+b))]})]}),n&&c&&i("div",{className:e.dropdownFilters,children:[a(t,{className:e.label,htmlFor:"filter-status",children:"Filter By Status"}),a(s,{id:"filter-status",className:e.selectHolder,value:n,onChange:c,children:Object.keys(d).map(l=>a(w,{children:a("option",{value:l,children:d[l]})},l))})]})]})};export{B as SearchFilters};
|
|
2
2
|
//# sourceMappingURL=SearchFilters.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as t,Fragment as S,jsx as i}from"react/jsx-runtime";import{Button as u,Typography as e,Box as n,TextField as y}from"@material-ui/core";import W from"@material-ui/icons/AddAlert";import{capitalize as B}from"lodash";import{useState as d,useCallback as I}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useSendCampaignNotification as E}from"../../hooks/campaigns/useSendCampaignNotification.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as O}from"../../hooks/aggregations/useCertificationStatus.esm.js";import"react-router-dom";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as A}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as g}from"../FormFieldLabel/FormFieldLabel.esm.js";import{LoadingIndicator as $}from"../LoadingIndicator/LoadingIndicator.esm.js";import{SoundcheckDialog as j}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const q=["critical","high","normal","low"],z=({loading:s,notificationCount:o,reset:p,error:m,failingCount:r})=>t(n,{children:[s&&t(n,{textAlign:"center",children:[i(e,{variant:"body1",children:"Sending Notifications..."}),i(e,{variant:"caption",children:"Do not refresh or leave the page."}),i(n,{marginTop:2,marginBottom:1,children:i($,{size:48})})]}),!s&&t(n,{children:[t(e,{variant:"body1",children:[t("strong",{children:[o," Notification",o===1?"":"s"," "]}),"sent to entity owners."]}),m&&i(e,{variant:"body2",color:"error",children:m.message}),r&&o<r&&t(e,{variant:"caption",children:["Notifications are grouped by owner, so this number might be less than the total failing entity count of"," ",i("strong",{children:r}),"."]}),i(n,{marginTop:2,children:i(u,{onClick:p,variant:"outlined",color:"primary",children:"Send Again"})})]})]}),G=({buttonClass:s,campaign:o})=>{const[p,m]=d(!1),[r,x]=d(""),[f,N]=d(""),[h,w]=d("normal"),[a,T]=d(""),[k,v]=d(!1),{data:L}=O({trackId:o.track.id},p),{mutate:C,isLoading:b,notificationCount:D,error:R}=E(),F=I(()=>{C({campaignId:o.id,entityRefs:a?[a]:void 0,title:r,description:f,severity:h.toLowerCase()}),v(!0)},[o.id,f,a,C,h,r]),c=L?.certificationStatus?.statusByLevel[0]?.failed??0;return t(S,{children:[i(u,{className:s,variant:"contained",onClick:()=>m(!0),startIcon:i(W,{}),children:"Send"}),i(j,{handleClose:()=>m(!1),title:"Send a Campaign Reminder Notification",open:p,fullScreen:!1,maxWidth:"sm",children:k?i(z,{loading:b,notificationCount:D,reset:()=>v(!1),error:R,failingCount:c}):t(S,{children:[i(e,{variant:"body1",children:"Send a notification for all entities that are currently failing checks in this campaign. Notifications will be grouped by the owner of these entities."}),t(n,{marginTop:1,children:[i(n,{display:"flex",children:i(g,{title:"Severity"})}),i(A,{value:h,onChange:w,options:q,fullWidth:!1,getOptionLabel:l=>B(l)})]}),t(n,{marginTop:1,children:[i(g,{title:"Custom Notification Title (Optional)"}),i(y,{value:r,onChange:l=>x(l.target.value),placeholder:`Default: Entities Failing Campaign - ${o.name}`,type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:1,children:[i(g,{title:"Custom Notification Description (Optional)"}),i(e,{variant:"caption",component:"div",children:"Templating for custom notification messages is currently not supported."}),i(y,{value:f,onChange:l=>N(l.target.value),placeholder:`Default: Entities owned by [ownerGroup] are failing checks required in Campaign - ${o.name}.`,type:"text",variant:"outlined",margin:"dense",multiline:!0,minRows:4,maxRows:8,fullWidth:!0})]}),t(n,{marginTop:1,children:[i(g,{title:"Entity Ref For Testing (Optional)"}),i(e,{variant:"caption",component:"div",children:"Select a specific entityRef to send a notification to - used for testing. Will bypass checking if the campaign is actually failing for this entity."}),i(y,{value:a,onChange:l=>T(l.target.value),placeholder:"example: component:default/test-component",type:"text",variant:"outlined",margin:"dense",fullWidth:!0})]}),t(n,{marginTop:2,display:"flex",alignItems:"center",children:[i(u,{disabled:!a&&c===0||b,variant:"outlined",color:"primary",onClick:F,children:"Send"}),a&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notification will be sent to ",a,"."]}),!a&&!!c&&t(e,{style:{marginLeft:6},variant:"caption",children:["Notifications will be sent for the",i("strong",{children:` ~${c} `}),c===1?"entity":"entities"," failing this campaign"]}),!a&&c===0&&i(e,{color:"error",style:{marginLeft:6},variant:"caption",children:"No entities failing campaign."})]})]})})]})};export{G as SendCampaignNotificationDialog};
|
|
2
|
+
//# sourceMappingURL=SendCampaignNotificationDialog.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t,jsxs as l}from"react/jsx-runtime";import{withStyles as c,Dialog as p,Slide as s,AppBar as m,Toolbar as f,Typography as g,IconButton as h,Box as u}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import b from"@material-ui/icons/Close";import{forwardRef as k}from"react";const w=x(e=>({appBar:{position:"relative",color:`${e.palette.text.primary} !important`,backgroundColor:`${e.palette.background.default} !important`,paddingRight:"0 !important"},title:{flex:1,fontSize:e.typography.h6.fontSize},closeIcon:{marginRight:0},content:{flex:"1 0 auto",padding:e.spacing(2),marginBottom:e.spacing(2),overflowX:"hidden",overflowY:"hidden","& .wmde-markdown-var":{"--color-canvas-default":e.palette.background.paper,"--color-border-default":e.palette.border},"& .wmde-markdown":{"--color-canvas-default":e.palette.background.paper}}})),S=c({paperFullScreen:{padding:0}})(p),y=k(function(e,a){return t(s,{direction:"up",ref:a,...e})}),v=({open:e,handleClose:a,title:r,children:n,fullScreen:i=!0,maxWidth:d="lg"})=>{const o=w();return l(S,{fullScreen:i,open:e,onClose:a,TransitionComponent:y,className:o.title,maxWidth:d,children:[t(m,{className:o.appBar,children:l(f,{children:[t(g,{className:o.title,"data-testid":`dialog-${r}`,children:r}),t(h,{"data-testid":"close-dialog",edge:"end",color:"inherit",onClick:a,"aria-label":"close",className:o.closeIcon,children:t(b,{})})]})}),t(u,{className:o.content,children:n})]})};export{v as SoundcheckDialog};
|
|
2
2
|
//# sourceMappingURL=SoundcheckDialog.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as o,jsx as i,Fragment as k}from"react/jsx-runtime";import{Header as N}from"@backstage/core-components";import{useRouteRef as l}from"@backstage/core-plugin-api";import{makeStyles as
|
|
1
|
+
import{jsxs as o,jsx as i,Fragment as k}from"react/jsx-runtime";import{Header as N}from"@backstage/core-components";import{useRouteRef as l}from"@backstage/core-plugin-api";import{makeStyles as S,Link as v,Typography as p,Button as R}from"@material-ui/core";import y from"@material-ui/icons/InfoOutlined";import x from"@material-ui/icons/MenuBook";import{useContext as C}from"react";import{useLocation as T,useNavigate as L}from"react-router-dom";import{rootRouteRef as z,quickstartRouteRef as B}from"../../routes.esm.js";import{Breadcrumbs as H}from"./Breadcrumbs.esm.js";import{generateBreadcrumbs as w}from"./headerUtil.esm.js";import{SoundcheckHeaderContext as I}from"./SoundcheckHeaderContext.esm.js";const j=S(e=>({subtitle:{maxWidth:"75%",marginTop:e.spacing(.5),whiteSpace:"pre-line"},docLink:{display:"flex",alignItems:"center",marginTop:e.spacing(.5),marginBottom:e.spacing(0),width:"fit-content",fontSize:e.typography.body2.fontSize,color:"inherit"},descriptionIcon:{marginRight:e.spacing(.25)},headerContent:{color:e.page.fontColor},link:{},button:{textTransform:"none",marginRight:e.spacing(2),color:e.page.fontColor},icon:{paddingRight:e.spacing(1)},title:{},breadcrumbs:{}}),{name:"SoundcheckHeader"}),q=({documentTitle:e})=>{const{title:n,description:r,docLink:a,customSubtitle:c,sectionRight:s}=C(I),t=j(),m=T().pathname?.replace(/\/+$/,"")??"",h=w(m),g=l(z),d=m===g(),u=l(B),f=L(),b=u();return o(N,{pageTitleOverride:e,title:i(k,{children:d?i("div",{className:t.title,children:n}):o("div",{className:t.title,children:[i(H,{className:t.breadcrumbs,pages:h}),n]})}),subtitle:o("div",{className:t.headerContent,children:[a&&o(v,{target:"_blank",href:a,className:t.docLink,children:[i(y,{className:t.descriptionIcon,fontSize:"inherit"}),"Documentation"]}),!!c&&i("div",{children:c}),typeof r=="string"?i(p,{className:t.subtitle,variant:"body2",color:"inherit",children:r}):i("div",{children:r})]}),children:[d&&o(R,{className:t.button,onClick:()=>f(b),color:"inherit",variant:"outlined",children:[i(x,{className:t.icon}),i(p,{children:"Get Started with Soundcheck"})]}),!!s&&i("div",{children:s})]})};export{q as SoundcheckHeader};
|
|
2
2
|
//# sourceMappingURL=SoundcheckHeader.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const a=e=>{const c={"^/soundcheck/campaigns$":"Campaigns","^/soundcheck/campaigns/create":"Create","^/soundcheck/campaigns/.*/edit":"Edit","^/soundcheck/campaigns/[^/]+$":"Campaign Insights","^/soundcheck/tracks$":"Tracks","^/soundcheck/tracks/create":"Create","^/soundcheck/tracks/.*/edit":"Edit","^/soundcheck/tracks/[^/]+$":"Track Insights","^/soundcheck/tracks/.*/checks/[^/]+$":"Check Insights","^/soundcheck/checks$":"Checks","^/soundcheck/checks/.*/edit":"Edit","^/soundcheck/checks/create":"Create","^/soundcheck/checks/templates$":"Templates","^/soundcheck/checks/[^/]+$":"Details","^/soundcheck/integrations/[^/]+$":"Configure","^/soundcheck/integrations$":"Integrations","^/soundcheck/tech-health$":"Tech Health","^/soundcheck/tech-health/campaigns":"Campaigns","^/soundcheck/tech-health/checks":"Checks","^/soundcheck/tech-health/tracks":"Tracks","^/soundcheck/tech-health/entities":"Entities","^/soundcheck/tech-health/teams":"Teams","^/soundcheck/quickstart":"Quick Start"};for(const[s,t]of Object.entries(c))if(new RegExp(s).test(e))return t;return null},k=e=>e.split("/").filter(c=>c).map((c,s,t)=>{const h=`/${t.slice(0,s+1).join("/")}`,n=a(h);if(n)return h===e?{title:n}:{path:h,title:n}}).filter(c=>!!c);export{k as generateBreadcrumbs};
|
|
1
|
+
const a=e=>{const c={"^/soundcheck/campaigns$":"Campaigns","^/soundcheck/campaigns/create":"Create","^/soundcheck/campaigns/.*/edit":"Edit","^/soundcheck/campaigns/[^/]+$":"Campaign Insights","^/soundcheck/tracks$":"Tracks","^/soundcheck/tracks/create":"Create","^/soundcheck/tracks/.*/edit":"Edit","^/soundcheck/tracks/[^/]+$":"Track Insights","^/soundcheck/tracks/.*/checks/[^/]+$":"Check Insights","^/soundcheck/checks$":"Checks","^/soundcheck/checks/.*/edit":"Edit","^/soundcheck/checks/create":"Create","^/soundcheck/checks/templates$":"Templates","^/soundcheck/checks/[^/]+$":"Details","^/soundcheck/integrations/[^/]+$":"Configure","^/soundcheck/integrations$":"Integrations","^/soundcheck/tech-health$":"Tech Health","^/soundcheck/tech-health/campaigns":"Campaigns","^/soundcheck/tech-health/checks":"Checks","^/soundcheck/tech-health/tracks":"Tracks","^/soundcheck/tech-health/entities":"Entities","^/soundcheck/tech-health/teams":"Teams","^/soundcheck/tech-insights$":"Tech Insights","^/soundcheck/quickstart":"Quick Start"};for(const[s,t]of Object.entries(c))if(new RegExp(s).test(e))return t;return null},k=e=>e.split("/").filter(c=>c).map((c,s,t)=>{const h=`/${t.slice(0,s+1).join("/")}`,n=a(h);if(n)return h===e?{title:n}:{path:h,title:n}}).filter(c=>!!c);export{k as generateBreadcrumbs};
|
|
2
2
|
//# sourceMappingURL=headerUtil.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jsx as n,jsxs as S}from"react/jsx-runtime";import{makeStyles as L,alpha as y,Box as h,Chip as I,TextField as O,FormControlLabel as T,Checkbox as w}from"@material-ui/core";import E from"@material-ui/icons/CheckBox";import z from"@material-ui/icons/CheckBoxOutlineBlank";import{Autocomplete as j}from"@material-ui/lab";import{remove as N}from"lodash";import{useState as m,useEffect as V,useCallback as g,useMemo as W}from"react";import{CollapsablePanel as $}from"../../CollapsablePanel/CollapsablePanel.esm.js";import{ListboxVirtualized as B}from"../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useFilterContext as D}from"./FilterProvider.esm.js";import{Facet as b,facetTooltips as H}from"./types.esm.js";const P=L(({palette:e,spacing:o})=>({chip:{maxWidth:"45%",textOverflow:"ellipsis",margin:o(.5,.5,.5,0),overflow:"hidden","& svg":{color:y(e.common.white,.7),"&:hover":{color:e.common.white}},backgroundColor:e.action.disabledBackground},autoCompleteInput:{"&& input":{margin:o(1,0,0,0),padding:`${o(0,1,1,1)} !important`,width:"100%",display:"flex",alignItems:"center",justifyContent:"center"},"&& button":{"&:hover":{backgroundColor:"transparent"}}},autoComplete:{margin:o(.5,0,1,0)},selectionLabel:{lineHeight:"1em"}})),q=({facet:e})=>{const o=P(),{getFacetOptions:C,getFacetOptionLabel:r,getSelectedFacetValues:i,setSelectedFacetValues:p}=D(),[x,d]=m(!1),[k,u]=m(!1),[F,f]=m("");V(()=>{d(!!i(e)?.length)},[i,e]);const s=g(t=>{if(e===b.Entity&&t[t.length-1]){const l=t[t.length-1];if(!l.includes(":")||!l.includes("/")){u(!0),f("Custom entities require a valid kind and namespace such as: component:default/entity");return}}u(!1),f(""),p(e,t)},[e,p]),a=W(()=>i(e),[e,i]),v=g(t=>{const l=[...a];N(l,c=>c===t),s(l)},[a,s]);return n($,{label:e,tooltip:H[e],isExpanded:x,setIsExpanded:d,children:S(h,{children:[n(h,{children:a.map(t=>n(I,{label:r(e,t),size:"small",className:o.chip,onDelete:()=>v(t),clickable:!1},t))}),n(j,{className:o.autoComplete,disableCloseOnSelect:!0,fullWidth:!0,multiple:!0,freeSolo:e===b.Entity,popupIcon:null,renderTags:()=>null,options:C(e),getOptionLabel:t=>r(e,t),value:a,onChange:(t,l)=>s(l),ListboxComponent:B,ListboxProps:{itemHeight:50},renderInput:t=>n(O,{...t,className:o.autoCompleteInput,placeholder:`Search for ${e}`,error:k,helperText:F}),renderOption:(t,{selected:l})=>n(T,{onClick:c=>c.preventDefault(),control:n(w,{icon:n(z,{fontSize:"small"}),checkedIcon:n(E,{fontSize:"small"}),checked:l}),classes:{label:o.selectionLabel},label:r(e,t)})})]})})};export{q as FacetFilter};
|
|
2
2
|
//# sourceMappingURL=FacetFilter.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{parseEntityRef as S}from"@backstage/catalog-model";import{humanizeEntityRef as U}from"@backstage/plugin-catalog-react";import{createFilterOptions as V}from"@material-ui/lab/Autocomplete";import{createContext as h,useCallback as x,useMemo as E,useContext as M}from"react";import R from"react-use/lib/useLocalStorage";import{useLoggedInUser as k}from"../../../contexts/UserProvider.esm.js";import{useFacetFilters as A}from"../../../hooks/facets/useFacetFilters.esm.js";import{TechHealthLoading as C}from"../Loading/TechHealthLoading.esm.js";import{useFacetOptions as N}from"./useFacetOptions.esm.js";import{emptyFacetFilters as w,DEFAULT_NUMBER_OF_DAYS as I,mapFacetFiltersToFilter as T}from"./utils.esm.js";const F=h({facetOptionsLoading:!1,getFacetOptions:()=>[],getFacetOptionLabel:()=>"",facetFilters:w(),clearAllFilters:()=>{},getSelectedFacetValues:()=>[],setSelectedFacetValues:()=>{},setManySelectedFacetValues:()=>{},numberOfDays:I,setNumberOfDays:()=>{},filter:{},loggedInUser:"Unknown"}),_=()=>M(F),m=f=>{const{userEntityRef:l,loading:u}=k(),{isLoading:c,facetOptions:r}=N(),[p]=R("soundcheck.overview.groupRef",null),{facetFilters:a,numberOfDays:s,setFacetFilter:d,setManyFacetFilters:g,getFacetFilter:O,clearFacetFilters:y,setNumberOfDays:b}=A(r,p??void 0),L=x(e=>r[e].map(({value:t})=>t),[r]),v=E(()=>T(r,a,s,l),[a,r,s,l]),D={facetOptionsLoading:c,getFacetOptions:L,getFacetOptionLabel:(e,t)=>{let o=r[e].find(i=>i.value===t)?.label;if(!o)try{const i=S(t);o=U(i)}catch{}return V(),o??t},facetFilters:a,clearAllFilters:y,getSelectedFacetValues:e=>O(e),setSelectedFacetValues:(e,t)=>{d(e,t)},setManySelectedFacetValues:(e,t)=>{g(e,t)},numberOfDays:s,setNumberOfDays:b,filter:v??{},loggedInUser:"Unknown"};return c||u?n(C,{}):n(F.Provider,{...f,value:D})};export{m as FilterProvider,m as default,_ as useFilterContext};
|
|
2
2
|
//# sourceMappingURL=FilterProvider.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Facet as
|
|
1
|
+
import{Facet as t}from"./types.esm.js";const a=30,l=2,y=90,o=r=>{if(r?.length){const e=parseInt(r,10);if(!isNaN(e)&&e>=l&&e<=y)return e}return a},p=r=>Object.fromEntries(Object.values(t).map(e=>r&&e===t.EntityOwner?[e,[r]]:[e,[]])),m=(r,e,s)=>{if(e.length)return e.map(c=>({trackId:c,levels:s.length?s.map(n=>parseInt(n,10)):void 0}));if(s.length)return r.map(c=>({trackId:c.value,levels:s.map(n=>parseInt(n,10))}))},O=(r,e,s,c)=>{const n=i=>e[i]?.length?{included:e[i]}:void 0;return{checkIds:n(t.Check),checkOwners:n(t.CheckOwner),entityOwners:n(t.EntityOwner),entityRefs:n(t.Entity),tracks:m(r[t.Track],e[t.Track],e[t.Level]),numberOfDays:s??a,context:c?{loggedInUser:c}:void 0,entityTypes:n(t.Type),entityKinds:n(t.Kind),entityLifecycles:n(t.Lifecycle),systems:n(t.System)}};export{a as DEFAULT_NUMBER_OF_DAYS,y as MAX_NUMBER_OF_DAYS,l as MIN_NUMBER_OF_DAYS,p as emptyFacetFilters,O as mapFacetFiltersToFilter,o as parseNumberOfDays};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as h,jsx as i}from"react/jsx-runtime";import{makeStyles as g,Box as e,Typography as n}from"@material-ui/core";const x=g({container:{display:"flex",flexDirection:"column",alignItems:"center",minHeight:0},gradientBox:{borderRadius:4,margin:0,minHeight:0,width:"100%",flex:1},captionTop:{marginBottom:4},captionBottom:{marginTop:4}}),f=({interpolator:r,minLabel:m="0%",maxLabel:s="100%",width:a=24,height:c="100%",steps:o=40})=>{const t=x(),l=`linear-gradient(to top, ${Array.from({length:o},(y,p)=>{const d=p/(o-1);return r(d)}).join(",")})`;return h(e,{className:t.container,height:c,style:{width:a},children:[i(n,{variant:"caption",className:t.captionTop,children:s}),i(e,{className:t.gradientBox,style:{background:l,width:a}}),i(n,{variant:"caption",className:t.captionBottom,children:m})]})};export{f as default};
|
|
2
|
+
//# sourceMappingURL=ColorLegend.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as l,jsxs as m}from"react/jsx-runtime";import{makeStyles as u,Box as g,Typography as h}from"@material-ui/core";const d=u(e=>({overlay:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},messageContainer:{textAlign:"center",padding:e.spacing(2)},mainMessage:{color:e.palette.common.white,fontSize:"1.5rem",marginBottom:e.spacing(2)},statsMessage:{color:e.palette.common.white,fontSize:"0.875rem",opacity:.8}}));function f(e,i){if(!e)return{teams:0,entities:0,checks:0};let s=0,t=0;const a=o=>{s+=1,t+=o.ownedEntityRefs?.length||0,Object.values(o.children||{}).forEach(c=>{a(c)})},n=Object.values(e)[0];n&&a(n);const r=i?.levels?.reduce((o,c)=>o+(c.checks?.length||0),0)||0;return{teams:s,entities:t,results:r*t}}const p=({isLoading:e,hierarchyData:i,track:s})=>{const t=d();if(!e)return null;const{teams:a,entities:n,results:r}=f(i,s);return l(g,{className:t.overlay,children:m(g,{className:t.messageContainer,children:[l(h,{className:t.mainMessage,children:"Calculating..."}),m(h,{className:t.statsMessage,children:["Aggregating the statuses for ",a," teams owning ",n," entities across ",r," check results"]})]})})};export{p as default};
|
|
2
|
+
//# sourceMappingURL=LoadingOverlay.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import{useApi as p}from"@backstage/core-plugin-api";import{entityPresentationApiRef as u}from"@backstage/plugin-catalog-react";import{useTheme as f}from"@material-ui/core";import{TeamPerformanceListCard as g}from"./TeamPerformanceListCard.esm.js";const c=({trackStatus:e,getColor:a,limit:s=3,onTeamClick:r})=>{const o=f(),i=p(u),m=(e.children||[]).filter(t=>t.status.passed+t.status.failed+t.status.warning+t.status.error+t.status.notReported>0&&(t.status.allPassPercentage??0)<50).sort((t,n)=>(t.status.allPassPercentage??0)-(n.status.allPassPercentage??0)).slice(0,s).map(t=>({groupRef:t.groupRef,teamName:i.forEntity(t.groupRef).snapshot.primaryTitle,passPercentage:t.status.allPassPercentage??0}));return l(g,{title:"Teams Needing Attention",titleColor:o.palette.error.main,teams:m,getColor:a,onTeamClick:r,emptyMessage:"Every team is performing above 50%! \u{1F389}"})};export{c as default};
|
|
2
|
+
//# sourceMappingURL=LowestPerformingTeams.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as w,jsx as s,Fragment as I}from"react/jsx-runtime";import{useApi as S}from"@backstage/core-plugin-api";import{entityPresentationApiRef as T}from"@backstage/plugin-catalog-react";import{useTheme as N}from"@material-ui/core";import{makeStyles as j}from"@material-ui/core/styles";import{ResponsiveCirclePacking as z}from"@nivo/circle-packing";import{useState as A,useMemo as D}from"react";import{getContrastTextColor as b}from"./colorContrast.esm.js";import{hierarchyToNivo as E}from"./hierarchyToNivo.esm.js";import L from"./LoadingOverlay.esm.js";const P=j(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),Z=({groupRef:t,hierarchyData:a,trackStatus:l,getColor:m,onZoomChange:C,track:k})=>{const[n,v]=A(null),p=P(),x=N(),u=S(T),d=D(()=>{if(!a||!t)return null;const o={};if(l){const r=i=>{i.groupRef&&i.groupRef!==t&&(o[i.groupRef]=i),i.children&&i.children.forEach(r)};r(l)}const e=a[t];return e?E(e,o,m,u):null},[a,l,t,m,u]),c=(o,e,r=[])=>{if(o.id===e)return[...r,o.id];if(o.children)for(const i of o.children){const g=c(i,e,[...r,o.id]);if(g)return g}return null},y=o=>{if(n===o.data.id)return;const e=n===o.data.id?null:o.data.id;v(e),C?.(o.data.entityRef)};if(!d)return null;const f=!l,h=x.palette.text.disabled,R=b(h);return w("div",{className:p.root,children:[s("div",{className:p.nivoContainer,children:s(z,{data:d,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:o=>f?h:o.data.color,childColor:{from:"color"},enableLabels:!0,label:o=>{if(n){const e=c(d,o.data.id),r=c(d,n);if(!e||!r||e.length<r.length)return""}return o.data.name},labelsSkipRadius:14,labelTextColor:o=>f?R:b(o.data.color||"#fff"),zoomedId:n,motionConfig:"default",isInteractive:!0,tooltip:()=>s(I,{}),onClick:y})}),s(L,{isLoading:f,hierarchyData:a,track:k})]})};export{Z as default};
|
|
2
|
+
//# sourceMappingURL=NivoCirclePacking.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as y,jsx as n,Fragment as R}from"react/jsx-runtime";import{useApi as I}from"@backstage/core-plugin-api";import{entityPresentationApiRef as w}from"@backstage/plugin-catalog-react";import{useTheme as S}from"@material-ui/core";import{makeStyles as T}from"@material-ui/core/styles";import{ResponsiveIcicle as j}from"@nivo/icicle";import{useState as A,useMemo as N}from"react";import{getContrastTextColor as u}from"./colorContrast.esm.js";import{hierarchyToNivo as z}from"./hierarchyToNivo.esm.js";import D from"./LoadingOverlay.esm.js";const E=T(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),L=({groupRef:t,hierarchyData:r,trackStatus:i,getColor:s,onZoomChange:h,track:g})=>{const[b,C]=A(null),d=E(),v=S(),m=I(w),p=N(()=>{if(!r||!t)return null;const o={};if(i){const f=e=>{e.groupRef&&e.groupRef!==t&&(o[e.groupRef]=e),e.children&&e.children.forEach(f)};f(i)}const a=r[t];return a?z(a,o,s,m):null},[r,i,t,s,m]),k=o=>{const a=b===o.data.id?null:o.data.id;C(a),h?.(o.data.entityRef)};if(!p)return null;const l=!i,c=v.palette.text.disabled,x=u(c);return y("div",{className:d.root,children:[n("div",{className:d.nivoContainer,children:n(j,{data:p,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:o=>l?c:o.data.color,enableLabels:!0,label:o=>o.data.name,labelTextColor:o=>l?x:u(o.data.color||"#fff"),motionConfig:"gentle",isInteractive:!0,tooltip:()=>n(R,{}),onClick:k})}),n(D,{isLoading:l,hierarchyData:r,track:g})]})};export{L as default};
|
|
2
|
+
//# sourceMappingURL=NivoIcicle.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as C,jsx as i,Fragment as v}from"react/jsx-runtime";import{useApi as x}from"@backstage/core-plugin-api";import{entityPresentationApiRef as k}from"@backstage/plugin-catalog-react";import{useTheme as R}from"@material-ui/core";import{makeStyles as y}from"@material-ui/core/styles";import{ResponsiveSunburst as L}from"@nivo/sunburst";import{useMemo as w}from"react";import{getContrastTextColor as h}from"./colorContrast.esm.js";import{hierarchyToNivo as S}from"./hierarchyToNivo.esm.js";import A from"./LoadingOverlay.esm.js";const I=y(o=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:o.palette.background.paper,padding:o.spacing(1),borderRadius:o.shape.borderRadius,boxShadow:o.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:o.palette.common.white}}})),T=({groupRef:o,hierarchyData:e,trackStatus:a,getColor:l,track:u})=>{const s=I(),g=R(),c=x(k),d=w(()=>{if(!e||!o)return null;const r={};if(a){const f=t=>{t.groupRef&&t.groupRef!==o&&(r[t.groupRef]=t),t.children&&t.children.forEach(f)};f(a)}const p=e[o];return p?S(p,r,l,c):null},[e,a,o,l,c]);if(!d)return null;const n=!a,m=g.palette.text.disabled,b=h(m);return C("div",{className:s.root,children:[i("div",{className:s.nivoContainer,children:i(L,{data:d,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:r=>n?m:r.data.color,childColor:{from:"color"},enableArcLabels:!0,arcLabel:r=>r.data.name,arcLabelsTextColor:r=>n?b:h(r.data.color||"#fff"),motionConfig:"default",isInteractive:!0,tooltip:()=>i(v,{}),arcLabelsSkipAngle:20})}),i(A,{isLoading:n,hierarchyData:e,track:u})]})};export{T as default};
|
|
2
|
+
//# sourceMappingURL=NivoSunburst.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as v,jsx as l,Fragment as R}from"react/jsx-runtime";import{useApi as S}from"@backstage/core-plugin-api";import{entityPresentationApiRef as T}from"@backstage/plugin-catalog-react";import{useTheme as w}from"@material-ui/core";import{makeStyles as I}from"@material-ui/core/styles";import{ResponsiveTreeMap as L}from"@nivo/treemap";import{useState as N,useMemo as j}from"react";import{getContrastTextColor as s}from"./colorContrast.esm.js";import{hierarchyToNivo as z}from"./hierarchyToNivo.esm.js";import P from"./LoadingOverlay.esm.js";const A=I(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),D=({groupRef:t,hierarchyData:r,trackStatus:a,getColor:p,onZoomChange:g,track:b})=>{const[C,k]=N(null),d=A(),x=w(),m=S(T),c=j(()=>{if(!r||!t)return null;const o={};if(a){const h=e=>{e.groupRef&&e.groupRef!==t&&(o[e.groupRef]=e),e.children&&e.children.forEach(h)};h(a)}const n=r[t];return n?z(n,o,p,m):null},[r,a,t,p,m]),y=o=>{const n=C===o.data.id?null:o.data.id;k(n),g?.(o.data.entityRef)};if(!c)return null;const i=!a,f=x.palette.text.disabled,u=s(f);return v("div",{className:d.root,children:[l("div",{className:d.nivoContainer,children:l(L,{data:c,label:o=>o.data.name,margin:{top:20,right:20,bottom:20,left:20},labelSkipSize:24,labelTextColor:o=>i?u:s(o.data.color||"#fff"),nodeOpacity:1,parentLabel:o=>o.data.name,parentLabelPosition:"top",parentLabelTextColor:o=>i?u:s(o.data.color||"#fff"),colors:o=>i?f:o.data.color,borderColor:{from:"color",modifiers:[["darker",1.25]]},isInteractive:!0,animate:!1,tooltip:()=>l(R,{}),onClick:y})}),l(P,{isLoading:i,hierarchyData:r,track:b})]})};export{D as default};
|
|
2
|
+
//# sourceMappingURL=NivoTreemap.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r,jsxs as f}from"react/jsx-runtime";import{useTheme as G,Grid as i,Typography as h}from"@material-ui/core";import{useState as u,useEffect as k}from"react";import{useSearchParams as b}from"react-router-dom";import{useGroupOptions as M}from"../../../hooks/groups/useGroupOptions.esm.js";import{toFilter as O}from"../../../utils/helpers.esm.js";import{getChartColors as j}from"../../Charts/chartUtils.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as L}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"@backstage/catalog-model";import"lodash";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"../../../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{getTechInsightsStyles as $}from"../styles.esm.js";import{parseTogglesString as B}from"../TechInsightsPage.esm.js";import{CheckStatusTile as H}from"../Tiles/CheckStatusTile.esm.js";import{FailingComponentsTable as P}from"./FailingComponentsTable.esm.js";import{MultiCheckStatusHistoryChart as V}from"./MultiCheckStatusHistoryChart.esm.js";import{getGroupName as W}from"./TeamComparison.esm.js";const q=({checksConnection:C})=>{const w=G(),s=$(),{options:S,isLoading:v,isError:x}=M(),[y]=b(),c=B(y.get("toggles")),{getSelectedFacetValues:d,facetFilters:m}=L(),[T,I]=u([]);k(()=>{I(m.Check)},[d,m]);const[l,N]=u([]);return k(()=>{N(m["Entity Owner"])},[d,m]),v?r(i,{item:!0,children:r(h,{variant:"h1",children:"Loading..."})},"checks"):x?r(i,{item:!0,children:r(h,{variant:"h3",children:"Error loading groups."})},"checks"):r(i,{item:!0,children:T?.map(t=>{const o=C?.edges.find(({node:e})=>e.id===t)?.node,g={id:o?.id??t,name:o?.name??t,description:o?.description??"None"},n=j(w),a=l??[],p=new Map;return a.forEach((e,E)=>{const F=n[E%n.length];p.set(e,F)}),f(i,{container:!0,spacing:2,direction:"row",children:[r(i,{item:!0,className:s.header,xs:12,children:f(h,{variant:"h4",children:["Check: ",o?.name??t]})}),c?.showGraphs&&r(i,{item:!0,className:`check-history-chart-${t}`,xs:12,children:r(V,{checkId:t,trackId:void 0,filters:l?.map(e=>O({owners:[e]})),states:void 0,colorMap:p})}),c?.showCards&&a.map(e=>r(i,{item:!0,className:s.gridItem,children:r(H,{existsWithinSoundcheck:!!o,titleOverride:`${W(e,S)}`,check:g,filter:e?{"relations.ownedBy":e}:void 0,color:p.get(e)??n[0]})},e)),c?.showTables&&r(i,{item:!0,className:s.gridItem,xs:12,children:r(P,{checkId:g.id,groupIds:a})},"failing-components-table")]})})},"checks")};export{q as CheckComparison};
|
|
2
|
+
//# sourceMappingURL=CheckComparison.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as n,jsxs as h}from"react/jsx-runtime";import{makeStyles as E,useTheme as O,Table as b,TableRow as g,Typography as L,TableContainer as w,Paper as x,TableHead as N,TableCell as l,TableSortLabel as B,TableBody as I,Box as R}from"@material-ui/core";import{useState as f}from"react";import{useCertificationStatuses as W}from"../../../hooks/aggregations/useCertificationStatuses.esm.js";import{useCheckStatusByGroups as F}from"../../../hooks/aggregations/useCheckStatusByGroups.esm.js";import{PassPercentageProgressbar as M}from"../../PassingPercentProgressbar/PassPercentageProgressbar.esm.js";const j=E(e=>({tableContainer:{width:"100%",minWidth:300,margin:"auto",marginTop:e.spacing(2),marginBottom:e.spacing(2),borderRadius:e.shape.borderRadius},headerCell:{color:e.palette.common.white,fontWeight:"bold",borderBottom:`2px solid ${e.palette.primary.dark}`},sortLabel:{color:e.palette.common.white,"&.MuiTableSortLabel-active":{color:e.palette.secondary.light},"& .MuiTableSortLabel-icon":{color:e.palette.common.white}},tableRow:{cursor:"default","&:hover":{backgroundColor:e.palette.action.hover,cursor:"default"}},progressCircle:{display:"flex",alignItems:"center",gap:e.spacing(1),minWidth:"fit-content"}})),z=[{id:"passingPercent",label:"Passing Percent"},{id:"group",label:"Group Name"},{id:"cumulativelyPassed",label:"Passing Entities"},{id:"numberOfEntities",label:"Owned Entities"}],P=(e,t,r)=>t[r]<e[r]?-1:t[r]>e[r]?1:0;function G(e,t){return e==="desc"?(r,a)=>P(r,a,t):(r,a)=>-P(r,a,t)}function H(e,t){const r=(e??[]).map((a,s)=>[a,s]);return r.sort((a,s)=>{const o=t(a[0],s[0]);return o!==0?o:a[1]-s[1]}),r.map(a=>a[0])}function A(e){return(e||[]).map(t=>{const r=t.group,a=t.certificationStatus,s=a.statusByLevel[a.statusByLevel.length-1];if(!s)return{group:r,numberOfEntities:a.numberOfEntities,cumulativelyPassed:0,passingPercent:0};const o=s.cumulativelyPassed,d=a.numberOfEntities,c=d?o/d*100:0;return{group:r,numberOfEntities:d,cumulativelyPassed:o,passingPercent:Number(c.toFixed(2))}})}function D(e){return(e||[]).map(t=>({group:t.group,numberOfEntities:t.checkStatus.numberOfEntities,cumulativelyPassed:t.checkStatus.passed,passingPercent:Number((t.checkStatus.numberOfEntities?t.checkStatus.passed/t.checkStatus.numberOfEntities*100:0).toFixed(2))}))}const K=({trackId:e,checkId:t,groupIds:r})=>{const a=O(),s=j(a),[o,d]=f("asc"),[c,y]=f("group"),k=i=>{d(c===i&&o==="asc"?"desc":"asc"),y(i)},{data:u,isLoading:v}=W({trackId:e??"-",groups:e?r:[]}),{data:m,isLoading:C}=F({checkId:t??"-",groupIds:t?r:[]});if(v||C)return n(b,{children:n(g,{children:n(L,{children:"Loading..."})})});let p=[];u&&u.length>0&&(p=A(u)),m&&m.length>0&&(p=D(m));const S=({passingPercent:i})=>n(l,{padding:"none",children:n(R,{className:s.progressCircle,children:n(M,{passPercentage:i})})});return n(w,{component:x,className:s.tableContainer,children:h(b,{size:"small",children:[n(N,{children:n(g,{children:z.map(i=>{const T=o==="desc"?"desc":"asc";return n(l,{className:s.headerCell,sortDirection:c===i.id?o:void 0,padding:"normal",children:n(B,{active:c===i.id,direction:c===i.id?T:"asc",onClick:Q=>k(i.id),className:s.sortLabel,children:i.label})},i.id)})})}),n(I,{children:H(p,G(o,c)).map(i=>h(g,{hover:!0,className:s.tableRow,children:[n(l,{children:n(S,{passingPercent:i.passingPercent})}),n(l,{children:i.group}),n(l,{children:i.cumulativelyPassed}),n(l,{children:i.numberOfEntities})]},i.group))})]})})};export{K as FailingComponentsTable};
|
|
2
|
+
//# sourceMappingURL=FailingComponentsTable.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,jsxs as p}from"react/jsx-runtime";import{useTheme as c,Typography as l}from"@material-ui/core";import{DateTime as k}from"luxon";import{ResponsiveContainer as h,LineChart as x,CartesianGrid as y,XAxis as u,YAxis as a,Tooltip as g,Line as f}from"recharts";import{compactNumberFormatter as b}from"../../../utils/formatters.esm.js";const L=({mergedHistory:n,colorMap:o,checkStatusHistories:s,max:d})=>{const t=c(),m={stroke:t.palette.background.paper,strokeWidth:1,r:5};return e(h,{height:250,debounce:1,children:p(x,{data:n??[],margin:{top:0,right:0,bottom:0,left:0},children:[e(y,{stroke:t.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),e(u,{dataKey:"date",tickFormatter:r=>k.fromISO(r).toFormat("MMM d"),tickLine:!1,axisLine:!1}),e(a,{yAxisId:"percentage",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:r=>`${r}%`,ticks:[0,25,50,75,100]}),e(a,{yAxisId:"count",orientation:"right",domain:[0,d],axisLine:!1,tickLine:!1,tickFormatter:r=>b(r)}),e(g,{contentStyle:{backgroundColor:t.palette.background.paper,color:t.palette.text.primary,border:`1px solid ${t.palette.divider}`},cursor:{stroke:t.palette.divider,strokeWidth:1}}),s?.map(r=>{if(r.filter){const i=r.filter["relations.ownedBy"][0];return e(f,{type:"monotone",dataKey:i,stroke:o?.get(i)??t.palette.primary.main,yAxisId:"count",strokeWidth:2,dot:!1,isAnimationActive:!1,activeDot:{fill:o?.get(i)??t.palette.primary.main,...m}})}return e(l,{children:e("span",{style:{color:t.palette.text.disabled},children:"No data available."})})})]})})};export{L as LineChartContainer};
|
|
2
|
+
//# sourceMappingURL=LineChartContainer.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{makeStyles as M,useTheme as b,Typography as l}from"@material-ui/core";import{useCheckStatusHistoriesMultiFilter as I}from"../../../hooks/aggregations/useCheckStatusHistoriesMultiFilter.esm.js";import{LoadingChart as L}from"../../Charts/LoadingChart.esm.js";import{LineChartContainer as S}from"./LineChartContainer.esm.js";const v=M({root:{height:250,width:"100%",position:"relative",borderRadius:"4px"}}),w=f=>{const c=b(),m=v(),{checkId:d,trackId:p,filters:u,states:y,colorMap:k}=f,g=u?.map(r=>({checkId:d,trackId:p,filter:r,states:y,numberOfDays:30}))??[],{data:o,isLoading:C,error:x}=I(g,!!d);if(C)return t(L,{type:"line",numLines:3});if(x)return t(l,{color:"error",children:t("span",{style:{color:c.palette.error.main},children:"Error loading check status history."})});if(!o||o.length===0)return t(l,{style:{color:c.palette.text.disabled},children:t("span",{children:"No data available for the selected filters."})});const i="passed",a=[];let s=0;for(const r of o)if(r)for(const e of r.history){const h=a.find(H=>H.date===e.date),n=r.filter?.["relations.ownedBy"]??"Unknown";n.concat(`.${i}`),s=Math.max(s,e[i]),h?h[n]=e[i]:a.push({date:e.date,[n]:e[i]})}return t("div",{className:m.root,children:t(l,{children:t(S,{checkStatusHistories:o,mergedHistory:a,colorMap:k,max:s})})})};export{w as MultiCheckStatusHistoryChart};
|
|
2
|
+
//# sourceMappingURL=MultiCheckStatusHistoryChart.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r,jsxs as y}from"react/jsx-runtime";import{useTheme as x,Typography as L}from"@material-ui/core";import{ResponsiveContainer as C,LineChart as b,CartesianGrid as v,XAxis as A,YAxis as h,Tooltip as I,Line as H}from"recharts";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"react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useTrack as T}from"../../../hooks/tracks/useTrack.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useCertificationStatusHistories as $}from"../../../hooks/aggregations/useCertificationStatusHistories.esm.js";import{compactNumberFormatter as E}from"../../../utils/formatters.esm.js";import{getChartColors as F}from"../../Charts/chartUtils.esm.js";import{LoadingChart as S}from"../../Charts/LoadingChart.esm.js";function W(a){const e=[];for(const[p,i]of a.entries()){const m=i.certificationStatusHistory.history,l=p.filter["relations.ownedBy"][0];for(const n of m){let s=e.find(d=>d.name===n.date);s||(e.push({name:n.date}),s=e[e.length-1]),s[`${l}`]=(n.statusByLevel[0].passed/i.certificationStatusHistory.numberOfEntities*100).toFixed(2)}}return e}const w=({trackId:a,filters:e,colorMap:p})=>{const i=x(),m=e?.map(t=>({trackId:a,filter:t,numberOfDays:30}))??[],{data:l,isLoading:n,error:s}=$(m,!!a),d=m.map(t=>t.filter["relations.ownedBy"][0]),{data:f,isLoading:u,isError:g}=T(a);if(n||u)return r(S,{type:"line",numLines:3});if(s||g||!l||!f)return r(L,{children:r("span",{style:{color:i.palette.error.main},children:"Error loading track status histories."})});const o=F(i),k=W(l);return r(C,{width:"100%",height:"100%",minHeight:250,children:y(b,{data:k,height:250,margin:{top:0,right:0,bottom:0,left:0},children:[r(v,{stroke:i.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),r(A,{dataKey:"name",tickLine:!1,axisLine:!1}),r(h,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:t=>`${t}%`,ticks:[0,25,50,75,100]}),r(h,{yAxisId:"right",orientation:"right",dataKey:"totalEntities",axisLine:!1,tickLine:!1,tickFormatter:t=>E(t)}),r(I,{contentStyle:{backgroundColor:i.palette.background.paper,color:i.palette.text.primary,border:`1px solid ${i.palette.divider}`},cursor:{stroke:i.palette.divider,strokeWidth:1}}),d.map((t,c)=>r(H,{type:"monotone",dataKey:t,name:`Group: ${t.replace("group:default/","")} - Checks Passing %`,yAxisId:"left",stroke:p?.get(t)??o[c%o.length],strokeWidth:2,dot:!1,fill:p?.get(t)??o[c%o.length],isAnimationActive:!1,activeDot:{fill:o[c%o.length],stroke:i.palette.background.paper,strokeWidth:1,r:5}},`Group:${t} - Checks Passing %`))]})})};export{w as MultiTrackHistoryChart};
|
|
2
|
+
//# sourceMappingURL=MultiTrackHistoryChart.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r,jsxs as d}from"react/jsx-runtime";import{Box as n,Typography as l,Grid as u}from"@material-ui/core";import{useMemo as h}from"react";import{useSearchParams as k}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import{useGetChecks as C}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as N}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{Facet as f}from"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as T}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{getTechInsightsStyles as w}from"../styles.esm.js";import{parseTogglesString as x}from"../TechInsightsPage.esm.js";import{CheckComparison as y}from"./CheckComparison.esm.js";import{TrackComparison as G}from"./TrackComparison.esm.js";const S=(o,a)=>{const e=a.find(c=>c.ref===o);return e?e.name:o},b=()=>{const o=w(),[a]=k(),{data:e,isLoading:c}=N({}),{data:g}=C({}),{getSelectedFacetValues:t}=T(),i=h(()=>t(f.Track),[t]),s=h(()=>t(f.Check),[t]),m=h(()=>t(f.EntityOwner),[t]);if(c)return r(n,{className:o.content,children:r(l,{variant:"h1",children:"Loading..."})});if(!m||m.length===0||(!s||s.length===0)&&(!i||i.length===0))return r(n,{className:o.info,children:r(l,{className:o.info,children:"Select both a set of groups and some checks/tracks to see comparisons."})});const p=x(a.get("toggles"));return!p.showGraphs&&!p.showCards&&!p.showTables?r(n,{className:o.info,children:r(l,{className:o.info,children:"No graphs, cards or tables selected. Please select at least one from the 'Display' selection on the left."})}):r(n,{className:o.content,children:d(u,{container:!0,direction:"row",spacing:2,children:[s&&s.length>0&&g&&m&&r(y,{checksConnection:g}),i&&i.length>0&&e&&m&&r(G,{tracksConnection:e})]})})};export{b as TeamComparison,S as getGroupName};
|
|
2
|
+
//# sourceMappingURL=TeamComparison.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r,jsxs as g}from"react/jsx-runtime";import{useTheme as N,Grid as i,Typography as l}from"@material-ui/core";import{useState as f,useEffect as u}from"react";import{useSearchParams as G}from"react-router-dom";import{useGroupOptions as M}from"../../../hooks/groups/useGroupOptions.esm.js";import{toFilter as O}from"../../../utils/helpers.esm.js";import{getChartColors as j}from"../../Charts/chartUtils.esm.js";import"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as L}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"@backstage/catalog-model";import"lodash";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"../../../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{getTechInsightsStyles as R}from"../styles.esm.js";import{parseTogglesString as U}from"../TechInsightsPage.esm.js";import{TrackStatusTile as W}from"../Tiles/TrackStatusTile.esm.js";import{FailingComponentsTable as B}from"./FailingComponentsTable.esm.js";import{MultiTrackHistoryChart as H}from"./MultiTrackHistoryChart.esm.js";import{getGroupName as P}from"./TeamComparison.esm.js";const V=({tracksConnection:k})=>{const w=N(),n=R(),{options:T,isLoading:y,isError:E}=M(),[C]=G(),a=U(C.get("toggles")),{getSelectedFacetValues:d,facetFilters:m}=L(),[v,x]=f([]);u(()=>{x(m.Track)},[d,m]);const[h,S]=f([]);return u(()=>{S(m["Entity Owner"])},[d,m]),y?r(i,{item:!0,children:r(l,{variant:"h1",children:"Loading..."})},"tracks"):E?r(i,{item:!0,children:r(l,{variant:"h3",children:"Error loading groups."})},"tracks"):r(i,{item:!0,children:v?.map(o=>{const e=k?.edges.find(({node:t})=>t.id===o)?.node,b={id:e?.id??o,name:e?.name??o,description:e?.description??"None",isEditable:e?.isEditable??!1,levels:e?.levels??[],ownerEntityRef:e?.ownerEntityRef??"Unknown",type:e?.type??"Unknown"},s=j(w),p=h??[],c=new Map;return p.forEach((t,F)=>{const I=s[F%s.length];c.set(t,I)}),g(i,{container:!0,spacing:2,direction:"row",children:[r(i,{item:!0,className:n.header,xs:12,children:g(l,{variant:"h4",children:["Track: ",e?.name??o]})}),a?.showGraphs&&r(i,{item:!0,className:n.content,xs:12,children:r(H,{trackId:o,filters:h?.map(t=>O({owners:[t]})),colorMap:c})}),a?.showCards&&p.map(t=>r(i,{item:!0,className:n.gridItem,style:{minWidth:200},children:r(W,{existsWithinSoundcheck:!!e,titleOverride:`${P(t,T)}`,track:b,filter:t?{"relations.ownedBy":t}:void 0,color:c.get(t)??s[0]})},t)),a?.showTables&&r(i,{item:!0,className:n.gridItem,xs:12,children:r(B,{trackId:o,groupIds:p})},"failing-components-table")]})})},"tracks")};export{V as TrackComparison};
|
|
2
|
+
//# sourceMappingURL=TrackComparison.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as l,jsx as t}from"react/jsx-runtime";import{useApi as b}from"@backstage/core-plugin-api";import{entityPresentationApiRef as u}from"@backstage/plugin-catalog-react";import{Box as r,Typography as c,Chip as w}from"@material-ui/core";import{useTheme as k}from"@material-ui/core/styles";import{rgb as C}from"d3-color";import{getContrastTextColor as d}from"./colorContrast.esm.js";const v=({teamName:m,passPercentage:a,getColor:h,entityRef:i,onClick:e})=>{const s=k(),y=b(u),n=h(a),f=d(s.palette.background.paper),p=C(n);p.opacity=.4;const x=p.toString(),o=y.forEntity(i);return l(r,{display:"flex",alignItems:"center",justifyContent:"space-between",bgcolor:s.palette.background.paper,borderRadius:8,px:2,py:1,mb:0,boxShadow:0,width:"100%",style:{color:f,border:`1px solid ${n}`,boxShadow:`0 0 12px 2px ${x}`,cursor:e?"pointer":void 0,transition:"box-shadow 0.2s"},onClick:e?()=>e(i):void 0,onKeyPress:e?g=>{g.key==="Enter"&&e(i)}:void 0,tabIndex:e?0:-1,children:[l(r,{flex:1,minWidth:0,children:[l(r,{display:"flex",alignItems:"center",style:{gap:s.spacing(1)},children:[o?.snapshot.Icon&&t(r,{component:"span",style:{display:"flex",alignItems:"center"},children:t(o.snapshot.Icon,{})}),t(c,{variant:"subtitle1",style:{fontWeight:600},children:o?.snapshot.primaryTitle||m})]}),o?.snapshot.secondaryTitle&&t(c,{variant:"caption",color:"textSecondary",style:{display:"block",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},children:o.snapshot.secondaryTitle})]}),t(r,{ml:2,style:{flexShrink:0},children:t(w,{label:`${a}%`,style:{background:n,color:d(n),fontWeight:600,minWidth:48,textAlign:"center",fontSize:12,height:28},size:"small"})})]})};export{v as TeamPerformanceCard};
|
|
2
|
+
//# sourceMappingURL=TeamPerformanceCard.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as m,jsx as a}from"react/jsx-runtime";import{makeStyles as p,Paper as g,Typography as d,Box as n}from"@material-ui/core";import{TeamPerformanceCard as f}from"./TeamPerformanceCard.esm.js";const y=p(e=>({root:{borderRadius:16,background:"inherit",padding:e.spacing(2.5),height:"100%",display:"flex",flexDirection:"column"},title:{fontWeight:600,marginBottom:e.spacing(1.5)},content:{display:"flex",flexDirection:"column",gap:e.spacing(1.5),flex:1},row:{display:"flex",alignItems:"center"}})),h=({title:e,titleColor:i,teams:r,getColor:l,onTeamClick:s,emptyMessage:c})=>{const o=y();return m(g,{elevation:3,className:o.root,children:[a(d,{variant:"h6",className:o.title,style:{color:i},children:e}),a(n,{className:o.content,children:r.length===0?a(n,{color:"text.secondary",display:"flex",alignItems:"center",justifyContent:"center",width:"100%",children:c}):r.map(t=>a(f,{teamName:t.teamName,passPercentage:t.passPercentage,getColor:l,entityRef:t.groupRef,onClick:s},t.groupRef))})]})};export{h as TeamPerformanceListCard};
|
|
2
|
+
//# sourceMappingURL=TeamPerformanceListCard.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as m}from"react/jsx-runtime";import{useApi as h,configApiRef as S}from"@backstage/core-plugin-api";import{FormControl as b,TextField as L}from"@material-ui/core";import v from"@material-ui/lab/Autocomplete";import{useMemo as w,useEffect as y}from"react";import{useSearchParams as k}from"react-router-dom";import C from"react-use/lib/useLocalStorage";import{useGroupOptions as G}from"../../hooks/groups/useGroupOptions.esm.js";const P=({margin:d,onChange:c})=>{const{options:r,isLoading:o}=G(),[p,s]=k(),[a,l]=C("soundcheck.overview.groupRef",null),t=p.get("group"),u=h(S).getOptionalString("soundcheck.overview.defaultSelectedGroupType"),n=w(()=>{if(!o&&r.length){if(t||a){const e=t??a;return r.find(f=>f.ref===e)??r[0]}else if(u)return r.find(e=>e.type===u)??r[0];return r[0]}return null},[u,o,r,t,a]);return y(()=>{if(!o&&r.length&&!t&&n){const e=new URLSearchParams(p.toString());e.set("group",n.ref),s(e,{replace:!0}),l(n.ref),c?.(n.ref)}},[o,r,t,n,p,s,l]),m(b,{style:{minWidth:200},children:m(v,{disableClearable:!0,options:r??[],loading:o,value:n,getOptionLabel:e=>e.name,groupBy:e=>e.key,onChange:(e,f)=>{const i=f?.ref;if(i&&t!==i){const g=new URLSearchParams(p.toString());g.set("group",i),s(g),l(i),c?.(i)}},renderInput:e=>m(L,{...e,label:"Group",InputLabelProps:{shrink:!0},placeholder:o?"Loading":"Select a group",margin:d})})})};export{P as TechInsightsGroupSelector};
|
|
2
|
+
//# sourceMappingURL=TechInsightsGroupSelector.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t,jsxs as p}from"react/jsx-runtime";import{Grid as i,Typography as u}from"@material-ui/core";import{useState as T,useEffect as V}from"react";import{useSearchParams as b}from"react-router-dom";import C from"react-use/lib/useLocalStorage";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import{FilterProvider as S}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"@backstage/catalog-model";import"lodash";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"../../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{getTechInsightsStyles as a}from"./styles.esm.js";import{TeamComparison as y}from"./TeamComparison/TeamComparison.esm.js";import{TechInsightsSidebar as x}from"./TechInsightsSidebar.esm.js";import{TechInsightsViewSelector as G}from"./TechInsightsViewSelector.esm.js";import{TrackCardGridBox as v}from"./TrackCardGridBox.esm.js";const I=({selectedView:e})=>{switch(e){case"Comparison":return t(y,{});default:return t(v,{})}},P=({selectedView:e,setSelectedView:r})=>{const o=a();return p(i,{item:!0,className:o.sidebar,style:{paddingBottom:4},children:[t(u,{variant:"body1",style:{marginBottom:4,fontWeight:"bold"},children:"Choose a view to explore:"}),t(G,{selectedView:e,setSelectedView:r})]})},h=e=>`${e.showCards},${e.showGraphs},${e.showTables}`,l=e=>{if(e)try{const[r,o,s]=e.split(",").map(n=>n==="true");return{showCards:r,showGraphs:o,showTables:s}}catch{}return{showCards:!0,showGraphs:!0,showTables:!0}},j=()=>{const e=a(),[r,o]=b(),[s,n]=C("soundcheck.techInsights.selectedView",void 0),[c,d]=T(()=>{const m=r.get("toggles");return l(m)||{showGraphs:!0,showCards:!0,showTables:!0}}),w=(m,g)=>{d(f=>({...f,[m]:g}))};return V(()=>{const m={...Object.fromEntries(r.entries()),toggles:h(c)};o(m)},[r,o,c]),t(S,{children:t(i,{container:!0,direction:"column",className:e.root,children:t(i,{item:!0,children:p(i,{container:!0,direction:"row",wrap:"nowrap",children:[p(i,{item:!0,style:{width:280,minWidth:280},children:[t(P,{selectedView:s,setSelectedView:n}),t(x,{selectedView:s,toggles:c,onToggleChange:w})]}),t(i,{item:!0,xs:!0,style:{overflow:"auto"},children:t(I,{selectedView:s})})]})})})})};export{j as TechInsightsPage,l as parseTogglesString,h as togglesToString};
|
|
2
|
+
//# sourceMappingURL=TechInsightsPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as s,jsx as r,Fragment as ee}from"react/jsx-runtime";import{useRouteRef as re,useApi as te,configApiRef as ie}from"@backstage/core-plugin-api";import{useTheme as ae,Box as a,FormControl as T,InputLabel as B,Select as N,MenuItem as h,Tabs as le,Tab as A}from"@material-ui/core";import{makeStyles as ne}from"@material-ui/core/styles";import{sequentialColorInterpolators as u}from"@nivo/colors";import{useState as D,useMemo as oe,useEffect as U}from"react";import{useSearchParams as se,useNavigate as ce}from"react-router-dom";import me from"react-use/lib/useLocalStorage";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{useGetAllTracks as ue}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGroupOptions as de}from"../../hooks/groups/useGroupOptions.esm.js";import{useHierarchicalTrackStatus as pe}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as he}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{trackDetailsRouteRef as fe}from"../../routes.esm.js";import{getPercentageColor as ge}from"../../utils/colors.esm.js";import{TrackEntitiesTable as ve}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import xe from"./ColorLegend.esm.js";import ye from"./LowestPerformingTeams.esm.js";import Ce from"./NivoCirclePacking.esm.js";import be from"./NivoIcicle.esm.js";import ke from"./NivoSunburst.esm.js";import E from"./NivoTreemap.esm.js";import{TechInsightsGroupSelector as Se}from"./TechInsightsGroupSelector.esm.js";import we from"./TopPerformingTeams.esm.js";const _=ne(t=>({root:{display:"flex",flexDirection:"column",height:"100%",padding:t.spacing(2)},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0},controlsContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:t.spacing(2)},leftControls:{display:"flex",gap:t.spacing(2),alignItems:"center"},rightControls:{display:"flex",gap:t.spacing(2),alignItems:"center"},visualizationContainer:{flex:1,minHeight:400,display:"flex",flexDirection:"column",gap:t.spacing(2),width:"100%"},visualizationHeader:{display:"flex",justifyContent:"flex-end",alignItems:"center",marginBottom:t.spacing(2)},visualizationBox:{flex:1,minHeight:500},visualizationWrapper:{display:"flex",flexDirection:"row",height:"calc(100% - 56px)"},colorLegendContainer:{marginLeft:t.spacing(2),display:"flex",alignItems:"center"},summaryContainer:{display:"flex",flexDirection:"row",width:"100%",minHeight:300,padding:24},summaryBox:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},summaryBoxLeft:{marginRight:t.spacing(1)},summaryBoxRight:{marginLeft:t.spacing(1)},entitiesContainer:{padding:24}}));function V({interpolator:t,width:f=100,height:l=16,steps:o=40,style:d={}}){const n=`linear-gradient(to right, ${Array.from({length:o},(S,c)=>{const x=c/(o-1);return t(x)}).join(",")})`;return r(a,{style:{width:f,height:l,background:n,borderRadius:4,...d}})}function F(t){const{children:f,value:l,index:o,...d}=t,n=_();return r("div",{role:"tabpanel",hidden:l!==o,id:`tabpanel-${o}`,"aria-labelledby":`tab-${o}`,className:n.mainContent,...d,children:l===o&&f})}const Ie=()=>{const t=_(),f=ae(),[l,o]=se(),d=l.get("track")||"",[n,S]=D(d),c=l.get("group"),[x,L]=D(null),[w,O]=D(0),Z=ce(),q=re(fe),{options:m,isLoading:y}=de(),[I,z]=me("soundcheck.overview.groupRef",null),g=c,R=te(ie).getOptionalString("soundcheck.overview.defaultSelectedGroupType"),C=oe(()=>{if(!y&&m.length){if(g||I){const e=g??I;return m.find(i=>i.ref===e)??m[0]}else if(R)return m.find(e=>e.type===R)??m[0];return m[0]}return null},[R,y,m,g,I]);U(()=>{if(!y&&m.length&&!g&&C){const e=new URLSearchParams(l.toString());e.set("group",C.ref),o(e,{replace:!0}),z(C.ref)}},[y,m,g,C,l,o,z]);const P=l.get("visualization")||"treemap",G=l.get("colors")||"default",{data:W}=ue({}),{data:M}=he(c||void 0,{enabled:!!c}),{data:v}=pe({trackId:n,groupRef:c||"",skip:!n||!c}),b=W?.edges.find(e=>e.node.id===n)?.node,J=e=>{const i=e.target.value;S(i);const p=new URLSearchParams(l.toString());p.set("track",i),c&&p.delete("group"),o(p)};U(()=>{n!==d&&S(d)},[d]);const K=e=>{const i=e.target.value;if(i!==null){const p=new URLSearchParams(l.toString());p.set("visualization",i),o(p),L(null)}},Q=e=>{const i=new URLSearchParams(l.toString());i.set("colors",e.target.value),o(i)},X=(e,i)=>{O(i)},H=e=>{if(!n)return;const i=q({trackId:n});Z(`${i}?owners=${encodeURIComponent(e)}`,{replace:!0})},$=[{label:"Default",value:"default",interpolator:e=>ge(f,e*100)},{label:"Viridis",value:"viridis",interpolator:u.viridis},{label:"Inferno",value:"inferno",interpolator:u.inferno},{label:"Plasma",value:"plasma",interpolator:u.plasma},{label:"Cividis",value:"cividis",interpolator:u.cividis},{label:"Warm",value:"warm",interpolator:u.warm},{label:"Cool",value:"cool",interpolator:u.cool},{label:"Cubehelix Default",value:"cubehelix_default",interpolator:u.cubehelixDefault},{label:"Blue Green",value:"blue_green",interpolator:u.blue_green},{label:"Blue Purple",value:"blue_purple",interpolator:u.blue_purple}],j=$.find(e=>e.value===G)?.interpolator??(e=>"#ccc"),k=e=>j(e/100),Y=()=>{if(!c||!n||!b)return null;const e={trackId:n,groupRef:c,track:b,hierarchyData:M,trackStatus:v,getColor:k,onZoomChange:L};switch(P){case"treemap":return r(E,{...e});case"icicle":return r(be,{...e});case"sunburst":return r(ke,{...e});case"circlepack":return r(Ce,{...e});default:return r(E,{...e})}};return s(a,{className:t.root,children:[s(a,{className:t.controlsContainer,children:[s(a,{className:t.leftControls,children:[r(Se,{margin:"dense"}),s(T,{style:{minWidth:200},children:[r(B,{id:"track-label",shrink:!0,children:"Track"}),r(N,{labelId:"track-label",value:n,onChange:J,label:"Track",children:W?.edges.map(e=>r(h,{value:e.node.id,children:e.node.name},e.node.id))})]})]}),s(a,{className:t.rightControls,children:[s(T,{style:{minWidth:120},children:[r(B,{children:"Visualization"}),s(N,{value:P,onChange:K,displayEmpty:!0,children:[r(h,{value:"treemap",children:"Treemap"}),r(h,{value:"icicle",children:"Icicle"}),r(h,{value:"sunburst",children:"Sunburst"}),r(h,{value:"circlepack",children:"Circle Pack"})]})]}),s(T,{style:{minWidth:80},children:[r(B,{children:"Color Scheme"}),r(N,{value:G,onChange:Q,renderValue:e=>{const i=$.find(p=>p.value===e)?.interpolator;return r(a,{display:"flex",alignItems:"center",pr:3,children:typeof i=="function"&&r(V,{interpolator:i,width:90,height:20})})},children:$.map(e=>r(h,{value:e.value,children:r(a,{display:"flex",alignItems:"center",children:e.interpolator&&r(V,{interpolator:e.interpolator,width:90,height:20})})},e.value))})]})]})]}),r(a,{className:t.mainContent,children:n&&c&&s(ee,{children:[r(a,{className:t.visualizationContainer,children:s(a,{className:t.visualizationWrapper,children:[r(a,{className:t.visualizationBox,children:Y()}),r(a,{className:t.colorLegendContainer,children:r(xe,{interpolator:j})})]})}),s(a,{style:{width:"100%"},children:[s(le,{value:w,onChange:X,indicatorColor:"primary",textColor:"primary",children:[r(A,{label:"Summary"}),r(A,{label:"Entities"})]}),r(F,{value:w,index:0,children:s(a,{className:t.summaryContainer,children:[r(a,{className:`${t.summaryBox} ${t.summaryBoxLeft}`,children:v&&r(ye,{trackStatus:v,getColor:k,onTeamClick:H})}),r(a,{className:`${t.summaryBox} ${t.summaryBoxRight}`,children:v&&r(we,{trackStatus:v,getColor:k,onTeamClick:H})})]})}),r(F,{value:w,index:1,children:r(a,{className:t.entitiesContainer,children:b&&r(ve,{track:b,initialPageSize:10,owners:x?[x]:[c],getColor:k})})})]})]})})]})};export{Ie as TechInsightsPage2};
|
|
2
|
+
//# sourceMappingURL=TechInsightsPage2.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as i,Fragment as n,jsx as o}from"react/jsx-runtime";import{Divider as t,Box as h,Typography as d,FormControlLabel as s,Switch as m}from"@material-ui/core";import{Facet as l}from"../TechHealth/Filters/types.esm.js";import{FacetFilter as p}from"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"lodash";import"react";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"../../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"react-router-dom";import g from"./hierarchy/Hierarchy.esm.js";import C from"./persistence/FavoriteViews.esm.js";import{getTechInsightsStyles as w}from"./styles.esm.js";const T=({toggles:e,onToggleChange:a})=>i("div",{children:[o(d,{variant:"subtitle2",children:"Display"}),i("div",{children:[o(s,{control:o(m,{checked:e?.showCards,onChange:()=>a?.("showCards",!e?.showCards)}),label:"Cards"}),o(s,{control:o(m,{checked:e?.showGraphs,onChange:()=>a?.("showGraphs",!e?.showGraphs)}),label:"Graphs"}),o(s,{control:o(m,{checked:e.showTables,onChange:()=>a("showTables",!e.showTables)}),label:"Tables"})]})]}),b=({selectedView:e,toggles:a,onToggleChange:c})=>{const r=w();return i("div",{className:r.sidebar,style:{paddingTop:4},children:[e==="Comparison"&&i(n,{children:[o(t,{className:r.divider}),o(C,{onToggleChange:c})]}),i(h,{children:[o(t,{className:r.divider}),o(p,{facet:l.EntityOwner}),o(t,{className:r.divider}),o(g,{}),o(t,{className:r.divider})]}),e==="Comparison"&&i(n,{children:[o(p,{facet:l.Check}),o(t,{className:r.divider})]}),o(p,{facet:l.Track}),o(t,{className:r.divider}),e==="Comparison"&&o(T,{selectedView:e,toggles:a,onToggleChange:c})]})};export{b as TechInsightsSidebar};
|
|
2
|
+
//# sourceMappingURL=TechInsightsSidebar.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{makeStyles as m,alpha as p,FormControl as u,Select as g,MenuItem as f}from"@material-ui/core";import{useSearchParams as C}from"react-router-dom";const S=m(o=>({root:{width:"100%",minWidth:250},textField:{"& $notchedOutline":{borderColor:p(o.page.fontColor,.25)},"&:hover $notchedOutline":{borderColor:o.page.fontColor}},input:{backgroundColor:"transparent",color:o.page.fontColor},clearIndicator:{color:o.page.fontColor},popupIndicator:{color:o.page.fontColor},notchedOutline:{}}),{name:"SoundcheckTechInsightsViewSelector"}),b=({margin:o,baseClass:l,selectedView:n,setSelectedView:a})=>{const c=S(),[i,s]=C(),d=["Tracks","Comparison"];function h(e){if(e&&e!==n){a(e);const r={...Object.fromEntries(i.entries()),view:e};s(r)}}return t(u,{style:{margin:o},fullWidth:!0,children:t(g,{labelId:"view-selector-label",value:n||"",onChange:e=>{const r=e.target.value;h(r)},className:`${c.select} ${l}`,margin:"dense",children:d.map(e=>t(f,{value:e,children:e},e))})})};export{b as TechInsightsViewSelector};
|
|
2
|
+
//# sourceMappingURL=TechInsightsViewSelector.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as o,jsx as e}from"react/jsx-runtime";import{useRouteRef as R}from"@backstage/core-plugin-api";import{useTheme as T,Paper as b,Typography as a,Tooltip as w,Box as i,Grid as I}from"@material-ui/core";import P from"lodash";import{useCallback as j}from"react";import{useNavigate as B,useSearchParams as F}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"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as G}from"../../../hooks/aggregations/useCheckStatus.esm.js";import{checkDetailsRouteRef as L}from"../../../routes.esm.js";import{CategoryBar as $}from"../../CategoryBar/CategoryBar.esm.js";import{LoadingIndicator as D}from"../../LoadingIndicator/LoadingIndicator.esm.js";import{parseTogglesString as M}from"../TechInsightsPage.esm.js";import{useStyles as O,getPercentageColor as U,formatValue as E,StatusItem as h,ColorSwatch as H}from"./TileUtils.esm.js";const V=({check:l,existsWithinSoundcheck:s,filter:k,titleOverride:x,color:g})=>{const t=T(),u=B(),f=R(L),[d]=F(),S=M(d.get("toggles")).showGraphs,{data:r,isLoading:N}=G({checkId:l.id,filter:k},!0),n=r?.numberOfEntities??0,y=r?.passed?r.passed/n*100:0,c=O(),v=j(()=>{s&&u(`${f({checkId:l.id})}?${d.toString()}`)},[s,u,f,l.id,d]),C=x??l.name;return N?o(b,{className:c.card,onClick:v,children:[e(a,{variant:"h6",children:C}),e(D,{})]}):e(w,{title:e(a,{children:"Cannot navigate to check details page: this check exists only in results, and is not present in any yaml files nor configured via the NCUI."}),disableHoverListener:s,children:o(b,{className:c.card,onClick:v,children:[e(a,{variant:"h6",children:C}),r?e(i,{className:c.content,children:o(i,{width:"100%",children:[o(i,{mb:2,children:[e(a,{variant:"caption",color:"textSecondary",display:"block",align:"left",children:"Current"}),o(a,{variant:"h1",style:{color:U(t,Math.floor(y))},children:[Math.floor(y),"%"]})]}),e(a,{variant:"caption",color:"textSecondary",display:"block",align:"left",children:"Check Summary"}),e(i,{className:c.categoryBarContainer,children:e($,{data:P.map(status,(m,p)=>({category:p,value:m})),valueFormatter:E,categories:["passed","failed","notReported"],categoryFormatter:m=>m.replace(/\b\w/g,p=>p.toUpperCase()),colors:[t.palette.success.main,t.palette.error.main,t.palette.text.disabled]})}),o(I,{container:!0,spacing:0,children:[e(h,{label:"Passing",value:r?.passed??0,total:n,color:t.palette.success.main}),e(h,{label:"Failing",value:r?.failed??0,total:n,color:t.palette.error.main}),e(h,{label:"Not Reported",value:r?.notReported??0,total:n,color:t.palette.text.disabled})]})]})}):e(i,{margin:"auto",children:e(a,{variant:"body2",children:"No Data"})}),e(i,{width:"100%",height:"100%",display:"flex",justifyContent:"center",alignItems:"flex-end",style:{paddingTop:"1.5rem"},children:g&&S&&e(H,{color:g,style:{width:"80%",height:"1.5rem",borderRadius:4,border:"1px solid #ccc"}})})]})})};export{V as CheckStatusTile};
|
|
2
|
+
//# sourceMappingURL=CheckStatusTile.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as a,jsx as i}from"react/jsx-runtime";import{Grid as d,Box as g,Typography as l}from"@material-ui/core";import{makeStyles as p}from"@material-ui/core/styles";import{interpolateRgb as m}from"d3-interpolate";import{scaleLinear as h}from"d3-scale";const s=p(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,height:"100%",padding:e.spacing(2),cursor:"pointer","&:hover":{backgroundColor:e.palette.action.hover}},content:{display:"flex"},item:{display:"flex",justifyContent:"space-between",alignItems:"center"},legendDash:{width:e.spacing(2),height:e.spacing(1),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:e.spacing(2)},categoryBarContainer:{width:"100%",height:e.spacing(1),marginBottom:e.spacing(1)}})),y=({color:e})=>a("div",{style:{display:"flex",alignItems:"center",marginBottom:4},children:[i("span",{style:{fontSize:12,marginRight:4},children:"Graph Color:"}),i("span",{style:{display:"inline-block",width:14,height:14,backgroundColor:e,borderRadius:3,border:"1px solid #ccc"}})]}),r=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toString(),f=({label:e,value:t,total:o,color:c})=>{const n=s();return a(d,{item:!0,xs:12,className:n.item,children:[a(g,{className:n.category,children:[i("span",{className:n.legendDash,style:{backgroundColor:c}}),i(l,{variant:"body2",children:e})]}),o&&a(l,{variant:"body2",children:[r(t)," of ",r(o)," (",Math.round(t/o*100),"%)"]})]})},x=(e,t)=>h().domain([0,50,100]).range([e.palette.error.main,e.palette.warning.main,e.palette.success.main]).interpolate(m.gamma(2.2))(t);export{y as ColorSwatch,f as StatusItem,r as formatValue,x as getPercentageColor,s as useStyles};
|
|
2
|
+
//# sourceMappingURL=TileUtils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as l,jsx as e}from"react/jsx-runtime";import{useRouteRef as v}from"@backstage/core-plugin-api";import{useTheme as T,Paper as x,Typography as r,Tooltip as D,Box as i,Grid as $}from"@material-ui/core";import{useCallback as B}from"react";import{useSearchParams as L}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"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as P}from"../../../hooks/aggregations/useCertificationStatus.esm.js";import{trackDetailsRouteRef as j,campaignDetailsRouteRef as F}from"../../../routes.esm.js";import{CategoryBar as G}from"../../CategoryBar/CategoryBar.esm.js";import{LoadingIndicator as M}from"../../LoadingIndicator/LoadingIndicator.esm.js";import{parseTogglesString as O}from"../TechInsightsPage.esm.js";import{useStyles as U,getPercentageColor as _,formatValue as E,StatusItem as h,ColorSwatch as H}from"./TileUtils.esm.js";const V=({track:n,existsWithinSoundcheck:p,filter:N,titleOverride:C,color:f,campaignId:m})=>{const a=T(),g=v(j),u=v(F),[s]=L(),S=O(s.get("toggles")).showGraphs,{data:y,isLoading:w}=P({trackId:n.id,filter:N},!0),t=y?.certificationStatus.statusByLevel[0],c=y?.certificationStatus.numberOfEntities??0,o=t?t.passed/c*100:0,d=U(),b=B(()=>{m?window.open(`${u({campaignId:m})}?${s.toString()}`,"_blank"):p&&window.open(`${g({trackId:n.id})}?${s.toString()}`,"_blank")},[m,p,g,n.id,s,u]),k=C??n.name;return w?l(x,{className:d.card,onClick:b,children:[e(r,{variant:"h6",children:k}),e(M,{})]}):e(D,{title:e(r,{children:"Cannot navigate to track details page: this track exists only in results, and is not present in any yaml files nor configured via the NCUI."}),disableHoverListener:p,children:l(x,{className:d.card,onClick:b,children:[e(i,{display:"flex",flexDirection:"column",alignItems:"flex-start",mb:1,children:e(r,{variant:"h6",children:k})}),!t||isNaN(o)?e(i,{margin:"auto",children:e(r,{variant:"body2",children:"No Data"})}):e(i,{className:d.content,children:l(i,{width:"100%",children:[l(i,{mb:2,children:[e(r,{variant:"caption",color:"textSecondary",display:"block",align:"left",children:"Current"}),l(r,{variant:"h1",style:{color:_(a,Math.floor(o))},children:[!isNaN(o)&&`${Math.floor(o)}%`,isNaN(o)&&"No Data"]})]}),e(r,{variant:"caption",color:"textSecondary",display:"block",align:"left",children:"Check Summary"}),e(i,{className:d.categoryBarContainer,children:e(G,{data:t,valueFormatter:E,categories:["passed","failed","notReported"],categoryFormatter:R=>R.replace(/\b\w/g,I=>I.toUpperCase()),colors:[a.palette.success.main,a.palette.error.main,a.palette.text.disabled]})}),l($,{container:!0,spacing:0,children:[e(h,{label:"Passing",value:t.passed,total:c,color:a.palette.success.main}),e(h,{label:"Failing",value:t.failed,total:c,color:a.palette.error.main}),e(h,{label:"Not Reported",value:t.notReported,total:c,color:a.palette.text.disabled})]})]})}),t&&!isNaN(o)&&e(i,{width:"100%",height:"100%",display:"flex",justifyContent:"center",alignItems:"flex-end",style:{paddingTop:"1.5rem"},children:f&&S&&e(H,{color:f,style:{width:"80%",height:"1.5rem",borderRadius:4,border:"1px solid #ccc"}})})]})})};export{V as TrackStatusTile};
|
|
2
|
+
//# sourceMappingURL=TrackStatusTile.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import{useApi as p}from"@backstage/core-plugin-api";import{entityPresentationApiRef as u}from"@backstage/plugin-catalog-react";import{useTheme as c}from"@material-ui/core";import{TeamPerformanceListCard as f}from"./TeamPerformanceListCard.esm.js";const g=({trackStatus:e,getColor:s,limit:a=3,onTeamClick:r})=>{const o=c(),i=p(u),m=(e.children||[]).filter(t=>t.status.passed+t.status.failed+t.status.warning+t.status.error+t.status.notReported>0&&(t.status.allPassPercentage??0)>80).sort((t,n)=>(n.status.allPassPercentage??0)-(t.status.allPassPercentage??0)).slice(0,a).map(t=>({groupRef:t.groupRef,teamName:i.forEntity(t.groupRef).snapshot.primaryTitle,passPercentage:t.status.allPassPercentage??0}));return l(f,{title:"Top Performing Teams",titleColor:o.palette.success.main,teams:m,getColor:s,onTeamClick:r,emptyMessage:"No teams have reached the 80% mark yet, keep pushing!"})};export{g as default};
|
|
2
|
+
//# sourceMappingURL=TopPerformingTeams.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as g,jsx as i}from"react/jsx-runtime";import{Typography as h,Grid as r}from"@material-ui/core";import{Skeleton as C}from"@material-ui/lab";import{useMemo as T}from"react";import{useSearchParams as G}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as I}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as v}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{GroupSelector as b}from"../GroupSelector/GroupSelector.esm.js";import{Facet as w}from"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as L}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{getTechInsightsStyles as S}from"./styles.esm.js";import{TrackStatusTile as x}from"./Tiles/TrackStatusTile.esm.js";const F=({tracksConnection:e,campaignsConnection:c})=>{const o=S(),[m]=G(),d=c?.edges.map(({node:t})=>t.id)||[],{data:f,isLoading:s}=I({ids:d},!0,!0),a=m.get("entityOwner"),u=a?a.split(","):void 0,{getSelectedFacetValues:y}=L(),n=T(()=>y(w.Track),[y]);if(s)return i(r,{item:!0,className:o.content,children:i(h,{variant:"body1",color:"textSecondary",children:"Loading campaigns..."})});const N=f?.edges.map(t=>t.node),p=e?.edges.filter(({node:t})=>t.draft?!1:n.length===0?!0:n.includes(t.id)),l=N?.filter(t=>t.archived?!1:t&&n.length===0?!0:n.includes(t.id));return(p===void 0||p.length===0)&&(l===void 0||l.length===0)?i(r,{item:!0,className:o.content,children:i(h,{variant:"body1",color:"textSecondary",children:"No tracks or campaigns found."})}):g(r,{container:!0,spacing:2,children:[p?.map(({node:t})=>i(r,{item:!0,className:o.gridItem,children:i(x,{track:t,filter:a?{"relations.ownedBy":u}:void 0,existsWithinSoundcheck:!0})},t.id)),l?.map(({id:t,track:k})=>i(r,{item:!0,className:o.gridItem,children:i(x,{track:k,campaignId:t,filter:a?{"relations.ownedBy":u}:void 0,existsWithinSoundcheck:!0})},k.id))]})},j=()=>{const e=S(),{data:c,isLoading:o}=v({types:["standard"]}),{data:m,isLoading:d}=v({types:["campaign"]});return o||d?g("div",{className:e.root,children:[g("div",{className:e.sidebar,children:[i(h,{variant:"caption",color:"textSecondary",children:"Group"}),i(b,{margin:"dense",searchParam:"owners"})]}),i("div",{className:e.content,children:i(r,{container:!0,spacing:2,children:[...Array(12)].map((f,s)=>i(r,{item:!0,className:e.gridItem,children:i(C,{variant:"rect",height:200})},s))})})]}):i(F,{tracksConnection:c,campaignsConnection:m})};export{j as TrackCardGrid};
|
|
2
|
+
//# sourceMappingURL=TrackCardGrid.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{Box as t}from"@material-ui/core";import{getTechInsightsStyles as m}from"./styles.esm.js";import{TrackCardGrid as c}from"./TrackCardGrid.esm.js";const e=()=>{const o=m();return r(t,{className:o.content,children:r(c,{})})};export{e as TrackCardGridBox};
|
|
2
|
+
//# sourceMappingURL=TrackCardGridBox.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{rgb as a}from"d3-color";function x(o){const r=a(o.formatHex());if(!r)return 0;const t=c=>{const f=c/255;return f<=.03928?f/12.92:Math.pow((f+.055)/1.055,2.4)},e=t(r.r),n=t(r.g),u=t(r.b);return .2126*e+.7152*n+.0722*u}function b(o,r){const t=x(a(o))+.05,e=x(a(r))+.05;return t>e?t/e:e/t}function p(o,r=4.5,t=10,e=.5){const n=a(o);if(!n)return"#222";const u=x(n)>.5;let c=n,f={color:n.formatHex(),ratio:0};for(let i=1;i<=t;i++){c=u?n.darker(i*e):n.brighter(i*e);const m=c.formatHex(),g=b(o,m);if(g>f.ratio&&(f={color:m,ratio:g}),g>=r)return m}const s=b(o,"#000"),l=b(o,"#fff");return s>=r&&s>l?"#000":l>=r&&l>s?"#fff":f.color}export{p as getContrastTextColor};
|
|
2
|
+
//# sourceMappingURL=colorContrast.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as d,jsx as t}from"react/jsx-runtime";import{useApi as C}from"@backstage/core-plugin-api";import{entityPresentationApiRef as E}from"@backstage/plugin-catalog-react";import{makeStyles as L,Box as l,IconButton as b}from"@material-ui/core";import w from"@material-ui/icons/ArrowDropDown";import z from"@material-ui/icons/ArrowDropUp";import{forwardRef as B,useState as G,useEffect as g}from"react";import{useDescendantsOfGroups as I}from"../../../hooks/heirarchy/useGetDescendentsOfGroups.esm.js";const N=L(e=>({nodeRow:{display:"flex",alignItems:"center",marginBottom:e.spacing(.5)},loading:{fontStyle:"italic",color:e.palette.text.secondary}})),y=B(({group:e,level:a=0,selected:c,onSelect:f,onExpandChange:n},h)=>{const m=N(),[o,u]=G(!1),x=C(E),{data:s,isLoading:r}=I([e.entityRef],o),R=()=>{u(i=>!i)};g(()=>{n&&n()},[o,r,s,n]),g(()=>{!r&&o&&n&&n()},[o,r,n]);const S=i=>{f(e.entityRef,i.target.checked)},k={marginLeft:`${a*20}px`};return d("div",{ref:h,"data-group-id":e.entityRef,children:[d(l,{className:m.nodeRow,style:k,children:[t(b,{size:"small",onClick:R,children:o?t(z,{fontSize:"small"}):t(w,{fontSize:"small"})}),t("input",{type:"checkbox",checked:c.has(e.entityRef),onChange:S}),t("label",{children:x.forEntity(e.entityRef).snapshot.primaryTitle})]}),o&&r&&t(l,{className:m.loading,style:{marginLeft:`${(a+1)*20}px`},children:"Loading..."}),o&&s&&s.map(({group:i,subGroups:v})=>t(l,{children:v.map(p=>t(y,{group:p,level:a+1,selected:c,onSelect:f,onExpandChange:n},p.entityRef))},i.entityRef))]})});export{y as GroupNode};
|
|
2
|
+
//# sourceMappingURL=GroupNode.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as i,jsxs as j}from"react/jsx-runtime";import{useApi as z}from"@backstage/core-plugin-api";import{entityPresentationApiRef as P}from"@backstage/plugin-catalog-react";import{makeStyles as H,Box as L,TextField as N}from"@material-ui/core";import{useVirtualizer as V}from"@tanstack/react-virtual";import{useState as l,useRef as A,useEffect as S,useCallback as I,useMemo as O}from"react";import{useSearchParams as k}from"react-router-dom";import{useRootGroups as B}from"../../../hooks/heirarchy/useRootGroups.esm.js";import{CollapsablePanel as G}from"../../CollapsablePanel/CollapsablePanel.esm.js";import{Facet as M}from"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as D}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"@backstage/catalog-model";import"lodash";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{VirtualRow as Q}from"./VirtualRow.esm.js";const v=H(t=>({root:{display:"flex",flexDirection:"column",height:"100%"},searchField:{margin:t.spacing(.5,0,1,0),"&& input":{margin:t.spacing(1,0,0,0),padding:`${t.spacing(0,1,1,1)} !important`,width:"100%",display:"flex",alignItems:"center",justifyContent:"center"}},scrollPane:{maxHeight:300,overflowY:"auto",marginTop:t.spacing(1),position:"relative"},virtualRow:{margin:0,padding:0,boxSizing:"border-box"}}));function W(t,o){const[m,n]=l(t);return S(()=>{const a=setTimeout(()=>n(t),o);return()=>clearTimeout(a)},[t,o]),m}function Y(){const t=v(),{data:o,isLoading:m}=B(!0),[n,a]=k(),{setSelectedFacetValues:d}=D(),[C,f]=l(new Set),[E,R]=l(!1),[g,b]=l(""),h=W(g,300),y=z(P),x=A(null);S(()=>{const e=new Set;n.get("entityOwner")?.split(",").forEach(r=>{r&&e.add(r)}),f(e)},[n]);const T=I((e,r)=>{f(F=>{const s=new Set(F);r?s.add(e):s.delete(e);const c=Array.from(s);return d(M.EntityOwner,c),a(u=>(u.set("entityOwner",c.join(",")),u.set("owners",c.join(",")),u)),s})},[a,d]),w=O(()=>o?.filter(e=>y.forEntity(e.entityRef).snapshot.primaryTitle.toLowerCase().includes(h.toLowerCase()))??[],[o,h,y]),p=V({count:w.length,getScrollElement:()=>x.current,estimateSize:()=>32,measureElement:e=>e.getBoundingClientRect().height,overscan:3});return m?i("div",{children:"Loading root groups..."}):o?i(G,{label:"Hierarchy",tooltip:"Hierarchy of groups",isExpanded:E,setIsExpanded:R,children:j(L,{className:t.root,children:[i(N,{className:t.searchField,fullWidth:!0,placeholder:"Search for Group",value:g,onChange:e=>b(e.target.value)}),i("div",{ref:x,className:t.scrollPane,children:i("div",{style:{height:p.getTotalSize(),width:"100%",position:"relative"},children:p.getVirtualItems().map(e=>{const r=w[e.index];return i(Q,{index:e.index,group:r,start:e.start,selected:C,onSelect:T,virtualizer:p},r.entityRef)})})})]})}):i("div",{children:"No root groups found."})}export{Y as default,v as useHierarchyStyles};
|
|
2
|
+
//# sourceMappingURL=Hierarchy.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{useRef as u}from"react";import{GroupNode as p}from"./GroupNode.esm.js";import{useHierarchyStyles as d}from"./Hierarchy.esm.js";function m({group:t,start:o,index:n,selected:i,onSelect:a,virtualizer:l}){const s=d(),e=u(null);return r("div",{ref:e,className:s.virtualRow,"data-index":n,"data-group-id":t.entityRef,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${o}px)`},children:r(p,{group:t,selected:i,onSelect:a,onExpandChange:()=>{e.current&&l.measureElement(e.current)}})})}export{m as VirtualRow};
|
|
2
|
+
//# sourceMappingURL=VirtualRow.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const g=(n,o,i,d)=>{const t=d.forEntity(n.entityRef).snapshot.primaryTitle,s=n.entityRef,c=o[s]?.status,p=i(c?.allPassPercentage||0),r=n.ownedEntityRefs?.length||0;if(!n.children||Object.keys(n.children).length===0){const e=r;return e===0?void 0:{id:t,name:t,entityRef:s,value:e,numberOfEntities:r,color:p,passPercentage:c?.allPassPercentage||0,children:[]}}const f=Object.values(n.children).map(e=>g(e,o,i,d)).filter(e=>e!==void 0),u=f.filter(e=>typeof e.passPercentage=="number"&&(e.value===void 0||e.value>0)),v=u.reduce((e,a)=>e+(a.passPercentage||0)*(a.value||0),0),l=u.reduce((e,a)=>e+(a.value||0),0),h=c?.allPassPercentage||0,P=l>0?(v+h*r)/l:h,y=l+r;return{id:t,name:t,entityRef:s,numberOfEntities:y,color:i(P),children:f,passPercentage:P}};export{g as hierarchyToNivo};
|
|
2
|
+
//# sourceMappingURL=hierarchyToNivo.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as r,jsx as a}from"react/jsx-runtime";import{Box as M,TextField as C,Typography as T,Table as ee,TableHead as ie,TableRow as A,TableCell as m,TableSortLabel as ae,TableBody as te,Tooltip as oe,Button as h,Menu as ne,MenuItem as re,Dialog as le,DialogTitle as se,DialogContent as ce,DialogActions as de}from"@material-ui/core";import{makeStyles as pe}from"@material-ui/core/styles";import{useState as s,useMemo as me,useCallback as he}from"react";import{useSearchParams as ge}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useSavedViews as ue}from"../../../hooks/savedViews/useSavedViews.esm.js";import{useDeleteView as we}from"../../../hooks/savedViews/useDeleteView.esm.js";import{useSaveView as ve}from"../../../hooks/savedViews/useSaveView.esm.js";import{CollapsablePanel as fe}from"../../CollapsablePanel/CollapsablePanel.esm.js";import{Facet as l}from"../../TechHealth/Filters/types.esm.js";import"../../TechHealth/Filters/FacetFilter.esm.js";import{useFilterContext as Ce}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{parseTogglesString as Te}from"../TechInsightsPage.esm.js";const be=pe(e=>({root:{width:"100%",minWidth:250,position:"relative",display:"flex",flexDirection:"column",padding:e.spacing(0,0,0,0),margin:e.spacing(0,0,1,0)},searchField:{margin:e.spacing(.5,0,1,0),"&& input":{margin:e.spacing(1,0,0,0),padding:`${e.spacing(0,1,1,1)} !important`,width:"100%",display:"flex",alignItems:"center",justifyContent:"center"}},footer:{marginTop:e.spacing(1),borderTop:`1px solid ${e.palette.divider}`,padding:e.spacing(0),margin:e.spacing(1),textAlign:"center"},fullWidthButton:{width:"100%"},dialogTextField:{marginBottom:e.spacing(1)},tableWrapper:{marginTop:e.spacing(1)},tableButtonCell:{paddingTop:0,paddingBottom:0,paddingLeft:e.spacing(1),paddingRight:e.spacing(1),"&:last-child":{paddingRight:e.spacing(.5)}},denseRow:{height:"32px","& td, & th":{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),paddingLeft:e.spacing(1),paddingRight:e.spacing(1)}},errorText:{marginTop:e.spacing(1),color:e.palette.error.main}})),O="tech-insights",xe=({onToggleChange:e})=>{const n=be(),{views:b,isLoading:g}=ue(O),{saveView:z,isSavingView:I,saveError:x}=ve(),{deleteView:$}=we(),[G,H]=s(!1),[u,P]=s(""),[w,q]=s("asc"),[y,k]=s(null),[S,V]=s(null),[J,N]=s(!1),[B,F]=s(""),[D,E]=s(""),[K]=ge(),{setManySelectedFacetValues:L}=Ce(),Q=()=>{q(i=>i==="asc"?"desc":"asc")},U=(i,t)=>{i.preventDefault();const o=i.currentTarget;k(o),V(t)},R=()=>{k(null),V(null)},X=()=>{S&&$(S),R()},W=me(()=>{const i=u.toLowerCase();return b?.savedViews?.views.filter(t=>t.name.toLowerCase().includes(i))?.sort((t,o)=>w==="asc"?t.name.localeCompare(o.name):o.name.localeCompare(t.name))??[]},[b,u,w]),Y=()=>N(!0),v=()=>{N(!1),F(""),E("")},Z=he(i=>{const t=i.data??{};if(t.toggles){const d=Te(t.toggles);e("showGraphs",d.showGraphs),e("showCards",d.showCards),e("showTables",d.showTables)}const o=[],c=[];Object.entries(t).forEach(([d,j])=>{if(j){let p;switch(d){case"entityOwner":p=l.EntityOwner;break;case"track":p=l.Track;break;case"check":p=l.Check;break}p&&(o.push(p),c.push(String(j).split(",")))}});const f=Object.values(o);f.includes(l.Track)||(o.push(l.Track),c.push([])),f.includes(l.Check)||(o.push(l.Check),c.push([])),f.includes(l.EntityOwner)||(o.push(l.EntityOwner),c.push([])),L(o,c)},[e,L]),_=()=>{const i={};for(const[t,o]of K.entries())i[t]=o;z({data:i,name:B,description:D,type:O}),v()};return r(M,{className:n.root,children:[a(fe,{label:"Favorite Views",tooltip:"A list of favorite views",isExpanded:G,setIsExpanded:H,children:r(M,{children:[a(C,{placeholder:"Search for View",value:u,onChange:i=>P(i.target.value),className:n.searchField,size:"small",fullWidth:!0}),g&&a(T,{variant:"body2",color:"textSecondary",children:"Loading saved views..."}),!g&&W.length>0?a("div",{className:n.tableWrapper,children:r(ee,{size:"small",children:[a(ie,{children:r(A,{children:[a(m,{children:a(ae,{active:!0,direction:w,onClick:Q,children:"View Name"})}),a(m,{children:"Action"})]})}),a(te,{children:W.map(i=>a(oe,{title:i.description||"No description",arrow:!0,children:r(A,{onContextMenu:t=>U(t,i.id),hover:!0,className:n.denseRow,children:[a(m,{children:i.name}),a(m,{className:n.tableButtonCell,children:a(h,{size:"small",variant:"contained",onClick:()=>Z(i),children:"Load"})})]},i.id)},`${i.id}-tooltip`))})]})}):!g&&a(T,{variant:"body2",color:"textSecondary",children:"No saved views found."}),a(ne,{open:!!y,anchorEl:y,onClose:R,children:a(re,{onClick:X,children:"Delete View"})}),r("div",{className:n.footer,children:[a(h,{variant:"outlined",color:"primary",onClick:Y,className:n.fullWidthButton,children:"Save Current View"}),!!x&&a(T,{variant:"body2",className:n.errorText,children:x.message})]})]})}),r(le,{open:J,onClose:v,children:[a(se,{style:{marginBottom:0,paddingBottom:0},children:"Save Current View"}),r(ce,{children:[a(C,{label:"View Name",value:B,onChange:i=>F(i.target.value),className:n.dialogTextField,fullWidth:!0}),a(C,{label:"Description",value:D,onChange:i=>E(i.target.value),className:n.dialogTextField,fullWidth:!0,multiline:!0,minRows:1,maxRows:10,InputProps:{style:{overflow:"auto",maxHeight:300}}})]}),r(de,{children:[a(h,{onClick:v,children:"Cancel"}),a(h,{onClick:_,color:"primary",variant:"contained",disabled:I,children:"Save"})]})]})]})};export{xe as default};
|
|
2
|
+
//# sourceMappingURL=FavoriteViews.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as a}from"@material-ui/core";const o=a(e=>({root:{display:"flex",height:"100%"},header:{padding:e.spacing(2),borderBottom:`1px solid ${e.palette.divider}`,marginBottom:e.spacing(2)},filterSubsection:{border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius},sidebar:{width:"300px",padding:e.spacing(2)},content:{flexGrow:1,padding:e.spacing(2),overflow:"auto"},info:{fontSize:"1.2rem",marginTop:e.spacing(2),padding:e.spacing(2),backgroundColor:e.palette.background.paper,borderRadius:e.shape.borderRadius,flexGrow:1,overflow:"auto",margin:e.spacing(2)},gridItem:{padding:e.spacing(1),width:"100%",[e.breakpoints.up("sm")]:{width:"50%"},[e.breakpoints.up("md")]:{width:"33.33%"},[e.breakpoints.up("lg")]:{width:"25%"},[e.breakpoints.up(1920)]:{width:"20%"}},divider:{marginTop:e.spacing(1),marginBottom:e.spacing(1)}}));export{o as getTechInsightsStyles};
|
|
2
|
+
//# sourceMappingURL=styles.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as d,jsx as e}from"react/jsx-runtime";import{Grid as n,Button as h,Menu as v,Box as x,TextField as B}from"@material-ui/core";import{makeStyles as D}from"@material-ui/core/styles";import{useState as f}from"react";import{useSearchParams as E}from"react-router-dom";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"@backstage/catalog-model";import"lodash";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"../../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{MIN_NUMBER_OF_DAYS as a,MAX_NUMBER_OF_DAYS as m}from"../TechHealth/Filters/utils.esm.js";const O=[{label:"7D",value:7},{label:"1M",value:30},{label:"2M",value:60},{label:"3M",value:90}],S=D(o=>({root:{width:"100%",paddingLeft:"60px",paddingBottom:o.spacing(1)},buttons:{paddingTop:"0 !important",paddingBottom:"0 !important"},customNumberOfDaysMenu:{width:"180px",padding:o.spacing(0,1)}})),w=()=>{const o=S(),[g,b]=E(),[l,p]=f(null),[i,s]=f(""),y=t=>{p(t.currentTarget)},M=()=>{p(null)},u=t=>{let r;if(typeof t=="string"){if(!t.length)return!0;r=parseInt(t,10)}else r=t;return!isNaN(r)&&r>=a&&r<=m},c=t=>{u(t)&&b(r=>(g.set("numberOfDays",t.toString()),r))},N=t=>{if(t.key==="Enter"){const r=parseInt(i,10);c(r),s("")}};return d(n,{container:!0,spacing:1,direction:"row",wrap:"nowrap",className:o.root,children:[O.map(t=>e(n,{item:!0,className:o.buttons,children:e(h,{size:"small",onClick:()=>c(t.value),children:t.label})})),d(n,{item:!0,className:o.buttons,children:[e(h,{size:"small","aria-controls":"days-menu","aria-haspopup":"true",onClick:y,children:"Custom"}),e(v,{id:"days-menu",anchorEl:l,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},keepMounted:!0,open:!!l,onClose:M,children:e(x,{className:o.customNumberOfDaysMenu,children:e(B,{fullWidth:!0,variant:"outlined",size:"small",placeholder:"Number of days",helperText:`Enter value from ${a} to ${m}`,inputProps:{min:a,max:m},onKeyDown:N,value:i,type:"number",onChange:t=>s(t.target.value),error:!u(i)})})})]})]})};export{w as TimePeriodBar};
|
|
2
|
+
//# sourceMappingURL=TimePeriodBar.esm.js.map
|