@spotify/backstage-plugin-soundcheck 0.22.5 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -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 t}from"react/jsx-runtime";import{useRouteRef as E,useApi as x,configApiRef as N}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiEditBoxLine as M,RiArchiveLine as P,RiDeleteBinLine as B,RiNotificationLine as T,RiExternalLinkLine as U}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as $,soundcheckCampaignDeletePermission as j,soundcheckCampaignNotificationsCreatePermission as I}from"@spotify/backstage-plugin-soundcheck-common";import{useState as O,useCallback as m,useMemo as q}from"react";import{useNavigate as z}from"react-router-dom";import{v4 as F}from"uuid";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{useArchiveCampaign as G}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as H}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as J}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as K}from"../../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{campaignEditRouteRef as Q}from"../../routes.esm.js";import{useExternalCampaignActions as V}from"../CampaignPage/CampaignActionsContext.esm.js";import{useArchiveConfirmationModal as W}from"../CampaignsPage/
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{useRouteRef as E,useApi as x,configApiRef as N}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiEditBoxLine as M,RiArchiveLine as P,RiDeleteBinLine as B,RiNotificationLine as T,RiExternalLinkLine as U}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as $,soundcheckCampaignDeletePermission as j,soundcheckCampaignNotificationsCreatePermission as I}from"@spotify/backstage-plugin-soundcheck-common";import{useState as O,useCallback as m,useMemo as q}from"react";import{useNavigate as z}from"react-router-dom";import{v4 as F}from"uuid";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{useArchiveCampaign as G}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as H}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as J}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as K}from"../../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{campaignEditRouteRef as Q}from"../../routes.esm.js";import{useExternalCampaignActions as V}from"../CampaignPage/CampaignActionsContext.esm.js";import{useArchiveConfirmationModal as W}from"../CampaignsPage/useArchiveConfirmationModal.esm.js";const X=i=>{const s=E(Q),r=z(),c=i?.archived,{showModal:d}=K(),[D,p]=O(!1),{showArchiveModal:l}=W(),{mutate:u}=J(),{mutate:f}=H(),{mutate:h}=G(),g=V(),C=x(N).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:R,allowed:k}=n({permission:$,resourceRef:i?.id}),{loading:v,allowed:w}=n({permission:j,resourceRef:i?.id}),{loading:A,allowed:y}=n({permission:I}),b=m(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&f(i.id)},[d,f,i?.id,i?.name]),L=m(()=>{if(!i)return;const{track:o}=i,e={id:F(),ownerEntityRef:o.ownerEntityRef,description:o.description??"",name:o.name,documentationURL:o.documentationURL,type:"standard",levels:o.levels.map(a=>({checks:a.checks,description:a.description,name:a.name,ordinal:a.ordinal})),filter:o.filter??void 0,exclude:o.exclude??void 0,badgeType:"status",draft:o.draft??!1};u(e)},[i,u]),S=m(async()=>{if(!i?.id)return;const{saveTrack:o,confirmed:e}=await l({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});e&&(o&&L(),h(i.id))},[h,i?.id,i?.name,L,l]);return{actions:q(()=>{if(!i?.id)return[];const o=[];!R&&k&&o.push({label:"Edit",id:"edit",onClick:()=>r(s({campaignId:i.id})),iconStart:t(M,{})}),!v&&w&&(c||o.push({label:"Archive",id:"archive",onClick:S,iconStart:t(P,{})}),o.push({label:"Delete",id:"delete",onClick:b,iconStart:t(B,{})})),!A&&C&&y&&i&&o.push({label:"Send Reminder",id:"send",onClick:()=>p(!0),iconStart:t(T,{})});for(const e of g)o.push({label:e.label,id:e.id,onClick:()=>r(e.href(i.id)),iconStart:t(U,{})});return o},[i,s,w,k,y,g,S,b,c,C,v,R,A,r]),showNotificationDialog:D,setShowNotificationDialog:p}};export{X as useCampaignActions};
|
|
2
2
|
//# sourceMappingURL=useCampaignActions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{usePermission as u}from"@backstage/plugin-permission-react";import{RiExportLine as C,RiEditBoxLine as b,RiDeleteBinLine as f}from"@remixicon/react";import{soundcheckCheckUpdatePermission as w,soundcheckCheckDeletePermission as R}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as h,useMemo as D}from"react";import{useNavigate as x}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as E}from"../../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{useDeleteCheck as g}from"../../hooks/checks/useDeleteCheck.esm.js";import{checkEditRouteRef as y}from"../../routes.esm.js";import{exportCheck as N}from"../../utils/export.esm.js";const A=e=>{const s=x(),d=k(y),{loading:l,allowed:a}=u({permission:w,resourceRef:e?.id}),{loading:m,allowed:n}=u({permission:R,resourceRef:e?.id}),{showModal:i}=E(),{mutate:o}=g(),c=h(async()=>{e?.id&&await i({title:"Delete Check",message:`Are you sure you want to delete the check '${e.name??e.id}'?`})&&o(e.id)},[i,e?.name,o,e?.id]),p=h(async()=>{e?.id&&await i({title:"Delete No-Code UI Version",message:`Are you sure you want to delete the No-Code UI version of '${e.name??e.id}'? This will delete it from the database, and the YAML definition will become the single source of the check.`})&&o(e.id)},[i,e?.name,o,e?.id]);return D(()=>{if(!e)return[];const t=[{label:"Export",id:"export",onClick:()=>N(e),iconStart:r(C,{})}];return e.isEditable&&!l&&a&&t.push({label:"Edit",id:"edit",onClick:()=>s(d({checkId:e.id})),iconStart:r(b,{})}),e.isEditable&&!m&&n&&t.push({label:"Delete",id:"delete",onClick:c,iconStart:r(f,{})}),e.isDefinedInYamlAndNcui&&!m&&n&&t.push({label:"Delete No-Code UI Version",id:"delete-ncui-override",onClick:p,iconStart:r(f,{})}),t},[n,a,e,d,c,p,m,l,s])};export{A as useCheckActions};
|
|
2
2
|
//# sourceMappingURL=useCheckActions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as p,Fragment as
|
|
1
|
+
import{jsx as e,jsxs as p,Fragment as g}from"react/jsx-runtime";import{useApi as O,featureFlagsApiRef as E,useRouteRef as c}from"@backstage/core-plugin-api";import{usePermission as k}from"@backstage/plugin-permission-react";import{Box as y}from"@backstage/ui";import{soundcheckCampaignCreatePermission as N,soundcheckCheckCreatePermission as F,soundcheckTrackCreatePermission as H}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as j}from"react-helmet";import{Routes as U,Route as t,Outlet as W,useParams as P,useLocation as D,Navigate as h}from"react-router-dom";import{campaignOverviewRouteRef as L,techInsightsPageRouteRef as S,trackOverviewRouteRef as V,tracksPageRouteRef as q,trackCreateRouteRef as z,newTrackRouteRef as G,trackBuilderRouteRef as J}from"../../routes.esm.js";import{CampaignPage as K}from"../CampaignPage/CampaignPage.esm.js";import{CampaignActionsProvider as M}from"../CampaignPage/CampaignActionsContext.esm.js";import{CampaignTechInsightsExplorerPage as Q}from"../CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import{CampaignsPage as X}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as Y}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as Z}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as _}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as $}from"../CheckPage/CheckEditPage.esm.js";import{CheckPage as C}from"../CheckPage/CheckPage.esm.js";import{ChecksTab as ee}from"../ChecksTab/ChecksTab.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import{CheckTemplatesPage as te}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import{CollectorPage as re}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as ae}from"../CollectorPage/CollectorDetailsPage.esm.js";import"../CollectorPage/CollectorDetailsPageBUI.esm.js";import{CollectorsPage as ie}from"../CollectorsPage/CollectorsPage.esm.js";import{CreateNewTrackPage as ne}from"../CreateNewTrackPage/CreateNewTrackPage.esm.js";import{OverviewPageContent as oe}from"../OverviewPage/OverviewPageContent.esm.js";import{TechInsightsPage as ce}from"../TechInsights/TechInsightsPage.esm.js";import{TrackBuilderPage as me}from"../TrackBuilderPage/TrackBuilderPage.esm.js";import{TrackCreatePage as pe}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as se}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as le}from"../TrackPage/TrackPage.esm.js";import{TrackTechInsightsExplorerPage as he}from"../TrackPage/TrackTechInsightsExplorerPage.esm.js";import{TracksTab as de}from"../TracksTab/TracksTab.esm.js";import{RoutingPageWrapperBUI as ge}from"./RoutingPageWrapperBUI.esm.js";const ue=()=>{const r=c(V),a=c(q),n=c(z),m=c(G),i=c(J);return{buildOverview:r,buildTracks:a,buildCreate:n,buildNew:m,buildBuilder:i}},f=r=>{try{return r?.()??null}catch{return null}},v=()=>{const{trackId:r}=P(),a=D(),{buildOverview:n,buildTracks:m,buildCreate:i,buildNew:s,buildBuilder:u}=ue();if(!r)return null;const d=[f(i),f(s),f(u)].filter(Boolean).find(o=>a.pathname.endsWith(o));if(d)return e(h,{to:d,replace:!0});try{const o=n({trackId:r});return e(h,{to:o,replace:!0})}catch{const o=typeof m=="function"?m():"/tracks";return e(h,{to:o,replace:!0})}},ke=()=>{const{campaignId:r}=P(),a=c(L);if(!r)return null;const n=a({campaignId:r});return e(h,{to:n,replace:!0})},fe=()=>{const r=c(S)();return e(h,{to:r,replace:!0})},Pe=({title:r="Soundcheck",integrations:a,hideHeader:n,campaignActions:m=[]})=>{const i=O(E),s=i.getRegisteredFlags(),u=!s.find(l=>l.name==="soundcheck-enable-campaigns")||i.isActive("soundcheck-enable-campaigns"),{loading:d,allowed:o}=k({permission:N}),I=!d&&o,{loading:R,allowed:b}=k({permission:F}),T=!s.find(l=>l.name==="soundcheck-enable-check-creation")||i.isActive("soundcheck-enable-check-creation"),w=!R&&b&&T,{loading:x,allowed:A}=k({permission:H}),B=!s.find(l=>l.name==="soundcheck-enable-track-creation")||i.isActive("soundcheck-enable-track-creation");return e(M,{actions:m,children:e(ge,{title:r,hideHeader:n,children:p(U,{children:[u&&p(g,{children:[e(t,{path:"/campaigns",element:e(X,{})}),e(t,{path:"/campaigns/:campaignId/edit",element:e(Z,{})}),e(t,{path:"/campaigns/:campaignId",element:e(ke,{})}),e(t,{path:"/campaigns/:campaignId/overview",element:e(K,{})}),e(t,{path:"/campaigns/:campaignId/explorer",element:e(Q,{})}),I&&e(t,{path:"/campaigns/create",element:e(Y,{})})]}),p(t,{path:"/tracks",element:e(W,{}),children:[e(t,{index:!0,element:e(de,{})}),e(t,{path:"builder",element:e(me,{})}),!x&&A&&B&&p(g,{children:[e(t,{path:"create",element:e(pe,{})}),e(t,{path:"new",element:e(ne,{})})]}),e(t,{path:":trackId/edit",element:e(se,{})}),e(t,{path:":trackId",element:e(v,{})}),e(t,{path:":trackId/overview",element:e(le,{})}),e(t,{path:":trackId/explorer",element:e(he,{})}),e(t,{path:":trackId/checks/:checkId",element:e(C,{})})]}),e(t,{path:"/checks",element:e(ee,{})}),e(t,{path:"/checks/:checkId",element:e(C,{})}),e(t,{path:"/checks/:checkId/edit",element:e($,{})}),w&&p(g,{children:[e(t,{path:"/checks/create",element:e(_,{})}),e(t,{path:"/checks/templates",element:e(te,{})})]}),e(t,{path:"/integrations",element:e(ie,{integrations:a})}),e(t,{path:"/integrations/:integrationId",element:e(ae,{integrations:a})}),e(t,{path:"/integrations/:integrationId/edit",element:e(re,{})}),e(t,{path:"/tech-insights",element:p(g,{children:[e(j,{title:"Tech Insights"}),e(ce,{})]})}),e(t,{path:"/overview",element:e(y,{style:{margin:"var(--bui-space-6) var(--bui-space-6)"},children:e(oe,{})})}),e(t,{path:"/",element:e(fe,{})})]})})})};export{Pe as RoutingPageBUI,v as TrackOverviewRedirect};
|
|
2
2
|
//# sourceMappingURL=RoutingPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{Box as d}from"@backstage/ui";import{SpotifyLicenseBanner as n}from"@spotify/backstage-plugin-core";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{UserProvider as c}from"../../contexts/UserProvider.esm.js";import l from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as m}from"../../hooks/useSoundcheckAlert.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import{SoundcheckHeaderProvider as s}from"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{SoundcheckHeaderBUI as p}from"../SoundcheckHeader/SoundcheckHeaderBUI.esm.js";import{SoundcheckQueryClientProvider as a}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";const h=({title:r="Soundcheck",hideHeader:i,children:o})=>e(m,{children:e(c,{children:e(a,{children:e(s,{defaultTitle:r,children:t(l,{children:[e(n,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),!i&&e(p,{}),e(d,{children:o})]})})})})});export{h as RoutingPageWrapperBUI};
|
|
2
2
|
//# sourceMappingURL=RoutingPageWrapperBUI.esm.js.map
|
package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i,jsxs as
|
|
1
|
+
import{jsx as i,jsxs as e,Fragment as Z}from"react/jsx-runtime";import{Text as n,Box as l,Flex as h}from"@backstage/ui";import{Chip as E,TextField as v,Button as L}from"@material-ui/core";import{makeStyles as J}from"@material-ui/core/styles";import{capitalize as K}from"lodash";import{useState as u,useRef as T,useCallback as $}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useSendCampaignNotification as Q}from"../../hooks/campaigns/useSendCampaignNotification.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as V}from"../../hooks/aggregations/useCertificationStatus.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 X}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{FormFieldLabel as f}from"../FormFieldLabel/FormFieldLabel.esm.js";import{LoadingIndicator as Y}from"../LoadingIndicator/LoadingIndicator.esm.js";import{SoundcheckDialog as _}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const ii=["critical","high","normal","low"],ti=J({wrap:{flexWrap:"wrap"}}),z=[{label:"Campaign Name",value:"{{ campaign.name }}"},{label:"Owner",value:"{{ ownerEntityRef }}"},{label:"Campaign ID",value:"{{ campaign.id }}"},{label:"Start Date",value:"{{ campaign.startDate }}"},{label:"Target Date",value:"{{ campaign.targetCompletionDate }}"},{label:"Support Channel",value:"{{ campaign.supportChannel }}"}],ei=({loading:m,notificationCount:a,reset:y,error:s,failingCount:r})=>e(l,{children:[m&&e(l,{style:{textAlign:"center"},children:[i(n,{variant:"body-medium",children:"Sending Notifications..."}),i(n,{variant:"body-small",color:"secondary",children:"Do not refresh or leave the page."}),i(l,{mt:"2",mb:"1",children:i(Y,{size:48})})]}),!m&&e(l,{children:[e(n,{variant:"body-medium",children:[e("strong",{children:[a," Notification",a===1?"":"s"," "]}),"sent to entity owners."]}),s&&i(n,{variant:"body-small",color:"warning",children:s.message}),!!r&&a<r&&e(n,{variant:"body-small",color:"secondary",children:["Notifications are grouped by owner, so this number might be less than the total failing entity count of"," ",i("strong",{children:r}),"."]}),i(l,{mt:"3",children:i(L,{variant:"outlined",color:"primary",onClick:y,children:"Send Again"})})]})]}),ni=({isOpen:m,campaign:a,handleClose:y})=>{const s=ti(),[r,C]=u(""),[g,w]=u(""),[b,B]=u("normal"),[o,I]=u(""),[A,S]=u(!1),k=T(null),x=T(null),N=$((t,H,d,F)=>{const p=H.current;if(p){const W=p.selectionStart??d.length,M=p.selectionEnd??d.length,P=d.substring(0,W)+t+d.substring(M);F(P),requestAnimationFrame(()=>{p.focus();const O=W+t.length;p.setSelectionRange(O,O)})}else F(d+t)},[]),{data:q}=V({trackId:a.track.id},m),{mutate:D,isLoading:R,notificationCount:j,error:G}=Q(),U=$(()=>{D({campaignId:a.id,entityRefs:o?[o]:void 0,title:r,description:g,severity:b.toLowerCase()}),S(!0)},[a.id,g,o,D,b,r]),c=q?.certificationStatus?.statusByLevel[0]?.failed??0;return i(_,{handleClose:y,title:"Send a Campaign Reminder Notification",open:m,fullScreen:!1,maxWidth:"sm",children:A?i(ei,{loading:R,notificationCount:j,reset:()=>S(!1),error:G,failingCount:c}):e(Z,{children:[i(n,{variant:"body-medium",children:"Send a notification for all entities that are currently failing checks in this campaign. Notifications will be grouped by the owner of these entities."}),e(l,{mt:"3",children:[i(h,{children:i(f,{title:"Severity"})}),i(X,{value:b,onChange:B,options:ii,fullWidth:!1,getOptionLabel:t=>K(t)})]}),e(l,{mt:"3",children:[i(f,{title:"Custom Notification Title (Optional)"}),i(h,{gap:"1",mb:"1.5",className:s.wrap,children:z.map(t=>i(E,{label:t.label,size:"small",variant:"outlined",clickable:!0,style:{margin:0},onClick:()=>N(t.value,k,r,C)},`title-${t.value}`))}),i(v,{value:r,onChange:t=>C(t.target.value),inputRef:k,placeholder:`Default: Entities Failing Campaign - ${a.name}`,type:"text",variant:"outlined",fullWidth:!0})]}),e(l,{mt:"3",children:[i(f,{title:"Custom Notification Description (Optional)"}),i(h,{gap:"1",mb:"1.5",className:s.wrap,children:z.map(t=>i(E,{label:t.label,size:"small",variant:"outlined",clickable:!0,style:{margin:0},onClick:()=>N(t.value,x,g,w)},`desc-${t.value}`))}),i(v,{value:g,onChange:t=>w(t.target.value),inputRef:x,placeholder:`Default: Entities owned by [ownerGroup] are failing checks required in Campaign - ${a.name}.`,type:"text",variant:"outlined",multiline:!0,minRows:4,maxRows:8,fullWidth:!0})]}),e(l,{mt:"3",children:[i(f,{title:"Entity Ref For Testing (Optional)"}),i(n,{variant:"body-small",color:"secondary",children:"Select a specific entityRef to send a notification to - used for testing. Will bypass checking if the campaign is actually failing for this entity."}),i(v,{value:o,onChange:t=>I(t.target.value),placeholder:"example: component:default/test-component",type:"text",variant:"outlined",fullWidth:!0})]}),e(h,{align:"center",gap:"2",mt:"3",children:[i(L,{disabled:!o&&c===0||R,variant:"outlined",color:"primary",onClick:U,children:"Send"}),o&&e(n,{variant:"body-small",color:"secondary",children:["Notification will be sent to ",o,"."]}),!o&&!!c&&e(n,{variant:"body-small",color:"secondary",children:["Notifications will be sent for the",i("strong",{children:` ~${c} `}),c===1?"entity":"entities"," failing this campaign"]}),!o&&c===0&&i(n,{variant:"body-small",color:"warning",children:"No entities failing campaign."})]})]})})};export{ni as SendCampaignNotificationDialogBUI};
|
|
2
2
|
//# sourceMappingURL=SendCampaignNotificationDialogBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a,jsxs as
|
|
1
|
+
import{jsx as a,jsxs as u}from"react/jsx-runtime";import{Flex as v}from"@backstage/ui";import{makeStyles as n}from"@material-ui/core";const l=n(()=>({container:{gap:"var(--bui-space-1)",width:"100%"},passedBar:{height:"var(--bui-space-1_5)",background:"var(--bui-fg-success)",border:"var(--bui-space-0_5) solid var(--bui-fg-success)",borderRadius:"var(--bui-space-1)"},failedBar:{height:"var(--bui-space-1_5)",background:"var(--bui-fg-danger)",border:"var(--bui-space-0_5) solid var(--bui-fg-danger)",borderRadius:"var(--bui-space-1)"},warningBar:{height:"var(--bui-space-1_5)",background:"var(--bui-fg-warning)",border:"var(--bui-space-0_5) solid var(--bui-fg-warning)",borderRadius:"var(--bui-space-1)"},noneBar:{height:"var(--bui-space-1_5)",background:"var(--bui-fg-disabled)",border:"var(--bui-space-0_5) solid var(--bui-fg-disabled)",borderRadius:"var(--bui-space-1)"},notReportedBar:{height:"var(--bui-space-1_5)",background:"var(--bui-fg-disabled)",border:"var(--bui-space-0_5) solid var(--bui-fg-disabled)",borderRadius:"var(--bui-space-1)"},errorBar:{height:"var(--bui-space-1_5)",background:"rgb(246, 104, 94)",border:"var(--bui-space-0_5) solid rgb(246, 104, 94)",borderRadius:"var(--bui-space-1)"}})),g=({passedPercent:i,failedPercent:s,warningPercent:d,errorPercent:o,notReportedPercent:b})=>{const r=l(),t=[i,s,d,o,b].filter(c=>!!c),e=t.length===1;return t.every(c=>c===0)?a("div",{style:{width:"100%"},className:r.noneBar}):u(v,{className:r.container,children:[!!i&&a("div",{className:r.passedBar,style:{flexGrow:i,width:e?"100%":void 0}}),!!s&&a("div",{className:r.failedBar,style:{flexGrow:s,width:e?"100%":void 0}}),!!d&&a("div",{className:r.warningBar,style:{flexGrow:d,width:e?"100%":void 0}}),!!b&&a("div",{className:r.notReportedBar,style:{flexGrow:b,width:e?"100%":void 0}}),!!o&&a("div",{className:r.errorBar,style:{flexGrow:o,width:e?"100%":void 0}})]})};export{g as StatusBar};
|
|
2
2
|
//# sourceMappingURL=StatusBar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as g}from"react/jsx-runtime";import{Box as
|
|
1
|
+
import{jsx as t,jsxs as g}from"react/jsx-runtime";import{Box as l}from"@backstage/ui";import{makeStyles as f}from"@material-ui/core";const m=f(()=>({stepperHeader:{display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto"},stepperStep:{display:"flex",alignItems:"center",flex:1},stepperStepGrow:{flex:1},stepperStepFixed:{flex:0,whiteSpace:"nowrap"},stepperCircle:{width:32,height:32,borderRadius:"var(--bui-radius-full)",border:"2px solid var(--bui-fg-secondary)",background:"transparent",display:"flex",justifyContent:"center",alignItems:"center",fontSize:"0.9rem",fontWeight:500,color:"var(--bui-fg-secondary)",zIndex:2},stepperCircleActive:{borderColor:"var(--bui-border-success)",background:"var(--bui-bg-success)",color:"var(--bui-fg-success)",fontWeight:"bold"},stepperCircleCompleted:{borderColor:"var(--bui-border-success)",background:"var(--bui-bg-success)",color:"var(--bui-fg-success)",fontWeight:600},stepperLabel:{marginLeft:"var(--bui-space-2)",fontSize:14,whiteSpace:"nowrap",color:"var(--bui-fg-secondary)",fontWeight:500},stepperLabelHighlighted:{color:"var(--bui-fg-success)"},stepperLine:{flexGrow:1,height:2,background:"var(--bui-fg-secondary)",margin:"0 var(--bui-space-2)",zIndex:1},stepperLineCompleted:{background:"var(--bui-border-success)"},stepperLabelButton:{background:"transparent",border:0,padding:0,textAlign:"left"},stepperLabelClickable:{cursor:"pointer"},stepperLabelDisabled:{cursor:"default"}})),h=3,C="50%",v="100%",x=({stepTitles:p,currentStep:i,onStepClick:d})=>{const e=m(),b=p.length<h?C:v;return t(l,{className:e.stepperHeader,style:{width:b},children:p.map((o,r)=>{const n=r===i,s=r<i,c=r===p.length-1,a=r<i,u=n||s?`${e.stepperLabel} ${e.stepperLabelHighlighted}`:e.stepperLabel;return g(l,{className:[e.stepperStep,c?e.stepperStepFixed:e.stepperStepGrow].join(" "),children:[t(l,{className:[e.stepperCircle,n?e.stepperCircleActive:"",s?e.stepperCircleCompleted:""].filter(Boolean).join(" "),children:s?t("span",{"aria-label":"Completed",role:"img",children:"\u2713"}):r+1}),t("button",{type:"button",onClick:()=>a&&d(r),disabled:!a,className:[u,e.stepperLabelButton,a?e.stepperLabelClickable:e.stepperLabelDisabled].join(" "),children:o}),!c&&t("div",{className:[e.stepperLine,s&&e.stepperLineCompleted].filter(Boolean).join(" ")})]},o)})})};export{x as Stepper};
|
|
2
2
|
//# sourceMappingURL=Stepper.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as C,jsx as i}from"react/jsx-runtime";import{Row as h,CellText as g,CellProfile as k}from"@backstage/ui";import{useNavigate as R}from"react-router-dom";import{useEntityPrimaryTitle as w}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{CustomCell as x}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as P}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as S}from"../Menus/SimpleMenu.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"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"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/useArchiveConfirmationModal.esm.js";const b=({ownerEntityRef:n,href:t,profileImageSrc:l,cells:c,menuActions:r,name:m,description:a,documentationURL:s,hasShift:f=!1})=>{const e=w(n),p=R();return C(h,{onAction:()=>t&&p(t),children:[i(P,{title:m,description:a,onClick:()=>t&&p(t),hasShift:f}),c.map((o,d)=>i(g,{title:o.title,leadingIcon:o.icon,onClick:u=>{o.onClick&&(u.stopPropagation(),o.onClick())}},`cell-${d}`)),i(k,{name:e,src:l??e}),i(x,{onClick:o=>o.stopPropagation(),children:i(S,{label:`${m} actions`,disabled:!r?.length,placement:"left top",menuActions:r??[],documentationURL:s,isHeaderMenu:!1})})]})};export{b as TableRowWithOwner};
|
|
2
2
|
//# sourceMappingURL=TableRowWithOwner.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a,jsxs as g,Fragment as Te}from"react/jsx-runtime";import{useRouteRef as R,useApi as ye}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Ce}from"@backstage/plugin-catalog-react";import{Box as S,HeaderPage as Re,Flex as
|
|
1
|
+
import{jsx as a,jsxs as g,Fragment as Te}from"react/jsx-runtime";import{useRouteRef as R,useApi as ye}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Ce}from"@backstage/plugin-catalog-react";import{Box as S,HeaderPage as Re,Flex as G,SearchField as Se,Container as Ee,Text as we,Button as Z}from"@backstage/ui";import{makeStyles as Le,LinearProgress as ve}from"@material-ui/core";import{RiAddLine as _}from"@remixicon/react";import{isEmpty as be}from"lodash";import{useState as ee,useMemo as i,useCallback as Pe,useEffect as Be}from"react";import{useSearchParams as Ie,useNavigate as Ae}from"react-router-dom";import xe from"react-use/lib/useDebounce";import"@backstage/catalog-model";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{useSortTableLocalStorage as Me}from"../../hooks/useSortTableLocalStorage.esm.js";import"react-use/lib/useAsync";import"../ChecksTable/utils.esm.js";import"../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useEntityPrimaryTitle as Ue}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useBatchedHierarchicalTrackStatuses as Ge}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as Ne}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as $e}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useLCPReporting as je}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Fe}from"../../hooks/useLoadTimeReporting.esm.js";import{newTrackRouteRef as He,campaignCreateRouteRef as Oe,trackExplorerRouteRef as De,campaignExplorerRouteRef as ze}from"../../routes.esm.js";import{getAllOwnedEntityCount as Ve}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as We,getTracksBucket as Ye}from"../../utils/helpers.esm.js";import{showTrack as qe}from"../../utils/tracks.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Je}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import{TechInsightsGroupSelector as Ke}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTilesBUI as Qe}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as Xe}from"./TechInsightsTableBUI.esm.js";const Ze=Le(()=>({container:{marginBottom:"var(--bui-space-12)"}})),_e=()=>{const te=Ze(),[E,re]=Ie(),r=E.get("group")||"",[l,ae]=ee(E.get("search")||""),[h,oe]=ee(""),N=i(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:h||""}}),[r,h]),{reportContentLoaded:$}=Fe({...N,enabled:!!r}),{reporter:ie}=je(N),f=Ae(),ne=R(He),se=R(Oe),j=ye(Ce),{order:ce,orderBy:me,handleSort:le}=Me({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});xe(()=>{oe(l);const e=new URLSearchParams(E.toString());l?e.set("search",l):e.delete("search"),re(e,{replace:!0})},500,[l]);const{tracks:w,campaigns:F,counts:L,isLoading:k,error:v,activeTrackCount:b}=$e(r,{},{enabled:!!r}),p=w.filter(e=>e.type==="campaign"),P=w.filter(e=>e.type!=="campaign"),H=p.filter(e=>{const t=h.toLowerCase(),s=(e.ownerEntityRef?j.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||s.includes(t)}),O=P.filter(e=>{const t=h.toLowerCase(),s=(e.ownerEntityRef?j.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||s.includes(t)}),T=i(()=>[...H,...O],[H,O]),m=i(()=>[...p.map(e=>e.id),...P.map(e=>e.id)],[p,P]),{data:B,isLoading:pe,error:de,progress:o}=Ge({trackIds:m,groupRef:r||"",skip:!r||m.length===0}),{data:D,isLoading:y}=Ne(r,{includeParent:!0}),I=i(()=>{const e=new Map;return Array.isArray(B)&&B.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[B]),ue=i(()=>{const e=new Map;return Array.isArray(L)&&L.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[L]),z=k&&!v&&!!r,V=v||de,A=m.length>0&&pe&&!V&&!!r,W=i(()=>({totalActiveTracksCampaigns:b}),[b]),Y=i(()=>{if(A)return{numTeams:void 0,avgCompliance:void 0,totalCampaigns:void 0,totalTracks:void 0};let e=0,t=0,s=0,u=0;const n=new Set;return T.forEach(C=>{const c=I.get(C.id);if(c){c.status&&typeof c.status.allPassPercentage=="number"&&(e+=c.status.allPassPercentage,t++),c.groupRef&&n.add(c.groupRef);const M=[c];for(;M.length>0;){const ke=M.pop();for(const U of ke.children)n.has(U.groupRef)||(n.add(U.groupRef),M.push(U))}}qe(c?.status)&&(C.type==="campaign"?s++:u++)}),{numTeams:n.size,avgCompliance:t>0?Math.round(e/t):0,totalCampaigns:s,totalTracks:u}},[T,I,A]),d=i(()=>{if(y)return{numEntities:void 0};const e=D?.[r];return{numEntities:Ve(e)}},[D,y,r]),ge=i(()=>({...W,...Y,...d}),[W,Y,d]),q=R(De),J=R(ze),he=Pe(e=>{if(!r)return;const t=new URLSearchParams;t.set("group",r),t.set("node",r);const s=p.find(({id:n})=>n===e);let u=q({trackId:e});if(s){const n=F?.edges.find(({node:C})=>C.track.id===e)?.node.id;n&&(u=J({campaignId:n}))}f(`${u}?${t.toString()}`)},[r,f,p,F,J,q]),K=Ue(r||void 0),x=i(()=>!o||o.totalTracks===0?0:o.loadedTracks/o.totalTracks*100,[o]),Q=k&&r&&!v||A&&o&&o.totalTracks>0,X=ie?.getLCPValue();Be(()=>{if(!y&&!k&&(x===100||m.length===0)){const e=d.numEntities??0,t=m.length;$({lcp:X,numberOfEntities:d.numEntities,entitiesBucket:We(e),numberOfTracks:m.length,tracksBucket:Ye(t)})}},[y,k,x,m.length,d.numEntities,$,X]);const fe=a(Qe,{summaryStats:ge,isLoading:z});return V?a(S,{mt:"6",children:a(Je,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):g(Te,{children:[a(Re,{title:`${K?`${K}'s `:""}Tech Insights`,customActions:g(G,{align:"center",gap:"3",children:[a(Ke,{hideSelected:!0}),a(Se,{isDisabled:be(w),value:l,onChange:ae,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})}),g(Ee,{className:te.container,children:[a(S,{style:{marginTop:0},children:fe}),Q&&a(S,{style:{marginBottom:16},children:a(ve,{variant:o&&o.totalTracks>0?"determinate":"indeterminate",value:o&&o.totalTracks>0?x:void 0,"data-testid":"batch-loading-indicator"})}),g(G,{align:"center",justify:"between",mb:"6",mt:"6",children:[a(S,{children:a(we,{variant:"title-x-small",weight:"bold",children:"Tracks & Campaigns"})}),T.length>0&&g(G,{align:"center",gap:"1",children:[a(Z,{iconStart:a(_,{}),onClick:()=>f(ne()),children:"Create Track"}),a(Z,{iconStart:a(_,{}),onClick:()=>f(se()),children:"Create Campaign"})]})]}),a(Xe,{tracks:T,trackStatusMap:I,trackCountsMap:ue,sortColumn:me,order:ce,handleSort:le,handleTrackClick:he,isLoading:z||!!Q,isSearch:!!l,activeTrackCount:b,hasGroupSelected:!!r})]})]})};export{_e as TechInsightsPageBUI};
|
|
2
2
|
//# sourceMappingURL=TechInsightsPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as p,Fragment as
|
|
1
|
+
import{jsx as r,jsxs as p,Fragment as $}from"react/jsx-runtime";import{TableRoot as j,TableHeader as A,Column as u,TableBody as D,Row as F,Flex as H,Box as I,Text as U,CellText as v,CellProfile as q}from"@backstage/ui";import{makeStyles as G}from"@material-ui/core";import{uniq as O,isEmpty as x,isNumber as N}from"lodash";import{useMemo as c}from"react";import{useEntityPrimaryTitle as Y}from"../../hooks/catalog/useEntityPrimaryTitle.esm.js";import{useProfileImages as _}from"../../hooks/catalog/useProfileImages.esm.js";import{getPercentage as w}from"../../utils/formatters.esm.js";import{showTrack as z}from"../../utils/tracks.esm.js";import{CustomCell as J}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as K}from"../DescriptionCell/DescriptionCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Q}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as B}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as L}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as V}from"../StatusBar/StatusBar.esm.js";const W=G(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),X=({track:a,trackStatus:e,entitiesCount:h,handleTrackClick:y,profileImageMap:g})=>{const l=W(),d=Y(a.ownerEntityRef),f=c(()=>a.levels.reduce((t,s)=>t+s.checks.length,0),[a.levels]),i=c(()=>(e?.passed??0)+(e?.failed??0)+(e?.warning??0)+(e?.error??0)+(e?.notReported??0)+(e?.exempt??0),[e]),k=c(()=>{let t;return e?.allPassPercentage!==null&&e?.allPassPercentage!==void 0?t=e.allPassPercentage:e&&(t=w(e.passed+e.exempt,i)),t},[e,i]),P=c(()=>w(e?.failed,i),[e,i]),C=c(()=>w(e?.warning,i),[e,i]),m=c(()=>w(e?.notReported,i),[e,i]),b=c(()=>w(e?.error,i),[e,i]),S=a.ownerEntityRef?g[a.ownerEntityRef]:void 0;return p(F,{onAction:()=>{y(a.id)},children:[r(K,{title:a.name??a.id,description:a.description??"",onClick:()=>y(a.id)}),r(J,{children:p(H,{align:"center",gap:"2",children:[r(I,{className:l.statusPercent,children:p(U,{children:[k,"%"]})}),r(I,{className:l.statusBar,children:r(V,{passedPercent:k,failedPercent:P,warningPercent:C,notReportedPercent:m,errorPercent:b})})]})}),r(v,{title:a.type==="campaign"?"Campaign":"Track"}),r(v,{title:N(f)?`${f} Check${f===1?"":"s"}`:"N/A"}),r(v,{title:N(h)?`${h} ${h===1?"Entity":"Entities"}`:"N/A"}),r(q,{name:d,src:S??d})]})},Z=({order:a,sortColumn:e,handleSort:h,handleTrackClick:y,tracks:g,trackStatusMap:l,trackCountsMap:d,isSearch:f,isLoading:i,activeTrackCount:k,hasGroupSelected:P})=>{const C=c(()=>[...g].filter(t=>z(l.get(t.id)?.status)).sort((t,s)=>{const T=l.get(t.id),M=l.get(s.id);let o,n;switch(e){case"name":o=t.name?.toLowerCase()||"",n=s.name?.toLowerCase()||"";break;case"type":o=t.type||"",n=s.type||"";break;case"owner":o=t.ownerEntityRef?.toLowerCase()||"",n=s.ownerEntityRef?.toLowerCase()||"";break;case"compliance":o=T?.status?.allPassPercentage??null,n=M?.status?.allPassPercentage??null;break;case"checks":o=t.levels.reduce((R,E)=>R+E.checks.length,0),n=s.levels.reduce((R,E)=>R+E.checks.length,0);break;case"entities":o=d.get(t.id)??0,n=d.get(s.id)??0;break;default:return 0}return typeof o=="number"&&typeof n=="number"?a==="asc"?o-n:n-o:typeof o=="number"&&n===null?-1:o===null&&typeof n=="number"?1:typeof o=="string"&&typeof n=="string"?a==="asc"?o.localeCompare(n):n.localeCompare(o):0}),[g,l,e,d,a]),m=c(()=>C.map(t=>{const s=l.get(t.id)?.status,T=d.get(t.id)??0;return{track:t,trackStatus:s,entitiesCount:T}}),[C,d,l]),b=O(m.map(t=>t.track.ownerEntityRef)),{profileImageMap:S}=_(b);return!i&&x(g)?P?f&&k>0?r(Q,{title:"No tracks or campaigns found.",body:"Your current search term did not return any tracks or campaigns. Please try a different search term. "}):r(B,{title:k>0?"No applicable tracks found for the selected group":void 0}):r(B,{title:"Select a group or create a new track"}):p($,{children:[p(j,{sortDescriptor:{column:e,direction:a==="asc"?"ascending":"descending"},onSortChange:t=>h(t.column),children:[p(A,{children:[r(u,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"43%"},children:"Name"}),r(u,{id:"compliance",allowsSorting:!0,style:{width:"12%"},children:"Compliance"}),r(u,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),r(u,{id:"checks",allowsSorting:!0,style:{width:"10%"},children:"Checks"}),r(u,{id:"entities",allowsSorting:!0,style:{width:"10%"},children:"Entities"}),r(u,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"})]}),r(D,{children:m.map(t=>r(X,{handleTrackClick:y,profileImageMap:S??{},...t},t.track.id))})]}),x(m)&&i&&r(L,{rowCount:10}),!x(m)&&i&&r(L,{rowCount:4})]})};export{Z as TechInsightsTableBUI};
|
|
2
2
|
//# sourceMappingURL=TechInsightsTableBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getPercentage as n}from"../../utils/formatters.esm.js";import{getTrackStatusTotal as R}from"../../utils/tracks.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const c of e.children){const s=u(c,a);if(s)return s}return null},p=(e,a,c,s,f)=>{const g=e.entityRef,d=e.entityRef,r=a?u(a,d):null,h=c(r?.allPassPercentage||0),P=e.ownedEntityRefs?.length||0,t=r?R(r):0;if(!e.children||Object.keys(e.children).length===0){if(P===0)return;const i=Math.log(P+1);if(i===0)return;const l={id:g,name:g,entityRef:d,value:i,numberOfEntities:P,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};return f&&(l.parent=f),l}const m=Object.values(e.children),o={id:g,name:g,entityRef:d,numberOfEntities:0,color:"",passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};f&&(o.parent=f);const y=m.map(i=>{const l=p(i,a,c,s,o);return o.numberOfEntities+=l?.numberOfEntities??0,l}).filter(i=>i!==void 0);return o.children=y,o.color=c(r?.allPassPercentage||0),o};export{p as hierarchyToNivo};
|
|
2
|
+
//# sourceMappingURL=hierarchyToNivo.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r,jsxs as g,Fragment as C}from"react/jsx-runtime";import{useRouteRef as y}from"@backstage/core-plugin-api";import{useEntityPresentation as E}from"@backstage/plugin-catalog-react";import{TableRoot as v,TableHeader as N,Column as P,TableBody as B,TablePagination as k,Row as z,CellProfile as O,CellText as D,Flex as L,Box as w,Text as M}from"@backstage/ui";import{makeStyles as A}from"@material-ui/core";import{sortBy as F}from"lodash";import{useMemo as S}from"react";import{useNavigate as $,createSearchParams as j}from"react-router-dom";import"@backstage/catalog-model";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{useSearchName as G}from"../../hooks/useSearchName.esm.js";import{usePagination as H,DEFAULT_PAGE_SIZE as R}from"../../hooks/usePagination.esm.js";import{useSortTableLocalStorage as U}from"../../hooks/useSortTableLocalStorage.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 _}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as V,campaignOverviewRouteRef as W}from"../../routes.esm.js";import{CustomCell as X}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Y}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as Z}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as q}from"../StatusBar/StatusBar.esm.js";const J=(e,l=[])=>{const s=[],i=new Set,m=t=>{t.numberOfEntities<=0||i.has(t.entityRef)||(i.add(t.entityRef),s.push(t))},p=(t,o)=>{if(o.has(t.entityRef))return;const c=new Set(o);c.add(t.entityRef);const d=t.children??[];d.length>0?(l.includes(t.entityRef)&&m(t),d.forEach(u=>p(u,c))):m(t)};return p(e,new Set),s},K=A(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),Q=({row:e,profileImageMap:l,trackId:s,campaignId:i})=>{const m=K(),p=y(V),t=y(W),o=$(),{primaryTitle:c}=E(e.entityRef);return g(z,{onAction:()=>{s&&o({pathname:i?t({campaignId:i}):p({trackId:s}),search:`?${j({owners:[e.entityRef]})}`})},children:[r(O,{name:c,src:l[e.entityRef]??c}),r(D,{title:`${e.numberOfEntities} ${e.numberOfEntities===1?"entity":"entities"}`}),r(X,{children:g(L,{align:"center",gap:"2",children:[r(w,{className:m.statusPercent,children:g(M,{children:[e.passPercentage,"%"]})}),r(w,{className:m.statusBar,children:r(q,{passedPercent:e.passPercentage,failedPercent:e.failPercentage,warningPercent:e.warningPercentage,notReportedPercent:e.notReportedPercentage,errorPercent:e.errorPercentage})})]})})]})},ee=({tableData:e,isLoading:l,trackId:s,selectedGroup:i,searchValue:m,campaignId:p})=>{const{order:t,orderBy:o,handleSort:c}=U({localStoragePrefix:"soundcheck-tech-insights-explorer",defaultSortBy:"entities",defaultDirection:"desc"}),d=S(()=>e?J(e,i?[i]:[]):[],[i,e]),u=G({items:d,searchTerm:m}),f=S(()=>{const a=F(u??[],h=>o==="name"?h.name:o==="passPercentage"?h.passPercentage:o==="entities"?h.numberOfEntities:0);return t==="desc"&&a.reverse(),a},[u,t,o]),I=S(()=>d.map(a=>a.entityRef),[d]),{paginatedItems:b,paginationProps:n}=H({pageParam:"perPage",defaultPageSize:R,items:f}),T=f.length>R,{profileImageMap:x}=_(I);return l?r(Z,{rowCount:10}):!l&&!f.length?r(Y,{title:"No groups found",body:"No groups found for the current selection."}):g(C,{children:[g(v,{sortDescriptor:{column:o,direction:t==="asc"?"ascending":"descending"},onSortChange:a=>c(a.column),children:[g(N,{children:[r(P,{allowsSorting:!0,id:"name",isRowHeader:!0,style:{width:"75%"},children:"Name"}),r(P,{allowsSorting:!0,id:"entities",style:{width:"10%"},children:"Entities"}),r(P,{allowsSorting:!0,id:"passPercentage",style:{width:"15%"},children:"Compliance"})]}),r(B,{children:b.map(a=>r(Q,{profileImageMap:x??{},row:a,trackId:s,campaignId:p},a.entityRef))})]}),T&&r(k,{totalCount:f.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(f.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})};export{ee as TechInsightsExplorerTable};
|
|
2
2
|
//# sourceMappingURL=TechInsightsExplorerTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as g}from"react/jsx-runtime";import{useApi as d,configApiRef as h}from"@backstage/core-plugin-api";import{useMemo as S,useEffect as G,useCallback as R}from"react";import{useSearchParams as v}from"react-router-dom";import w from"react-use/lib/useLocalStorage";import{useGroupOptions as P}from"../../hooks/groups/useGroupOptions.esm.js";import{GroupSelectorBUI as k}from"../GroupSelectorBUI/GroupSelectorBUI.esm.js";import{usePreviousSelectedGroups as L}from"../GroupSelectorBUI/usePreviousSelectedGroups.esm.js";const U=({onChange:
|
|
1
|
+
import{jsx as g}from"react/jsx-runtime";import{useApi as d,configApiRef as h}from"@backstage/core-plugin-api";import{useMemo as S,useEffect as G,useCallback as R}from"react";import{useSearchParams as v}from"react-router-dom";import w from"react-use/lib/useLocalStorage";import{useGroupOptions as P}from"../../hooks/groups/useGroupOptions.esm.js";import{GroupSelectorBUI as k}from"../GroupSelectorBUI/GroupSelectorBUI.esm.js";import"@backstage/ui";import"lodash";import"@backstage/plugin-catalog-react";import"@remixicon/react";import"../GroupSelectorBUI/ListViewMode.esm.js";import{usePreviousSelectedGroups as L}from"../GroupSelectorBUI/usePreviousSelectedGroups.esm.js";const U=({onChange:f})=>{const{options:e,isLoading:n}=P(),[t,i]=v(),[m,u]=w("soundcheck.overview.groupRef",null),p=t.get("group"),c=d(h).getOptionalString("soundcheck.overview.defaultSelectedGroupType"),{addGroup:a}=L(),o=S(()=>{if(!n&&e.length){if(p||m){const r=p??m;return e.find(s=>s.ref===r)??e[0]}else if(c)return e.find(r=>r.type===c)??e[0];return e[0]}return null},[c,n,e,p,m]);G(()=>{if(!n&&e.length&&!p&&o){const r=new URLSearchParams(t.toString());r.set("group",o.ref),i(r,{replace:!0}),u(o.ref),f?.(o.ref),a(o.ref)}},[n,e,p,o,t,i,u]);const l=R(r=>{const s=new URLSearchParams(t.toString());s.set("group",r),i(s),u(r),f?.(r),a(r)},[a,f,t,u,i]);return g(k,{selectedGroupRef:o?.ref,updateGroupRef:l})};export{U as TechInsightsGroupSelector};
|
|
2
2
|
//# sourceMappingURL=TechInsightsGroupSelector.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,Fragment as y,jsxs as i}from"react/jsx-runtime";import{Flex as
|
|
1
|
+
import{jsx as r,Fragment as y,jsxs as i}from"react/jsx-runtime";import{Flex as p,Text as v,Button as s,Box as b}from"@backstage/ui";import{makeStyles as z}from"@material-ui/core/styles";import{RiSubtractLine as _,RiAddLine as E}from"@remixicon/react";import{useState as f,useContext as O}from"react";import{DialogTrigger as P,Popover as R,Dialog as M,OverlayTriggerStateContext as F,NumberField as U,Label as C,Input as L}from"react-aria-components";import{useSearchParams as j}from"react-router-dom";import"../../utils/facetFilters/types.esm.js";import{RETENTION_TIME_IN_DAYS as x,DEFAULT_NUMBER_OF_DAYS as N,MIN_NUMBER_OF_DAYS as g}from"../../utils/facetFilters/utils.esm.js";const k=[{label:"7D",value:7},{label:"1M",value:N},{label:"2M",value:60},{label:"3M",value:x}],w=z(()=>({centerText:{textAlign:"center"},inputButton:{display:"flex",alignItems:"center"},dialog:{background:"var(--bui-bg-popover)",padding:"var(--bui-space-3)",borderRadius:"var(--bui-radius-3)",border:"1px solid var(--bui-border-1)",boxShadow:"1px 1px 0 0 var(--bui-border-1)"},pointer:{cursor:"pointer"},dialogTriggerButton:{padding:"0 !important",fontWeight:"normal",height:"0 !important",color:"var(--bui-fg-secondary) !important",fontSize:"var(--bui-font-size-2) !important"},numberInput:{textAlign:"center",width:"30%",padding:"var(--bui-space-2)",borderRadius:"var(--bui-space-1)",border:"1px solid var(--bui-border-1)"}})),Y=({maxNumberOfDays:o=x})=>{const n=w(),[u,S]=j(),c=u.get("numberOfDays"),I=c!==null&&!isNaN(Number(c))?Number(c):N,[T,D]=f(I),m=t=>{if(D(t),u.get("numberOfDays")!==String(t)){const l=new URLSearchParams(u);l.set("numberOfDays",String(t)),S(l,{replace:!0})}},B=()=>{const t=O(F),[l,d]=f(String(T)),h=e=>{let a;if(typeof e=="string"){if(!e.length)return!0;a=parseInt(e,10)}else a=e;return!isNaN(a)&&a>=g&&a<=o},A=e=>{if(e.key==="Enter"){const a=parseInt(e.currentTarget.value,10);h(a)&&(m(a),t?.close())}};return i(y,{children:[i(U,{minValue:g,maxValue:o,value:parseInt(l,10),children:[i(b,{mb:"4",children:[r(b,{style:{textAlign:"center"},children:r(C,{className:n.centerText,id:"number-days",children:"Number of days"})}),r(b,{style:{textAlign:"center"},children:i(v,{variant:"body-small",color:"secondary","aria-labelledby":"number-days",children:["Enter a value from ",g," to ",o]})})]}),i(p,{align:"center",justify:"center",gap:"1",children:[r(s,{slot:"decrement",variant:"tertiary",size:"small",className:n.inputButton,onPress:()=>{d(e=>String(parseInt(e,10)-1))},children:r(_,{size:8})}),r(L,{type:"number",onKeyDown:A,size:5,className:n.numberInput,onChange:e=>d(e.currentTarget.value)}),r(s,{slot:"increment",variant:"tertiary",size:"small",className:n.inputButton,onPress:()=>{d(e=>String(parseInt(e,10)+1))},children:r(E,{size:8})})]})]}),r(p,{align:"center",justify:"center",mt:"2",children:r(s,{style:{height:"auto"},variant:"tertiary",size:"small",onPress:()=>{const e=parseInt(l,10);h(e)&&(m(e),t?.close())},children:"Apply"})})]})};return r(y,{children:i(p,{align:"center",children:[k.filter(({value:t})=>t<=o).map(t=>r(v,{variant:"body-small",color:"secondary",className:n.pointer,onClick:()=>m(t.value),children:t.label},t.value)),i(P,{children:[r(s,{variant:"tertiary",size:"small",className:n.dialogTriggerButton,children:"Custom"}),r(R,{children:r(M,{className:n.dialog,children:r(B,{})})})]})]})})};export{Y as TimePeriodBarBUI};
|
|
2
2
|
//# sourceMappingURL=TimePeriodBarBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as i,jsx as r}from"react/jsx-runtime";import{useMemo as u,useCallback as I,createElement as B}from"react";import{parseEntityRef as L}from"@backstage/catalog-model";import{useRouteRef as M}from"@backstage/core-plugin-api";import{useEntityPresentation as W}from"@backstage/plugin-catalog-react";import{Flex as w,Card as k,Text as b,Box as v,Avatar as D}from"@backstage/ui";import{makeStyles as U}from"@material-ui/core";import{isEmpty as N}from"lodash";import{useNavigate as q,createSearchParams as J}from"react-router-dom";import{useProfileImages as K}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as Q,campaignOverviewRouteRef as V}from"../../routes.esm.js";import{getPercentage as C}from"../../utils/formatters.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{LoadingTableSkeleton as S}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as X}from"../StatusBar/StatusBar.esm.js";const $=a=>!a.children||a.children.length===0?[a]:a.children.flatMap(s=>$(s)),A=U(()=>({topTeamCard:{padding:"var(--bui-space-3) var(--bui-space-5)",minWidth:400},topTeamCardRows:{minHeight:"calc(var(--bui-space-6) * 6.5)",cursor:"pointer"},topTeamCardRow:{display:"flex",flexDirection:"row",gridGap:1,alignItems:"center",width:"100%",padding:"var(--bui-space-2)",marginBottom:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-neutral-2)",border:"1px solid var(--bui-bg-neutral-2)",borderRadius:"var(--bui-radius-2)"},infoButton:{"&:hover":{backgroundColor:"inherit !important"}},teamName:{width:"75%"},percentBar:{width:"25%"},statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),H=({groupRef:a,teamName:s,passPercentage:m,failPercentage:l,warningPercentage:f,notReportedPercentage:h,errorPercentage:P,profileImageMap:p,onClick:R})=>{const n=A(),{primaryTitle:c}=W(a),o=c??s;return r(k,{className:`${n.topTeamCardRow}`,onPress:R,label:o,children:i(w,{align:"center",gap:"1",style:{flex:1},children:[i(w,{align:"center",gap:"2",className:n.teamName,children:[r(D,{name:o,size:"small",src:p[a]?p[a]:o}),r(b,{children:o})]}),i(w,{align:"center",gap:"1",className:n.percentBar,children:[r(v,{className:n.statusPercent,children:i(b,{color:"secondary",children:[m,"%"]})}),r(v,{className:n.statusBar,children:r(X,{passedPercent:m,failedPercent:l,warningPercent:f,notReportedPercent:h,errorPercent:P})})]})]})})},Y=({trackStatus:a,isLoading:s,campaignId:m})=>{const l=A(),f=M(Q),h=M(V),P=q(),p=80,R=50,n=u(()=>a?$(a):[],[a]),c=u(()=>n.filter(e=>{const{passed:t,failed:T,warning:j,error:z,notReported:F,exempt:G}=e.status;return t+T+j+z+F+G>0&&!e.children?.length}).sort((e,t)=>(e.status.allPassPercentage??0)-(t.status.allPassPercentage??0)),[n]),o=I(e=>{const t=e.status.failed+e.status.passed+e.status.error+e.status.exempt+e.status.warning+e.status.notReported;return{groupRef:e.groupRef,teamName:L(e.groupRef).name,passPercentage:e.status.allPassPercentage??0,failPercentage:C(e.status.failed,t),warningPercentage:C(e.status.warning,t),notReportedPercentage:C(e.status.notReported,t),errorPercentage:C(e.status.warning,t)}},[]),d=u(()=>c.filter(e=>(e.status.allPassPercentage??0)<R).slice(0,3).map(o),[c,o]),g=u(()=>{const e=c.filter(t=>(t.status.allPassPercentage??0)>=p);return e.reverse(),e.slice(0,3).map(o)},[c,o]),O=u(()=>[...g.map(e=>e.groupRef),...d.map(e=>e.groupRef)],[d,g]),{profileImageMap:x}=K(O),y=I(e=>{let t;if(m?t=h({campaignId:m}):a?.trackId&&(t=f({trackId:a.trackId})),t){const T=`${t}?${J({owners:[e]})}`;P(T)}},[h,f,P,m,a?.trackId]);return i(w,{children:[i(k,{className:l.topTeamCard,children:[r(b,{variant:"title-x-small",weight:"bold",children:"Teams Needing Attention"}),s&&r(S,{rowCount:3,rowHeight:40}),!s&&i(v,{className:l.topTeamCardRows,children:[!N(d)&&d.map(e=>B(H,{profileImageMap:x??{},...e,key:e.groupRef,onClick:()=>y(e.groupRef)})),N(d)&&r(E,{title:"No teams eligible",body:`None of your teams are performing below ${R}% compliance.`})]})]}),i(k,{className:l.topTeamCard,children:[r(b,{variant:"title-x-small",weight:"bold",children:"Top Performing Teams"}),s&&r(S,{rowCount:3,rowHeight:40}),!s&&i(v,{className:l.topTeamCardRows,children:[!N(g)&&g.map(e=>B(H,{profileImageMap:x??{},...e,key:e.groupRef,onClick:()=>y(e.groupRef)})),N(g)&&r(E,{title:"No teams eligible",body:`None of your teams are performing above ${p}% compliance.`})]})]})]})};export{Y as TopAndBottomPerformingTeams};
|
|
2
2
|
//# sourceMappingURL=TopAndBottomPerformingTeams.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as o,jsxs as g,Fragment as L}from"react/jsx-runtime";import{useRouteRef as
|
|
1
|
+
import{jsx as o,jsxs as g,Fragment as L}from"react/jsx-runtime";import{useRouteRef as A}from"@backstage/core-plugin-api";import{TableRoot as O,TableHeader as j,Column as P,TableBody as U,Row as $,CellText as b,TablePagination as H}from"@backstage/ui";import{makeStyles as M}from"@material-ui/core";import{sortBy as V}from"lodash";import{useState as w,useEffect as _,useCallback as G,useMemo as C}from"react";import{CircularProgressbar as W}from"react-circular-progressbar";import{useNavigate as Z}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as q,DEFAULT_PAGE_SIZE as y}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as J}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{trackCheckDetailsRouteRef as K}from"../../routes.esm.js";import{getPercentage as T}from"../../utils/formatters.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Q}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as X}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const Y=M(()=>({customCell:{padding:"0 var(--bui-space-3)"},circularProgressBg:{color:"var(--bui-fg-secondary)",opacity:.25},circularProgressOverlay:{position:"absolute",left:0,color:"var(--bui-fg-danger)"},circularProgressbar:{width:"var(--bui-space-7)"}})),ee=["compliance","name","failures"],d=a=>ee.includes(a),te=({track:a,checkStatuses:s,certificationStatus:c,searchValue:p})=>{const E=Y(),{updateSortParams:v,searchParams:n}=J(),[u,S]=w(()=>{const e=n.get("sortDirection");return e==="ascending"||e==="descending"?e:"descending"}),[l,k]=w(()=>{const e=n.get("sort");return e&&d(e)?e:"compliance"}),I=A(K),N=Z();_(()=>{const e=n.get("sortDirection");(e==="ascending"||e==="descending")&&S(e);const t=n.get("sort");t&&d(t)&&k(t)},[n]);const x=G(({direction:e,column:t})=>{const r=String(t);d(r)&&k(r),S(e),v({sort:d(r)?r:"compliance",sortDirection:e})},[v]),m=C(()=>!a.levels||!s?[]:a.levels.flatMap(e=>e.checks.map(t=>{const r=s.find(({id:F})=>F===t.id),z=r?r.numberOfEntities-r.notApplicable-r.exempt:0,B=r?.failed??0;return{check:t,failedCount:B,applicableCount:z}}).filter(({failedCount:t})=>t>0)),[a.levels,s]),f=C(()=>{if(!p?.length)return m;const e=p.toLowerCase();return m.filter(({check:t})=>t.name.toLowerCase().includes(e))},[m,p]),h=C(()=>{const e=V([...f],t=>l==="compliance"?T(t.failedCount,c?.numberOfEntities??0):l==="failures"?t.failedCount:t.check.name.toLowerCase());return u==="descending"&&e.reverse(),e},[f,u,l,c]),{paginatedItems:R,paginationProps:i}=q({pageParam:"perPage",defaultPageSize:y,items:h}),D=a.levels.length>y;return s===void 0||c===void 0?o(X,{}):!m.length||!f.length?o(Q,{title:"No failing checks",body:"There are no failing checks found."}):g(L,{children:[g(O,{onSortChange:x,sortDescriptor:{direction:u,column:l},children:[g(j,{children:[o(P,{id:"compliance",allowsSorting:!0,style:{width:"8%"},children:"Compliance"}),o(P,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"72%"},children:"Name"}),o(P,{id:"failures",allowsSorting:!0,style:{width:"20%"},children:"Failures"})]}),o(U,{children:R.map(({check:e,failedCount:t})=>{const r=T(t,c.numberOfEntities);return g($,{onAction:()=>N(I({trackId:a.id,checkId:e.id})),children:[o(b,{leadingIcon:o("div",{className:E.circularProgressbar,title:`${r}%`,children:o(W,{value:r,strokeWidth:12,styles:{path:{stroke:"var(--bui-fg-danger)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})}),title:`${r}%`}),o(b,{title:e.name}),o(b,{title:`${new Intl.NumberFormat().format(t??0)} failing`})]},e.id)})})]}),D&&o(H,{totalCount:h.length,offset:i.offset,hasNextPage:i.offset+i.pageSize<(h.length??0),hasPreviousPage:i.offset>0,onNextPage:i.onNextPage,onPreviousPage:i.onPreviousPage,onPageSizeChange:i.onPageSizeChange,pageSize:i.pageSize})]})};export{te as TopFailingChecksTableBUI};
|
|
2
2
|
//# sourceMappingURL=TopFailingChecksTableBUI.esm.js.map
|
package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as c,jsx as
|
|
1
|
+
import{jsxs as c,jsx as e}from"react/jsx-runtime";import{Box as s,Flex as i,Text as a,Card as m,CardBody as u}from"@backstage/ui";import{makeStyles as p}from"@material-ui/core";import{RiCheckLine as h}from"@remixicon/react";import{Alert as v}from"../../../Alert/Alert.esm.js";import{IntegrationLogoBUI as b}from"../../../CollectorsPage/IntegrationLogoBUI.esm.js";import{PROVIDERS as g,INTEGRATION_ALIASES as t}from"../../utils.esm.js";const f=p(()=>({container:{margin:"var(--bui-space-8) 0"},card:{cursor:"pointer",border:"1px solid transparent",transition:"border-color 150ms ease","&:hover":{borderColor:"var(--bui-fg-primary)"}},cardSelected:{borderColor:"var(--bui-fg-success)",boxShadow:"0 0 0 1px var(--bui-color-success)",backgroundColor:"var(--bui-bg-success)"},cardDisabled:{cursor:"default",pointerEvents:"none"},providers:{width:"100%"},provider:{width:"100%"},providerIcon:{width:"7%",height:"100%",padding:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-neutral-1)",borderRadius:"var(--bui-radius-3)"},providerIconSelected:{backgroundColor:"var(--bui-fg-success)"},providerContent:{width:"93%",marginLeft:"var(--bui-space-4)"},checkmarkIcon:{color:"var(--bui-fg-success)",width:"18px",height:"18px"}})),S=({selectedProvider:d,onSelect:l})=>{const r=f();return c(s,{className:r.container,children:[c(i,{direction:"column",align:"center",justify:"center",mb:"8",children:[e(a,{variant:"title-small",weight:"bold",children:"Select Source Control Provider"}),e(a,{color:"secondary",children:"Select the source control provider used by your organization."})]}),e(v,{title:"Source control provider",variant:"info",children:"Your source control provider determines which integration the checks will depend on. You can update this later."}),e(i,{align:"center",justify:"center",direction:"column",className:r.providers,children:g.map(o=>{const n=t[o.name]===d;return e(m,{onPress:()=>{n||l(o.name)},label:o.name,className:[r.card,n&&r.cardSelected,n&&r.cardDisabled].filter(Boolean).join(" "),children:e(u,{children:c(i,{align:"center",justify:"between",className:r.provider,children:[e(i,{align:"center",justify:"center",className:[r.providerIcon,n&&r.providerIconSelected].filter(Boolean).join(" "),children:e(b,{integrationId:t[o.name]??"",size:"medium"})}),c(i,{direction:"column",gap:"1",className:r.providerContent,children:[c(i,{gap:"1",align:"center",children:[e(a,{variant:"body-large",weight:"bold",children:o.name}),n&&e(h,{className:r.checkmarkIcon})]}),e(a,{variant:"body-small",color:"secondary",children:o.description})]})]})})},o.name)})})]})};export{S as SelectProviderStep};
|
|
2
2
|
//# sourceMappingURL=SelectProviderStep.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{standardSchemaResolver as y}from"@hookform/resolvers/standard-schema";import{useMemo as k,useEffect as R}from"react";import{useForm as T}from"react-hook-form";import{v4 as F}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as g}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as E}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}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"react-use/lib/useAsyncRetry";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as l,mapFiltersToCatalogFilter as c}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f}from"../../Filter/types.esm.js";import{trackFormSchema as M}from"./validation.esm.js";const u={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"status",draft:!1},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{include:[f()],exclude:[f()]}},S=({name:e,description:i,ownerEntityRef:a,filter:r,levels:n,documentationURL:t,badge:m,exclude:o,draft:s})=>({detailsStep:{name:e,ownerEntityRef:a,description:i??"",documentationURL:t??void 0,badgeType:m?.variant===E.Status?"status":"medal",draft:s??!1},levelsStep:{levels:n?.map(p=>({name:p.name??(p.ordinal?`Level ${p.ordinal}`:"Level 1"),description:p.description??"",checks:p.checks.map(d=>({id:d.id,name:d.name??d.id,description:d.description??""}))}))||[]},filtersStep:{include:l(r),exclude:l(o)}}),v=(e,i,a)=>({id:a?.id??F(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:a?.type??"standard",levels:e.levelsStep.levels?.map((r,n)=>({ordinal:n+1,name:r.name??"",description:r.description??"",checks:r.checks.map(t=>{const m=i[t.id];if(m)return m;const o=a?.levels.flatMap(s=>s.checks).find(s=>s.id===t.id);return o?{id:o.id,name:o.name??t.name,description:o.description??t.description}:{id:t.id,name:t.name,description:t.description}})})),filter:c(e.filtersStep.include),exclude:c(e.filtersStep.exclude),draft:e.detailsStep.draft??!1}),x=e=>{const{selectedItem:i}=h(),a=k(()=>i?S(i):u,[i]),r=T({defaultValues:a,mode:"onChange",resolver:y(M)}),{userEntityRef:n}=g();R(()=>{!i&&n&&!r.getValues("detailsStep.ownerEntityRef")&&r.setValue("detailsStep.ownerEntityRef",n)},[i,n,r]);const{checksMap:t}=L(),{showModal:m}=w();return{formMethods:r,onSubmit:async o=>{if(!await m({title:"Save Track",message:`Are you sure you want to save track: ${o.detailsStep.name}?`,error:!1}))return;const s=v(o,t??{},i);e(s)}}};export{u as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,S as mapTrackToFormValues,x as useTrackForm};
|
|
2
2
|
//# sourceMappingURL=useTrackForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{LevelDetailsSchema as t,TrackDetailsSchema as r}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{CHECK_IS_REQUIRED_MSG as m,formFiltersSchema as a}from"../../../utils/validation.esm.js";const c=e.strictObject({levels:e.array(t).min(1,m)}),i=e.strictObject({detailsStep:r,levelsStep:c,filtersStep:a});export{i as trackFormSchema};
|
|
1
|
+
import{LevelDetailsSchema as t,TrackDetailsSchema as r}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{CHECK_IS_REQUIRED_MSG as m,formFiltersSchema as a}from"../../../utils/validation.esm.js";const c=e.strictObject({levels:e.array(t).min(1,m)}),i=e.strictObject({detailsStep:r,levelsStep:c,filtersStep:a});export{i as trackFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as g,Fragment as fe}from"react/jsx-runtime";import{stringifyEntityRef as N,parseEntityRef as ge,RELATION_OWNED_BY as ue,RELATION_PART_OF as ye}from"@backstage/catalog-model";import{useRouteRef as he}from"@backstage/core-plugin-api";import{entityRouteRef as we,useEntityPresentation as Pe,getEntityRelations as H,humanizeEntityRef as $}from"@backstage/plugin-catalog-react";import{TableRoot as Se,TableHeader as ke,Column as d,TableBody as Ie,TablePagination as Re,Row as Ce,Flex as Q,CellText as h,Box as q,Text as Ee,CellProfile as Te}from"@backstage/ui";import{makeStyles as Be}from"@material-ui/core";import{compact as be,uniq as De}from"lodash";import{useState as x,useMemo as c,useEffect as G,useCallback as z}from"react";import{useNavigate as Ne}from"react-router-dom";import{TrackEntityField as l,Direction as p}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 W}from"../../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as xe}from"../../../hooks/useSortSearchParams.esm.js";import"react-use/lib/useAsync";import"../../ChecksTable/utils.esm.js";import"react-use/lib/useAsyncRetry";import{useEntitiesByRefs as ze}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Ae}from"../../../hooks/catalog/useProfileImages.esm.js";import{useTrackEntities as ve}from"../../../hooks/entities/useTrackEntities.esm.js";import{getPercentage as w}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as Le}from"../../../utils/tracks.esm.js";import{CertificationBadge as Oe}from"../../Badges/CertificationBadge.esm.js";import{CustomCell as X}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Fe}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../../routes.esm.js";import"../../FilterSidebar/FilterSidebar.esm.js";import"../../FilterSidebar/StateFilter.esm.js";import{toFilter as Y}from"../../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as _e}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as je}from"../../StatusBar/StatusBar.esm.js";import{toTrackEntityRow as Ke}from"./utils.esm.js";const Me=Be(()=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),A={name:l.Name,owner:l.Owner,certificationLevel:l.CertificationLevel,checkPassRate:l.CheckPassRate,system:l.System,type:l.Type,lifecycle:l.Lifecycle},Ue=({track:m,lifecycles:S,owners:k,types:I,systems:R,kinds:C,certificationStatus:E,isCampaign:Z})=>{const v=Me(),L=Ne(),{updateSortParams:O,searchParams:u}=xe(),F=he(we),[T,_]=x(()=>{const e=u.get("sortDirection");return e==="ascending"?p.Asc:e==="descending"?p.Desc:p.Asc}),[P,j]=x(()=>{const e=u.get("sort");return e&&A[e]?e:"name"}),J=T===p.Asc?"ascending":"descending",[r,B]=x({orderBy:{field:l.CheckPassRate,direction:p.Desc},filter:Y({lifecycles:S,owners:k,types:I,systems:R,kinds:C}),pageInfo:{page:0,pageSize:W,direction:"forward",cursor:null}}),{data:s,isLoading:V}=ve({trackId:m?.id??"",orderBy:r.orderBy,filter:r.filter,[r.pageInfo.direction==="forward"?"first":"last"]:r.pageInfo.pageSize,[r.pageInfo.direction==="forward"?"after":"before"]:r.pageInfo.cursor,certificationStatus:E}),y=c(()=>s?.trackEntities.edges??[],[s]),ee=c(()=>s?.trackEntities.totalCount??0,[s])>W,te=y.map(e=>e.node.entityRef)??[],{data:b,isLoading:ie}=ze({entityRefs:te}),K=c(()=>!m||!y?.length||!b?.items?.length?[]:be(y.map(e=>{const i=b.items.find(o=>!!o&&N(o)===e.node.entityRef);return i?Ke({trackDetails:e.node,track:m,entity:i}):void 0})),[y,b?.items,m]),re=De(K.flatMap(e=>e.entity.relations?.filter(({type:i,targetRef:o})=>i==="ownedBy"&&o).map(i=>i.targetRef)||[])),{profileImageMap:oe}=Ae(re);G(()=>{const e=u.get("sortDirection");(e==="ascending"||e==="descending")&&_(e==="ascending"?p.Asc:p.Desc);const i=u.get("sort");i&&A[i]&&j(i)},[u]),G(()=>{let e;P?e={field:A[P]??l.Name,direction:T}:e=void 0,B(i=>({...i,pageInfo:{...i.pageInfo,page:0,cursor:null},orderBy:e,filter:Y({lifecycles:S,owners:k,types:I,systems:R,kinds:C}),certificationStatus:E}))},[B,P,T,E,S,k,R,C,I]);const ae=z(e=>{const i=ge(N(e)),o=F(i),f=m?.id?`/tracks/${m.id}`:"";L(`${o}/soundcheck${f}`)},[L,F,m?.id]),D=z((e,i)=>{const o=e>r.pageInfo.page?"forward":"backward",f=o==="forward"?s?.trackEntities.pageInfo.endCursor??null:s?.trackEntities.pageInfo.startCursor??null;B({...r,pageInfo:{page:e,pageSize:i,direction:o,cursor:f}})},[s,r]),ne=z(({direction:e,column:i})=>{j(String(i)),_(e==="ascending"?p.Desc:p.Asc),O({sort:String(i),sortDirection:e})},[O]),se=({row:e})=>{const{primaryTitle:i}=Pe(N(e.entity)),o=H(e.entity,ue).map(n=>$(n,{defaultKind:n.kind})).join(", "),f=e.entity.relations?.find(({type:n})=>n==="ownedBy")?.targetRef,ce=H(e.entity,ye,{kind:"system"}).map(n=>$(n,{defaultKind:"system"})).join(", ");let M;f&&(M=oe?.[f]);const a=c(()=>Le(e.status),[e.status]),U=c(()=>{let n;return e.status?.allPassPercentage!==null&&e.status?.allPassPercentage!==void 0?n=e.status.allPassPercentage:e.status&&(n=w(e.status.passed+e.status.exempt,a)),n},[e.status,a]),le=c(()=>w(e.status?.failed,a),[e.status,a]),pe=c(()=>w(e.status?.warning,a),[e.status,a]),de=c(()=>w(e.status?.notReported,a),[e.status,a]),me=c(()=>w(e.status?.error,a),[e.status,a]);return g(Ce,{onAction:()=>ae(e.entity),children:[t(X,{children:t(Q,{children:t(Oe,{badge:e.badge,trackType:Z?"campaign":void 0})})}),t(h,{title:i}),t(X,{children:g(Q,{align:"center",gap:"2",children:[t(q,{className:v.statusPercent,children:g(Ee,{children:[U,"%"]})}),t(q,{className:v.statusBar,children:t(je,{passedPercent:U,failedPercent:le,warningPercent:pe,notReportedPercent:de,errorPercent:me})})]})}),t(h,{title:ce}),t(h,{title:e.entity.spec?.type}),t(h,{title:e.entity.spec?.lifecycle}),t(h,{title:e.entity.kind.toLowerCase()}),t(Te,{name:o,src:M??i})]},e.id)};return V||ie?t(_e,{}):y.length?g(fe,{children:[g(Se,{onSortChange:ne,sortDescriptor:{direction:J,column:P},children:[g(ke,{children:[t(d,{id:"state",style:{width:"5%"}}),t(d,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"20%"},children:"Name"}),t(d,{id:"checkPassRate",style:{width:"15%"},children:"Checks"}),t(d,{id:"system",allowsSorting:!0,style:{width:"18%"},children:"System"}),t(d,{id:"type",allowsSorting:!0,style:{width:"9%"},children:"Type"}),t(d,{id:"lifecycle",allowsSorting:!0,style:{width:"9%"},children:"Lifecycle"}),t(d,{id:"kind",allowsSorting:!0,style:{width:"9%"},children:"Kind"}),t(d,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Owner"})]}),t(Ie,{children:K.map(e=>t(se,{row:e},e.id))})]}),ee&&t(Re,{showPageSizeOptions:!0,totalCount:s?.trackEntities.totalCount,pageSize:r.pageInfo.pageSize,offset:r.pageInfo.page*r.pageInfo.pageSize,onPreviousPage:()=>{const e=r.pageInfo.page-1;D(e,r.pageInfo.pageSize)},onNextPage:()=>{const e=r.pageInfo.page+1;D(e,r.pageInfo.pageSize)},onPageSizeChange:e=>{D(r.pageInfo.page,e)},hasNextPage:(r.pageInfo.page+1)*r.pageInfo.pageSize<(s?.trackEntities.totalCount??0),hasPreviousPage:r.pageInfo.page>0})]}):t(Fe,{title:"No track entities found",body:"There are no track entities found."})};export{Ue as TrackEntitiesTableBUI};
|
|
2
2
|
//# sourceMappingURL=TrackEntitiesTableBUI.esm.js.map
|