@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 i,Fragment as d}from"react/jsx-runtime";import{makeStyles as m}from"@material-ui/core/styles";import{useFormContext as g,Controller as b}from"react-hook-form";import{BadgeVariant as l}from"../../../../../graphql/generated/index.esm.js";import{LevelBadge as n}from"../../../../Badges/LevelBadge.esm.js";import"../../../../Badges/NoLevelBadge.esm.js";import"../../../../Badges/CampaignBadge.esm.js";import{FormControlledAutocomplete as f}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/core";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as u}from"../../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"react";import{FormFieldLabel as y}from"../../../../FormFieldLabel/FormFieldLabel.esm.js";const v=m(o=>({container:{display:"flex",flexDirection:"column",gap:o.spacing(1)},badgeTypeInput:{display:"flex",flexDirection:"row",gap:o.spacing(1)},badgeTypeIcon:{alignSelf:"center"}})),
|
|
1
|
+
import{jsx as e,jsxs as i,Fragment as d}from"react/jsx-runtime";import{makeStyles as m}from"@material-ui/core/styles";import{useFormContext as g,Controller as b}from"react-hook-form";import{BadgeVariant as l}from"../../../../../graphql/generated/index.esm.js";import{LevelBadge as n}from"../../../../Badges/LevelBadge.esm.js";import"../../../../Badges/NoLevelBadge.esm.js";import"../../../../Badges/CampaignBadge.esm.js";import{FormControlledAutocomplete as f}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/core";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"../../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as u}from"../../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"react";import{FormFieldLabel as y}from"../../../../FormFieldLabel/FormFieldLabel.esm.js";const v=m(o=>({container:{display:"flex",flexDirection:"column",gap:o.spacing(1)},badgeTypeInput:{display:"flex",flexDirection:"row",gap:o.spacing(1)},badgeTypeIcon:{alignSelf:"center"}})),x=({disabled:o})=>{const t=v(),{control:a}=g(),r=[{value:"status",label:"Status",icon:e(n,{className:t.badgeTypeIcon,badge:{variant:l.Status,options:{status:{passed:3,failed:2,warning:0,exempt:0,error:0,notApplicable:0,notReported:0,passPercentage:60}}}})},{value:"medal",label:"Medal",icon:e(n,{className:t.badgeTypeIcon,badge:{variant:l.Medal,options:{color:"#FCE54F",level:3}}})}],p=u(r);return i("div",{className:t.container,children:[e("div",{children:e(y,{title:"Badge type",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks#certifications-and-badges"})}),i("div",{className:t.badgeTypeInput,children:[e(f,{name:"detailsStep.badgeType",disableClearable:!0,control:a,width:300,freeSolo:!1,disabled:o,placeholder:"Badge type",...p}),e(b,{name:"detailsStep.badgeType",control:a,render:({field:s})=>e(d,{children:r.find(c=>c.value===s.value)?.icon})})]})]})};export{x as TrackBadgeTypeSelect};
|
|
2
2
|
//# sourceMappingURL=TrackBadgeTypeSelect.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{zodResolver as k}from"@hookform/resolvers/zod";import{useMemo as T,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as g}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as w}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as d,mapCatalogFilterToFormKeyValueFilters as c,mapFiltersToCatalogFilter as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f,emptyKeyValueFilters as y}from"../../Filter/types.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const F={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"
|
|
1
|
+
import{zodResolver as k}from"@hookform/resolvers/zod";import{useMemo as T,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as g}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as w}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as d,mapCatalogFilterToFormKeyValueFilters as c,mapFiltersToCatalogFilter as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f,emptyKeyValueFilters as y}from"../../Filter/types.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const F={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"status",draft:!1},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{filter:f(),keyValueFilter:y(),excludeFilter:f(),excludeKeyValueFilter:y()}},S=({name:e,description:r,ownerEntityRef:o,filter:t,levels:i,documentationURL:a,badge:p,exclude:l,draft:n})=>({detailsStep:{name:e,ownerEntityRef:o,description:r??"",documentationURL:a??void 0,badgeType:p?.variant===w.Status?"status":"medal",draft:n??!1},levelsStep:{levels:i?.map(m=>({name:m.name??`Level ${m.ordinal}`??"Level 1",description:m.description??"",checks:m.checks.map(s=>({id:s.id,name:s.name??s.id,description:s.description??""}))}))||[]},filtersStep:{filter:d(t),keyValueFilter:c(t),excludeFilter:d(l),excludeKeyValueFilter:c(l)}}),v=(e,r,o)=>({id:o?.id??g(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:o?.type??"standard",levels:e.levelsStep.levels?.map((t,i)=>({ordinal:i+1,name:t.name??"",description:t.description??"",checks:t.checks.map(a=>r[a.id])})),filter:u(e.filtersStep.filter,e.filtersStep.keyValueFilter),exclude:u(e.filtersStep.excludeFilter,e.filtersStep.excludeKeyValueFilter),draft:e.detailsStep.draft??!1}),M=e=>{const{selectedItem:r}=h(),o=T(()=>r?S(r):F,[r]),t=V({defaultValues:o,mode:"onChange",resolver:k(C)}),{userEntityRef:i}=E();R(()=>{!r&&i&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",i)},[r,i,t]);const{checksMap:a}=L(),{showModal:p}=x();return{formMethods:t,onSubmit:async l=>{if(!await p({title:"Save Track",message:`Are you sure you want to save track: ${l.detailsStep.name}?`,error:!1}))return;const n=v(l,a??{},r);e(n)}}};export{F as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,S as mapTrackToFormValues,M as useTrackForm};
|
|
2
2
|
//# sourceMappingURL=useTrackForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as C}from"react/jsx-runtime";import{stringifyEntityRef as z}from"@backstage/catalog-model";import{Table as L}from"@backstage/core-components";import{makeStyles as P}from"@material-ui/core";import x from"lodash";import{useState as O,useEffect as D,useCallback as w}from"react";import{TrackEntityField as r,Direction as k}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as F}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useTrackEntities as N}from"../../../hooks/entities/useTrackEntities.esm.js";import{columnFactories as i}from"./columns.esm.js";import{toTrackEntityRow as j}from"./utils.esm.js";const q=10,A=n=>[i.createBadgeColumn(),i.createNameColumn(),i.createStatusColumn(n),i.createSystemColumn(),i.createOwnerColumn(),i.createSpecTypeColumn(),i.createSpecLifecycleColumn()],G=[r.CertificationLevel,r.Name,r.CheckPassRate,r.System,r.Owner,r.Type,r.Lifecycle],I=n=>{const{lifecycles:g,owners:a,types:s,systems:c}=n,f=g?.length?{"spec.lifecycle":g}:void 0,m=a?.length?{"relations.ownedBy":a}:void 0,d=s?.length?{"spec.type":s}:void 0,y=c?.length?{"relations.partOf":c}:void 0;return{...f,...m,...d,...y}},W=P({tableContainer:{display:"flex",flexDirection:"column",height:"100%"}}),H=({track:n,initialPageSize:g,lifecycles:a,owners:s,types:c,systems:f,getColor:m})=>{const d=W(),y=A(m),[e,u]=O({orderBy:void 0,filter:I({lifecycles:a,owners:s,types:c,systems:f}),pageInfo:{page:0,pageSize:g??q,direction:"forward",cursor:null}});D(()=>{u(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:I({lifecycles:a,owners:s,types:c,systems:f})}))},[a,s,c,f]);const{data:l,isLoading:h}=N({trackId:n.id,orderBy:e.orderBy,filter:e.filter,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),S=w((t,p)=>{let o;t===-1?o=void 0:o={field:G[t],direction:p==="asc"?k.Asc:k.Desc},u({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),E=w((t,p)=>{const o=t>e.pageInfo.page?"forward":"backward",R=o==="forward"?l?.trackEntities.pageInfo.endCursor??null:l?.trackEntities.pageInfo.startCursor??null;u({...e,pageInfo:{page:t,pageSize:p,direction:o,cursor:R}})},[l,e]),b=l?.trackEntities.edges.map(t=>t.node.entityRef)??[],{data:v,isLoading:T}=F({entityRefs:b}),B=x.compact(l?.trackEntities.edges.map(t=>{const p=v?.items.find(o=>!!o&&z(o)===t.node.entityRef);return p?j({trackDetails:t.node,track:n,entity:p}):void 0}))??[];return C("div",{className:d.tableContainer,children:C(L,{columns:y,data:B,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"both",emptyRowsWhenPaging:!1,pageSizeOptions:[10,25,50],pageSize:e.pageInfo.pageSize,search:!1,showTitle:!1,padding:"dense"},onOrderChange:S,onPageChange:E,page:e.pageInfo.page,totalCount:l?.trackEntities.totalCount??0,isLoading:h||T,components:{Toolbar:()=>null}})})};export{H as TrackEntitiesTable};
|
|
2
2
|
//# sourceMappingURL=TrackEntitiesTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as l,jsxs as h}from"react/jsx-runtime";import{makeStyles as k,lighten as R,darken as L,Typography as n}from"@material-ui/core";import{useState as T,useRef as $}from"react";import B from"../../RichTooltip/RichTooltip.esm.js";import{getProgressColor as i}from"../utils.esm.js";import{getApplicableCheckCount as m}from"./utils.esm.js";const v=t=>{const e=m(t);return e===0?-1:Math.round(t.passed/e*100)},N=(t,e)=>t.levels.find(o=>o.ordinal===e),A=k(t=>({cell:{backgroundColor:({passRate:e,getColor:o})=>o?o(e):i(t,e),color:({passRate:e,getColor:o})=>t.palette.getContrastText(o?o(e):i(t,e)),cursor:"default",borderRadius:"4px",textAlign:"center",fontSize:".9rem",width:"50px"},tooltip:{width:"225px"},topLevelStatus:{borderBottom:`1px solid ${t.palette.divider}`,paddingBottom:t.spacing(1)},levelStatus:{borderBottom:`1px solid ${t.palette.divider}`,paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},bottomLevelStatus:{paddingTop:t.spacing(1)},levelPassRate:{backgroundColor:({passRate:e,getColor:o})=>R(o?o(e):i(t,e),.75),color:({passRate:e,getColor:o})=>L(o?o(e):i(t,e),.7),borderRadius:"4px",textAlign:"center",fontSize:".7rem",width:"32px",height:"15px"}})),j=({track:t,status:e,getColor:o})=>{const u=v(e),s=A({passRate:u,getColor:o}),[f,p]=T(!1),g=$(null),x=()=>{g.current=setTimeout(()=>p(!0),500)},C=()=>{clearTimeout(g.current),p(!1)},y=m(e);return l(B,{content:l("div",{className:s.tooltip,children:e.statusByLevel.map((a,d)=>{let r;d===0?r=s.topLevelStatus:d===e.statusByLevel.length-1?r=s.bottomLevelStatus:r=s.levelStatus;const c=m(a),b=N(t,a.ordinal),S=v(a);return h("div",{className:r,style:{display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[l("div",{children:l(n,{variant:"caption",style:{fontWeight:"bold"},children:b?.name??`Level ${a.ordinal}`})}),h("div",{style:{display:"flex",justifyContent:"space-between"},children:[l(n,{variant:"caption",children:c===0?"No Applicable Checks":`Passing ${a.passed} of ${c} checks`}),l(n,{className:s.levelPassRate,children:c===0?"N/A":`${S}%`})]})]},d)})}),open:f,placement:"bottom",onClose:()=>p(!1),children:l("div",{style:{display:"flex",justifyContent:"center",alignItems:"center"},onMouseEnter:x,onMouseLeave:C,children:l(n,{className:s.cell,children:y===0?"N/A":`${u}%`})})})};export{j as TrackStatusChip};
|
|
2
2
|
//# sourceMappingURL=TrackStatusChip.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,Fragment as o}from"react/jsx-runtime";import{OverflowTooltip as m}from"@backstage/core-components";import{EntityRefLink as u,EntityRefLinks as s}from"@backstage/plugin-catalog-react";import{makeStyles as c,withStyles as p,Chip as d}from"@material-ui/core";import f from"@material-ui/icons/RemoveCircleOutline";import{LevelBadge as y}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as g}from"../../Badges/NoLevelBadge.esm.js";import"../../Badges/CampaignBadge.esm.js";import{TrackStatusChip as
|
|
1
|
+
import{jsx as r,Fragment as o}from"react/jsx-runtime";import{OverflowTooltip as m}from"@backstage/core-components";import{EntityRefLink as u,EntityRefLinks as s}from"@backstage/plugin-catalog-react";import{makeStyles as c,withStyles as p,Chip as d}from"@material-ui/core";import f from"@material-ui/icons/RemoveCircleOutline";import{LevelBadge as y}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as g}from"../../Badges/NoLevelBadge.esm.js";import{CampaignBadge as h}from"../../Badges/CampaignBadge.esm.js";import{TrackStatusChip as S}from"./TrackStatusChip.esm.js";import{getApplicableCheckCount as C}from"./utils.esm.js";const l=c(()=>({linkHover:{"& span":{"&:hover":{textDecoration:"underline"}}}})),b=p(e=>({root:{color:e.palette.text.disabled}}))(f),v=Object.freeze({createBadgeColumn(){return{title:"",field:"badge",render:e=>C(e.status)===0?r(b,{}):e.track.type==="campaign"?r(h,{}):e.badge?r(y,{badge:e.badge}):r(g,{}),width:"auto",align:"center",sorting:!1}},createStatusColumn(e){return{title:"Checks",field:"status",render:t=>t.status&&r(S,{track:t.track,status:t.status,getColor:e}),width:"auto",align:"center",sorting:!1}},createNameColumn(e){return{title:"Name",field:"resolved.entityRef",highlight:!0,customSort(t,a){return 0},render:({entity:t})=>{const a=l();return r(u,{entityRef:t,defaultKind:e?.defaultKind||"Component",className:a.linkHover})}}},createSystemColumn(){return{title:"System",field:"resolved.partOfSystemRelationTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=l();return r(s,{entityRefs:e.partOfSystemRelations,defaultKind:"system",className:t.linkHover})}}},createOwnerColumn(){return{title:"Owner",field:"resolved.ownedByRelationsTitle",customSort(e,t){return 0},render:({resolved:e})=>{const t=l();return r(s,{entityRefs:e.ownedByRelations,defaultKind:"group",className:t.linkHover})}}},createSpecTypeColumn(){return{title:"Type",field:"entity.spec.type",customSort(e,t){return 0}}},createSpecLifecycleColumn(){return{title:"Lifecycle",field:"entity.spec.lifecycle",customSort(e,t){return 0},width:"auto"}},createMetadataDescriptionColumn(){return{title:"Description",field:"entity.metadata.description",customSort(e,t){return 0},render:({entity:e})=>r(m,{text:e.metadata.description,placement:"bottom-start"}),width:"auto"}},createTagsColumn(){return{title:"Tags",field:"entity.metadata.tags",cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:e})=>r(o,{children:e.metadata.tags&&e.metadata.tags.map(t=>r(d,{label:t,size:"small",variant:"outlined",style:{marginBottom:"0px"}},t))}),width:"auto",sorting:!1}},createTitleColumn(e){return{title:"Title",field:"entity.metadata.title",customSort(t,a){return 0},hidden:e?.hidden,searchable:!0}},createLabelColumn(e,t){return{title:t?.title||"Label",field:"entity.metadata.labels",customSort(a,n){return 0},cellStyle:{padding:"0px 16px 0px 20px"},render:({entity:a})=>{const n=a.metadata?.labels,i=n&&n[e]||t?.defaultValue;return r(o,{children:i&&r(d,{label:i,size:"small",variant:"outlined"},i)})},width:"auto",sorting:!1}},createNamespaceColumn(){return{title:"Namespace",field:"entity.metadata.namespace",customSort(e,t){return 0},width:"auto"}}});export{v as columnFactories};
|
|
2
2
|
//# sourceMappingURL=columns.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{RELATION_PART_OF as f,RELATION_OWNED_BY as p,stringifyEntityRef as
|
|
1
|
+
import{RELATION_PART_OF as f,RELATION_OWNED_BY as p,stringifyEntityRef as c}from"@backstage/catalog-model";import{getEntityRelations as m,humanizeEntityRef as a}from"@backstage/plugin-catalog-react";import d from"lodash";function u(e){return Object.keys(e).filter(t=>!["allPassPercentage","notApplicable","numberOfEntities","ordinal","exempt","passPercentage"].includes(t)&&typeof d.get(e,t,0)=="number").reduce((t,i)=>t+d.get(e,i,0),0)}function y(e){const{trackDetails:t,track:i,entity:n}=e,r=m(n,f,{kind:"system"}),s=m(n,p),l=c(n);return{id:l,entity:n,badge:t.badge??void 0,track:i,status:t.status,resolved:{name:a(n,{defaultKind:"Component"}),entityRef:l,ownedByRelationsTitle:s.map(o=>a(o,{defaultKind:"group"})).join(", "),ownedByRelations:s,partOfSystemRelationTitle:r.map(o=>a(o,{defaultKind:"system"})).join(", "),partOfSystemRelations:r}}}export{u as getApplicableCheckCount,y as toTrackEntityRow};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useTheme as g,Typography as x}from"@material-ui/core";import L from"lodash";import{DateTime as b}from"luxon";import{ResponsiveContainer as C,AreaChart as A,CartesianGrid as $,XAxis as I,YAxis as f,Tooltip as T,Area as y}from"recharts";import{compactNumberFormatter as W}from"../../utils/formatters.esm.js";import{getChartColors as D,formatDate as E}from"../Charts/chartUtils.esm.js";import{LoadingChart as N}from"../Charts/LoadingChart.esm.js";import{TimePeriodBar as O}from"../TimePeriodBar/TimePeriodBar.esm.js";const k=i=>{const a=i?.certificationStatusHistory.history??[],l=i?.certificationStatusHistory.numberOfEntities,o=b.utc();return L.map(a,(s,r)=>{let t={name:E(o,a.length-r-1),totalEntities:l??0};const p=[];for(const d of s.statusByLevel)p.push(d.cumulativelyPassed);const c=l??0;let m=0;s.statusByLevel.forEach((d,v)=>{const h=c>0?Math.round(p[v]/c*100):0;t={...t,[`Level ${d.ordinal}`]:h},m+=h});const u=Math.max(0,100-m);return t={...t,"No Level":u},t})},F=({track:i,data:a,isError:l})=>{const o=g();if(l)return e(x,{color:"error",children:"Failed to load track data."});if(!i||!a)return e(N,{type:"area",numLines:3});const s=k(a),r=D(o);return n("div",{style:{height:290,width:"100%",position:"relative",borderRadius:"4px"},children:[e(O,{}),e(C,{height:250,debounce:1,children:n(A,{data:s,margin:{top:0,right:0,bottom:0,left:0},children:[n("defs",{children:[i?.levels.map(t=>n("linearGradient",{id:`gradient-${t.ordinal}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[e("stop",{offset:"5%",stopColor:r[t.ordinal%r.length],stopOpacity:.4}),e("stop",{offset:"95%",stopColor:r[t.ordinal%r.length],stopOpacity:0})]},`gradient-${t.ordinal}`)),n("linearGradient",{id:"gradient-no-level",x1:"0",y1:"0",x2:"0",y2:"1",children:[e("stop",{offset:"5%",stopColor:o.palette.action.disabled,stopOpacity:.4}),e("stop",{offset:"95%",stopColor:o.palette.action.disabled,stopOpacity:0})]})]}),e($,{stroke:o.palette.divider,strokeWidth:1,horizontal:!0,vertical:!1}),e(I,{dataKey:"name",tickLine:!1,axisLine:!1}),e(f,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:t=>`${t}%`,ticks:[0,25,50,75,100]}),e(f,{yAxisId:"right",orientation:"right",dataKey:"totalEntities",axisLine:!1,tickLine:!1,tickFormatter:t=>W(t)}),e(T,{contentStyle:{backgroundColor:o.palette.background.paper,color:o.palette.text.primary,border:`1px solid ${o.palette.divider}`},cursor:{stroke:o.palette.divider,strokeWidth:1}}),[...i?.levels??[]].reverse().map(t=>e(y,{type:"monotone",dataKey:`Level ${t.ordinal}`,name:`Level ${t.ordinal}`,stackId:"1",yAxisId:"left",stroke:r[t.ordinal%r.length],strokeWidth:2,fill:`url(#gradient-${t.ordinal})`,isAnimationActive:!1,activeDot:{fill:r[t.ordinal%r.length],stroke:o.palette.background.paper,strokeWidth:1,r:5}},`Level ${t.ordinal}`)),e(y,{type:"monotone",dataKey:"No Level",name:"No Level",stackId:"1",yAxisId:"left",stroke:o.palette.action.disabled,strokeWidth:2,fill:"url(#gradient-no-level)",isAnimationActive:!1,activeDot:{fill:o.palette.action.disabled,stroke:o.palette.background.paper,strokeWidth:1,r:5}},"No Level")]})})]})};export{F as TrackHistoryChart,k as formatLineChartData};
|
|
2
2
|
//# sourceMappingURL=TrackHistoryChart.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as i,jsxs as u,Fragment as ee}from"react/jsx-runtime";import{useRouteRef as te}from"@backstage/core-plugin-api";import{EntityRefLink as re}from"@backstage/plugin-catalog-react";import{usePermission as I}from"@backstage/plugin-permission-react";import{makeStyles as ie,Button as oe,Box as ae,Tabs as se,Tab as N}from"@material-ui/core";import{soundcheckTrackReadPermission as ne,soundcheckTrackUpdatePermission as ce,toEntityFilterQuery as le}from"@spotify/backstage-plugin-soundcheck-common";import v from"lodash/isEqual";import{useState as y,useMemo as a,useEffect as me,useCallback as x}from"react";import{useNavigate as pe,useSearchParams as de,useParams as fe}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as he}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as ge}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as ue}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as ye}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackEditRouteRef as ke}from"../../routes.esm.js";import{FilterSidebar as Ce}from"../FilterSidebar/FilterSidebar.esm.js";import{LevelsTable as ve}from"../LevelsTable/LevelsTable.esm.js";import{LoadingIndicator as we}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as be}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ee}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Se}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";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"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Le}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTable as Te}from"../TopFailingChecksTable/TopFailingChecksTable.esm.js";import{toFilter as Ne}from"./FilterBar/util.esm.js";import{TrackEntitiesTable as xe}from"./TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackProgressCard as Fe}from"./TrackProgressCard.esm.js";const Re=ie(e=>({root:{height:"100%",background:e.palette.background.default},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},trackProgressContainer:{padding:e.spacing(2,0,2,2),borderBottom:`1px solid ${e.palette.divider}`},levelCard:{margin:e.spacing(1,0,2)},editButton:{marginLeft:"auto"},contentArea:{flex:1,padding:e.spacing(0,2)},trackEntitiesContainer:{marginTop:e.spacing(1)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},tabs:{padding:e.spacing(2,2,0,2)}})),Be=()=>{const e=Re(),[k,O]=y("checksByLevel"),F=pe(),R=te(ke),[o,C]=de(),c=a(()=>o.getAll("owners"),[o]),l=a(()=>o.getAll("lifecycles"),[o]),m=a(()=>o.getAll("types"),[o]),p=a(()=>o.getAll("systems"),[o]),M=a(()=>Le(o.get("numberOfDays")),[o]),[d,w]=y(l),[f,b]=y(c),[h,E]=y(m),[g,S]=y(p);me(()=>{b(c??[]),w(l??[]),E(m??[]),S(p??[])},[c,l,m,p]);const $=a(()=>{const t={owners:!v(f,c??[]),lifecycles:!v(d,l??[]),types:!v(h,m??[]),systems:!v(g,p??[])};return Object.values(t).some(Boolean)},[f,c,d,l,h,m,g,p]),j=x(()=>{const t=new URLSearchParams(o);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),d.length>0&&d.forEach(n=>t.append("lifecycles",n)),f.length>0&&f.forEach(n=>t.append("owners",n)),h.length>0&&h.forEach(n=>t.append("types",n)),g.length>0&&g.forEach(n=>t.append("systems",n)),C(t)},[o,d,f,h,g,C]),H=x(()=>{w([]),b([]),E([]),S([]);const t=new URLSearchParams(o);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),C(t)},[o,C]),U=x((t,n)=>{O(n)},[]),{trackId:s}=fe(),L=a(()=>Ne({lifecycles:l,owners:c,types:m,systems:p}),[l,c,m,p]),{data:r,isLoading:T,isError:z}=he(s),{data:B,isLoading:W,isError:Q}=ge({trackId:s,filter:L},!!s),{data:V,isError:q}=ue({trackId:s,filter:L,numberOfDays:M},!!s),{loading:G,allowed:J}=I({permission:ne,resourceRef:s}),{loading:P,allowed:A}=I({permission:ce,resourceRef:s}),K=a(()=>r?.ownerEntityRef?i(re,{color:"inherit",entityRef:r.ownerEntityRef,className:e.ownerLink}):null,[r?.ownerEntityRef,e.ownerLink]),X=a(()=>!P&&A&&r?.isEditable?i(oe,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{F(R({trackId:r.id}))},children:"Edit Track"}):null,[A,e.editButton,R,P,F,r]),Y=a(()=>r?.description?i(Se,{className:e.headerDescription,content:r.description}):null,[e.headerDescription,r?.description]);Ee({title:r?.name,description:Y,customSubtitle:K,sectionRight:X});const Z=r?.levels?.flatMap(t=>t.checks)??[],{data:D}=ye({trackId:s,checkIds:Z.map(t=>t.id),filter:L},!!r),_=a(()=>le(r?.filter),[r]);return u(ee,{children:[i(be,{entityName:"track",entityId:s,showNotFound:!T&&!r,showCannotView:!G&&!J}),T&&i(we,{}),r&&i("div",{className:e.root,children:u("div",{className:e.pageContent,children:[i(Ce,{trackFilter:_,stagedTypes:h,stagedLifecycles:d,stagedOwners:f,stagedSystems:g,onTypesChange:E,onLifecyclesChange:w,onOwnersChange:b,onSystemsChange:S,onApplyFilters:j,onClearFilters:H,hasFilterChanges:$}),u("div",{className:e.mainContentArea,children:[i("div",{className:e.trackProgressContainer,children:i(Fe,{track:r,status:B,history:V,isError:z||Q||q})}),i(ae,{className:e.tabs,children:u(se,{value:k,onChange:U,indicatorColor:"primary",textColor:"primary",children:[i(N,{label:"Checks By Level",value:"checksByLevel"}),i(N,{label:"Top Failing Checks",value:"topFailingChecks"}),i(N,{label:"Entities",value:"entities"})]})}),u("div",{className:e.contentArea,children:[k==="checksByLevel"&&i("div",{className:e.levelCard,children:i(ve,{track:r,checkStatuses:D,isLoading:T||W})}),k==="entities"&&i("div",{className:e.trackEntitiesContainer,children:i(xe,{track:r,lifecycles:l,owners:c,types:m,systems:p})}),k==="topFailingChecks"&&i("div",{className:e.levelCard,children:i(Te,{track:r,checkStatuses:D,certificationStatus:B?.certificationStatus})})]})]})]})})]})};export{Be as TrackPage};
|
|
2
2
|
//# sourceMappingURL=TrackPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as n}from"react/jsx-runtime";import{useTheme as
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{useTheme as y,Box as v}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import{Skeleton as k}from"@material-ui/lab";import{useMemo as f}from"react";import{CategoryBar as C}from"../CategoryBar/CategoryBar.esm.js";import{getChartColors as N}from"../Charts/chartUtils.esm.js";const x=B(t=>({categoryBar:{"& .MuiBox-root > div":{height:"8px"}},skeleton:{height:"8px",width:"100%",margin:0,padding:0,display:"block"}})),L=({track:t,status:o,className:m})=>{const c=x(),l=y(),u=f(()=>{if(!o||!t)return{};const e={};let r=0;return o.statusByLevel.forEach(({ordinal:a,cumulativelyPassed:s})=>{const i=t.levels.find(h=>h.ordinal===a)?.name??`Level ${a}`;e[i]=s,r+=s}),e["Not Certified"]=o.numberOfEntities-r,e},[o,t]),p=f(()=>{if(!o||!t)return{};const e=N(l),r={};return o.statusByLevel.forEach(({ordinal:a})=>{const s=t.levels.find(i=>i.ordinal===a)?.name??`Level ${a}`;r[s]=e[a%e.length]}),r["Not Certified"]=l.palette.grey[700],r},[l,o,t]);if(!t||!o)return n(k,{className:`${c.skeleton} ${m}`});const g=e=>e,d=o.statusByLevel.map(({ordinal:e})=>t.levels.find(r=>r.ordinal===e)?.name??`Level ${e}`);return d.push("Not Certified"),n(v,{className:m,style:{width:"100%"},children:n(C,{className:c.categoryBar,data:u,categories:d,categoryColors:p,showTooltip:!1,valueFormatter:e=>e.toString(),categoryFormatter:g})})};export{L as TrackStatusBar};
|
|
2
2
|
//# sourceMappingURL=TrackStatusBar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a,jsxs as
|
|
1
|
+
import{jsx as a,jsxs as l}from"react/jsx-runtime";import{useTheme as y,Typography as p}from"@material-ui/core";import{makeStyles as v,createStyles as k}from"@material-ui/core/styles";import{Skeleton as d}from"@material-ui/lab";import{memo as x,useMemo as N,Fragment as S}from"react";import{compactNumberFormatter as h}from"../../utils/formatters.esm.js";import{getChartColors as w}from"../Charts/chartUtils.esm.js";const C=v(e=>k({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:e.spacing(1),minWidth:0},item:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.875rem",minWidth:0,flex:1},value:{fontSize:"0.875rem",color:e.palette.text.primary},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{color:e.palette.text.secondary,marginLeft:e.spacing(1)},skeleton:{backgroundColor:e.palette.action.hover}})),T=x(({track:e,status:s})=>{const r=y(),t=C(),g=N(()=>{if(!e)return[{name:"",key:1,color:r.palette.action.hover},{name:"",key:2,color:r.palette.action.hover},{name:"",key:3,color:r.palette.action.hover}];const n=w(r);return e.levels.map(({name:i,ordinal:o})=>({name:i??`Level ${o}`,key:o,color:n[o%n.length]}))},[r,e]),c=s?.numberOfEntities??0;return a("div",{className:t.container,children:g.map(({name:n,key:i,color:o})=>{const m=s?.statusByLevel.find(({ordinal:u})=>u===i)?.cumulativelyPassed??0,f=c>0?Math.round(m/c*100):0;return l(S,{children:[a("div",{className:t.item,children:l("div",{className:t.category,children:[a("span",{className:t.legendDash,style:{backgroundColor:o}}),e?a(p,{className:t.categoryText,children:n}):a(d,{width:80,height:20,className:t.skeleton})]})}),a("div",{className:`${t.item} ${t.valueCell}`,children:e&&s?l(p,{className:t.value,children:[h(m)," of"," ",h(c),l("span",{className:t.percentage,children:["(",f,"%)"]})]}):a(d,{width:120,height:20,className:t.skeleton})})]},i)})})});export{T as TrackStatusTable};
|
|
2
2
|
//# sourceMappingURL=TrackStatusTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r,jsxs as g}from"react/jsx-runtime";import{useRouteRef as X,useApi as A,featureFlagsApiRef as Y}from"@backstage/core-plugin-api";import{usePermission as _}from"@backstage/plugin-permission-react";import{makeStyles as ee,Button as w,Grid as o}from"@material-ui/core";import{soundcheckTrackCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as I}from"react";import{useNavigate as ae}from"react-router-dom";import te from"react-use/lib/useDebounce";import{soundcheckApiRef as oe}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ie}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetTrackOwners as se}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import{useImportTracks as ne}from"../../../hooks/tracks/useImportTracks.esm.js";import ce from"../../../images/no-results.svg";import{trackCreateRouteRef as le}from"../../../routes.esm.js";import{exportTracks as me}from"../../../utils/export.esm.js";import{FilterDefault as N}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{ImportExportPanel as pe}from"../../ImportExportPanel/ImportExportPanel.esm.js";import{Pagination as de}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ge}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as u,TrackNoResults as B}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as ue}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as fe}from"./TrackSummaryCard.esm.js";const he=ee(a=>({headerButtons:{display:"flex",gap:a.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:a.spacing(0,0,1)},container:{padding:a.spacing(3),gap:a.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:a.spacing(1.5),paddingBottom:a.spacing(1.5)}})),ke=({tracksPerPage:a,currentCursor:R})=>{const s=he(),[f,h]=i(R),[m,F]=i(""),[k,O]=i(N.Alpha),[P,E]=i(N.Owner),[C,L]=i(""),{data:j,isLoading:D}=se();te(()=>{L(m)},500,[m]);const{loading:T,allowed:G}=_({permission:re}),H=ae(),W=X(le),y=()=>H(W()),{data:t,isLoading:n}=ie({ids:void 0,types:["standard","playlist"],first:a,after:f,orderAlphabetical:k,searchByOwner:P,searchByName:C}),[p,$]=i(t),c=p?.edges?.map(e=>e.node),[x,v]=i([]);I(()=>{h(void 0),v([])},[C]);const b=A(Y),q=!b.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-track-creation")||b.isActive("soundcheck-enable-track-creation"),d=!G||!q,z=e=>{O(e.target.value)},J=e=>{E(e.target.value)};I(()=>{t&&$(()=>({totalCount:t.totalCount,edges:t.edges,pageInfo:{startCursor:t.pageInfo.startCursor,endCursor:t.pageInfo.endCursor,hasNextPage:t?.pageInfo.hasNextPage??!1,hasPreviousPage:t?.pageInfo.hasPreviousPage??!1}}))},[t]);const K=A(oe),{mutateAsync:M}=ne(),Q=async e=>M(e),U=async()=>{const e=await K.getTracks({orderAlphabetical:"asc"});return me(e.edges.map(Z=>Z.node))};if(!n&&!c)return r(S,{title:u.title,description:u.description,imgSrc:ce,action:!T&&r(w,{disabled:d,variant:"contained",color:"primary",onClick:y,children:u.callToAction})});let l;n?l=r(ue,{}):c?.length?l=c?.map(e=>r(o,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`track card ${e.id}`,children:r(fe,{summary:e})},e.id)):l=r(o,{xs:12,item:!0,role:"listitem","aria-label":"result",children:r(S,{title:B.title,description:B.description})});const V=p?.pageInfo.hasNextPage||x?.length>0;return g(o,{container:!0,direction:"row",className:s.container,children:[g(o,{container:!0,className:s.header,children:[r(ge,{searchPlaceholder:"Search Available Tracks",isLoading:n||D,searchTerm:m,setSearchTerm:F,filterAlpha:k,handleAlphabeticalFilterChange:z,filterOwner:P,handleOwnerFilterChange:J,owners:j}),g(o,{item:!0,xs:4,className:s.headerButtons,children:[r(pe,{resourceType:"track",disableImport:d,disableExport:n||!c?.length,onImport:Q,onExport:U}),!T&&r(w,{disabled:d,variant:"contained",color:"primary",onClick:y,className:s.createButton,children:"Create Track"})]})]}),r(o,{container:!0,spacing:4,role:"list","aria-label":"tracks",children:l}),V&&r(o,{item:!0,xs:12,children:r(de,{response:p,listingsPerPage:a,cursor:f,setCursor:h,prevCursors:x,setPrevCursors:v,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})})]})};export{ke as TrackListPage};
|
|
2
2
|
//# sourceMappingURL=TrackListPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as d}from"react/jsx-runtime";import{stringifyEntityRef as g}from"@backstage/catalog-model";import{useApi as a,identityApiRef as p}from"@backstage/core-plugin-api";import{catalogApiRef as y}from"@backstage/plugin-catalog-react";import{createContext as R,useState as E,useEffect as v,useContext as x}from"react";import
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import{stringifyEntityRef as g}from"@backstage/catalog-model";import{useApi as a,identityApiRef as p}from"@backstage/core-plugin-api";import{catalogApiRef as y}from"@backstage/plugin-catalog-react";import{createContext as R,useState as E,useEffect as v,useContext as x}from"react";import C from"react-use/lib/useAsync";const f={loading:!0},l=R(f),A=()=>x(l),P=({children:u})=>{const[m,n]=E(f),s=a(y),t=a(p),{value:e,loading:r,error:o}=C(async()=>{const[{token:i},c]=await Promise.all([t.getCredentials(),t.getBackstageIdentity()]);return i?await s.getEntityByRef(c.userEntityRef):null},[s,t]);return v(()=>{if(e){const i=g(e);n({user:e,userEntityRef:i,loading:r,error:o})}else n({loading:r,error:o})},[e,r,o]),d(l.Provider,{value:m,children:u})};export{P as UserProvider,A as useLoggedInUser};
|
|
2
2
|
//# sourceMappingURL=UserProvider.esm.js.map
|