@spotify/backstage-plugin-soundcheck 0.19.0 → 0.19.2
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 +12 -0
- package/config.d.ts +0 -6
- package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
- package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @spotify/backstage-plugin-soundcheck
|
|
2
2
|
|
|
3
|
+
## 0.19.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Added Soundcheck Tech Insights page that provides analytics for tracking software quality metrics across your organization.
|
|
8
|
+
|
|
9
|
+
## 0.19.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Fixed issue where conditional permissions were incorrectly hiding or showing the edit button.
|
|
14
|
+
|
|
3
15
|
## 0.19.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/config.d.ts
CHANGED
|
@@ -52,12 +52,6 @@ export interface Config {
|
|
|
52
52
|
* @visibility frontend
|
|
53
53
|
*/
|
|
54
54
|
techInsights?: {
|
|
55
|
-
/**
|
|
56
|
-
* Enable of disable Tech Insights page. The page is disabled by default.
|
|
57
|
-
*
|
|
58
|
-
* @visibility frontend
|
|
59
|
-
*/
|
|
60
|
-
enabled?: boolean;
|
|
61
55
|
/**
|
|
62
56
|
* Show or hide experimental visualizations on Tech Insights page.
|
|
63
57
|
* Experimental visualizations are hidden by default.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as F,FormControlLabel as O,Checkbox as z,Typography as A,Box as w,TextField as I}from"@material-ui/core";import j from"@material-ui/icons/CheckBox";import B from"@material-ui/icons/CheckBoxOutlineBlank";import E from"@material-ui/icons/ExpandMore";import{Autocomplete as G}from"@material-ui/lab";import{useState as N,useMemo as m,useCallback as p}from"react";import{useGetEntityRefs as P}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as D}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as H}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const M=F({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),Q=({label:d,values:o,onChange:n,disabled:f,filter:g,renderOption:b,renderTags:h})=>{const i=M(),[C,a]=N(!1),{data:t,isLoading:u,error:k}=P(g),s=m(()=>o?.map(l=>l.toLocaleLowerCase("en-US"))??[],[o]),x=p((l,r)=>{n(r),t&&t.every(c=>r.includes(c))&&a(!1)},[t,n]),y=p(()=>{n(o?.length?o:void 0)},[o,n]),L=p((l,r)=>b?.(l,r)??e(O,{onClick:c=>c.preventDefault(),control:e(z,{icon:e(B,{fontSize:"small"}),checkedIcon:e(j,{fontSize:"small"}),checked:r.selected}),label:l,classes:{label:i.label}}),[b,i.label]),S=m(()=>f||u||!o?.length&&!t?.length,[f,u,o?.length,t?.length]),v=m(()=>Array.from(new Set([...t??[],...s])),[t,s]);return k?e(A,{color:"error",children:"Failed to load entities"}):T(w,{pb:1,pt:1,className:i.container,children:[e(D,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(G,{open:C,onOpen:()=>a(!0),onClose:()=>a(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,options:v,value:s,onChange:x,onBlur:y,disabled:S,ListboxComponent:H,renderOption:L,renderTags:h,size:"small",popupIcon:e(E,{"data-testid":"selected-facets-expand"}),renderInput:l=>e(I,{...l,variant:"outlined"})})]})};export{Q as EntitiesAutocompletePicker};
|
|
2
2
|
//# sourceMappingURL=EntitiesAutocompletePicker.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as
|
|
1
|
+
import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import P from"@material-ui/icons/ExpandMore";import{Autocomplete as U}from"@material-ui/lab";import{useState as V,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as D}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const $=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=$(),[y,c]=V(!1),{data:r,isLoading:C,error:S}=D(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),v=d(()=>{n(l?.length?l:void 0)},[l,n]),O=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),T=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),w=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(H,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(U,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:w,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:v,disabled:T,ListboxComponent:M,renderOption:O,renderTags:k,size:"small",popupIcon:t(P,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
|
|
2
2
|
//# sourceMappingURL=EntityAutocompletePicker.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as E,useCallback as c}from"react";import{CheckIcon as F}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as O}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as P}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const T=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE","ERROR"],y=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),
|
|
1
|
+
import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as E,useCallback as c}from"react";import{CheckIcon as F}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as O}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as P}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const T=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE","ERROR"],y=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),N=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(F,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),v=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=y(),[p,n]=A(!1);E(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(O,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:T,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:P,renderOption:N,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{v as StateFilter};
|
|
2
2
|
//# sourceMappingURL=StateFilter.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as r,jsx as t}from"react/jsx-runtime";import{Link as U}from"@backstage/core-components";import{useApi as F,useRouteRef as Y}from"@backstage/core-plugin-api";import{entityPresentationApiRef as _}from"@backstage/plugin-catalog-react";import{makeStyles as q,useTheme as G,Box as i,Link as J,Typography as l,Chip as K,IconButton as z,CircularProgress as T,Tooltip as Q}from"@material-ui/core";import X from"@material-ui/icons/Close";import Z from"@material-ui/icons/ExpandLess";import ee from"@material-ui/icons/ExpandMore";import{useState as te,useEffect as oe,useCallback as ae}from"react";import{useSearchParams as ie}from"react-router-dom";import{useCheckStatuses as ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackCheckDetailsRouteRef as re}from"../../routes.esm.js";import{getContrastTextColor as R,getCheckStatusColor as le}from"../../utils/colors.esm.js";import{ColorChip as B}from"../ColorChip/ColorChip.esm.js";const se=q(e=>({checkLinkText:{color:"inherit",textDecoration:"none"},emptyStateIcon:{fontSize:e.typography.h3.fontSize,color:e.palette.text.secondary,opacity:.4,marginBottom:12},emptyStateText:{color:e.palette.text.secondary,textAlign:"center"},checksContainer:{flex:1,overflowY:"auto",minHeight:0},checksTitle:{fontWeight:"bold",marginBottom:4},levelHeader:{display:"flex",alignItems:"center",cursor:"pointer"},levelLabel:{fontWeight:"bold",letterSpacing:1,color:e.palette.text.secondary,marginBottom:2,flex:1},expandIcon:{fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary},progressContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start",marginBottom:16},progressWrapper:{position:"relative",display:"inline-flex"},progressBackground:{position:"absolute",color:e.palette.divider},progressText:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:e.typography.body1.fontSize,fontWeight:"bold"},checkName:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","&:hover":{textDecoration:"underline"}},checkMessage:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},statusChip:{fontSize:e.typography.caption.fontSize,height:22,borderRadius:12,marginLeft:8,marginBottom:0},secondaryTitle:{display:"-webkit-box",WebkitLineClamp:5,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",marginBottom:8,marginTop:2,lineHeight:1.4,paddingBottom:4},entityCount:{fontSize:e.typography.caption.fontSize},entityLabel:{fontSize:e.typography.caption.fontSize},entityContainer:{display:"flex",alignItems:"center",marginBottom:16},titleContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:.5},titleContent:{display:"flex",alignItems:"center",minWidth:0},titleStatus:{display:"flex",alignItems:"center"},titleIcon:{display:"flex",alignItems:"center",marginRight:8},titleText:{minWidth:0,fontWeight:"bold"},emptyStateContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",marginTop:2,marginBottom:1},tooltip:{color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},tooltipItem:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},tooltipCategory:{display:"flex",alignItems:"center",flex:1,fontSize:e.typography.body2.fontSize,marginRight:e.spacing(2)},tooltipValue:{fontSize:e.typography.body2.fontSize,color:e.palette.text.primary}})),L=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),ce=({node:e,clearSelectedNode:W,checkIds:h,track:c,getColor:k,onTeamClick:A})=>{const f=G(),o=se(),P=F(_),S=Y(re),[j]=ie(),[O,N]=te(()=>c?.levels?new Set(c.levels.map(a=>a.ordinal)):new Set),g=e?P.forEntity(e.entityRef):void 0;oe(()=>{if(c?.levels){const a=new Set(c.levels.map(m=>m.ordinal));N(a)}},[c?.levels]);const D=a=>{N(m=>{const n=new Set(m);return n.has(a)?n.delete(a):n.add(a),n})},E=a=>a<50?{label:"Needs Attention",color:f.palette.error.main,textColor:R(f.palette.error.main)}:a<80?null:{label:"Healthy",color:f.palette.success.main,textColor:R(f.palette.success.main)},H=ae(a=>{switch(a){case"not-applicable":case"notApplicable":return"Not Applicable";case"not-reported":case"notReported":return"Not Reported";default:return a.charAt(0).toUpperCase()+a.slice(1)}},[])
|
|
1
|
+
import{jsxs as r,jsx as t}from"react/jsx-runtime";import{Link as U}from"@backstage/core-components";import{useApi as F,useRouteRef as Y}from"@backstage/core-plugin-api";import{entityPresentationApiRef as _}from"@backstage/plugin-catalog-react";import{makeStyles as q,useTheme as G,Box as i,Link as J,Typography as l,Chip as K,IconButton as z,CircularProgress as T,Tooltip as Q}from"@material-ui/core";import X from"@material-ui/icons/Close";import Z from"@material-ui/icons/ExpandLess";import ee from"@material-ui/icons/ExpandMore";import{useState as te,useEffect as oe,useCallback as ae}from"react";import{useSearchParams as ie}from"react-router-dom";import{useCheckStatuses as ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackCheckDetailsRouteRef as re}from"../../routes.esm.js";import{getContrastTextColor as R,getCheckStatusColor as le}from"../../utils/colors.esm.js";import{ColorChip as B}from"../ColorChip/ColorChip.esm.js";const se=q(e=>({checkLinkText:{color:"inherit",textDecoration:"none"},emptyStateIcon:{fontSize:e.typography.h3.fontSize,color:e.palette.text.secondary,opacity:.4,marginBottom:12},emptyStateText:{color:e.palette.text.secondary,textAlign:"center"},checksContainer:{flex:1,overflowY:"auto",minHeight:0},checksTitle:{fontWeight:"bold",marginBottom:4},levelHeader:{display:"flex",alignItems:"center",cursor:"pointer"},levelLabel:{fontWeight:"bold",letterSpacing:1,color:e.palette.text.secondary,marginBottom:2,flex:1},expandIcon:{fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary},progressContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start",marginBottom:16},progressWrapper:{position:"relative",display:"inline-flex"},progressBackground:{position:"absolute",color:e.palette.divider},progressText:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:e.typography.body1.fontSize,fontWeight:"bold"},checkName:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","&:hover":{textDecoration:"underline"}},checkMessage:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},statusChip:{fontSize:e.typography.caption.fontSize,height:22,borderRadius:12,marginLeft:8,marginBottom:0},secondaryTitle:{display:"-webkit-box",WebkitLineClamp:5,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",marginBottom:8,marginTop:2,lineHeight:1.4,paddingBottom:4},entityCount:{fontSize:e.typography.caption.fontSize},entityLabel:{fontSize:e.typography.caption.fontSize},entityContainer:{display:"flex",alignItems:"center",marginBottom:16},titleContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:.5},titleContent:{display:"flex",alignItems:"center",minWidth:0},titleStatus:{display:"flex",alignItems:"center"},titleIcon:{display:"flex",alignItems:"center",marginRight:8},titleText:{minWidth:0,fontWeight:"bold"},emptyStateContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",marginTop:2,marginBottom:1},tooltip:{color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},tooltipItem:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},tooltipCategory:{display:"flex",alignItems:"center",flex:1,fontSize:e.typography.body2.fontSize,marginRight:e.spacing(2)},tooltipValue:{fontSize:e.typography.body2.fontSize,color:e.palette.text.primary}})),L=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),ce=({node:e,clearSelectedNode:W,checkIds:h,track:c,getColor:k,onTeamClick:A})=>{const f=G(),o=se(),P=F(_),S=Y(re),[j]=ie(),[O,N]=te(()=>c?.levels?new Set(c.levels.map(a=>a.ordinal)):new Set),g=e?P.forEntity(e.entityRef):void 0;oe(()=>{if(c?.levels){const a=new Set(c.levels.map(m=>m.ordinal));N(a)}},[c?.levels]);const D=a=>{N(m=>{const n=new Set(m);return n.has(a)?n.delete(a):n.add(a),n})},E=a=>a<50?{label:"Needs Attention",color:f.palette.error.main,textColor:R(f.palette.error.main)}:a<80?null:{label:"Healthy",color:f.palette.success.main,textColor:R(f.palette.success.main)},H=ae(a=>{switch(a){case"not-applicable":case"notApplicable":return"Not Applicable";case"not-reported":case"notReported":return"Not Reported";default:return a.charAt(0).toUpperCase()+a.slice(1)}},[]),$=(a,m)=>{const n=a.numberOfEntities-a.notApplicable-a.exempt,y=a.passed,u=a.failed,C=a.warning,d=a.error,s=a.notReported,x=[{name:"passed",value:y},{name:"failed",value:u},{name:"warning",value:C},{name:"error",value:d},{name:"not-reported",value:s}].filter(p=>p.value>0);return r("div",{className:o.tooltip,children:[t(l,{variant:"caption",style:{fontWeight:"bold",marginBottom:8,display:"block"},children:m.name}),x.map((p,v)=>r("div",{className:o.tooltipItem,children:[r("div",{className:o.tooltipCategory,children:[t("span",{style:{width:12,height:4,borderRadius:2,backgroundColor:le(f,p.name),marginRight:8}}),t(l,{variant:"caption",children:H(p.name)})]}),t("div",{className:o.tooltipValue,children:r(l,{variant:"caption",children:[p.value," of ",L(n)," (",Math.round(p.value/n*100),"%)"]})})]},v))]})},I=ne(e&&h&&h.length?{checkIds:h,trackId:c?.id,filter:{"relations.ownedBy":[e.entityRef]}}:{checkIds:[]},!!(e&&h&&h.length)),b=E(e.passPercentage),M=()=>{if(!c?.levels||h.length===0)return t(i,{mt:2,children:t(l,{variant:"body2",color:"textSecondary",children:"No checks found for this entity."})});const a=c.levels,m=(I.data||[]).reduce((n,y)=>(n[y.id]=y,n),{});return r(i,{mt:2,className:o.checksContainer,children:[t(l,{variant:"subtitle2",className:o.checksTitle,children:"Checks"}),a.map(n=>{const y=n.name??`Level ${n.ordinal}`,u=n.ordinal,C=O.has(u);return r(i,{mb:1,children:[r(i,{className:o.levelHeader,onClick:()=>D(u),children:[t(l,{variant:"overline",className:o.levelLabel,children:y}),t(z,{size:"small",className:o.expandIcon,children:C?t(Z,{}):t(ee,{})})]}),C&&n.checks.map(d=>{const s=m[d.id],x=s?s.numberOfEntities-s.notApplicable-s.exempt:0,p=s&&x>0?Math.round(s.passed/x*100):0;let v;if(c&&S&&e){const V=S({trackId:c.id,checkId:d.id}),w=new URLSearchParams(j.toString());w.set("owners",e.entityRef),v=`${V}?${w.toString()}`}return r(i,{display:"flex",alignItems:"center",mb:.5,children:[t(i,{mr:1,display:"flex",children:I.isLoading?t(B,{value:"",getColor:()=>f.palette.divider,numericValue:0,size:"small"}):t(Q,{title:s?$(s,d):"",placement:"top",arrow:!0,classes:{tooltip:o.tooltip},children:t(i,{children:t(B,{value:s&&x>0?`${p}%`:"N/A",getColor:k,numericValue:p,size:"small"})})})}),t(i,{flex:1,minWidth:0,children:v?t(U,{to:v,style:{color:"inherit",textDecoration:"none"},className:o.checkLinkText,children:t(l,{variant:"body2",className:o.checkName,children:d.name})}):t(l,{variant:"body2",className:o.checkName,children:d.name})})]},d.id)})]},u)})]})};return r(i,{children:[r(i,{className:o.titleContainer,children:[r(i,{className:o.titleContent,children:[g?.snapshot.Icon&&t(i,{component:"span",className:o.titleIcon,children:t(g.snapshot.Icon,{fontSize:"small"})}),t(J,{component:"button",onClick:()=>A?.(e.entityRef),noWrap:!0,children:t(l,{variant:"h6",noWrap:!0,className:o.titleText,children:g?.snapshot.primaryTitle||e.name})})]}),r(i,{className:o.titleStatus,children:[b&&t(K,{label:b.label,style:{background:b.color,color:b.textColor},className:o.statusChip,size:"small"}),t(z,{onClick:W,size:"small",children:t(X,{})})]})]}),g?.snapshot.secondaryTitle&&t(l,{variant:"caption",color:"textSecondary",className:o.secondaryTitle,children:g.snapshot.secondaryTitle}),t(i,{className:o.entityContainer,children:r(l,{variant:"body2",color:"textSecondary",className:o.entityLabel,children:["Entities:"," ",t("span",{className:o.entityCount,children:L(e.numberOfEntities)})]})}),t(i,{className:o.progressContainer,children:r(i,{className:o.progressWrapper,children:[t(T,{variant:"determinate",value:100,size:80,thickness:6,className:o.progressBackground}),t(T,{variant:"determinate",value:e.passPercentage,size:80,thickness:6,style:{color:k(e.passPercentage)}}),r(l,{className:o.progressText,children:[Math.round(e.passPercentage),"%"]})]})}),t(M,{})]})};export{ce as SelectedNodeSidebar};
|
|
2
2
|
//# sourceMappingURL=SelectedNodeSidebar.esm.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{jsxs as c,jsx as e}from"react/jsx-runtime";import{Content as
|
|
2
|
-
|
|
1
|
+
import{jsxs as c,jsx as e}from"react/jsx-runtime";import{Content as A}from"@backstage/core-components";import{useApi as d,featureFlagsApiRef as C,configApiRef as P,useRouteRef as a}from"@backstage/core-plugin-api";import{usePermission as v}from"@backstage/plugin-permission-react";import{Typography as m,Grid as t,Accordion as w,AccordionSummary as S,AccordionDetails as H}from"@material-ui/core";import l from"@material-ui/icons/BarChart";import I from"@material-ui/icons/CheckCircle";import T from"@material-ui/icons/Computer";import z from"@material-ui/icons/ExpandMore";import j from"@material-ui/icons/Flag";import D from"@material-ui/icons/Timeline";import{soundcheckCollectorReadPermission as Q}from"@spotify/backstage-plugin-soundcheck-common";import{useLCPReporting as W}from"../../hooks/useLCPReporting.esm.js";import{integrationsPageRouteRef as q,tracksPageRouteRef as F,checksPageRouteRef as O,campaignsPageRouteRef as B,techHealthRouteRef as G,techInsightsPageRouteRef as L}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as V}from"../SoundcheckHeader/useHeader.esm.js";import{QuickstartCardBase as r}from"./QuickstartCardBase.esm.js";import{getQuickstartStyles as E}from"./styles.esm.js";import{WelcomeHelpSection as J}from"./WelcomeHelpSection.esm.js";const K=()=>{const o=E();V({title:"Welcome to Soundcheck!",description:"Soundcheck lets you define and monitor the tech health of your organization. What insights do you need today?"}),W({routeName:"soundcheck-quickstart"});const i=d(C),h=d(P).getOptionalStringArray("soundcheck.flags"),n=i.getRegisteredFlags(),{loading:u,allowed:p}=v({permission:Q}),g=(!n.find(s=>s.name==="soundcheck-enable-collectors")||i.isActive("soundcheck-enable-collectors"))&&!u&&p,f=(!n.find(s=>s.name==="soundcheck-enable-tech-health")||i.isActive("soundcheck-enable-tech-health"))&&!h?.includes("soundcheck-disable-tech-health"),k=a(q),R=a(F),y=a(O),x=a(B),b=a(G),N=a(L);return c(A,{className:o.introTitle,children:[e(m,{className:o.welcomeSection,children:"This is your starting point for exploring and managing your tech health initiatives. Here are some key areas to get you started:"}),c(t,{container:!0,direction:"row",justifyContent:"flex-start","aria-label":"getting-started-items",className:o.grid,spacing:2,children:[e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(r,{header:"Tech Insights",routeRef:N,icon:e(l,{}),description:`Visualize and analyze your technology landscape across teams and
|
|
2
|
+
components.`})}),f&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(r,{header:"Tech Health",routeRef:b,icon:e(l,{}),description:"Detailed query and analysis tool across teams, components, tracks, and checks."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(r,{header:"Campaigns",routeRef:x,icon:e(j,{}),description:"Organize and manage coordinated initiatives across your organization."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(r,{header:"Checks",routeRef:y,icon:e(I,{}),description:"Checks are comparisons between defined acceptable fact values and actual fact values."})}),e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(r,{header:"Tracks",routeRef:R,icon:e(D,{}),description:"Tracks encourage alignment to architectural best practices and standards."})}),g&&e(t,{item:!0,xs:12,sm:12,md:6,lg:4,className:o.cards,children:e(r,{header:"Integrations",routeRef:k,icon:e(T,{}),description:"Integrations collect raw data about your components for use in checks and tracks."})})]}),c(w,{className:o.accordion,children:[e(S,{expandIcon:e(z,{}),"aria-controls":"howdoi-content",id:"howdoi-header",children:e(m,{variant:"h5",children:"How Do I...?"})}),e(H,{children:e(J,{})})]})]})};export{K as QuickstartPage};
|
|
3
3
|
//# sourceMappingURL=QuickstartPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as a,Fragment as h}from"react/jsx-runtime";import{Page as
|
|
1
|
+
import{jsx as e,jsxs as a,Fragment as h}from"react/jsx-runtime";import{Page as j,TabbedLayout as r}from"@backstage/core-components";import{useApi as k,featureFlagsApiRef as G,configApiRef as Q}from"@backstage/core-plugin-api";import{usePermission as s}from"@backstage/plugin-permission-react";import{makeStyles as W,Box as d}from"@material-ui/core";import{SpotifyLicenseBanner as q}from"@spotify/backstage-plugin-core";import{soundcheckCampaignCreatePermission as M,soundcheckCollectorReadPermission as U,soundcheckCheckCreatePermission as V,soundcheckTrackCreatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import{Helmet as z}from"react-helmet";import{Routes as J,Route as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react";import{UserProvider as K}from"../../contexts/UserProvider.esm.js";import X from"../../hooks/useConfirmationModal.esm.js";import{AlertProvider as Y}from"../../hooks/useSoundcheckAlert.esm.js";import{CampaignInsightsPage as Z}from"../CampaignInsightsPage/CampaignInsightsPage.esm.js";import{CampaignsPage as _}from"../CampaignsPage/CampaignsPage.esm.js";import{CampaignCreatePage as ee}from"../CampaignCreatePage/CampaignCreatePage.esm.js";import{EditCampaignView as te}from"../CampaignsPage/EditCampaignView.esm.js";import{CheckCreatePage as ie}from"../CheckCreatePage/CheckCreatePage.esm.js";import{CheckEditPage as re}from"../CheckPage/CheckEditPage.esm.js";import{CheckInsightsPage as u}from"../CheckPage/CheckInsightsPage.esm.js";import{ChecksTab as ae}from"../ChecksTab/ChecksTab.esm.js";import{CheckTemplatesPage as oe}from"../CheckTemplatesPage/CheckTemplatesPage.esm.js";import{CollectorPage as ce}from"../CollectorPage/CollectorPage.esm.js";import{CollectorDetailsPage as ne}from"../CollectorPage/CollectorDetailsPage.esm.js";import{CollectorsPage as le}from"../CollectorsPage/CollectorsPage.esm.js";import{HierarchicalTechInsightsPage as se}from"../HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js";import{OverviewPageContent as me}from"../OverviewPage/OverviewPageContent.esm.js";import{QuickstartPage as C}from"../QuickstartPage/QuickstartPage.esm.js";import{SoundcheckHeader as he}from"../SoundcheckHeader/SoundcheckHeader.esm.js";import{SoundcheckHeaderProvider as de}from"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{SoundcheckQueryClientProvider as pe}from"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{TechHealth as ge}from"../TechHealth/TechHealth.esm.js";import{TechInsightsPage as fe}from"../TechInsights/TechInsightsPage.esm.js";import{TrackCreatePage as ke}from"../TrackCreatePage/TrackCreatePage.esm.js";import{TrackEditPage as ue}from"../TrackEditPage/TrackEditPage.esm.js";import{TrackPage as Ce}from"../TrackPage/TrackPage.esm.js";import{TracksTab as Pe}from"../TracksTab/TracksTab.esm.js";import{NewFeatureTab as be}from"./NewFeatureTab.esm.js";const P=W(o=>({tabContent:{margin:0,padding:0},root:{"& > *":{display:"flex",flexDirection:"column",flexGrow:1}},pageContent:{display:"flex",flexDirection:"row",flexGrow:1},pageLayout:{display:"flex",flexDirection:"column",flex:"1 1 0%",maxWidth:"100%","& > article":{display:"flex",flexDirection:"column",flex:"1 1 auto",padding:`${o.spacing(3)}px !important`}}})),b=({title:o="Soundcheck",children:m})=>{const n=P();return e(Y,{children:e(K,{children:e(pe,{children:e(de,{defaultTitle:o,children:e(X,{children:e(d,{className:n.root,children:a(j,{themeId:"website",children:[e(q,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),e(he,{documentTitle:o}),e(d,{className:n.pageContent,children:e(d,{className:n.pageLayout,children:m})})]})})})})})})})},ve=({title:o="Soundcheck",integrations:m})=>{const n=P(),c=k(G),p=k(Q).getOptionalStringArray("soundcheck.flags"),l=c.getRegisteredFlags(),v=(!l.find(i=>i.name==="soundcheck-enable-tech-health")||c.isActive("soundcheck-enable-tech-health"))&&!p?.includes("soundcheck-disable-tech-health"),T=!l.find(i=>i.name==="soundcheck-enable-collectors")||c.isActive("soundcheck-enable-collectors"),g=!l.find(i=>i.name==="soundcheck-enable-campaigns")||c.isActive("soundcheck-enable-campaigns"),{loading:x,allowed:I}=s({permission:M}),w=!x&&I,{loading:R,allowed:y}=s({permission:U}),{loading:A,allowed:S}=s({permission:V}),H=!l.find(i=>i.name==="soundcheck-enable-check-creation")||c.isActive("soundcheck-enable-check-creation"),D=!A&&S&&H,{loading:L,allowed:N}=s({permission:$}),F=!l.find(i=>i.name==="soundcheck-enable-track-creation")||c.isActive("soundcheck-enable-track-creation"),E=!L&&N&&F,B=T&&!R&&y,O=v,f=p?.includes("portal")??!1;return a(b,{title:o,children:[a(J,{children:[g&&a(h,{children:[e(t,{path:"/campaigns/:campaignId/edit",element:e(te,{})}),e(t,{path:"/campaigns/:campaignId",element:e(Z,{})}),w&&e(t,{path:"/campaigns/create",element:e(ee,{})})]}),e(t,{path:"/quickstart",element:e(C,{})}),e(t,{path:"/tech-insights/track",element:e(se,{})}),e(t,{path:"/tracks/:trackId/edit",element:e(ue,{})}),E&&e(t,{path:"/tracks/create",element:e(ke,{})}),e(t,{path:"/tracks/:trackId",element:e(Ce,{})}),e(t,{path:"/tracks/:trackId/checks/:checkId",element:e(u,{})}),e(t,{path:"/checks/:checkId",element:e(u,{})}),e(t,{path:"/checks/:checkId/edit",element:e(re,{})}),D&&a(h,{children:[e(t,{path:"/checks/create",element:e(ie,{})}),e(t,{path:"/checks/templates",element:e(oe,{})})]}),e(t,{path:"/integrations/:integrationId",element:e(ne,{})}),e(t,{path:"/integrations/:integrationId/edit",element:e(ce,{})}),f&&e(t,{path:"/",element:e(C,{})}),e(t,{path:"/*",element:a(r,{children:[e(r.Route,{title:"Overview",path:f?"/overview":"/",children:e("div",{className:n.tabContent,children:e(me,{})})}),e(r.Route,{title:e(be,{title:"Tech Insights"}),path:"/tech-insights",children:a(h,{children:[e(z,{title:"Tech Insights"}),e(fe,{})]})}),O&&e(r.Route,{title:"Tech Health",path:"/tech-health",children:e(ge,{})}),e(r.Route,{title:"Checks",path:"/checks",children:e(ae,{})}),e(r.Route,{title:"Tracks",path:"/tracks",children:e(Pe,{})}),g&&e(r.Route,{title:"Campaigns",path:"/campaigns",children:e(_,{})}),B&&e(r.Route,{title:"Integrations",path:"/integrations",children:e(le,{integrations:m})})]})})]})," "]})};export{ve as RoutingPage,b as RoutingPageWrapper};
|
|
2
2
|
//# sourceMappingURL=RoutingPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as d}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import{useRouteRef as s}from"@backstage/core-plugin-api";import{usePermission as n}from"@backstage/plugin-permission-react";import{soundcheckTrackDeletePermission as T,soundcheckTrackUpdatePermission as w}from"@spotify/backstage-plugin-soundcheck-common";import{useCallback as i}from"react";import{useNavigate as y}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as g}from"../../../hooks/useConfirmationModal.esm.js";import{useDeleteTrack as D}from"../../../hooks/tracks/useDeleteTrack.esm.js";import{trackDetailsRouteRef as E,trackEditRouteRef as v}from"../../../routes.esm.js";import{exportTrack as x}from"../../../utils/export.esm.js";import{SummaryCard as C}from"../../SummaryCard/SummaryCard.esm.js";import{TrackMetadata as P}from"./TrackMetadata.esm.js";const b=({summary:r})=>{const{loading:c,allowed:p}=n({permission:T,resourceRef:r.id}),{loading:l,allowed:u}=n({permission:w,resourceRef:r.id}),{showModal:t}=g(),{mutate:e}=D(),o=y(),a=s(E),m=s(v),f=i(async()=>{await t({title:"Delete Track",message:`Are you sure you want to delete track ${r.name}?`})&&e(r.id)},[t,r.id,r.name,e]),k=i(()=>{o(a({trackId:r.id}))},[o,r.id,a]),h=i(()=>{o(m({trackId:r.id}))},[o,r.id,m]),R=i(()=>{x(r)},[r]);return d(C,{title:r.name,description:r.description,children:d(P,{track:r}),handleView:k,handleEdit:r.isEditable&&!l&&u?h:void 0,handleDelete:r.isEditable&&!c&&p?f:void 0,handleExport:R,viewIsPrimaryAction:!0})};export{b as TrackSummaryCard};
|
|
2
2
|
//# sourceMappingURL=TrackSummaryCard.esm.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spotify/backstage-plugin-soundcheck",
|
|
3
3
|
"description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
|
|
4
|
-
"version": "0.19.
|
|
4
|
+
"version": "0.19.2",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"homepage": "https://backstage.spotify.com",
|
|
7
7
|
"main": "./dist/index.esm.js",
|