@spotify/backstage-plugin-soundcheck 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/dist/alpha/integrations.esm.js +1 -1
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha.d.ts +68 -23
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/CampaignActionBlueprint.esm.js +2 -0
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/AccordionSection/AccordionSection.esm.js +2 -0
- package/dist/components/Alert/Alert.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignActionsContext.esm.js +2 -0
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
- package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +2 -0
- package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/util.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
- package/dist/components/Menus/useCampaignActions.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
- package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +1 -1
- package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +1 -1
- package/dist/components/Stepper/Stepper.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
- package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
- package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
- package/dist/components/TrackBuilderPage/TrackBuilderPage.esm.js +1 -1
- package/dist/components/TrackBuilderPage/components/CheckItem/CheckItem.esm.js +2 -0
- package/dist/components/TrackBuilderPage/components/IntegrationTags/IntegrationTags.esm.js +2 -0
- package/dist/components/TrackBuilderPage/components/RunChecksStep/RunChecksStep.esm.js +2 -0
- package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +2 -0
- package/dist/components/TrackBuilderPage/components/SelectTracksStep/SelectTracksStep.esm.js +2 -0
- package/dist/components/TrackBuilderPage/components/TrackAccordion/TrackAccordion.esm.js +2 -0
- package/dist/components/TrackBuilderPage/components/TrackBuilderStatus/TrackBuilderStatus.esm.js +2 -0
- package/dist/components/TrackBuilderPage/hooks/useTrackBuilderStatus.esm.js +2 -0
- package/dist/components/TrackBuilderPage/hooks/useTrackCheckExecutions.esm.js +2 -0
- package/dist/components/TrackBuilderPage/utils.esm.js +4 -0
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +168 -85
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
- package/dist/hooks/tracks/useOutOfBoxTracks.esm.js +2 -0
- package/dist/hooks/tracks/useSaveOutOfBoxTracks.esm.js +2 -0
- package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
- package/dist/index.d.ts +30 -2
- package/dist/index.esm.js +1 -1
- package/dist/routes.esm.js +1 -1
- package/package.json +24 -24
- package/dist/components/Badge/Badge.esm.js +0 -2
- package/dist/components/TrackBuilderPage/RunFirstCheckStep.esm.js +0 -2
- package/dist/components/TrackBuilderPage/SelectTracksStep.esm.js +0 -2
- package/dist/components/TrackBuilderPage/mockData.esm.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as r,jsx as t}from"react/jsx-runtime";import{stringifyEntityRef as W}from"@backstage/catalog-model";import{Box as n,Flex as h,Text as p,Grid as _}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiStackLine as D,RiShieldCheckLine as H,RiPlugFill as J}from"@remixicon/react";import{useState as K,useMemo as s}from"react";import{useGetEntityRefs as Q}from"../../../../hooks/catalog/useGetEntityRefs.esm.js";import{Alert as U}from"../../../Alert/Alert.esm.js";import{useTrackBuilderStatus as V}from"../../hooks/useTrackBuilderStatus.esm.js";import{useTrackCheckExecutions as X}from"../../hooks/useTrackCheckExecutions.esm.js";import{ExpandableTrackCard as Y}from"../TrackAccordion/TrackAccordion.esm.js";import{TrackBuilderStatus as o}from"../TrackBuilderStatus/TrackBuilderStatus.esm.js";const Z=q(()=>({container:{margin:"var(--bui-space-8) 0 var(--bui-space-4)"},breakdownSection:{marginTop:"var(--bui-space-8)"},breakdownTitle:{fontSize:"0.75rem",fontWeight:600,letterSpacing:"0.1em",color:"var(--bui-fg-secondary)",marginBottom:"var(--bui-space-4)",textTransform:"uppercase"},grid:{alignItems:"start"}})),$=({tracks:a,selectedTrackIds:l,selectedProvider:g,tracksStatus:f,checksStatus:d,collectorsStatus:S,onToggleTrack:C})=>{const i=Z(),[c,T]=K(null),{getTrackState:b,handleEntityChange:v,handleExecuteCheck:y,handleExecuteAllChecks:x}=X(),m=s(()=>a.find(e=>e.id===c),[a,c]),R=s(()=>m?.filter??{kind:"Component"},[m]),{data:k,isLoading:I}=Q(R,500,c!==null),E=s(()=>k?.items.map(e=>({label:e.metadata.name,value:W(e)}))??[],[k]),u=a.filter(e=>l.includes(e.id)),{tracksCreatedItems:w,tracksFailedItems:B,tracksSkippedItems:F,checksCreatedItems:L,checksFailedItems:N,checksSkippedItems:A,collectorsCreatedItems:M,collectorsFailedItems:P,collectorsSkippedItems:j}=V({tracks:a,selectedTrackIds:l,tracksStatus:f,checksStatus:d,collectorsStatus:S});return r(n,{className:i.container,children:[r(h,{direction:"column",align:"center",justify:"center",mb:"8",children:[t(p,{variant:"title-small",weight:"bold",children:"Run Checks"}),r(p,{color:"secondary",children:["Click on ",t("strong",{children:"Run Checks"})," beside a track to run checks and see instant results."]})]}),r(_.Root,{columns:"3",gap:"1",mb:"8",className:i.grid,children:[t(o,{icon:t(D,{}),variant:"tracks",created:w,skipped:F,failed:B}),t(o,{icon:t(H,{}),variant:"checks",created:L,skipped:A,failed:N}),t(o,{icon:t(J,{}),variant:"integrations",created:M,skipped:j,failed:P})]}),r(U,{title:"Ready to run checks?",variant:"info",children:["Checks will run automatically according to the configured schedule. Click ",t("strong",{children:"Run Checks"})," on any track below to select an entity and get instant results."]}),u.length>0&&r(n,{className:i.breakdownSection,children:[t(n,{className:i.breakdownTitle,children:"Track Breakdown"}),t(h,{gap:"2",direction:"column",children:u.map(e=>{const G=c===e.id,z=b(e.id);return t(Y,{variant:"run",track:e,selectedProvider:g,checksStatus:d,trackState:z,entityOptions:E,isLoadingEntities:I,isRunMode:G,onToggleRunMode:()=>T(O=>O===e.id?null:e.id),onEntityChange:v,onExecuteCheck:y,onExecuteAllChecks:x,onToggleTrack:C},e.id)})})]})]})};export{$ as RunChecksStep};
|
|
2
|
+
//# sourceMappingURL=RunChecksStep.esm.js.map
|
package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as c,jsx as r}from"react/jsx-runtime";import{Box as s,Flex as i,Text as t,Card as u,CardBody as m}from"@backstage/ui";import{makeStyles as p}from"@material-ui/core";import{RiCheckLine as h}from"@remixicon/react";import{Alert as v}from"../../../Alert/Alert.esm.js";import{IntegrationLogoBUI as b}from"../../../CollectorsPage/IntegrationLogoBUI.esm.js";import{PROVIDERS as g,INTEGRATION_ALIASES as a}from"../../utils.esm.js";const f=p(()=>({container:{margin:"var(--bui-space-8) 0"},card:{cursor:"pointer",border:"1px solid transparent",transition:"border-color 150ms ease","&:hover":{borderColor:"var(--bui-fg-primary)"}},cardSelected:{borderColor:"var(--bui-fg-success)",boxShadow:"0 0 0 1px var(--bui-color-success)",backgroundColor:"var(--bui-bg-success)"},cardDisabled:{cursor:"default",pointerEvents:"none"},providers:{width:"100%"},provider:{width:"100%"},providerIcon:{width:"7%",height:"100%",padding:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-neutral-1)",borderRadius:"var(--bui-radius-3)"},providerIconSelected:{backgroundColor:"var(--bui-fg-success)"},providerContent:{width:"93%",marginLeft:"var(--bui-space-4)"},checkmarkIcon:{color:"var(--bui-fg-success)",width:"18px",height:"18px"}})),S=({selectedProvider:d,onSelect:l})=>{const e=f();return c(s,{className:e.container,children:[c(i,{direction:"column",align:"center",justify:"center",mb:"8",children:[r(t,{variant:"title-small",weight:"bold",children:"Select Source Control Provider"}),r(t,{color:"secondary",children:"Select the source control provider used by your organization."})]}),r(v,{title:"Source control provider",variant:"info",children:"Your source control provider determines which integration the checks will depend on. You can update this later."}),r(i,{align:"center",justify:"center",direction:"column",className:e.providers,children:g.map(o=>{const n=a[o.name]===d;return r(u,{onClick:()=>!n&&l(o.name),className:[e.card,n&&e.cardSelected,n&&e.cardDisabled].filter(Boolean).join(" "),children:r(m,{children:c(i,{align:"center",justify:"between",className:e.provider,children:[r(i,{align:"center",justify:"center",className:[e.providerIcon,n&&e.providerIconSelected].filter(Boolean).join(" "),children:r(b,{integrationId:a[o.name]??"",size:"medium"})}),c(i,{direction:"column",gap:"1",className:e.providerContent,children:[c(i,{gap:"1",align:"center",children:[r(t,{variant:"body-large",weight:"bold",children:o.name}),n&&r(h,{className:e.checkmarkIcon})]}),r(t,{variant:"body-small",color:"secondary",children:o.description})]})]})})},o.name)})})]})};export{S as SelectProviderStep};
|
|
2
|
+
//# sourceMappingURL=SelectProviderStep.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as t,jsx as e}from"react/jsx-runtime";import{useRouteRef as m}from"@backstage/core-plugin-api";import{Box as k,Flex as a,Text as i}from"@backstage/ui";import{makeStyles as g}from"@material-ui/core";import{tracksPageRouteRef as h}from"../../../../routes.esm.js";import{Alert as p}from"../../../Alert/Alert.esm.js";import{ExpandableTrackCard as f}from"../TrackAccordion/TrackAccordion.esm.js";const u=g(()=>({container:{margin:"var(--bui-space-8) 0 var(--bui-space-8)"}})),x=({selectedProvider:o,tracks:r,selectedTrackIds:n,onToggleTrack:l})=>{const s=u(),d=m(h);return t(k,{className:s.container,children:[t(a,{direction:"column",align:"center",justify:"center",mb:"8",children:[e(i,{variant:"title-small",weight:"bold",children:"Select Tracks"}),e(i,{color:"secondary",children:"Select the tracks you want to install. Expand tracks to view checks. Integrations will be auto-configured."})]}),t(p,{variant:"info",children:["When clicking ",e("strong",{children:"Next"})," below, the selected tracks, checks, and required integrations will be created automatically if they don't already exist."]}),r.length>0&&e(a,{gap:"2",direction:"column",children:r.map(c=>e(f,{variant:"select",track:c,selectedProvider:o,selectedTrackIds:n,onToggleTrack:l,tracksPageHref:d()},c.id))})]})};export{x as SelectTracksStep};
|
|
2
|
+
//# sourceMappingURL=SelectTracksStep.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as i,jsxs as t,Fragment as g}from"react/jsx-runtime";import{Button as x,TooltipTrigger as D,Switch as T,Tooltip as H,Text as s,Flex as o,Box as C}from"@backstage/ui";import{makeStyles as O,TextField as F,CircularProgress as N}from"@material-ui/core";import{Autocomplete as W}from"@material-ui/lab";import{RiStopCircleLine as $,RiPlayLine as A,RiStackLine as q}from"@remixicon/react";import{useMemo as y,useState as G}from"react";import{AccordionSection as U}from"../../../AccordionSection/AccordionSection.esm.js";import{getUniqueIntegrationFacts as Y,isExecutableCheck as P,getOutOfBoxTrackIcon as _}from"../../utils.esm.js";import{CheckItem as L}from"../CheckItem/CheckItem.esm.js";import{IntegrationTags as J}from"../IntegrationTags/IntegrationTags.esm.js";const K=O(()=>({container:{margin:"var(--bui-space-8) 0 var(--bui-space-8)"},notInstalledCircle:{width:"24px",height:"24px",background:"var(--bui-bg-warning)",borderRadius:"var(--bui-radius-full)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bui-fg-warning)"},installedCircle:{width:"24px",height:"24px",background:"var(--bui-bg-success)",borderRadius:"var(--bui-radius-full)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bui-fg-success)"},track:{width:"100%",marginRight:"var(--bui-space-3)"},trackName:{padding:0,margin:"0 0 var(--bui-space-2)"},checksPanel:{borderTop:"1px solid var(--bui-border)",margin:"var(--bui-space-4) 0 0",padding:"var(--bui-space-4) 0 0"},checkIcon:{width:24,height:24},trackIconColumn:{width:38,height:38,padding:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-neutral-1)",borderRadius:"var(--bui-radius-3)"},trackColumn:{display:"flex",flex:1,marginLeft:"var(--bui-space-3)"},trackSwitchColumn:{marginLeft:"var(--bui-space-2)"},checkColumn:{width:"70%",flex:1,minWidth:0,padding:"0.2rem 0 0.2rem"},checkConnectColumn:{width:"35%"},switch:{"& .bui-SwitchIndicator":{backgroundColor:"var(--bui-fg-primary)"},'&[data-selected="true"] .bui-SwitchIndicator':{backgroundColor:"var(--bui-fg-success)"}},disabledSwitch:{opacity:.5,"& .bui-SwitchIndicator":{backgroundColor:"var(--bui-fg-secondary)"},'&[data-selected="true"] .bui-SwitchIndicator':{backgroundColor:"var(--bui-fg-success)"}},invisibleButton:{background:"transparent",border:"none",padding:0,minWidth:"auto","&:hover":{background:"transparent"}},levelHeader:{padding:"var(--bui-space-2) 0 var(--bui-space-2)"},tooltipLink:{"&:hover":{textDecoration:"underline"}},entityAutocomplete:{flex:1},runCheckHeader:{padding:"var(--bui-space-2) 0",borderBottom:"1px solid var(--bui-border)"}})),Q=n=>{const c=K(),{track:a,selectedProvider:m,checksStatus:p}=n,u=y(()=>a.levels.flatMap(e=>e.checks),[a.levels]),M=a.levels.length>1,z=y(()=>u.flatMap(({integrations:e})=>e.flatMap(r=>Y(r))),[u]),[w,I]=G(!1),b=y(()=>u.filter(e=>P(e,p)),[u,p]);let k=null;if(n.variant==="run"){const{isRunMode:e,onToggleRunMode:r}=n,d=b.length>0,l=()=>{I(!e),r(a.id)};k=i(x,{variant:"secondary",size:"small","aria-expanded":w,"aria-label":e?`Done for ${a.name}`:`Run checks for ${a.name}`,onClick:l,isDisabled:!d&&!e,children:e?t(g,{children:[i($,{size:16}),"Done"]}):t(g,{children:[i(A,{size:16}),"Run Checks"]})})}else{const{selectedTrackIds:e,onToggleTrack:r,tracksPageHref:d}=n;k=a.isInstalled?t(D,{children:[i(x,{className:c.invisibleButton,children:i(T,{isSelected:e.includes(a.id),isDisabled:!0,className:c.disabledSwitch},a.id)}),i(H,{children:t(s,{color:"secondary",children:["You can remove any unnecessary configuration from the"," ",i("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:c.tooltipLink,children:i(s,{weight:"bold",color:"primary",as:"span",children:"Tracks"})})," ","page."]})})]}):i(T,{isSelected:e.includes(a.id),onChange:l=>r(a.id,l),className:c.switch},a.id)}const j=t(o,{align:"center",justify:"between",className:c.track,children:[i(o,{align:"center",justify:"center",className:c.trackIconColumn,children:_(a.name)}),t(o,{direction:"column",gap:"2",className:c.trackColumn,children:[t(o,{direction:"column",gap:"1",children:[i(s,{variant:"body-large",weight:"bold",children:a.name}),a.description&&i(s,{variant:"body-small",color:"secondary",children:a.description})]}),i(o,{mt:"1",children:i(J,{facts:z,selectedProvider:m})})]}),i(o,{align:"center",justify:"end",className:c.trackSwitchColumn,children:k})]});let E=!1,S,R=!1;if(n.variant==="run"){const{trackState:e,onExecuteAllChecks:r}=n,d=!!e.selectedEntity,l=!!e.executingCheckId,h=!!e.isExecutingAll;R=h;const v=b.some(f=>!e.executedChecks.has(f.id));E=d&&!l&&!h&&v;const B=b.map(f=>f.id);S=()=>r(a.id,B)}return i(U,{header:j,panelClassName:c.checksPanel,isExpanded:w,onExpandedChange:I,children:t(o,{direction:"column",gap:"4",children:[i(C,{children:t(s,{variant:"body-small",children:[u.length," checks included."]})}),n.variant==="run"&&n.isRunMode&&t(g,{children:[i(C,{className:c.runCheckHeader,children:i(s,{weight:"bold",variant:"body-large",children:"Run checks for an entity"})}),t(o,{align:"center",children:[i(W,{className:c.entityAutocomplete,options:n.entityOptions,getOptionLabel:e=>e.label,value:n.trackState.selectedEntity,onChange:(e,r)=>n.onEntityChange(a.id,r),loading:n.isLoadingEntities,renderInput:e=>i(F,{...e,variant:"outlined",placeholder:"Select an entity...",size:"small",InputProps:{...e.InputProps,endAdornment:t(g,{children:[n.isLoadingEntities?i(N,{color:"inherit",size:20}):null,e.InputProps.endAdornment]})}})}),t(x,{variant:"secondary",size:"medium",isDisabled:!E,onClick:S,children:[R?i(N,{size:20}):i(A,{size:16}),"Run All"]})]})]}),a.levels.slice().sort((e,r)=>e.ordinal-r.ordinal).map(e=>i(C,{children:t(o,{direction:"column",gap:"2",children:[M&&e.name&&t(o,{align:"center",gap:"3",className:c.levelHeader,children:[i(q,{}),i(s,{variant:"body-large",weight:"bold",children:e.name})]}),i(o,{direction:"column",gap:"2",children:e.checks.map(r=>{const d=P(r,p);if(n.variant==="run"){const{trackState:l,isRunMode:h}=n;return i(L,{check:r,selectedProvider:m,mode:h?"run":"view",variant:n.variant,entityRef:l.selectedEntity?.value??null,isExecutable:d,isExecuting:l.executingCheckId===r.id,isExecutingAll:l.isExecutingAll,executingCheckId:l.executingCheckId,executedChecks:l.executedChecks,onExecute:v=>n.onExecuteCheck(a.id,v)},r.id)}return i(L,{check:r,selectedProvider:m,mode:"view",variant:n.variant,entityRef:null,isExecutable:d,isExecuting:!1,isExecutingAll:!1,executingCheckId:null,executedChecks:new Map},r.id)})})]})},e.ordinal))]})})};export{Q as ExpandableTrackCard};
|
|
2
|
+
//# sourceMappingURL=TrackAccordion.esm.js.map
|
package/dist/components/TrackBuilderPage/components/TrackBuilderStatus/TrackBuilderStatus.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Flex as l,Text as i,Box as a,Accordion as u,AccordionTrigger as v,AccordionPanel as y}from"@backstage/ui";import{makeStyles as x}from"@material-ui/core";import{RiCheckboxCircleLine as g,RiCloseCircleLine as T}from"@remixicon/react";const f={tracks:"Tracks",checks:"Checks",integrations:"Integrations"},N=x(()=>({accordion:{minHeight:"167px"},expandable:{'&:has([aria-expanded="true"])':{minHeight:"330px"}},accordionTrigger:{"& .bui-AccordionTriggerButton":{alignItems:"flex-start"},"& .bui-AccordionTriggerIcon":{marginTop:"var(--bui-space-3)"}},noTriggerIcon:{"& .bui-AccordionTriggerIcon":{display:"none"}},icon:{width:34,height:34,padding:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-neutral-1)",borderRadius:"var(--bui-radius-3)"},horizontalLine:{border:"none",borderTop:"1px solid var(--bui-border)",margin:"var(--bui-space-4) 0"},sectionTitle:{textTransform:"uppercase"},iconContainer:{width:"16px"},successIcon:{color:"var(--bui-fg-success)"},failIcon:{color:"var(--bui-fg-danger)"},message:{display:"block",marginLeft:"1.5rem"},scrollBox:{maxHeight:"145px",overflowY:"scroll",paddingRight:"var(--bui-space-4)"},unchangedIcon:{color:"var(--bui-fg-secondary)"}}));function k({icon:h,created:o,skipped:d,failed:s,variant:m}){const n=N(),t=o.length>0||d.length>0||s.length>0,b=f[m],p=r(l,{align:"start",direction:"column",children:[r(l,{gap:"2",align:"center",children:[e(l,{align:"center",justify:"center",className:n.icon,children:h}),e(i,{children:b})]}),r(a,{children:[r(l,{align:"baseline",gap:"1",children:[e(i,{variant:"title-medium",weight:"bold",children:o.length}),e(i,{color:"secondary",children:"Created"})]}),d.length>0&&r(a,{children:[e(i,{variant:"body-large",weight:"bold",color:"secondary",children:d.length})," ",e(i,{color:"secondary",variant:"body-small",children:"Unchanged"})]}),s.length>0&&r(a,{children:[e(i,{color:"danger",variant:"body-large",weight:"bold",children:s.length})," ",e(i,{color:"secondary",variant:"body-small",children:"Failed"})]})]})]});return r(u,{className:`${n.accordion} ${t?n.expandable:""}`,children:[e(v,{className:`${n.accordionTrigger} ${t?"":n.noTriggerIcon}`,children:p}),r(y,{children:[e("hr",{className:n.horizontalLine}),r(a,{className:n.scrollBox,children:[o.length>0&&r(a,{children:[e(a,{mb:"4",children:e(i,{weight:"bold",color:"secondary",variant:"body-small",className:n.sectionTitle,children:"Created"})}),e(l,{gap:"1",direction:"column",children:o.map(c=>r(l,{gap:"2",align:"start",children:[e(a,{className:n.iconContainer,children:e(g,{size:"16",className:n.successIcon})}),e(i,{children:c.label})]},c.key))})]}),d.length>0&&r(a,{mt:o.length>0?"4":void 0,children:[e(a,{mb:"4",children:e(i,{weight:"bold",color:"secondary",variant:"body-small",className:n.sectionTitle,children:"Unchanged"})}),e(l,{gap:"1",direction:"column",children:d.map(c=>r(l,{gap:"2",align:"start",children:[e(a,{className:n.iconContainer,children:e(g,{size:"16",className:n.unchangedIcon})}),e(i,{color:"secondary",children:c.label})]},c.key))})]}),s.length>0&&r(a,{mt:o.length>0||d.length>0?"4":void 0,children:[e(a,{mb:"4",children:e(i,{weight:"bold",color:"secondary",variant:"body-small",className:n.sectionTitle,children:"Failed"})}),e(l,{gap:"1",direction:"column",children:s.map(c=>r(a,{children:[r(l,{gap:"2",align:"start",children:[e(a,{className:n.iconContainer,children:e(T,{size:"16",className:n.failIcon})}),e(i,{children:c.label})]}),c.message&&e(i,{variant:"body-small",color:"danger",className:n.message,children:c.message})]},c.key))})]})]})]})]})}export{k as TrackBuilderStatus};
|
|
2
|
+
//# sourceMappingURL=TrackBuilderStatus.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{parseFactRef as w}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as y}from"react";import{uniqueImportStatusById as r}from"../utils.esm.js";function n(i,a){const d=new Set((a?.created??[]).map(e=>e.id)),p=new Set((a?.skipped??[]).map(e=>e.id)),c=new Map((a?.failed??[]).map(e=>[e.id,e.message])),l=i.filter(e=>d.has(e.id)),m=i.filter(e=>p.has(e.id)),o=i.filter(e=>c.has(e.id)).map(e=>({...e,message:c.get(e.id)}));return{created:l,skipped:m,failed:o}}function s(i){return i.map(a=>({key:a.id,label:a.name??a.id,message:a.message}))}function B(i){const{tracks:a,selectedTrackIds:d,tracksStatus:p,checksStatus:c,collectorsStatus:l}=i;return y(()=>{const m=a.filter(t=>d.includes(t.id)),o=m.flatMap(t=>t.levels).flatMap(t=>t.checks),e=o.flatMap(t=>t.integrations).flatMap(t=>t.facts).map(t=>({id:w(t.factRef).source,name:t.name})),f=n(m,p),k=n(o,c),u=n(e,l),I=r(f.created),S=r(f.skipped),h=r(k.created),g=r(k.skipped),M=r(u.created),F=r(u.skipped);return{tracksCreatedItems:s(I),checksCreatedItems:s(h),collectorsCreatedItems:s(M),tracksSkippedItems:s(S),checksSkippedItems:s(g),collectorsSkippedItems:s(F),tracksFailedItems:s(f.failed),checksFailedItems:s(k.failed),collectorsFailedItems:s(u.failed)}},[a,d,p,c,l])}export{n as partitionByImportStatus,s as toStatusItems,B as useTrackBuilderStatus};
|
|
2
|
+
//# sourceMappingURL=useTrackBuilderStatus.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useState as E,useCallback as i}from"react";import{useExecuteCheck as y}from"../../../hooks/checks/useExecuteCheck.esm.js";const d={selectedEntity:null,executedChecks:new Map,executingCheckId:null,isExecutingAll:!1},f=()=>{const[a,r]=E({}),{mutateAsync:k}=y(),u=i(e=>a[e]??d,[a]),n=i((e,c)=>{r(t=>{const s=t[e]??d;return{...t,[e]:{...s,...c}}})},[]),o=i((e,c)=>{n(e,{selectedEntity:c,executedChecks:new Map,executingCheckId:null})},[n]),h=i(async(e,c)=>{const t=u(e);if(!(!t.selectedEntity||t.executingCheckId||t.executedChecks.has(c))){n(e,{executingCheckId:c});try{const s=await k({entityRef:t.selectedEntity.value,checkerId:c,dryRun:!1});r(l=>{const x=l[e]??d,C=new Map(x.executedChecks);return C.set(c,{result:s.result,details:s.details}),{...l,[e]:{...x,executedChecks:C,executingCheckId:null}}})}catch{n(e,{executingCheckId:null})}}},[u,n,k]),g=i(async(e,c)=>{const t=u(e);if(!t.selectedEntity||t.executingCheckId||t.isExecutingAll)return;const s=c.filter(l=>!t.executedChecks.has(l));if(s.length)try{n(e,{isExecutingAll:!0}),await Promise.all(s.map(l=>h(e,l)))}finally{n(e,{isExecutingAll:!1})}},[u,n,h]);return{trackStates:a,getTrackState:u,handleEntityChange:o,handleExecuteCheck:h,handleExecuteAllChecks:g}};export{f as useTrackCheckExecutions};
|
|
2
|
+
//# sourceMappingURL=useTrackCheckExecutions.esm.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{jsx as s}from"react/jsx-runtime";import{RiStackFill as f,RiBuildingFill as R,RiShieldCheckFill as b,RiBardFill as I,RiDatabase2Fill as C,RiGithubFill as k,RiGitMergeFill as y,RiStackLine as O}from"@remixicon/react";import{parseFactRef as u}from"@spotify/backstage-plugin-soundcheck-common";import{lowerFirst as A}from"lodash";import{ResultState as o,IntegrationRequirement as p}from"../../graphql/generated/index.esm.js";import{getCronDescription as N}from"../../utils/cron.esm.js";const d=e=>!e.integrations||e.integrations.length===0?!1:e.integrations.some(t=>{const{requirement:a,facts:r}=t;return a===p.All?!r.every(i=>i.isInstalled):!r.some(i=>i.isInstalled)}),D=(e,t)=>{const a=!d(e),r=!(t?.failed.some(({id:i})=>i===e.id)??!1);return a&&r},E=[{name:"GitHub",description:"Host and manage repositories with GitHub."},{name:"GitLab",description:"Manage repositories and CI/CD pipelines with GitLab."},{name:"Azure DevOps",description:"Plan, build, and deploy projects using Azure DevOps."}],v={GitHub:"github",GitLab:"gitlab","Azure DevOps":"azure"},G="soundcheck:selectedProvider";var m=(e=>(e.CatalogHealth="Catalog Health",e.OperationalMaturity="Operational Maturity",e.SecurityReadiness="Security Readiness",e.AIReadiness="AI Readiness",e.DataExperienceDatasetHealth="Data Experience Dataset Health",e.RecommendedGitHubSettings="Recommended GitHub Settings",e.BasicScmCompliance="Basic SCM Compliance",e))(m||{});const H={"Catalog Health":s(f,{}),"Operational Maturity":s(R,{}),"Security Readiness":s(b,{}),"AI Readiness":s(I,{}),"Data Experience Dataset Health":s(C,{}),"Recommended GitHub Settings":s(k,{}),"Basic SCM Compliance":s(y,{})},w=e=>Object.values(m).includes(e)?H[e]:s(O,{}),g=(e,t,a)=>Number.isNaN(e)?0:Math.min(a,Math.max(t,e)),F=e=>String(e+1),M=(e,t,a)=>{const r=e?parseInt(e,10):1;return g((Number.isNaN(r)?1:r)-1,t,a)},x=e=>{const t=new Set,a=[];for(const r of e.facts??[])r?.name&&(t.has(r.name)||(t.add(r.name),a.push(r)));return a},T=new Set(["github","gitlab","azure"]),h=(e,t)=>!T.has(e)||t===e,B=(e,t)=>{const a=new Map;for(const{name:r,factRef:i}of e){const n=u(i).source;!a.has(n)&&h(n,t)&&a.set(n,r)}return Array.from(a,([r,i])=>({id:r,name:i}))},j=(e,t,a)=>t?!a&&e>1?1:e:0,q=e=>Array.from(new Map(e.map(t=>[t.id,t])).values()),$=(e,t)=>e.levels.some(a=>a.checks.some(r=>r.integrations.length?r.integrations.some(i=>{const{requirement:n,facts:S}=i,c=S.filter(l=>h(u(l.factRef).source,t));return c.length?n===p.All?c.every(l=>l.isInstallable):c.some(l=>l.isInstallable):!1}):!1)),z={[o.Passed]:"Check passed",[o.Failed]:"Check failed",[o.Error]:"Check error",[o.Warning]:"Check warning",[o.Exempt]:"Check exempt",[o.NotApplicable]:"Check not applicable",[o.NotReported]:"Check not reported"},L=e=>{const t=e.replace(/\r\n/g,`
|
|
2
|
+
`),a=t.match(/^\s*###\s+(.+)$/m)?.[1]?.replace(/\s+at\s+\d{4}-\d{2}-\d{2}T[0-9:.]+Z\.?/i,"")?.replace(/^error:\s*/i,"").trim(),r=t.match(/^\s*####\s+(.+)$/m)?.[1]?.trim(),i=t.split(/\*\*Errors:\*\*/i)[1]?.split(`
|
|
3
|
+
`).map(n=>n.trim()).filter(n=>n.startsWith("- ")).map(n=>n.replace(/^-+\s*/,"")).slice(0,3);return{title:a??e,subtitle:r,bullets:i?.length?i:void 0}},P=e=>{const t=sessionStorage.getItem(e);if(!t)return null;try{return JSON.parse(t)}catch{return null}},U=(e,t)=>{sessionStorage.setItem(e,JSON.stringify(t))},J=e=>{const t=e.map(r=>r.frequency).filter(r=>!!r).map(r=>{if("cron"in r){const i=String(r.cron);return`${A(N(i))} UTC`}return`every ${Object.values(r)[0]} ${Object.keys(r)[0]}`}),a=Array.from(new Set(t)).join(" and ");return a?`Runs automatically ${a}.`:""};export{v as INTEGRATION_ALIASES,E as PROVIDERS,G as PROVIDER_STORAGE_KEY,m as TrackName,z as checkResultTooltips,g as clampStep,B as computeIntegrationTags,L as formatCheckItemError,M as fromUrlStep,j as getAllowedStep,J as getCheckRunsAtString,w as getOutOfBoxTrackIcon,x as getUniqueIntegrationFacts,$ as hasInstallableIntegrations,d as hasUnsatisfiedIntegrations,D as isExecutableCheck,P as readSessionJSON,F as toUrlStep,q as uniqueImportStatusById,U as writeSessionJSON};
|
|
4
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as h,Fragment as fe}from"react/jsx-runtime";import{stringifyEntityRef as
|
|
1
|
+
import{jsx as t,jsxs as h,Fragment as fe}from"react/jsx-runtime";import{stringifyEntityRef as z,parseEntityRef as ge,RELATION_OWNED_BY as me,RELATION_PART_OF as ue}from"@backstage/catalog-model";import{useRouteRef as ye}from"@backstage/core-plugin-api";import{entityRouteRef as he,useEntityPresentation as we,getEntityRelations as U,humanizeEntityRef as Q}from"@backstage/plugin-catalog-react";import{TableRoot as Pe,TableHeader as Se,Column as p,TableBody as ke,TablePagination as Re,Row as Ie,Flex as $,CellText as C,Box as q,Text as Ee,CellProfile as Te}from"@backstage/ui";import{makeStyles as Ce}from"@material-ui/core";import{compact as Be,uniq as be}from"lodash";import{useState as N,useMemo as c,useEffect as J,useCallback as A}from"react";import{useNavigate as ve}from"react-router-dom";import{TrackEntityField as l,Direction as d}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as xe}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useProfileImages as De}from"../../../hooks/catalog/useProfileImages.esm.js";import{useTrackEntities as ze}from"../../../hooks/entities/useTrackEntities.esm.js";import{useSortSearchParams as Ne}from"../../../hooks/useSortSearchParams.esm.js";import{getPercentage as k}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as Ae}from"../../../utils/tracks.esm.js";import{CertificationBadge as Le}from"../../Badges/CertificationBadge.esm.js";import{CustomCell as W}from"../../CustomCell/CustomCell.esm.js";import"../../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Oe}from"../../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../routes.esm.js";import{LoadingTableSkeleton as Fe}from"../../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as _e}from"../../StatusBar/StatusBar.esm.js";import{toTrackEntityRow as je}from"./utils.esm.js";const X=10,Y=f=>{const{lifecycles:g,owners:m,types:u,systems:y}=f,w=g?.length?{"spec.lifecycle":g}:void 0,B=m?.length?{"relations.ownedBy":m}:void 0,R=u?.length?{"spec.type":u}:void 0,I=y?.length?{"relations.partOf":y}:void 0;return{...w,...B,...R,...I}},Me=Ce(()=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),L={name:l.Name,owner:l.Owner,certificationLevel:l.CertificationLevel,checkPassRate:l.CheckPassRate,system:l.System,type:l.Type,lifecycle:l.Lifecycle},He=({track:f,lifecycles:g,owners:m,types:u,systems:y,certificationStatus:w,isCampaign:B})=>{const R=Me(),I=ve(),{updateSortParams:O,searchParams:P}=Ne(),F=ye(he),[b,_]=N(()=>{const e=P.get("sortDirection");return e==="ascending"?d.Asc:e==="descending"?d.Desc:d.Asc}),[E,j]=N(()=>{const e=P.get("sort");return e&&L[e]?e:"name"}),Z=b===d.Asc?"ascending":"descending",[r,v]=N({orderBy:{field:l.CheckPassRate,direction:d.Desc},filter:Y({lifecycles:g,owners:m,types:u,systems:y}),pageInfo:{page:0,pageSize:X,direction:"forward",cursor:null}}),{data:s,isLoading:G}=ze({trackId:f?.id??"",orderBy:r.orderBy,filter:r.filter,[r.pageInfo.direction==="forward"?"first":"last"]:r.pageInfo.pageSize,[r.pageInfo.direction==="forward"?"after":"before"]:r.pageInfo.cursor,certificationStatus:w}),S=c(()=>s?.trackEntities.edges??[],[s]),V=c(()=>s?.trackEntities.totalCount??0,[s])>X,ee=S.map(e=>e.node.entityRef)??[],{data:x,isLoading:te}=xe({entityRefs:ee}),M=c(()=>!f||!S?.length||!x?.items?.length?[]:Be(S.map(e=>{const i=x.items.find(a=>!!a&&z(a)===e.node.entityRef);return i?je({trackDetails:e.node,track:f,entity:i}):void 0})),[S,x?.items,f]),ie=be(M.flatMap(e=>e.entity.relations?.filter(({type:i,targetRef:a})=>i==="ownedBy"&&a).map(i=>i.targetRef)||[])),{profileImageMap:re}=De(ie);J(()=>{const e=P.get("sortDirection");(e==="ascending"||e==="descending")&&_(e==="ascending"?d.Asc:d.Desc);const i=P.get("sort");i&&L[i]&&j(i)},[P]),J(()=>{let e;E?e={field:L[E]??l.Name,direction:b}:e=void 0,v(i=>({...i,pageInfo:{...i.pageInfo,page:0,cursor:null},orderBy:e,filter:Y({lifecycles:g,owners:m,types:u,systems:y}),certificationStatus:w}))},[v,E,b,w,g,m,y,u]);const ae=A(e=>{const i=ge(z(e)),a=F(i);I(`${a}/soundcheck`)},[I,F]),D=A((e,i)=>{const a=e>r.pageInfo.page?"forward":"backward",T=a==="forward"?s?.trackEntities.pageInfo.endCursor??null:s?.trackEntities.pageInfo.startCursor??null;v({...r,pageInfo:{page:e,pageSize:i,direction:a,cursor:T}})},[s,r]),ne=A(({direction:e,column:i})=>{j(String(i)),_(e==="ascending"?d.Desc:d.Asc),O({sort:String(i),sortDirection:e})},[O]),oe=({row:e})=>{const{primaryTitle:i}=we(z(e.entity)),a=U(e.entity,me).map(o=>Q(o,{defaultKind:o.kind})).join(", "),T=e.entity.relations?.find(({type:o})=>o==="ownedBy")?.targetRef,se=U(e.entity,ue,{kind:"system"}).map(o=>Q(o,{defaultKind:"system"})).join(", ");let H;T&&(H=re?.[T]);const n=c(()=>Ae(e.status),[e.status]),K=c(()=>{let o;return e.status?.allPassPercentage!==null&&e.status?.allPassPercentage!==void 0?o=e.status.allPassPercentage:e.status&&(o=k(e.status.passed+e.status.exempt,n)),o},[e.status,n]),ce=c(()=>k(e.status?.failed,n),[e.status,n]),le=c(()=>k(e.status?.warning,n),[e.status,n]),de=c(()=>k(e.status?.notReported,n),[e.status,n]),pe=c(()=>k(e.status?.error,n),[e.status,n]);return h(Ie,{onAction:()=>ae(e.entity),children:[t(W,{children:t($,{children:t(Le,{badge:e.badge,trackType:B?"campaign":void 0})})}),t(C,{title:i}),t(W,{children:h($,{align:"center",gap:"2",children:[t(q,{className:R.statusPercent,children:h(Ee,{children:[K,"%"]})}),t(q,{className:R.statusBar,children:t(_e,{passedPercent:K,failedPercent:ce,warningPercent:le,notReportedPercent:de,errorPercent:pe})})]})}),t(C,{title:se}),t(C,{title:e.entity.spec?.type}),t(C,{title:e.entity.spec?.lifecycle}),t(Te,{name:a,src:H??i})]},e.id)};return G||te?t(Fe,{}):S.length?h(fe,{children:[h(Pe,{onSortChange:ne,sortDescriptor:{direction:Z,column:E},children:[h(Se,{children:[t(p,{id:"state",style:{width:"5%"}}),t(p,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"25%"},children:"Name"}),t(p,{id:"checkPassRate",style:{width:"15%"},children:"Checks"}),t(p,{id:"system",allowsSorting:!0,style:{width:"20%"},children:"System"}),t(p,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),t(p,{id:"lifecycle",allowsSorting:!0,style:{width:"10%"},children:"Lifecycle"}),t(p,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Owner"})]}),t(ke,{children:M.map(e=>t(oe,{row:e},e.id))})]}),V&&t(Re,{showPageSizeOptions:!0,totalCount:s?.trackEntities.totalCount,pageSize:r.pageInfo.pageSize,offset:r.pageInfo.page*r.pageInfo.pageSize,onPreviousPage:()=>{const e=r.pageInfo.page-1;D(e,r.pageInfo.pageSize)},onNextPage:()=>{const e=r.pageInfo.page+1;D(e,r.pageInfo.pageSize)},onPageSizeChange:e=>{D(r.pageInfo.page,e)},hasNextPage:(r.pageInfo.page+1)*r.pageInfo.pageSize<(s?.trackEntities.totalCount??0),hasPreviousPage:r.pageInfo.page>0})]}):t(Oe,{title:"No track entities found",body:"There are no track entities found."})};export{He as TrackEntitiesTableBUI};
|
|
2
2
|
//# sourceMappingURL=TrackEntitiesTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{Box as m}from"@backstage/ui";import{makeStyles as p,useTheme as f}from"@material-ui/core";import{ResponsiveContainer as g,AreaChart as h,CartesianGrid as v,XAxis as b,YAxis as n,Tooltip as y,Area as s}from"recharts";import{compactNumberFormatter as k}from"../../utils/formatters.esm.js";import{getTrackHistoryLineChartData as u,getChartColors as x,formatTrackHistoryChartTooltip as L}from"../Charts/chartUtils.esm.js";import{LoadingTableSkeleton as A}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const C=p(()=>({container:{height:180,overflow:"hidden"},"@global":{".recharts-default-tooltip li":{margin:"0 !important",padding:"0 !important"}}})),I=({track:a,history:i})=>{const l=C(),d=u(i),c=f(),t=x(c);return!a||!i?o(A,{}):o(m,{className:l.container,children:o(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:[o("stop",{offset:"5%",stopColor:t[r.ordinal%t.length],stopOpacity:.4}),o("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:[o("stop",{offset:"5%",stopColor:"var(--bui-fg-disabled)",stopOpacity:.4}),o("stop",{offset:"95%",stopColor:"var(--bui-fg-disabled)",stopOpacity:0})]})]}),o(v,{stroke:"var(--bui-border)",strokeWidth:1,horizontal:!0,vertical:!1}),o(b,{dataKey:"name",tickLine:!1,axisLine:!1}),o(n,{yAxisId:"left",domain:[0,100],axisLine:!1,tickLine:!1,tickFormatter:r=>`${r}%`,ticks:[0,25,50,75,100]}),o(n,{yAxisId:"right",orientation:"right",domain:[0,Math.max(i?.certificationStatusHistory.numberOfEntities,1)],axisLine:!1,tickLine:!1,tickFormatter:r=>k(r)}),o(y,{contentStyle:{backgroundColor:"var(--bui-bg-popover)",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,i)}),a?.levels?.map(r=>o(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}`)),o(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
2
|
//# sourceMappingURL=TrackHistoryChartBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as c,Fragment as he}from"react/jsx-runtime";import{parseEntityRef as ke}from"@backstage/catalog-model";import{useRouteRef as H}from"@backstage/core-plugin-api";import{usePermission as ge}from"@backstage/plugin-permission-react";import{Container as T,HeaderPage as Se,Box as h,Flex as G,Text as M}from"@backstage/ui";import{makeStyles as Ee}from"@material-ui/core";import{toEntityFilterQuery as Ce,soundcheckTrackReadPermission as ve}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useMemo as y,useEffect as U}from"react";import{useSearchParams as Te,useParams as be}from"react-router-dom";import ye from"react-use/lib/useDebounce";import Le 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 Ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as we}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as _e}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as Ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Be}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Fe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Re}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as He,trackOverviewRouteRef as Oe,trackExplorerRouteRef as Pe}from"../../routes.esm.js";import"../../utils/facetFilters/types.esm.js";import{parseNumberOfDays as xe}from"../../utils/facetFilters/utils.esm.js";import{getEntitiesBucket as Ae,getChecksBucket as Ve}from"../../utils/helpers.esm.js";import{DescriptionCard as Ke}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as je}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as Ye}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as De}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Ge}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as $}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Me}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ue}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as $e}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Qe}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as qe}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{PageCustomActions as Je}from"../PageCustomActions/PageCustomActions.esm.js";import{TopFailingChecksTableBUI as We}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as Xe}from"./TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const Ze=Ee(()=>({container:{marginBottom:"var(--bui-space-12)"},cards:{margin:"0 0 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-
|
|
1
|
+
import{jsx as t,jsxs as c,Fragment as he}from"react/jsx-runtime";import{parseEntityRef as ke}from"@backstage/catalog-model";import{useRouteRef as H}from"@backstage/core-plugin-api";import{usePermission as ge}from"@backstage/plugin-permission-react";import{Container as T,HeaderPage as Se,Box as h,Flex as G,Text as M}from"@backstage/ui";import{makeStyles as Ee}from"@material-ui/core";import{toEntityFilterQuery as Ce,soundcheckTrackReadPermission as ve}from"@spotify/backstage-plugin-soundcheck-common";import{useState as b,useMemo as y,useEffect as U}from"react";import{useSearchParams as Te,useParams as be}from"react-router-dom";import ye from"react-use/lib/useDebounce";import Le 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 Ie}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as we}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as _e}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import{useCheckStatuses as Ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useFilters as Be}from"../../hooks/filters/useFilters.esm.js";import{useLCPReporting as Fe}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Re}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as He,trackOverviewRouteRef as Oe,trackExplorerRouteRef as Pe}from"../../routes.esm.js";import"../../utils/facetFilters/types.esm.js";import{parseNumberOfDays as xe}from"../../utils/facetFilters/utils.esm.js";import{getEntitiesBucket as Ae,getChecksBucket as Ve}from"../../utils/helpers.esm.js";import{DescriptionCard as Ke}from"../Cards/DescriptionCard/DescriptionCard.esm.js";import{HistoricalTrackStatusCard as je}from"../Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js";import{TrackStatusCard as Ye}from"../Cards/TrackStatusCard/TrackStatusCard.esm.js";import{ChecksTable as De}from"../ChecksTable/ChecksTable.esm.js";import{ChipSelector as Ge}from"../ChipSelector/ChipSelector.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as $}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";import"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Me}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as Ue}from"../FilterSidebar/util.esm.js";import{LoadingTableSkeleton as $e}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as Qe}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as qe}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{PageCustomActions as Je}from"../PageCustomActions/PageCustomActions.esm.js";import{TopFailingChecksTableBUI as We}from"../TopFailingChecksTable/TopFailingChecksTableBUI.esm.js";import{TrackEntitiesTableBUI as Xe}from"./TrackEntitiesTable/TrackEntitiesTableBUI.esm.js";const Ze=Ee(()=>({container:{marginBottom:"var(--bui-space-12)"},cards:{margin:"0 0 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-neutral-1)"}})),o={CHECKS_BY_LEVELS:"Checks By Levels",TOP_FAILING_CHECKS:"Top Failing Checks",ENTITIES:"Entities"},ze={"checks-by-levels":o.CHECKS_BY_LEVELS,"top-failing-checks":o.TOP_FAILING_CHECKS,entities:o.ENTITIES},et={[o.CHECKS_BY_LEVELS]:"checks-by-levels",[o.TOP_FAILING_CHECKS]:"top-failing-checks",[o.ENTITIES]:"entities"},tt=()=>{const n=Ze(),[a,k]=Te(),[O,Q]=b(()=>{const e=a.get("section"),s=e?ze[e]:null;return new Set([s??o.CHECKS_BY_LEVELS])}),g=O.values().next().value??o.CHECKS_BY_LEVELS,[l,P]=b(a.get("search")||""),[x,q]=b(""),{trackId:i}=be(),{data:r,isLoading:m,isError:J}=Ie(i),W=H(He),A=qe(r??void 0),V=r?.ownerEntityRef,X=V?ke(V).name:void 0,Z=Array.from(new Set(r?.levels.flatMap(e=>e.checks).map(e=>e.id)??[])),{owners:d,lifecycles:p,types:u,systems:f}=Me(),L=y(()=>Ue({lifecycles:p,owners:d,types:u,systems:f}),[p,d,u,f]),I=y(()=>xe(a.get("numberOfDays")),[a]),[S,K]=b(!1),[w,_]=Le("track-overview-search-params","");U(()=>{!S&&a?.toString()?(w!==a.toString()&&_(a.toString()),K(!0)):S?S&&w!==a.toString()&&_(a.toString()):K(!0)},[a,k,_,w,S]),ye(()=>{q(l);const e=new URLSearchParams(a.toString());l?e.set("search",l):e.delete("search"),k(e,{replace:!0})},300,[l]);const j=y(()=>({routeName:"soundcheck-track-insights",additionalAttributes:{trackId:i||"",filtersApplied:d.length+p.length+u.length+f.length,ownersFilter:d.join(",")||"",lifecyclesFilter:p.join(",")||"",typesFilter:u.join(",")||"",systemsFilter:f.join(",")||"",numberOfDays:I,tracksSearch:x||""}}),[i,d,p,u,f,I,x]),{reportContentLoaded:Y}=Re(j),{reporter:z}=Fe(j),ee=e=>{Q(e),P("");const s=e.values().next().value,v=s?et[s]:void 0;v?k({section:v},{replace:!0}):k({},{replace:!0})},{data:E,isLoading:N,isError:te}=we({trackId:i,filter:L},!!i),{data:re,isLoading:B,isError:ie}=_e({trackId:i,filter:L,numberOfDays:I},!!i),{data:C,isLoading:F}=Ne({trackId:i,checkIds:Z,filter:L},!!r),oe=y(()=>Ce(r?.filter),[r]),R=J||te||ie,{loading:ae,allowed:se}=ge({permission:ve,resourceRef:i}),{filters:ce,selected:ne,setSelected:le,onRemoveTag:me,selectedTags:de}=Be({entityFilterQuery:oe}),pe=r?.levels.flatMap(e=>{const s=l?.trim().toLowerCase();return{...e,checks:s?e.checks.filter(({name:v})=>v.toLowerCase().includes(s)):e.checks}})??[],D=z?.getLCPValue();U(()=>{if(!m&&!F&&!N&&!B){const e=E?.certificationStatus?.numberOfEntities??0,s=C?.length??0;Y({lcp:D,numberOfEntities:e,entitiesBucket:Ae(e),numberOfChecks:s,checksBucket:Ve(s)})}},[m,F,N,B,C,E,Y,D]);const ue=H(Oe),fe=H(Pe);return m?t(T,{className:n.container,children:t($e,{})}):!m&&!r?t(T,{className:n.container,children:t($,{title:"Track not found",body:`There is no track with the requested id: ${i}.`})}):!ae&&!se?t(T,{className:n.container,children:t($,{title:"Cannot view track",body:`No permission to view track with the requested id: ${i}.`})}):c(he,{children:[t(Se,{title:r?.name,customActions:t(Qe,{label:"Track Actions",disabled:!A.length,placement:"left top",menuActions:A}),breadcrumbs:[{label:"Tracks",href:W()}],tabs:[{id:"overview",label:"Track Overview",href:i?ue({trackId:i}):""},{id:"explorer",label:"Tech Insights Explorer",href:i?fe({trackId:i}):""}]}),c(T,{className:n.container,children:[c(h,{className:n.cards,children:[t(Ke,{description:r?.description??void 0,owner:X,isError:R,isLoading:m}),t(Ye,{track:r??void 0,status:E,isError:R,isLoading:N}),t(je,{track:r??void 0,history:re,isError:R,isLoading:B})]}),r&&c(h,{children:[c(G,{justify:"between",children:[t(h,{minWidth:"18rem",children:t(Ge,{options:Object.values(o),selected:O,ariaLabel:"Sections",onSelectionChange:ee})}),t(Je,{searchValue:l,setSearchValue:e=>P(e),filters:ce,selected:ne,setSelected:le,onRemoveTag:me,selectedTags:de,showSearch:g!==o.ENTITIES})]}),c(h,{className:n.tableContent,children:[g===o.CHECKS_BY_LEVELS&&t(h,{mt:"3",children:pe.map(e=>c(h,{className:n.levelSection,children:[c(G,{align:"center",gap:"4",className:n.levelHeading,children:[c(M,{color:"secondary",children:["Level ",e.ordinal]})," ",t(M,{children:e.name})]}),t(De,{trackId:r.id,checks:e.checks,checkStatuses:C,isLoading:m||F,levelOrdinal:e.ordinal})]},e.ordinal))}),g===o.TOP_FAILING_CHECKS&&t(We,{track:r,checkStatuses:C,certificationStatus:E?.certificationStatus,searchValue:l}),g===o.ENTITIES&&t(Xe,{track:r,lifecycles:p,owners:d,types:u,systems:f,searchValue:l})]})]})]})]})};export{tt as TrackPageBUI};
|
|
2
2
|
//# sourceMappingURL=TrackPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as p,Fragment as j}from"react/jsx-runtime";import{useRouteRef as k,useApi as q}from"@backstage/core-plugin-api";import{entityPresentationApiRef as D}from"@backstage/plugin-catalog-react";import{usePermission as M}from"@backstage/plugin-permission-react";import{Container as l,HeaderPage as U,Box as b,Flex as $,SearchField as z}from"@backstage/ui";import{makeStyles as J}from"@material-ui/core";import{soundcheckTrackReadPermission as K}from"@spotify/backstage-plugin-soundcheck-common";import{useState as I,useMemo as T,useEffect as Q}from"react";import{useSearchParams as W,useParams as X}from"react-router-dom";import Y 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 Z}from"../../hooks/tracks/useGetAllTracks.esm.js";import{useTrack as _}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useHierarchicalTrackStatus as ee}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as re}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as te}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as oe}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as ie,trackOverviewRouteRef as ae,trackExplorerRouteRef as me}from"../../routes.esm.js";import{getAllOwnedEntityCount as se}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as ne,getTracksBucket as ce}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as A}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";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 pe}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as le}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as de}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as ue}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TechInsightsExplorerTable as fe}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as he}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as ge}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const ke=J(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),be=()=>{const i=ke(),[d,N]=W(),[a,y]=I(d.get("search")||""),t=d.get("group"),[u,C]=I(""),{trackId:e}=X(),{data:f,isLoading:s}=_(e),v=ue(f??void 0),E=k(ie);Y(()=>{C(a);const o=new URLSearchParams(d.toString());a?o.set("search",a):o.delete("search"),N(o,{replace:!0})},300,[a]);const R=T(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{trackId:e||"",group:t||"",groupsSearch:u||""}}),[e,t,u]),{reportContentLoaded:S}=oe(R),{reporter:B}=te(R),{loading:O,allowed:F}=M({permission:K,resourceRef:e}),{data:h,isLoading:n}=ee({trackId:e??"",groupRef:t??"",skip:!e}),{data:L}=Z({}),m=T(()=>L?.edges.find(o=>o.node.id===e)?.node,[L?.edges,e]),{data:c,isLoading:g}=re(t||void 0,{enabled:!!t&&!!e&&!!m,ownedEntitiesFilter:m?.filter??void 0}),P=q(D),G=T(()=>{if(!t)return;const o=c?.[t];return o?pe(o,h||null,()=>"var(--bui-fg-primary)",P,void 0):void 0},[c,P,t,h]),w=B?.getLCPValue();Q(()=>{if(!s&&!g&&!n){const o=t?se(c?.[t]):0,x=m?1:0;S({lcp:w,numberOfEntities:o,entitiesBucket:ne(o),numberOfTracks:x,tracksBucket:ce(x)})}},[s,S,g,n,c,t,m,w]);const H=k(ae),V=k(me);return s?r(l,{className:i.container,children:r(le,{})}):!s&&!f?r(l,{className:i.container,children:r(A,{title:"Track not found",body:`There is no track with the requested id: ${e}.`})}):!O&&!F?r(l,{className:i.container,children:r(A,{title:"Cannot view track",body:`No permission to view track with the requested id: ${e}.`})}):p(j,{children:[r(U,{title:f?.name,customActions:r(de,{label:"Track Actions",disabled:!v.length,placement:"left top",menuActions:v}),breadcrumbs:[{label:"Tracks",href:E()}],tabs:[{id:"overview",label:"Track Overview",href:e?H({trackId:e}):""},{id:"explorer",label:"Tech Insights Explorer",href:e?V({trackId:e}):""}]}),p(l,{className:i.container,children:[r(b,{className:i.teams,children:r(ge,{trackStatus:h??void 0,isLoading:n})}),p(b,{children:[p($,{align:"center",gap:"3",className:i.filters,children:[r(he,{}),r(z,{value:a,onChange:y,"aria-label":"Search",placeholder:"Search"})]}),r(b,{className:i.tableContent,children:r(fe,{tableData:G,isLoading:g||n,selectedGroup:t??void 0,searchValue:u,trackId:m?.id})})]})]})]})};export{be as TrackTechInsightsExplorerPage};
|
|
1
|
+
import{jsx as r,jsxs as p,Fragment as j}from"react/jsx-runtime";import{useRouteRef as k,useApi as q}from"@backstage/core-plugin-api";import{entityPresentationApiRef as D}from"@backstage/plugin-catalog-react";import{usePermission as M}from"@backstage/plugin-permission-react";import{Container as l,HeaderPage as U,Box as b,Flex as $,SearchField as z}from"@backstage/ui";import{makeStyles as J}from"@material-ui/core";import{soundcheckTrackReadPermission as K}from"@spotify/backstage-plugin-soundcheck-common";import{useState as I,useMemo as T,useEffect as Q}from"react";import{useSearchParams as W,useParams as X}from"react-router-dom";import Y 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 Z}from"../../hooks/tracks/useGetAllTracks.esm.js";import{useTrack as _}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{useHierarchicalTrackStatus as ee}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as re}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as te}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as oe}from"../../hooks/useLoadTimeReporting.esm.js";import{tracksPageRouteRef as ie,trackOverviewRouteRef as ae,trackExplorerRouteRef as me}from"../../routes.esm.js";import{getAllOwnedEntityCount as se}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as ne,getTracksBucket as ce}from"../../utils/helpers.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as A}from"../EmptyState/EmptyStateBUI.esm.js";import"@remixicon/react";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 pe}from"../HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js";import{LoadingTableSkeleton as le}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{SimpleMenu as de}from"../Menus/SimpleMenu.esm.js";import"js-yaml";import"lodash";import{useTrackActions as ue}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TechInsightsExplorerTable as fe}from"../TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js";import{TechInsightsGroupSelector as he}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TopAndBottomPerformingTeams as ge}from"../TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js";const ke=J(()=>({container:{marginBottom:"var(--bui-space-12)"},teams:{margin:"0 0 var(--bui-space-12)"},tableContent:{margin:"var(--bui-space-3) 0 0"},filters:{width:"25rem",marginLeft:"auto"}})),be=()=>{const i=ke(),[d,N]=W(),[a,y]=I(d.get("search")||""),t=d.get("group"),[u,C]=I(""),{trackId:e}=X(),{data:f,isLoading:s}=_(e),v=ue(f??void 0),E=k(ie);Y(()=>{C(a);const o=new URLSearchParams(d.toString());a?o.set("search",a):o.delete("search"),N(o,{replace:!0})},300,[a]);const R=T(()=>({routeName:"soundcheck-tech-insights-explorer",additionalAttributes:{trackId:e||"",group:t||"",groupsSearch:u||""}}),[e,t,u]),{reportContentLoaded:S}=oe(R),{reporter:B}=te(R),{loading:O,allowed:F}=M({permission:K,resourceRef:e}),{data:h,isLoading:n}=ee({trackId:e??"",groupRef:t??"",skip:!e}),{data:L}=Z({}),m=T(()=>L?.edges.find(o=>o.node.id===e)?.node,[L?.edges,e]),{data:c,isLoading:g}=re(t||void 0,{enabled:!!t&&!!e&&!!m,ownedEntitiesFilter:m?.filter??void 0}),P=q(D),G=T(()=>{if(!t)return;const o=c?.[t];return o?pe(o,h||null,()=>"var(--bui-fg-primary)",P,void 0):void 0},[c,P,t,h]),w=B?.getLCPValue();Q(()=>{if(!s&&!g&&!n){const o=t?se(c?.[t]):0,x=m?1:0;S({lcp:w,numberOfEntities:o,entitiesBucket:ne(o),numberOfTracks:x,tracksBucket:ce(x)})}},[s,S,g,n,c,t,m,w]);const H=k(ae),V=k(me);return s?r(l,{className:i.container,children:r(le,{})}):!s&&!f?r(l,{className:i.container,children:r(A,{title:"Track not found",body:`There is no track with the requested id: ${e}.`})}):!O&&!F?r(l,{className:i.container,children:r(A,{title:"Cannot view track",body:`No permission to view track with the requested id: ${e}.`})}):p(j,{children:[r(U,{title:f?.name,customActions:r(de,{label:"Track Actions",disabled:!v.length,placement:"left top",menuActions:v}),breadcrumbs:[{label:"Tracks",href:E()}],tabs:[{id:"overview",label:"Track Overview",href:e?H({trackId:e}):""},{id:"explorer",label:"Tech Insights Explorer",href:e?V({trackId:e}):""}]}),p(l,{className:i.container,children:[r(b,{className:i.teams,children:r(ge,{trackStatus:h??void 0,isLoading:n})}),p(b,{children:[p($,{align:"center",gap:"3",className:i.filters,children:[r(he,{}),r(z,{value:a,onChange:y,"aria-label":"Search",placeholder:"Search"})]}),r(b,{className:i.tableContent,children:r(fe,{tableData:G,isLoading:g||n,selectedGroup:t??void 0,searchValue:u,trackId:m?.id})})]})]})]})};export{be as TrackTechInsightsExplorerPage};
|
|
2
2
|
//# sourceMappingURL=TrackTechInsightsExplorerPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as d,Fragment as Y}from"react/jsx-runtime";import{useApi as z,useRouteRef as B}from"@backstage/core-plugin-api";import{entityPresentationApiRef as _}from"@backstage/plugin-catalog-react";import{usePermission as q}from"@backstage/plugin-permission-react";import{HeaderPage as X,Flex as Z,Container as ee,TableRoot as te,TableHeader as re,Column as m,TableBody as oe,TablePagination as ae}from"@backstage/ui";import{makeStyles as ie}from"@material-ui/core";import{soundcheckTrackCreatePermission as ne}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as se,isEmpty as R}from"lodash";import{useState as T,useMemo as u,useEffect as me}from"react";import{useSearchParams as ce}from"react-router-dom";import le from"react-use/lib/useDebounce";import{soundcheckApiRef as pe}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 de}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as fe}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as ge}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportTracks as ue}from"../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as he}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Pe}from"../../hooks/useLoadTimeReporting.esm.js";import{useSearchNameOwner as we}from"../../hooks/useSearchNameOwner.esm.js";import{
|
|
1
|
+
import{jsx as t,jsxs as d,Fragment as Y}from"react/jsx-runtime";import{useApi as z,useRouteRef as B}from"@backstage/core-plugin-api";import{entityPresentationApiRef as _}from"@backstage/plugin-catalog-react";import{usePermission as q}from"@backstage/plugin-permission-react";import{HeaderPage as X,Flex as Z,Container as ee,TableRoot as te,TableHeader as re,Column as m,TableBody as oe,TablePagination as ae}from"@backstage/ui";import{makeStyles as ie}from"@material-ui/core";import{soundcheckTrackCreatePermission as ne}from"@spotify/backstage-plugin-soundcheck-common";import{sortBy as se,isEmpty as R}from"lodash";import{useState as T,useMemo as u,useEffect as me}from"react";import{useSearchParams as ce}from"react-router-dom";import le from"react-use/lib/useDebounce";import{soundcheckApiRef as pe}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 de}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as fe}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useProfileImages as ge}from"../../hooks/catalog/useProfileImages.esm.js";import{useImportTracks as ue}from"../../hooks/tracks/useImportTracks.esm.js";import{useLCPReporting as he}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as Pe}from"../../hooks/useLoadTimeReporting.esm.js";import{useSearchNameOwner as we}from"../../hooks/useSearchNameOwner.esm.js";import{newTrackRouteRef as ye,trackDetailsRouteRef as ke}from"../../routes.esm.js";import{exportTracks as Se}from"../../utils/export.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Re}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as Te}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@remixicon/react";import{ImportExportPanelBUI as ve}from"../ImportExportPanel/ImportExportPanelBUI.esm.js";import"../ImportExportPanel/ImportExportPanelDeprecated.esm.js";import{ListPageCustomActions as Ce}from"../ListPageCustomActions/ListPageCustomActions.esm.js";import{LoadingTableSkeleton as Le}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import"../Menus/SimpleMenu.esm.js";import{useTrackActions as Ie}from"../Menus/useTrackActions.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";import{TableRowWithOwner as Ee}from"../TableRowWithOwner/TableRowWithOwner.esm.js";const D=10,Ae=["name","status","owner"],be=({track:r,profileImageMap:i})=>{const c=u(()=>r.levels.reduce((l,P)=>l+(P.checks?.length??0),0),[r.levels]),o=B(ke),h=Ie(r);return t(Ee,{ownerEntityRef:r.ownerEntityRef,href:o({trackId:r.id}),menuActions:h,profileImageSrc:i[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:`${c} Check${c===1?"":"s"}`}]})},xe=ie(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ne=()=>{const r=xe(),[i,c]=ce(),[o,h]=T(()=>i.get("search")??""),[l,P]=T(()=>i.get("sortDirection")==="descending"?"descending":"ascending"),[p,H]=T(()=>{const e=i.get("sort");return e&&Ae.includes(e)?e:""}),v=u(()=>({routeName:"soundcheck-tracks"}),[]),{reportContentLoaded:C}=Pe(v),{reporter:M}=he(v),{data:L,isLoading:n}=de({types:["standard","playlist"]}),w=u(()=>L?.edges?.map(e=>e.node)??[],[L?.edges]),{profileImageMap:$}=ge(w.map(e=>e.ownerEntityRef)),I=z(_),y=we(w,o),f=u(()=>{if(!p)return y;const e=se(y,s=>p==="owner"?I.forEntity(s.ownerEntityRef).snapshot.primaryTitle.toLowerCase():p==="status"?s.draft?"draft":"active":s.name.toLowerCase());return l==="descending"&&e.reverse(),e},[I,p,l,y]),{paginatedItems:k,reset:E,paginationProps:a}=fe({pageParam:"perPage",defaultPageSize:D,items:f});le(()=>{E();const e=new URLSearchParams(i.toString());o?e.set("search",o):e.delete("search"),c(e,{replace:!0})},300,[o]);const V=({direction:e,column:s})=>{const S=String(s);H(S),P(e),E();const g=new URLSearchParams(i);S?g.set("sort",S):g.delete("sort"),g.set("sortDirection",e),c(g,{replace:!0})},A=M?.getLCPValue();me(()=>{n||C({lcp:A})},[n,C,A]);const F=B(ye),{loading:b,allowed:x}=q({permission:ne}),O=z(pe),{mutateAsync:j}=ue(),G=async e=>j(e),W=async()=>{const e=await O.getTracks({orderAlphabetical:"asc"});return Se(e.edges.map(s=>s.node))},J=!n&&!R(k),K=f.length>D,N=!n&&R(k),Q=n;let U=null;return N&&(U=o?t(Re,{title:"No tracks found",body:"Your current search term did not return any tracks. Please try a different search term."}):t(Te,{})),d(Y,{children:[t(X,{title:"Tracks",customActions:d(Z,{gap:"2",align:"center",children:[t(ve,{resourceType:"track",disableImport:!b&&!x,disableExport:n||R(w),onImport:G,onExport:W}),t(Ce,{searchValue:o,setSearchValue:h,canCreate:!b&&x,createHref:F()})]})}),d(ee,{className:r.container,children:[Q&&t(Le,{rowCount:10}),N&&U,J&&d(te,{onSortChange:V,sortDescriptor:{direction:l,column:p},children:[d(re,{children:[t(m,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"50%"},children:"Track Name"}),t(m,{allowsSorting:!0,id:"status",style:{width:"10%"},children:"Status"}),t(m,{id:"levels",style:{width:"10%"},children:"Levels"}),t(m,{id:"checks",style:{width:"10%"},children:"Checks"}),t(m,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"}),t(m,{id:"actions",style:{width:"3%"}})]}),t(oe,{children:!n&&k.map(e=>t(be,{track:e,profileImageMap:$??{}},e.id))})]}),K&&t(ae,{totalCount:f.length,offset:a.offset,hasNextPage:a.offset+a.pageSize<(f.length??0),hasPreviousPage:a.offset>0,onNextPage:a.onNextPage,onPreviousPage:a.onPreviousPage,onPageSizeChange:a.onPageSizeChange,pageSize:a.pageSize})]})]})};export{Ne as TracksListPageBUI};
|
|
2
2
|
//# sourceMappingURL=TracksListPageBUI.esm.js.map
|