@spotify/backstage-plugin-soundcheck 0.20.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 +47 -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 +2 -0
- package/dist/components/CampaignPage/CampaignActionsContext.esm.js +2 -0
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
- package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
- package/dist/components/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/ChecksTable/ChecksTable.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.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/ExpandableSection/ExpandableSection.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/Loading/Loading.esm.js +2 -0
- 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 +2 -0
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
- package/dist/components/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/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
- package/dist/components/TrackBuilderPage/TrackBuilderPage.esm.js +2 -0
- 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 +163 -84
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
- package/dist/hooks/filters/useFilters.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/dist/utils/facetFilters/utils.esm.js +2 -0
- package/package.json +25 -25
- package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +0 -2
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +0 -2
- package/dist/components/TechHealth/Filters/FilterProvider.esm.js +0 -2
- package/dist/components/TechHealth/Filters/Filters.esm.js +0 -2
- package/dist/components/TechHealth/Filters/FiltersHeader.esm.js +0 -2
- package/dist/components/TechHealth/Filters/FiltersSection.esm.js +0 -2
- package/dist/components/TechHealth/Filters/NumberOfDaysFilter.esm.js +0 -2
- package/dist/components/TechHealth/Filters/utils.esm.js +0 -2
- package/dist/components/TechHealth/Loading/Loading.esm.js +0 -2
- package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +0 -2
- /package/dist/{components/TechHealth/Filters → utils/facetFilters}/types.esm.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as d}from"react/jsx-runtime";import{makeStyles as W,TextField as k}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{useCallback as A}from"react";import{Controller as M}from"react-hook-form";import{ListboxVirtualized as N}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const f=W(o=>({clearIndicator:{marginRight:o.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),V=({name:o,rules:h,label:b,control:x,options:a,filterOptions:C,getOptionLabel:
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import{makeStyles as W,TextField as k}from"@material-ui/core";import{Autocomplete as w}from"@material-ui/lab";import{useCallback as A}from"react";import{Controller as M}from"react-hook-form";import{ListboxVirtualized as N}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const f=W(o=>({clearIndicator:{marginRight:o.spacing(1)},helperText:{marginLeft:0},noMargin:{margin:0}})),V=({name:o,rules:h,label:b,control:x,options:a,filterOptions:C,getOptionLabel:v,getOptionValue:r,getOptionSelected:O,onChange:m,disabled:S,placeholder:L,freeSolo:T=!0,width:c,helperText:I,disableClearable:y,fullWidth:u})=>{const i=f(),F=A(l=>a.find(s=>s.value===l)||l,[a]);return d(M,{name:o,control:x,rules:h,render:({field:l,fieldState:n})=>{const s=F(l.value);return d(w,{...l,value:s,freeSolo:T,"data-testid":`${o}-autocomplete`,style:c?{width:c}:{minWidth:u?void 0:250},disabled:S,options:a,getOptionLabel:v,getOptionSelected:O,classes:{clearIndicator:i.clearIndicator},disableClearable:y,fullWidth:u,filterOptions:C,onChange:(p,e)=>{let t=null;e===null?t=null:typeof e=="string"?t=e:t=e.value;const g=r?r(t):t;m?.(g),l.onChange(g)},onInputChange:(p,e)=>{const t=r?r(e):e;m?.(t)},renderInput:p=>d(k,{...p,variant:"outlined",label:b,error:n.invalid,placeholder:L,FormHelperTextProps:{className:i.helperText},margin:"dense",className:i.noMargin,helperText:I??(n.error?n.error.message:null)}),ListboxComponent:N})}})};export{V as FormControlledAutocomplete,f as useStyles};
|
|
2
2
|
//# sourceMappingURL=FormControlledAutocomplete.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as y,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-
|
|
1
|
+
import{jsxs as r,jsx as e,Fragment as D}from"react/jsx-runtime";import{useApi as F}from"@backstage/core-plugin-api";import{entityPresentationApiRef as M,useEntityPresentation as O}from"@backstage/plugin-catalog-react";import{Button as w,Flex as p,TextField as I,ButtonIcon as U,Box as y,Card as $,Text as l,Skeleton as G,TagGroup as A}from"@backstage/ui";import{makeStyles as q}from"@material-ui/core";import{RiUserLine as z,RiSearchLine as J,RiHistoryLine as K}from"@remixicon/react";import{sortBy as N,isEmpty as C,uniq as H}from"lodash";import{useState as k,useCallback as Q,useMemo as S}from"react";import{DialogTrigger as V,Popover as W,Dialog as X}from"react-aria-components";import{useGroupHierarchy as Y}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{getAllOwnedEntityCount as Z}from"../../utils/getAllOwnedEntityCount.esm.js";import{GroupSelectionHistory as _}from"./GroupSelectionHistory.esm.js";import{GroupSelectList as ee}from"./GroupSelectList.esm.js";import{GroupTag as P}from"./GroupTag.esm.js";import{useGroupHistory as re}from"./useGroupHistory.esm.js";import{usePreviousSelectedGroups as ie}from"./usePreviousSelectedGroups.esm.js";const E=q(()=>({dialog:{padding:"var(--bui-space-3)",backgroundColor:"var(--bui-bg-popover)",border:"1px solid var(--bui-border)",borderRadius:"var(--bui-radius-2)"},buttonArea:{marginTop:"var(--bui-space-2)"},selectedCard:{padding:"var(--bui-space-3)",gap:"var(--bui-space-2)",width:"36rem",margin:"var(--bui-space-3) 0"},relatedGroups:{marginTop:"var(--bui-space-2)"},tagArea:{height:"8rem",width:"16rem",overflow:"auto"}})),oe=({groupRef:o,onSelect:b})=>{const d=E(),{primaryTitle:i,secondaryTitle:f}=O(o),{isLoading:n,data:v}=Y(o,{includeParent:!0}),t=v?.[o],m=S(()=>Z(t),[t]),h=S(()=>{const a=t?.children??{};return N(Object.values(a).map(c=>({ref:c.entityRef,type:c.type})),"ref")},[t?.children]),u=S(()=>C(h)?[]:H(h.map(a=>a.ref)),[h]),g=S(()=>C(t?.parents)?[]:N(H(t.parents),a=>a),[t?.parents]);return r(y,{children:[r($,{className:d.selectedCard,children:[e(l,{variant:"body-medium",color:"secondary",children:"Currently Selected"}),r(p,{direction:"column",gap:"0",children:[e(l,{variant:"body-large",weight:"bold",children:i}),e(l,{variant:"body-medium",color:"secondary",children:f})]}),r(p,{gap:"0",direction:"column",children:[r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," directly owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[u.length," ",u.length===1?"entity":"entities"]})]}),r(p,{gap:"1",align:"center",children:[r(l,{variant:"body-medium",children:[i," and it's subgroups owns:"]}),n?e(G,{height:"1rem"}):r(l,{variant:"body-medium",color:"secondary",children:[m," ",m===1?"entity":"entities"]})]})]})]}),r(p,{className:d.relatedGroups,children:[r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Parent Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(g)?e(l,{variant:"body-small",children:"No parent groups."}):e(A,{selectionMode:"single","aria-label":"Parent Groups",children:g.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,o)},`${a}-parent`))})]})]}),r(y,{style:{flex:1},children:[e(l,{color:"secondary",children:"Child Groups"}),r(y,{className:d.tagArea,children:[n&&e(G,{width:"10rem"}),!n&&C(u)?e(l,{variant:"body-small",children:"No child groups."}):e(A,{selectionMode:"single","aria-label":"Child Groups",children:u.map(a=>e(P,{groupRef:a,handleClick:c=>b(c,void 0,o)},`${a}-child`))})]})]})]})]})},te=({selectedGroupRef:o,updateGroupRef:b})=>{const d=E(),[i,f]=k(o),[n,v]=k(""),[t,m]=k(!1),h=F(M),u=o?h.forEntity(o).snapshot.primaryTitle:void 0,{addGroupHistory:g,history:a}=re(),{addGroup:c,groupEntityRefs:B}=ie(),R=Q((s,x,T)=>{f(s),v(""),g(s,x,T)},[g]),L=!t&&(!i||n),j=!t&&i&&!n;return r(V,{onOpenChange:s=>{s&&o&&o!==i&&f(o),t&&m(!1)},children:[e(w,{variant:"secondary",iconStart:e(z,{}),children:u??"Select Group"}),e(W,{placement:"bottom right",children:e(X,{className:d.dialog,children:({close:s})=>{const x=()=>{i&&i!==o&&(b(i),c(i)),s()};return r(D,{children:[r(p,{align:"center",gap:"2",children:[e(I,{placeholder:"Search Groups",value:n,onChange:v,size:"small",icon:e(J,{}),"aria-label":"Search Groups",style:{flex:"1"}}),e(U,{"aria-label":"Show History",variant:"secondary",icon:e(K,{}),onClick:()=>m(!t)})]}),t&&e(_,{previouslySelectedGroups:B??[],history:a??[],selectRef:T=>{R(T),m(!1)}}),L&&e(ee,{searchTerm:n,selectedRef:i,selectRef:R}),j&&e(oe,{groupRef:i,onSelect:R}),r(p,{className:d.buttonArea,justify:"end",children:[e(w,{onClick:s,variant:"tertiary",children:"Close"}),e(w,{onClick:x,isDisabled:!i,children:"Apply"})]})]})}})})]})};export{te as GroupSelectorBUI};
|
|
2
2
|
//# sourceMappingURL=GroupSelectorBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getPercentage as n}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as R}from"../../../utils/tracks.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const c of e.children){const
|
|
1
|
+
import{getPercentage as n}from"../../../utils/formatters.esm.js";import{getTrackStatusTotal as R}from"../../../utils/tracks.esm.js";const u=(e,a)=>{if(!e||typeof e!="object")return null;if(e.groupRef===a)return e.status;if(e.children&&Array.isArray(e.children))for(const c of e.children){const s=u(c,a);if(s)return s}return null},p=(e,a,c,s,f)=>{const g=e.entityRef,d=e.entityRef,r=a?u(a,d):null,h=c(r?.allPassPercentage||0),P=e.ownedEntityRefs?.length||0,t=r?R(r):0;if(!e.children||Object.keys(e.children).length===0){if(P===0)return;const i=Math.log(P+1);if(i===0)return;const l={id:g,name:g,entityRef:d,value:i,numberOfEntities:P,color:h,passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};return f&&(l.parent=f),l}const m=Object.values(e.children),o={id:g,name:g,entityRef:d,numberOfEntities:0,color:"",passPercentage:r?.allPassPercentage||0,failPercentage:n(r?.failed,t),warningPercentage:n(r?.warning,t),notReportedPercentage:n(r?.notReported,t),errorPercentage:n(r?.error,t),children:[]};f&&(o.parent=f);const y=m.map(i=>{const l=p(i,a,c,s,o);return o.numberOfEntities+=l?.numberOfEntities??0,l}).filter(i=>i!==void 0);return o.children=y,o.color=c(r?.allPassPercentage||0),o};export{p as hierarchyToNivo};
|
|
2
2
|
//# sourceMappingURL=hierarchyToNivo.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t,jsxs as o}from"react/jsx-runtime";import{makeStyles as l,Typography as r}from"@material-ui/core";import{motion as c}from"framer-motion";import{LoadingIndicator as m}from"../LoadingIndicator/LoadingIndicator.esm.js";const s=l(()=>({container:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",flex:1,height:"100%"},textContainer:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"}}));function d({title:i,subtitle:e,children:a}){const n=s();return t("div",{className:n.container,children:o("div",{className:n.textContainer,children:[t(m,{}),t("div",{style:{marginBottom:"1.1rem"}}),a??"Loading...",o(c.div,{animate:{y:0,opacity:1},initial:{y:100,opacity:0},children:[i&&t(r,{align:"center",variant:"h6",children:i}),e&&t(r,{align:"center",variant:"subtitle2",children:e})]})]})})}export{d as Loading};
|
|
2
|
+
//# sourceMappingURL=Loading.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import{useRouteRef as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{useRouteRef as E,useApi as x,configApiRef as N}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{RiEditBoxLine as M,RiArchiveLine as P,RiDeleteBinLine as B,RiNotificationLine as T,RiExternalLinkLine as U}from"@remixicon/react";import{soundcheckCampaignUpdatePermission as $,soundcheckCampaignDeletePermission as j,soundcheckCampaignNotificationsCreatePermission as I}from"@spotify/backstage-plugin-soundcheck-common";import{useState as O,useCallback as m,useMemo as q}from"react";import{useNavigate as z}from"react-router-dom";import{v4 as F}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as G}from"../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as H}from"../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as J}from"../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as K}from"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import{campaignEditRouteRef as Q}from"../../routes.esm.js";import{useExternalCampaignActions as V}from"../CampaignPage/CampaignActionsContext.esm.js";import{useArchiveConfirmationModal as W}from"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const X=i=>{const s=E(Q),r=z(),c=i?.archived,{showModal:d}=K(),[D,l]=O(!1),{showArchiveModal:p}=W(),{mutate:u}=J(),{mutate:f}=H(),{mutate:h}=G(),g=V(),C=x(N).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:R,allowed:k}=n({permission:$,resourceRef:i?.id}),{loading:v,allowed:w}=n({permission:j,resourceRef:i?.id}),{loading:A,allowed:y}=n({permission:I}),b=m(async()=>{i?.id&&await d({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${i.name??i.id}?`})&&f(i.id)},[d,f,i?.id,i?.name]),L=m(()=>{if(!i)return;const{track:e}=i,o={id:F(),ownerEntityRef:e.ownerEntityRef,description:e.description??"",name:e.name,documentationURL:e.documentationURL,type:"standard",levels:e.levels.map(a=>({checks:a.checks,description:a.description,name:a.name,ordinal:a.ordinal})),filter:e.filter??void 0,exclude:e.exclude??void 0,badgeType:"status",draft:e.draft??!1};u(o)},[i,u]),S=m(async()=>{if(!i?.id)return;const{saveTrack:e,confirmed:o}=await p({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${i.name??i.id}?`});o&&(e&&L(),h(i.id))},[h,i?.id,i?.name,L,p]);return{actions:q(()=>{if(!i?.id)return[];const e=[];!R&&k&&e.push({label:"Edit",id:"edit",onClick:()=>r(s({campaignId:i.id})),iconStart:t(M,{})}),!v&&w&&(c||e.push({label:"Archive",id:"archive",onClick:S,iconStart:t(P,{})}),e.push({label:"Delete",id:"delete",onClick:b,iconStart:t(B,{})})),!A&&C&&y&&i&&e.push({label:"Send Reminder",id:"send",onClick:()=>l(!0),iconStart:t(T,{})});for(const o of g)e.push({label:o.label,id:o.id,onClick:()=>r(o.href(i.id)),iconStart:t(U,{})});return e},[i,s,w,k,y,g,S,b,c,C,v,R,A,r]),showNotificationDialog:D,setShowNotificationDialog:l}};export{X as useCampaignActions};
|
|
2
2
|
//# sourceMappingURL=useCampaignActions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as
|
|
1
|
+
import{jsx as e,jsxs as p,Fragment as d}from"react/jsx-runtime";import{useApi as A,featureFlagsApiRef as O,useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as k}from"@backstage/plugin-permission-react";import{Box as E}from"@backstage/ui";import{soundcheckCampaignCreatePermission as y,soundcheckCheckCreatePermission as N,soundcheckTrackCreatePermission as F}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as j}from"react-helmet";import{Routes as U,Route as t,Outlet as W,useParams as P,useLocation as D,Navigate as l}from"react-router-dom";import{campaignOverviewRouteRef as H,techInsightsPageRouteRef as L,trackOverviewRouteRef as S,tracksPageRouteRef as V,trackCreateRouteRef as q,newTrackRouteRef as z,trackBuilderRouteRef as G}from"../../routes.esm.js";import{CampaignPage as J}from"../CampaignPage/CampaignPage.esm.js";import{CampaignActionsProvider as K}from"../CampaignPage/CampaignActionsContext.esm.js";import{CampaignTechInsightsExplorerPage as M}from"../CampaignPage/CampaignTechInsightsExplorerPage.esm.js";import{CampaignsPage as Q}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as X}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as Y}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as Z}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as _}from"../CheckPage/CheckEditPage.esm.js";import{CheckPage as C}from"../CheckPage/CheckPage.esm.js";import{ChecksTab as $}from"../ChecksTab/ChecksTab.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageBUI.esm.js";import{CheckTemplatesPage as ee}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import"../CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js";import{CollectorPage as te}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as re}from"../CollectorPage/CollectorDetailsPage.esm.js";import"../CollectorPage/CollectorDetailsPageBUI.esm.js";import"../CollectorPage/CollectorDetailsPageDeprecated.esm.js";import{CollectorsPage as ae}from"../CollectorsPage/CollectorsPage.esm.js";import{CreateNewTrackPage as ie}from"../CreateNewTrackPage/CreateNewTrackPage.esm.js";import{OverviewPageContent as ne}from"../OverviewPage/OverviewPageContent.esm.js";import{TechInsightsPage as oe}from"../TechInsights/TechInsightsPage.esm.js";import{TrackBuilderPage as ce}from"../TrackBuilderPage/TrackBuilderPage.esm.js";import{TrackCreatePage as me}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as pe}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as se}from"../TrackPage/TrackPage.esm.js";import{TrackTechInsightsExplorerPage as le}from"../TrackPage/TrackTechInsightsExplorerPage.esm.js";import{TracksTab as he}from"../TracksTab/TracksTab.esm.js";import{RoutingPageWrapperBUI as de}from"./RoutingPageWrapperBUI.esm.js";const ge=()=>{const r=m(S),i=m(V),n=m(q),a=m(z),o=m(G);return{buildOverview:r,buildTracks:i,buildCreate:n,buildNew:a,buildBuilder:o}},f=r=>{try{return r?.()??null}catch{return null}},v=()=>{const{trackId:r}=P(),i=D(),{buildOverview:n,buildTracks:a,buildCreate:o,buildNew:g,buildBuilder:u}=ge();if(!r)return null;const h=[f(o),f(g),f(u)].filter(Boolean).find(c=>i.pathname.endsWith(c));if(h)return e(l,{to:h,replace:!0});try{const c=n({trackId:r});return e(l,{to:c,replace:!0})}catch{const c=typeof a=="function"?a():"/tracks";return e(l,{to:c,replace:!0})}},ue=()=>{const{campaignId:r}=P(),i=m(H);if(!r)return null;const n=i({campaignId:r});return e(l,{to:n,replace:!0})},ke=()=>{const r=m(L)();return e(l,{to:r,replace:!0})},fe=({title:r="Soundcheck",integrations:i,campaignActions:n=[]})=>{const a=A(O),o=a.getRegisteredFlags(),g=!o.find(s=>s.name==="soundcheck-enable-campaigns")||a.isActive("soundcheck-enable-campaigns"),{loading:u,allowed:h}=k({permission:y}),c=!u&&h,{loading:I,allowed:R}=k({permission:N}),b=!o.find(s=>s.name==="soundcheck-enable-check-creation")||a.isActive("soundcheck-enable-check-creation"),T=!I&&R&&b,{loading:w,allowed:x}=k({permission:F}),B=!o.find(s=>s.name==="soundcheck-enable-track-creation")||a.isActive("soundcheck-enable-track-creation");return e(K,{actions:n,children:e(de,{title:r,children:p(U,{children:[g&&p(d,{children:[e(t,{path:"/campaigns",element:e(Q,{})}),e(t,{path:"/campaigns/:campaignId/edit",element:e(Y,{})}),e(t,{path:"/campaigns/:campaignId",element:e(ue,{})}),e(t,{path:"/campaigns/:campaignId/overview",element:e(J,{})}),e(t,{path:"/campaigns/:campaignId/explorer",element:e(M,{})}),c&&e(t,{path:"/campaigns/create",element:e(X,{})})]}),p(t,{path:"/tracks",element:e(W,{}),children:[e(t,{index:!0,element:e(he,{})}),e(t,{path:"builder",element:e(ce,{})}),!w&&x&&B&&p(d,{children:[e(t,{path:"create",element:e(me,{})}),e(t,{path:"new",element:e(ie,{})})]}),e(t,{path:":trackId/edit",element:e(pe,{})}),e(t,{path:":trackId",element:e(v,{})}),e(t,{path:":trackId/overview",element:e(se,{})}),e(t,{path:":trackId/explorer",element:e(le,{})}),e(t,{path:":trackId/checks/:checkId",element:e(C,{})})]}),e(t,{path:"/checks",element:e($,{})}),e(t,{path:"/checks/:checkId",element:e(C,{})}),e(t,{path:"/checks/:checkId/edit",element:e(_,{})}),T&&p(d,{children:[e(t,{path:"/checks/create",element:e(Z,{})}),e(t,{path:"/checks/templates",element:e(ee,{})})]}),e(t,{path:"/integrations",element:e(ae,{integrations:i})}),e(t,{path:"/integrations/:integrationId",element:e(re,{integrations:i})}),e(t,{path:"/integrations/:integrationId/edit",element:e(te,{})}),e(t,{path:"/tech-insights",element:p(d,{children:[e(j,{title:"Tech Insights"}),e(oe,{})]})}),e(t,{path:"/overview",element:e(E,{style:{margin:"var(--bui-space-6) var(--bui-space-6)"},children:e(ne,{})})}),e(t,{path:"/",element:e(ke,{})})]})})})};export{fe as RoutingPageBUI,v as TrackOverviewRedirect};
|
|
2
2
|
//# sourceMappingURL=RoutingPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,Fragment as R}from"react/jsx-runtime";import{useRouteRef as e,useApi as k,featureFlagsApiRef as b}from"@backstage/core-plugin-api";import{usePermission as S}from"@backstage/plugin-permission-react";import{
|
|
1
|
+
import{jsx as t,Fragment as R}from"react/jsx-runtime";import{useRouteRef as e,useApi as k,featureFlagsApiRef as b}from"@backstage/core-plugin-api";import{usePermission as S}from"@backstage/plugin-permission-react";import{PluginHeader as v,ButtonLink as x}from"@backstage/ui";import{RiCheckDoubleLine as P,RiSettings2Line as y}from"@remixicon/react";import{soundcheckCollectorReadPermission as A}from"@spotify/backstage-plugin-soundcheck-common";import{rootRouteRef as C,tracksPageRouteRef as w,checksPageRouteRef as I,campaignsPageRouteRef as L,integrationsPageRouteRef as F,overviewRouteRef as B,techInsightsPageRouteRef as H}from"../../routes.esm.js";const T=()=>{const o=e(C)(),c=e(w)(),s=e(I)(),n=e(L)(),l=e(F)(),m=e(B)(),f=e(H)(),i=k(b),r=i.getRegisteredFlags(),g=!r.find(a=>a.name==="soundcheck-enable-campaigns")||i.isActive("soundcheck-enable-campaigns"),{loading:h,allowed:u}=S({permission:A}),d=(!r.find(a=>a.name==="soundcheck-enable-collectors")||i.isActive("soundcheck-enable-collectors"))&&!h&&u,p=[{id:"tech-insights",label:"Tech Insights",href:f,matchStrategy:"prefix"},{id:"checks",label:"Checks",href:s,matchStrategy:"prefix"},{id:"tracks",label:"Tracks",href:c,matchStrategy:"prefix"},...g?[{id:"campaigns",label:"Campaigns",href:n,matchStrategy:"prefix"}]:[],...d?[{id:"integrations",label:"Integrations",href:l,matchStrategy:"prefix"}]:[],{id:"classic-overview",label:"Classic Overview",href:m,matchStrategy:"exact"}];return t(v,{title:"Soundcheck",icon:t(P,{size:18}),titleLink:o,tabs:p,customActions:t(R,{children:t(x,{href:"/settings",variant:"secondary",iconStart:t(y,{})})})})};export{T as SoundcheckHeaderBUI};
|
|
2
2
|
//# sourceMappingURL=SoundcheckHeaderBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{makeStyles as i}from"@material-ui/core";import n from"react-markdown";import d from"rehype-raw";import m from"remark-gfm";import"./SoundcheckMarkdownContentDeprecated.esm.js";import{components as l}from"./ComponentRenders.esm.js";const o=["h1","h2","h3","h4","h5","h6","p","div","span","a","img","table","th","td","tr","thead","tbody","ol","li","ul","details","summary","br","hr","del","pre","code","strong","em","blockquote","input"],p=i(()=>({markdown:{"& table":{borderCollapse:"collapse",border:"1px solid var(--bui-border)"},"& th, & td":{border:"1px solid var(--bui-border)",padding:"var(--bui-space-2)"},"& td":{wordBreak:"break-word",overflow:"hidden",verticalAlign:"middle",lineHeight:"1",margin:0,padding:"var(--bui-space-3) var(--bui-space-2)",borderBottom:0},"& th":{backgroundColor:"var(--bui-bg-neutral-1)"},"& tr":{backgroundColor:"inherit"},"& a":{color:"var(--bui-fg-link)"},"& img":{maxWidth:"100%"},"& ul":{marginTop:"var(--bui-space-2)"},"& ol":{marginTop:"var(--bui-space-2)"},"& pre":{padding:"var(--bui-space-2)",background:"var(--bui-bg-neutral-2) !important"},"& details":{width:"100%",marginBottom:"var(--bui-space-2)"},"& h1,h2,h3,h4,h5,h6":{marginBottom:"var(--bui-space-2)"}}}),{name:"SoundcheckMarkdownContent"}),c=({content:a,className:e=""})=>{const t=p();return r("div",{className:`${t.markdown} ${e}`.trim(),children:r(n,{components:l,remarkPlugins:[m],rehypePlugins:[d],allowedElements:o,children:a})})};export{o as ALLOWED_HTML_TAGS,c as SoundcheckMarkdownContentBUI};
|
|
2
2
|
//# sourceMappingURL=SoundcheckMarkdownContentBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t,jsxs as g}from"react/jsx-runtime";import{Box as p}from"@backstage/ui";import{makeStyles as f}from"@material-ui/core";const m=f(()=>({stepperHeader:{display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto"},stepperStep:{display:"flex",alignItems:"center",flex:1},stepperStepGrow:{flex:1},stepperStepFixed:{flex:0,whiteSpace:"nowrap"},stepperCircle:{width:32,height:32,borderRadius:"var(--bui-radius-full)",border:"2px solid var(--bui-fg-secondary)",background:"transparent",display:"flex",justifyContent:"center",alignItems:"center",fontSize:"0.9rem",fontWeight:500,color:"var(--bui-fg-secondary)",zIndex:2},stepperCircleActive:{borderColor:"var(--bui-border-success)",background:"var(--bui-bg-success)",color:"var(--bui-fg-success)",fontWeight:"bold"},stepperCircleCompleted:{borderColor:"var(--bui-border-success)",background:"var(--bui-bg-success)",color:"var(--bui-fg-success)",fontWeight:600},stepperLabel:{marginLeft:"var(--bui-space-2)",fontSize:14,whiteSpace:"nowrap",color:"var(--bui-fg-secondary)",fontWeight:500},stepperLabelHighlighted:{color:"var(--bui-fg-success)"},stepperLine:{flexGrow:1,height:2,background:"var(--bui-fg-secondary)",margin:"0 var(--bui-space-2)",zIndex:1},stepperLineCompleted:{background:"var(--bui-border-success)"},stepperLabelButton:{background:"transparent",border:0,padding:0,textAlign:"left"},stepperLabelClickable:{cursor:"pointer"},stepperLabelDisabled:{cursor:"default"}})),h=3,C="50%",v="100%",x=({stepTitles:i,currentStep:a,onStepClick:d})=>{const e=m(),b=i.length<h?C:v;return t(p,{className:e.stepperHeader,style:{width:b},children:i.map((l,r)=>{const n=r===a,s=r<a,c=r===i.length-1,o=r<a,u=n||s?`${e.stepperLabel} ${e.stepperLabelHighlighted}`:e.stepperLabel;return g(p,{className:[e.stepperStep,c?e.stepperStepFixed:e.stepperStepGrow].join(" "),children:[t(p,{className:[e.stepperCircle,n?e.stepperCircleActive:"",s?e.stepperCircleCompleted:""].filter(Boolean).join(" "),children:s?t("span",{"aria-label":"Completed",role:"img",children:"\u2713"}):r+1}),t("button",{type:"button",onClick:()=>o&&d(r),disabled:!o,className:[u,e.stepperLabelButton,o?e.stepperLabelClickable:e.stepperLabelDisabled].join(" "),children:l}),!c&&t(p,{className:[e.stepperLine,s&&e.stepperLineCompleted].filter(Boolean).join(" ")})]},l)})})};export{x as Stepper};
|
|
2
|
+
//# sourceMappingURL=Stepper.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as u,jsx as i}from"react/jsx-runtime";import{useApi as h}from"@backstage/core-plugin-api";import{entityPresentationApiRef as g}from"@backstage/plugin-catalog-react";import{Row as R,CellText as k,CellProfile as y}from"@backstage/ui";import{useNavigate as A}from"react-router-dom";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as x}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as P}from"../Menus/SimpleMenu.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const T=({ownerEntityRef:r,href:t,profileImageSrc:l,cells:c,menuActions:e,name:m,description:s,documentationURL:a})=>{const f=h(g),p=r?f.forEntity(r):void 0,n=A();return u(R,{onAction:()=>t&&n(t),children:[i(x,{title:m,description:s,onClick:()=>t&&n(t)}),c.map((o,d)=>i(k,{title:o.title,leadingIcon:o.icon,onClick:C=>{o.onClick&&(C.stopPropagation(),o.onClick())}},`cell-${d}`)),i(y,{name:p?.snapshot.primaryTitle,src:l??p?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(P,{label:`${m} actions`,disabled:!e?.length,placement:"left top",menuActions:e??[],documentationURL:a,isHeaderMenu:!1})})]})};export{T as TableRowWithOwner};
|
|
1
|
+
import{jsxs as u,jsx as i}from"react/jsx-runtime";import{useApi as h}from"@backstage/core-plugin-api";import{entityPresentationApiRef as g}from"@backstage/plugin-catalog-react";import{Row as R,CellText as k,CellProfile as y}from"@backstage/ui";import{useNavigate as A}from"react-router-dom";import{CustomCell as w}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as x}from"../DescriptionCell/DescriptionCell.esm.js";import{SimpleMenu as P}from"../Menus/SimpleMenu.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-use/lib/useLocalStorage";import"../../routes.esm.js";import"js-yaml";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"uuid";import"../CampaignPage/CampaignActionsContext.esm.js";import"../CampaignsPage/CampaignListPage/useArchiveConfirmationModal.esm.js";const T=({ownerEntityRef:r,href:t,profileImageSrc:l,cells:c,menuActions:e,name:m,description:s,documentationURL:a})=>{const f=h(g),p=r?f.forEntity(r):void 0,n=A();return u(R,{onAction:()=>t&&n(t),children:[i(x,{title:m,description:s,onClick:()=>t&&n(t)}),c.map((o,d)=>i(k,{title:o.title,leadingIcon:o.icon,onClick:C=>{o.onClick&&(C.stopPropagation(),o.onClick())}},`cell-${d}`)),i(y,{name:p?.snapshot.primaryTitle,src:l??p?.snapshot.primaryTitle}),i(w,{onClick:o=>o.stopPropagation(),children:i(P,{label:`${m} actions`,disabled:!e?.length,placement:"left top",menuActions:e??[],documentationURL:a,isHeaderMenu:!1})})]})};export{T as TableRowWithOwner};
|
|
2
2
|
//# sourceMappingURL=TableRowWithOwner.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a,jsxs as
|
|
1
|
+
import{jsx as a,jsxs as g,Fragment as Te}from"react/jsx-runtime";import{useRouteRef as R,useApi as ye}from"@backstage/core-plugin-api";import{entityPresentationApiRef as Ce}from"@backstage/plugin-catalog-react";import{Box as S,HeaderPage as Re,Flex as N,SearchField as Se,Container as Ee,Text as we,Button as Z}from"@backstage/ui";import{makeStyles as Le,LinearProgress as ve}from"@material-ui/core";import{RiAddLine as _}from"@remixicon/react";import{isEmpty as be}from"lodash";import{useState as ee,useMemo as i,useCallback as Be,useEffect as Ie}from"react";import{useSearchParams as Pe,useNavigate as Ae}from"react-router-dom";import xe from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSortTableLocalStorage as Me}from"../../hooks/useSortTableLocalStorage.esm.js";import{useBatchedHierarchicalTrackStatuses as Ue}from"../../hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js";import{useGroupHierarchy as $e}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useTracksApplicableToGroup as Ne}from"../../hooks/tracks/useTracksApplicableToGroup.esm.js";import{useLCPReporting as je}from"../../hooks/useLCPReporting.esm.js";import{useLoadTimeReporting as De}from"../../hooks/useLoadTimeReporting.esm.js";import{newTrackRouteRef as Fe,campaignCreateRouteRef as Ge,trackExplorerRouteRef as He,campaignExplorerRouteRef as Oe}from"../../routes.esm.js";import{getAllOwnedEntityCount as ze}from"../../utils/getAllOwnedEntityCount.esm.js";import{getEntitiesBucket as Ve,getTracksBucket as We}from"../../utils/helpers.esm.js";import{showTrack as Xe}from"../../utils/tracks.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as qe}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import{TechInsightsGroupSelector as Je}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{SummaryTilesBUI as Ke}from"./SummaryTilesBUI.esm.js";import{TechInsightsTableBUI as Qe}from"./TechInsightsTableBUI.esm.js";const Ye=Le(()=>({container:{marginBottom:"var(--bui-space-12)"}})),Ze=()=>{const te=Ye(),[E,re]=Pe(),r=E.get("group")||"",[l,ae]=ee(E.get("search")||""),[h,oe]=ee(""),j=i(()=>({routeName:"soundcheck-tech-insights",additionalAttributes:{group:r||"",tracksSearch:h||""}}),[r,h]),{reportContentLoaded:D}=De({...j,enabled:!!r}),{reporter:ie}=je(j),f=Ae(),ne=R(Fe),se=R(Ge),w=ye(Ce),{order:ce,orderBy:me,handleSort:le}=Me({localStoragePrefix:"soundcheck-tech-insights",defaultSortBy:"entities",defaultDirection:"desc"});xe(()=>{oe(l);const e=new URLSearchParams(E.toString());l?e.set("search",l):e.delete("search"),re(e,{replace:!0})},500,[l]);const{tracks:L,campaigns:F,counts:v,isLoading:k,error:b,activeTrackCount:B}=Ne(r,{},{enabled:!!r}),d=L.filter(e=>e.type==="campaign"),I=L.filter(e=>e.type!=="campaign"),G=d.filter(e=>{const t=h.toLowerCase(),s=(e.ownerEntityRef?w.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||s.includes(t)}),H=I.filter(e=>{const t=h.toLowerCase(),s=(e.ownerEntityRef?w.forEntity(e.ownerEntityRef):void 0)?.snapshot.primaryTitle?.toLowerCase()||"";return t===""||e.name.toLowerCase().includes(t)||e.ownerEntityRef?.toLowerCase().includes(t)||s.includes(t)}),T=i(()=>[...G,...H],[G,H]),m=i(()=>[...d.map(e=>e.id),...I.map(e=>e.id)],[d,I]),{data:P,isLoading:de,error:pe,progress:o}=Ue({trackIds:m,groupRef:r||"",skip:!r||m.length===0}),{data:O,isLoading:y}=$e(r,{includeParent:!0}),A=i(()=>{const e=new Map;return Array.isArray(P)&&P.forEach(t=>{t&&t.trackId&&e.set(t.trackId,t)}),e},[P]),ue=i(()=>{const e=new Map;return Array.isArray(v)&&v.forEach(t=>{t&&t.id&&e.set(t.id,t.applicableEntityCount)}),e},[v]),z=k&&!b&&!!r,V=b||pe,x=m.length>0&&de&&!V&&!!r,W=i(()=>({totalActiveTracksCampaigns:B}),[B]),X=i(()=>{if(x)return{numTeams:void 0,avgCompliance:void 0,totalCampaigns:void 0,totalTracks:void 0};let e=0,t=0,s=0,u=0;const n=new Set;return T.forEach(C=>{const c=A.get(C.id);if(c){c.status&&typeof c.status.allPassPercentage=="number"&&(e+=c.status.allPassPercentage,t++),c.groupRef&&n.add(c.groupRef);const U=[c];for(;U.length>0;){const ke=U.pop();for(const $ of ke.children)n.has($.groupRef)||(n.add($.groupRef),U.push($))}}Xe(c?.status)&&(C.type==="campaign"?s++:u++)}),{numTeams:n.size,avgCompliance:t>0?Math.round(e/t):0,totalCampaigns:s,totalTracks:u}},[T,A,x]),p=i(()=>{if(y)return{numEntities:void 0};const e=O?.[r];return{numEntities:ze(e)}},[O,y,r]),ge=i(()=>({...W,...X,...p}),[W,X,p]),q=R(He),J=R(Oe),he=Be(e=>{if(!r)return;const t=new URLSearchParams;t.set("group",r),t.set("node",r);const s=d.find(({id:n})=>n===e);let u=q({trackId:e});if(s){const n=F?.edges.find(({node:C})=>C.track.id===e)?.node.id;n&&(u=J({campaignId:n}))}f(`${u}?${t.toString()}`)},[r,f,d,F,J,q]),K=r?w.forEntity(r).snapshot.primaryTitle:void 0,M=i(()=>!o||o.totalTracks===0?0:o.loadedTracks/o.totalTracks*100,[o]),Q=k&&r&&!b||x&&o&&o.totalTracks>0,Y=ie?.getLCPValue();Ie(()=>{if(!y&&!k&&(M===100||m.length===0)){const e=p.numEntities??0,t=m.length;D({lcp:Y,numberOfEntities:p.numEntities,entitiesBucket:Ve(e),numberOfTracks:m.length,tracksBucket:We(t)})}},[y,k,M,m.length,p.numEntities,D,Y]);const fe=a(Ke,{summaryStats:ge,isLoading:z});return V?a(S,{mt:"6",children:a(qe,{title:"No Tech Insights Data",body:"There was an error loading Tech Insights data."})}):g(Te,{children:[a(Re,{title:`${K?`${K}'s `:""}Tech Insights`,customActions:g(N,{align:"center",gap:"3",children:[a(Je,{hideSelected:!0}),a(Se,{isDisabled:be(L),value:l,onChange:ae,placeholder:"Search tracks or campaigns",style:{minWidth:250},"aria-label":"Search"})]})}),g(Ee,{className:te.container,children:[a(S,{style:{marginTop:0},children:fe}),Q&&a(S,{style:{marginBottom:16},children:a(ve,{variant:o&&o.totalTracks>0?"determinate":"indeterminate",value:o&&o.totalTracks>0?M:void 0,"data-testid":"batch-loading-indicator"})}),g(N,{align:"center",justify:"between",mb:"6",mt:"6",children:[a(S,{children:a(we,{variant:"title-x-small",weight:"bold",children:"Tracks & Campaigns"})}),T.length>0&&g(N,{align:"center",gap:"1",children:[a(Z,{iconStart:a(_,{}),onClick:()=>f(ne()),children:"Create Track"}),a(Z,{iconStart:a(_,{}),onClick:()=>f(se()),children:"Create Campaign"})]})]}),a(Qe,{tracks:T,trackStatusMap:A,trackCountsMap:ue,sortColumn:me,order:ce,handleSort:le,handleTrackClick:he,isLoading:z||!!Q,isSearch:!!l,activeTrackCount:B,hasGroupSelected:!!r})]})]})};export{Ze as TechInsightsPageBUI};
|
|
2
2
|
//# sourceMappingURL=TechInsightsPageBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,jsxs as p,Fragment as A}from"react/jsx-runtime";import{useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{
|
|
1
|
+
import{jsx as r,jsxs as p,Fragment as A}from"react/jsx-runtime";import{useApi as $}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{TableRoot as D,TableHeader as F,Column as u,TableBody as H,Row as U,Flex as q,Box as N,Text as G,CellText as x,CellProfile as O}from"@backstage/ui";import{makeStyles as Y}from"@material-ui/core";import{uniq as z,isEmpty as I,isNumber as v}from"lodash";import{useMemo as m}from"react";import{useProfileImages as J}from"../../hooks/catalog/useProfileImages.esm.js";import{getPercentage as y}from"../../utils/formatters.esm.js";import{showTrack as K}from"../../utils/tracks.esm.js";import{CustomCell as Q}from"../CustomCell/CustomCell.esm.js";import{DescriptionCell as V}from"../DescriptionCell/DescriptionCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as W}from"../EmptyState/EmptyStateBUI.esm.js";import{EmptyStateNoTracks as B}from"../EmptyState/EmptyStateNoTracks.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import"react-router-dom";import"../../routes.esm.js";import{LoadingTableSkeleton as L}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as X}from"../StatusBar/StatusBar.esm.js";const Z=Y(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),_=({track:a,trackStatus:e,entitiesCount:h,handleTrackClick:w,profileImageMap:g})=>{const l=Z(),c=$(j).forEntity(a.ownerEntityRef),f=m(()=>a.levels.reduce((t,s)=>t+s.checks.length,0),[a.levels]),i=m(()=>(e?.passed??0)+(e?.failed??0)+(e?.warning??0)+(e?.error??0)+(e?.notReported??0)+(e?.exempt??0),[e]),k=m(()=>{let t;return e?.allPassPercentage!==null&&e?.allPassPercentage!==void 0?t=e.allPassPercentage:e&&(t=y(e.passed+e.exempt,i)),t},[e,i]),P=m(()=>y(e?.failed,i),[e,i]),C=m(()=>y(e?.warning,i),[e,i]),d=m(()=>y(e?.notReported,i),[e,i]),S=m(()=>y(e?.error,i),[e,i]),T=g[c.snapshot.entityRef];return p(U,{onAction:()=>{w(a.id)},children:[r(V,{title:a.name??a.id,description:a.description??"",onClick:()=>w(a.id)}),r(Q,{children:p(q,{align:"center",gap:"2",children:[r(N,{className:l.statusPercent,children:p(G,{children:[k,"%"]})}),r(N,{className:l.statusBar,children:r(X,{passedPercent:k,failedPercent:P,warningPercent:C,notReportedPercent:d,errorPercent:S})})]})}),r(x,{title:a.type==="campaign"?"Campaign":"Track"}),r(x,{title:v(f)?`${f} Check${f===1?"":"s"}`:"N/A"}),r(x,{title:v(h)?`${h} ${h===1?"Entity":"Entities"}`:"N/A"}),r(O,{name:c.snapshot.primaryTitle,src:T??c.snapshot.primaryTitle})]})},ee=({order:a,sortColumn:e,handleSort:h,handleTrackClick:w,tracks:g,trackStatusMap:l,trackCountsMap:c,isSearch:f,isLoading:i,activeTrackCount:k,hasGroupSelected:P})=>{const C=m(()=>[...g].filter(t=>K(l.get(t.id)?.status)).sort((t,s)=>{const b=l.get(t.id),M=l.get(s.id);let o,n;switch(e){case"name":o=t.name?.toLowerCase()||"",n=s.name?.toLowerCase()||"";break;case"type":o=t.type||"",n=s.type||"";break;case"owner":o=t.ownerEntityRef?.toLowerCase()||"",n=s.ownerEntityRef?.toLowerCase()||"";break;case"compliance":o=b?.status?.allPassPercentage??null,n=M?.status?.allPassPercentage??null;break;case"checks":o=t.levels.reduce((R,E)=>R+E.checks.length,0),n=s.levels.reduce((R,E)=>R+E.checks.length,0);break;case"entities":o=c.get(t.id)??0,n=c.get(s.id)??0;break;default:return 0}return typeof o=="number"&&typeof n=="number"?a==="asc"?o-n:n-o:typeof o=="number"&&n===null?-1:o===null&&typeof n=="number"?1:typeof o=="string"&&typeof n=="string"?a==="asc"?o.localeCompare(n):n.localeCompare(o):0}),[g,l,e,c,a]),d=m(()=>C.map(t=>{const s=l.get(t.id)?.status,b=c.get(t.id)??0;return{track:t,trackStatus:s,entitiesCount:b}}),[C,c,l]),S=z(d.map(t=>t.track.ownerEntityRef)),{profileImageMap:T}=J(S);return!i&&I(g)?P?f&&k>0?r(W,{title:"No tracks or campaigns found.",body:"Your current search term did not return any tracks or campaigns. Please try a different search term. "}):r(B,{title:k>0?"No applicable tracks found for the selected group":void 0}):r(B,{title:"Select a group or create a new track"}):p(A,{children:[p(D,{sortDescriptor:{column:e,direction:a==="asc"?"ascending":"descending"},onSortChange:t=>h(t.column),children:[p(F,{children:[r(u,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"43%"},children:"Name"}),r(u,{id:"compliance",allowsSorting:!0,style:{width:"12%"},children:"Compliance"}),r(u,{id:"type",allowsSorting:!0,style:{width:"10%"},children:"Type"}),r(u,{id:"checks",allowsSorting:!0,style:{width:"10%"},children:"Checks"}),r(u,{id:"entities",allowsSorting:!0,style:{width:"10%"},children:"Entities"}),r(u,{id:"owner",allowsSorting:!0,style:{width:"15%"},children:"Track Owner"})]}),r(H,{children:d.map(t=>r(_,{handleTrackClick:w,profileImageMap:T??{},...t},t.track.id))})]}),I(d)&&i&&r(L,{rowCount:10}),!I(d)&&i&&r(L,{rowCount:4})]})};export{ee as TechInsightsTableBUI};
|
|
2
2
|
//# sourceMappingURL=TechInsightsTableBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as
|
|
1
|
+
import{jsx as t,jsxs as c,Fragment as v}from"react/jsx-runtime";import{useRouteRef as y}from"@backstage/core-plugin-api";import{useEntityPresentation as C}from"@backstage/plugin-catalog-react";import{TableRoot as N,TableHeader as E,Column as h,TableBody as B,TablePagination as k,Row as O,CellProfile as z,CellText as M,Flex as D,Box as w,Text as L}from"@backstage/ui";import{makeStyles as $}from"@material-ui/core";import{sortBy as j}from"lodash";import{useMemo as P}from"react";import{useNavigate as F,createSearchParams as H}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchName as A}from"../../hooks/useSearchName.esm.js";import{usePagination as G}from"../../hooks/usePagination.esm.js";import{useSortTableLocalStorage as U}from"../../hooks/useSortTableLocalStorage.esm.js";import{useProfileImages as V}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as W,campaignOverviewRouteRef as X}from"../../routes.esm.js";import{CustomCell as Y}from"../CustomCell/CustomCell.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as q}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as J}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as K}from"../StatusBar/StatusBar.esm.js";const R=10,Q=(e,m=[])=>{const o=[],a=r=>{!r.children||r.children.length===0?r.numberOfEntities>0&&o.push(r):(m.includes(r.entityRef)&&r.numberOfEntities>0&&o.push(r),r.children.forEach(l=>a(l)))};return a(e),o},Z=$(()=>({statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),_=({row:e,profileImageMap:m,trackId:o,campaignId:a})=>{const r=Z(),l=y(W),p=y(X),s=F(),{primaryTitle:d}=C(e.entityRef);return c(O,{onAction:()=>{o&&s({pathname:a?p({campaignId:a}):l({trackId:o}),search:`?${H({owners:[e.entityRef]})}`})},children:[t(z,{name:d,src:m[e.entityRef]??d}),t(M,{title:`${e.numberOfEntities} ${e.numberOfEntities===1?"entity":"entities"}`}),t(Y,{children:c(D,{align:"center",gap:"2",children:[t(w,{className:r.statusPercent,children:c(L,{children:[e.passPercentage,"%"]})}),t(w,{className:r.statusBar,children:t(K,{passedPercent:e.passPercentage,failedPercent:e.failPercentage,warningPercent:e.warningPercentage,notReportedPercent:e.notReportedPercentage,errorPercent:e.errorPercentage})})]})})]})},ee=({tableData:e,isLoading:m,trackId:o,selectedGroup:a,searchValue:r,campaignId:l})=>{const{order:p,orderBy:s,handleSort:d}=U({localStoragePrefix:"soundcheck-tech-insights-explorer",defaultSortBy:"entities",defaultDirection:"desc"}),f=P(()=>e?Q(e,a?[a]:[]):[],[a,e]),S=A({items:f,searchTerm:r}),g=P(()=>{const i=j(S??[],u=>s==="name"?u.name:s==="passPercentage"?u.passPercentage:s==="entities"?u.numberOfEntities:0);return p==="desc"&&i.reverse(),i},[S,p,s]),b=P(()=>f.map(i=>i.entityRef),[f]),{paginatedItems:I,paginationProps:n}=G({pageParam:"perPage",defaultPageSize:R,items:g}),x=g.length>R,{profileImageMap:T}=V(b);return m?t(J,{rowCount:10}):!m&&!g.length?t(q,{title:"No groups found",body:"No groups found for the current selection."}):c(v,{children:[c(N,{sortDescriptor:{column:s,direction:p==="asc"?"ascending":"descending"},onSortChange:i=>d(i.column),children:[c(E,{children:[t(h,{allowsSorting:!0,id:"name",isRowHeader:!0,style:{width:"75%"},children:"Name"}),t(h,{allowsSorting:!0,id:"entities",style:{width:"10%"},children:"Entities"}),t(h,{allowsSorting:!0,id:"passPercentage",style:{width:"15%"},children:"Compliance"})]}),t(B,{children:I.map(i=>t(_,{profileImageMap:T??{},row:i,trackId:o,campaignId:l},i.entityRef))})]}),x&&t(k,{totalCount:g.length,offset:n.offset,hasNextPage:n.offset+n.pageSize<(g.length??0),hasPreviousPage:n.offset>0,onNextPage:n.onNextPage,onPreviousPage:n.onPreviousPage,onPageSizeChange:n.onPageSizeChange,pageSize:n.pageSize})]})};export{ee as TechInsightsExplorerTable};
|
|
2
2
|
//# sourceMappingURL=TechInsightsExplorerTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r,Fragment as y,jsxs as
|
|
1
|
+
import{jsx as r,Fragment as y,jsxs as i}from"react/jsx-runtime";import{Flex as f,Text as h,Button as s,Box as g}from"@backstage/ui";import{makeStyles as z}from"@material-ui/core/styles";import{RiSubtractLine as O,RiAddLine as _}from"@remixicon/react";import{useState as v,useContext as M}from"react";import{DialogTrigger as P,Popover as F,Dialog as R,OverlayTriggerStateContext as C,NumberField as E,Label as U,Group as L,Input as j}from"react-aria-components";import{useSearchParams as k}from"react-router-dom";import"../../utils/facetFilters/types.esm.js";import{MAX_NUMBER_OF_DAYS as N,DEFAULT_NUMBER_OF_DAYS as x,MIN_NUMBER_OF_DAYS as p}from"../../utils/facetFilters/utils.esm.js";const V=[{label:"7D",value:7},{label:"1M",value:x},{label:"2M",value:60},{label:"3M",value:N}],Y=z(()=>({centerText:{textAlign:"center"},group:{display:"flex",alignItems:"center",justifyContent:"center"},inputButton:{display:"flex",alignItems:"center"},dialog:{background:"var(--bui-bg-popover)",padding:"var(--bui-space-3)",borderRadius:"var(--bui-radius-3)",border:"1px solid var(--bui-border)"},pointer:{cursor:"pointer"},dialogTriggerButton:{padding:"0 !important",fontWeight:"normal",height:"0 !important",color:"var(--bui-fg-secondary) !important",fontSize:"var(--bui-font-size-2) !important"}})),w=({maxNumberOfDays:o=N})=>{const a=Y(),[c,S]=k(),m=c.get("numberOfDays"),T=m!==null&&!isNaN(Number(m))?Number(m):x,[B,D]=v(T),u=t=>{if(D(t),c.get("numberOfDays")!==String(t)){const l=new URLSearchParams(c);l.set("numberOfDays",String(t)),S(l,{replace:!0})}},I=()=>{const t=M(C),[l,d]=v(String(B)),b=e=>{let n;if(typeof e=="string"){if(!e.length)return!0;n=parseInt(e,10)}else n=e;return!isNaN(n)&&n>=p&&n<=o},A=e=>{if(e.key==="Enter"){const n=parseInt(e.currentTarget.value,10);b(n)&&(u(n),t?.close())}};return i(y,{children:[i(E,{minValue:p,maxValue:o,value:parseInt(l,10),children:[i(g,{mb:"2",children:[r(g,{style:{textAlign:"center"},children:r(U,{className:a.centerText,id:"number-days",children:"Number of days"})}),r(g,{style:{textAlign:"center"},children:i(h,{variant:"body-small",color:"secondary","aria-labelledby":"number-days",children:["Enter a value from ",p," to ",o]})})]}),i(L,{className:a.group,children:[r(s,{slot:"decrement",variant:"tertiary",size:"small",className:a.inputButton,onPress:()=>{d(e=>String(parseInt(e,10)-1))},children:r(O,{size:8})}),r(j,{onKeyDown:A,size:5,className:a.centerText,onChange:e=>d(e.currentTarget.value)}),r(s,{slot:"increment",variant:"tertiary",size:"small",className:a.inputButton,onPress:()=>{d(e=>String(parseInt(e,10)+1))},children:r(_,{size:8})})]})]}),r(f,{align:"center",justify:"center",mt:"2",children:r(s,{style:{height:"auto"},variant:"tertiary",size:"small",onPress:()=>{const e=parseInt(l,10);b(e)&&(u(e),t?.close())},children:"Apply"})})]})};return r(y,{children:i(f,{align:"center",children:[V.filter(({value:t})=>t<=o).map(t=>r(h,{variant:"body-small",color:"secondary",className:a.pointer,onClick:()=>u(t.value),children:t.label},t.value)),i(P,{children:[r(s,{variant:"tertiary",size:"small",className:a.dialogTriggerButton,children:"Custom"}),r(F,{children:r(R,{className:a.dialog,children:r(I,{})})})]})]})})};export{w as TimePeriodBarBUI};
|
|
2
2
|
//# sourceMappingURL=TimePeriodBarBUI.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as o,jsx as t}from"react/jsx-runtime";import{useMemo as g,useCallback as B,createElement as S}from"react";import{useRouteRef as $,useApi as G}from"@backstage/core-plugin-api";import{entityPresentationApiRef as W}from"@backstage/plugin-catalog-react";import{Flex as b,Card as k,Text as N,Box as v,Avatar as D}from"@backstage/ui";import{makeStyles as U}from"@material-ui/core";import{isEmpty as C}from"lodash";import{useNavigate as q,createSearchParams as J}from"react-router-dom";import{useProfileImages as K}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as Q,campaignOverviewRouteRef as V}from"../../routes.esm.js";import{getPercentage as T}from"../../utils/formatters.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as A}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import{getLeafNodes as X}from"../HierarchicalTechInsightsPage/getLeafNodes.esm.js";import{LoadingTableSkeleton as E}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as Y}from"../StatusBar/StatusBar.esm.js";const M=U(()=>({topTeamCard:{padding:"var(--bui-space-3) var(--bui-space-5)",minWidth:400},topTeamCardRows:{minHeight:"calc(var(--bui-space-6) * 6.5)",cursor:"pointer"},topTeamCardRow:{display:"flex",flexDirection:"row",gridGap:1,alignItems:"center",width:"100%",padding:"var(--bui-space-2)",marginBottom:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-
|
|
1
|
+
import{jsxs as o,jsx as t}from"react/jsx-runtime";import{useMemo as g,useCallback as B,createElement as S}from"react";import{useRouteRef as $,useApi as G}from"@backstage/core-plugin-api";import{entityPresentationApiRef as W}from"@backstage/plugin-catalog-react";import{Flex as b,Card as k,Text as N,Box as v,Avatar as D}from"@backstage/ui";import{makeStyles as U}from"@material-ui/core";import{isEmpty as C}from"lodash";import{useNavigate as q,createSearchParams as J}from"react-router-dom";import{useProfileImages as K}from"../../hooks/catalog/useProfileImages.esm.js";import{trackOverviewRouteRef as Q,campaignOverviewRouteRef as V}from"../../routes.esm.js";import{getPercentage as T}from"../../utils/formatters.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as A}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import"@spotify/backstage-plugin-soundcheck-common";import{getLeafNodes as X}from"../HierarchicalTechInsightsPage/getLeafNodes.esm.js";import{LoadingTableSkeleton as E}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";import{StatusBar as Y}from"../StatusBar/StatusBar.esm.js";const M=U(()=>({topTeamCard:{padding:"var(--bui-space-3) var(--bui-space-5)",minWidth:400},topTeamCardRows:{minHeight:"calc(var(--bui-space-6) * 6.5)",cursor:"pointer"},topTeamCardRow:{display:"flex",flexDirection:"row",gridGap:1,alignItems:"center",width:"100%",padding:"var(--bui-space-2)",marginBottom:"var(--bui-space-2)",backgroundColor:"var(--bui-bg-neutral-2)",border:"1px solid var(--bui-bg-neutral-2)",borderRadius:"var(--bui-radius-2)"},infoButton:{"&:hover":{backgroundColor:"inherit !important"}},teamName:{width:"75%"},percentBar:{width:"25%"},statusPercent:{width:"var(--bui-space-12)"},statusBar:{width:"100%"}})),H=({groupRef:a,teamName:i,passPercentage:m,failPercentage:l,warningPercentage:u,notReportedPercentage:f,errorPercentage:P,profileImageMap:p,onClick:h})=>{const n=M();return t(k,{className:`${n.topTeamCardRow}`,onClick:h,children:o(b,{align:"center",gap:"1",style:{flex:1},children:[o(b,{align:"center",gap:"2",className:n.teamName,children:[t(D,{name:i,size:"small",src:p[a]?p[a]:i}),t(N,{children:i})]}),o(b,{align:"center",gap:"1",className:n.percentBar,children:[t(v,{className:n.statusPercent,children:o(N,{color:"secondary",children:[m,"%"]})}),t(v,{className:n.statusBar,children:t(Y,{passedPercent:m,failedPercent:l,warningPercent:u,notReportedPercent:f,errorPercent:P})})]})]})})},Z=({trackStatus:a,isLoading:i,campaignId:m})=>{const l=M(),u=$(Q),f=$(V),P=q(),p=80,h=50,n=G(W),y=g(()=>a?X(a):[],[a]),R=g(()=>y.filter(e=>{const{passed:r,failed:s,warning:O,error:j,notReported:z,exempt:F}=e.status;return r+s+O+j+z+F>0&&!e.children?.length}).sort((e,r)=>(e.status.allPassPercentage??0)-(r.status.allPassPercentage??0)),[y]),w=B(e=>{const r=n.forEntity(e.groupRef).snapshot,s=e.status.failed+e.status.passed+e.status.error+e.status.exempt+e.status.warning+e.status.notReported;return{groupRef:e.groupRef,teamName:r.primaryTitle,passPercentage:e.status.allPassPercentage??0,failPercentage:T(e.status.failed,s),warningPercentage:T(e.status.warning,s),notReportedPercentage:T(e.status.notReported,s),errorPercentage:T(e.status.warning,s),teamInfo:r.secondaryTitle}},[n]),c=g(()=>R.filter(e=>(e.status.allPassPercentage??0)<h).slice(0,3).map(w),[R,w]),d=g(()=>{const e=R.filter(r=>(r.status.allPassPercentage??0)>=p);return e.reverse(),e.slice(0,3).map(w)},[R,w]),L=g(()=>[...d.map(e=>e.groupRef),...c.map(e=>e.groupRef)],[c,d]),{profileImageMap:x}=K(L),I=B(e=>{let r;if(m?r=f({campaignId:m}):a?.trackId&&(r=u({trackId:a.trackId})),r){const s=`${r}?${J({owners:[e]})}`;P(s)}},[f,u,P,m,a?.trackId]);return o(b,{children:[o(k,{className:l.topTeamCard,children:[t(N,{variant:"title-x-small",weight:"bold",children:"Teams Needing Attention"}),i&&t(E,{rowCount:3,rowHeight:40}),!i&&o(v,{className:l.topTeamCardRows,children:[!C(c)&&c.map(e=>S(H,{profileImageMap:x??{},...e,key:e.groupRef,onClick:()=>I(e.groupRef)})),C(c)&&t(A,{title:"No teams eligible",body:`None of your teams are performing below ${h}% compliance.`})]})]}),o(k,{className:l.topTeamCard,children:[t(N,{variant:"title-x-small",weight:"bold",children:"Top Performing Teams"}),i&&t(E,{rowCount:3,rowHeight:40}),!i&&o(v,{className:l.topTeamCardRows,children:[!C(d)&&d.map(e=>S(H,{profileImageMap:x??{},...e,key:e.groupRef,onClick:()=>I(e.groupRef)})),C(d)&&t(A,{title:"No teams eligible",body:`None of your teams are performing above ${p}% compliance.`})]})]})]})};export{Z as TopAndBottomPerformingTeams};
|
|
2
2
|
//# sourceMappingURL=TopAndBottomPerformingTeams.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as o,jsxs as g,Fragment as L}from"react/jsx-runtime";import{useRouteRef as O}from"@backstage/core-plugin-api";import{TableRoot as j,TableHeader as $,Column as P,TableBody as A,Row as H,CellText as b,TablePagination as M}from"@backstage/ui";import{makeStyles as U}from"@material-ui/core";import{sortBy as V}from"lodash";import{useState as w,useEffect as W,useCallback as q,useMemo as C}from"react";import{CircularProgressbar as G}from"react-circular-progressbar";import{useNavigate as J}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePagination as K}from"../../hooks/usePagination.esm.js";import"react-use/lib/useLocalStorage";import{useSortSearchParams as Q}from"../../hooks/useSortSearchParams.esm.js";import{trackCheckDetailsRouteRef as X}from"../../routes.esm.js";import{getPercentage as y}from"../../utils/formatters.esm.js";import"../EmptyState/EmptyState.esm.js";import{EmptyStateBUI as Y}from"../EmptyState/EmptyStateBUI.esm.js";import"@backstage/plugin-permission-react";import"@remixicon/react";import{LoadingTableSkeleton as Z}from"../LoadingTableSkeleton/LoadingTableSkeleton.esm.js";const _=U(()=>({customCell:{padding:"0 var(--bui-space-3)"},circularProgressBg:{color:"var(--bui-fg-secondary)",opacity:.25},circularProgressOverlay:{position:"absolute",left:0,color:"var(--bui-fg-danger)"},circularProgressbar:{width:"var(--bui-space-7)"}})),T=10,ee=["compliance","name","failures"],d=a=>ee.includes(a),te=({track:a,checkStatuses:s,certificationStatus:c,searchValue:u})=>{const N=_(),{updateSortParams:v,searchParams:n}=Q(),[p,k]=w(()=>{const e=n.get("sortDirection");return e==="ascending"||e==="descending"?e:"descending"}),[l,S]=w(()=>{const e=n.get("sort");return e&&d(e)?e:"compliance"}),x=O(X),I=J();W(()=>{const e=n.get("sortDirection");(e==="ascending"||e==="descending")&&k(e);const t=n.get("sort");t&&d(t)&&S(t)},[n]);const R=q(({direction:e,column:t})=>{const r=String(t);d(r)&&S(r),k(e),v({sort:d(r)?r:"compliance",sortDirection:e})},[v]),m=C(()=>!a.levels||!s?[]:a.levels.flatMap(e=>e.checks.map(t=>{const r=s.find(({id:F})=>F===t.id),D=r?r.numberOfEntities-r.notApplicable-r.exempt:0,E=r?.failed??0;return{check:t,failedCount:E,applicableCount:D}}).filter(({failedCount:t})=>t>0)),[a.levels,s]),f=C(()=>{if(!u?.length)return m;const e=u.toLowerCase();return m.filter(({check:t})=>t.name.toLowerCase().includes(e))},[m,u]),h=C(()=>{const e=V([...f],t=>l==="compliance"?y(t.failedCount,c?.numberOfEntities??0):l==="failures"?t.failedCount:t.check.name.toLowerCase());return p==="descending"&&e.reverse(),e},[f,p,l,c]),{paginatedItems:z,paginationProps:i}=K({pageParam:"perPage",defaultPageSize:T,items:h}),B=a.levels.length>T;return s===void 0||c===void 0?o(Z,{}):!m.length||!f.length?o(Y,{title:"No failing checks",body:"There are no failing checks found."}):g(L,{children:[g(j,{onSortChange:R,sortDescriptor:{direction:p,column:l},children:[g($,{children:[o(P,{id:"compliance",allowsSorting:!0,style:{width:"8%"},children:"Compliance"}),o(P,{id:"name",allowsSorting:!0,isRowHeader:!0,style:{width:"72%"},children:"Name"}),o(P,{id:"failures",allowsSorting:!0,style:{width:"20%"},children:"Failures"})]}),o(A,{children:z.map(({check:e,failedCount:t})=>{const r=y(t,c.numberOfEntities);return g(H,{onAction:()=>I(x({trackId:a.id,checkId:e.id})),children:[o(b,{leadingIcon:o("div",{className:N.circularProgressbar,title:`${r}%`,children:o(G,{value:r,strokeWidth:12,styles:{path:{stroke:"var(--bui-fg-danger)"},trail:{stroke:'rgba(var("--bui-fg-secondary"), 0.25)'}}})}),title:`${r}%`}),o(b,{title:e.name}),o(b,{title:`${new Intl.NumberFormat().format(t??0)} failing`})]},e.id)})})]}),B&&o(M,{totalCount:h.length,offset:i.offset,hasNextPage:i.offset+i.pageSize<(h.length??0),hasPreviousPage:i.offset>0,onNextPage:i.onNextPage,onPreviousPage:i.onPreviousPage,onPageSizeChange:i.onPageSizeChange,pageSize:i.pageSize})]})};export{te as TopFailingChecksTableBUI};
|
|
2
2
|
//# sourceMappingURL=TopFailingChecksTableBUI.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,jsxs as o,Fragment as st}from"react/jsx-runtime";import{useRouteRef as at}from"@backstage/core-plugin-api";import{Container as z,Flex as S,HeaderPage as ct,Box as U,Button as u,Dialog as nt,DialogHeader as it,DialogBody as ot,DialogFooter as lt}from"@backstage/ui";import{makeStyles as ut}from"@material-ui/core";import{RiCloseLine as dt}from"@remixicon/react";import{useMemo as k,useState as $,useCallback as G,useEffect as x}from"react";import{useSearchParams as mt,useNavigate as St}from"react-router-dom";import ht from"react-use/lib/useLocalStorage";import{useOutOfBoxTracks as pt}from"../../hooks/tracks/useOutOfBoxTracks.esm.js";import{useSaveOutOfBoxTracks as ft}from"../../hooks/tracks/useSaveOutOfBoxTracks.esm.js";import{tracksPageRouteRef as kt}from"../../routes.esm.js";import{LoadingIndicator as gt}from"../LoadingIndicator/LoadingIndicator.esm.js";import{Stepper as bt}from"../Stepper/Stepper.esm.js";import{RunChecksStep as vt}from"./components/RunChecksStep/RunChecksStep.esm.js";import{SelectProviderStep as yt}from"./components/SelectProviderStep/SelectProviderStep.esm.js";import{SelectTracksStep as Tt}from"./components/SelectTracksStep/SelectTracksStep.esm.js";import{PROVIDER_STORAGE_KEY as Ct,fromUrlStep as xt,hasInstallableIntegrations as Bt,getAllowedStep as J,readSessionJSON as It,toUrlStep as Pt,writeSessionJSON as Ot,INTEGRATION_ALIASES as Rt}from"./utils.esm.js";const jt=ut(()=>({container:{margin:"0 0 var(--bui-space-12)"},content:{width:"50%",margin:"0 auto"},successButton:{background:"var(--bui-fg-success) !important","& .bui-ButtonContent":{color:"var(--bui-fg-solid) !important"},'&:not([aria-disabled="true"]):not([data-disabled="true"]):not(:disabled)':{"&:hover":{background:"color-mix(in srgb, var(--bui-fg-success) 75%, white) !important"}},'&[aria-disabled="true"], &[data-disabled="true"], &:disabled':{opacity:.5}}})),B=["Select Provider","Select Tracks","Run Checks"],_=0,H=B.length-1,wt=()=>{const d=jt(),[g,I]=mt(),h=at(kt),b=St(),[v,V]=ht(Ct,null),r=g.get("provider"),p=g.get("tracks"),c=k(()=>p?.split(",").filter(Boolean)??[],[p]),l=c.length>0,P=xt(g.get("step"),_,H),[Y,O]=$(!1),{isLoading:q,data:R,isSuccess:j,isFetchedAfterMount:w}=pt(),{isPending:K,mutateAsync:Q}=ft(),[y,N]=$({tracksStatus:null,checksStatus:null,collectorsStatus:null}),m=k(()=>R?.filter(t=>Bt(t,r)),[R,r]),T=k(()=>{const t=c.slice().sort().join(",");return`trackBuilderStatus:${r??"none"}:${t}`},[r,c]),n=G(t=>{I(s=>{const i=new URLSearchParams(s);for(const[f,M]of Object.entries(t))M===null?i.delete(f):i.set(f,M);return i})},[I]),a=k(()=>J(P,r,l),[P,r,l]),A=a===0,E=a===1,D=a===B.length-1;x(()=>{!r&&v&&n({provider:v})},[r,v,n]),x(()=>{const t=It(T);N(t||{tracksStatus:null,checksStatus:null,collectorsStatus:null})},[T]);const C=G(t=>{const s=Math.max(_,Math.min(H,t)),i=J(s,r,l);n({step:Pt(i)})},[r,l,n]),W=()=>E?O(!0):b(h()),F=()=>O(!1),X=()=>b(h()),L=(t,s)=>{const i=s?Array.from(new Set([...c,t])):c.filter(f=>f!==t);n({tracks:i.length?i.join(","):null})},Z=t=>{const s=Rt[t];V(s??null),n({provider:s??null})};x(()=>{if(!r||!m||p||!j||!w)return;const t=m.filter(s=>s.isInstalled).map(s=>s.id);t.length&&n({tracks:t.join(",")})},[r,p,j,w,m,n]);const tt=async()=>{if(E&&l)try{const t=await Q({trackIds:c,selectedProvider:r}),s={tracksStatus:t.tracksStatus,checksStatus:t.checksStatus,collectorsStatus:t.collectorsStatus};N(s),Ot(T,s)}catch{}D||C(a+1)},et=()=>{A||C(a-1)},rt=()=>b(h());return q?e(z,{className:d.container,children:e(gt,{})}):o(st,{children:[e(S,{justify:"center",align:"center",children:e(ct,{title:"Use Spotify Templates",breadcrumbs:[{label:"All Tracks",href:h()}]})}),e(z,{className:d.container,children:o(U,{className:d.content,children:[e(S,{justify:"center",align:"center",mt:"6",children:e(bt,{stepTitles:B,currentStep:a,onStepClick:C})}),o(U,{children:[a===0&&e(yt,{selectedProvider:r,onSelect:Z}),a===1&&e(Tt,{selectedProvider:r,tracks:m??[],selectedTrackIds:c,onToggleTrack:L}),a===2&&e(vt,{tracksStatus:y.tracksStatus,checksStatus:y.checksStatus,collectorsStatus:y.collectorsStatus,selectedProvider:r,tracks:m??[],selectedTrackIds:c,onToggleTrack:L})]}),o(S,{align:"center",justify:"between",children:[e(S,{align:"center",justify:"between",children:o(u,{size:"small",variant:"tertiary",onClick:W,children:[e(dt,{})," Exit"]})}),o(S,{align:"center",justify:"between",gap:"2",children:[!A&&e(u,{size:"small",variant:"secondary",onClick:et,children:"Back"}),D?e(u,{size:"small",variant:"secondary",onClick:rt,className:d.successButton,children:"Finish"}):e(u,{size:"small",variant:"primary",onClick:tt,isDisabled:a===0&&!r||a===1&&!l,isPending:K,className:d.successButton,children:"Next"})]})]}),o(nt,{isOpen:Y,onOpenChange:F,children:[e(it,{children:"Exit Track Builder?"}),e(ot,{children:"If you exit now, your current selections may be lost."}),o(lt,{children:[e(u,{variant:"tertiary",onClick:F,children:"Cancel"}),e(u,{variant:"secondary",onClick:X,children:"Exit"})]})]})]})})]})};export{wt as TrackBuilderPage};
|
|
2
|
+
//# sourceMappingURL=TrackBuilderPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r,jsxs as u,Fragment as $}from"react/jsx-runtime";import{Card as F,CardBody as S,Box as s,Text as o,Button as v}from"@backstage/ui";import{makeStyles as j,CircularProgress as q}from"@material-ui/core";import{RiCheckboxCircleLine as Q,RiCloseCircleLine as f,RiErrorWarningLine as k,RiInformationLine as C,RiCircleLine as x,RiPlayLine as U}from"@remixicon/react";import{NotesSchema as V}from"@spotify/backstage-plugin-soundcheck-common";import{startCase as y}from"lodash";import{ResultState as e}from"../../../../graphql/generated/index.esm.js";import{getUniqueIntegrationFacts as G,getCheckRunsAtString as H,formatCheckItemError as J,checkResultTooltips as K}from"../../utils.esm.js";import{IntegrationTags as O}from"../IntegrationTags/IntegrationTags.esm.js";const X=j(()=>({checkDetailsExpanded:{flex:1,minWidth:0},checkItem:{display:"flex",alignItems:"flex-start",gap:"var(--bui-space-4)",borderBottom:"1px solid var(--bui-border)","&:last-child":{borderBottom:"none"}},checkIconWrapper:{width:24,height:24,display:"flex",alignItems:"center",justifyContent:"center",borderRadius:"var(--bui-radius-full)"},installedCircle:{background:"var(--bui-bg-neutral-1)",color:"var(--bui-fg-success)"},notInstalledCircle:{background:"var(--bui-bg-neutral-1)",color:"var(--bui-fg-warning)"},passCircle:{background:"var(--bui-bg-neutral-1)",color:"var(--bui-fg-success)"},failCircle:{background:"var(--bui-bg-neutral-1)",color:"var(--bui-fg-danger)"},warningCircle:{background:"var(--bui-bg-neutral-1)",color:"var(--bui-fg-warning)"},notApplicableCircle:{background:"var(--bui-bg-neutral-1)",color:"var(--bui-fg-secondary)"},checkDetails:{flex:1},checkName:{display:"block",fontWeight:500,marginBottom:"var(--bui-space-1)"},checkDescriptionText:{color:"var(--bui-fg-secondary)",marginBottom:"var(--bui-space-1)"},checkRunsAtText:{color:"var(--bui-fg-primary)"},checkActionsRight:{display:"flex",alignItems:"center",gap:"var(--bui-space-3)",flexShrink:0},passedButton:{backgroundColor:"var(--bui-bg-success)",color:"var(--bui-fg-success)",borderColor:"var(--bui-border-success)"},failedButton:{backgroundColor:"var(--bui-bg-danger)",color:"var(--bui-fg-danger)",borderColor:"var(--bui-border-danger)"},warningButton:{backgroundColor:"var(--bui-bg-warning)",color:"var(--bui-fg-warning)",borderColor:"var(--bui-border-warning)"},notApplicableButton:{backgroundColor:"var(--bui-bg-neutral-2)",color:"var(--bui-fg-secondary)",borderColor:"var(--bui-border)"},resultMessage:{padding:"var(--bui-space-1) var(--bui-space-2)",borderRadius:"var(--bui-radius-2)",marginTop:"var(--bui-space-2)",display:"inline-block",opacity:.8},passMessage:{backgroundColor:"var(--bui-bg-success)",color:"var(--bui-fg-success)"},failMessage:{backgroundColor:"var(--bui-bg-danger)",color:"var(--bui-fg-danger)"},warningMessage:{backgroundColor:"var(--bui-bg-warning)",color:"var(--bui-fg-warning)"},notApplicableMessage:{backgroundColor:"var(--bui-bg-neutral-2)",color:"var(--bui-fg-secondary)"},errorsBulletList:{margin:"var(--bui-space-1) 0 0 var(--bui-space-4)",padding:0,color:"var(--bui-fg-danger)"}})),Y={[e.Passed]:r(Q,{size:16}),[e.Failed]:r(f,{size:16}),[e.Warning]:r(k,{size:16}),[e.Error]:r(f,{size:16}),[e.Exempt]:r(k,{size:16}),[e.NotReported]:r(C,{size:16}),[e.NotApplicable]:r(C,{size:16})},Z=({check:l,selectedProvider:N,mode:w="view",variant:R="select",entityRef:E,isExecutable:d=!0,isExecuting:g=!1,isExecutingAll:I=!1,executingCheckId:A,executedChecks:B=new Map,onExecute:z})=>{const a=X(),b=w==="run",i=B.get(l.id),t=i!==void 0,W=E&&d&&!t&&!g&&!I,p=(l.integrations??[]).flatMap(c=>G(c)),m=H(p),M=()=>{if(t)switch(i.result){case e.Passed:return a.passCircle;case e.Failed:case e.Error:return a.failCircle;case e.Warning:case e.Exempt:return a.warningCircle;case e.NotApplicable:case e.NotReported:default:return a.notApplicableCircle}},L=()=>t?r("div",{title:K[i.result],children:r(s,{className:`${a.checkIconWrapper} ${M()}`,children:Y[i.result]})}):d?r("div",{title:"Integration(s) configured",children:r(s,{className:`${a.checkIconWrapper} ${a.installedCircle}`,children:r(x,{size:16})})}):r("div",{title:"Integration(s) not configured",children:r(s,{className:`${a.checkIconWrapper} ${a.notInstalledCircle}`,children:r(x,{size:16})})}),P=()=>{if(t)switch(i.result){case e.Passed:return a.passedButton;case e.Failed:case e.Error:return a.failedButton;case e.Warning:case e.Exempt:return a.warningButton;case e.NotApplicable:case e.NotReported:default:return a.notApplicableButton}},T=()=>g?r(q,{size:14}):t?y(i.result.toLowerCase()):u($,{children:[r(U,{size:14}),"Execute"]}),D=()=>{if(t)switch(i.result){case e.Passed:return a.passMessage;case e.Failed:case e.Error:return a.failMessage;case e.Warning:case e.Exempt:return a.warningMessage;case e.NotApplicable:case e.NotReported:default:return a.notApplicableMessage}},h=()=>{if(t)switch(i.result){case e.Passed:return"success";case e.Failed:case e.Error:return"danger";case e.Warning:case e.Exempt:return"warning";case e.NotApplicable:case e.NotReported:default:return"secondary"}},n=(()=>{if(!t)return;const c=i.details?.notes?V.safeParse(i.details.notes):void 0;return i.result===e.Error?c?.data?.data?J(c?.data.data):{title:"Execution failed"}:c?.success?{title:c.data.data}:{title:y(i.result.toLowerCase())}})();return r(F,{children:r(S,{children:u(s,{className:a.checkItem,children:[L(),u(s,{className:b?a.checkDetailsExpanded:a.checkDetails,children:[r(o,{className:a.checkName,variant:"body-large",children:l.name}),r(s,{children:r(o,{className:a.checkDescriptionText,variant:"body-small",children:l.description})}),R==="run"&&m&&r(s,{mt:"2",children:r(o,{className:a.checkRunsAtText,variant:"body-small",children:m})}),t&&n&&u(s,{className:`${a.resultMessage} ${D()}`,children:[r(s,{children:r(o,{variant:"body-small",color:h(),children:n.subtitle??n.title})}),n.bullets?.length&&r(s,{children:r("ul",{className:a.errorsBulletList,children:n.bullets.map(c=>r("li",{children:r(o,{variant:"body-small",color:h(),children:c})},c))})})]}),r(s,{mt:"2",children:r(O,{facts:p,selectedProvider:N})})]}),(b||t)&&r(s,{className:a.checkActionsRight,children:d?r(v,{variant:t?"tertiary":"secondary",size:"small",isDisabled:!W||t||!!A,onClick:()=>z?.(l.id),className:P(),children:T()}):r(v,{variant:"tertiary",size:"small",isDisabled:!0,children:"Setup Required"})})]})})},l.id)};export{Z as CheckItem};
|
|
2
|
+
//# sourceMappingURL=CheckItem.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as o,jsxs as i}from"react/jsx-runtime";import{TagGroup as a,Tag as g,Flex as m}from"@backstage/ui";import{IntegrationLogoBUI as c}from"../../../CollectorsPage/IntegrationLogoBUI.esm.js";import{computeIntegrationTags as p}from"../../utils.esm.js";const s=({facts:e,selectedProvider:t})=>{const n=p(e,t);return o(a,{children:n.map(r=>o(g,{children:i(m,{align:"center",gap:"2",children:[o(c,{integrationId:r.id}),r.name]})},r.id))})};export{s as IntegrationTags};
|
|
2
|
+
//# sourceMappingURL=IntegrationTags.esm.js.map
|
|
@@ -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
|