@spotify/backstage-plugin-soundcheck 0.19.3 → 0.19.4
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 +17 -0
- package/dist/alpha/integrations.esm.js +1 -1
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha.d.ts +2 -2
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/Badges/NoLevelBadge.esm.js +2 -2
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
- package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignStatusHistoryChart.esm.js +2 -0
- package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignStatusTile.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +2 -0
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.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/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +2 -0
- package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +1 -1
- package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +2 -0
- package/dist/components/Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js +2 -0
- package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +2 -0
- package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
- package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistSummary.esm.js +1 -1
- package/dist/components/Charts/chartUtils.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
- package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
- package/dist/components/CheckDetails/JustificationDetails.esm.js +1 -1
- package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
- package/dist/components/CheckForm/CheckForm.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +2 -0
- package/dist/components/CheckPage/CheckPage.esm.js +2 -0
- package/dist/components/CheckPage/CheckPageBUI.esm.js +2 -0
- package/dist/components/CheckPage/CheckPageDeprecated.esm.js +2 -0
- package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +2 -0
- package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +2 -0
- package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +2 -0
- package/dist/components/CheckSelection/CheckPreview.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/CheckTemplatesPage.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +2 -0
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +2 -0
- package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +2 -0
- package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +1 -1
- package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.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/CollapsablePanel/CollapsablePanel.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/DependantCheckCard.esm.js +2 -0
- package/dist/components/CollectorsPage/CollectorListPage/{CollectorListPage.esm.js → CollectorListPageDeprecated.esm.js} +2 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +2 -0
- package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +2 -0
- package/dist/components/CustomCell/CustomCell.esm.js +1 -1
- package/dist/components/DescriptionCell/DescriptionCell.esm.js +2 -0
- package/dist/components/DocLinkButton/DocLinkButton.esm.js +2 -0
- package/dist/components/EmptyState/EmptyStateBUI.esm.js +1 -1
- package/dist/components/EmptyState/EmptyStateNoCampaigns.esm.js +1 -1
- package/dist/components/EmptyState/EmptyStateNoChecks.esm.js +1 -1
- package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +1 -1
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
- package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +2 -0
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/FilterMenu/FilterMenu.esm.js +2 -0
- package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
- package/dist/components/FormMarkdownInput/FormMarkdownInput.esm.js +1 -1
- package/dist/components/FormattedPreview/FormattedPreview.esm.js +1 -1
- package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +1 -1
- package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/GroupTag.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/useGroupHistory.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/usePreviousSelectedGroups.esm.js +2 -0
- package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
- package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +2 -0
- package/dist/components/ImportExportPanel/{ImportExportPanel.esm.js → ImportExportPanelDeprecated.esm.js} +2 -2
- package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
- package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
- package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
- package/dist/components/Menus/SimpleMenu.esm.js +2 -0
- package/dist/components/Menus/useCampaignActions.esm.js +2 -0
- package/dist/components/Menus/useCheckActions.esm.js +2 -0
- package/dist/components/Menus/useTrackActions.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +1 -1
- package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/PageCustomActions/PageCustomActions.esm.js +1 -1
- package/dist/components/PassRateTable/PassRateTable.esm.js +1 -1
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
- package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
- package/dist/components/Router.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingMainMenu.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageBUI.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +2 -0
- package/dist/components/RoutingPage/index.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +1 -1
- package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +2 -0
- package/dist/components/SoundcheckMarkdownContent/ComponentRenders.esm.js +1 -1
- package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +2 -0
- package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js +2 -0
- package/dist/components/StatusBar/StatusBar.esm.js +2 -0
- package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
- package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
- package/dist/components/TechHealth/TechHealth.esm.js +1 -1
- package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
- package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
- package/dist/components/TechHealthTabs/NameColumn.esm.js +1 -1
- package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
- package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
- package/dist/components/TechInsights/SummaryTilesBUI.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +2 -0
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
- package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +2 -0
- package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +2 -0
- package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +2 -0
- package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
- package/dist/components/TrackForm/TrackForm.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +2 -0
- package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageDeprecated.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +2 -0
- package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +2 -0
- package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +2 -0
- package/dist/components/TrackSelection/TrackSelection.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
- package/dist/components/TracksPage/TracksPage.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +1 -0
- package/dist/hooks/filters/useFilters.esm.js +2 -0
- package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
- package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
- package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
- package/dist/hooks/usePagination.esm.js +1 -1
- package/dist/hooks/useSortTableLocalStorage.esm.js +2 -0
- package/dist/routes.esm.js +1 -1
- package/dist/utils/charts.esm.js +1 -1
- package/dist/utils/formStyles.esm.js +1 -1
- package/dist/utils/time.esm.js +1 -1
- package/package.json +21 -20
- package/dist/components/Cards/CurrentStatusCard/CurrentStatusCard.esm.js +0 -2
- package/dist/components/Cards/CurrentStatusCard/CurrentStatusCardRow.esm.js +0 -2
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +0 -2
- package/dist/components/CheckStatusBar/CheckStatusBarCell.esm.js +0 -2
- package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +0 -2
- package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js +0 -2
- package/dist/hooks/checks/useCheckStatusTotals.esm.js +0 -2
- package/dist/utils/checks.esm.js +0 -2
- /package/dist/{components/GroupHierarchySelector → utils}/getAllOwnedEntityCount.esm.js +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as r,jsx as a}from"react/jsx-runtime";import{useMemo as f,useCallback as H,createElement as y}from"react";import{useApi as j,useRouteRef as N}from"@backstage/core-plugin-api";import{entityPresentationApiRef as D}from"@backstage/plugin-catalog-react";import{Flex as b,Card as k,Text as w,Box as x,Avatar as F,TooltipTrigger as O,ButtonLink as z,Tooltip as G}from"@backstage/ui";import{makeStyles as U}from"@material-ui/core";import{RiInformationLine as W}from"@remixicon/react";import{isEmpty as T}from"lodash";import{createSearchParams as q}from"react-router-dom";import{useProfileImages as J}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as K,campaignOverviewRouteRef as Q}from"../../routes.esm.js";import{getPercentage as v}from"../../utils/formatters.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as C}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@spotify/backstage-plugin-soundcheck-common";import{getLeafNodes as V}from"../HierarchicalTechInsightsPage/getLeafNodes.esm.js";import{LoadingTableSkeleton as B}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as X}from"../StatusBar/StatusBar.esm.js";const S=U(()=>({topTeamCard:{padding:"var(--bui-space-3) var(--bui-space-5)",minWidth:400},topTeamCardRows:{minHeight:"calc(var(--bui-space-6) * 6.5)"},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-surface-2)",border:"1px solid var(--bui-bg-surface-2)",borderRadius:"var(--bui-radius-2)"},infoButton:{"&:hover":{backgroundColor:"inherit !important"}},teamName:{width:"75%"},percentBar:{width:"25%"}})),A=({groupRef:o,teamName:i,passPercentage:u,failPercentage:c,warningPercentage:h,notReportedPercentage:P,errorPercentage:R,profileImageMap:g,trackId:n,campaignId:m})=>{const t=S(),l=N(K),I=N(Q);let p;return m?p=I({campaignId:m}):n&&(p=l({trackId:n})),r(k,{className:`${t.topTeamCardRow}`,children:[r(b,{align:"center",gap:"1",style:{flex:1},children:[r(b,{align:"center",gap:"2",className:t.teamName,children:[a(F,{name:i,size:"small",src:g[o]?g[o]:i}),a(w,{children:i})]}),r(b,{align:"center",gap:"1",className:t.percentBar,children:[r(w,{color:"secondary",children:[u,"%"]}),a(X,{passedPercent:u,failedPercent:c,warningPercent:h,notReportedPercent:P,errorPercent:R})]})]}),r(O,{delay:0,children:[a(z,{className:t.infoButton,variant:"tertiary",iconStart:a(W,{}),isDisabled:!n,href:p?`${p}?${q({owners:[o]})}`:void 0}),r(G,{children:["See insights for ",i]})]})]})},Y=({trackStatus:o,isLoading:i,campaignId:u})=>{const c=S(),h=80,P=50,R=j(D),g=f(()=>o?V(o):[],[o]),n=f(()=>g.filter(e=>{const{passed:s,failed:d,warning:M,error:$,notReported:L,exempt:E}=e.status;return s+d+M+$+L+E>0&&!e.children?.length}).sort((e,s)=>(e.status.allPassPercentage??0)-(s.status.allPassPercentage??0)),[g]),m=H(e=>{const s=R.forEntity(e.groupRef).snapshot,d=e.status.failed+e.status.passed+e.status.error+e.status.exempt+e.status.warning+e.status.notReported;return{groupRef:e.groupRef,teamName:s.primaryTitle,passPercentage:e.status.allPassPercentage??0,failPercentage:v(e.status.failed,d),warningPercentage:v(e.status.warning,d),notReportedPercentage:v(e.status.notReported,d),errorPercentage:v(e.status.warning,d),teamInfo:s.secondaryTitle}},[R]),t=f(()=>n.filter(e=>(e.status.allPassPercentage??0)<P).slice(0,3).map(m),[n,m]),l=f(()=>{const e=n.filter(s=>(s.status.allPassPercentage??0)>=h);return e.reverse(),e.slice(0,3).map(m)},[n,m]),I=f(()=>[...l.map(e=>e.groupRef),...t.map(e=>e.groupRef)],[t,l]),{profileImageMap:p}=J(I);return r(b,{children:[r(k,{className:c.topTeamCard,children:[a(w,{variant:"title-x-small",weight:"bold",children:"Teams Needing Attention"}),i&&a(B,{rowCount:3,rowHeight:40}),!i&&r(x,{className:c.topTeamCardRows,children:[!T(t)&&t.map(e=>y(A,{profileImageMap:p??{},...e,key:e.groupRef,trackId:o?.trackId,campaignId:u})),T(t)&&a(C,{title:"No teams eligible",body:`None of your teams are performing below ${P}% compliance.`})]})]}),r(k,{className:c.topTeamCard,children:[a(w,{variant:"title-x-small",weight:"bold",children:"Top Performing Teams"}),i&&a(B,{rowCount:3,rowHeight:40}),!i&&r(x,{className:c.topTeamCardRows,children:[!T(l)&&l.map(e=>y(A,{profileImageMap:p??{},...e,key:e.groupRef,trackId:o?.trackId})),T(l)&&a(C,{title:"No teams eligible",body:`None of your teams are performing above ${h}% compliance.`})]})]})]})};export{Y as TopAndBottomPerformingTeams};
|
|
2
|
+
//# sourceMappingURL=TopAndBottomPerformingTeams.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as s}from"react/jsx-runtime";import{useRouteRef as
|
|
1
|
+
import{jsx as r,jsxs as s,Fragment as E}from"react/jsx-runtime";import{useRouteRef as L}from"@backstage/core-plugin-api";import{Table as x,TableHeader as B,Column as u,TableBody as O,Row as j,Cell as g,TablePagination as A}from"@backstage/ui";import{makeStyles as D}from"@material-ui/core";import{useState as b,useMemo as f}from"react";import{CircularProgressbar as H}from"react-circular-progressbar";import{useNavigate as M}from"react-router-dom";import{TrackEntityField as U}from"../../graphql/generated/index.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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as $}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{trackCheckDetailsRouteRef as z}from"../../routes.esm.js";import{getPercentage as V}from"../../utils/formatters.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as W}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as Z}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const q=D(()=>({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:"60%"}})),k=10;U.Name;const G=({track:o,checkStatuses:a,certificationStatus:h,searchValue:c})=>{const v=q(),[m,C]=b("ascending"),[y,w]=b("name"),P=L(z),S=M(),n=f(()=>!o.levels||!a?[]:o.levels.flatMap(t=>t.checks.map(e=>{const i=a.find(({id:N})=>N===e.id),p=i?i.numberOfEntities-i.notApplicable-i.exempt:0,l=i?.failed??0;return{check:e,failedCount:l,applicableCount:p}}).filter(({failedCount:e})=>e>0)),[o.levels,a]),d=f(()=>{if(!c?.length)return n;const t=c.toLowerCase();return n.filter(({check:e})=>e.name.toLowerCase().includes(t))},[n,c]),T=f(()=>[...d].sort((t,e)=>{const i=t.check.name.toLowerCase().trim(),p=e.check.name.toLowerCase().trim(),l=i.localeCompare(p,void 0,{sensitivity:"base"});return m==="ascending"?l:-l}),[d,m]),{paginatedItems:I,paginationProps:R}=$({pageParam:"perPage",defaultPageSize:k,items:T}),F=o.levels.length>k;return a===void 0||h===void 0?r(Z,{}):!n.length||!d.length?r(W,{title:"No failing checks",body:"There are no failing checks found."}):s(E,{children:[s(x,{onSortChange:({direction:t,column:e})=>{w(String(e)),C(t)},sortDescriptor:{direction:m,column:y},children:[s(B,{children:[r(u,{id:"compliance",style:{width:"5%"},children:"Compliance"}),r(u,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"75%"},children:"Name"}),r(u,{id:"failures",style:{width:"20%"},children:"Failures"})]}),r(O,{children:I.map(({check:t,failedCount:e})=>{const i=V(e,h.numberOfEntities);return s(j,{onAction:()=>S(P({trackId:o.id,checkId:t.id})),children:[r(g,{leadingIcon:r("div",{className:v.circularProgressbar,children:r(H,{value:i,strokeWidth:12,styles:{path:{stroke:"var(--bui-fg-danger)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})}),title:`${i}%`}),r(g,{title:t.name}),r(g,{title:`${new Intl.NumberFormat().format(e??0)} failing`})]},t.id)})})]}),F&&r(A,{...R})]})};export{G as TopFailingChecksTableBUI};
|
|
2
2
|
//# sourceMappingURL=TopFailingChecksTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsxs as p,Fragment as u,jsx as r}from"react/jsx-runtime";import{useRouteRef as k}from"@backstage/core-plugin-api";import{Box as f,HeaderPage as l}from"@backstage/ui";import{useEffect as d}from"react";import{TrackFormProvider as g,useTrackFormContext as h}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.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"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useCreateTrack as T}from"../../hooks/tracks/useCreateTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useFeatureFlag as C}from"../../hooks/useFeatureFlag.esm.js";import{tracksPageRouteRef as i}from"../../routes.esm.js";import{DocLinkButton as y}from"../DocLinkButton/DocLinkButton.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as F}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const a=()=>{const{setIsLoading:t}=h(),{mutateAsync:o,isLoading:e}=T();d(()=>{t(e)},[t,e]);const[c,s]=b(i),m=async n=>{await o(n,{onSuccess:s})};return F({title:"Create Track",description:"Create a new track that aligns with your organization's long-term tech health initiatives by entering the details below.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),r(w,{handleClose:c,onSave:m})},x=()=>{const t=C("backstage-ui"),o=k(i);return p(u,{children:[t&&r(f,{children:r(l,{title:"Create Track",breadcrumbs:[{label:"All Tracks",href:o()}],customActions:r(y,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/"})})}),r(g,{children:r(a,{})})]})};export{x as TrackCreatePage,a as TrackCreateView};
|
|
2
2
|
//# sourceMappingURL=TrackCreatePage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as d,Fragment as f,jsx as r}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as k}from"@backstage/plugin-permission-react";import{Box as u,HeaderPage as l}from"@backstage/ui";import{soundcheckTrackUpdatePermission as g}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as h}from"react-router-dom";import{TrackFormProvider as P}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.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{useTrack as b}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useFeatureFlag as R}from"../../hooks/useFeatureFlag.esm.js";import{trackDetailsRouteRef as T,tracksPageRouteRef as E}from"../../routes.esm.js";import{DocLinkButton as F}from"../DocLinkButton/DocLinkButton.esm.js";import{LoadingIndicator as w}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as x}from"../PageWarningMessage/PageWarningMessage.esm.js";import{TrackEditView as I}from"./TrackEditView.esm.js";const y=()=>{const{trackId:o}=h(),{data:t,isLoading:i}=b(o),{loading:e,allowed:m}=k({permission:g,resourceRef:o}),a=m&&t?.isEditable,c=R("backstage-ui"),p=s(T),n=s(E);return d(f,{children:[c&&r(u,{children:r(l,{title:`Edit ${t?.name??o??"Track"}`,breadcrumbs:[{label:"All Tracks",href:n()},{label:"Details",href:p({trackId:o??""})}],customActions:r(F,{href:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks/"})})}),r(x,{entityName:"track",entityId:o,showNotFound:!i&&!t,showCannotEdit:!e&&!a}),i||e?r(w,{}):t&&a&&r(P,{children:r(I,{track:t,canEdit:m})})]})};export{y as TrackEditPage};
|
|
2
2
|
//# sourceMappingURL=TrackEditPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as l}from"react/jsx-runtime";import{useEffect as i,useCallback as f}from"react";import{useTrackFormContext as g}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../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"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as y}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import{useUpdateTrack as E}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as h}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as T}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const b=({track:t,canEdit:p})=>{const{setSelectedItem:e,setIsLoading:m,selectedItem:n,showReadOnly:r}=g(),{mutateAsync:s,isLoading:c}=E();i(()=>m(c),[m,c]);const o=!p||!t.isEditable;i(()=>{o?r(t):e(t)},[t,e,o,r]);const[d,a]=y(h),k=f(async u=>{await s(u,{onSuccess:a})},[a,s]);return i(()=>{},[t,r,o]),T({title:`${o?"View":"Edit"} Track`,description:"Edit your track's details to match your needs.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),n?l(w,{handleClose:d,onSave:k}):null};export{b as TrackEditView};
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import{useEffect as i,useCallback as f}from"react";import{useTrackFormContext as g}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../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"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as y}from"../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useUpdateTrack as E}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as h}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as T}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const b=({track:t,canEdit:p})=>{const{setSelectedItem:e,setIsLoading:m,selectedItem:n,showReadOnly:r}=g(),{mutateAsync:s,isLoading:c}=E();i(()=>m(c),[m,c]);const o=!p||!t.isEditable;i(()=>{o?r(t):e(t)},[t,e,o,r]);const[d,a]=y(h),k=f(async u=>{await s(u,{onSuccess:a})},[a,s]);return i(()=>{},[t,r,o]),T({title:`${o?"View":"Edit"} Track`,description:"Edit your track's details to match your needs.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),n?l(w,{handleClose:d,onSave:k}):null};export{b as TrackEditView};
|
|
2
2
|
//# sourceMappingURL=TrackEditView.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{Content as d}from"@backstage/core-components";import{FormProvider as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{Content as d}from"@backstage/core-components";import{FormProvider as f}from"react-hook-form";import{useTrackFormContext as u}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import"../../contexts/UserProvider.esm.js";import{useFeatureFlag as S}from"../../hooks/useFeatureFlag.esm.js";import{formStyles as F}from"../../utils/formStyles.esm.js";import{FormFilterSection as b}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as h}from"../FormStepper/FormStepper.esm.js";import{LevelsStepNew as k}from"./Steps/LevelsStep/LevelsStepNew.esm.js";import{TrackDetailsStep as g}from"./Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import{TrackStepNameMapping as y}from"./utils/types.esm.js";import"./utils/validation.esm.js";import{TRACK_FIELDS as x}from"./utils/trackFormUtils.esm.js";import{useTrackForm as T}from"./utils/useTrackForm.esm.js";const N=({onSave:l,handleClose:a})=>{const{selectedItem:p,isLoading:n,isReadOnly:r}=u(),o=F(),s=S("backstage-ui"),{formMethods:t,onSubmit:i}=T(l),m=[{label:"Enter track details",content:()=>e(g,{})},{label:"Add levels",content:()=>e(k,{})},{label:"Choose the affected entities (Optional)",content:()=>e(b,{name:"filtersStep.filter",keyValueFilterName:"filtersStep.keyValueFilter",disabled:r,description:x.filter.description,excludeFilterName:"filtersStep.excludeFilter",excludeKeyValueFilterName:"filtersStep.excludeKeyValueFilter"})}],c=p?[...Array(m.length).keys()]:[0];return e(d,{className:s?o.formWrapperBUI:o.formWrapper,children:e(f,{...t,children:e("form",{onSubmit:t.handleSubmit(i),children:e(h,{onClose:a,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:i,initialVisited:c,stepNameMap:y,steps:m,isLoading:n,isReadOnly:r,saveButtonText:"Save Track"})})})})};export{N as TrackForm};
|
|
2
2
|
//# sourceMappingURL=TrackForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{zodResolver as k}from"@hookform/resolvers/zod";import{useMemo as T,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as g}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as w}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as d,mapCatalogFilterToFormKeyValueFilters as c,mapFiltersToCatalogFilter as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f,emptyKeyValueFilters as y}from"../../Filter/types.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const F={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"status",draft:!1},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{filter:f(),keyValueFilter:y(),excludeFilter:f(),excludeKeyValueFilter:y()}},S=({name:e,description:r,ownerEntityRef:o,filter:t,levels:i,documentationURL:a,badge:p,exclude:l,draft:n})=>({detailsStep:{name:e,ownerEntityRef:o,description:r??"",documentationURL:a??void 0,badgeType:p?.variant===w.Status?"status":"medal",draft:n??!1},levelsStep:{levels:i?.map(m=>({name:m.name??`Level ${m.ordinal}`??"Level 1",description:m.description??"",checks:m.checks.map(s=>({id:s.id,name:s.name??s.id,description:s.description??""}))}))||[]},filtersStep:{filter:d(t),keyValueFilter:c(t),excludeFilter:d(l),excludeKeyValueFilter:c(l)}}),v=(e,r,o)=>({id:o?.id??g(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:o?.type??"standard",levels:e.levelsStep.levels?.map((t,i)=>({ordinal:i+1,name:t.name??"",description:t.description??"",checks:t.checks.map(a=>r[a.id])})),filter:u(e.filtersStep.filter,e.filtersStep.keyValueFilter),exclude:u(e.filtersStep.excludeFilter,e.filtersStep.excludeKeyValueFilter),draft:e.detailsStep.draft??!1}),M=e=>{const{selectedItem:r}=h(),o=T(()=>r?S(r):F,[r]),t=V({defaultValues:o,mode:"onChange",resolver:k(C)}),{userEntityRef:i}=E();R(()=>{!r&&i&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",i)},[r,i,t]);const{checksMap:a}=L(),{showModal:p}=x();return{formMethods:t,onSubmit:async l=>{if(!await p({title:"Save Track",message:`Are you sure you want to save track: ${l.detailsStep.name}?`,error:!1}))return;const n=v(l,a??{},r);e(n)}}};export{F as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,S as mapTrackToFormValues,M as useTrackForm};
|
|
1
|
+
import{zodResolver as k}from"@hookform/resolvers/zod";import{useMemo as T,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as g}from"uuid";import{useTrackFormContext as h}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as w}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useGetChecksMap as L}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as d,mapCatalogFilterToFormKeyValueFilters as c,mapFiltersToCatalogFilter as u}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as f,emptyKeyValueFilters as y}from"../../Filter/types.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const F={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"status",draft:!1},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{filter:f(),keyValueFilter:y(),excludeFilter:f(),excludeKeyValueFilter:y()}},S=({name:e,description:r,ownerEntityRef:o,filter:t,levels:i,documentationURL:a,badge:p,exclude:l,draft:n})=>({detailsStep:{name:e,ownerEntityRef:o,description:r??"",documentationURL:a??void 0,badgeType:p?.variant===w.Status?"status":"medal",draft:n??!1},levelsStep:{levels:i?.map(m=>({name:m.name??`Level ${m.ordinal}`??"Level 1",description:m.description??"",checks:m.checks.map(s=>({id:s.id,name:s.name??s.id,description:s.description??""}))}))||[]},filtersStep:{filter:d(t),keyValueFilter:c(t),excludeFilter:d(l),excludeKeyValueFilter:c(l)}}),v=(e,r,o)=>({id:o?.id??g(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:o?.type??"standard",levels:e.levelsStep.levels?.map((t,i)=>({ordinal:i+1,name:t.name??"",description:t.description??"",checks:t.checks.map(a=>r[a.id])})),filter:u(e.filtersStep.filter,e.filtersStep.keyValueFilter),exclude:u(e.filtersStep.excludeFilter,e.filtersStep.excludeKeyValueFilter),draft:e.detailsStep.draft??!1}),M=e=>{const{selectedItem:r}=h(),o=T(()=>r?S(r):F,[r]),t=V({defaultValues:o,mode:"onChange",resolver:k(C)}),{userEntityRef:i}=E();R(()=>{!r&&i&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",i)},[r,i,t]);const{checksMap:a}=L(),{showModal:p}=x();return{formMethods:t,onSubmit:async l=>{if(!await p({title:"Save Track",message:`Are you sure you want to save track: ${l.detailsStep.name}?`,error:!1}))return;const n=v(l,a??{},r);e(n)}}};export{F as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,S as mapTrackToFormValues,M as useTrackForm};
|
|
2
2
|
//# sourceMappingURL=useTrackForm.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as y,Fragment as le}from"react/jsx-runtime";import{stringifyEntityRef as F,parseEntityRef as ce,RELATION_OWNED_BY as me,RELATION_PART_OF as de}from"@backstage/catalog-model";import{useRouteRef as pe}from"@backstage/core-plugin-api";import{entityRouteRef as fe,getEntityRelations as M,humanizeEntityRef as b}from"@backstage/plugin-catalog-react";import{Table as ye,TableHeader as ue,Column as c,TableBody as ge,TablePagination as he,Row as we,Flex as K,Cell as P,Box as $,Text as Re,CellProfile as ke}from"@backstage/ui";import{makeStyles as Pe}from"@material-ui/core";import{compact as Se,uniq as Be}from"lodash";import{useState as v,useMemo as n,useEffect as Te,useCallback as Ee}from"react";import{useNavigate as Ce}from"react-router-dom";import{TrackEntityField as l,Direction as q}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{usePagination as be}from"../../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useEntitiesByRefs as ve}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as Le}from"../../../hooks/catalog/useProfileImages.esm.js";import{useTrackEntities as xe}from"../../../hooks/entities/useTrackEntities.esm.js";import{getPercentage as w}from"../../../utils/formatters.esm.js";import{CertificationBadge as Ne}from"../../Badges/CertificationBadge.esm.js";import{CustomCell as z}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Ie}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"../../../routes.esm.js";import{LoadingTableSkeleton as Oe}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as De}from"../../StatusBar/StatusBar.esm.js";import{toTrackEntityRow as Ae}from"./utils.esm.js";const H=10,Q=a=>{const{lifecycles:m,owners:d,types:p,systems:f}=a,u=m?.length?{"spec.lifecycle":m}:void 0,g=d?.length?{"relations.ownedBy":d}:void 0,S=p?.length?{"spec.type":p}:void 0,B=f?.length?{"relations.partOf":f}:void 0;return{...u,...g,...S,...B}},_e=Pe(a=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},passed:{color:`${a.palette.success.main} !important`},failed:{color:`${a.palette.error.main} !important`},statusBar:{width:"30%"}})),je={name:l.Name,owner:l.Owner,certificationLevel:l.CertificationLevel,checkPassRate:l.CheckPassRate,system:l.System,type:l.Type,lifecycle:l.Lifecycle},Fe=({track:a,lifecycles:m,owners:d,types:p,systems:f,certificationStatus:u,searchValue:g,isCampaign:S})=>{const B=_e(),L=Ce(),x=pe(fe),[T,U]=v("ascending"),[R,V]=v("name"),[N,I]=v({orderBy:void 0,filter:Q({lifecycles:m,owners:d,types:p,systems:f})}),{data:k,isLoading:W}=xe({trackId:a?.id??"",orderBy:N.orderBy,filter:N.filter,certificationStatus:u}),h=n(()=>k?.trackEntities.edges??[],[k]),Y=n(()=>k?.trackEntities.totalCount??0,[k])>H,G=h.map(e=>e.node.entityRef)??[],{data:E,isLoading:J}=ve({entityRefs:G}),C=n(()=>!a||!h?.length||!E?.items?.length?[]:Se(h.map(e=>{const i=E.items.find(o=>!!o&&F(o)===e.node.entityRef);return i?Ae({trackDetails:e.node,track:a,entity:i}):void 0})),[h,E?.items,a]),O=n(()=>{if(!g?.length)return C;const e=g.toLowerCase().trim();return C.filter(({entity:i})=>i.metadata.name.toLowerCase().includes(e))},[C,g]),{paginatedItems:D,paginationProps:X}=be({pageParam:"perPage",defaultPageSize:H,items:O}),Z=Be(D.flatMap(e=>e.entity.relations?.filter(({type:i,targetRef:o})=>i==="ownedBy"&&o).map(i=>i.targetRef)||[])),{profileImageMap:ee}=Le(Z);Te(()=>{let e;R?e={field:je[R]??l.Name,direction:T==="ascending"?q.Asc:q.Desc}:e=void 0,I(i=>({...i,orderBy:e,filter:Q({lifecycles:m,owners:d,types:p,systems:f}),certificationStatus:u}))},[I,R,T,u,m,d,f,p]);const te=Ee(e=>{const i=ce(F(e)),o=x(i);L(`${o}/soundcheck`)},[L,x]),ie=({row:e})=>{const i=M(e.entity,me).map(s=>b(s,{defaultKind:s.kind})).join(", "),o=e.entity.relations?.find(({type:s})=>s==="ownedBy")?.targetRef,re=M(e.entity,de,{kind:"system"}).map(s=>b(s,{defaultKind:"system"})).join(", ");let A;o&&(A=ee?.[o]);const _=b(e.entity,{defaultKind:e.entity.kind}),r=n(()=>(e.status?.passed??0)+(e.status?.failed??0)+(e.status?.warning??0)+(e.status?.error??0)+(e.status?.notReported??0)+(e.status?.exempt??0),[e.status]),j=n(()=>{let s;return e.status?.allPassPercentage!==null&&e.status?.allPassPercentage!==void 0?s=e.status.allPassPercentage:e.status&&(s=w(e.status.passed+e.status.exempt,r)),s},[e.status,r]),se=n(()=>w(e.status?.failed,r),[e.status,r]),ne=n(()=>w(e.status?.warning,r),[e.status,r]),ae=n(()=>w(e.status?.notReported,r),[e.status,r]),oe=n(()=>w(e.status?.error,r),[e.status,r]);return y(we,{onAction:()=>te(e.entity),children:[t(z,{children:t(K,{children:t(Ne,{badge:e.badge,trackType:S?"campaign":void 0})})}),t(P,{title:_}),t(z,{children:y(K,{align:"center",gap:"2",children:[t($,{children:y(Re,{children:[j,"%"]})}),t($,{className:B.statusBar,children:t(De,{passedPercent:j,failedPercent:se,warningPercent:ne,notReportedPercent:ae,errorPercent:oe})})]})}),t(P,{title:re}),t(P,{title:e.entity.spec?.type}),t(P,{title:e.entity.spec?.lifecycle}),t(ke,{name:i,src:A??_})]},e.id)};return W||J?t(Oe,{}):!h.length||!O.length?t(Ie,{title:"No track entities found",body:"There are no track entities found."}):y(le,{children:[y(ye,{onSortChange:({direction:e,column:i})=>{V(String(i)),U(e)},sortDescriptor:{direction:T,column:R},children:[y(ue,{children:[t(c,{id:"state",style:{width:"5%"}}),t(c,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"30%"},children:"Name"}),t(c,{id:"checks",style:{width:"15%"},children:"Checks"}),t(c,{id:"system",allowsSorting:!0,style:{width:"15%"},children:"System"}),t(c,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(c,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"}),t(c,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Owner"})]}),t(ge,{children:D.map(e=>t(ie,{row:e},e.id))})]}),Y&&t(he,{...X})]})};export{Fe as TrackEntitiesTableBUI};
|
|
2
2
|
//# sourceMappingURL=TrackEntitiesTableBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as i,jsxs as e}from"react/jsx-runtime";import{Box as m}from"@backstage/ui";import{makeStyles as f,useTheme as p}from"@material-ui/core";import{ResponsiveContainer as g,AreaChart as h,CartesianGrid as b,XAxis as v,YAxis as n,Tooltip as y,Area as s}from"recharts";import{compactNumberFormatter as u}from"../../utils/formatters.esm.js";import{getTrackHistoryLineChartData as k,getChartColors as x,formatTrackHistoryChartTooltip as L}from"../Charts/chartUtils.esm.js";import{LoadingTableSkeleton as A}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const C=f(()=>({container:{height:180,overflow:"hidden"},"@global":{".recharts-default-tooltip li":{margin:"0 !important",padding:"0 !important"}}})),I=({track:a,history:o})=>{const l=C(),d=k(o),c=p(),t=x(c);return!a||!o?i(A,{}):i(m,{className:l.container,children:i(g,{debounce:1,children:e(h,{data:d,margin:{top:0,right:0,bottom:0,left:0},children:[e("defs",{children:[a?.levels.map(r=>e("linearGradient",{id:`gradient-${r.ordinal}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[i("stop",{offset:"5%",stopColor:t[r.ordinal%t.length],stopOpacity:.4}),i("stop",{offset:"95%",stopColor:t[r.ordinal%t.length],stopOpacity:0})]},`gradient-${r.ordinal}`)),e("linearGradient",{id:"gradient-no-level",x1:"0",y1:"0",x2:"0",y2:"1",children:[i("stop",{offset:"5%",stopColor:"var(--bui-fg-disabled)",stopOpacity:.4}),i("stop",{offset:"95%",stopColor:"var(--bui-fg-disabled)",stopOpacity:0})]})]}),i(b,{stroke:"var(--bui-border)",strokeWidth:1,horizontal:!0,vertical:!1}),i(v,{dataKey:"name",tickLine:!1,axisLine:!1}),i(n,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:r=>`${r}%`,ticks:[0,25,50,75,100]}),i(n,{yAxisId:"right",orientation:"right",domain:[0,Math.max(o?.certificationStatusHistory.numberOfEntities,1)],axisLine:!1,tickLine:!1,tickFormatter:r=>u(r)}),i(y,{contentStyle:{backgroundColor:"var(--bui-bg-surface-1)",color:"var(--bui-fg-secondary)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-3)"},cursor:{stroke:"var(--bui-fg-secondary)",strokeWidth:1},formatter:r=>L(r,o)}),a?.levels?.map(r=>i(s,{type:"monotone",dataKey:`Level ${r.ordinal}`,name:r.name??`Level ${r.ordinal}`,stackId:"1",yAxisId:"right",stroke:t[r.ordinal%t.length]||"var(--bui-fg-disabled)",strokeWidth:2,fill:`url(#gradient-${r.ordinal})`,isAnimationActive:!1,activeDot:{fill:t[r.ordinal%t.length]||"var(--bui-fg-disabled)",stroke:"var(--bui-fg-secondary)",strokeWidth:1,r:5}},`Level ${r.ordinal}`)),i(s,{type:"monotone",dataKey:"No Level",name:"No Level",stackId:"1",yAxisId:"right",stroke:"var(--bui-fg-secondary)",strokeWidth:2,fill:"url(#gradient-no-level)",isAnimationActive:!1,activeDot:{fill:"var(--bui-fg-disabled)",stroke:"var(--bui-fg-secondary)",strokeWidth:1,r:5}},"No Level")]})})})};export{I as TrackHistoryChartBUI};
|
|
2
|
+
//# sourceMappingURL=TrackHistoryChartBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t,jsxs as s,Fragment as ue}from"react/jsx-runtime";import{parseEntityRef as fe}from"@backstage/catalog-model";import{useRouteRef as R}from"@backstage/core-plugin-api";import{usePermission as he}from"@backstage/plugin-permission-react";import{Box as o,HeaderPage as ke,Flex as j,Text as K}from"@backstage/ui";import{makeStyles as ge}from"@material-ui/core";import{toEntityFilterQuery as Se,soundcheckTrackReadPermission as be}from"@spotify/backstage-plugin-soundcheck-common";import{useState as v,useMemo as C,useEffect as U}from"react";import{useSearchParams as ve,useParams as Ce}from"react-router-dom";import ye from"react-use/lib/useDebounce";import Ee from"react-use/lib/useLocalStorage";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Te}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Le}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as we}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as Ie}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Re}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Fe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Ne}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as Pe,trackOverviewRouteRef as Be,trackExplorerRouteRef as Oe}from"../../routes.esm.js";import{getEntitiesBucket as _e,getChecksBucket as xe}from"../../utils/helpers.esm.js";import{DescriptionCard as He}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as Ae}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as Ve}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as je}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Ke}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as D}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ue}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as De}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as Me}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Ye}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as $e}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{PageCustomActions as Ge}from"../PageCustomActions/PageCustomActions.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as qe}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTableBUI as Qe}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as We}from"./TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const ze=ge(()=>({emptyContainer:{padding:"var(--bui-space-1)"},container:{padding:"0 var(--bui-space-1) var(--bui-space-6)"},tables:{margin:"0 var(--bui-space-2)"},cards:{margin:"0 var(--bui-space-2) var(--bui-space-12)",display:"flex",gridGap:"var(--bui-space-4)"},tableContent:{margin:"var(--bui-space-3) 0 0"},levelSection:{margin:"0 0 var(--bui-space-6)"},levelHeading:{padding:"var(--bui-space-3)",background:"var(--bui-bg-surface-2)"}})),u={CHECKS_BY_LEVELS:"Checks By Levels",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},Je=()=>{const c=ze(),[a,y]=ve(),[F,M]=v(new Set([u.CHECKS_BY_LEVELS])),E=F.values().next().value??u.CHECKS_BY_LEVELS,[n,Y]=v(a.get("search")||""),[N,$]=v(""),{trackId:i}=Ce(),{data:r,isLoading:f,isError:G}=Te(i),q=R(Pe),P=$e(r??void 0),B=r?.ownerEntityRef,Q=B?fe(B).name:void 0,W=Array.from(new Set(r?.levels.flatMap(e=>e.checks).map(e=>e.id)??[])),{owners:m,lifecycles:l,types:p,systems:d}=Ue(),T=C(()=>De({lifecycles:l,owners:m,types:p,systems:d}),[l,m,p,d]),L=C(()=>qe(a.get("numberOfDays")),[a]),[g,O]=v(!1),[h,w]=Ee("track-overview-search-params","");U(()=>{!g&&a?.toString()?(h!==a.toString()&&w(a.toString()),O(!0)):!g&&h?(y(new URLSearchParams(h)),O(!0)):g&&h!==a.toString()&&w(a.toString())},[a,y,w,h,g]),ye(()=>{$(n);const e=new URLSearchParams(a.toString());n?e.set("search",n):e.delete("search"),y(e,{replace:!0})},300,[n]);const _=C(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:i||"",filtersApplied:m.length+l.length+p.length+d.length,ownersFilter:m.join(",")||"",lifecyclesFilter:l.join(",")||"",typesFilter:p.join(",")||"",systemsFilter:d.join(",")||"",numberOfDays:L,tracksSearch:N||""}}),[i,m,l,p,d,L,N]),{reportContentLoaded:x}=Ne(_),{reporter:z}=Fe(_),{data:S,isLoading:H,isError:J}=Le({trackId:i,filter:T},!!i),{data:X,isLoading:A,isError:Z}=we({trackId:i,filter:T,numberOfDays:L},!!i),{data:b,isLoading:I}=Ie({trackId:i,checkIds:W,filter:T},!!r),ee=C(()=>Se(r?.filter),[r]),te=G||J||Z,{loading:re,allowed:ie}=he({permission:be,resourceRef:i}),{filters:ae,selected:oe,setSelected:se,onRemoveTag:ce,selectedTags:ne}=Re({entityFilterQuery:ee}),me=r?.levels.flatMap(e=>{const k=n?.trim().toLowerCase();return{...e,checks:k?e.checks.filter(({name:de})=>de.toLowerCase().includes(k)):e.checks}})??[],V=z?.getLCPValue();U(()=>{if(!f&&!I&&!H&&!A){const e=S?.certificationStatus?.numberOfEntities??0,k=b?.length??0;x({lcp:V,numberOfEntities:e,entitiesBucket:_e(e),numberOfChecks:k,checksBucket:xe(k)})}},[f,I,H,A,b,S,x,V]);const le=R(Be),pe=R(Oe);return f?t(Me,{}):!f&&!r?t(o,{className:c.emptyContainer,children:t(D,{title:"Track not found",body:`There is no track with the requested id: ${i}.`})}):!re&&!ie?t(o,{className:c.emptyContainer,children:t(D,{title:"Cannot view track",body:`No permission to view track with the requested id: ${i}.`})}):s(ue,{children:[t(o,{children:t(ke,{title:r?.name,customActions:t(Ye,{label:"Track Actions",disabled:!P.length,placement:"left top",menuActions:P}),breadcrumbs:[{label:"Tracks",href:q()}],tabs:[{id:"overview",label:"Track Overview",href:i?le({trackId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?pe({trackId:i}):""}]})}),s(o,{className:c.container,children:[s(o,{className:c.cards,children:[t(He,{description:r?.description??void 0,owner:Q}),t(Ve,{track:r??void 0,status:S}),t(Ae,{track:r??void 0,history:X,isError:te})]}),r&&s(o,{className:c.tables,children:[s(j,{justify:"between",children:[t(o,{minWidth:"18rem",children:t(Ke,{options:Object.values(u),selected:F,ariaLabel:"Sections",onSelectionChange:M})}),t(Ge,{searchValue:n,setSearchValue:e=>Y(e),filters:ae,selected:oe,setSelected:se,onRemoveTag:ce,selectedTags:ne})]}),s(o,{className:c.tableContent,children:[E===u.CHECKS_BY_LEVELS&&t(o,{mt:"3",children:me.map(e=>s(o,{className:c.levelSection,children:[s(j,{align:"center",gap:"4",className:c.levelHeading,children:[s(K,{color:"secondary",children:["Level ",e.ordinal]})," ",t(K,{children:e.name})]}),t(je,{trackId:r.id,checks:e.checks,checkStatuses:b,isLoading:f||I})]},e.ordinal))}),E===u.TOP_FAILING_CHECKS&&t(Qe,{track:r,checkStatuses:b,certificationStatus:S?.certificationStatus,searchValue:n}),E===u.ENTITIES&&t(We,{track:r,lifecycles:l,owners:m,types:p,systems:d,searchValue:n})]})]})]})]})};export{Je as TrackPageBUI};
|
|
2
2
|
//# sourceMappingURL=TrackPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as d,Fragment as ie}from"react/jsx-runtime";import{useRouteRef as re}from"@backstage/core-plugin-api";import{EntityRefLink as oe}from"@backstage/plugin-catalog-react";import{usePermission as R}from"@backstage/plugin-permission-react";import{makeStyles as ae,Button as se,Box as ne,Tabs as ce,Tab as b}from"@material-ui/core";import{soundcheckTrackReadPermission as le,soundcheckTrackUpdatePermission as me,toEntityFilterQuery as pe}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as s,useState as de,useCallback as ge,useEffect as fe}from"react";import{useSearchParams as ue,useParams as he,useNavigate as ke}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as ye}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as Ce}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as be}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-use/lib/useLocalStorage";import{useCheckStatuses as ve}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useLCPReporting as Se}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Le}from"../../hooks/useLoadTimeReporting.esm.js";import{trackEditRouteRef as Te}from"../../routes.esm.js";import{getEntitiesBucket as Fe,getChecksBucket as we}from"../../utils/helpers.esm.js";import{FilterSidebar as Ee}from"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Ne}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as xe}from"../FilterSidebar/util.esm.js";import{LevelsTable as Re}from"../LevelsTable/LevelsTable.esm.js";import{LoadingIndicator as Be}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as De}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Pe}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContentDeprecated as Oe}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Ie}from"../TechHealth/Filters/utils.esm.js";import{TopFailingChecksTable as Ae}from"../TopFailingChecksTable/TopFailingChecksTable.esm.js";import{TrackEntitiesTable as je}from"./TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackProgressCard as He}from"./TrackProgressCard.esm.js";const Me=ae(r=>({root:{height:"100%",background:r.palette.background.default},pageContent:{display:"flex",minHeight:`calc(100vh - ${r.spacing(15)}px)`,borderTop:`1px solid ${r.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},trackProgressContainer:{padding:r.spacing(2,0,2,2),borderBottom:`1px solid ${r.palette.divider}`},levelCard:{margin:r.spacing(1,0,2)},editButton:{marginLeft:"auto"},contentArea:{flex:1,padding:r.spacing(0,2)},trackEntitiesContainer:{marginTop:r.spacing(1)},headerDescription:{fontSize:r.typography.body2.fontSize,margin:r.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},tabs:{padding:r.spacing(2,2,0,2)}})),$e=()=>{const[r]=ue(),{trackId:o}=he(),k=s(()=>Ie(r.get("numberOfDays")),[r]),{owners:n,lifecycles:c,types:l,systems:m,stagedLifecycles:B,setStagedLifecycles:D,stagedOwners:P,setStagedOwners:O,stagedTypes:I,setStagedTypes:A,stagedSystems:j,setStagedSystems:H,hasFilterChanges:M,handleApplyFilters:$,handleClearFilters:z}=Ne(),v=s(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:o||"",filtersApplied:n.length+c.length+l.length+m.length,ownersFilter:n.join(",")||"",lifecyclesFilter:c.join(",")||"",typesFilter:l.join(",")||"",systemsFilter:m.join(",")||"",numberOfDays:k}}),[o,n,c,l,m,k]),{reportContentLoaded:S}=Le(v),{reporter:V}=Se(v),i=Me(),[g,W]=de("checksByLevel"),L=ke(),T=re(Te),Q=ge((a,h)=>{W(h)},[]),y=s(()=>xe({lifecycles:c,owners:n,types:l,systems:m}),[c,n,l,m]),{data:e,isLoading:p,isError:U}=ye(o),{data:f,isLoading:C,isError:q}=Ce({trackId:o,filter:y},!!o),{data:G,isLoading:F,isError:J}=be({trackId:o,filter:y,numberOfDays:k},!!o),{loading:K,allowed:X}=R({permission:le,resourceRef:o}),{loading:w,allowed:E}=R({permission:me,resourceRef:o}),Y=s(()=>e?.ownerEntityRef?t(oe,{color:"inherit",entityRef:e.ownerEntityRef,className:i.ownerLink}):null,[e?.ownerEntityRef,i.ownerLink]),Z=s(()=>!w&&E&&e?.isEditable?t(se,{className:i.editButton,variant:"contained",color:"primary",onClick:()=>{L(T({trackId:e.id}))},children:"Edit Track"}):null,[E,i.editButton,T,w,L,e]),_=s(()=>e?.description?t(Oe,{className:i.headerDescription,content:e.description}):null,[i.headerDescription,e?.description]);Pe({title:e?.name,description:_,customSubtitle:Y,sectionRight:Z});const ee=e?.levels?.flatMap(a=>a.checks)??[],{data:u,isLoading:N}=ve({trackId:o,checkIds:ee.map(a=>a.id),filter:y},!!e),te=s(()=>pe(e?.filter),[e]),x=V?.getLCPValue();return fe(()=>{if(!p&&!N&&!C&&!F){const a=f?.certificationStatus?.numberOfEntities??0,h=u?.length??0;S({lcp:x,numberOfEntities:a,entitiesBucket:Fe(a),numberOfChecks:h,checksBucket:we(h)})}},[p,N,C,F,u,f,S,x]),d(ie,{children:[t(De,{entityName:"track",entityId:o,showNotFound:!p&&!e,showCannotView:!K&&!X}),p&&t(Be,{}),e&&t("div",{className:i.root,children:d("div",{className:i.pageContent,children:[t(Ee,{trackFilter:te,stagedTypes:I,stagedLifecycles:B,stagedOwners:P,stagedSystems:j,onTypesChange:A,onLifecyclesChange:D,onOwnersChange:O,onSystemsChange:H,onApplyFilters:$,onClearFilters:z,hasFilterChanges:M}),d("div",{className:i.mainContentArea,children:[t("div",{className:i.trackProgressContainer,children:t(He,{track:e,status:f,history:G,isError:U||q||J})}),t(ne,{className:i.tabs,children:d(ce,{value:g,onChange:Q,indicatorColor:"primary",textColor:"primary",children:[t(b,{label:"Checks By Level",value:"checksByLevel"}),t(b,{label:"Top Failing Checks",value:"topFailingChecks"}),t(b,{label:"Entities",value:"entities"})]})}),d("div",{className:i.contentArea,children:[g==="checksByLevel"&&t("div",{className:i.levelCard,children:t(Re,{track:e,checkStatuses:u,isLoading:p||C})}),g==="entities"&&t("div",{className:i.trackEntitiesContainer,children:t(je,{track:e,lifecycles:c,owners:n,types:l,systems:m})}),g==="topFailingChecks"&&t("div",{className:i.levelCard,children:t(Ae,{track:e,checkStatuses:u,certificationStatus:f?.certificationStatus})})]})]})]})})]})};export{$e as TrackPageDeprecated};
|
|
2
2
|
//# sourceMappingURL=TrackPageDeprecated.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as u}from"react/jsx-runtime";import{Skeleton as $,Box as h,Flex as x}from"@backstage/ui";import{makeStyles as N,useTheme as S}from"@material-ui/core";import{useMemo as p}from"react";import{calculateAdjustedBarWidths as w}from"../../utils/charts.esm.js";import{getChartColors as C}from"../Charts/chartUtils.esm.js";const E=N(()=>({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)"}})),j=({track:a,status:r})=>{const d=S(),l=E(),c=p(()=>{if(!r||!a)return{};const e={};let t=0,s=0;(r.statusByLevel||[]).sort((n,m)=>m.ordinal-n.ordinal).forEach(({ordinal:n,cumulativelyPassed:m})=>{const L=a.levels.find(k=>k.ordinal===n)?.name??`Level ${n}`,b=m-s;e[L]=b,t+=b,s=m}),(r.statusByLevel||[]).reverse();const o=Math.max(0,r.numberOfEntities-t);return e["No Level"]=o,e},[r,a]),g=p(()=>{if(!r||!a)return{};const e=C(d),t={};return(r.statusByLevel||[]).forEach(({ordinal:s})=>{const o=a.levels.find(n=>n.ordinal===s)?.name??`Level ${s}`;t[o]=e[s%e.length]}),t["No Level"]=d.palette.action.disabled,t},[d,r,a]),i=(r?.statusByLevel||[]).map(({ordinal:e})=>a?.levels.find(t=>t.ordinal===e)?.name??`Level ${e}`);i.push("No Level");const f=i.map(e=>c[e]).filter(e=>typeof e=="number"),y=i.every(e=>(c[e]||0)===0),B=p(()=>w(f),[f]);if(!a||!r)return u($,{width:"100%"});let v;return y?v=u(h,{className:`${l.barSegment} ${l.emptyBar}`}):v=i.map((e,t)=>{const s=c[e],o=g[e]||"var(--bui-fg-disabled)",n=B[t]||0;return s<=0?null:u(h,{className:l.barSegment,style:{backgroundColor:o,width:`${n}%`}},`track-status-bar-segment-${t}`)}),u(x,{className:l.container,children:v})};export{j as TrackStatusBarBUI};
|
|
2
|
+
//# sourceMappingURL=TrackStatusBarBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as a,jsxs as v}from"react/jsx-runtime";import{Text as g,Skeleton as b}from"@backstage/ui";import{makeStyles as N,createStyles as T,useTheme as S}from"@material-ui/core/styles";import{memo as L,useMemo as O,Fragment as W}from"react";import{compactNumberFormatter as y}from"../../utils/formatters.esm.js";import{getChartColors as j}from"../Charts/chartUtils.esm.js";const F=N(()=>T({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:"var(--bui-space-1)",minWidth:0},item:{display:"flex",alignItems:"center",minWidth:0},legendDash:{width:"var(--bui-space-3)",height:"var(--bui-space-1_5)",borderRadius:"var(--bui-space-1)",marginRight:"var(--bui-space-2)"},category:{display:"flex",alignItems:"center",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0,flex:1},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{marginLeft:"var(--bui-space-1)"}})),I=L(({track:r,status:i,isCampaign:d})=>{const h=S(),e=F(),x=O(()=>{if(!r)return[{name:"",key:1,color:"var(--bui-fg-disabled)",value:0},{name:"",key:2,color:"var(--bui-fg-disabled)",value:0},{name:"",key:3,color:"var(--bui-fg-disabled)",value:0}];const n=j(h);let s=0,o=0;const l=r.levels.sort((u,t)=>t.ordinal-u.ordinal).map(({name:u,ordinal:t})=>{const p=i?.statusByLevel.find(C=>C.ordinal===t)?.cumulativelyPassed??0,f=p-o,w={name:d?"Passed":u??`Level ${t}`,key:t,color:n[t%n.length]||"var(--bui-fg-disabled)",value:f};return s+=f,o=p,w}).reverse();r.levels.reverse();const c=i?.numberOfEntities??0,k=Math.max(0,c-s);return l.push({name:d?"Failed":"No Level",key:-1,color:"var(--bui-fg-disabled)",value:k}),l},[h,r,i,d]),m=i?.numberOfEntities??0;return a("div",{className:e.container,children:x.map(({name:n,key:s,color:o,value:l})=>{const c=m>0?Math.round(l/m*100):0;return v(W,{children:[a("div",{className:e.item,children:v("div",{className:e.category,children:[a("span",{className:e.legendDash,style:{backgroundColor:o}}),r?a(g,{className:e.categoryText,variant:"body-small",children:n}):a(b,{width:80,height:20})]})}),a("div",{className:`${e.item} ${e.valueCell}`,children:r&&i?v(g,{variant:"body-small",children:[y(l)," of"," ",y(m)," (",c,"%)"]}):a(b,{width:120,height:20})})]},s)})})});export{I as TrackStatusTableBUI};
|
|
2
|
+
//# sourceMappingURL=TrackStatusTableBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r,jsxs as d,Fragment as V}from"react/jsx-runtime";import{useRouteRef as y,useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as z}from"@backstage/plugin-catalog-react";import{usePermission as J}from"@backstage/plugin-permission-react";import{Box as a,HeaderPage as K,Flex as Q,SearchField as W}from"@backstage/ui";import{makeStyles as X}from"@material-ui/core";import{soundcheckTrackReadPermission as Y}from"@spotify/backstage-plugin-soundcheck-common";import{useState as A,useMemo as u,useEffect as Z}from"react";import{useSearchParams as _,useParams as ee}from"react-router-dom";import re 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{useGetAllTracks as te}from"../../hooks/tracks/useGetAllTracks.esm.js";import{useTrack as ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useHierarchicalTrackStatus as oe}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as ae}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as me}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as se}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as ne,trackOverviewRouteRef as pe,trackExplorerRouteRef as ce}from"../../routes.esm.js";import{getAllOwnedEntityCount as le}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as de,getTracksBucket as ue}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as E}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as fe}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import"../FilterSidebar/util.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js";import"../HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js";import"../HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as he}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as ge}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as ke}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as be}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as ve}from"../TechHealth/Filters/utils.esm.js";import{TechInsightsExplorerTable as Te}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as ye}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as Se}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const Re=X(()=>({emptyContainer:{padding:"var(--bui-space-1)"},container:{padding:"0 var(--bui-space-1) var(--bui-space-6)"},teams:{margin:"0 var(--bui-space-2) var(--bui-space-12)"},tables:{margin:"0 var(--bui-space-2)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),we=()=>{const o=Re(),[m,F]=_(),[s,B]=A(m.get("search")||""),i=m.get("group"),[S,O]=A(""),{trackId:e}=ee(),{data:f,isLoading:p}=ie(e),R=be(f??void 0),{owners:h,lifecycles:g,types:k,systems:b}=fe(),j=y(ne),w=u(()=>ve(m.get("numberOfDays")),[m]);re(()=>{O(s);const t=new URLSearchParams(m.toString());s?t.set("search",s):t.delete("search"),F(t,{replace:!0})},300,[s]);const L=u(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:e||"",filtersApplied:h.length+g.length+k.length+b.length,ownersFilter:h.join(",")||"",lifecyclesFilter:g.join(",")||"",typesFilter:k.join(",")||"",systemsFilter:b.join(",")||"",numberOfDays:w,tracksSearch:S||""}}),[e,h,g,k,b,w,S]),{reportContentLoaded:P}=se(L),{reporter:D}=me(L),{loading:G,allowed:H}=J({permission:Y,resourceRef:e}),{data:v,isLoading:c}=oe({trackId:e??"",groupRef:i??"",skip:!e}),{data:C}=te({}),n=u(()=>C?.edges.find(t=>t.node.id===e)?.node,[C?.edges,e]),{data:l,isLoading:T}=ae(i||void 0,{enabled:!!i&&!!e&&!!n,ownedEntitiesFilter:n?.filter??void 0}),I=$(z),q=u(()=>{if(!i)return;const t=l?.[i];return t?he(t,v||null,()=>"var(--bui-fg-primary)",I,void 0):void 0},[l,I,i,v]),N=D?.getLCPValue();Z(()=>{if(!p&&!T&&!c){const t=i?le(l?.[i]):0,x=n?1:0;P({lcp:N,numberOfEntities:t,entitiesBucket:de(t),numberOfTracks:x,tracksBucket:ue(x)})}},[p,P,T,c,l,i,n,N]);const M=y(pe),U=y(ce);return p?r(ge,{}):!p&&!f?r(a,{className:o.emptyContainer,children:r(E,{title:"Track not found",body:`There is no track with the requested id: ${e}.`})}):!G&&!H?r(a,{className:o.emptyContainer,children:r(E,{title:"Cannot view track",body:`No permission to view track with the requested id: ${e}.`})}):d(V,{children:[r(a,{children:r(K,{title:f?.name,customActions:r(ke,{label:"Track Actions",disabled:!R.length,placement:"left top",menuActions:R}),breadcrumbs:[{label:"Tracks",href:j()}],tabs:[{id:"overview",label:"Track Overview",href:e?M({trackId:e}):""},{id:"explorer",label:"Tech Insights Explorer",href:e?U({trackId:e}):""}]})}),d(a,{className:o.container,children:[r(a,{className:o.teams,children:r(Se,{trackStatus:v??void 0,isLoading:c})}),d(a,{className:o.tables,children:[d(Q,{align:"center",gap:"3",className:o.filters,children:[r(ye,{}),r(W,{value:s,onChange:B,"aria-label":"Search",placeholder:"Search"})]}),r(a,{className:o.tableContent,children:r(Te,{tableData:q,isLoading:T||c,trackId:n?.id})})]})]})]})};export{we as TrackTechInsightsExplorerPage};
|
|
2
|
+
//# sourceMappingURL=TrackTechInsightsExplorerPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as y}from"react/jsx-runtime";import{makeStyles as A,TextField as G}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{sortBy as x,isEmpty as E}from"lodash";import{useState as I,useMemo as o}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{useGetCampaigns as $}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as B}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetTracksApplicableEntityCount as F}from"../../hooks/tracks/useGetTracksApplicableEntityCount.esm.js";const j=A(a=>({input:{backgroundColor:a.palette.background.paper}})),D=({selectTrack:a,selectedTrackId:n,showArchived:d,showDraft:m,selectedGroupRef:h})=>{const T=j(),{data:s,isLoading:C}=B({}),{data:l,isLoading:v}=$({}),[S,b]=I(n??""),u=o(()=>new Set(l?.edges.filter(({node:t})=>t.archived).map(({node:t})=>t.track.id)??[]),[l?.edges]),r=o(()=>{let t=s?.edges?.map(({node:e})=>({id:e.id,name:e.name,type:e.type==="campaign"?"Campaign":"Track",draft:!!e.draft}))??[];return t=t?.filter(e=>(d||!u.has(e.id))&&(m||!e.draft)),x(t,"type")},[u,d,m,s?.edges]),{data:c,isLoading:f}=F(h??"",{ids:r.map(t=>t.id)}),p=o(()=>{if(f)return r;const t=c??[],e=r.map(i=>{const k=t.find(({id:L})=>L===i.id);return{...i,count:k?k.applicableEntityCount:void 0}}).filter(i=>i.count!==0);return E(e)?r:e},[c,f,r]),g=o(()=>p?.find(t=>t.id===n),[n,p]);return y(w,{loading:C||v,options:p,onChange:(t,e)=>a(e?.id??""),inputValue:S,value:g??null,getOptionLabel:t=>`${t.name}${t.count?` (${t.count})`:""}`,groupBy:t=>t.type,fullWidth:!0,onInputChange:(t,e)=>b(e),renderInput:t=>y(G,{...t,placeholder:"Select Track",className:T.input,style:{margin:0},margin:"dense",variant:"outlined"})},g?.id??"no-value")};export{D as TrackSelection};
|
|
1
|
+
import{jsx as y}from"react/jsx-runtime";import{makeStyles as A,TextField as G}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{sortBy as x,isEmpty as E}from"lodash";import{useState as I,useMemo as o}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{useGetCampaigns as $}from"../../hooks/campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as B}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import{useGetTracksApplicableEntityCount as F}from"../../hooks/tracks/useGetTracksApplicableEntityCount.esm.js";const j=A(a=>({input:{backgroundColor:a.palette.background.paper}})),D=({selectTrack:a,selectedTrackId:n,showArchived:d,showDraft:m,selectedGroupRef:h})=>{const T=j(),{data:s,isLoading:C}=B({}),{data:l,isLoading:v}=$({}),[S,b]=I(n??""),u=o(()=>new Set(l?.edges.filter(({node:t})=>t.archived).map(({node:t})=>t.track.id)??[]),[l?.edges]),r=o(()=>{let t=s?.edges?.map(({node:e})=>({id:e.id,name:e.name,type:e.type==="campaign"?"Campaign":"Track",draft:!!e.draft}))??[];return t=t?.filter(e=>(d||!u.has(e.id))&&(m||!e.draft)),x(t,"type")},[u,d,m,s?.edges]),{data:c,isLoading:f}=F(h??"",{ids:r.map(t=>t.id)}),p=o(()=>{if(f)return r;const t=c??[],e=r.map(i=>{const k=t.find(({id:L})=>L===i.id);return{...i,count:k?k.applicableEntityCount:void 0}}).filter(i=>i.count!==0);return E(e)?r:e},[c,f,r]),g=o(()=>p?.find(t=>t.id===n),[n,p]);return y(w,{loading:C||v,options:p,onChange:(t,e)=>a(e?.id??""),inputValue:S,value:g??null,getOptionLabel:t=>`${t.name}${t.count?` (${t.count})`:""}`,groupBy:t=>t.type,fullWidth:!0,onInputChange:(t,e)=>b(e),renderInput:t=>y(G,{...t,placeholder:"Select Track",className:T.input,style:{margin:0},margin:"dense",variant:"outlined"})},g?.id??"no-value")};export{D as TrackSelection};
|
|
2
2
|
//# sourceMappingURL=TrackSelection.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as k}from"react/jsx-runtime";import{useRouteRef as _,useApi as S,featureFlagsApiRef as ee}from"@backstage/core-plugin-api";import{usePermission as re}from"@backstage/plugin-permission-react";import{makeStyles as te,Button as N,Grid as a}from"@material-ui/core";import{soundcheckTrackCreatePermission as ae}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useMemo as oe,useEffect as B}from"react";import{useNavigate as ie}from"react-router-dom";import se from"react-use/lib/useDebounce";import{soundcheckApiRef as ne}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ce}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetTrackOwners as me}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import{useImportTracks as le}from"../../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as pe}from"../../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as de}from"../../../hooks/useLoadTimeReporting.esm.js";import ge from"../../../images/no-results.svg";import{trackCreateRouteRef as ue}from"../../../routes.esm.js";import{exportTracks as fe}from"../../../utils/export.esm.js";import{FilterDefault as L}from"../../../utils/filters.esm.js";import{EmptyState as F}from"../../EmptyState/EmptyState.esm.js";import"../../EmptyState/EmptyStateBUI.esm.js";import"@
|
|
1
|
+
import{jsx as r,jsxs as k}from"react/jsx-runtime";import{useRouteRef as _,useApi as S,featureFlagsApiRef as ee}from"@backstage/core-plugin-api";import{usePermission as re}from"@backstage/plugin-permission-react";import{makeStyles as te,Button as N,Grid as a}from"@material-ui/core";import{soundcheckTrackCreatePermission as ae}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useMemo as oe,useEffect as B}from"react";import{useNavigate as ie}from"react-router-dom";import se from"react-use/lib/useDebounce";import{soundcheckApiRef as ne}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ce}from"../../../hooks/tracks/useGetAllTracks.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useGetTrackOwners as me}from"../../../hooks/tracks/useGetTrackOwners.esm.js";import{useImportTracks as le}from"../../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as pe}from"../../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as de}from"../../../hooks/useLoadTimeReporting.esm.js";import ge from"../../../images/no-results.svg";import{trackCreateRouteRef as ue}from"../../../routes.esm.js";import{exportTracks as fe}from"../../../utils/export.esm.js";import{FilterDefault as L}from"../../../utils/filters.esm.js";import{EmptyState as F}from"../../EmptyState/EmptyState.esm.js";import"../../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import{ImportExportPanelDeprecated as he}from"../../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{Pagination as ke}from"../../Pagination/Pagination.esm.js";import{SearchFilters as Pe}from"../../SearchFilters/SearchFilters.esm.js";import{TrackEmptyState as P,TrackNoResults as I}from"./TrackEmptyState.esm.js";import{TracksOverviewSkeleton as Te}from"./TracksOverviewSkeleton.esm.js";import{TrackSummaryCard as ye}from"./TrackSummaryCard.esm.js";const Ce=te(t=>({headerButtons:{display:"flex",gap:t.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:t.spacing(0,0,1)},container:{padding:t.spacing(3),gap:t.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:t.spacing(1.5),paddingBottom:t.spacing(1.5)}})),be=({tracksPerPage:t,currentCursor:O})=>{const[s,T]=i(O),[g,E]=i(""),[n,D]=i(L.Alpha),[c,j]=i(L.Owner),[m,G]=i(""),y=oe(()=>({routeName:"soundcheck-tracks",additionalAttributes:{tracksPerPage:t,pageCursor:s||"",sortOrder:n||"",ownerFilter:c||"",nameSearch:m||""}}),[t,s,n,c,m]),{reportContentLoaded:C}=de(y),{reporter:H}=pe(y),l=Ce(),{data:M,isLoading:u}=me();se(()=>{G(g)},500,[g]);const{loading:b,allowed:V}=re({permission:ae}),W=ie(),$=_(ue),x=()=>W($()),{data:f,isLoading:o}=ce({ids:void 0,types:["standard","playlist"],first:t,after:s,orderAlphabetical:n,searchByOwner:c,searchByName:m}),p=f?.edges?.map(e=>e.node),[A,v]=i([]);B(()=>{T(void 0),v([])},[m]);const w=S(ee),q=!w.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-track-creation")||w.isActive("soundcheck-enable-track-creation"),h=!V||!q,z=e=>{D(e.target.value)},J=e=>{j(e.target.value)},K=S(ne),{mutateAsync:Q}=le(),U=async e=>Q(e),X=async()=>{const e=await K.getTracks({orderAlphabetical:"asc"});return fe(e.edges.map(Z=>Z.node))},R=H?.getLCPValue();if(B(()=>{!o&&!u&&C({lcp:R})},[o,u,C,R]),!o&&!p)return r(F,{title:P.title,description:P.description,imgSrc:ge,action:!b&&r(N,{disabled:h,variant:"contained",color:"primary",onClick:x,children:P.callToAction})});let d;o?d=r(Te,{}):p?.length?d=p?.map(e=>r(a,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`track card ${e.id}`,children:r(ye,{summary:e})},e.id)):d=r(a,{xs:12,item:!0,role:"listitem","aria-label":"result",children:r(F,{title:I.title,description:I.description})});const Y=f?.pageInfo.hasNextPage||A?.length>0;return k(a,{container:!0,direction:"row",className:l.container,children:[k(a,{container:!0,className:l.header,children:[r(Pe,{searchPlaceholder:"Search Available Tracks",isLoading:o||u,searchTerm:g,setSearchTerm:E,filterAlpha:n,handleAlphabeticalFilterChange:z,filterOwner:c,handleOwnerFilterChange:J,owners:M}),k(a,{item:!0,xs:4,className:l.headerButtons,children:[r(he,{resourceType:"track",disableImport:h,disableExport:o||!p?.length,onImport:U,onExport:X}),!b&&r(N,{disabled:h,variant:"contained",color:"primary",onClick:x,className:l.createButton,children:"Create Track"})]})]}),r(a,{container:!0,spacing:4,role:"list","aria-label":"tracks",children:d}),Y&&r(a,{item:!0,xs:12,children:r(ke,{response:f,listingsPerPage:t,cursor:s,setCursor:T,prevCursors:A,setPrevCursors:v,labelPerPageDropdown:"Tracks Per Page:",urlRoute:"tracks?tracksPerPage="})})]})};export{be as TrackListPageDeprecated};
|
|
2
2
|
//# sourceMappingURL=TrackListPageDeprecated.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as l}from"react/jsx-runtime";import{useRouteRef as p,useApi as I,configApiRef as v}from"@backstage/core-plugin-api";import{usePermission as a}from"@backstage/plugin-permission-react";import{soundcheckTrackUpdatePermission as u,soundcheckTrackDeletePermission as x}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as i}from"react";import{useNavigate as A}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 C}from"../../../hooks/useConfirmationModal.esm.js";import{useDeleteTrack as P}from"../../../hooks/tracks/useDeleteTrack.esm.js";import{useRecertifyTrack as M}from"../../../hooks/tracks/useRecertifyTrack.esm.js";import{trackDetailsRouteRef as N,trackEditRouteRef as O}from"../../../routes.esm.js";import{exportTrack as $}from"../../../utils/export.esm.js";import{SummaryCard as S}from"../../SummaryCard/SummaryCard.esm.js";import{TrackMetadata as j}from"./TrackMetadata.esm.js";const B=({summary:e})=>{const{loading:f,allowed:k}=a({permission:u,resourceRef:e.id}),{loading:y,allowed:h}=a({permission:x,resourceRef:e.id}),{loading:g,allowed:w}=a({permission:u,resourceRef:e.id}),{showModal:r}=C(),{mutate:m}=M(),{mutate:n}=P(),o=A(),s=p(N),c=p(O),d=I(v).getOptionalConfig("soundcheck.certifications.history");let t=d?.getOptionalBoolean("enable")?d?.getOptionalNumber("retentionTimeInDays")??120:1;t=Math.min(t,365);const R=i(async()=>{await r({title:"Recertify Track",message:`Are you sure you want to recertify track ${e.name}? It will erase existing certification data, which cannot be undone. New data will be generated for the past ${t} day(s), reflecting the track's current configuration. This process may take some time, you will be notified upon completion.`})&&m({trackId:e.id,numberOfDays:t})},[r,e.id,e.name,m,t]),T=i(async()=>{await r({title:"Delete Track",message:`Are you sure you want to delete track ${e.name}?`})&&n(e.id)},[r,e.id,e.name,n]),b=i(()=>{o(s({trackId:e.id}))},[o,e.id,s]),D=i(()=>{o(c({trackId:e.id}))},[o,e.id,c]),E=i(()=>{$(e)},[e]);return l(S,{title:e.name,description:e.description,children:l(j,{track:e}),handleView:b,handleEdit:e.isEditable&&!g&&w?D:void 0,handleDelete:e.isEditable&&!y&&h?T:void 0,handleExport:E,handleRecertify:!f&&k?R:void 0,viewIsPrimaryAction:!0})};export{B as TrackSummaryCard};
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import{useRouteRef as p,useApi as I,configApiRef as v}from"@backstage/core-plugin-api";import{usePermission as a}from"@backstage/plugin-permission-react";import{soundcheckTrackUpdatePermission as u,soundcheckTrackDeletePermission as x}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as i}from"react";import{useNavigate as A}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 C}from"../../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useDeleteTrack as P}from"../../../hooks/tracks/useDeleteTrack.esm.js";import{useRecertifyTrack as M}from"../../../hooks/tracks/useRecertifyTrack.esm.js";import{trackDetailsRouteRef as N,trackEditRouteRef as O}from"../../../routes.esm.js";import{exportTrack as $}from"../../../utils/export.esm.js";import{SummaryCard as S}from"../../SummaryCard/SummaryCard.esm.js";import{TrackMetadata as j}from"./TrackMetadata.esm.js";const B=({summary:e})=>{const{loading:f,allowed:k}=a({permission:u,resourceRef:e.id}),{loading:y,allowed:h}=a({permission:x,resourceRef:e.id}),{loading:g,allowed:w}=a({permission:u,resourceRef:e.id}),{showModal:r}=C(),{mutate:m}=M(),{mutate:n}=P(),o=A(),s=p(N),c=p(O),d=I(v).getOptionalConfig("soundcheck.certifications.history");let t=d?.getOptionalBoolean("enable")?d?.getOptionalNumber("retentionTimeInDays")??120:1;t=Math.min(t,365);const R=i(async()=>{await r({title:"Recertify Track",message:`Are you sure you want to recertify track ${e.name}? It will erase existing certification data, which cannot be undone. New data will be generated for the past ${t} day(s), reflecting the track's current configuration. This process may take some time, you will be notified upon completion.`})&&m({trackId:e.id,numberOfDays:t})},[r,e.id,e.name,m,t]),T=i(async()=>{await r({title:"Delete Track",message:`Are you sure you want to delete track ${e.name}?`})&&n(e.id)},[r,e.id,e.name,n]),b=i(()=>{o(s({trackId:e.id}))},[o,e.id,s]),D=i(()=>{o(c({trackId:e.id}))},[o,e.id,c]),E=i(()=>{$(e)},[e]);return l(S,{title:e.name,description:e.description,children:l(j,{track:e}),handleView:b,handleEdit:e.isEditable&&!g&&w?D:void 0,handleDelete:e.isEditable&&!y&&h?T:void 0,handleExport:E,handleRecertify:!f&&k?R:void 0,viewIsPrimaryAction:!0})};export{B as TrackSummaryCard};
|
|
2
2
|
//# sourceMappingURL=TrackSummaryCard.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jsx as e,jsxs as c,Fragment as J}from"react/jsx-runtime";import{useApi as L,useRouteRef as A}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Q}from"@backstage/plugin-catalog-react";import{usePermission as W}from"@backstage/plugin-permission-react";import{Box as x,HeaderPage as Y,Flex as q,Table as K,TableHeader as X,Column as s,TableBody as Z,TablePagination as _}from"@backstage/ui";import{makeStyles as ee}from"@material-ui/core";import{soundcheckTrackCreatePermission as te}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as re,isEmpty as y}from"lodash";import{useState as k,useMemo as l,useEffect as oe}from"react";import{soundcheckApiRef as ie}from"../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useSearchName as se}from"../../hooks/useSearchName.esm.js";import{usePagination as ne}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as me}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportTracks as ce}from"../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as pe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as le}from"../../hooks/useLoadTimeReporting.esm.js";import{trackCreateRouteRef as de,trackDetailsRouteRef as fe}from"../../routes.esm.js";import{exportTracks as ue}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as ge}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as he}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@remixicon/react";import{ImportExportPanelBUI as ye}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as ke}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as we}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useTrackActions as Re}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as Te}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const N=10,Pe=ee(()=>({container:{padding:"0 var(--bui-space-3) var(--bui-space-6)"},emptySpacing:{margin:"var(--bui-space-3) 0"}})),Se=({track:r,profileImageMap:n})=>{const p=l(()=>r.levels.reduce((m,f)=>m+(f.checks?.length??0),0),[r.levels]),o=A(fe),d=Re(r);return e(Te,{ownerEntityRef:r.ownerEntityRef,href:o({trackId:r.id}),menuActions:d,profileImageSrc:n[r.ownerEntityRef],name:r.name??r.id,description:r.description??"",documentationURL:r.documentationURL??void 0,cells:[{title:r.draft?"Draft":"Active"},{title:`${r.levels.length} Level${r.levels.length===1?"":"s"}`},{title:`${p} Check${p===1?"":"s"}`}]})},ve=()=>{const r=Pe(),[n,p]=k("ascending"),[o,d]=k(""),[m,f]=k(""),w=l(()=>({routeName:"soundcheck-tracks"}),[]),{reportContentLoaded:R}=le(w),{reporter:B}=pe(w),{data:T,isLoading:i}=ae({types:["standard","playlist"]}),u=l(()=>T?.edges?.map(t=>t.node)??[],[T?.edges]),{profileImageMap:U}=me(u.map(t=>t.ownerEntityRef)),P=L(Q),g=se({items:u,searchTerm:m}),S=l(()=>{if(!o)return g;const t=re(g,a=>o==="owner"?P.forEntity(a.ownerEntityRef).snapshot.primaryTitle.toLowerCase():o==="status"?a.draft?"draft":"active":a.name.toLowerCase());return n==="descending"&&t.reverse(),t},[P,o,n,g]),{paginatedItems:h,reset:H,paginationProps:M}=ne({pageParam:"perPage",defaultPageSize:N,items:S}),v=B?.getLCPValue();oe(()=>{i||R({lcp:v})},[i,R,v]);const $=A(de),{loading:C,allowed:I}=W({permission:te}),D=L(ie),{mutateAsync:V}=ce(),F=async t=>V(t),O=async()=>{const t=await D.getTracks({orderAlphabetical:"asc"});return ue(t.edges.map(a=>a.node))},j=!i&&!y(h),G=S.length>N,b=!i&&y(h),z=i;let E=null;return b&&(E=m?e(ge,{title:"No tracks found",body:"Your current search term did not return any tracks. Please try a different search term."}):e(he,{})),c(J,{children:[e(x,{children:e(Y,{title:"Tracks",customActions:c(q,{gap:"2",align:"center",children:[e(ye,{resourceType:"track",disableImport:!C&&!I,disableExport:i||y(u),onImport:F,onExport:O}),e(ke,{searchValue:m,setSearchValue:t=>{H(),f(t)},canCreate:!C&&I,createHref:$()})]})})}),c(x,{className:r.container,children:[z&&e(we,{rowCount:10}),b&&e("div",{className:r.emptySpacing,children:E}),j&&c(K,{onSortChange:({direction:t,column:a})=>{d(String(a)),p(t)},sortDescriptor:{direction:n,column:o},children:[c(X,{children:[e(s,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"51%"},children:"Track Name"}),e(s,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),e(s,{id:"levels",style:{width:"10%"},children:"Levels"}),e(s,{id:"checks",style:{width:"10%"},children:"Checks"}),e(s,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"}),e(s,{id:"actions",style:{width:"2%"}})]}),e(Z,{children:!i&&h.map(t=>e(Se,{track:t,profileImageMap:U??{}},t.id))})]}),G&&e(_,{...M})]})]})};export{ve as TracksListPageBUI};
|
|
2
2
|
//# sourceMappingURL=TracksListPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import{useSearchParams as i}from"react-router-dom";import{useFeatureFlag as p}from"../../hooks/useFeatureFlag.esm.js";import{RESULTS_PER_PAGE as e}from"../../utils/filters.esm.js";import{TrackListPageDeprecated as a}from"./TrackListPage/TrackListPageDeprecated.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-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"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../SummaryCard/SummaryCard.esm.js";import"./TrackListPage/TrackMetadata.esm.js";import{TracksListPageBUI as s}from"./TracksListPageBUI.esm.js";const c=()=>{const[o]=i(),r=o.get("tracksPerPage"),m=r?parseInt(r,10):e;return p("backstage-ui")?t(s,{}):t(a,{tracksPerPage:m})};export{c as TracksPage};
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{useSearchParams as i}from"react-router-dom";import{useFeatureFlag as p}from"../../hooks/useFeatureFlag.esm.js";import{RESULTS_PER_PAGE as e}from"../../utils/filters.esm.js";import{TrackListPageDeprecated as a}from"./TrackListPage/TrackListPageDeprecated.esm.js";import"@backstage/core-plugin-api";import"@backstage/plugin-permission-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"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../SummaryCard/SummaryCard.esm.js";import"./TrackListPage/TrackMetadata.esm.js";import{TracksListPageBUI as s}from"./TracksListPageBUI.esm.js";const c=()=>{const[o]=i(),r=o.get("tracksPerPage"),m=r?parseInt(r,10):e;return p("backstage-ui")?t(s,{}):t(a,{tracksPerPage:m})};export{c as TracksPage};
|
|
2
2
|
//# sourceMappingURL=TracksPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{stringifyEntityRef as I,parseEntityRef as b}from"@backstage/catalog-model";import{useApi as G,configApiRef as M}from"@backstage/core-plugin-api";import{combineEntityFilterQueries as N,getGroupFilterFromConfig as j}from"@spotify/backstage-plugin-soundcheck-common";import l from"lodash/startCase";import{useMemo as w,useCallback as B}from"react";import{useSearchParams as Q}from"react-router-dom";import{CheckState as r}from"../../components/CheckPage/utils.esm.js";import{useGetEntityFacets as f}from"../catalog/useGetEntityFacets.esm.js";import{useGetEntityRefs as _}from"../catalog/useGetEntityRefs.esm.js";function x({entityFilterQuery:m,hasStatusFilters:E=!1,hasCertificationStatusFilters:d=!1}){const R=G(M),[o,u]=Q(),A=N({kind:["group"]},j(R)),{data:y}=_(A),h=w(()=>y?.items.map(e=>({label:e.metadata.title??e.metadata.name,value:I(e)}))??[],[y]),{data:F}=f("spec.lifecycle",m),L=F?.map(e=>({label:e,value:e}))??[],{data:$}=f("spec.type",m),k=$?.map(e=>({label:e,value:e}))??[],{data:C}=f("relations.partOf",m),g=C?.map(e=>({label:b(e).name,value:e}))??[],O=[r.PASSED,r.FAILED,r.WARNING,r.EXEMPT,r.NOT_APPLICABLE,r.ERROR].map(e=>({label:l(e.toLowerCase()),value:e})),P=[r.PASSED,r.FAILED,r.NOT_REPORTED].map(e=>{const t=l(e.toLowerCase());return{label:t,value:t}}),v=(e,t)=>{const s=["owners","systems"];if(e==="certificationStatuses")return`statuses: ${l(t.toLowerCase())}`;const a=e.replace(/s$/,"");return s.includes(e)?`${a}: ${b(t).name}`:e==="states"?`${a}: ${l(t.toLowerCase())}`:`${a}: ${t}`},c=w(()=>{const e=["numberOfDays","search"],t={owners:new Set,lifecycles:new Set,types:new Set,systems:new Set,states:new Set,certificationStatuses:new Set};for(const[s,a]of o.entries())if(!e.includes(s)){const i=a.split(",").map(n=>n.trim()).filter(Boolean);t[s]=new Set(i)}return t},[o]),S=B((e,t)=>{const s=new URLSearchParams(o),a=Array.from(t);a.length>0?s.set(e,a.join(",")):s.delete(e),u(s,{replace:!0})},[o,u]),T=Object.entries(c).flatMap(([e,t])=>Array.from(t).map(s=>({label:v(e,s),value:`${e}:${s}`}))),D=e=>{e.forEach(t=>{if(typeof t!="string")return;const[s,a]=t.split(/:(.+)/),i=c[s];if(!i)return;const n=new Set(i);n.delete(a),S(s,n)})},p=[{key:"owners",label:"Owner",options:h},{key:"lifecycles",label:"Lifecycle",options:L},{key:"types",label:"Type",options:k},{key:"systems",label:"System",options:g}];return E&&p.push({key:"states",label:"States",options:O}),d&&p.push({key:"certificationStatuses",label:"Status",options:P}),{filters:p,selected:c,setSelected:S,selectedTags:T,onRemoveTag:D}}export{x as useFilters};
|
|
2
|
+
//# sourceMappingURL=useFilters.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useMemo as c}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import{useAllGroups as d}from"./useAllGroups.esm.js";import{useUsersGroupClaims as f}from"./useUsersGroupClaims.esm.js";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import"react-router-dom";const y=()=>{const{data:
|
|
1
|
+
import{useMemo as c}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import{useAllGroups as d}from"./useAllGroups.esm.js";import{useUsersGroupClaims as f}from"./useUsersGroupClaims.esm.js";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";const y=()=>{const{data:i,isLoading:m,isError:n}=f(),{data:e,isLoading:a,isError:u}=d();return{options:c(()=>{const o=new Map;return i&&i.forEach(({name:t,description:s,ref:r,type:p})=>{o.set(`${r}`,{name:t,description:s,ref:r,type:p,key:"My Groups"})}),e&&e.forEach(({name:t,description:s,ref:r,type:p})=>{o.has(`${r}`)||o.set(`${r}`,{name:t,description:s,ref:r,type:p,key:"All Groups"})}),[...o.values()]},[i,e]),isLoading:m||a,isError:n||u}};export{y as useGroupOptions};
|
|
2
2
|
//# sourceMappingURL=useGroupOptions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as n}from"@backstage/core-plugin-api";import{useQuery as i}from"@tanstack/react-query";import{soundcheckApiRef as c}from"../../api.esm.js";const o=(r,e)=>{const t=n(c);return i({queryKey:["groupHierarchy",r,e?.ownedEntitiesFilter,!!e?.includeParent],queryFn:async()=>(await t.getGroupHierarchy(r,e?.ownedEntitiesFilter,e?.includeParent)).hierarchy,staleTime:1e3*60*60,cacheTime:1e3*60*60*4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,refetchInterval:!1})};export{o as useGroupHierarchy};
|
|
1
|
+
import{useApi as n}from"@backstage/core-plugin-api";import{useQuery as i}from"@tanstack/react-query";import{soundcheckApiRef as c}from"../../api.esm.js";const o=(r,e)=>{const t=n(c);return i({queryKey:["groupHierarchy",r,e?.ownedEntitiesFilter,!!e?.includeParent],queryFn:async()=>(await t.getGroupHierarchy(r,e?.ownedEntitiesFilter,e?.includeParent)).hierarchy,staleTime:1e3*60*60,cacheTime:1e3*60*60*4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,refetchInterval:!1,enabled:!!r&&r.trim()!==""&&e?.enabled!==!1})};export{o as useGroupHierarchy};
|
|
2
2
|
//# sourceMappingURL=useGroupHierarchy.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{parseEntityRef as G}from"@backstage/catalog-model";import{useMemo as
|
|
1
|
+
import{parseEntityRef as G}from"@backstage/catalog-model";import{useMemo as i}from"react";import{useGetCampaigns as T}from"../campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as y}from"./useGetAllTracks.esm.js";import{useGetTracksApplicableEntityCount as E}from"./useGetTracksApplicableEntityCount.esm.js";function v(r){if(!r||r.trim()==="")return!1;try{return G(r).kind.toLowerCase()==="group"}catch{return!1}}function A(r,b={},h){const d=v(r)&&(h?.enabled??!0),{data:s,isLoading:p,error:c}=y(b,{enabled:d}),{data:o,isLoading:l,error:m}=T({},d),u=i(()=>o?.edges?new Set(o.edges.filter(({node:e})=>e.archived).map(({node:e})=>e.track.id)):new Set,[o]),a=i(()=>s?.edges?s.edges.map(({node:e})=>e).filter(e=>!u.has(e.id)).filter(e=>!e.draft).sort((e,n)=>e.id.localeCompare(n.id)):[],[s,u]),{data:t,isLoading:g,error:f}=E(r,{ids:a.map(e=>e.id)},{enabled:d&&a.length>0&&!p&&!l}),k=i(()=>t?new Map(t.map(e=>[e.id,e.applicableEntityCount])):new Map,[t]),C=i(()=>t?a.filter(e=>{const n=k.get(e.id);return n!==void 0&&n>0}):[],[a,k,t]),L=i(()=>p||l||g||!!r&&!t&&a.length>0,[p,l,g,r,t,a.length]),w=i(()=>c||m||f,[c,m,f]);return{tracks:C??[],campaigns:o,counts:t,isLoading:L,error:w,activeTrackCount:a?.length}}export{A as useTracksApplicableToGroup};
|
|
2
2
|
//# sourceMappingURL=useTracksApplicableToGroup.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{useCallback as g,useMemo as x}from"react";import{useSearchParams as M}from"react-router-dom";const z=({pageParam:p,defaultPageSize:l=10,items:r})=>{const[a,n]=M(),m=a.get(p),h=a.get("page"),s=m?parseInt(m,10):l,o=h?parseInt(h,10):1,c=(o-1)*s,i=g(e=>{const t=new URLSearchParams(a.toString());t.set("page",String(e)),n(t,{replace:!0})},[a,n]),P=g(e=>{const t=new URLSearchParams(a.toString());t.set(p,String(e)),t.set("page","1"),n(t,{replace:!0})},[p,a,n]),S=x(()=>r.length>s?r.slice(c,c+s):r,[r,c,s]),u=g(()=>{const e=Math.ceil(r.length/s),t=Math.min(o+1,e);i(t)},[o,r.length,s,i]),f=g(()=>{const e=Math.max(o-1,1);i(e)},[o,i]),w=g(()=>{const e=new URLSearchParams(a.toString());e.set("page","1"),n(e,{replace:!0})},[a,n]);return{paginationProps:{pageSize:s,rowCount:r.length,offset:c,onNextPage:u,onPreviousPage:f,onPageSizeChange:P},paginatedItems:S,reset:w}};export{z as usePagination};
|
|
2
2
|
//# sourceMappingURL=usePagination.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useEffect as B,useCallback as P}from"react";import{useSearchParams as h}from"react-router-dom";import u from"react-use/lib/useLocalStorage";const b=({localStoragePrefix:f,defaultSortBy:g,defaultDirection:p})=>{const[t,s]=h(),[a,n]=u(`${f}-sort-column`),[i,l]=u(`${f}-direction`),r=t.get("sortBy"),o=t.get("direction"),d=r||g,m=o||p||"desc";B(()=>{r&&r!==a&&n(r),o&&o!==i&&l(o);const e=new URLSearchParams(t.toString());let c=!1;!r&&a&&(e.set("sortBy",a),c=!0),!o&&i&&(e.set("direction",i),c=!0),c&&s(e,{replace:!0})},[a,i,t,n,l,s,o,r]);const y=P(e=>{const c=d===e&&m==="asc"?"desc":"asc",S=new URLSearchParams(t.toString());S.set("sortBy",e),S.set("direction",c),s(S,{replace:!0}),n(e),l(c)},[m,d,t,n,l,s]);return{orderBy:d,order:m,handleSort:y}};export{b as useSortTableLocalStorage};
|
|
2
|
+
//# sourceMappingURL=useSortTableLocalStorage.esm.js.map
|
package/dist/routes.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRouteRef as a,createSubRouteRef as
|
|
1
|
+
import{createRouteRef as a,createSubRouteRef as e}from"@backstage/core-plugin-api";const c=a({id:"soundcheck-entity"}),i=a({id:"soundcheck-group"}),r=e({id:"soundcheck-entity-certification-track-redirect",parent:c,path:"/tracks/:trackId"}),n=e({id:"soundcheck-entity-certification",parent:c,path:"/tracks/:trackId/checks/:checkId"}),s=e({id:"soundcheck-entity-playlist-redirect",parent:c,path:"/playlists/:playlistId"}),d=e({id:"soundcheck-entity-playlist-track-redirect",parent:c,path:"/playlists/:playlistId/tracks/:trackId"}),h=e({id:"soundcheck-entity-playlist-track-redirect",parent:c,path:"/playlists/:playlistId/tracks/:trackId/checks/:checkId"}),t=a({id:"soundcheck"}),o=e({id:"soundcheck-quickstart",parent:t,path:"/quickstart"}),k=e({id:"soundcheck-checks",parent:t,path:"/checks"}),p=e({id:"soundcheck-check-details",parent:t,path:"/checks/:checkId"}),u=e({id:"soundcheck-check-edit",parent:t,path:"/checks/:checkId/edit"}),R=e({id:"soundcheck-check-create",parent:t,path:"/checks/create"}),g=e({id:"soundcheck-check-templates",parent:t,path:"/checks/templates"}),l=e({id:"soundcheck-tracks",parent:t,path:"/tracks"}),f=e({id:"soundcheck-track-details",parent:t,path:"/tracks/:trackId"}),m=e({id:"soundcheck-track-edit",parent:t,path:"/tracks/:trackId/edit"}),I=e({id:"soundcheck-track-create",parent:t,path:"/tracks/create"}),y=e({id:"soundcheck-track-check-details",parent:t,path:"/tracks/:trackId/checks/:checkId"}),v=e({id:"soundcheck-campaigns",parent:t,path:"/campaigns"}),P=e({id:"soundcheck-campaign-details",parent:t,path:"/campaigns/:campaignId"}),x=e({id:"soundcheck-campaign-edit",parent:t,path:"/campaigns/:campaignId/edit"}),w=e({id:"soundcheck-campaign-create",parent:t,path:"/campaigns/create"}),E=e({id:"soundcheck-tech-health",parent:t,path:"/tech-health"}),C=e({id:"soundcheck-tech-insights",parent:t,path:"/tech-insights"}),D=e({id:"soundcheck-integrations-page",parent:t,path:"/integrations"}),T=e({id:"soundcheck-integration-details",parent:t,path:"/integrations/:integrationId"}),q=e({id:"soundcheck-integration-edit",parent:t,path:"/integrations/:integrationId/edit"}),O=e({id:"soundcheck-tech-insights-track",parent:t,path:"/tech-insights/track"}),b=e({id:"soundcheck-track-overview",parent:t,path:"/tracks/:trackId/overview"}),H=e({id:"soundcheck-track-explorer",parent:t,path:"/tracks/:trackId/explorer"}),S=e({id:"soundcheck-campaign-overview",parent:t,path:"/campaigns/:campaignId/overview"}),j=e({id:"soundcheck-campaign-explorer",parent:t,path:"/campaigns/:campaignId/explorer"});export{w as campaignCreateRouteRef,P as campaignDetailsRouteRef,x as campaignEditRouteRef,j as campaignExplorerRouteRef,S as campaignOverviewRouteRef,v as campaignsPageRouteRef,s as certificationPlaylistRouteRef,h as certificationPlaylistTrackCheckRouteRef,d as certificationPlaylistTrackRouteRef,n as certificationRouteRef,r as certificationTrackRouteRef,R as checkCreateRouteRef,p as checkDetailsRouteRef,u as checkEditRouteRef,g as checkTemplatesRouteRef,k as checksPageRouteRef,c as entityRootRouteRef,i as groupRootRouteRef,T as integrationDetailsRouteRef,q as integrationEditRouteRef,D as integrationsPageRouteRef,o as quickstartRouteRef,t as rootRouteRef,E as techHealthRouteRef,C as techInsightsPageRouteRef,O as techInsightsTrackRouteRef,y as trackCheckDetailsRouteRef,I as trackCreateRouteRef,f as trackDetailsRouteRef,m as trackEditRouteRef,H as trackExplorerRouteRef,b as trackOverviewRouteRef,l as tracksPageRouteRef};
|
|
2
2
|
//# sourceMappingURL=routes.esm.js.map
|