@spotify/backstage-plugin-soundcheck 0.22.5 → 0.23.1
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 +46 -0
- package/dist/alpha/CampaignsRouterPage.esm.js +2 -0
- package/dist/alpha/ChecksRouterPage.esm.js +2 -0
- package/dist/alpha/IntegrationsRouterPage.esm.js +2 -0
- package/dist/alpha/OverviewPageWrapper.esm.js +2 -0
- package/dist/alpha/TracksRouterPage.esm.js +2 -0
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha.d.ts +155 -59
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/Badge/Badge.esm.js +2 -0
- package/dist/components/Badges/LevelBadge.esm.js +1 -1
- package/dist/components/Badges/StatusBadge.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
- package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +1 -1
- package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
- package/dist/components/CheckDetails/CheckPullRequest.esm.js +1 -1
- package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckForm/utils/validation.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
- package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/utils.esm.js +1 -1
- package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
- package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
- package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
- package/dist/components/ChecksTable/FixMeCell.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorStatus.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaBasedConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaField.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SchemaBased/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +1 -1
- package/dist/components/CollectorPage/utils.esm.js +2 -0
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
- package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +1 -1
- package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
- package/dist/components/EntityChip/EntityChip.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewDisplay.esm.js +2 -0
- package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/util.esm.js +1 -1
- package/dist/components/FixMeBetaBadge/FixMeBetaBadge.esm.js +2 -0
- package/dist/components/FixMeButton/FixMeButton.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
- package/dist/components/FormattedPreview/FormattedPreview.esm.js +3 -3
- package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupTagsDisplay.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/ListViewMode.esm.js +2 -0
- package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
- package/dist/components/Menus/useCampaignActions.esm.js +1 -1
- package/dist/components/Menus/useCheckActions.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
- package/dist/components/StatusBar/StatusBar.esm.js +1 -1
- package/dist/components/Stepper/Stepper.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
- package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
- package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
- package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
- package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
- package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
- package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackForm/utils/validation.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +22 -13
- package/dist/hooks/catalog/useEntityPresentation.esm.js +2 -0
- package/dist/hooks/catalog/useEntityPrimaryTitle.esm.js +2 -0
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
- package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
- package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
- package/dist/hooks/filters/useFilters.esm.js +1 -1
- package/dist/hooks/filters/useListPageFilters.esm.js +2 -0
- package/dist/hooks/fixMe/useFixMe.esm.js +1 -1
- package/dist/hooks/useChipScopedUrlState.esm.js +2 -0
- package/dist/hooks/usePagination.esm.js +1 -1
- package/dist/index.d.ts +130 -4
- package/dist/index.esm.js +1 -1
- package/dist/plugins/soundcheck/package.json.esm.js +2 -0
- package/dist/utils/charts.esm.js +1 -1
- package/dist/utils/facetFilters/utils.esm.js +1 -1
- package/dist/utils/filters.esm.js +1 -1
- package/dist/utils/validation.esm.js +1 -1
- package/package.json +24 -22
- package/dist/alpha/pages.esm.js +0 -2
- package/dist/components/CategoryBar/CategoryBar.esm.js +0 -2
- package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +0 -2
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +0 -2
- package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +0 -2
- package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +0 -2
- package/dist/components/CollectorPage/CollectorFactTable.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +0 -2
- package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +0 -2
- package/dist/components/SummaryCard/SummaryCard.esm.js +0 -2
- package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +0 -2
- package/dist/images/GitHub_Logo.svg +0 -9
- package/dist/images/GitHub_Logo_White.svg +0 -9
- package/dist/images/SCM_DARK.svg +0 -10
- package/dist/images/SCM_LIGHT.svg +0 -10
- package/dist/images/azure-devops-rgb.svg +0 -13
- package/dist/images/azure-devops-white.svg +0 -13
- package/dist/images/bigquery-rgb.svg +0 -15
- package/dist/images/bigquery-white.svg +0 -15
- package/dist/images/cat-blk.svg +0 -12
- package/dist/images/cat-wht.svg +0 -12
- package/dist/images/data-registry-blk.svg +0 -36
- package/dist/images/data-registry-wht.svg +0 -36
- package/dist/images/dd_logo_h_rgb.svg +0 -17
- package/dist/images/dd_logo_h_white.svg +0 -17
- package/dist/images/gitlab-rgb.svg +0 -1
- package/dist/images/gitlab-white.svg +0 -1
- package/dist/images/http-rgb.svg +0 -11
- package/dist/images/http-white.svg +0 -11
- package/dist/images/jira-rgb.svg +0 -25
- package/dist/images/jira-white.svg +0 -25
- package/dist/images/k8s_blue.svg +0 -108
- package/dist/images/k8s_white.svg +0 -108
- package/dist/images/new-relic-rgb.svg +0 -1
- package/dist/images/new-relic-white.svg +0 -1
- package/dist/images/pd-black.svg +0 -9
- package/dist/images/pd-white.svg +0 -9
- package/dist/images/sonarqube-rgb.svg +0 -14
- package/dist/images/sonarqube-white.svg +0 -14
- package/dist/images/soundcheck-black.svg +0 -13
- package/dist/images/soundcheck-white.svg +0 -13
- package/dist/images/tech-black.svg +0 -11
- package/dist/images/tech-white.svg +0 -11
- /package/dist/components/CampaignsPage/{CampaignListPage/useArchiveConfirmationModal.esm.js → useArchiveConfirmationModal.esm.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as o,Fragment as
|
|
1
|
+
import{jsx as e,jsxs as o,Fragment as G}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{usePermission as Te}from"@backstage/plugin-permission-react";import{Container as y,HeaderPage as be,Box as c,Flex as U,Text as g,Grid as v}from"@backstage/ui";import{makeStyles as ke}from"@material-ui/core";import{toEntityFilterQuery as ve,soundcheckCampaignReadPermission as we}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as Pe}from"lodash";import{DateTime as u}from"luxon";import{useState as w,useMemo as E,useEffect as Fe}from"react";import{useParams as Le,useSearchParams as Ne}from"react-router-dom";import Re from"react-use/lib/useDebounce";import{useCheckStatuses as Ae}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useEntityPrimaryTitle as He}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useFilters as xe}from"../../hooks/filters/useFilters.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as Ke}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Oe}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as De}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useChipScopedUrlState as _e}from"../../hooks/useChipScopedUrlState.esm.js";import{useLCPReporting as Me}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Be}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as Ge,campaignOverviewRouteRef as Ue,campaignExplorerRouteRef as Ve}from"../../routes.esm.js";import{DescriptionCard as je}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as $e}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as qe}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Qe}from"../ChipSelector/ChipSelector.esm.js";import{EmptyStateBUI as V}from"../EmptyState/EmptyStateBUI.esm.js";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as We}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as ze,CERTIFICATION_STATUS_MAP as Je}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Xe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ye}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as Ze}from"../Menus/useCampaignActions.esm.js";import{PageCustomActions as ei}from"../PageCustomActions/PageCustomActions.esm.js";import{SendCampaignNotificationDialogBUI as ii}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TopFailingChecksTableBUI as ti}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as ri}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";import{CampaignStatusCard as ai}from"./CampaignStatusCard.esm.js";const oi=ke(()=>({container:{marginBottom:"var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},tabPanel:{padding:"var(--bui-space-6) 0 0"},tabs:{margin:"0 0 var(--bui-space-12)"},cards:{margin:"0 0 var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"}})),a={CHECKS:"Checks",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},j={checks:a.CHECKS,"top-failing-checks":a.TOP_FAILING_CHECKS,entities:a.ENTITIES},si={[a.CHECKS]:"checks",[a.TOP_FAILING_CHECKS]:"top-failing-checks",[a.ENTITIES]:"entities"},ni="checks",ci=()=>{const{owners:m,lifecycles:l,types:p,systems:d,certificationStatuses:P}=We(),{campaignId:s}=Le(),$=k(Ge),[S,F]=Ne(),[n,L]=w(S.get("search")||""),[N,q]=w(""),[R,Q]=w(()=>{const t=S.get("section"),Ie=t?j[t]:null;return new Set([Ie??a.CHECKS])}),C=R.values().next().value??a.CHECKS;Re(()=>{q(n);const t=new URLSearchParams(S.toString());n?t.set("search",n):t.delete("search"),F(t,{replace:!0})},300,[n]);const A=E(()=>({routeName:"soundcheck-campaign-insights",additionalAttributes:{campaignId:s||"",filtersApplied:m.length+l.length+p.length+d.length,ownersFilter:m?.join(",")||"",lifecyclesFilter:l?.join(",")||"",typesFilter:p?.join(",")||"",systemsFilter:d?.join(",")||"",campaignsSearch:N||""}}),[s,m,l,p,d,N]),{reportContentLoaded:H}=Be(A),{reporter:W}=Me(A),h=oi(),I=E(()=>ze({lifecycles:l,owners:m,types:p,systems:d}),[l,m,p,d]),{data:z,isLoading:f,isError:J}=Ke({ids:[s],first:1}),i=z?.edges?.[0]?.node,{actions:x,showNotificationDialog:K,setShowNotificationDialog:X}=Ze(i??void 0),r=i?.track,Y=E(()=>r?.levels.flatMap(t=>t.checks),[r?.levels]),Z=Array.from(new Set(r?.levels.flatMap(t=>t.checks).map(t=>t.id)??[])),{data:O,isLoading:ee}=Ae({trackId:r?.id,checkIds:Z,filter:I},!!r),ie=E(()=>ve(r?.filter),[r]),{filters:te,selected:re,setSelected:ae,onRemoveTag:oe,selectedTags:se}=xe({entityFilterQuery:ie,hasCertificationStatusFilters:!0}),{data:D,isLoading:T,isError:ne}=Oe({trackId:r?.id??"",filter:I},!!i),ce=u.fromISO(i?.startDate),me=Math.max(Math.ceil(u.now().diff(ce,"days").days),1),{data:_,isLoading:le,isError:pe}=De({trackId:r?.id??"",filter:I,numberOfDays:me},!!i),b=J||ne||pe,{loading:de,allowed:he}=Te({permission:we,resourceRef:s}),M=W?.getLCPValue();Fe(()=>{!f&&!T&&H({lcp:M})},[f,T,H,M]);const{handleSectionChange:fe}=_e({searchParams:S,setSearchParams:F,sectionParamToSection:j,sectionToParam:si,defaultSectionParam:ni,defaultSection:a.CHECKS,pageFiltersStorageKey:"campaign-page-filters",pageSearchParamsStorageKey:"campaign-overview-search-params",setSectionSelection:Q,setSearchValue:L}),ge=k(Ue),ue=k(Ve),Se=He(i?.ownerEntityRef);if(f)return e(y,{className:h.container,children:e(Xe,{})});if(!f&&!i)return e(y,{className:h.container,children:e(V,{title:"Campaign not found",body:`There is no campaign with the requested id: ${s}.`})});if(!de&&!he)return e(y,{className:h.container,children:e(V,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${s}.`})});const Ce=u.fromISO(i?.startDate),B=u.fromISO(i?.targetCompletionDate),ye=u.now(),Ee=Math.max(Math.ceil(B.diff(ye,"days").days),0);return o(G,{children:[e(be,{title:i?.name,customActions:e(Ye,{disabled:!x.length,placement:"left top",menuActions:x,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:$()}],tabs:[{id:"overview",label:"Campaign Overview",href:s?ge({campaignId:s}):""},{id:"explorer",label:"Tech Insights Explorer",href:s?ue({campaignId:s}):""}]}),o(y,{className:h.container,children:[o(c,{className:h.cards,children:[e(je,{description:i?.description??void 0,owner:Se,isError:b,isLoading:f}),e(ai,{campaign:i,status:D,history:_,isError:b,isLoading:T,children:o(G,{children:[o(U,{align:"baseline",mt:"3",children:[e(g,{as:"h1",variant:"title-medium",weight:"bold",children:Ee}),e(g,{variant:"body-small",children:"Days remaining"})]}),o(v.Root,{children:[o(v.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"Start date"})}),e(c,{children:e(g,{variant:"body-small",children:Ce.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]}),o(v.Item,{children:[e(c,{children:e(g,{color:"secondary",variant:"body-small",children:"End date"})}),e(c,{children:e(g,{variant:"body-small",children:B.toLocaleString({month:"short",day:"numeric",year:"numeric"})})})]})]})]})}),e($e,{track:i?.track,history:_,isCampaign:!0,isError:b,isLoading:le})]}),r&&o(c,{children:[o(U,{justify:"between",children:[e(c,{minWidth:"16rem",children:e(Qe,{options:["Checks","Top Failing Checks","Entities"],selected:R,ariaLabel:"Sections",onSelectionChange:fe})}),e(ei,{searchValue:n,setSearchValue:t=>L(t),filters:te,selected:re,setSelected:ae,onRemoveTag:oe,selectedTags:se,showSearch:C!==a.ENTITIES})]}),o(c,{className:h.tableContent,children:[C===a.CHECKS&&e(qe,{trackId:r.id,checks:Y,checkStatuses:O,isLoading:f||ee,searchValue:n}),C===a.TOP_FAILING_CHECKS&&e(ti,{track:r,checkStatuses:O,certificationStatus:D?.certificationStatus,searchValue:n}),C===a.ENTITIES&&e(ri,{isCampaign:!0,track:r,lifecycles:l,owners:m,types:p,systems:d,certificationStatus:Pe(P)?void 0:Je[P[0]],searchValue:n})]})]}),i&&K&&e(ii,{campaign:i,isOpen:K,handleClose:()=>X(!1)})]})]})};export{ci as CampaignPageBUI};
|
|
2
2
|
//# sourceMappingURL=CampaignPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{Skeleton as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{Skeleton as f,Flex as v}from"@backstage/ui";import{makeStyles as h}from"@material-ui/core";import{useMemo as o}from"react";import{calculateAdjustedBarWidths as S}from"../../utils/charts.esm.js";const k=h(()=>({container:{gap:"var(--bui-space-1)",width:"100%"},barSegment:{height:"var(--bui-space-1_5)",borderRadius:"var(--bui-space-1)"},emptyBar:{width:"100%",background:"var(--bui-fg-disabled)"}})),y=({campaign:c,status:m})=>{const a=k(),n=c?.track,e=m?.certificationStatus?.statusByLevel[0],u=["var(--bui-fg-success)","var(--bui-fg-danger)","var(--bui-fg-disabled)"],t=o(()=>[e?.passed??0,e?.failed??0,e?.notReported??0],[e]),l=t.every(i=>i===0),b=o(()=>S(t),[t]);if(!n||!m)return r(f,{width:"100%"});let s;return l?s=r("div",{className:`${a.barSegment} ${a.emptyBar}`}):s=t.map((i,d)=>{const p=u[d]||"var(--bui-fg-disabled)",g=b[d]||0;return i<=0?null:r("div",{className:a.barSegment,style:{backgroundColor:p,width:`${g}%`}},`track-status-bar-segment-${d}`)}),r(v,{className:a.container,children:s})};export{y as CampaignStatusBarBUI};
|
|
2
2
|
//# sourceMappingURL=CampaignStatusBarBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as c,Fragment as j}from"react/jsx-runtime";import{useRouteRef as b,useApi as M}from"@backstage/core-plugin-api";import{entityPresentationApiRef as $}from"@backstage/plugin-catalog-react";import{usePermission as z}from"@backstage/plugin-permission-react";import{Container as d,HeaderPage as J,Box as v,Flex as K,SearchField as Q}from"@backstage/ui";import{makeStyles as W}from"@material-ui/core";import{soundcheckCampaignReadPermission as X}from"@spotify/backstage-plugin-soundcheck-common";import{useState as k,useMemo as C,useEffect as Y}from"react";import{useParams as Z,useSearchParams as _}from"react-router-dom";import ee from"react-use/lib/useDebounce";import{useGroupHierarchy as ie}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useHierarchicalTrackStatus as re}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as
|
|
1
|
+
import{jsx as e,jsxs as c,Fragment as j}from"react/jsx-runtime";import{useRouteRef as b,useApi as M}from"@backstage/core-plugin-api";import{entityPresentationApiRef as $}from"@backstage/plugin-catalog-react";import{usePermission as z}from"@backstage/plugin-permission-react";import{Container as d,HeaderPage as J,Box as v,Flex as K,SearchField as Q}from"@backstage/ui";import{makeStyles as W}from"@material-ui/core";import{soundcheckCampaignReadPermission as X}from"@spotify/backstage-plugin-soundcheck-common";import{useState as k,useMemo as C,useEffect as Y}from"react";import{useParams as Z,useSearchParams as _}from"react-router-dom";import ee from"react-use/lib/useDebounce";import{useGroupHierarchy as ie}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useHierarchicalTrackStatus as re}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as oe}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useLCPReporting as te}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as ne}from"../../hooks/useLoadTimeReporting.esm.js";import{campaignsPageRouteRef as me,campaignOverviewRouteRef as se,campaignExplorerRouteRef as pe}from"../../routes.esm.js";import{EmptyStateBUI as x}from"../EmptyState/EmptyStateBUI.esm.js";import{LoadingTableSkeleton as ce}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as de}from"../Menus/SimpleMenu.esm.js";import{useCampaignActions as le}from"../Menus/useCampaignActions.esm.js";import{SendCampaignNotificationDialogBUI as ge}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import"../TechInsights/TechInsightsPageBUI.esm.js";import{hierarchyToNivo as fe}from"../TechInsights/hierarchyToNivo.esm.js";import{TechInsightsExplorerTable as ue}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as he}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as be}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const ve=W(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),Ce=()=>{const a=ve(),{campaignId:i}=Z(),[l,A]=_(),[n,y]=k(l.get("search")||""),r=l.get("group"),[g,E]=k(""),B=b(me);ee(()=>{E(n);const o=new URLSearchParams(l.toString());n?o.set("search",n):o.delete("search"),A(o,{replace:!0})},300,[n]);const S=C(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{campaignId:i||"",group:r||"",groupsSearch:g||""}}),[i,r,g]),{reportContentLoaded:R}=ne(S),{reporter:G}=te(S),{data:D,isLoading:s}=oe({ids:[i],first:1}),t=D?.edges?.[0]?.node,{actions:w,showNotificationDialog:I,setShowNotificationDialog:F}=le(t??void 0),m=t?.track,N=M($),{data:T}=ae({}),f=C(()=>T?.edges.find(o=>o.node.id===m?.id)?.node,[T?.edges,m?.id]),{data:L,isLoading:u}=ie(r||void 0,{enabled:!!r&&!!m?.id&&!!f,ownedEntitiesFilter:f?.filter??void 0}),{loading:H,allowed:O}=z({permission:X,resourceRef:i}),{data:h,isLoading:p}=re({trackId:m?.id??"",groupRef:r??"",skip:!m?.id}),U=C(()=>{if(!r)return;const o=L?.[r];return o?fe(o,h||null,()=>"var(--bui-fg-primary)",N,void 0):void 0},[L,N,r,h]),P=G?.getLCPValue();Y(()=>{!s&&!u&&!p&&R({lcp:P})},[s,u,p,R,P]);const q=b(se),V=b(pe);return s?e(d,{className:a.container,children:e(ce,{})}):!s&&!t?e(d,{className:a.container,children:e(x,{title:"Campaign not found",body:`There is no campaign with the requested id: ${i}.`})}):!H&&!O?e(d,{className:a.container,children:e(x,{title:"Cannot view campaign",body:`No permission to view campaign with the requested id: ${i}.`})}):c(j,{children:[e(J,{title:t?.name,customActions:e(de,{disabled:!w.length,placement:"left top",menuActions:w,label:"Campaign Actions"}),breadcrumbs:[{label:"Campaigns",href:B()}],tabs:[{id:"overview",label:"Campaign Overview",href:i?q({campaignId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?V({campaignId:i}):""}]}),c(d,{className:a.container,children:[e(v,{className:a.teams,children:e(be,{trackStatus:h??void 0,isLoading:p,campaignId:i})}),c(v,{children:[c(K,{align:"center",gap:"3",className:a.filters,children:[e(he,{}),e(Q,{value:n,onChange:y,"aria-label":"Search",placeholder:"Search"})]}),e(v,{className:a.tableContent,children:e(ue,{tableData:U,isLoading:u||p,selectedGroup:r??void 0,searchValue:g,trackId:f?.id,campaignId:i})})]}),t&&I&&e(ge,{campaign:t,isOpen:I,handleClose:()=>F(!1)})]})]})};export{Ce as CampaignTechInsightsExplorerPage};
|
|
2
2
|
//# sourceMappingURL=CampaignTechInsightsExplorerPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i,jsxs as
|
|
1
|
+
import{jsx as i,jsxs as f,Fragment as N}from"react/jsx-runtime";import{useApi as oe,useRouteRef as x}from"@backstage/core-plugin-api";import{entityPresentationApiRef as ae}from"@backstage/plugin-catalog-react";import{usePermission as ne}from"@backstage/plugin-permission-react";import{HeaderPage as se,Container as me,TableRoot as ce,TableHeader as le,Column as p,TableBody as pe,TablePagination as de}from"@backstage/ui";import{makeStyles as ge}from"@material-ui/core";import{RiCalendarLine as fe}from"@remixicon/react";import{soundcheckCampaignCreatePermission as he}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as ue,isEmpty as O}from"lodash";import{DateTime as F}from"luxon";import{useState as R,useMemo as s,useCallback as we,useEffect as Pe}from"react";import ye from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as Se}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePagination as ve,DEFAULT_PAGE_SIZE as z}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as Ce}from"../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useProfileImages as Re}from"../../hooks/catalog/useProfileImages.esm.js";import{useOwnerFilterOptions as Ae,useListPageFilters as be}from"../../hooks/filters/useListPageFilters.esm.js";import{useLCPReporting as Le}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ee}from"../../hooks/useLoadTimeReporting.esm.js";import{useSearchNameOwner as Te}from"../../hooks/useSearchNameOwner.esm.js";import{campaignCreateRouteRef as De,campaignDetailsRouteRef as ke}from"../../routes.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ie}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoCampaigns as Ne}from"../EmptyState/EmptyStateNoCampaigns.esm.js";import{ListPageCustomActions as xe}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Oe}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import"js-yaml";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{useCampaignActions as Fe}from"../Menus/useCampaignActions.esm.js";import{SendCampaignNotificationDialogBUI as ze}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js";import{TableRowWithOwner as Ve}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const Be=["name","status","days-remaining","owner"];var Me=(t=>(t.Active="Active",t.Archived="Archived",t))(Me||{});const Ue=[{label:"Active",value:"Active"},{label:"Archived",value:"Archived"}],V=t=>{const c=F.fromISO(t),r=F.now();return Math.max(Math.ceil(c.diff(r,"days").days),0)},He=({campaign:t,profileImageMap:c})=>{const r=s(()=>t.archived?0:V(t.targetCompletionDate),[t.archived,t.targetCompletionDate]),u=x(ke),o=s(()=>t.track.levels.reduce((a,y)=>a+(y.checks?.length??0),0),[t.track.levels]),{actions:w,showNotificationDialog:l,setShowNotificationDialog:P}=Fe(t);return f(N,{children:[i(Ve,{ownerEntityRef:t.ownerEntityRef,href:u({campaignId:t.id}),profileImageSrc:c[t.ownerEntityRef],menuActions:w,name:t.name??"",description:t.description??"",cells:[{title:t.archived?"Archived":"Active"},{title:`${r} day${r===1?"":"s"} remaining`,icon:i(fe,{size:16})},{title:`${o} Check${o===1?"":"s"}`}]}),t&&l&&i(ze,{campaign:t,isOpen:l,handleClose:()=>P(!1)})]})},$e=ge(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ge=()=>{const t=$e(),{updateSortParams:c,searchParams:r,setSearchParams:u}=Ce(),[o,w]=R(()=>r.get("search")??""),[l,P]=R(()=>r.get("sortDirection")==="descending"?"descending":"ascending"),[a,y]=R(()=>{const e=r.get("sort");return e&&Be.includes(e)?e:""}),{data:A,isLoading:d}=Se({}),g=s(()=>A?.edges?.map(e=>e.node)??[],[A?.edges]),{profileImageMap:B}=Re(g.map(e=>e.ownerEntityRef)),b=oe(ae),M=s(()=>g.map(e=>e.ownerEntityRef),[g]),L=Ae(M),U=s(()=>[{key:"owners",label:"Owner",options:L,tagLabelPrefix:"owner"},{key:"statuses",label:"Status",options:Ue,tagLabelPrefix:"status"}],[L]),{filters:H,selected:$,setSelected:G,selectedTags:_,onRemoveTag:j,filterItems:E,hasActiveFilters:W}=be(U,"campaigns"),Y=s(()=>E(g,{owners:{getValue:e=>e.ownerEntityRef},statuses:{getValue:e=>e.archived?"Archived":"Active",defaultFilter:e=>!e.archived}}),[g,E]),S=Te(Y,o),h=s(()=>{if(!a)return S;const e=ue(S,m=>a==="owner"?b.forEntity(m.ownerEntityRef).snapshot.primaryTitle.toLowerCase():a==="status"?m.archived?"archived":"active":a==="days-remaining"?m.archived?-1:V(m.targetCompletionDate):m.name.toLowerCase());return l==="descending"&&e.reverse(),e},[b,a,l,S]),{paginatedItems:v,reset:C,paginationProps:n}=ve({pageParam:"perPage",defaultPageSize:z,items:h});ye(()=>{C();const e=new URLSearchParams(r.toString());o?e.set("search",o):e.delete("search"),u(e,{replace:!0})},300,[o]);const Z=we(({direction:e,column:m})=>{const I=String(m);y(I),P(e),C(),c({sort:I,sortDirection:e})},[C,c]),{loading:q,allowed:J}=ne({permission:he}),K=x(De),T=s(()=>({routeName:"soundcheck-campaigns",additionalAttributes:{}}),[]),{reportContentLoaded:D}=Ee(T),{reporter:Q}=Le(T),k=Q?.getLCPValue();Pe(()=>{d||D({lcp:k})},[d,D,k]);const X=!d&&!O(v),ee=h.length>z,te=!d&&O(v),ie=d,re=o||W?i(Ie,{title:"No campaigns found",body:"Your current search or filter did not return any campaigns. Please try a different search term or filter."}):i(Ne,{});return f(N,{children:[i(se,{customActions:i(xe,{searchValue:o,setSearchValue:w,canCreate:!q&&J,createHref:K(),filterProps:{filters:H,selected:$,setSelected:G,selectedTags:_,onRemoveTag:j}}),title:"Campaigns"}),f(me,{className:t.container,children:[ie&&i(Oe,{rowCount:10}),te&&re,X&&f(ce,{onSortChange:Z,sortDescriptor:{direction:l,column:a},children:[f(le,{children:[i(p,{allowsSorting:!0,isRowHeader:!0,id:"name",style:{width:"47%"},children:"Name"}),i(p,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),i(p,{allowsSorting:!0,id:"days-remaining",style:{width:"15%"},children:"Days Remaining"}),i(p,{id:"checks",style:{width:"10%"},children:"Checks"}),i(p,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Campaign Owner"}),i(p,{id:"actions",style:{width:"3%"}})]}),i(pe,{children:v.map(e=>i(He,{campaign:e,profileImageMap:B??{}},e.id))})]}),ee&&i(de,{totalCount:h.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(h.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})]})};export{Ge as CampaignListPageBUI};
|
|
2
2
|
//# sourceMappingURL=CampaignListPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as m}from"react/jsx-runtime";import o
|
|
1
|
+
import{jsx as m}from"react/jsx-runtime";import{CampaignListPageBUI as o}from"./CampaignListPageBUI.esm.js";import r from"./useArchiveConfirmationModal.esm.js";const i=()=>m(r,{children:m(o,{})});export{i as CampaignsPage};
|
|
2
2
|
//# sourceMappingURL=CampaignsPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as a}from"react/jsx-runtime";import{Text as s,Flex as n,Card as l,CardHeader as m,CardBody as h}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{CheckStatusTableBUI as p}from"../../CheckPage/CheckStatusTableBUI.esm.js";import
|
|
1
|
+
import{jsx as t,jsxs as a}from"react/jsx-runtime";import{Text as s,Flex as n,Card as l,CardHeader as m,CardBody as h}from"@backstage/ui";import{makeStyles as u}from"@material-ui/core";import{CheckStatusTableBUI as p}from"../../CheckPage/CheckStatusTableBUI.esm.js";import{CheckStatusBarBUI as C}from"../../CheckStatusBar/CheckStatusBarBUI.esm.js";import{LoadingTableSkeleton as k}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const S=u(()=>({card:{minHeight:"15.1rem"}})),f=({status:e,states:o,isLoading:c,isError:i})=>{const d=S();let r;return c?r=t(k,{rowCount:3}):i?r=t(s,{color:"warning",children:"Failed to load check data."}):r=a(n,{direction:"column",gap:"6",children:[t(C,{status:e,states:o}),t(p,{checkStatus:e,states:o})]}),a(l,{className:d.card,children:[t(m,{children:t(s,{color:"secondary",children:"Current Status"})}),t(h,{children:r})]})};export{f as CheckStatusCard};
|
|
2
2
|
//# sourceMappingURL=CheckStatusCard.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as a,Fragment as W}from"react/jsx-runtime";import{stringifyEntityRef as B}from"@backstage/catalog-model";import{useEntity as $}from"@backstage/plugin-catalog-react";import{makeStyles as q,Box as l,Typography as h,Button as g,Tooltip as U}from"@material-ui/core";import{Alert as b}from"@material-ui/lab";import{useState as E}from"react";import{CheckerType as G,ResultState as s}from"../../graphql/generated/index.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{useCheck as J}from"../../hooks/checks/useCheck.esm.js";import{useCheckDetails as V}from"../../hooks/checks/useCheckDetails.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetExemption as _}from"../../hooks/exemptions/useGetExemption.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{getBranchName as H}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useSetManualResult as K}from"../../hooks/checks/useSetManualResult.esm.js";import{useFixWithAika as Q}from"../../hooks/fixWithAika/useFixWithAika.esm.js";import{AlertPanel as X}from"../AlertPanel/AlertPanel.esm.js";import{CheckResultInputPopup as Y}from"../CertificationSidebar/CheckResultInputPopup.esm.js";import{ExemptionJustificationDialog as Z}from"../CertificationSidebar/ExemptionJustificationDialog.esm.js";import{RelativeTime as ee}from"../RelativeTime/RelativeTime.esm.js";import{SoundcheckMarkdownContentDeprecated as te}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import{CheckPullRequest as ie}from"./CheckPullRequest.esm.js";import{ResultStateBox as re}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as oe}from"./skeletons/CheckDetailsSkeleton.esm.js";const u=q(t=>({root:{padding:`${t.spacing(3)}px ${t.spacing(5)}px`},title:{fontWeight:"normal",fontSize:t.typography.h5.fontSize},description:{padding:`${t.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:t.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:t.spacing(2)},exemptButton:{marginLeft:t.spacing(1)},exemptAlert:{marginBottom:t.spacing(2)}})),N=({setPopupDisplayed:t})=>{const i=u();return e(g,{className:i.exemptButton,size:"small",onClick:()=>t(!0),"aria-label":"Set Check Status Button",children:"Set Check Status"})},w=({isExempt:t,setPopupDisplayed:i})=>{const r=u();return e(U,{title:t?"Remove Exemption":"Set Exempt From Check",children:e(g,{className:r.exemptButton,size:"small",color:"inherit",onClick:()=>i(!0),"aria-label":"Exempt From Check",children:t?"Remove Exemption":"Add Exemption"})})},ne=({trackId:t,checkId:i})=>{const r=u(),{entity:c}=$(),{data:f,isLoading:D,isError:A}=V(c,t,i),[T,S]=E(!1),[I,k]=E(!1),y=B(c),{data:p,isLoading:z}=_(y,i??""),{data:n}=J(i),{pullRequest:m}=Q({result:f?.result,type:n?.type,rule:n?.rule,entityRef:y,checkId:n?.id}),{mutateAsync:P}=K();if(A)return e(l,{padding:2,children:e(X,{severity:"error",title:"Error loading check details"})});if(D||!t||!i)return e(oe,{});if(!f)return null;const C=n?.type===G.Manual,{name:R,description:F,result:o,timestamp:v,details:L}=f,M=(o===s.Failed||o===s.Warning)&&m,j=async(x,d)=>{!c||!i||await P({checkId:i,entityRef:y,justification:d,state:x})},O=x=>{const d=window.open(x,"_blank","noopener,noreferrer");d&&(d.opener=null)};return a("div",{className:r.root,"data-testid":"check-details-view",children:[a("div",{className:r.topBar,children:[e(h,{variant:"h2",className:r.title,children:R}),a(l,{display:"flex",alignItems:"center",children:[v?e(ee,{timestamp:v,description:"Last updated"}):null,C&&!p?.exemption&&o!==s.NotReported&&e(N,{setPopupDisplayed:k}),!z&&o!==s.NotApplicable&&e(w,{isExempt:!!p?.exemption,setPopupDisplayed:S})]})]}),e(Z,{entityRef:B(c),checkId:i,isOpen:T,setIsOpen:S}),e(Y,{isOpen:I,setIsOpen:k,setCallback:j}),!p?.exemption&&o===s.Exempt&&e(b,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This check's exemption for this entity was recently removed. The recent exemption state will clear once the check has been run."}),!!p?.exemption&&e(l,{marginBottom:2,children:e(b,{className:r.exemptAlert,severity:"warning",variant:"outlined",children:"This entity has been exempted from this check."})}),C&&!p?.exemption&&o===s.NotReported?a(l,{children:[e(h,{children:"This check is manual and must have its state set by a user."}),e(l,{marginTop:1,children:e(g,{variant:"contained",color:"primary",onClick:()=>k(!0),"aria-label":"Set Check Status",size:"small",children:"Set Check Status"})})]}):a(W,{children:[e(h,{className:r.subtitle,children:"Most Recent Result:"}),e(re,{name:R,state:o,details:L,templateRef:n?.templateRef??void 0}),M&&e(ie,{title:m.label,branch:m.prBranch??H(n?.name??""),onView:()=>{m.prUrl&&O(m.prUrl)}})]}),a("div",{className:r.description,"data-testid":"soundcheck-check-details-description",children:[e(h,{variant:"h3",className:r.subtitle,children:"Description"}),e(te,{content:F})]})]})};export{ne as CheckDetails,w as ExemptDialogButton,N as SetCheckStatusButton,u as useStyles};
|
|
2
2
|
//# sourceMappingURL=CheckDetails.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Flex as n,Card as d,CardBody as h,Text as l,Box as c,Button as u}from"@backstage/ui";import{makeStyles as m}from"@material-ui/core";import{RiCornerDownRightFill as g,RiTriangleLine as b}from"@remixicon/react";import{Badge as f}from"../Badge/Badge.esm.js";const s=m(()=>({arrowIcon:{color:"var(--bui-fg-disabled)"},card:{borderLeft:"var(--bui-space-1) solid var(--bui-fg-success)"},statusIcon:{color:"var(--bui-fg-success)"},button:{background:"var(--bui-fg-success)"}})),p=({title:t,branch:o,onView:a})=>{const i=s();return r(n,{gap:"4",mt:"4",children:[e(g,{size:32,className:i.arrowIcon}),e(d,{className:i.card,children:e(h,{children:r(n,{gap:"4",direction:"column",children:[r(n,{align:"center",justify:"between",children:[r(n,{align:"center",gap:"2",children:[e(b,{className:i.statusIcon}),e(l,{weight:"bold",children:"Pull Request created by Fleetshift"})]}),e(f,{variant:"success",children:"Beta"})]}),r(c,{children:[e(c,{children:e(l,{color:"secondary",children:"Title"})}),e(c,{children:e(l,{children:t})})]}),r(c,{children:[e(c,{children:e(l,{color:"secondary",children:"Branch"})}),e(c,{children:e(l,{children:o})})]}),e(u,{className:i.button,onClick:a,style:{alignSelf:"flex-start"},children:"View Pull Request"})]})})})]})};export{p as CheckPullRequest,s as useStyles};
|
|
2
2
|
//# sourceMappingURL=CheckPullRequest.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as l,jsx as o}from"react/jsx-runtime";import{Progress as
|
|
1
|
+
import{jsxs as l,jsx as o}from"react/jsx-runtime";import{Progress as L}from"@backstage/core-components";import{useApi as u,errorApiRef as R}from"@backstage/core-plugin-api";import{useEntity as T}from"@backstage/plugin-catalog-react";import{scaffolderApiRef as b,useTemplateSecrets as D,useCustomFieldExtensions as B}from"@backstage/plugin-scaffolder-react";import{useTemplateParameterSchema as F,useFilteredSchemaProperties as O,Stepper as U}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as j,Dialog as A,DialogTitle as P,Typography as J,IconButton as N,DialogContent as W}from"@material-ui/core";import M from"@material-ui/icons/Close";import Q from"git-url-parse";import{useState as V,useEffect as q}from"react";import{useOutlet as z}from"react-router-dom";import{OngoingTaskComponent as G}from"./OngoingTaskComponent.esm.js";import{ReviewStateComponent as H}from"./ReviewStateComponent.esm.js";class h{type;name;owner;lifecycle;title;description;sourceLocation;managedByLocation;slackChannel;entity;constructor(e){this.lifecycle=e.spec?.lifecycle||"unknown",this.name=e.metadata.name,this.owner=e.spec?.owner||"unknown",this.type=e.spec?.type||"unknown",this.title=e.metadata.title,this.description=e.metadata.description||"",this.sourceLocation=e.metadata.annotations?.["backstage.io/source-location"]?.replace("url:",""),this.managedByLocation=e.metadata.annotations?.["backstage.io/managed-by-location"],this.slackChannel=e.metadata.annotations?.["spotify.net/slack-channel"],this.entity=e}}const K=t=>{const e={};if(e.componentId=t.name,t.sourceLocation){const{name:n,owner:a,protocol:r,source:i}=Q(t.sourceLocation);e.repoUrl=`${r}://${i}/${a}/${n}`,e.repo={host:i,org:a,repo:n,url:e.repoUrl,gitUrl:`git@${i}:${a}/${n}.git`,paramUrl:`${r}://${i}?owner=${a}&repo=${n}`}}e.facts=JSON.parse(t.entity.metadata.annotations?.["sysmodel.spotify.net/raw-component-facts"]||"{}");const s=t;return delete s.entity,{...e,...s}},X=j({titleContent:{display:"flex",justifyContent:"space-between",alignItems:"center"}}),Y=t=>{const{title:e,open:s,setOpen:n,onClose:a,templateRef:r}=t,i=X(),m=u(R),y=u(b),{loading:g,manifest:w,error:c}=F(r),{secrets:k}=D(),C=z(),$=B(C),p=O(w),{entity:S}=T(),[d,f]=V(void 0),x=async E=>{const{taskId:I}=await y.scaffold({templateRef:r,values:E,secrets:k});f(I)},v=()=>{n(!1),f(void 0)};return q(()=>{c&&m.post(new Error(`Failed to load template, ${c}`))},[c,m]),l(A,{open:s,onClose:a,fullWidth:!0,maxWidth:"md",children:[o(P,{children:l("div",{className:i.titleContent,children:[o(J,{variant:"h5",children:e}),o(N,{onClick:v,children:o(M,{})})]})}),l(W,{children:[g&&o(L,{}),d?o(G,{taskId:d}):p&&o(U,{manifest:p,onCreate:x,extensions:$,components:{createButtonText:"Execute",ReviewStateComponent:H},initialState:{backstage:K(new h(S))},...t})]})]})};export{Y as FixMeDialog,h as SimplifiedEntity};
|
|
2
2
|
//# sourceMappingURL=FixMeDialog.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as n,jsx as a,Fragment as G}from"react/jsx-runtime";import{Box as o,FormLabel as p,TextField as H,IconButton as
|
|
1
|
+
import{jsxs as n,jsx as a,Fragment as G}from"react/jsx-runtime";import{Box as o,FormLabel as p,TextField as H,IconButton as I}from"@material-ui/core";import M from"@material-ui/icons/Close";import W from"@material-ui/icons/Delete";import z from"@material-ui/icons/List";import{asArray as q}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as u,useCallback as b}from"react";import{useFormContext as J,Controller as K}from"react-hook-form";import{useOperators as Q}from"../../../../../hooks/operators/useOperators.esm.js";import{FactExplorerDialogButton as S}from"../../../../FactExplorer/FactExplorerDialog.esm.js";import"../../../../FactExplorer/FactExplorerContext.esm.js";import{FormControlledAutocomplete as v}from"../../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{FactValueDisplay as U}from"./FactValueDisplay.esm.js";import{useRuleConditionStyles as X}from"./styles.esm.js";import{useRuleOptions as Y}from"./useRuleOptions.esm.js";import{ValueListInputDialogButton as V}from"./ValueListInput.esm.js";const Z=({name:l,handleDelete:j,disabled:d,disableDelete:g})=>{const t=X(),{control:c,setValue:s,watch:m,clearErrors:f}=J(),{data:L,isLoading:O}=Q(),w=m("rulesStep.pathResolver")==="jsonpath",h=u(()=>L?.map(e=>({value:e.name,label:e.title})).sort((e,r)=>e.label.localeCompare(r.label))??[],[L]),B=u(()=>h.map(({value:e})=>({label:e,value:e})),[h]),{pathOptions:$,factRefOptions:y,isLoading:C}=Y(l,c),P=u(()=>y?.map(({value:e})=>({label:e,value:e}))??[],[y]),D=u(()=>$?.map(e=>({label:e,value:e}))??[],[$]),T=["all","any","none"].map(e=>({label:e,value:e})),E=b(({factRef:e,path:r})=>{s(`${l}.factRef`,e),s(`${l}.path`,r),f()},[f,l,s]),k=b(({factRef:e,path:r})=>{s(`${l}.value`,{factRef:e,path:r}),f()},[f,l,s]),A=b(e=>{s(`${l}.value`,e.length>0?e:""),f()},[f,l,s]),i=m(`${l}.value`),F=b(()=>{s(`${l}.value`,"")},[l,s]),x=e=>typeof e=="string"?e:e.label??"",R=e=>typeof e=="string"?e:e?.value??"";return n(o,{className:t.container,children:[a(o,{className:t.connector}),n(o,{paddingTop:2,paddingLeft:2,paddingRight:2,paddingBottom:2,width:"100%",className:t.innerContainer,children:[n(o,{className:t.inputsContainer,children:[y&&n(o,{children:[a(p,{className:t.formLabel,children:"Fact"}),a(v,{name:`${l}.factRef`,control:c,placeholder:"Fact",options:P,getOptionLabel:x,getOptionValue:R,disabled:d||C,width:428})]}),n(o,{flexGrow:1,children:[a(p,{className:t.formLabel,children:"Path"}),a(v,{name:`${l}.path`,placeholder:"Path",control:c,disabled:d||C,options:w?D:[],fullWidth:!0,getOptionLabel:x,getOptionValue:R})]}),n(o,{children:[a(p,{className:t.formLabel,style:{visibility:"hidden"},children:"Explore"}),a(o,{width:150,children:a(S,{factRef:m(`${l}.factRef`),path:m(`${l}.path`),onSave:E,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,hideIcon:!0})})]})]}),n(o,{className:t.inputsContainer,children:[h&&n(G,{children:[n(o,{children:[a(p,{className:t.formLabel,children:"Prefix (Optional)"}),a(v,{name:`${l}.operatorPrefix`,control:c,placeholder:"Prefix",options:T,disabled:O||d,width:120,getOptionLabel:x,getOptionValue:R})]}),n(o,{children:[a(p,{className:t.formLabel,children:"Operator"}),a(v,{name:`${l}.operator`,control:c,placeholder:"Operator",options:B,disabled:O||d,getOptionLabel:e=>(r=>h?.find(N=>r===N.value)?.label??r??"")(typeof e=="string"?e:e.label),getOptionValue:e=>(r=>h?.find(N=>r===N.label)?.value??r??"")(typeof e=="string"?e:e?.label??""),width:300})]})]}),n(o,{flexGrow:1,children:[a(p,{className:t.formLabel,children:"Value"}),typeof i=="object"&&!Array.isArray(i)?a(U,{value:i,handleClear:F}):a(K,{name:`${l}.value`,control:c,defaultValue:"",render:({field:e,fieldState:r})=>a(H,{...e,variant:"outlined",placeholder:"Enter a value",FormHelperTextProps:{className:t.helperText},error:r.invalid,helperText:r.error?r.error.message:null,margin:"dense",disabled:d||typeof i=="object",className:t.noMargin,fullWidth:!0,InputProps:{endAdornment:a(I,{onClick:F,size:"small",children:a(M,{})}),startAdornment:Array.isArray(i)?a(V,{values:i,onSave:A,iconButton:a(z,{})}):null}})})]}),n(o,{children:[a(p,{className:t.formLabel,style:{visibility:"hidden"},children:"Alternative Input"}),n(o,{display:"flex",width:150,children:[a(S,{factRef:typeof i=="object"?i?.factRef:void 0,path:typeof i=="object"?i?.path:void 0,onSave:k,pathResolver:m("rulesStep.pathResolver"),className:t.exploreButton,text:"Fact",hideIcon:!0}),a(V,{values:typeof i=="object"&&!Array.isArray(i)?void 0:q(i),onSave:A})]})]})]})]}),a(I,{onClick:j,className:t.deleteButton,"data-testid":`${l}-delete-button`,disabled:d||g,hidden:d||g,style:{visibility:d||g?"hidden":void 0},children:a(W,{className:t.deleteIcon})})]})};export{Z as RuleConditionInput};
|
|
2
2
|
//# sourceMappingURL=RuleConditionInput.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{standardSchemaResolver as p}from"@hookform/resolvers/standard-schema";import{useForm as c}from"react-hook-form";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as u}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import"react";import{useLoggedInUser as l}from"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as f}from"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{mapCheckerToFormValues as d,mapToCheckerInput as h,DEFAULT_FORM_VALUES as C}from"./utils/checkFormUtils.esm.js";import{manualCheckFormSchema as S,defaultCheckFormSchema as k}from"./utils/validation.esm.js";const F=a=>{const{selectedItem:r}=u(),{userEntityRef:m}=l();let t=C;r&&(t=d(r)),m&&!t.detailsStep.ownerEntityRef&&(t.detailsStep.ownerEntityRef=m);const s=c({defaultValues:t,mode:"onChange",resolver:(o,e,i)=>o.detailsStep.type==="manual"?p(S)(o,e,i):p(k)(o,e,i)}),{showModal:n}=f();return{formMethods:s,onSubmit:async o=>{if(!await n({title:"Save Check",message:`Are you sure you want to save check: ${o.detailsStep.name}?`,error:!1}))return;const e=h(o,r);a(e)}}};export{F as useCheckForm};
|
|
2
2
|
//# sourceMappingURL=useCheckForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CheckMessagingSchema as f,DefaultCheckDetailsSchema as u,ManualCheckDetailsSchema as S,parseFactRef as d}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as o}from"lodash";import{z as e}from"zod";import{baseFiltersSchema as E,refineFilters as h,EXCLUDE_WITHOUT_INCLUDE_FILTERS_MESSAGE as y,ensureNoEmptyFilterBlocks as b,EMPTY_FILTER_BLOCKS_MESSAGE as g,ensureNoConflictingFilters as O,CONFLICTING_FILTER_ERROR_MESSAGE as R,FrequencySchema as C}from"../../../utils/validation.esm.js";import{ExpressionType as r}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const a=t=>{try{return d(t),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},F=100,n=async t=>{if(!await a(t))throw new Error("Fact reference validation failed");return t},s=e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),c=e.lazy(()=>e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),operatorPrefix:e.string().optional().nullable(),value:s.or(e.array(s).min(1,"Required")).or(e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required")})),conditions:e.array(c).optional()})),i=e.lazy(()=>e.strictObject({expressionType:e.enum([r.AllOf,r.AnyOf,r.Not]).optional(),expressions:e.array(i).optional(),conditions:e.array(c).optional()}).refine(({expressions:t,conditions:m})=>!o(t)||!o(m),"Must contain either a condition or an expression.")),_=e.strictObject({expressions:i,pathResolver:e.string().optional()}).merge(f),l=e.lazy(()=>e.strictObject({applicabilityExpressions:i.optional(),notApplicableMessage:e.string().optional()}).merge(E).refine(h,y).refine(b,g).refine(O,R)),M=e.strictObject({enabled:e.boolean(),frequency:C}),p=e.strictObject({schedule:M.optional()}),T=e.strictObject({detailsStep:u,rulesStep:_,filtersStep:l,scheduleStep:p}),j=e.strictObject({detailsStep:S,rulesStep:e.any(),filtersStep:l,scheduleStep:p});export{F as CHECK_NAME_MAX_LENGTH,T as defaultCheckFormSchema,j as manualCheckFormSchema,a as validateFactRef};
|
|
1
|
+
import{CheckMessagingSchema as f,DefaultCheckDetailsSchema as u,ManualCheckDetailsSchema as S,parseFactRef as d}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as o}from"lodash";import{z as e}from"zod/v3";import{baseFiltersSchema as E,refineFilters as h,EXCLUDE_WITHOUT_INCLUDE_FILTERS_MESSAGE as y,ensureNoEmptyFilterBlocks as b,EMPTY_FILTER_BLOCKS_MESSAGE as g,ensureNoConflictingFilters as O,CONFLICTING_FILTER_ERROR_MESSAGE as R,FrequencySchema as C}from"../../../utils/validation.esm.js";import{ExpressionType as r}from"../types/ExpressionType.esm.js";import"../../Frequency/types.esm.js";import"../../Frequency/util.esm.js";import"../../Frequency/FrequencyComponent.esm.js";import"../types/Path.esm.js";const a=t=>{try{return d(t),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},F=100,n=async t=>{if(!await a(t))throw new Error("Fact reference validation failed");return t},s=e.union([e.string().min(1,"Required"),e.number(),e.boolean()]),c=e.lazy(()=>e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required"),operator:e.string().min(1,"Required"),operatorPrefix:e.string().optional().nullable(),value:s.or(e.array(s).min(1,"Required")).or(e.strictObject({factRef:e.string().refine(n,{message:"Valid format: [source]:[scope]/[name]"}),path:e.string().min(1,"Required")})),conditions:e.array(c).optional()})),i=e.lazy(()=>e.strictObject({expressionType:e.enum([r.AllOf,r.AnyOf,r.Not]).optional(),expressions:e.array(i).optional(),conditions:e.array(c).optional()}).refine(({expressions:t,conditions:m})=>!o(t)||!o(m),"Must contain either a condition or an expression.")),_=e.strictObject({expressions:i,pathResolver:e.string().optional()}).merge(f),l=e.lazy(()=>e.strictObject({applicabilityExpressions:i.optional(),notApplicableMessage:e.string().optional()}).merge(E).refine(h,y).refine(b,g).refine(O,R)),M=e.strictObject({enabled:e.boolean(),frequency:C}),p=e.strictObject({schedule:M.optional()}),T=e.strictObject({detailsStep:u,rulesStep:_,filtersStep:l,scheduleStep:p}),j=e.strictObject({detailsStep:S,rulesStep:e.any(),filtersStep:l,scheduleStep:p});export{F as CHECK_NAME_MAX_LENGTH,T as defaultCheckFormSchema,j as manualCheckFormSchema,a as validateFactRef};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as c,Fragment as h,jsx as t}from"react/jsx-runtime";import{withStyles as l,lighten as f,Tooltip as g}from"@material-ui/core";import x from"@material-ui/icons/Check";import u from"@material-ui/icons/Close";import T from"@material-ui/icons/HelpOutline";import N from"@material-ui/icons/NotInterested";import m from"@material-ui/icons/RemoveCircleOutline";import b from"@material-ui/icons/ReportProblemOutlined";import{ResultState as n}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const w=l(o=>({root:{color:o.palette.success.main}}))(x),S=l(o=>({root:{color:o.palette.error.main}}))(u),v=l(o=>({root:{color:o.palette.warning.main}}))(b),
|
|
1
|
+
import{jsxs as c,Fragment as h,jsx as t}from"react/jsx-runtime";import{withStyles as l,lighten as f,Tooltip as g}from"@material-ui/core";import x from"@material-ui/icons/Check";import u from"@material-ui/icons/Close";import T from"@material-ui/icons/HelpOutline";import N from"@material-ui/icons/NotInterested";import m from"@material-ui/icons/RemoveCircleOutline";import b from"@material-ui/icons/ReportProblemOutlined";import{ResultState as n}from"../../graphql/generated/index.esm.js";import{resultToText as s}from"../../text.esm.js";const w=l(o=>({root:{color:o.palette.success.main}}))(x),S=l(o=>({root:{color:o.palette.error.main}}))(u),v=l(o=>({root:{color:o.palette.warning.main}}))(b),D=l(o=>({root:{color:o.palette.text.primary}}))(T),E=l(o=>({root:{color:o.palette.text.disabled}}))(m),I=l(o=>({root:{color:o.palette.info.main}}))(N),R=l(o=>({root:{color:f(o.palette.error.main,.2)}}))(m),r=({icon:o,tooltip:a})=>t(g,{title:a,children:o}),j=({result:o,className:a,tooltip:d=!0,timestamp:p})=>{const i={className:a,"aria-label":s(o),"aria-hidden":!1},e=d?c(h,{children:[t("div",{children:t("strong",{children:s(o)})}),p&&c("div",{children:[t("strong",{children:"Updated:"})," ",new Date(p).toLocaleDateString()," ",new Date(p).toLocaleTimeString()]})]}):"";return o===n.Passed?t(r,{icon:t(w,{...i}),tooltip:e}):o===n.NotReported?t(r,{icon:t(D,{...i}),tooltip:e}):o===n.Failed?t(r,{icon:t(S,{...i}),tooltip:e}):o===n.Warning?t(r,{icon:t(v,{...i}),tooltip:e}):o===n.NotApplicable?t(r,{icon:t(E,{...i}),tooltip:e}):o===n.Exempt?t(r,{icon:t(I,{...i}),tooltip:e}):o===n.Error?t(r,{icon:t(R,{...i}),tooltip:e}):null};export{j as CheckIcon,r as IconWithTooltip};
|
|
2
2
|
//# sourceMappingURL=CheckIcon.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as h,Fragment as ie}from"react/jsx-runtime";import{stringifyEntityRef as P,parseEntityRef as oe,RELATION_OWNED_BY as re,RELATION_PART_OF as ne}from"@backstage/catalog-model";import{useRouteRef as ae}from"@backstage/core-plugin-api";import{entityRouteRef as se,useEntityPresentation as ce,getEntityRelations as j,humanizeEntityRef as U}from"@backstage/plugin-catalog-react";import{TableRoot as le,TableHeader as de,Column as d,TableBody as pe,TablePagination as fe,Row as me,Flex as ge,CellText as y,CellProfile as ye}from"@backstage/ui";import{RiCheckLine as ue,RiCloseLine as he,RiAlertLine as Ie,RiErrorWarningFill as we,RiProhibitedLine as ke,RiIndeterminateCircleLine as Se,RiInformationOffLine as Ee}from"@remixicon/react";import{compact as Re,uniq as be,startCase as Ce}from"lodash";import{useState as v,useEffect as W,useMemo as L,useCallback as A}from"react";import{useNavigate as Pe}from"react-router-dom";import{ResultState as p,CheckEntityField as f,Direction as s}from"../../../graphql/generated/index.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{DEFAULT_PAGE_SIZE as $}from"../../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as ve}from"../../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"react-use/lib/useAsyncRetry";import{useEntitiesByRefs as Le}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Ae}from"../../../hooks/catalog/useProfileImages.esm.js";import{useCheckEntities as Te}from"../../../hooks/entities/useCheckEntities.esm.js";import{CustomCell as Ne}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ze}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"../../../routes.esm.js";import{LoadingTableSkeleton as Be}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{toResultState as K}from"../utils.esm.js";import{toCheckEntityRow as De}from"./utils.esm.js";const xe=["kind","metadata.name","metadata.namespace","spec.profile.displayName","metadata.title","relations","spec.lifecycle","spec.type"],Oe={[p.Passed]:t(ue,{style:{color:"var(--bui-fg-success)"}}),[p.Failed]:t(he,{style:{color:"var(--bui-fg-danger)"}}),[p.Warning]:t(Ie,{}),[p.Error]:t(we,{}),[p.Exempt]:t(ke,{style:{color:"var(--bui-fg-disabled)"}}),[p.NotReported]:t(Se,{style:{color:"var(--bui-fg-disabled)"}}),[p.NotApplicable]:t(Ee,{style:{color:"var(--bui-fg-disabled)"}})},T={name:f.Name,owner:f.Owner,system:f.System,type:f.Type,lifecycle:f.Lifecycle},Fe=({checkId:I,trackId:m,filter:w,states:k})=>{const{updateSortParams:N,searchParams:g}=ve(),[S,z]=v(()=>{const e=g.get("sortDirection");return e==="ascending"?s.Asc:e==="descending"?s.Desc:s.Asc}),[u,B]=v(()=>{const e=g.get("sort");return e&&T[e]?e:"name"}),M=S===s.Asc?"ascending":"descending",[i,D]=v({orderBy:void 0,filter:w,states:k?.map(K).filter(e=>e!==void 0),pageInfo:{page:0,pageSize:$,direction:"forward",cursor:null}});W(()=>{const e=g.get("sortDirection");(e==="ascending"||e==="descending")&&z(e==="ascending"?s.Asc:s.Desc);const o=g.get("sort");o&&T[o]&&B(o)},[g]),W(()=>{let e;u?e={field:T[u]??f.Name,direction:S}:e=void 0,D(o=>({...o,orderBy:e,pageInfo:{...o.pageInfo,page:0,cursor:null},filter:w,states:k?.map(K).filter(a=>a!==void 0)}))},[w,k,u,S]);const{data:n,isLoading:q}=Te({checkId:I,trackId:m,orderBy:i.orderBy,filter:i.filter,states:i.states?.length?i.states:void 0,[i.pageInfo.direction==="forward"?"first":"last"]:i.pageInfo.pageSize,[i.pageInfo.direction==="forward"?"after":"before"]:i.pageInfo.cursor}),G=n?.checkEntities.edges.map(e=>e.node.entityRef)??[],{data:E,isLoading:H}=Le({entityRefs:G,fields:xe}),Y=L(()=>n?.checkEntities.edges??[],[n]),R=L(()=>n?.checkEntities.totalCount??0,[n]),Z=R>$,b=A((e,o)=>{const a=e>i.pageInfo.page?"forward":"backward",C=a==="forward"?n?.checkEntities.pageInfo.endCursor??null:n?.checkEntities.pageInfo.startCursor??null;D({...i,pageInfo:{page:e,pageSize:o,direction:a,cursor:C}})},[n,i]),J=A(({direction:e,column:o})=>{B(String(o)),z(e==="ascending"?s.Desc:s.Asc),N({sort:String(o),sortDirection:e})},[N]),x=L(()=>!n?.checkEntities.edges?.length||!E?.items?.length?[]:Re(n.checkEntities.edges.map(e=>{const o=E.items.find(a=>!!a&&P(a)===e.node.entityRef);return o?De({checkDetails:e.node,entity:o}):void 0})),[n?.checkEntities.edges,E?.items]),V=({row:e})=>{const o=Pe(),a=ae(se),C=A(r=>{const c=oe(P(r));let l=`${a(c)}/soundcheck`;m&&I?l+=`/tracks/${m}/checks/${I}`:m&&(l+=`/tracks/${m}`),o(l)},[o,a]),{primaryTitle:O}=ce(P(e.entity)),X=j(e.entity,re).map(r=>U(r,{defaultKind:r.kind})).join(", "),Q=j(e.entity,ne,{kind:"system"}).map(r=>U(r,{defaultKind:"system"})).join(", "),ee=be(x.flatMap(r=>r.entity.relations?.filter(({type:c,targetRef:l})=>c==="ownedBy"&&l).map(c=>c.targetRef)||[])),{profileImageMap:te}=Ae(ee),F=e.entity.relations?.find(({type:r})=>r==="ownedBy")?.targetRef;let _;return F&&(_=te?.[F]),h(me,{onAction:()=>C(e.entity),children:[t(Ne,{children:t(ge,{children:(r=>{const c=Oe[r],l=Ce(r.toLowerCase());return t("span",{title:l,children:c})})(e.state)})}),t(y,{title:O}),t(y,{title:Q}),t(y,{title:e.entity.spec?.type}),t(y,{title:e.entity.spec?.lifecycle}),t(y,{title:e.entity.kind.toLowerCase()}),t(ye,{name:X,src:_??O})]},e.id)};return q||H?t(Be,{}):Y.length?h(ie,{children:[h(le,{onSortChange:J,sortDescriptor:{direction:M,column:u},children:[h(de,{children:[t(d,{id:"state",style:{width:"5%"}}),t(d,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"32%"},children:"Name"}),t(d,{id:"system",allowsSorting:!0,style:{width:"18%"},children:"System"}),t(d,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(d,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"}),t(d,{id:"kind",allowsSorting:!0,style:{width:"10%"},children:"Kind"}),t(d,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Owner"})]}),t(pe,{children:x.map(e=>t(V,{row:e},e.id))})]}),Z&&t(fe,{showPageSizeOptions:!0,totalCount:R,pageSize:i.pageInfo.pageSize,offset:i.pageInfo.page*i.pageInfo.pageSize,onPreviousPage:()=>{const e=i.pageInfo.page-1;b(e,i.pageInfo.pageSize)},onNextPage:()=>{const e=i.pageInfo.page+1;b(e,i.pageInfo.pageSize)},onPageSizeChange:e=>{b(i.pageInfo.page,e)},hasNextPage:(i.pageInfo.page+1)*i.pageInfo.pageSize<R,hasPreviousPage:i.pageInfo.page>0})]}):t(ze,{title:"No check entities found",body:"There are no check entities found."})};export{Fe as CheckEntitiesTableBUI};
|
|
2
2
|
//# sourceMappingURL=CheckEntitiesTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t,jsxs as m,Fragment as K}from"react/jsx-runtime";import{useRouteRef as A,useApi as Se,configApiRef as Ie}from"@backstage/core-plugin-api";import{usePermission as ye}from"@backstage/plugin-permission-react";import{Container as z,HeaderPage as Ee,Flex as R,Box as F}from"@backstage/ui";import{makeStyles as Te}from"@material-ui/core";import{toEntityFilterQuery as L,combineEntityFilterQueries as G,soundcheckCheckReadPermission as be}from"@spotify/backstage-plugin-soundcheck-common";import{useState as M,useMemo as a,useEffect as ve}from"react";import{useSearchParams as Ce,useParams as Ne}from"react-router-dom";import Pe from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useCheck as we}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Ae}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as Re}from"../../hooks/aggregations/useCheckStatus.esm.js";import"react-use/lib/useLocalStorage";import{useFixMe as Fe}from"../../hooks/fixMe/useFixMe.esm.js";import"react-use/lib/useAsyncRetry";import{useEntityPrimaryTitle as Le}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useFilters as Me}from"../../hooks/filters/useFilters.esm.js";import{useChipScopedUrlState as xe}from"../../hooks/useChipScopedUrlState.esm.js";import{useLCPReporting as Ue}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as je}from"../../hooks/useLoadTimeReporting.esm.js";import{trackDetailsRouteRef as Oe,checksPageRouteRef as Be,tracksPageRouteRef as De}from"../../routes.esm.js";import"../../utils/facetFilters/types.esm.js";import{parseNumberOfDays as qe}from"../../utils/facetFilters/utils.esm.js";import{Alert as Ve}from"../Alert/Alert.esm.js";import{DescriptionCard as Ye}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{CheckStatusCard as Xe}from"../Cards/CheckStatusCard/CheckStatusCard.esm.js";import{HistoricalCheckStatusCard as Qe}from"../Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js";import{ChipSelector as He}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as x}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import"lodash";import{toFilter as $e}from"../FilterSidebar/util.esm.js";import{FixMeButton as Ke}from"../FixMeButton/FixMeButton.esm.js";import{LoadingTableSkeleton as ze}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ge}from"../Menus/SimpleMenu.esm.js";import{useCheckActions as Je}from"../Menus/useCheckActions.esm.js";import{PageCustomActions as We}from"../PageCustomActions/PageCustomActions.esm.js";import{ViewPullRequests as Ze}from"../ViewPullRequests/ViewPullRequests.esm.js";import{CheckEntitiesTableBUI as _e}from"./CheckEntitiesTable/CheckEntitiesTableBUI.esm.js";import{ExemptionsTableBUI as et}from"./ExemptionsTableBUI.esm.js";const tt=Te(()=>({container:{marginBottom:"var(--bui-space-12)"},tables:{margin:"var(--bui-space-12) 0 0"},tableContent:{margin:"var(--bui-space-3) 0 0"}})),s={ENTITIES:"Entities",EXEMPTIONS:"Exemptions"},J={entities:s.ENTITIES,exemptions:s.EXEMPTIONS},it={[s.ENTITIES]:"entities",[s.EXEMPTIONS]:"exemptions"},rt="entities",ot=(d,e)=>d.levels.flatMap(({checks:p})=>p).find(({id:p})=>p===e)||null,st=()=>{const d=tt(),[e,p]=Ce(),{trackId:o,checkId:i}=Ne(),{data:c,isLoading:g,isError:W}=Ae(o),{data:h,isLoading:u,isError:Z}=we(i),U=Je(h??void 0),_=A(Oe),ee=A(Be),te=A(De),ie=Le(h?.ownerEntityRef??void 0),[j,re]=M(()=>{const r=e.get("section"),w=r?J[r]:null;return new Set([w??s.ENTITIES])}),b=j.values().next().value??s.ENTITIES,[f,O]=M(e.get("search")||""),[B,oe]=M(""),{handleSectionChange:se}=xe({searchParams:e,setSearchParams:p,sectionParamToSection:J,sectionToParam:it,defaultSectionParam:rt,defaultSection:s.ENTITIES,pageFiltersStorageKey:"check-page-filters",pageSearchParamsStorageKey:"check-overview-search-params",setSectionSelection:re,setSearchValue:O}),l=a(()=>e.getAll("states"),[e]),k=a(()=>e.getAll("owners"),[e]),S=a(()=>e.getAll("lifecycles"),[e]),I=a(()=>e.getAll("types"),[e]),y=a(()=>e.getAll("systems"),[e]),E=a(()=>e.getAll("kinds"),[e]),D=Se(Ie).getOptionalNumber("soundcheck.certifications.history.retentionTimeInDays"),v=a(()=>qe(e.get("numberOfDays"),D),[e,D]);Pe(()=>{oe(f);const r=new URLSearchParams(e.toString());f?r.set("search",f):r.delete("search"),p(r,{replace:!0})},300,[f]);const q=a(()=>({routeName:"soundcheck-check-insights",additionalAttributes:{checkId:i||"",trackId:o||"",filtersApplied:k.length+S.length+I.length+y.length+E.length+l.length,ownersFilter:k.join(",")||"",lifecyclesFilter:S.join(",")||"",typesFilter:I.join(",")||"",systemsFilter:y.join(",")||"",kindsFilter:E.join(",")||"",statesFilter:l.join(",")||"",numberOfDays:v,checkSearch:B}}),[i,o,k,S,I,y,E,l,v,B]),{reportContentLoaded:V}=je(q),{reporter:ae}=Ue(q),n=a(()=>h??c?.levels.flatMap(r=>r.checks).find(r=>r.id===i),[h,i,c?.levels]),C=$e({lifecycles:S,owners:k,types:I,systems:y,kinds:E}),{data:N,isLoading:P,isError:ne}=Re({checkId:i,trackId:o,filter:C,states:l?.length?l:void 0},!!i),{showFixMeButton:ce,hasShift:le,pullRequests:Y,href:me}=Fe({type:h?.type,rule:h?.rule,checkStatus:N,checkId:i??"",checkName:n?.name??""});let T;if(i)if(c){const r=L(c.filter),w=L(ot(c,i)?.filter);T=G(r,w)}else n?.filter&&(T=L(n.filter));const he=G(T,C),{loading:X,allowed:Q}=ye({permission:be,resourceRef:i}),de=a(()=>!!n&&!X&&!Q,[Q,n,X]),{filters:pe,selected:fe,setSelected:ue,onRemoveTag:ge,selectedTags:ke}=Me({entityFilterQuery:T,hasStatusFilters:!0}),H=W||Z||ne,$=ae?.getLCPValue();return ve(()=>{!u&&!P&&(!o||!g)&&V({lcp:$})},[u,P,g,o,V,$]),u||o&&g?t(ze,{}):!u&&!n?t(z,{className:d.container,children:t(x,{title:"Check not found",body:`There is no check with the requested id: ${i}.`})}):de?t(x,{title:"Cannot view check",body:`No permission to view check with the requested id: ${i}.`}):o&&!g&&!c?t(x,{title:"No track found",body:`There is no track with the requested id: ${o}.`}):m(K,{children:[t(Ee,{title:n?.name??"",breadcrumbs:o?[{label:"Tracks",href:te()},{label:c?.name??"Track",href:_({trackId:o})}]:[{label:"Checks",href:ee()}],customActions:t(Ge,{label:"Check Actions",disabled:!U.length,placement:"left top",menuActions:U})}),m(z,{className:d.container,children:[h?.isDefinedInYamlAndNcui&&t(Ve,{variant:"warning",title:"This check is defined in both YAML and the No-Code UI",children:'The No-Code UI version is currently active and overrides all YAML fields \u2014 any changes to your YAML configuration will have no effect while this override exists. Use "Remove No-Code UI version" in the Actions menu to delete the override and restore the YAML definition. Alternatively, if you want to keep the NCUI version, you can delete the YAML definition which will remove this warning.'}),m(R,{children:[t(Ye,{description:n?.description??void 0,owner:ie,isError:H,isLoading:u}),t(Xe,{states:l,status:N,isLoading:P,isError:H}),t(Qe,{checkId:i,trackId:o,filter:C,states:l,checkStatus:N,numberOfDays:v})]}),m(F,{className:d.tables,children:[m(R,{justify:"between",children:[t(F,{minWidth:"12rem",children:t(He,{options:Object.values(s),selected:j,ariaLabel:"Sections",onSelectionChange:se})}),m(R,{children:[ce&&m(K,{children:[Y.length>0&&t(Ze,{checkName:n?.name,pullRequests:Y}),t(Ke,{hasShift:le,href:me})]}),t(We,{searchValue:f,setSearchValue:r=>O(r),filters:pe,selected:fe,setSelected:ue,onRemoveTag:ge,selectedTags:ke,showSearch:b!==s.ENTITIES})]})]}),m(F,{className:d.tableContent,children:[b===s.ENTITIES&&t(_e,{checkId:i,trackId:c?.id,filter:he,states:l}),b===s.EXEMPTIONS&&t(et,{checkId:i,searchValue:f})]})]})]})]})};export{st as CheckPageBUI};
|
|
2
2
|
//# sourceMappingURL=CheckPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i,jsxs as l,Fragment as I}from"react/jsx-runtime";import{parseEntityRef as n}from"@backstage/catalog-model";import{useRouteRef as
|
|
1
|
+
import{jsx as i,jsxs as l,Fragment as I}from"react/jsx-runtime";import{parseEntityRef as n}from"@backstage/catalog-model";import{useRouteRef as U,useApi as W}from"@backstage/core-plugin-api";import{entityRouteRef as D,entityPresentationApiRef as F}from"@backstage/plugin-catalog-react";import{TableRoot as $,TableHeader as H,Column as f,TableBody as M,Row as O,CellText as P,TooltipTrigger as G,Button as J,Tooltip as V,TablePagination as Z}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{useState as k,useMemo as p,useCallback as K}from"react";import{useNavigate as Q}from"react-router-dom";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{usePagination as X,DEFAULT_PAGE_SIZE as T}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useExemptions as Y}from"../../hooks/exemptions/useExemptions.esm.js";import{formatTimestamp as ee}from"../../utils/time.esm.js";import{CustomCell as te}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as j}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../routes.esm.js";import{LoadingTableSkeleton as ie}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const oe=q(u=>({justificationCell:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",whiteSpace:"pre-line",wordBreak:"break-word",fontWeight:"normal",textAlign:"left",background:"none !important",padding:0},emptyStateWrapper:{padding:u.spacing(2)}})),re=({checkId:u,searchValue:g})=>{const E=oe(),x=Q(),S=U(D),[c,v]=k("ascending"),[h,R]=k("entity"),{data:d,isLoading:z,error:A}=Y(u),y=p(()=>d?.totalCount??0,[d]),w=p(()=>d?.edges??[],[d]),B=K(t=>{const e=n(t),o=S(e);x(`${o}/soundcheck`)},[x,S]),m=p(()=>{const t=(e,o)=>e<o?c==="ascending"?-1:1:e>o?c==="ascending"?1:-1:0;return[...w].sort((e,o)=>{const a=e.node,s=o.node;switch(h){case"entity":return t(n(a.entity_ref).name,n(s.entity_ref).name);case"justification":return t(a.justification??"",s.justification??"");case"user":return t(n(a.user_ref).name,n(s.user_ref).name);case"date":return t(a.timestamp,s.timestamp);default:return 0}})},[w,h,c]),b=W(F),C=p(()=>{const t=new Map;for(const{node:e}of m){const o=b.forEntity(e.entity_ref)?.snapshot?.primaryTitle;o&&t.set(e.entity_ref,o)}return t},[m,b]),_=p(()=>{if(!g?.length)return m;const t=g.toLowerCase().trim();return m.filter(({node:e})=>C.get(e.entity_ref)?.toLowerCase().includes(t))},[m,g,C]),L=y>T,{paginatedItems:N,paginationProps:r}=X({pageParam:"perPage",defaultPageSize:T,items:_});return z?i(ie,{}):A?i(j,{title:"Exemptions failed",body:"Failed to load exemptions."}):!w.length||!_.length?i(j,{title:"No check exemptions found",body:"There are no check exemptions found."}):l(I,{children:[l($,{onSortChange:({direction:t,column:e})=>{R(e),v(t)},sortDescriptor:{direction:c,column:h},children:[l(H,{children:[i(f,{id:"entity",allowsSorting:!0,isRowHeader:!0,style:{width:"35%"},children:"Entity"}),i(f,{id:"justification",style:{width:"40%"},children:"Justification"}),i(f,{id:"user",allowsSorting:!0,style:{width:"15%"},children:"User"}),i(f,{id:"date",allowsSorting:!0,style:{width:"10%"},children:"Date"})]}),i(M,{children:N.map(t=>{const e=t.node,o=ee(e.timestamp),a=n(e.user_ref),s=n(e.entity_ref);return l(O,{onAction:()=>B(e.entity_ref),children:[i(P,{title:s.name}),i(te,{children:l(G,{children:[i(J,{variant:"tertiary",className:E.justificationCell,children:e.justification}),i(V,{children:e.justification})]})}),i(P,{title:a.name}),i(P,{title:o})]},`${e.entity_ref}-${e.check_id}`)})})]}),L&&i(Z,{totalCount:y,offset:r.offset,hasNextPage:r.offset+r.pageSize<y,hasPreviousPage:r.offset>0,onNextPage:r.onNextPage,onPreviousPage:r.onPreviousPage,onPageSizeChange:r.onPageSizeChange,pageSize:r.pageSize})]})};export{re as ExemptionsTableBUI};
|
|
2
2
|
//# sourceMappingURL=ExemptionsTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ResultState as t}from"../../graphql/generated/index.esm.js";const e={PASSED:"PASSED",FAILED:"FAILED",WARNING:"WARNING",EXEMPT:"EXEMPT",NOT_APPLICABLE:"NOT_APPLICABLE",NOT_REPORTED:"NOT_REPORTED",ERROR:"ERROR"},r={PASSED:"passed",FAILED:"failed",WARNING:"warning",EXEMPT:"exempt",ERROR:"error",NOT_APPLICABLE:"notApplicable",NOT_REPORTED:"notReported"},R=E=>{switch(E){case e.PASSED:return t.Passed;case e.FAILED:return t.Failed;case e.WARNING:return t.Warning;case e.NOT_APPLICABLE:return t.NotApplicable;case e.NOT_REPORTED:return t.NotReported;case e.EXEMPT:return t.Exempt;case e.ERROR:return t.Error;default:return}};function A(E){return E?E.numberOfEntities-E.
|
|
1
|
+
import{ResultState as t}from"../../graphql/generated/index.esm.js";const e={PASSED:"PASSED",FAILED:"FAILED",WARNING:"WARNING",EXEMPT:"EXEMPT",NOT_APPLICABLE:"NOT_APPLICABLE",NOT_REPORTED:"NOT_REPORTED",ERROR:"ERROR"},r={PASSED:"passed",FAILED:"failed",WARNING:"warning",EXEMPT:"exempt",ERROR:"error",NOT_APPLICABLE:"notApplicable",NOT_REPORTED:"notReported"},R=E=>{switch(E){case e.PASSED:return t.Passed;case e.FAILED:return t.Failed;case e.WARNING:return t.Warning;case e.NOT_APPLICABLE:return t.NotApplicable;case e.NOT_REPORTED:return t.NotReported;case e.EXEMPT:return t.Exempt;case e.ERROR:return t.Error;default:return}};function A(E){return E?E.numberOfEntities-E.exempt:0}export{e as CheckState,r as CheckStateCategories,A as getApplicableEntitiesCount,R as toResultState};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as n,Fragment as B,jsx as o}from"react/jsx-runtime";import{makeStyles as E,Box as i,Checkbox as N,Typography as O,FormHelperText as A,Tooltip as L,Button as z}from"@material-ui/core";import R from"@material-ui/icons/CheckCircleOutlined";import P from"@material-ui/icons/InfoOutlined";import{isEmpty as j,last as D,difference as F}from"lodash";import{useContext as v,useMemo as g}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{useGetChecks as G}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";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 M}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CheckPreviewContext as S}from"./CheckPreviewContext.esm.js";const
|
|
1
|
+
import{jsxs as n,Fragment as B,jsx as o}from"react/jsx-runtime";import{makeStyles as E,Box as i,Checkbox as N,Typography as O,FormHelperText as A,Tooltip as L,Button as z}from"@material-ui/core";import R from"@material-ui/icons/CheckCircleOutlined";import P from"@material-ui/icons/InfoOutlined";import{isEmpty as j,last as D,difference as F}from"lodash";import{useContext as v,useMemo as g}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{useGetChecks as G}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";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 M}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{CheckPreviewContext as S}from"./CheckPreviewContext.esm.js";const w=E(e=>({checkSelectCard:{padding:e.spacing(1,2),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(.25),"&:hover":{cursor:"pointer"},display:"flex",alignItems:"center",background:e.palette.background.default,minWidth:200},selectedCard:{border:`1px solid ${e.palette.border}`},selectedIcon:{color:e.palette.text.secondary},checkCardInfo:{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},selectArea:{display:"flex",flexDirection:"column",gap:e.spacing(.75)},removeButton:{margin:0,marginLeft:e.spacing(1),padding:0,color:e.palette.text.primary},wrapper:{padding:e.spacing(1),border:`1px solid ${e.palette.divider}`,borderRadius:e.spacing(1)},wrapperError:{border:`1px solid ${e.palette.error.main}`},checkSearch:{background:e.palette.background.paper}})),H=({check:e,removeCheck:f,isExternal:p})=>{const c=w(),{updateCheck:k,check:x}=v(S),d=e&&x?.id===e.id;return e?n(i,{className:`${c.checkSelectCard} ${d?c.selectedCard:""}`,onClick:()=>k(e),children:[o(R,{className:d?c.selectedIcon:"",fontSize:"small"}),o(i,{className:c.checkCardInfo,flex:1,marginLeft:2,children:e.name}),p&&o(i,{display:"flex",alignItems:"center",marginRight:1,children:o(L,{title:"Externally submitted check",placement:"top",arrow:!0,children:o(P,{fontSize:"small",color:"action",style:{cursor:"help"}})})}),!p&&o(z,{onClick:l=>{l.stopPropagation(),f(e.id)},className:c.removeButton,variant:"text",size:"small","aria-label":`remove check ${e.id}`,children:"Remove"})]}):null},U=({currentSectionCheckIds:e,addCheckToSelection:f,removeCheck:p,error:c,helperText:k,blankText:x,selectedChecks:d})=>{const l=w(),{data:b,isLoading:y}=G({ids:void 0}),{updateCheck:I}=v(S),u=g(()=>b?.edges.map(r=>r.node)??[],[b]),s=g(()=>new Set(u.map(r=>r.id)),[u]),m=g(()=>{const r=(d??[]).filter(t=>!s.has(t.id)).map(t=>({...t,description:t.description??""}));return[...u,...r]},[u,s,d]),C=g(()=>new Map(m.map(r=>[r.id,r])),[m]),$=g(()=>m.map(r=>r.id)??[],[m]),T=r=>{if(r.length>e.length){const t=D(r),a=m.find(h=>h.id===t);f(a),a&&I(a)}if(r.length<e.length){const t=F(e,r)?.[0];t&&p(t)}};return n(B,{children:[n(i,{className:`${l.wrapper} ${c?l.wrapperError:""}`,children:[o(i,{className:l.checkSearch,marginBottom:1,children:o(M,{multiple:!0,openUpwards:!0,disableCloseOnSelect:!0,options:$,getOptionDisabled:r=>!s.has(r),renderOption:(r,{selected:t})=>{const a=C.get(r),h=!s.has(r);return n(i,{display:"flex",alignItems:"center",gridGap:4,style:{opacity:h?.5:1},children:[o(N,{checked:t,size:"small",color:"primary",disabled:h}),n(i,{children:[a?a.name:r,h&&" (External)"]})]})},getOptionLabel:r=>C.get(r)?.name??r,multipleValue:e,onChange:T,isLoading:y,placeholder:"Check Search",autoSelect:!1,testId:"check-search",getOptionSelected:(r,t)=>t.includes(r)})}),n(i,{className:l.selectArea,children:[j(e)&&o(i,{marginTop:1,marginBottom:1,textAlign:"center",children:o(O,{children:x??"Select checks from the dropdown above."})}),e.map(r=>{const t=C.get(r),a=t?!s.has(t.id):!1;return o(H,{removeCheck:p,check:t,isExternal:a},r)})]})]}),k&&o(A,{error:c,children:k})]})};export{U as CheckSelection};
|
|
2
2
|
//# sourceMappingURL=CheckSelection.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{Flex as f}from"@backstage/ui";import{makeStyles as S}from"@material-ui/core/styles";import{useMemo as m}from"react";import{getChartStatusKeys as R,calculateAdjustedBarWidths as v,getChartStatusColor as A}from"../../utils/charts.esm.js";import{CheckState as r}from"../CheckPage/utils.esm.js";const E=S(()=>({container:{gap:"var(--bui-space-1)",width:"100%"},barSegment:{height:"var(--bui-space-1_5)",borderRadius:"var(--bui-space-1)"},emptyBar:{width:"100%",background:"var(--bui-fg-disabled)"}})),y=({status:e,states:t})=>{const s=E(),n=m(()=>({passed:!t?.length||t.includes(r.PASSED)?e?.passed??0:0,failed:!t?.length||t.includes(r.FAILED)?e?.failed??0:0,warning:!t?.length||t.includes(r.WARNING)?e?.warning??0:0,error:!t?.length||t.includes(r.ERROR)?e?.error??0:0,exempt:!t?.length||t.includes(r.EXEMPT)?e?.exempt??0:0,notReported:!t?.length||t.includes(r.NOT_REPORTED)?e?.notReported??0:0,notApplicable:!t?.length||t.includes(r.NOT_APPLICABLE)?e?.notApplicable??0:0}),[e,t]),i=R(),c=i.map(a=>n[a]).filter(a=>typeof a=="number"),u=i.every(a=>(n[a]||0)===0),p=m(()=>v(c),[c]);let l;return u?l=o("div",{className:`${s.barSegment} ${s.emptyBar}`}):l=i.map((a,d)=>{const g=n[a],h=A(a)||"var(--bui-fg-disabled)",b=p[d]||0;return g<=0?null:o("div",{className:s.barSegment,style:{backgroundColor:h,width:`${b}%`}},`check-status-bar-segment-${d}`)}),o(f,{className:s.container,children:l})};export{y as CheckStatusBarBUI};
|
|
2
2
|
//# sourceMappingURL=CheckStatusBarBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as o,Fragment as
|
|
1
|
+
import{jsx as e,jsxs as o,Fragment as d}from"react/jsx-runtime";import{useRouteRef as h}from"@backstage/core-plugin-api";import{Grid as u,Link as b,Card as y,CardHeader as R,Text as m,CardBody as x,Box as B,HeaderPage as L,Container as N}from"@backstage/ui";import{makeStyles as T}from"@material-ui/core/styles";import{groupBy as P}from"lodash";import{useMemo as f,useEffect as H,Fragment as I}from"react";import{useCheckTemplates as j}from"../../hooks/checks/useCheckTemplates.esm.js";import{useLCPReporting as v}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as D}from"../../hooks/useLoadTimeReporting.esm.js";import{checkCreateRouteRef as F,checksPageRouteRef as U}from"../../routes.esm.js";import{DocLinkButton as A}from"../DocLinkButton/DocLinkButton.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as E}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import{LoadingIndicator as M}from"../LoadingIndicator/LoadingIndicator.esm.js";import{TemplateCategoryBUI as S}from"./TemplateCategoryBUI.esm.js";const G=T(()=>({container:{marginBottom:"var(--bui-space-12)"},link:{textDecoration:"none"},fullHeightCard:{height:"100%",display:"flex",flexDirection:"column"}})),O=()=>{const r=G(),n=f(()=>({routeName:"soundcheck-check-templates"}),[]),{reportContentLoaded:l}=D(n),{reporter:g}=v(n),k=h(F),{data:i,isLoading:c}=j(),s=f(()=>P(i??[],"category"),[i]),p=g?.getLCPValue();H(()=>{c||l({lcp:p})},[c,l,p]);const C=h(U);let t;return c?t=e(M,{}):i?.length?t=o(d,{children:[e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(b,{href:k(),className:r.link,children:o(y,{className:r.fullHeightCard,children:[e(R,{children:e(m,{variant:"body-large",style:{fontWeight:"bold"},children:"Custom Check"})}),e(x,{children:e(m,{children:"Create a custom check using the facts collected about your entities."})})]})})}),Object.keys(s).sort().map(a=>o(I,{children:[e(B,{mb:"3",children:e(m,{variant:"title-x-small",children:a})}),e(u.Root,{columns:"5",gap:"3",mb:"6",children:e(S,{templates:s[a]})})]},a))]}):t=e(E,{title:"No check templates",body:"No check templates found."}),o(d,{children:[e(L,{title:"Check Templates",breadcrumbs:[{label:"All Checks",href:C()}],customActions:e(A,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks/"})}),e(N,{className:r.container,children:t})]})};export{O as CheckTemplatesPageBUI};
|
|
2
2
|
//# sourceMappingURL=CheckTemplatesPageBUI.esm.js.map
|