@spotify/backstage-plugin-soundcheck 0.3.0 → 0.4.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 +23 -0
- package/config.d.ts +11 -0
- package/dist/esm/index/CertificationSidebar-276909f2.esm.js +2 -0
- package/dist/esm/index/EntitySoundcheckContent-931d8ed8.esm.js +2 -0
- package/dist/esm/index/RefetchingIndicator-b6c3da0a.esm.js +2 -0
- package/dist/esm/index/SoundcheckQueryClientProvider-04f7e1dc.esm.js +2 -0
- package/dist/esm/{index-5f7bf7f6.esm.js → index/index-0f37ee61.esm.js} +2 -2
- package/dist/esm/index/index-41e242ce.esm.js +2 -0
- package/dist/esm/index/index-d6a5b7f6.esm.js +161 -0
- package/dist/index.esm.js +1 -1
- package/package.json +26 -21
- package/dist/esm/CertificationSidebar-c4cee874.esm.js +0 -2
- package/dist/esm/EntitySoundcheckContent-a2d35ddd.esm.js +0 -2
- package/dist/esm/RefetchingIndicator-9e7adc3f.esm.js +0 -2
- package/dist/esm/SoundcheckQueryClientProvider-f6aa058e.esm.js +0 -2
- package/dist/esm/index-6b006938.esm.js +0 -161
- package/dist/esm/index-72edc5c7.esm.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @spotify/backstage-plugin-soundcheck
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 07770382: Upgrade to Backstage 1.12.0
|
|
8
|
+
- 1d2bfc05: Added a virtualizeOverviewPage configuration option to only render parts of the Soundcheck overview
|
|
9
|
+
page that are in-view. This improves performance for teams that have a large amount of entities.
|
|
10
|
+
|
|
11
|
+
To enable this option, add the configuration to your app-config.yaml:
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
soundcheck:
|
|
15
|
+
virtualizeOverviewPage: true
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 7e1032fb: Updated dependency `graphql-request` to `5.1.0`
|
|
21
|
+
- 68db7129: Filter entity types out of Soundcheck overview page if the have no associated entities
|
|
22
|
+
- 179888c1: Program descriptions now support markdown content.
|
|
23
|
+
- Updated dependencies [31ac4320]
|
|
24
|
+
- @spotify/backstage-plugin-core@0.5.0
|
|
25
|
+
|
|
3
26
|
## 0.3.0
|
|
4
27
|
|
|
5
28
|
### Minor Changes
|
package/config.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{stringifyEntityRef as y}from"@backstage/catalog-model";import{useApi as v,useRouteRef as U}from"@backstage/core-plugin-api";import{useQuery as b}from"@tanstack/react-query";import{s as k,a as $}from"./index-d6a5b7f6.esm.js";import t from"react";import{makeStyles as d,Tooltip as D,Typography as i,alpha as p,Box as F}from"@material-ui/core";import{useEntity as G}from"@backstage/plugin-catalog-react";import{Link as H}from"react-router-dom";import{useAutoUpdatingRelativeTime as M}from"@spotify/backstage-plugin-core";import W from"@material-ui/icons/Schedule";import{DateTime as N}from"luxon";import j from"classnames";import{C as O,L as S,N as P,F as E,A as Q}from"./SoundcheckQueryClientProvider-04f7e1dc.esm.js";import{Skeleton as c}from"@material-ui/lab";import{MarkdownContent as C,Link as _}from"@backstage/core-components";function q(e){const a=v(k),r=y(e);return b(["soundcheck/certifications",r],async()=>a.getAllCertifications(r))}function T(e,a){const r=v(k),n=y(e);return b(["soundcheck/certifications",n,a],async()=>r.getCertificationDetails(n,a),{enabled:!!a})}const J=d(e=>({root:{display:"inline-flex",alignItems:"center",gap:e.spacing(1)}})),x=({timestamp:e,description:a})=>{const r=J(),n=N.fromISO(e).toLocaleString(N.DATETIME_FULL),l=M(e),o=a?`${a}: ${l}`:void 0;return t.createElement("div",{className:r.root},t.createElement(D,{title:n},t.createElement(i,{variant:"caption","aria-label":o},l)),t.createElement(W,null))},L=d(e=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto",gridColumnGap:e.spacing(1),padding:e.spacing(1),alignItems:"center","&.selected":{backgroundColor:p(e.palette.primary[e.palette.type],.2)},"&:hover, &:active, &:focus":{backgroundColor:p(e.palette.primary[e.palette.type],.3)}}})),K=({className:e,href:a,children:r})=>a?t.createElement(H,{to:a,className:e},r):t.createElement("div",{className:e},r),V=({result:e,name:a,timestamp:r,selected:n=!1,href:l})=>{const o=L(),u=j(o.root,{selected:n});return t.createElement(K,{href:l,className:u},t.createElement(O,{result:e}),t.createElement(i,{variant:"body2"},a),r?t.createElement(x,{timestamp:r}):null)},A=d(e=>{const a=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{wrapper:{backgroundColor:a,color:p(e.palette.getContrastText(a),.7),fontSize:e.typography.caption.fontSize,minHeight:"auto",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(1),display:"grid",gridTemplateAreas:({badge:r})=>[`"${r?"badge":"title"} title"`,`"${r?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:p(e.palette.getContrastText(a),.7),fontSize:e.typography.body2.fontSize,paddingTop:e.spacing(.5),paddingBottom:e.spacing(.5),lineHeight:1},badge:{gridArea:"badge",marginRight:e.spacing(1)},description:{gridArea:"description",color:p(e.palette.getContrastText(a),.7),fontSize:e.typography.subtitle2.fontSize,marginTop:e.spacing(1)}}}),X=e=>{const a=A({badge:e.badge});return t.createElement("div",{className:a.wrapper},e.badge?t.createElement(S,{className:a.badge,badge:e.badge}):null,t.createElement(i,{className:a.title},e.title),e.description?t.createElement(i,{className:a.description},e.description):null)},f=d(e=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:e.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:e.spacing(2)},title:{fontSize:e.typography.pxToRem(18)},level:{textTransform:"uppercase",color:e.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function Y({description:e,documentationUrl:a}){const r=f();return a?t.createElement("div",{className:r.description},t.createElement(C,{content:e}),t.createElement(_,{to:a},"Learn more")):t.createElement("div",{className:r.description},t.createElement(C,{content:e}))}const I=({name:e,level:a,badge:r,description:n,documentationUrl:l})=>{const o=f();return t.createElement("div",{className:o.root},r?t.createElement(S,{size:"large",badge:r}):t.createElement(P,{size:"large"}),t.createElement("div",null,t.createElement(i,{variant:"caption",className:o.level},a!=null?a:"No Level"),t.createElement(i,{variant:"h4",className:o.title},e),n&&t.createElement(Y,{description:n,documentationUrl:l})))},R=({hideDescription:e=!1})=>{const a=f();return t.createElement(E,null,t.createElement("div",{className:a.root},t.createElement(c,{width:44,height:44}),t.createElement("div",null,t.createElement(i,{variant:"caption",className:a.level},t.createElement(c,{width:100})),t.createElement(i,{variant:"h4",className:a.title},t.createElement(c,{width:300})),!e&&t.createElement(i,{variant:"body2"},t.createElement(c,null)))))},Z=()=>{const e=A({});return t.createElement(E,null,t.createElement("div",{className:e.wrapper},t.createElement(c,{className:e.title}),t.createElement(i,{className:e.description},t.createElement(c,null))))},h=()=>{const e=L();return t.createElement(E,null,t.createElement("div",{className:e.root},t.createElement(c,{width:24,height:24}),t.createElement(i,{variant:"body2"},t.createElement(c,null)),t.createElement(c,{width:100,height:24})))},ee=()=>{const e=w();return t.createElement("div",{className:e.root},t.createElement(R,null),new Array(3).fill(null).map((a,r)=>t.createElement(t.Fragment,{key:`skeleton-level-${r}`},t.createElement(Z,null),t.createElement("ul",{className:e.checks},t.createElement(h,null),t.createElement(h,null),t.createElement(h,null)))))},w=d(e=>({root:{borderRight:`1px solid ${e.palette.divider}`},checks:{padding:0,margin:0,flex:1,listStyle:"none"},checkItem:{borderBottom:`1px solid ${e.palette.divider}`,"&:last-of-type":{borderBottom:"0"}}})),te=({programId:e,checkId:a})=>{var r,n;const l=w(),{entity:o}=G(),u=U($),{data:s,isLoading:z,isError:B}=T(o,e);return B?t.createElement("div",{className:l.root},t.createElement(F,{padding:2},t.createElement(Q,{severity:"error",title:"Error loading certification"}))):z||!e?t.createElement(ee,null):s?t.createElement("div",{className:l.root},t.createElement(I,{name:s.program.name,level:(r=s.highestLevel)==null?void 0:r.name,badge:(n=s.highestLevel)==null?void 0:n.badge,description:s.program.description,documentationUrl:s.program.documentationUrl}),s==null?void 0:s.levels.map(m=>t.createElement(t.Fragment,{key:m.ordinal},t.createElement(X,{key:m.ordinal,badge:m.badge,title:m.name,description:m.description}),t.createElement("ul",{className:l.checks},m.checks.map(g=>t.createElement("li",{key:g.id,className:l.checkItem},t.createElement(V,{...g,selected:g.id===a,href:u({programId:e,checkId:g.id})}))))))):null};export{te as C,x as R,q as a,R as b,I as c,T as u};
|
|
2
|
+
//# sourceMappingURL=CertificationSidebar-276909f2.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e,{useState as W,useEffect as M}from"react";import{Link as O,useParams as Q,Routes as j,Route as k,Navigate as I}from"react-router-dom";import{makeStyles as p,Typography as f,Box as U,Tab as L,Tabs as T,Paper as V,Divider as Y}from"@material-ui/core";import{SpotifyLicenseBanner as q}from"@spotify/backstage-plugin-core";import{useEntity as u}from"@backstage/plugin-catalog-react";import{R as G}from"./RefetchingIndicator-b6c3da0a.esm.js";import{R as H,u as P,a as y,C as J}from"./CertificationSidebar-276909f2.esm.js";import{Skeleton as c}from"@material-ui/lab";import{MarkdownContent as x}from"@backstage/core-components";import{stringifyEntityRef as K}from"@backstage/catalog-model";import{useApi as X,useRouteRef as b,useRouteRefParams as Z}from"@backstage/core-plugin-api";import{useQuery as _}from"@tanstack/react-query";import{s as ee,R as s,c as g,a as B}from"./index-d6a5b7f6.esm.js";import{A as C,F,L as te,N as ae,a as re,S as ne}from"./SoundcheckQueryClientProvider-04f7e1dc.esm.js";import ie from"react-use/lib/useMeasure";import $ from"react-use/lib/usePrevious";import le from"react-confetti";import"react-use/lib/useDebounce";import"@material-ui/icons/Schedule";import"luxon";import"classnames";import"graphql-request";import"graphql-tag";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";import"lodash";function oe(t,r,a){const n=X(ee),i=K(t);return _(["soundcheck/check-details",i,r,a],async()=>n.getCheckResultDetails(i,r,a),{enabled:!!r&&!!a})}const ce=p({markdownContent:{"& :last-child":{marginBottom:0}}}),se=({state:t,notes:r})=>{const a=ce(),n={[s.Passed]:"success",[s.Failed]:"error",[s.NotReported]:"info",[s.NotApplicable]:"info"}[t],i={[s.Passed]:"Check passed",[s.Failed]:"Check did not pass",[s.NotReported]:"Check not reported",[s.NotApplicable]:"Check not applicable"}[t];return e.createElement(C,{severity:n,title:i},r?e.createElement(x,{className:a.markdownContent,content:r}):null)},me=()=>{const t=A();return e.createElement(F,null,e.createElement("div",{className:t.root,"data-testid":"check-details-view"},e.createElement("div",{className:t.topBar},e.createElement(f,{variant:"h2",className:t.title},e.createElement(c,{width:300,height:32})),e.createElement(c,{width:100,height:32})),e.createElement(c,{variant:"rect",height:120}),e.createElement("div",{"data-testid":"soundcheck-check-details-description"},e.createElement(f,{variant:"h3"},e.createElement(c,null)),e.createElement(c,null),e.createElement(c,null),e.createElement(c,null))))},A=p(t=>({root:{padding:`${t.spacing(3)}px ${t.spacing(5)}px`},title:{fontWeight:"normal",fontSize:t.typography.h5.fontSize},description:{padding:`${t.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:t.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:t.spacing(2)}})),de=({programId:t,checkId:r})=>{const a=A(),{entity:n}=u(),{data:i,isLoading:l,isError:o}=oe(n,t,r);if(o)return e.createElement(U,{padding:2},e.createElement(C,{severity:"error",title:"Error loading check details"}));if(l||!t||!r)return e.createElement(me,null);if(!i)return null;const{name:h,description:d,result:v,timestamp:m,notes:E}=i;return e.createElement("div",{className:a.root,"data-testid":"check-details-view"},e.createElement("div",{className:a.topBar},e.createElement(f,{variant:"h2",className:a.title},h),m?e.createElement(H,{timestamp:m,description:"Last updated"}):null),e.createElement(se,{state:v,notes:E}),e.createElement("div",{className:a.description,"data-testid":"soundcheck-check-details-description"},e.createElement(f,{variant:"h3",className:a.subtitle},"Description"),e.createElement(x,{content:d})))},pe=p(()=>({root:{position:"absolute",width:"100%",height:"100%"}})),ue=({programId:t})=>{var r,a;const n=pe(),{entity:i}=u(),{data:l,isLoading:o}=P(i,t),[h,{width:d,height:v}]=ie(),m=o?void 0:(a=(r=l==null?void 0:l.highestLevel)==null?void 0:r.ordinal)!=null?a:-1,E=$(m),R=$(t),[z,S]=W(!1);return M(()=>{typeof E!="undefined"&&typeof m!="undefined"&&t===R&&m>E&&S(!0)},[m,E,t,R]),z?e.createElement("div",{ref:h,className:n.root},e.createElement(le,{width:d,height:v,numberOfPieces:1e3,gravity:1,initialVelocityY:20,recycle:!1,onConfettiComplete:()=>S(!1)})):null},D=p(t=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:t.spacing(2),paddingBottom:t.spacing(2)},wrapper:{display:"inline-block",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},badge:{marginRight:t.spacing(1)}})),he=({id:t,name:r,badge:a,href:n,selected:i=!1})=>{const l=D();return e.createElement(L,{className:l.root,classes:{wrapper:l.wrapper},value:t,label:e.createElement(e.Fragment,null,a?e.createElement(te,{badge:a,className:l.badge}):e.createElement(ae,{className:l.badge}),r),component:O,to:n,selected:i})},w=()=>{const t=D();return e.createElement(L,{className:t.root,classes:{wrapper:t.wrapper},label:e.createElement(c,{width:180})})},Ee=()=>e.createElement(F,null,e.createElement(T,{value:!1,indicatorColor:"primary"},e.createElement(w,null),e.createElement(w,null),e.createElement(w,null)));function fe(t=[],r){const a=t.findIndex(n=>n.program.id===r);return a<0?!1:a}const ge=({programId:t})=>{const{entity:r}=u(),{isLoading:a,data:n}=y(r),i=b(g);if(a||!t)return e.createElement(Ee,null);const l=fe(n,t);return e.createElement(T,{value:l,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},n&&n.map(({program:{id:o,name:h},highestLevel:d})=>e.createElement(he,{key:o,id:o,name:h,badge:d==null?void 0:d.badge,selected:o===t,href:i({programId:o})})))},ve=p({paper:{overflow:"hidden",position:"relative"},view:{display:"grid",gridTemplateColumns:"1fr 2fr"}}),ke=()=>{const{programId:t,checkId:r}=Q(),a=ve(),{entity:n}=u(),{isError:i,isFetched:l,data:o}=y(n);return i?e.createElement(C,{severity:"error",title:"Error loading certifications"}):l&&!(o!=null&&o.length)?e.createElement(re,null):e.createElement(V,{className:a.paper},e.createElement(G,null),e.createElement(ge,{programId:t}),e.createElement(Y,null),e.createElement("div",{"data-testid":"soundcheck-certification-view",className:a.view},e.createElement(J,{programId:t,checkId:r}),e.createElement(de,{programId:t,checkId:r}),e.createElement(ue,{programId:t})))},ye=p(t=>({root:{"&:not(:first-child)":{marginTop:t.spacing(2)}}})),N=()=>{const t=ye();return e.createElement(e.Fragment,null,e.createElement(q,{backend:"soundcheck",invalidLicenseMessage:"Submitted check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present.",inline:!0}),e.createElement("div",{className:t.root},e.createElement(ke,null)))},be=()=>{var t;const{entity:r}=u(),a=b(g),{data:n}=y(r),i=(t=n==null?void 0:n[0])==null?void 0:t.program.id;return i?e.createElement(I,{to:a({programId:i}),replace:!0}):null},Ce=()=>{var t,r;const{entity:a}=u(),{programId:n}=Z(g),i=b(B),{data:l}=P(a,n),o=(r=(t=l==null?void 0:l.levels[0])==null?void 0:t.checks[0])==null?void 0:r.id;return o?e.createElement(I,{to:i({programId:n,checkId:o}),replace:!0}):null},we=()=>e.createElement(j,null,e.createElement(k,{path:"/",element:e.createElement(e.Fragment,null,e.createElement(N,null),e.createElement(be,null))}),e.createElement(k,{path:g.path,element:e.createElement(e.Fragment,null,e.createElement(N,null),e.createElement(Ce,null))}),e.createElement(k,{path:B.path,element:e.createElement(N,null)})),Ne=()=>e.createElement(ne,null,e.createElement(we,null));export{Ne as EntitySoundcheckContent};
|
|
2
|
+
//# sourceMappingURL=EntitySoundcheckContent-931d8ed8.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e,{useState as n}from"react";import{makeStyles as a,LinearProgress as m}from"@material-ui/core";import s from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import{useIsFetching as c}from"@tanstack/react-query";import"./index-d6a5b7f6.esm.js";import"@backstage/plugin-catalog-react";import"react-router-dom";import{F as d}from"./SoundcheckQueryClientProvider-04f7e1dc.esm.js";const p=a(t=>({indicator:{position:"absolute",width:"100%",zIndex:t.zIndex.speedDial}})),l=()=>{const t=c(),i=p(),[r,o]=n(!!t);return s(()=>{o(!!t)},250,[t]),r?e.createElement(d,null,e.createElement("div",{className:i.indicator},e.createElement(m,{variant:"indeterminate","data-testid":"refetching-indicator"}))):null};export{l as R};
|
|
2
|
+
//# sourceMappingURL=RefetchingIndicator-b6c3da0a.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import r,{useState as u,useEffect as f}from"react";import{Fade as h,withStyles as s,makeStyles as i,Typography as b}from"@material-ui/core";import g from"@material-ui/icons/Check";import y from"@material-ui/icons/Close";import E from"@material-ui/icons/RemoveCircleOutline";import N from"@material-ui/icons/HelpOutline";import{R as a}from"./index-d6a5b7f6.esm.js";import l from"classnames";import{Alert as x}from"@material-ui/lab";import{EmptyState as m}from"@backstage/core-components";import{humanizeEntityRef as C}from"@backstage/plugin-catalog-react";import{parseEntityRef as v}from"@backstage/catalog-model";import{QueryClient as k,QueryClientProvider as z}from"@tanstack/react-query";import{memoize as $}from"lodash";import{useApi as S,errorApiRef as w}from"@backstage/core-plugin-api";const R=({children:e})=>{const[t,o]=u(!1);return f(()=>{const n=setTimeout(()=>{o(!0)},250);return()=>clearTimeout(n)},[]),r.createElement(h,{in:t,timeout:250},e)},A=e=>({[a.Passed]:"Check passed",[a.NotReported]:"Check not reported",[a.Failed]:"Check failed",[a.NotApplicable]:"Check not applicable"})[e],F=s(e=>({root:{color:e.palette.success.main}}))(g),T=s(e=>({root:{color:e.palette.error.main}}))(y),I=s(e=>({root:{color:e.palette.info.main}}))(N),L=s(e=>({root:{color:e.palette.text.disabled}}))(E),P=({result:e,className:t})=>{const o={className:t,"aria-label":A(e),"aria-hidden":!1};return e===a.Passed?r.createElement(F,{...o}):e===a.NotReported?r.createElement(I,{...o}):e===a.Failed?r.createElement(T,{...o}):e===a.NotApplicable?r.createElement(L,{...o}):null},p=24,B=11,c=e=>e==="small"?1:2,M=i({root:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",borderWidth:"2px",fontWeight:700,width:({size:e})=>`${p*c(e)}px`,height:({size:e})=>`${p*c(e)}px`,fontSize:({size:e})=>`${B*c(e)}px`}}),d=({className:e,label:t,size:o="small"})=>{const n=M({size:o});return r.createElement("span",{className:l(e,n.root),role:"img","aria-label":`${t} badge`},t)},W=i(e=>({root:{background:({color:t})=>t,color:({color:t})=>e.palette.getContrastText(t),borderColor:e.palette.common.black,borderStyle:"solid","&::after":{position:"absolute",display:"block",content:'""',top:0,left:0,width:"100%",height:"100%",borderRadius:"50%",boxShadow:["inset 0 -0.18em 0 0 rgba(0, 0, 0, 0.25)","inset 0px 0.18em 0px 0px rgba(255, 255, 255, 0.5)","inset 0px 1.3em 0px -0.5em rgba(255, 255, 255, 0.2)"].join(",")}}})),Q=({className:e,badge:t,size:o="small"})=>{const n=W({color:t.options.color,size:o});return r.createElement(d,{className:l(e,n.root),size:o,label:`L${t.options.level}`})},j=i({root:{borderColor:"currentColor",borderStyle:"dashed"}}),O=({className:e,size:t="small"})=>{const o=j();return r.createElement(d,{className:l(e,o.root),size:t,label:"NL"})},q=i(e=>({root:{padding:e.spacing(3)},icon:{display:"none"},message:{padding:0},type:{fontWeight:700}})),D=e=>{const{type:t,...o}=q();return r.createElement(x,{severity:e.severity,elevation:1,classes:o},r.createElement(b,{variant:"subtitle1",classes:{root:t}},e.title),e.children)},G=({className:e})=>r.createElement("div",{className:e},r.createElement(m,{title:"No certifications available",missing:"data",description:"There are no programs configured that apply to this entity."})),K=({ownerEntityRef:e})=>e?r.createElement(m,{missing:"data",title:"Missing entities",description:r.createElement(r.Fragment,null,"Looks like the group"," ",C(v(e),{defaultKind:"Group"})," ","doesn't own any entities.",r.createElement("br",null),r.createElement("br",null),"Please select another group from the dropdown in the corner of the header.")}):null,H=$(e=>new k({defaultOptions:{queries:{refetchInterval:6e4,refetchIntervalInBackground:!1,refetchOnWindowFocus:"always",retry:2,retryDelay:t=>{const o=450+Math.ceil(Math.random()*100);return Math.min(o*2**t,3e4)},onError:t=>e.post(t)}}})),J=e=>{const t=S(w),o=H(t);return r.createElement(z,{client:o},e.children)};export{D as A,P as C,R as F,Q as L,O as N,J as S,G as a,K as b};
|
|
2
|
+
//# sourceMappingURL=SoundcheckQueryClientProvider-04f7e1dc.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{Fragment as f}from"react";import{A as g,a as E,S as
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import e,{Fragment as f}from"react";import{A as g,a as E,S as v}from"./SoundcheckQueryClientProvider-04f7e1dc.esm.js";import y from"@material-ui/core/styles/makeStyles";import{Divider as h}from"@material-ui/core";import{useRouteRef as k}from"@backstage/core-plugin-api";import{Link as C,InfoCard as S}from"@backstage/core-components";import{useEntity as b}from"@backstage/plugin-catalog-react";import{SpotifyLicenseBanner as w}from"@spotify/backstage-plugin-core";import{c as L}from"./index-d6a5b7f6.esm.js";import{b as m,a as R,c as D}from"./CertificationSidebar-276909f2.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"react-router-dom";import"@material-ui/lab";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";import"classnames";import"lodash";import"graphql-request";import"graphql-tag";import"@material-ui/icons/Schedule";import"luxon";const N=()=>e.createElement(e.Fragment,null,e.createElement(m,{hideDescription:!0}),e.createElement(m,{hideDescription:!0})),c=y(t=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:t.spacing(2)},emptyState:{"& > div":{backgroundColor:t.palette.background.paper}}})),a=({children:t})=>{const i=c();return e.createElement(S,{title:"Soundcheck"},e.createElement("div",{className:i.infoCard},e.createElement(w,{inline:!0,backend:"soundcheck",invalidLicenseMessage:"Submitted check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),t))},A=()=>{const{entity:t}=b(),i=c(),{data:n,isError:s,isLoading:p}=R(t),d=k(L);return s?e.createElement(a,null,e.createElement(g,{severity:"error",title:"Error loading certifications"})):p||!n?e.createElement(a,null,e.createElement(N,null)):n.length===0?e.createElement(a,null,e.createElement(E,{className:i.emptyState})):e.createElement(a,null,n.map((r,u)=>{var o,l;return e.createElement(f,{key:r.program.name},e.createElement("div",{className:i.certificationWrapper,"data-testid":"soundcheck-program-row"},e.createElement(D,{key:r.program.id,name:r.program.name,badge:(o=r.highestLevel)==null?void 0:o.badge,level:(l=r.highestLevel)==null?void 0:l.name}),e.createElement(C,{to:d({programId:r.program.id})},"View Details")),u<n.length-1?e.createElement(h,null):null)}))},I=()=>e.createElement(v,null,e.createElement(A,null));export{I as EntitySoundcheckCard};
|
|
2
|
+
//# sourceMappingURL=index-0f37ee61.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import t,{useState as x,useEffect as C,useMemo as O,useCallback as H,memo as b,Fragment as ee}from"react";import{HeaderTabs as B,Link as T,EmptyState as te,Page as re,Header as ae,Content as le}from"@backstage/core-components";import{SpotifyLicenseBanner as ne}from"@spotify/backstage-plugin-core";import{makeStyles as g,alpha as W,TextField as oe,CircularProgress as ie,Tooltip as se,LinearProgress as ce,Typography as N,Grid as I}from"@material-ui/core";import{C as pe,L as G,S as de,b as me,A as ue}from"./SoundcheckQueryClientProvider-04f7e1dc.esm.js";import ge from"@material-ui/lab/Autocomplete";import{stringifyEntityRef as V,parseEntityRef as w}from"@backstage/catalog-model";import{useApi as $,identityApiRef as he,useRouteRef as L}from"@backstage/core-plugin-api";import{useQuery as P}from"@tanstack/react-query";import{s as j,R as k}from"./index-d6a5b7f6.esm.js";import{catalogApiRef as M,entityRouteRef as S,humanizeEntityRef as z}from"@backstage/plugin-catalog-react";import{useSearchParams as fe}from"react-router-dom";import{Skeleton as y}from"@material-ui/lab";import{R as ye}from"./RefetchingIndicator-b6c3da0a.esm.js";import{countBy as K}from"lodash";import{VariableSizeGrid as ve}from"react-window";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";import"classnames";import"graphql-request";import"graphql-tag";import"react-use/lib/useDebounce";function Ee(e){const r=$(j);return P(["soundcheck/facets-for-owner",e],async()=>r.getFacetsForOwner(e),{enabled:!!e})}function Q(e,r){const a=$(j);return P(["soundcheck/program-overview-for-owner",e,r],async()=>a.getProgramOverviewForOwner(e,r),{enabled:!!e&&!!(r!=null&&r.type)})}function be(){const e=$(he),r=$(M);return P(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:a}=await e.getBackstageIdentity();return(await r.getEntitiesByRefs({entityRefs:a})).items.filter(l=>(l==null?void 0:l.kind)==="Group").map(l=>{var n,s,i,o;return{name:(o=(i=(s=(n=l.spec)==null?void 0:n.profile)==null?void 0:s.displayName)!=null?i:l.metadata.title)!=null?o:l.metadata.name,ref:V(l)}})})}function ke(){const e=$(M);return P(["soundcheck/all-groups"],async()=>{const{items:r}=await e.getEntities({filter:{kind:"Group"}});return r.filter(a=>(a==null?void 0:a.kind)==="Group").map(a=>{var l,n,s,i;return{name:(i=(s=(n=(l=a.spec)==null?void 0:l.profile)==null?void 0:n.displayName)!=null?s:a.metadata.title)!=null?i:a.metadata.name,ref:V(a)}})})}const Ce=()=>{const[e,r]=fe(),a=Object.fromEntries(e.entries()),[l,n]=x(a);return C(()=>{r(l,{replace:!0})},[l,r]),[l,n]},Ne=()=>{const{data:e,isLoading:r,isError:a}=be(),{data:l,isLoading:n,isError:s}=ke();return{options:O(()=>{const i=[];return e&&i.push(...e.map(({name:o,ref:d})=>({name:o,ref:d,key:"My Groups"}))),l&&i.push(...l.map(({name:o,ref:d})=>({name:o,ref:d,key:"All Groups"}))),i},[e,l]),isLoading:r||n,isError:a||s}},we=g(e=>({root:{width:"100%",minWidth:250},textField:{"& $notchedOutline":{borderColor:W(e.page.fontColor,.25)},"&:hover $notchedOutline":{borderColor:e.page.fontColor}},input:{backgroundColor:"transparent",color:e.page.fontColor},clearIndicator:{color:e.page.fontColor},popupIndicator:{color:e.page.fontColor},notchedOutline:{}})),Re=e=>{const{onChange:r,initialValue:a,setError:l}=e,{options:n,isLoading:s,isError:i}=Ne(),o=we(),[d,c]=x(null);C(()=>{if(!s&&n!=null&&n.length&&!d){const p=a?n.find(m=>m.ref===a):n[0];p&&(c(p),r==null||r(p.ref))}},[s,n,d,r,a]);const u=H((p,m)=>{c(m),r==null||r(m==null?void 0:m.ref)},[r,c]);return C(()=>{l==null||l(i?new Error("Error loading groups"):void 0)},[i,l]),i?null:t.createElement(ge,{"aria-label":"Current group",className:o.root,classes:{clearIndicator:o.clearIndicator,popupIndicator:o.popupIndicator},disableClearable:!0,options:n!=null?n:[],loading:s,groupBy:p=>p.key,value:d,freeSolo:!1,onChange:u,getOptionLabel:p=>p.name,renderInput:p=>t.createElement(oe,{...p,variant:"outlined",placeholder:s?"Loading":"Select a group",className:o.textField,InputProps:{...p.InputProps,className:o.input,classes:{notchedOutline:o.notchedOutline},endAdornment:t.createElement(t.Fragment,null,s?t.createElement(ie,{color:"inherit",size:20}):null,p.InputProps.endAdornment)}})})},$e=()=>t.createElement(B,{tabs:[{label:t.createElement(y,{width:180})},{label:t.createElement(y,{width:180})},{label:t.createElement(y,{width:180})},{label:t.createElement(y,{width:180})}]}),xe=g(e=>({root:{borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`},tab:{textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)}})),Te=({unfilteredFacets:e,onChange:r,type:a})=>{var l,n,s;const i=xe(),o={types:(l=e==null?void 0:e.types.filter(({count:p})=>p>0))!=null?l:[]},d=H(p=>{var m;r((m=o==null?void 0:o.types[p].value)!=null?m:"")},[o==null?void 0:o.types,r]);C(()=>{var p,m;const h=(o==null?void 0:o.types)&&o.types.length>=0,f=!a&&h,R=a&&h&&!(o!=null&&o.types.find(({value:E})=>E===a));(f||R)&&r((m=(p=o==null?void 0:o.types[0])==null?void 0:p.value)!=null?m:"")},[a,o==null?void 0:o.types,r]);const c=(n=o==null?void 0:o.types.map(({value:p,count:m})=>({key:p,label:`${p} (${m>50?"50+":m})`,id:p,tabProps:{className:i.tab}})))!=null?n:[];if(!c.length)return null;const u=(s=o==null?void 0:o.types.findIndex(p=>p.value===a))!=null?s:-1;return t.createElement(t.Fragment,null,t.createElement(ye,null),t.createElement(B,{onChange:d,tabs:c,selectedIndex:u>-1?u:void 0}))},Ie=g(e=>({root:{height:"8px",minWidth:"64px",marginLeft:e.spacing(2),borderRadius:"100vh",backgroundColor:e.palette.background.default},bar:{backgroundColor:e.palette.success.main,transition:"none"}})),D=e=>{var r,a;const l=Ie(e),n=O(()=>Object.entries(e.progress).reduce((i,[,o])=>i+o,0),[e.progress]);if(n===0)return null;const s=(r=e.progress[k.Passed])!=null?r:0;return t.createElement(se,{arrow:!0,title:`Check passing for ${s} of ${n} ${n===1?"entity":"entities"}`,enterDelay:0,placement:"top"},t.createElement(ce,{variant:"determinate",value:((a=e.progress[k.Passed])!=null?a:0)/n*100,classes:{root:l.root,bar:l.bar}}))},Le=g(e=>({root:{padding:0},iconWrapper:{padding:e.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:e.palette.infoBackground}},icon:{width:"0.75em",height:"0.75em"},empty:{width:e.spacing(2),height:e.spacing(2)},virtualized:{borderBottom:`1px solid ${e.palette.divider}`,borderRight:`1px solid ${e.palette.divider}`}})),U=b(({programId:e,checkId:r,entityRef:a,result:l,entityRoute:n,isVirtualized:s})=>{const i=Le();if(typeof a!="string")return t.createElement("td",{className:`${i.root} ${s?i.virtualized:""}`,"aria-hidden":!0},t.createElement("div",{className:i.iconWrapper},t.createElement("div",{className:i.empty})));const o=t.createElement("div",{className:i.iconWrapper},t.createElement(pe,{className:i.icon,result:l!=null?l:k.NotReported})),d=l&&l===k.NotApplicable?o:t.createElement(T,{className:i.link,to:`${n(w(a))}/soundcheck/${e}/${r}`},o);return t.createElement("td",{className:`${i.root} ${s?i.virtualized:""}`},d)}),Pe=g(e=>({virtualized:{borderRight:`1px solid ${e.palette.divider}`,height:`${v.programTitle}px`,display:"flex",justifyContent:"center",alignItems:"center"}})),Se=b(({entityRef:e,highestLevels:r})=>{const a=r.find(l=>l.entityRef===e);return a!=null&&a.badge?t.createElement(G,{badge:a.badge,size:"small"}):null}),Ae=({highestLevel:e})=>{const r=Pe();return e!=null&&e.badge?t.createElement("div",{className:r.virtualized},t.createElement(G,{badge:e.badge,size:"small"})):t.createElement("div",{className:r.virtualized},"\xA0")},q=g(e=>({programNameCell:{padding:0,position:"sticky",backgroundColor:e.palette.background.paper},programNameContent:{padding:e.spacing(2)},programNameTypography:{overflow:"hidden",textOverflow:"ellipsis"},badgeCellContent:{display:"flex",justifyContent:"center",alignItems:"center"},programNameCellVirtualized:{borderRight:`1px solid ${e.palette.divider}`}})),Oe=b(({program:e,entityRefs:r,highestLevels:a})=>{const l=q();return t.createElement("tr",{"data-testid":"program-title-row"},t.createElement("th",{scope:"row",className:l.programNameCell},t.createElement("div",{className:l.programNameContent},t.createElement(N,{className:l.programNameTypography,variant:"h5",component:"p"},e.name))),r.map((n,s)=>typeof n!="string"?t.createElement("td",{key:s,"aria-hidden":!0}):t.createElement("td",{key:s,"data-testid":"program-certification-cell"},t.createElement("div",{className:l.badgeCellContent},t.createElement(Se,{entityRef:n,highestLevels:a})))))}),ze=b(({name:e})=>{const r=q();return t.createElement("div",{className:`${r.programNameCell} ${r.programNameCellVirtualized}`},t.createElement("div",{className:r.programNameContent},t.createElement(N,{className:r.programNameTypography,variant:"h5",component:"p"},e)))}),F=g(e=>{const r=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{root:{color:W(e.palette.getContrastText(r),.7),backgroundColor:r},levelContent:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,backgroundColor:r},levelTypography:{overflow:"hidden",textOverflow:"ellipsis"},levelHeaderCell:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,borderRight:`1px solid ${e.palette.divider}`,height:`${v.levelTitle}px`}}}),Fe=b(({level:e,entityRefs:r,programName:a})=>{const l=F();return t.createElement("tr",{className:l.root,"data-testid":"program-level-row"},t.createElement("th",{scope:"row",className:l.root},t.createElement("div",{className:l.levelContent},t.createElement(N,{className:l.levelTypography,variant:"subtitle2",component:"p","aria-label":`${e.name} for ${a} program`},e.name))),r.map((n,s)=>t.createElement("td",{key:s,className:l.root,"aria-hidden":!0})))}),He=({name:e})=>{const r=F();return t.createElement("div",{className:`${r.levelHeaderCell} ${r.root}`,"aria-label":`${e}`},t.createElement(N,{variant:"subtitle2",component:"p",className:r.levelTypography},e))},Be=()=>{const e=F();return t.createElement("div",{className:`${e.levelHeaderCell} ${e.root}`},"\xA0")},J=g(e=>({root:{position:"sticky",bottom:"-1px",backgroundColor:e.palette.background.default,boxShadow:`0 -1px ${e.palette.divider}`,"& td$cell, & th$cell":{border:0,padding:e.spacing(1)},"& td$cell":{backgroundColor:e.palette.background.default}},row:{boxShadow:`1px 0 ${e.palette.background.default}, -1px 0 ${e.palette.background.default}`},cell:{verticalAlign:"top"},cellInner:{textOrientation:"mixed",writingMode:"vertical-lr",transform:"rotate(-20deg)",transformOrigin:`100% ${e.spacing(1)}px`,wordBreak:"keep-all",fontWeight:"bold",overflow:"hidden",textOverflow:"ellipsis",maxHeight:"15vh"}})),We=({entityRefs:e})=>{const r=L(S),a=J();return t.createElement("tfoot",{className:a.root,"data-testid":"results-table-footer"},t.createElement("tr",{className:a.row},t.createElement("td",{className:a.cell}),e.map((l,n)=>typeof l!="string"?t.createElement("th",{key:n,className:a.cell,"aria-hidden":!0}):t.createElement("th",{scope:"col",key:n,className:a.cell},t.createElement("div",{className:a.cellInner},t.createElement(T,{to:r(w(l))},z(w(l),{defaultKind:"component"})))))))},Ge=({entityRef:e})=>{const r=L(S),a=J(),l=e?t.createElement(T,{to:r(w(e))},z(w(e),{defaultKind:"component"})):t.createElement(t.Fragment,null);return t.createElement("div",{className:a.cell},t.createElement("div",{className:a.cellInner},l))},Ve=e=>t.createElement(ze,{name:e}),je=e=>({type:"ProgramHeader",render:()=>Ve(e)}),Me=e=>e?t.createElement(He,{name:e}):t.createElement(Be,null),X=e=>({type:"LevelHeader",render:()=>Me(e)}),Ke=(e,r)=>t.createElement(et,{name:e,progress:r}),Qe=(e,r)=>({type:"CheckTitle",render:()=>Ke(e,r)}),De=(e,r,a,l,n)=>t.createElement(U,{checkId:r,entityRef:a,entityRoute:n,programId:e,result:l,isVirtualized:!0}),Ue=(e,r,a,l,n)=>({type:"CheckResult",render:()=>De(e,r,a,l,n)}),qe=e=>t.createElement(Ge,{entityRef:e}),Y=e=>({type:"EntityHeader",render:()=>qe(e)}),Je=e=>t.createElement(Ae,{highestLevel:e}),Xe=e=>({type:"LevelBadge",render:()=>Je(e)}),Ye=e=>r=>{const a=e[r.rowIndex].cells[r.columnIndex];return a?t.createElement("div",{style:r.style},a.render()):t.createElement("div",{style:r.style})},v={programTitle:70,levelTitle:30,check:42,entityRefFooter:100},Ze=(e,r,a)=>{const l=[];for(const{program:n,levels:s,highestLevels:i}of e){l.push({height:v.programTitle,cells:[je(n.name),...r.map(o=>{const d=i.find(c=>c.entityRef===o);return Xe(d)})]});for(const o of s){l.push({height:v.levelTitle,cells:[X(o.name),...r.map(d=>X(""))]});for(const{check:d,results:c}of o.checks)l.push({height:v.check,cells:[Qe(d.name,K(c.filter(({result:u})=>u!==k.NotApplicable),"result")),...r.map(u=>{var p,m;return Ue(n.id,d.id,u,(m=(p=c.find(h=>h.entityRef===u))==null?void 0:p.result)!=null?m:k.NotApplicable,a)})]})}}return l.push({height:v.entityRefFooter,cells:[Y(""),...r.map(n=>Y(n||""))]}),l},Z=g(e=>({checkNameCell:{padding:0,backgroundColor:e.palette.background.paper},checkNameContent:{padding:`0 ${e.spacing(2)}px`,display:"flex",justifyContent:"space-between",alignItems:"center"},checkNameTypography:{overflow:"hidden",textOverflow:"ellipsis"},checkIndicator:{flexBasis:e.spacing(8)},checkNameCellVirtualized:{height:`${v.check}px`,lineHeight:`${v.check}px`,borderBottom:`1px solid ${e.palette.divider}`,borderRight:`1px solid ${e.palette.divider}`}})),_e=b(({programId:e,programName:r,check:a,entityRefs:l,results:n,entityRoute:s})=>{const i=Z(),o=O(()=>K(n.filter(({result:c})=>c!==k.NotApplicable),"result"),[n]),d=new Map(n.map(c=>[c.entityRef,c.result]));return t.createElement("tr",{"data-testid":"program-check-row"},t.createElement("th",{scope:"row",className:i.checkNameCell,"aria-label":`${a.name} check for ${r} program`},t.createElement("div",{className:i.checkNameContent},t.createElement(N,{className:i.checkNameTypography,variant:"subtitle2",component:"p"},a.name),t.createElement(D,{className:i.checkIndicator,progress:o}))),l.map((c,u)=>t.createElement(U,{key:u,programId:e,checkId:a.id,entityRef:c,result:typeof c=="string"?d.get(c):void 0,entityRoute:s})))}),et=({name:e,progress:r})=>{const a=Z();return t.createElement("div",{className:a.checkNameCell,"aria-label":`${e} check`},t.createElement("div",{className:`${a.checkNameContent} ${a.checkNameCellVirtualized}`},t.createElement(N,{variant:"subtitle2",component:"p",className:a.checkNameTypography},e),t.createElement(D,{className:a.checkIndicator,progress:r})))},tt=({program:e,highestLevels:r,levels:a,entityRefs:l,entityRoute:n})=>t.createElement("tbody",null,t.createElement(Oe,{program:e,entityRefs:l,highestLevels:r}),a.map((s,i)=>t.createElement(ee,{key:i},t.createElement(Fe,{entityRefs:l,level:s,programName:e.name}),s.checks.map(({check:o,results:d},c)=>t.createElement(_e,{key:c,check:o,programId:e.id,programName:e.name,entityRefs:l,results:d,entityRoute:n}))))),rt=g(e=>({table:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap","& th, & td":{border:`1px solid ${e.palette.divider}`,borderCollapse:"collapse"},paddingBottom:e.spacing(2)},programTitle:{padding:e.spacing(2)},checkResult:{padding:e.spacing(1.5)},title:{padding:`${e.spacing(1)}px ${e.spacing(2)}px`},header:{backgroundColor:e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100]}})),_=()=>{const e=rt(),r=new Array(25).fill(void 0),a=new Array(5).fill(void 0),l=new Array(3).fill(void 0);return t.createElement("table",{className:e.table},t.createElement("tbody",null,t.createElement("tr",null,t.createElement("td",{className:e.programTitle},t.createElement(y,{width:180,height:40})),r.map((n,s)=>t.createElement("td",{key:s}))),l.map((n,s)=>t.createElement(t.Fragment,{key:s},t.createElement("tr",{className:e.header},t.createElement("td",{className:e.title},t.createElement(y,{width:180})),r.map((i,o)=>t.createElement("td",{key:o}))),a.map((i,o)=>t.createElement("tr",{key:o},t.createElement("td",{className:e.title},t.createElement(y,{width:240})),r.map((d,c)=>t.createElement("td",{key:c,className:e.checkResult},t.createElement(y,{width:18,height:18,variant:"rect"})))))))))},at=g(e=>({root:{width:"100%"},table:{overflow:"auto",backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left","& th, & td":{border:`1px solid ${e.palette.divider}`,borderCollapse:"collapse"},"& th:first-of-type":{position:"sticky",left:0,zIndex:1,maxWidth:"60ch"},"& tfoot":{bottom:0,zIndex:1e3},"& tbody td:first-of-type":{border:`1px solid ${e.palette.divider}`,boxShadow:`1px 0 ${e.palette.background.default}, -1px 0 ${e.palette.background.default}`}}})),lt=b(e=>{const{setError:r,type:a,ownerEntityRef:l}=e,n=at(),s=L(S),{data:i,isLoading:o,isError:d}=Q(l,{type:a});if(C(()=>{r==null||r(d?new Error("Error loading program overview"):void 0)},[d,r]),o)return t.createElement(_,null);if(!i||!l)return null;const{programs:c,entityRefs:u}=i;if(!o&&!c.length)return t.createElement(te,{missing:"data",title:"Missing programs",description:t.createElement(t.Fragment,null,"Looks like the group"," ",z(w(l),{defaultKind:"Group"})," ","doesn't own any ",a," components that have Soundcheck programs set up.",t.createElement("br",null),t.createElement("br",null),"If you're an administrator, you can learn more about configuring and filtering programs in the"," ",t.createElement(T,{to:"https://www.npmjs.com/package/@spotify/backstage-plugin-soundcheck-backend#entity-filter"},"docs"),".")});if(d)return null;const p=u.length>=25?u:[...u,...Array.from({length:25-u.length},()=>{})];return t.createElement("div",{className:n.root},t.createElement("table",{className:n.table,"aria-label":"Check results"},c.map(({program:m,levels:h,highestLevels:f},R)=>t.createElement(tt,{key:R,program:m,entityRefs:p,levels:h,highestLevels:f,entityRoute:s})),t.createElement(We,{entityRefs:p})))}),nt=g(e=>({table:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left"}})),ot=e=>{let r=0;return e.forEach(a=>{r+=a.height}),r},A={programTitle:350,checkResult:42},it=e=>e*A.checkResult+A.programTitle,st=e=>{const{setError:r,type:a,ownerEntityRef:l}=e,n=nt(),s=L(S),{data:i,isLoading:o,isError:d}=Q(l,{type:a});if(C(()=>{r==null||r(d?new Error("Error loading program overview"):void 0)},[d,r]),o)return t.createElement(_,null);if(!i||!l)return null;const{programs:c,entityRefs:u}=i,p=u.length>=25?u:[...u,...Array.from({length:25-u.length},()=>{})],m=Ze(c,p,s),h=Ye(m);return t.createElement(ve,{className:n.table,columnCount:p.length+1,columnWidth:f=>f===0?A.programTitle:A.checkResult,rowCount:m.length,rowHeight:f=>m[f].height,height:ot(m),width:it(p.length)},h)},ct=g(e=>({tableContainer:{padding:e.spacing(3),backgroundColor:"transparent"},scrollContainer:{overflow:"scroll",height:`calc(100vh - 86px - 68px - ${e.spacing(3)*2}px)`}})),pt=(e,r,a,l,n,s)=>{var i;if(((i=e==null?void 0:e.types)==null?void 0:i.length)<1)return t.createElement(me,{ownerEntityRef:r});if(a)return t.createElement(ue,{severity:"error",title:a.message});if(s){const o=[];if(e&&e.types)for(let d=0;d<e.types.length;d++){const c=e.types[d].value;o.push(t.createElement(I,{"aria-label":`Check results for ${c}`,key:c,item:!0,xs:12,style:c===l?{}:{display:"none"}},t.createElement(st,{ownerEntityRef:r,type:c,setError:n})))}return t.createElement("div",null,o)}return t.createElement(lt,{ownerEntityRef:r,type:l,setError:n})},dt=({useVirtualizedResultsTable:e})=>{const[r,a]=Ce(),{group:l,type:n}=r,[s,i]=x(void 0),[o,d]=x(void 0),{data:c,isLoading:u}=Ee(l),p=s||o,m=E=>{E&&a({...r,group:E})},h=E=>{E&&a({...r,type:E})},f=ct(),R=pt(c,l,p,n,d,e);return t.createElement(re,{themeId:"website"},t.createElement(ne,{backend:"soundcheck",invalidLicenseMessage:"Submitted check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),t.createElement(ae,{title:"Soundcheck"},t.createElement(Re,{onChange:m,initialValue:l,setError:i})),t.createElement(le,{noPadding:!0,stretch:!0},t.createElement(I,{container:!0,spacing:0},t.createElement(I,{item:!0,xs:12},u?t.createElement($e,null):t.createElement(Te,{unfilteredFacets:c,type:n,onChange:h})),t.createElement(I,{item:!0,xs:12,className:f.tableContainer},t.createElement("div",{className:f.scrollContainer},R)))))},mt=e=>t.createElement(de,null,t.createElement(dt,{useVirtualizedResultsTable:e}));export{mt as overviewPage};
|
|
2
|
+
//# sourceMappingURL=index-41e242ce.esm.js.map
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import{createApiRef as F,createRouteRef as y,createSubRouteRef as R,createPlugin as S,createApiFactory as D,discoveryApiRef as $,fetchApiRef as E,createRoutableExtension as w,createComponentExtension as A,useApi as P,configApiRef as I}from"@backstage/core-plugin-api";import{GraphQLClient as q}from"graphql-request";import o from"graphql-tag";var L=(e=>(e.Medal="MEDAL",e))(L||{}),k=(e=>(e.Failed="FAILED",e.NotApplicable="NOT_APPLICABLE",e.NotReported="NOT_REPORTED",e.Passed="PASSED",e))(k||{});const M=o`
|
|
2
|
+
fragment CertificationSummary on Certification {
|
|
3
|
+
entityRef
|
|
4
|
+
program {
|
|
5
|
+
id
|
|
6
|
+
name
|
|
7
|
+
}
|
|
8
|
+
highestLevel {
|
|
9
|
+
ordinal
|
|
10
|
+
name
|
|
11
|
+
description
|
|
12
|
+
badge {
|
|
13
|
+
... on BadgeVariantMedal {
|
|
14
|
+
variant
|
|
15
|
+
options {
|
|
16
|
+
level
|
|
17
|
+
color
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
`,b=o`
|
|
24
|
+
fragment CheckResultSummary on CheckResult {
|
|
25
|
+
id
|
|
26
|
+
name
|
|
27
|
+
result
|
|
28
|
+
timestamp
|
|
29
|
+
}
|
|
30
|
+
`,B=o`
|
|
31
|
+
fragment CheckResultDetails on CheckResult {
|
|
32
|
+
id
|
|
33
|
+
name
|
|
34
|
+
description
|
|
35
|
+
result
|
|
36
|
+
timestamp
|
|
37
|
+
notes
|
|
38
|
+
}
|
|
39
|
+
`,G=o`
|
|
40
|
+
fragment OverviewLevelResult on OverviewLevelResult {
|
|
41
|
+
ordinal
|
|
42
|
+
name
|
|
43
|
+
checks {
|
|
44
|
+
check {
|
|
45
|
+
id
|
|
46
|
+
name
|
|
47
|
+
}
|
|
48
|
+
results {
|
|
49
|
+
id
|
|
50
|
+
entityRef
|
|
51
|
+
result
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
`,W=o`
|
|
56
|
+
fragment HighestLevel on LevelResult {
|
|
57
|
+
entityRef
|
|
58
|
+
ordinal
|
|
59
|
+
name
|
|
60
|
+
badge {
|
|
61
|
+
... on BadgeVariantMedal {
|
|
62
|
+
variant
|
|
63
|
+
options {
|
|
64
|
+
color
|
|
65
|
+
level
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
`,T=o`
|
|
71
|
+
query getAllCertifications($entityRef: String!) {
|
|
72
|
+
certifications(entityRef: $entityRef, includeFilteredChecks: false) {
|
|
73
|
+
...CertificationSummary
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
${M}`,V=o`
|
|
77
|
+
query getCertificationDetails($entityRef: String!, $programId: String!) {
|
|
78
|
+
programCertification(
|
|
79
|
+
entityRef: $entityRef
|
|
80
|
+
programId: $programId
|
|
81
|
+
includeFilteredChecks: false
|
|
82
|
+
) {
|
|
83
|
+
program {
|
|
84
|
+
id
|
|
85
|
+
name
|
|
86
|
+
description
|
|
87
|
+
documentationUrl
|
|
88
|
+
}
|
|
89
|
+
highestLevel {
|
|
90
|
+
name
|
|
91
|
+
ordinal
|
|
92
|
+
badge {
|
|
93
|
+
... on BadgeVariantMedal {
|
|
94
|
+
variant
|
|
95
|
+
options {
|
|
96
|
+
level
|
|
97
|
+
color
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
levels {
|
|
103
|
+
ordinal
|
|
104
|
+
name
|
|
105
|
+
description
|
|
106
|
+
badge {
|
|
107
|
+
... on BadgeVariantMedal {
|
|
108
|
+
variant
|
|
109
|
+
options {
|
|
110
|
+
level
|
|
111
|
+
color
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
certified
|
|
116
|
+
checks {
|
|
117
|
+
...CheckResultSummary
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
${b}`,N=o`
|
|
123
|
+
query getCheckResultDetails($entityRef: String!, $programId: String!, $checkId: String!) {
|
|
124
|
+
checkResult(entityRef: $entityRef, programId: $programId, checkId: $checkId) {
|
|
125
|
+
...CheckResultDetails
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
${B}`,x=o`
|
|
129
|
+
query getFacetsForOwner($ownerEntityRef: String!) {
|
|
130
|
+
facetsForOwner(ownerEntityRef: $ownerEntityRef) {
|
|
131
|
+
types {
|
|
132
|
+
value
|
|
133
|
+
count
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
`,H=o`
|
|
138
|
+
query getProgramOverviewForOwner($ownerEntityRef: String!, $facet: FacetInput) {
|
|
139
|
+
programOverviewForOwner(
|
|
140
|
+
ownerEntityRef: $ownerEntityRef
|
|
141
|
+
facet: $facet
|
|
142
|
+
includeFilteredChecks: false
|
|
143
|
+
) {
|
|
144
|
+
programs {
|
|
145
|
+
program {
|
|
146
|
+
id
|
|
147
|
+
name
|
|
148
|
+
}
|
|
149
|
+
highestLevels {
|
|
150
|
+
...HighestLevel
|
|
151
|
+
}
|
|
152
|
+
levels {
|
|
153
|
+
...OverviewLevelResult
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
entityRefs
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
${W}
|
|
160
|
+
${G}`,z=(e,t,r)=>e();function U(e,t=z){return{getAllCertifications(r,i){return t(n=>e.request(T,r,{...i,...n}),"getAllCertifications","query")},getCertificationDetails(r,i){return t(n=>e.request(V,r,{...i,...n}),"getCertificationDetails","query")},getCheckResultDetails(r,i){return t(n=>e.request(N,r,{...i,...n}),"getCheckResultDetails","query")},getFacetsForOwner(r,i){return t(n=>e.request(x,r,{...i,...n}),"getFacetsForOwner","query")},getProgramOverviewForOwner(r,i){return t(n=>e.request(H,r,{...i,...n}),"getProgramOverviewForOwner","query")}}}var C=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)},a=(e,t,r)=>(C(e,t,"read from private field"),r?r.call(e):t.get(e)),l=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},f=(e,t,r,i)=>(C(e,t,"write to private field"),i?i.call(e,r):t.set(e,r),r),d,h,c,p,s;const O=F({id:"plugin.soundcheck"}),_=e=>"response"in e&&"errors"in e.response,Q=e=>"response"in e&&"message"in e.response;class j{constructor(t){l(this,d,void 0),l(this,h,void 0),l(this,c,void 0),l(this,p,i=>{var n,u,v;return _(i)?(v=(u=(n=i.response)==null?void 0:n.errors)==null?void 0:u[0].message)!=null?v:`${i}`:Q(i)?i.response.message:`${i}`}),l(this,s,async i=>{try{return await i()}catch(n){throw new Error(`Error from Soundcheck backend: ${a(this,p).call(this,n)}`)}}),f(this,d,t.fetchApi),f(this,h,t.discoveryApi);const r=new q("/graphql",{fetch:async(i,n)=>{const u=`${await a(this,h).getBaseUrl("soundcheck")}${i}`;return a(this,d).fetch(u,n)}});f(this,c,U(r))}async getAllCertifications(t){return a(this,s).call(this,async()=>{const{certifications:r}=await a(this,c).getAllCertifications({entityRef:t});return r})}async getCertificationDetails(t,r){return a(this,s).call(this,async()=>{const{programCertification:i}=await a(this,c).getCertificationDetails({entityRef:t,programId:r});return i})}async getCheckResultDetails(t,r,i){return a(this,s).call(this,async()=>{const{checkResult:n}=await a(this,c).getCheckResultDetails({entityRef:t,programId:r,checkId:i});return n})}async getFacetsForOwner(t){return a(this,s).call(this,async()=>{const{facetsForOwner:r}=await a(this,c).getFacetsForOwner({ownerEntityRef:t});return r})}async getProgramOverviewForOwner(t,r){return a(this,s).call(this,async()=>{const{programOverviewForOwner:i}=await a(this,c).getProgramOverviewForOwner({ownerEntityRef:t,facet:r});return i})}}d=new WeakMap,h=new WeakMap,c=new WeakMap,p=new WeakMap,s=new WeakMap;const g=y({id:"soundcheck-entity"}),J=R({id:"soundcheck-entity-certification-program-redirect",parent:g,path:"/:programId"}),K=R({id:"soundcheck-entity-certification",parent:g,path:"/:programId/:checkId"}),X=y({id:"soundcheck-overview"}),m=S({id:"soundcheck",apis:[D({api:O,deps:{discoveryApi:$,fetchApi:E},factory:e=>new j(e)})],routes:{entityContent:g}}),Y=m.provide(w({name:"EntitySoundcheckContent",component:()=>import("./EntitySoundcheckContent-931d8ed8.esm.js").then(e=>e.EntitySoundcheckContent),mountPoint:g})),Z=m.provide(A({name:"EntitySoundcheckCard",component:{lazy:()=>import("./index-0f37ee61.esm.js").then(e=>e.EntitySoundcheckCard)}})),ee=m.provide(w({name:"SoundcheckOverviewPage",component:()=>import("./index-41e242ce.esm.js").then(e=>()=>{var t;return e.overviewPage((t=P(I).getOptionalBoolean("soundcheck.virtualizeOverviewPage"))!=null?t:!1)}),mountPoint:X}));export{Y as E,k as R,ee as S,K as a,m as b,J as c,Z as d,O as s};
|
|
161
|
+
//# sourceMappingURL=index-d6a5b7f6.esm.js.map
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as i,E as r,S as a,b as d}from"./esm/index-
|
|
1
|
+
import{d as i,E as r,S as a,b as d}from"./esm/index/index-d6a5b7f6.esm.js";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";export{i as EntitySoundcheckCard,r as EntitySoundcheckContent,a as SoundcheckOverviewPage,d as soundcheckPlugin};
|
|
2
2
|
//# sourceMappingURL=index.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.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"homepage": "https://backstage.spotify.com/",
|
|
7
7
|
"main": "dist/index.esm.js",
|
|
@@ -26,39 +26,40 @@
|
|
|
26
26
|
"prepare": "yarn generate"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@backstage/catalog-model": "^1.2.
|
|
30
|
-
"@backstage/core-components": "^0.12.
|
|
31
|
-
"@backstage/core-plugin-api": "^1.
|
|
32
|
-
"@backstage/plugin-catalog-react": "^1.
|
|
33
|
-
"@backstage/theme": "^0.2.
|
|
29
|
+
"@backstage/catalog-model": "^1.2.1",
|
|
30
|
+
"@backstage/core-components": "^0.12.5",
|
|
31
|
+
"@backstage/core-plugin-api": "^1.5.0",
|
|
32
|
+
"@backstage/plugin-catalog-react": "^1.4.0",
|
|
33
|
+
"@backstage/theme": "^0.2.18",
|
|
34
34
|
"@backstage/types": "^1.0.2",
|
|
35
35
|
"@material-ui/core": "^4.12.2",
|
|
36
36
|
"@material-ui/icons": "^4.9.1",
|
|
37
37
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
38
|
-
"@spotify/backstage-plugin-core": "^0.
|
|
38
|
+
"@spotify/backstage-plugin-core": "^0.5.0",
|
|
39
39
|
"@tanstack/react-query": "^4.6.1",
|
|
40
40
|
"classnames": "^2.3.2",
|
|
41
|
-
"graphql-request": "
|
|
41
|
+
"graphql-request": "5.1.0",
|
|
42
42
|
"lodash": "^4.17.21",
|
|
43
43
|
"luxon": "^3.1.1",
|
|
44
44
|
"react-confetti": "^6.1.0",
|
|
45
|
-
"react-use": "^17.2.4"
|
|
45
|
+
"react-use": "^17.2.4",
|
|
46
|
+
"react-window": "^1.8.8"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"react": "^16.13.1 || ^17.0.0",
|
|
49
50
|
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
52
|
-
"@backstage/cli": "^0.22.
|
|
53
|
-
"@backstage/core-app-api": "^1.
|
|
54
|
-
"@backstage/dev-utils": "^1.0.
|
|
55
|
-
"@backstage/test-utils": "^1.2.
|
|
56
|
-
"@graphql-codegen/cli": "^
|
|
57
|
-
"@graphql-codegen/typescript": "^
|
|
53
|
+
"@backstage/cli": "^0.22.4",
|
|
54
|
+
"@backstage/core-app-api": "^1.6.0",
|
|
55
|
+
"@backstage/dev-utils": "^1.0.13",
|
|
56
|
+
"@backstage/test-utils": "^1.2.6",
|
|
57
|
+
"@graphql-codegen/cli": "^3.0.0",
|
|
58
|
+
"@graphql-codegen/typescript": "^3.0.0",
|
|
58
59
|
"@graphql-codegen/typescript-graphql-request": "^4.5.5",
|
|
59
|
-
"@graphql-codegen/typescript-operations": "^
|
|
60
|
-
"@spotify/backstage-plugin-core-common": "^0.
|
|
61
|
-
"@spotify/backstage-plugin-soundcheck-common": "^0.
|
|
60
|
+
"@graphql-codegen/typescript-operations": "^3.0.0",
|
|
61
|
+
"@spotify/backstage-plugin-core-common": "^0.5.0",
|
|
62
|
+
"@spotify/backstage-plugin-soundcheck-common": "^0.4.0",
|
|
62
63
|
"@testing-library/jest-dom": "^5.10.1",
|
|
63
64
|
"@testing-library/react": "^12.1.5",
|
|
64
65
|
"@testing-library/react-hooks": "^8.0.1",
|
|
@@ -66,11 +67,15 @@
|
|
|
66
67
|
"@types/jest": "^29.4.0",
|
|
67
68
|
"@types/luxon": "^3.0.1",
|
|
68
69
|
"@types/node": "^16.18.11",
|
|
70
|
+
"@types/react-window": "^1.8.5",
|
|
69
71
|
"cross-fetch": "^3.1.5",
|
|
70
|
-
"msw": "^0.
|
|
72
|
+
"msw": "^1.0.0"
|
|
71
73
|
},
|
|
72
74
|
"files": [
|
|
73
75
|
"dist",
|
|
74
|
-
"!dist/**/*.map"
|
|
75
|
-
|
|
76
|
+
"!dist/**/*.map",
|
|
77
|
+
"config.d.ts"
|
|
78
|
+
],
|
|
79
|
+
"configSchema": "config.d.ts",
|
|
80
|
+
"module": "./dist/index.esm.js"
|
|
76
81
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{stringifyEntityRef as y}from"@backstage/catalog-model";import{useApi as v,useRouteRef as B}from"@backstage/core-plugin-api";import{useQuery as b}from"@tanstack/react-query";import{s as k,a as I}from"./index-6b006938.esm.js";import t from"react";import{makeStyles as d,Tooltip as D,Typography as r,alpha as p,Box as F}from"@material-ui/core";import{useEntity as _}from"@backstage/plugin-catalog-react";import{Link as U}from"react-router-dom";import{useAutoUpdatingRelativeTime as W}from"@spotify/backstage-plugin-core";import G from"@material-ui/icons/Schedule";import{DateTime as S}from"luxon";import H from"classnames";import{C as j,L as N,N as M,F as E,A as O}from"./SoundcheckQueryClientProvider-f6aa058e.esm.js";import{Skeleton as c}from"@material-ui/lab";import{Link as P}from"@backstage/core-components";function Q(e){const a=v(k),n=y(e);return b(["soundcheck/certifications",n],async()=>a.getAllCertifications(n))}function C(e,a){const n=v(k),l=y(e);return b(["soundcheck/certifications",l,a],async()=>n.getCertificationDetails(l,a),{enabled:!!a})}const q=d(e=>({root:{display:"inline-flex",alignItems:"center",gap:e.spacing(1)}})),T=({timestamp:e,description:a})=>{const n=q(),l=S.fromISO(e).toLocaleString(S.DATETIME_FULL),i=W(e),o=a?`${a}: ${i}`:void 0;return t.createElement("div",{className:n.root},t.createElement(D,{title:l},t.createElement(r,{variant:"caption","aria-label":o},i)),t.createElement(G,null))},h=d(e=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto",gridColumnGap:e.spacing(1),padding:e.spacing(1),alignItems:"center","&.selected":{backgroundColor:p(e.palette.primary[e.palette.type],.2)},"&:hover, &:active, &:focus":{backgroundColor:p(e.palette.primary[e.palette.type],.3)}}})),J=({className:e,href:a,children:n})=>a?t.createElement(U,{to:a,className:e},n):t.createElement("div",{className:e},n),K=({result:e,name:a,timestamp:n,selected:l=!1,href:i})=>{const o=h(),g=H(o.root,{selected:l});return t.createElement(J,{href:i,className:g},t.createElement(j,{result:e}),t.createElement(r,{variant:"body2"},a),n?t.createElement(T,{timestamp:n}):null)},L=d(e=>{const a=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{wrapper:{backgroundColor:a,color:p(e.palette.getContrastText(a),.7),fontSize:e.typography.caption.fontSize,minHeight:"auto",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(1),display:"grid",gridTemplateAreas:({badge:n})=>[`"${n?"badge":"title"} title"`,`"${n?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:p(e.palette.getContrastText(a),.7),fontSize:e.typography.body2.fontSize,paddingTop:e.spacing(.5),paddingBottom:e.spacing(.5),lineHeight:1},badge:{gridArea:"badge",marginRight:e.spacing(1)},description:{gridArea:"description",color:p(e.palette.getContrastText(a),.7),fontSize:e.typography.subtitle2.fontSize,marginTop:e.spacing(1)}}}),V=e=>{const a=L({badge:e.badge});return t.createElement("div",{className:a.wrapper},e.badge?t.createElement(N,{className:a.badge,badge:e.badge}):null,t.createElement(r,{className:a.title},e.title),e.description?t.createElement(r,{className:a.description},e.description):null)},x=d(e=>({root:{padding:e.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:e.spacing(2)},title:{fontSize:e.typography.pxToRem(18)},level:{textTransform:"uppercase",color:e.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function X({description:e,documentationUrl:a}){return a?t.createElement(r,{variant:"body2"},e," ",t.createElement(P,{to:a},"Learn more")):t.createElement(r,{variant:"body2"},e)}const A=({name:e,level:a,badge:n,description:l,documentationUrl:i})=>{const o=x();return t.createElement("div",{className:o.root},n?t.createElement(N,{size:"large",badge:n}):t.createElement(M,{size:"large"}),t.createElement("div",null,t.createElement(r,{variant:"caption",className:o.level},a??"No Level"),t.createElement(r,{variant:"h4",className:o.title},e),l&&t.createElement(X,{description:l,documentationUrl:i})))},R=({hideDescription:e=!1})=>{const a=x();return t.createElement(E,null,t.createElement("div",{className:a.root},t.createElement(c,{width:44,height:44}),t.createElement("div",null,t.createElement(r,{variant:"caption",className:a.level},t.createElement(c,{width:100})),t.createElement(r,{variant:"h4",className:a.title},t.createElement(c,{width:300})),!e&&t.createElement(r,{variant:"body2"},t.createElement(c,null)))))},Y=()=>{const e=L({});return t.createElement(E,null,t.createElement("div",{className:e.wrapper},t.createElement(c,{className:e.title}),t.createElement(r,{className:e.description},t.createElement(c,null))))},f=()=>{const e=h();return t.createElement(E,null,t.createElement("div",{className:e.root},t.createElement(c,{width:24,height:24}),t.createElement(r,{variant:"body2"},t.createElement(c,null)),t.createElement(c,{width:100,height:24})))},Z=()=>{const e=$();return t.createElement("div",{className:e.root},t.createElement(R,null),new Array(3).fill(null).map((a,n)=>t.createElement(t.Fragment,{key:`skeleton-level-${n}`},t.createElement(Y,null),t.createElement("ul",{className:e.checks},t.createElement(f,null),t.createElement(f,null),t.createElement(f,null)))))},$=d(e=>({root:{borderRight:`1px solid ${e.palette.divider}`},checks:{padding:0,margin:0,flex:1,listStyle:"none"},checkItem:{borderBottom:`1px solid ${e.palette.divider}`,"&:last-of-type":{borderBottom:"0"}}})),ee=({programId:e,checkId:a})=>{var n,l;const i=$(),{entity:o}=_(),g=B(I),{data:s,isLoading:w,isError:z}=C(o,e);return z?t.createElement("div",{className:i.root},t.createElement(F,{padding:2},t.createElement(O,{severity:"error",title:"Error loading certification"}))):w||!e?t.createElement(Z,null):s?t.createElement("div",{className:i.root},t.createElement(A,{name:s.program.name,level:(n=s.highestLevel)==null?void 0:n.name,badge:(l=s.highestLevel)==null?void 0:l.badge,description:s.program.description,documentationUrl:s.program.documentationUrl}),s?.levels.map(m=>t.createElement(t.Fragment,{key:m.ordinal},t.createElement(V,{key:m.ordinal,badge:m.badge,title:m.name,description:m.description}),t.createElement("ul",{className:i.checks},m.checks.map(u=>t.createElement("li",{key:u.id,className:i.checkItem},t.createElement(K,{...u,selected:u.id===a,href:g({programId:e,checkId:u.id})}))))))):null};export{ee as C,T as R,Q as a,R as b,A as c,C as u};
|
|
2
|
-
//# sourceMappingURL=CertificationSidebar-c4cee874.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import e,{useState as I,useEffect as M}from"react";import{Link as W,useParams as O,Routes as Q,Route as y,Navigate as P}from"react-router-dom";import{makeStyles as d,Typography as h,Box as j,Tab as x,Tabs as T,Paper as H,Divider as U}from"@material-ui/core";import{SpotifyLicenseBanner as V}from"@spotify/backstage-plugin-core";import{useEntity as p}from"@backstage/plugin-catalog-react";import{R as Y}from"./RefetchingIndicator-9e7adc3f.esm.js";import{R as q,u as L,a as k,C as G}from"./CertificationSidebar-c4cee874.esm.js";import{Skeleton as s}from"@material-ui/lab";import{MarkdownContent as B}from"@backstage/core-components";import{stringifyEntityRef as J}from"@backstage/catalog-model";import{useApi as K,useRouteRef as C,useRouteRefParams as X}from"@backstage/core-plugin-api";import{useQuery as Z}from"@tanstack/react-query";import{s as ee,R as c,c as v,a as F}from"./index-6b006938.esm.js";import{A as b,F as A,L as te,N as ne,a as ae,S as re}from"./SoundcheckQueryClientProvider-f6aa058e.esm.js";import ie from"react-use/lib/useMeasure";import D from"react-use/lib/usePrevious";import le from"react-confetti";import"react-use/lib/useDebounce";import"@material-ui/icons/Schedule";import"luxon";import"classnames";import"graphql-request";import"graphql-tag";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";import"lodash";function oe(t,a,n){const r=K(ee),i=J(t);return Z(["soundcheck/check-details",i,a,n],async()=>r.getCheckResultDetails(i,a,n),{enabled:!!a&&!!n})}const se=d({markdownContent:{"& :last-child":{marginBottom:0}}}),ce=({state:t,notes:a})=>{const n=se(),r={[c.Passed]:"success",[c.Failed]:"error",[c.NotReported]:"info",[c.NotApplicable]:"info"}[t],i={[c.Passed]:"Check passed",[c.Failed]:"Check did not pass",[c.NotReported]:"Check not reported",[c.NotApplicable]:"Check not applicable"}[t];return e.createElement(b,{severity:r,title:i},a?e.createElement(B,{className:n.markdownContent,content:a}):null)},me=()=>{const t=$();return e.createElement(A,null,e.createElement("div",{className:t.root,"data-testid":"check-details-view"},e.createElement("div",{className:t.topBar},e.createElement(h,{variant:"h2",className:t.title},e.createElement(s,{width:300,height:32})),e.createElement(s,{width:100,height:32})),e.createElement(s,{variant:"rect",height:120}),e.createElement("div",{"data-testid":"soundcheck-check-details-description"},e.createElement(h,{variant:"h3"},e.createElement(s,null)),e.createElement(s,null),e.createElement(s,null),e.createElement(s,null))))},$=d(t=>({root:{padding:`${t.spacing(3)}px ${t.spacing(5)}px`},title:{fontWeight:"normal",fontSize:t.typography.h5.fontSize},description:{padding:`${t.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:t.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:t.spacing(2)}})),ue=({programId:t,checkId:a})=>{const n=$(),{entity:r}=p(),{data:i,isLoading:l,isError:o}=oe(r,t,a);if(o)return e.createElement(j,{padding:2},e.createElement(b,{severity:"error",title:"Error loading check details"}));if(l||!t||!a)return e.createElement(me,null);if(!i)return null;const{name:f,description:u,result:g,timestamp:m,notes:E}=i;return e.createElement("div",{className:n.root,"data-testid":"check-details-view"},e.createElement("div",{className:n.topBar},e.createElement(h,{variant:"h2",className:n.title},f),m?e.createElement(q,{timestamp:m,description:"Last updated"}):null),e.createElement(ce,{state:g,notes:E}),e.createElement("div",{className:n.description,"data-testid":"soundcheck-check-details-description"},e.createElement(h,{variant:"h3",className:n.subtitle},"Description"),e.createElement(B,{content:u})))},de=d(()=>({root:{position:"absolute",width:"100%",height:"100%"}})),pe=({programId:t})=>{var a,n;const r=de(),{entity:i}=p(),{data:l,isLoading:o}=L(i,t),[f,{width:u,height:g}]=ie(),m=o?void 0:(n=(a=l?.highestLevel)==null?void 0:a.ordinal)!=null?n:-1,E=D(m),S=D(t),[z,N]=I(!1);return M(()=>{typeof E<"u"&&typeof m<"u"&&t===S&&m>E&&N(!0)},[m,E,t,S]),z?e.createElement("div",{ref:f,className:r.root},e.createElement(le,{width:u,height:g,numberOfPieces:1e3,gravity:1,initialVelocityY:20,recycle:!1,onConfettiComplete:()=>N(!1)})):null},_=d(t=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:t.spacing(2),paddingBottom:t.spacing(2)},wrapper:{display:"inline-block",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},badge:{marginRight:t.spacing(1)}})),fe=({id:t,name:a,badge:n,href:r,selected:i=!1})=>{const l=_();return e.createElement(x,{className:l.root,classes:{wrapper:l.wrapper},value:t,label:e.createElement(e.Fragment,null,n?e.createElement(te,{badge:n,className:l.badge}):e.createElement(ne,{className:l.badge}),a),component:W,to:r,selected:i})},R=()=>{const t=_();return e.createElement(x,{className:t.root,classes:{wrapper:t.wrapper},label:e.createElement(s,{width:180})})},Ee=()=>e.createElement(A,null,e.createElement(T,{value:!1,indicatorColor:"primary"},e.createElement(R,null),e.createElement(R,null),e.createElement(R,null)));function he(t=[],a){const n=t.findIndex(r=>r.program.id===a);return n<0?!1:n}const ve=({programId:t})=>{const{entity:a}=p(),{isLoading:n,data:r}=k(a),i=C(v);if(n||!t)return e.createElement(Ee,null);const l=he(r,t);return e.createElement(T,{value:l,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},r&&r.map(({program:{id:o,name:f},highestLevel:u})=>e.createElement(fe,{key:o,id:o,name:f,badge:u?.badge,selected:o===t,href:i({programId:o})})))},ge=d({paper:{overflow:"hidden",position:"relative"},view:{display:"grid",gridTemplateColumns:"1fr 2fr"}}),ye=()=>{const{programId:t,checkId:a}=O(),n=ge(),{entity:r}=p(),{isError:i,isFetched:l,data:o}=k(r);return i?e.createElement(b,{severity:"error",title:"Error loading certifications"}):l&&!o?.length?e.createElement(ae,null):e.createElement(H,{className:n.paper},e.createElement(Y,null),e.createElement(ve,{programId:t}),e.createElement(U,null),e.createElement("div",{"data-testid":"soundcheck-certification-view",className:n.view},e.createElement(G,{programId:t,checkId:a}),e.createElement(ue,{programId:t,checkId:a}),e.createElement(pe,{programId:t})))},ke=d(t=>({root:{"&:not(:first-child)":{marginTop:t.spacing(2)}}})),w=()=>{const t=ke();return e.createElement(e.Fragment,null,e.createElement(V,{backend:"soundcheck",invalidLicenseMessage:"Submitted check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present.",inline:!0}),e.createElement("div",{className:t.root},e.createElement(ye,null)))},Ce=()=>{var t;const{entity:a}=p(),n=C(v),{data:r}=k(a),i=(t=r?.[0])==null?void 0:t.program.id;return i?e.createElement(P,{to:n({programId:i}),replace:!0}):null},be=()=>{var t,a;const{entity:n}=p(),{programId:r}=X(v),i=C(F),{data:l}=L(n,r),o=(a=(t=l?.levels[0])==null?void 0:t.checks[0])==null?void 0:a.id;return o?e.createElement(P,{to:i({programId:r,checkId:o}),replace:!0}):null},Re=()=>e.createElement(Q,null,e.createElement(y,{path:"/",element:e.createElement(e.Fragment,null,e.createElement(w,null),e.createElement(Ce,null))}),e.createElement(y,{path:v.path,element:e.createElement(e.Fragment,null,e.createElement(w,null),e.createElement(be,null))}),e.createElement(y,{path:F.path,element:e.createElement(w,null)})),we=()=>e.createElement(re,null,e.createElement(Re,null));export{we as EntitySoundcheckContent};
|
|
2
|
-
//# sourceMappingURL=EntitySoundcheckContent-a2d35ddd.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import t,{useState as n}from"react";import{makeStyles as s,LinearProgress as a}from"@material-ui/core";import m from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import{useIsFetching as c}from"@tanstack/react-query";import"./index-6b006938.esm.js";import"@backstage/plugin-catalog-react";import"react-router-dom";import{F as d}from"./SoundcheckQueryClientProvider-f6aa058e.esm.js";const l=s(e=>({indicator:{position:"absolute",width:"100%",zIndex:e.zIndex.speedDial}})),p=()=>{const e=c(),i=l(),[r,o]=n(!!e);return m(()=>{o(!!e)},250,[e]),r?t.createElement(d,null,t.createElement("div",{className:i.indicator},t.createElement(a,{variant:"indeterminate","data-testid":"refetching-indicator"}))):null};export{p as R};
|
|
2
|
-
//# sourceMappingURL=RefetchingIndicator-9e7adc3f.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import r,{useState as u,useEffect as f}from"react";import{Fade as h,withStyles as s,makeStyles as l,Typography as y}from"@material-ui/core";import b from"@material-ui/icons/Check";import g from"@material-ui/icons/Close";import E from"@material-ui/icons/RemoveCircleOutline";import C from"@material-ui/icons/HelpOutline";import{R as n}from"./index-6b006938.esm.js";import i from"classnames";import{Alert as S}from"@material-ui/lab";import{EmptyState as m}from"@backstage/core-components";import{humanizeEntityRef as N}from"@backstage/plugin-catalog-react";import{parseEntityRef as v}from"@backstage/catalog-model";import{QueryClient as x,QueryClientProvider as I}from"@tanstack/react-query";import{memoize as k}from"lodash";import{useApi as A,errorApiRef as F}from"@backstage/core-plugin-api";const R=({children:e})=>{const[t,o]=u(!1);return f(()=>{const a=setTimeout(()=>{o(!0)},250);return()=>clearTimeout(a)},[]),r.createElement(h,{in:t,timeout:250},e)},T=e=>({[n.Passed]:"Check passed",[n.NotReported]:"Check not reported",[n.Failed]:"Check failed",[n.NotApplicable]:"Check not applicable"})[e],w=s(e=>({root:{color:e.palette.success.main}}))(b),$=s(e=>({root:{color:e.palette.error.main}}))(g),B=s(e=>({root:{color:e.palette.info.main}}))(C),P=s(e=>({root:{color:e.palette.text.disabled}}))(E),L=({result:e,className:t})=>{const o={className:t,"aria-label":T(e),"aria-hidden":!1};return e===n.Passed?r.createElement(w,{...o}):e===n.NotReported?r.createElement(B,{...o}):e===n.Failed?r.createElement($,{...o}):e===n.NotApplicable?r.createElement(P,{...o}):null},p=24,O=11,c=e=>e==="small"?1:2,D=l({root:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",borderWidth:"2px",fontWeight:700,width:({size:e})=>`${p*c(e)}px`,height:({size:e})=>`${p*c(e)}px`,fontSize:({size:e})=>`${O*c(e)}px`}}),d=({className:e,label:t,size:o="small"})=>{const a=D({size:o});return r.createElement("span",{className:i(e,a.root),role:"img","aria-label":`${t} badge`},t)},M=l(e=>({root:{background:({color:t})=>t,color:({color:t})=>e.palette.getContrastText(t),borderColor:e.palette.common.black,borderStyle:"solid","&::after":{position:"absolute",display:"block",content:'""',top:0,left:0,width:"100%",height:"100%",borderRadius:"50%",boxShadow:["inset 0 -0.18em 0 0 rgba(0, 0, 0, 0.25)","inset 0px 0.18em 0px 0px rgba(255, 255, 255, 0.5)","inset 0px 1.3em 0px -0.5em rgba(255, 255, 255, 0.2)"].join(",")}}})),W=({className:e,badge:t,size:o="small"})=>{const a=M({color:t.options.color,size:o});return r.createElement(d,{className:i(e,a.root),size:o,label:`L${t.options.level}`})},q=l({root:{borderColor:"currentColor",borderStyle:"dashed"}}),G=({className:e,size:t="small"})=>{const o=q();return r.createElement(d,{className:i(e,o.root),size:t,label:"NL"})},Q=l(e=>({root:{padding:e.spacing(3)},icon:{display:"none"},message:{padding:0},type:{fontWeight:700}})),_=e=>{const{type:t,...o}=Q();return r.createElement(S,{severity:e.severity,elevation:1,classes:o},r.createElement(y,{variant:"subtitle1",classes:{root:t}},e.title),e.children)},j=({className:e})=>r.createElement("div",{className:e},r.createElement(m,{title:"No certifications available",missing:"data",description:"There are no programs configured that apply to this entity."})),z=({ownerEntityRef:e})=>e?r.createElement(m,{missing:"data",title:"Missing entities",description:r.createElement(r.Fragment,null,"Looks like the group"," ",N(v(e),{defaultKind:"Group"})," ","doesn't own any entities.",r.createElement("br",null),r.createElement("br",null),"Please select another group from the dropdown in the corner of the header.")}):null,Z=k(e=>new x({defaultOptions:{queries:{refetchInterval:6e4,refetchIntervalInBackground:!1,refetchOnWindowFocus:"always",retry:2,retryDelay:t=>{const o=450+Math.ceil(Math.random()*100);return Math.min(o*2**t,3e4)},onError:t=>e.post(t)}}})),H=e=>{const t=A(F),o=Z(t);return r.createElement(I,{client:o},e.children)};export{_ as A,L as C,R as F,W as L,G as N,H as S,j as a,z as b};
|
|
2
|
-
//# sourceMappingURL=SoundcheckQueryClientProvider-f6aa058e.esm.js.map
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import{createApiRef as O,createRouteRef as y,createSubRouteRef as R,createPlugin as D,createApiFactory as E,discoveryApiRef as S,fetchApiRef as $,createRoutableExtension as k,createComponentExtension as A}from"@backstage/core-plugin-api";import{GraphQLClient as _}from"graphql-request";import o from"graphql-tag";var w=(e=>(e.Failed="FAILED",e.NotApplicable="NOT_APPLICABLE",e.NotReported="NOT_REPORTED",e.Passed="PASSED",e))(w||{});const P=o`
|
|
2
|
-
fragment CertificationSummary on Certification {
|
|
3
|
-
entityRef
|
|
4
|
-
program {
|
|
5
|
-
id
|
|
6
|
-
name
|
|
7
|
-
}
|
|
8
|
-
highestLevel {
|
|
9
|
-
ordinal
|
|
10
|
-
name
|
|
11
|
-
description
|
|
12
|
-
badge {
|
|
13
|
-
... on BadgeVariantMedal {
|
|
14
|
-
variant
|
|
15
|
-
options {
|
|
16
|
-
level
|
|
17
|
-
color
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
`,L=o`
|
|
24
|
-
fragment CheckResultSummary on CheckResult {
|
|
25
|
-
id
|
|
26
|
-
name
|
|
27
|
-
result
|
|
28
|
-
timestamp
|
|
29
|
-
}
|
|
30
|
-
`,q=o`
|
|
31
|
-
fragment CheckResultDetails on CheckResult {
|
|
32
|
-
id
|
|
33
|
-
name
|
|
34
|
-
description
|
|
35
|
-
result
|
|
36
|
-
timestamp
|
|
37
|
-
notes
|
|
38
|
-
}
|
|
39
|
-
`,I=o`
|
|
40
|
-
fragment OverviewLevelResult on OverviewLevelResult {
|
|
41
|
-
ordinal
|
|
42
|
-
name
|
|
43
|
-
checks {
|
|
44
|
-
check {
|
|
45
|
-
id
|
|
46
|
-
name
|
|
47
|
-
}
|
|
48
|
-
results {
|
|
49
|
-
id
|
|
50
|
-
entityRef
|
|
51
|
-
result
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
`,M=o`
|
|
56
|
-
fragment HighestLevel on LevelResult {
|
|
57
|
-
entityRef
|
|
58
|
-
ordinal
|
|
59
|
-
name
|
|
60
|
-
badge {
|
|
61
|
-
... on BadgeVariantMedal {
|
|
62
|
-
variant
|
|
63
|
-
options {
|
|
64
|
-
color
|
|
65
|
-
level
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
`,G=o`
|
|
71
|
-
query getAllCertifications($entityRef: String!) {
|
|
72
|
-
certifications(entityRef: $entityRef, includeFilteredChecks: false) {
|
|
73
|
-
...CertificationSummary
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
${P}`,B=o`
|
|
77
|
-
query getCertificationDetails($entityRef: String!, $programId: String!) {
|
|
78
|
-
programCertification(
|
|
79
|
-
entityRef: $entityRef
|
|
80
|
-
programId: $programId
|
|
81
|
-
includeFilteredChecks: false
|
|
82
|
-
) {
|
|
83
|
-
program {
|
|
84
|
-
id
|
|
85
|
-
name
|
|
86
|
-
description
|
|
87
|
-
documentationUrl
|
|
88
|
-
}
|
|
89
|
-
highestLevel {
|
|
90
|
-
name
|
|
91
|
-
ordinal
|
|
92
|
-
badge {
|
|
93
|
-
... on BadgeVariantMedal {
|
|
94
|
-
variant
|
|
95
|
-
options {
|
|
96
|
-
level
|
|
97
|
-
color
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
levels {
|
|
103
|
-
ordinal
|
|
104
|
-
name
|
|
105
|
-
description
|
|
106
|
-
badge {
|
|
107
|
-
... on BadgeVariantMedal {
|
|
108
|
-
variant
|
|
109
|
-
options {
|
|
110
|
-
level
|
|
111
|
-
color
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
certified
|
|
116
|
-
checks {
|
|
117
|
-
...CheckResultSummary
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
${L}`,T=o`
|
|
123
|
-
query getCheckResultDetails($entityRef: String!, $programId: String!, $checkId: String!) {
|
|
124
|
-
checkResult(entityRef: $entityRef, programId: $programId, checkId: $checkId) {
|
|
125
|
-
...CheckResultDetails
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
${q}`,N=o`
|
|
129
|
-
query getFacetsForOwner($ownerEntityRef: String!) {
|
|
130
|
-
facetsForOwner(ownerEntityRef: $ownerEntityRef) {
|
|
131
|
-
types {
|
|
132
|
-
value
|
|
133
|
-
count
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
`,x=o`
|
|
138
|
-
query getProgramOverviewForOwner($ownerEntityRef: String!, $facet: FacetInput) {
|
|
139
|
-
programOverviewForOwner(
|
|
140
|
-
ownerEntityRef: $ownerEntityRef
|
|
141
|
-
facet: $facet
|
|
142
|
-
includeFilteredChecks: false
|
|
143
|
-
) {
|
|
144
|
-
programs {
|
|
145
|
-
program {
|
|
146
|
-
id
|
|
147
|
-
name
|
|
148
|
-
}
|
|
149
|
-
highestLevels {
|
|
150
|
-
...HighestLevel
|
|
151
|
-
}
|
|
152
|
-
levels {
|
|
153
|
-
...OverviewLevelResult
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
entityRefs
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
${M}
|
|
160
|
-
${I}`,V=(e,r,t)=>e();function H(e,r=V){return{getAllCertifications(t,n){return r(i=>e.request(G,t,{...n,...i}),"getAllCertifications","query")},getCertificationDetails(t,n){return r(i=>e.request(B,t,{...n,...i}),"getCertificationDetails","query")},getCheckResultDetails(t,n){return r(i=>e.request(T,t,{...n,...i}),"getCheckResultDetails","query")},getFacetsForOwner(t,n){return r(i=>e.request(N,t,{...n,...i}),"getFacetsForOwner","query")},getProgramOverviewForOwner(t,n){return r(i=>e.request(x,t,{...n,...i}),"getProgramOverviewForOwner","query")}}}var C=(e,r,t)=>{if(!r.has(e))throw TypeError("Cannot "+t)},a=(e,r,t)=>(C(e,r,"read from private field"),t?t.call(e):r.get(e)),l=(e,r,t)=>{if(r.has(e))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(e):r.set(e,t)},m=(e,r,t,n)=>(C(e,r,"write to private field"),n?n.call(e,t):r.set(e,t),t),d,h,c,p,s;const F=O({id:"plugin.soundcheck"}),Q=e=>"response"in e&&"errors"in e.response,W=e=>"response"in e&&"message"in e.response;class U{constructor(r){l(this,d,void 0),l(this,h,void 0),l(this,c,void 0),l(this,p,n=>{var i,u,v;return Q(n)?(v=(u=(i=n.response)==null?void 0:i.errors)==null?void 0:u[0].message)!=null?v:`${n}`:W(n)?n.response.message:`${n}`}),l(this,s,async n=>{try{return await n()}catch(i){throw new Error(`Error from Soundcheck backend: ${a(this,p).call(this,i)}`)}}),m(this,d,r.fetchApi),m(this,h,r.discoveryApi);const t=new _("/graphql",{fetch:async(n,i)=>{const u=`${await a(this,h).getBaseUrl("soundcheck")}${n}`;return a(this,d).fetch(u,i)}});m(this,c,H(t))}async getAllCertifications(r){return a(this,s).call(this,async()=>{const{certifications:t}=await a(this,c).getAllCertifications({entityRef:r});return t})}async getCertificationDetails(r,t){return a(this,s).call(this,async()=>{const{programCertification:n}=await a(this,c).getCertificationDetails({entityRef:r,programId:t});return n})}async getCheckResultDetails(r,t,n){return a(this,s).call(this,async()=>{const{checkResult:i}=await a(this,c).getCheckResultDetails({entityRef:r,programId:t,checkId:n});return i})}async getFacetsForOwner(r){return a(this,s).call(this,async()=>{const{facetsForOwner:t}=await a(this,c).getFacetsForOwner({ownerEntityRef:r});return t})}async getProgramOverviewForOwner(r,t){return a(this,s).call(this,async()=>{const{programOverviewForOwner:n}=await a(this,c).getProgramOverviewForOwner({ownerEntityRef:r,facet:t});return n})}}d=new WeakMap,h=new WeakMap,c=new WeakMap,p=new WeakMap,s=new WeakMap;const g=y({id:"soundcheck-entity"}),z=R({id:"soundcheck-entity-certification-program-redirect",parent:g,path:"/:programId"}),b=R({id:"soundcheck-entity-certification",parent:g,path:"/:programId/:checkId"}),J=y({id:"soundcheck-overview"}),f=D({id:"soundcheck",apis:[E({api:F,deps:{discoveryApi:S,fetchApi:$},factory:e=>new U(e)})],routes:{entityContent:g}}),K=f.provide(k({name:"EntitySoundcheckContent",component:()=>import("./EntitySoundcheckContent-a2d35ddd.esm.js").then(e=>e.EntitySoundcheckContent),mountPoint:g})),X=f.provide(A({name:"EntitySoundcheckCard",component:{lazy:()=>import("./index-5f7bf7f6.esm.js").then(e=>e.EntitySoundcheckCard)}})),Y=f.provide(k({name:"SoundcheckOverviewPage",component:()=>import("./index-72edc5c7.esm.js").then(e=>e.OverviewPage),mountPoint:J}));export{K as E,w as R,Y as S,b as a,f as b,z as c,X as d,F as s};
|
|
161
|
-
//# sourceMappingURL=index-6b006938.esm.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import t,{useState as C,useEffect as v,useMemo as N,useCallback as T,memo as b,Fragment as j}from"react";import{HeaderTabs as A,Link as I,EmptyState as M,Page as z,Header as H,Content as D}from"@backstage/core-components";import{SpotifyLicenseBanner as K}from"@spotify/backstage-plugin-core";import{makeStyles as g,alpha as O,TextField as Q,CircularProgress as V,Tooltip as U,LinearProgress as q,Typography as P,Grid as R}from"@material-ui/core";import{C as J,L as X,S as Y,b as Z,A as ee}from"./SoundcheckQueryClientProvider-f6aa058e.esm.js";import te from"@material-ui/lab/Autocomplete";import{stringifyEntityRef as L,parseEntityRef as x}from"@backstage/catalog-model";import{useApi as h,identityApiRef as re,useRouteRef as _}from"@backstage/core-plugin-api";import{useQuery as $}from"@tanstack/react-query";import{s as G,R as k}from"./index-6b006938.esm.js";import{catalogApiRef as F,entityRouteRef as B,humanizeEntityRef as W}from"@backstage/plugin-catalog-react";import{useSearchParams as ae}from"react-router-dom";import{Skeleton as E}from"@material-ui/lab";import{R as ne}from"./RefetchingIndicator-9e7adc3f.esm.js";import{countBy as oe}from"lodash";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";import"classnames";import"graphql-request";import"graphql-tag";import"react-use/lib/useDebounce";function le(e){const a=h(G);return $(["soundcheck/facets-for-owner",e],async()=>a.getFacetsForOwner(e),{enabled:!!e})}function se(e,a){const n=h(G);return $(["soundcheck/program-overview-for-owner",e,a],async()=>n.getProgramOverviewForOwner(e,a),{enabled:!!e&&!!a?.type})}function ie(){const e=h(re),a=h(F);return $(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:n}=await e.getBackstageIdentity();return(await a.getEntitiesByRefs({entityRefs:n})).items.filter(o=>o?.kind==="Group").map(o=>{var c,i,d,s;return{name:(s=(d=(i=(c=o.spec)==null?void 0:c.profile)==null?void 0:i.displayName)!=null?d:o.metadata.title)!=null?s:o.metadata.name,ref:L(o)}})})}function ce(){const e=h(F);return $(["soundcheck/all-groups"],async()=>{const{items:a}=await e.getEntities({filter:{kind:"Group"}});return a.filter(n=>n?.kind==="Group").map(n=>{var r,l,o,c;return{name:(c=(o=(l=(r=n.spec)==null?void 0:r.profile)==null?void 0:l.displayName)!=null?o:n.metadata.title)!=null?c:n.metadata.name,ref:L(n)}})})}const de=()=>{const[e,a]=ae(),n=Object.fromEntries(e.entries()),[r,l]=C(n);return v(()=>{a(r,{replace:!0})},[r,a]),[r,l]},pe=()=>{const{data:e,isLoading:a,isError:n}=ie(),{data:r,isLoading:l,isError:o}=ce();return{options:N(()=>{const i=[];return e&&i.push(...e.map(({name:d,ref:s})=>({name:d,ref:s,key:"My Groups"}))),r&&i.push(...r.map(({name:d,ref:s})=>({name:d,ref:s,key:"All Groups"}))),i},[e,r]),isLoading:a||l,isError:n||o}},ue=g(e=>({root:{width:"100%",minWidth:250},textField:{"& $notchedOutline":{borderColor:O(e.page.fontColor,.25)},"&:hover $notchedOutline":{borderColor:e.page.fontColor}},input:{backgroundColor:"transparent",color:e.page.fontColor},clearIndicator:{color:e.page.fontColor},popupIndicator:{color:e.page.fontColor},notchedOutline:{}})),me=e=>{const{onChange:a,initialValue:n,setError:r}=e,{options:l,isLoading:o,isError:c}=pe(),i=ue(),[d,s]=C(null);v(()=>{if(!o&&l?.length&&!d){const p=n?l.find(m=>m.ref===n):l[0];p&&(s(p),a?.(p.ref))}},[o,l,d,a,n]);const u=T((p,m)=>{s(m),a?.(m?.ref)},[a,s]);return v(()=>{r?.(c?new Error("Error loading groups"):void 0)},[c,r]),c?null:t.createElement(te,{"aria-label":"Current group",className:i.root,classes:{clearIndicator:i.clearIndicator,popupIndicator:i.popupIndicator},disableClearable:!0,options:l??[],loading:o,groupBy:p=>p.key,value:d,freeSolo:!1,onChange:u,getOptionLabel:p=>p.name,renderInput:p=>t.createElement(Q,{...p,variant:"outlined",placeholder:o?"Loading":"Select a group",className:i.textField,InputProps:{...p.InputProps,className:i.input,classes:{notchedOutline:i.notchedOutline},endAdornment:t.createElement(t.Fragment,null,o?t.createElement(V,{color:"inherit",size:20}):null,p.InputProps.endAdornment)}})})},ge=()=>{const e=[{label:t.createElement(E,{width:180})},{label:t.createElement(E,{width:180})},{label:t.createElement(E,{width:180})},{label:t.createElement(E,{width:180})}];return t.createElement(A,{tabs:e})},fe=g(e=>({root:{borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`},tab:{textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)}})),Ee=({facets:e,onChange:a,type:n})=>{var r,l;const o=fe(),c=T(s=>{var u;a((u=e?.types[s].value)!=null?u:"")},[e?.types,a]);v(()=>{var s;const u=e?.types&&e.types.length>=0,p=!n&&u,m=n&&u&&!e.types.find(({value:y})=>y===n);(p||m)&&a((s=e.types[0])==null?void 0:s.value)},[n,e?.types,a]);const i=(r=e?.types.map(({value:s,count:u})=>({key:s,label:`${s} (${u>50?"50+":u})`,id:s,tabProps:{className:o.tab}})))!=null?r:[];if(!i.length)return null;const d=(l=e?.types.findIndex(s=>s.value===n))!=null?l:-1;return t.createElement(t.Fragment,null,t.createElement(ne,null),t.createElement(A,{onChange:c,tabs:i,selectedIndex:d>-1?d:void 0}))},be=g(e=>({root:{height:"8px",minWidth:"64px",marginLeft:e.spacing(2),borderRadius:"100vh",backgroundColor:e.palette.background.default},bar:{backgroundColor:e.palette.success.main,transition:"none"}})),ye=e=>{var a,n;const r=be(e),l=N(()=>Object.entries(e.progress).reduce((c,[,i])=>c+i,0),[e.progress]);if(l===0)return null;const o=(a=e.progress[k.Passed])!=null?a:0;return t.createElement(U,{arrow:!0,title:`Check passing for ${o} of ${l} ${l===1?"entity":"entities"}`,enterDelay:0,placement:"top"},t.createElement(q,{variant:"determinate",value:((n=e.progress[k.Passed])!=null?n:0)/l*100,classes:{root:r.root,bar:r.bar}}))},ve=g(e=>({root:{padding:0},iconWrapper:{padding:e.spacing(1.5),display:"flex",alignItems:"center",justifyContent:"center"},link:{"&:hover $iconWrapper, &:active $iconWrapper, &:focus $iconWrapper":{backgroundColor:e.palette.infoBackground}},icon:{width:"0.75em",height:"0.75em"},empty:{width:e.spacing(2),height:e.spacing(2)}})),he=b(({programId:e,checkId:a,entityRef:n,result:r,entityRoute:l})=>{const o=ve();if(typeof n!="string")return t.createElement("td",{className:`${o.root}`,"aria-hidden":!0},t.createElement("div",{className:o.iconWrapper},t.createElement("div",{className:o.empty})));const c=t.createElement("div",{className:o.iconWrapper},t.createElement(J,{className:o.icon,result:r??k.NotReported})),i=r&&r===k.NotApplicable?c:t.createElement(I,{className:o.link,to:`${l(x(n))}/soundcheck/${e}/${a}`},c);return t.createElement("td",{className:o.root},i)}),ke=g(e=>({checkNameCell:{padding:0,backgroundColor:e.palette.background.paper},checkNameContent:{padding:`0 ${e.spacing(2)}px`,display:"flex",justifyContent:"space-between",alignItems:"center"},checkNameTypography:{overflow:"hidden",textOverflow:"ellipsis"},checkIndicator:{flexBasis:e.spacing(8)}})),we=b(({programId:e,programName:a,check:n,entityRefs:r,results:l,entityRoute:o})=>{const c=ke(),i=N(()=>oe(l.filter(({result:s})=>s!==k.NotApplicable),"result"),[l]),d=new Map(l.map(s=>[s.entityRef,s.result]));return t.createElement("tr",{"data-testid":"program-check-row"},t.createElement("th",{scope:"row",className:c.checkNameCell,"aria-label":`${n.name} check for ${a} program`},t.createElement("div",{className:c.checkNameContent},t.createElement(P,{className:c.checkNameTypography,variant:"subtitle2",component:"p"},n.name),t.createElement(ye,{className:c.checkIndicator,progress:i}))),r.map((s,u)=>t.createElement(he,{key:u,programId:e,checkId:n.id,entityRef:s,result:typeof s=="string"?d.get(s):void 0,entityRoute:o})))}),Ce=b(({entityRef:e,highestLevels:a})=>{const n=a.find(r=>r.entityRef===e);return n?.badge?t.createElement(X,{badge:n.badge,size:"small"}):null}),Ne=g(e=>({programNameCell:{padding:0,position:"sticky",backgroundColor:e.palette.background.paper},programNameContent:{padding:e.spacing(2)},programNameTypography:{overflow:"hidden",textOverflow:"ellipsis"},badgeCellContent:{display:"flex",justifyContent:"center",alignItems:"center"}})),xe=b(({program:e,entityRefs:a,highestLevels:n})=>{const r=Ne();return t.createElement("tr",{"data-testid":"program-title-row"},t.createElement("th",{scope:"row",className:r.programNameCell},t.createElement("div",{className:r.programNameContent},t.createElement(P,{className:r.programNameTypography,variant:"h5",component:"p"},e.name))),a.map((l,o)=>typeof l!="string"?t.createElement("td",{key:o,"aria-hidden":!0}):t.createElement("td",{key:o,"data-testid":"program-certification-cell"},t.createElement("div",{className:r.badgeCellContent},t.createElement(Ce,{entityRef:l,highestLevels:n})))))}),$e=g(e=>{const a=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{root:{color:O(e.palette.getContrastText(a),.7),backgroundColor:a},levelContent:{padding:`${e.spacing(.5)}px ${e.spacing(2)}px`,backgroundColor:a},levelTypography:{overflow:"hidden",textOverflow:"ellipsis"}}}),Se=b(({level:e,entityRefs:a,programName:n})=>{const r=$e();return t.createElement("tr",{className:r.root,"data-testid":"program-level-row"},t.createElement("th",{scope:"row",className:r.root},t.createElement("div",{className:r.levelContent},t.createElement(P,{className:r.levelTypography,variant:"subtitle2",component:"p","aria-label":`${e.name} for ${n} program`},e.name))),a.map((l,o)=>t.createElement("td",{key:o,className:r.root,"aria-hidden":!0})))}),Ie=({program:e,highestLevels:a,levels:n,entityRefs:r,entityRoute:l})=>t.createElement("tbody",null,t.createElement(xe,{program:e,entityRefs:r,highestLevels:a}),n.map((o,c)=>t.createElement(j,{key:c},t.createElement(Se,{entityRefs:r,level:o,programName:e.name}),o.checks.map(({check:i,results:d},s)=>t.createElement(we,{key:s,check:i,programId:e.id,programName:e.name,entityRefs:r,results:d,entityRoute:l}))))),Pe=g(e=>({root:{position:"sticky",bottom:"-1px",backgroundColor:e.palette.background.default,boxShadow:`0 -1px ${e.palette.divider}`,"& td$cell, & th$cell":{border:0,padding:e.spacing(1)},"& td$cell":{backgroundColor:e.palette.background.default}},row:{boxShadow:`1px 0 ${e.palette.background.default}, -1px 0 ${e.palette.background.default}`},cell:{verticalAlign:"top"},cellInner:{textOrientation:"mixed",writingMode:"vertical-lr",transform:"rotate(-20deg)",transformOrigin:`100% ${e.spacing(1)}px`,wordBreak:"keep-all",fontWeight:"bold",overflow:"hidden",textOverflow:"ellipsis",maxHeight:"15vh"}})),Re=({entityRefs:e})=>{const a=_(B),n=Pe();return t.createElement("tfoot",{className:n.root,"data-testid":"results-table-footer"},t.createElement("tr",{className:n.row},t.createElement("td",{className:n.cell}),e.map((r,l)=>typeof r!="string"?t.createElement("th",{key:l,className:n.cell,"aria-hidden":!0}):t.createElement("th",{scope:"col",key:l,className:n.cell},t.createElement("div",{className:n.cellInner},t.createElement(I,{to:a(x(r))},W(x(r),{defaultKind:"component"})))))))},Te=g(e=>({table:{backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap","& th, & td":{border:`1px solid ${e.palette.divider}`,borderCollapse:"collapse"},paddingBottom:e.spacing(2)},programTitle:{padding:e.spacing(2)},checkResult:{padding:e.spacing(1.5)},title:{padding:`${e.spacing(1)}px ${e.spacing(2)}px`},header:{backgroundColor:e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100]}})),Ae=()=>{const e=Te(),a=new Array(25).fill(void 0),n=new Array(5).fill(void 0),r=new Array(3).fill(void 0);return t.createElement("table",{className:e.table},t.createElement("tbody",null,t.createElement("tr",null,t.createElement("td",{className:e.programTitle},t.createElement(E,{width:180,height:40})),a.map((l,o)=>t.createElement("td",{key:o}))),r.map((l,o)=>t.createElement(t.Fragment,{key:o},t.createElement("tr",{className:e.header},t.createElement("td",{className:e.title},t.createElement(E,{width:180})),a.map((c,i)=>t.createElement("td",{key:i}))),n.map((c,i)=>t.createElement("tr",{key:i},t.createElement("td",{className:e.title},t.createElement(E,{width:240})),a.map((d,s)=>t.createElement("td",{key:s,className:e.checkResult},t.createElement(E,{width:18,height:18,variant:"rect"})))))))))},Oe=g(e=>({root:{width:"100%"},table:{overflow:"auto",backgroundColor:e.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left","& th, & td":{border:`1px solid ${e.palette.divider}`,borderCollapse:"collapse"},"& th:first-of-type":{position:"sticky",left:0,zIndex:1,maxWidth:"60ch"},"& tfoot":{bottom:0,zIndex:1e3},"& tbody td:first-of-type":{border:`1px solid ${e.palette.divider}`,boxShadow:`1px 0 ${e.palette.background.default}, -1px 0 ${e.palette.background.default}`}}})),Le=b(e=>{const{setError:a,type:n,ownerEntityRef:r}=e,l=Oe(),o=_(B),{data:c,isLoading:i,isError:d}=se(r,{type:n});if(v(()=>{a?.(d?new Error("Error loading program overview"):void 0)},[d,a]),i)return t.createElement(Ae,null);if(!c||!r)return null;const{programs:s,entityRefs:u}=c;if(!i&&!s.length)return t.createElement(M,{missing:"data",title:"Missing programs",description:t.createElement(t.Fragment,null,"Looks like the group"," ",W(x(r),{defaultKind:"Group"})," ","doesn't own any ",n," components that have Soundcheck programs set up.",t.createElement("br",null),t.createElement("br",null),"If you're an administrator, you can learn more about configuring and filtering programs in the"," ",t.createElement(I,{to:"https://www.npmjs.com/package/@spotify/backstage-plugin-soundcheck-backend#entity-filter"},"docs"),".")});if(d)return null;const p=u.length>=25?u:[...u,...Array.from({length:25-u.length},()=>{})];return t.createElement("div",{className:l.root},t.createElement("table",{className:l.table,"aria-label":"Check results"},s.map(({program:m,levels:y,highestLevels:w},S)=>t.createElement(Ie,{key:S,program:m,entityRefs:p,levels:y,highestLevels:w,entityRoute:o})),t.createElement(Re,{entityRefs:p})))}),_e=g(e=>({tableContainer:{padding:e.spacing(3),backgroundColor:"transparent"},scrollContainer:{overflow:"scroll",height:`calc(100vh - 86px - 68px - ${e.spacing(3)*2}px)`}})),Ge=()=>{var e;const[a,n]=de(),{group:r,type:l}=a,[o,c]=C(void 0),[i,d]=C(void 0),{data:s,isLoading:u}=le(r),p=o||i,m=f=>{f&&n({...a,group:f})},y=f=>{f&&n({...a,type:f})},w=_e(),S=N(()=>{var f;return((f=s?.types)==null?void 0:f.length)<1?t.createElement(Z,{ownerEntityRef:r}):p?t.createElement(ee,{severity:"error",title:p.message}):t.createElement(Le,{ownerEntityRef:r,type:l,setError:d})},[(e=s?.types)==null?void 0:e.length,p,r,l]);return t.createElement(z,{themeId:"website"},t.createElement(K,{backend:"soundcheck",invalidLicenseMessage:"Submitted check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),t.createElement(H,{title:"Soundcheck"},t.createElement(me,{onChange:m,initialValue:r,setError:c})),t.createElement(D,{noPadding:!0,stretch:!0},t.createElement(R,{container:!0,spacing:0},t.createElement(R,{item:!0,xs:12},u?t.createElement(ge,null):t.createElement(Ee,{facets:s,type:l,onChange:y})),t.createElement(R,{item:!0,xs:12,className:w.tableContainer},t.createElement("div",{className:w.scrollContainer},S)))))},Fe=()=>t.createElement(Y,null,t.createElement(Ge,null));export{Fe as OverviewPage};
|
|
2
|
-
//# sourceMappingURL=index-72edc5c7.esm.js.map
|