@spotify/backstage-plugin-soundcheck 0.16.3 → 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 +63 -0
- package/config.d.ts +14 -0
- package/dist/alpha/integrations.esm.js +2 -0
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha.d.ts +252 -17
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +2 -0
- package/dist/components/Badges/LevelBadge.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
- package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CheckDetails/CheckResultDetails.esm.js +1 -1
- package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
- package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
- package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/FactValueDisplay.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionBox.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
- package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
- package/dist/components/CheckForm/utils/validation.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.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/CheckPage/ExemptionsTable.esm.js +2 -0
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/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/GroupSelector/GroupSelector.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/OverviewPage/OverviewPageHeader.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckNameCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/TrackCheckStatusCount.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
- package/dist/components/OverviewTable/OverviewTableContent.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
- package/dist/components/PassingPercentProgressbar/PassPercentageProgressbar.esm.js +2 -0
- package/dist/components/Router.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/RoutingPage/index.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/headerUtil.esm.js +1 -1
- package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/Filters/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/TrackEntitiesTable/utils.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/TrackPage/TrackStatusBar.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusTable.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/contexts/UserProvider.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +283 -79
- package/dist/hooks/aggregations/useCertificationStatusHistories.esm.js +2 -0
- package/dist/hooks/aggregations/useCertificationStatuses.esm.js +2 -0
- package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
- package/dist/hooks/aggregations/useCheckStatusByGroups.esm.js +2 -0
- package/dist/hooks/aggregations/useCheckStatusHistoriesMultiFilter.esm.js +2 -0
- package/dist/hooks/campaigns/useCreateCampaign.esm.js +1 -1
- package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
- package/dist/hooks/campaigns/useSendCampaignNotification.esm.js +2 -0
- package/dist/hooks/campaigns/useUpdateCampaign.esm.js +1 -1
- package/dist/hooks/certifications/useTrackOverviewForOwner.esm.js +1 -1
- package/dist/hooks/checks/useCreateCheck.esm.js +1 -1
- package/dist/hooks/checks/useImportChecks.esm.js +2 -0
- package/dist/hooks/checks/useSetManualResult.esm.js +1 -1
- package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
- package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
- package/dist/hooks/exemptions/useDeleteExemption.esm.js +1 -1
- package/dist/hooks/exemptions/useExemptCheckIds.esm.js +1 -1
- package/dist/hooks/exemptions/useExemptions.esm.js +2 -0
- package/dist/hooks/exemptions/useGetExemption.esm.js +1 -1
- package/dist/hooks/exemptions/useSetEntityExempt.esm.js +1 -1
- 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/useCreateTrack.esm.js +1 -1
- package/dist/hooks/tracks/useImportTracks.esm.js +2 -0
- package/dist/hooks/tracks/useUpdateTrack.esm.js +1 -1
- package/dist/index.d.ts +85 -1
- package/dist/index.esm.js +1 -1
- 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/dist/utils/validation.esm.js +1 -1
- package/package.json +34 -18
- package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +0 -2
- package/dist/components/OrgHealth/OrgHealthPage.esm.js +0 -2
- package/dist/components/OverviewTable/Cell/TrackCheckIndicator.esm.js +0 -2
- package/dist/utils/getGroupFilterFromConfig.esm.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as o,Fragment 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{RoutingPage as
|
|
1
|
+
import{RoutingPage as o,RoutingPageWrapper as r}from"./RoutingPage.esm.js";export{o as RoutingPage,r as RoutingPageWrapper};
|
|
2
2
|
//# sourceMappingURL=index.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
|
-
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{jsxs as d,jsx as
|
|
1
|
+
import{jsxs as d,jsx as i,Fragment as b}from"react/jsx-runtime";import{withStyles as u,Card as w,makeStyles as v,CardHeader as C,CardContent as k,Divider as f,CardActions as S,Button as N}from"@material-ui/core";import{createStyles as A}from"@material-ui/core/styles";import{SoundcheckMarkdownContent as B}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react";import"react-markdown";import"rehype-raw";import"remark-gfm";import{SummaryCardActionsMenu as D}from"./SummaryCardActionsMenu.esm.js";const c=u(e=>A({root:{width:"100%",height:"100%",minHeight:"385px",display:"flex",flexDirection:"column",padding:e.spacing(2),position:"relative",justifyContent:"start"}}))(w),h=v(e=>({root:{position:"relative",height:"100%"},summaryName:{fontSize:e.typography.pxToRem(24),color:e.palette.text.primary,maxHeight:"250px",overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical","-webkit-box-orient":"vertical",wordBreak:"break-word"},summaryDescription:{color:e.palette.text.primary,padding:0,maxHeight:"175px",overflow:"auto",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical","-webkit-box-orient":"vertical",wordBreak:"break-word"},card:{paddingTop:e.spacing(1),paddingBottom:0,paddingLeft:e.spacing(1),paddingRight:e.spacing(1),borderColor:e.palette.divider},cardContent:{height:"100%",paddingTop:0},actionArea:{padding:e.spacing(1.5,2,1.5,4)},button:{minWidth:0,color:e.palette.text.primary,"&:disabled":{color:e.palette.text.disabled,opacity:1}}})),E=({title:e,description:x,viewLabel:n="View",editLabel:l="Edit",children:y,handleDelete:p,handleArchive:s,handleEdit:t,handleView:a,handleExport:m,viewIsPrimaryAction:g})=>{const r=h(),o=!g&&!!t;return d(c,{className:r.card,"data-testid":e,children:[i(C,{title:e,titleTypographyProps:{className:r.summaryName},action:(!!p||!!s||!!t||!!m)&&i(D,{handleView:a,handleDelete:p,handleArchive:s,handleEdit:t,handleExport:m})}),i(k,{className:r.cardContent,children:d(b,{children:[i(B,{className:r.summaryDescription,content:x??""}),y]})}),(a||t)&&d("div",{children:[i(f,{}),i(S,{className:r.actionArea,children:i(N,{"aria-label":o?l:n,"data-testid":`${e}-button`,size:"medium",role:"link",onClick:o?t:a,disabled:!a&&!t,className:r.button,variant:"outlined",children:o?l:n})})]})]})};export{c as Card,E as SummaryCard,h as useSummaryCardStyles};
|
|
2
2
|
//# sourceMappingURL=SummaryCard.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
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jsx as e,jsxs as d}from"react/jsx-runtime";import{Link as b}from"@backstage/core-components";import{useRouteRef as x}from"@backstage/core-plugin-api";import{useTheme as N,TableContainer as v,Table as T,TableBody as y,TableRow as s,TableCell as r,Typography as h,Box as w}from"@material-ui/core";import{makeStyles as R}from"@material-ui/core/styles";import{Skeleton as m}from"@material-ui/lab";import{useMemo as $}from"react";import{trackCheckDetailsRouteRef as A}from"../../routes.esm.js";import{getCheckStatusColor as F}from"../../utils/colors.esm.js";import{LevelRow as S}from"../LevelsTable/LevelsTable.esm.js";const z=R(t=>({root:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},checkNameLink:{color:"inherit",textDecoration:"none"},bar:{height:8,display:"block"},barContainer:{width:"100%",display:"block"},cell:{padding:t.spacing(1),width:"auto"},barCell:{width:150,padding:"4px 8px"},rightAlignedCell:{textAlign:"right",paddingRight:`${t.spacing(2)}px !important`},failingText:{color:t.palette.text.secondary,display:"flex",flexDirection:"column",alignItems:"flex-end",lineHeight:1.2,minWidth:"40px"},noFailingChecksText:{padding:t.spacing(2,1)}})),D=({track:t,checkStatuses:c,certificationStatus:o})=>{const i=z(),p=N(),f=x(A),g=$(()=>(t.levels??[]).map(n=>({...n,failingChecks:n.checks.map(l=>{const a=c?.find(u=>u.id===l.id),k=a?a.numberOfEntities-a.notApplicable-a.exempt:0,C=a?.failed??0;return{check:l,failedCount:C,applicableCount:k}}).filter(({failedCount:l})=>l>0).sort((l,a)=>(a.failedCount??0)-(l.failedCount??0))})),[t.levels,c]);return t.levels?.length?e(v,{component:"div",className:i.root,children:e(T,{children:e(y,{children:c===void 0||o===void 0?Array.from({length:10}).map((n,l)=>d(s,{children:[e(r,{className:i.barCell,children:e(m,{variant:"rect",width:30,height:8})}),e(r,{size:"medium",className:i.cell,children:e(m,{variant:"rect",width:140,height:8})}),e(r,{size:"small",className:i.cell,children:e(m,{variant:"rect",width:100,height:8})})]},`skeleton-${l}`)):g.map(n=>d(S,{level:n,children:[n.failingChecks.map(({check:l,failedCount:a})=>d(s,{children:[e(r,{className:i.barCell,children:e("div",{className:i.barContainer,children:e("span",{className:i.bar,style:{width:`${(a??0)/o.numberOfEntities*100}%`,backgroundColor:F(p,"failed")}})})}),e(r,{size:"medium",className:i.cell,children:e(b,{className:i.checkNameLink,to:f({trackId:t.id,checkId:l.id}),children:e(h,{children:l.name})})}),e(r,{size:"small",className:`${i.cell} ${i.rightAlignedCell}`,children:e(w,{className:i.failingText,children:e(h,{variant:"caption",children:`${new Intl.NumberFormat().format(a??0)} failing`})})})]},l.id)),c&&o&&n.failingChecks.length===0&&e(s,{children:e(r,{children:e(h,{variant:"body2",className:i.noFailingChecksText,children:"No Failing Checks"})})})]},n.ordinal))})})}):null};export{D as TopFailingChecksTable};
|
|
2
2
|
//# sourceMappingURL=TopFailingChecksTable.esm.js.map
|