@spotify/backstage-plugin-soundcheck 0.4.2 → 0.6.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.
@@ -1,2 +1,2 @@
1
- import t from"react";import{S as o,f as i}from"./index-ab8d0702.esm.js";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"react-router-dom";import"@material-ui/lab";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";const m=({title:r})=>t.createElement(o,null,t.createElement(i,{title:r}));export{m as EntitySoundcheckCard};
2
- //# sourceMappingURL=index-7b7b98c2.esm.js.map
1
+ import t from"react";import{S as o,g as i}from"./index-5913b2d3.esm.js";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"@material-ui/lab";import"react-router-dom";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";const m=({title:r})=>t.createElement(o,null,t.createElement(i,{title:r}));export{m as EntitySoundcheckCard};
2
+ //# sourceMappingURL=index-95047e64.esm.js.map
@@ -0,0 +1,2 @@
1
+ import t,{useState as f,useEffect as P,useCallback as G,createContext as Fe,useContext as Oe,useMemo as H,useReducer as we}from"react";import{useSearchParams as Me,useLocation as $t,Routes as Ft,Route as Ot}from"react-router-dom";import{MarkdownContent as Mt,Link as Vt,DismissableBanner as Bt,Page as Gt,Header as zt,TabbedLayout as ge}from"@backstage/core-components";import{SpotifyLicenseBanner as Wt}from"@spotify/backstage-plugin-core";import{Box as D,Paper as Se,Grid as u,Button as R,Slide as qt,Dialog as Kt,AppBar as Ut,Toolbar as _t,Typography as b,IconButton as de,TextField as z,Collapse as Ht,makeStyles as C,ButtonGroup as Ve,Menu as Be,MenuItem as he,FormControl as jt,InputLabel as Qt,Select as Jt,FormControlLabel as Yt,Checkbox as Xt,Card as Le,ListItemIcon as Y,ListItemText as j,withStyles as Ge,CardContent as ze,CardHeader as Zt,Divider as ea,CardActions as ta,List as Ee,ListItem as X,Tooltip as Z,InputAdornment as We,NativeSelect as qe,Chip as Ne,CircularProgress as aa}from"@material-ui/core";import{makeStyles as ee,createStyles as Ke}from"@material-ui/core/styles";import{a as na,b as Ue,u as ra,U as la,G as oa,O as sa}from"./OverviewPageContent-b39812fb.esm.js";import _e from"@material-ui/icons/Close";import{Controller as me,useWatch as He,useForm as ia}from"react-hook-form";import ca from"@material-ui/icons/AddCircleOutline";import da from"@material-ui/icons/ArrowDropDown";import je from"@material-ui/icons/Delete";import{useApi as I,alertApiRef as ma}from"@backstage/core-plugin-api";import{useQuery as te,useQueryClient as ae,useMutation as ne}from"@tanstack/react-query";import{s as O,Q as $,k as Q,M as re,l as ve,m as pa,S as ua,w as ga}from"./index-5913b2d3.esm.js";import{asArray as ha,parseFactRef as Te,stringifyFactRef as Ea,soundcheckCheckUpdatePermission as va,soundcheckCheckDeletePermission as fa,soundcheckCheckCreatePermission as ya,soundcheckTrackUpdatePermission as ba,soundcheckTrackDeletePermission as Ca,soundcheckTrackCreatePermission as ka}from"@spotify/backstage-plugin-soundcheck-common";import{Autocomplete as Qe,Skeleton as Je}from"@material-ui/lab";import xa from"@material-ui/icons/CheckBox";import wa from"@material-ui/icons/CheckBoxOutlineBlank";import Sa from"@material-ui/icons/ExpandMore";import{catalogApiRef as La,EntityRefLink as Ye}from"@backstage/plugin-catalog-react";import"@backstage/catalog-model";import{v4 as Xe}from"uuid";import Na from"@material-ui/icons/MoreVert";import Ze from"@material-ui/icons/Group";import{usePermission as le}from"@backstage/plugin-permission-react";import Ta from"@material-ui/icons/Search";import{useDrag as Pa,useDrop as Da,DndProvider as Ia}from"react-dnd";import{HTML5Backend as Aa}from"react-dnd-html5-backend";import Ra from"@material-ui/icons/OpenInNew";import $a from"@material-ui/icons/DoneAllRounded";import Fa from"@material-ui/icons/Menu";import et from"@material-ui/icons/DragIndicator";import Oa from"@material-ui/icons/Visibility";import Ma from"@material-ui/icons/Add";import Va from"@material-ui/icons/Remove";import"@material-ui/lab/Autocomplete";import"react-use/lib/useAsync";import"./RefetchingIndicator-026bd666.esm.js";import"react-use/lib/useDebounce";import"lodash";import"react-window";import"graphql-request";import"graphql-tag";import"@material-ui/core/styles/makeStyles";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";function Ba(e,a,n){const r=I(O);return te([$.GetAllPrograms,e,a,n],async()=>r.getAllPrograms(e,a,n))}function Ga(e){const a=I(O);return te([$.GetAllPrograms,e],async()=>a.getAllPrograms([e]))}const za="Error Creating Track";function Wa(){const e=I(O),a=ae(),{showAlert:n}=Q(),r=async l=>{const o=await e.createProgram(l);if(!o)throw new Error("Failed to create track.");return o};return ne([re.CreateProgram],r,{onSuccess:async()=>{await a.invalidateQueries({queryKey:[$.GetAllPrograms]})},onError:l=>{let o="Failed to create track.";l instanceof Error&&(o=l.message),n({severity:"error",title:za,message:o})}})}function tt(e,a,n){const r=I(O);return te([$.GetChecks,e,a,n],async()=>r.getChecks(e,a,n))}const qa=e=>{const[a,n]=f(void 0),[r,l]=f([[]]),[o,s]=f([!1]);P(()=>{a===void 0&&e!=null&&e.length&&n(e)},[e,a]);const i=G((h,g)=>{l(E=>{const v=[...E];return v[g]=[...v[g],h],v}),n(E=>E==null?void 0:E.filter(v=>v.id!==h.id)),s(E=>{if(E[g]){const v=[...E];return v[g]=!1,v}return E})},[]),c=G((h,g)=>{l(E=>{const v=[...E];return v[g]=v[g].filter(k=>k.id!==h.id),v}),n(E=>[...E!=null?E:[],h])},[]),m=G(()=>{l(h=>[...h,[]]),s(h=>[...h,!1])},[]),p=G(h=>{r.length>1&&l(g=>{const E=[...g],v=E.splice(h,1)[0];return n(k=>[...k!=null?k:[],...v]),E})},[r]),d=G(()=>{const h=r.map(g=>g.length===0);return s(h),!h.some(g=>g)},[r]);return{chips:a,inputChipsList:r,handleDrop:i,handleDelete:c,addInput:m,removeInput:p,inputErrors:o,setInputErrors:s,areInputsValid:d,setInputChipsList:l}},Ka=ee(e=>({box:{zIndex:9,position:"fixed",bottom:"0",width:"100%"},footer:{padding:e.spacing(2)}})),at=({onCancel:e,saveButtonText:a,isLoading:n,onSave:r,disableSave:l})=>{const o=Ka();return t.createElement(D,{className:o.box},t.createElement(Se,{elevation:3,className:o.footer},t.createElement(u,{container:!0,item:!0,spacing:2,justifyContent:"space-between"},t.createElement(u,{item:!0},t.createElement(R,{variant:"contained",color:"primary",onClick:e},"Cancel")),t.createElement(u,{item:!0},r&&t.createElement(R,{variant:"contained",color:"primary",disabled:n||l,onClick:r?()=>r():void 0},a)))))},nt=Fe({selectedProgram:null,setSelectedProgram:()=>{},isLoading:!1,setIsLoading:()=>{},showAddModal:!1,setShowAddModal:()=>{}}),Ua=({children:e})=>{const[a,n]=f(null),[r,l]=f(!1),[o,s]=f(!1);return t.createElement(nt.Provider,{value:{selectedProgram:a,setSelectedProgram:n,isLoading:r,setIsLoading:l,showAddModal:o,setShowAddModal:s}},e)},oe=()=>Oe(nt),rt=Fe({selectedCheck:null,setSelectedCheck:()=>{},isLoading:!1,setIsLoading:()=>{},showAddModal:!1,setShowAddModal:()=>{},isReadOnly:!1,showReadOnlyModal:()=>{},hideModal:()=>{}}),_a=({children:e})=>{const[a,n]=f(null),[r,l]=f(!1),[o,s]=f(!1),[i,c]=f(!1),m=d=>{l(!0),n(d)},p=()=>{n(null),l(!1),c(!1)};return t.createElement(rt.Provider,{value:{selectedCheck:a,setSelectedCheck:n,isLoading:o,setIsLoading:s,showAddModal:i,setShowAddModal:c,isReadOnly:r,showReadOnlyModal:m,hideModal:p}},e)},W=()=>Oe(rt),Ha=ee(e=>({appBar:{position:"relative"},title:{flex:1,fontSize:e.typography.h6.fontSize},closeIcon:{marginRight:e.spacing(2)},content:{flex:"1 0 auto",padding:e.spacing(2),overflowX:"hidden",backgroundColor:e.palette.type==="dark"?"#333":e.palette.common.white}})),ja=t.forwardRef(function(e,a){return t.createElement(qt,{direction:"up",ref:a,...e})}),lt=({open:e,handleClose:a,title:n,children:r})=>{const l=Ha();return t.createElement(Kt,{fullScreen:!0,open:e,onClose:a,TransitionComponent:ja},t.createElement(Ut,{className:l.appBar},t.createElement(_t,null,t.createElement(b,{className:l.title},n),t.createElement(de,{edge:"end",color:"inherit",onClick:a,"aria-label":"close",className:l.closeIcon},t.createElement(_e,null)))),t.createElement(D,{className:l.content},r))},pe=({name:e,control:a,error:n,label:r,placeholder:l,disabled:o,rules:s,messages:i,helperText:c,multiline:m,minRows:p})=>t.createElement(me,{name:e,control:a,defaultValue:"",rules:s,render:({field:d})=>t.createElement(z,{...d,fullWidth:!0,multiline:m,minRows:p,placeholder:l,label:r,disabled:o,variant:"outlined",margin:"normal",error:!!n,helperText:n&&i?i[n.type]:c})}),Qa=ee(()=>({section:{gap:0}})),Ja=({control:e,error:a,isLoading:n,disabled:r})=>{const l=Qa();return t.createElement("div",{className:l.section},t.createElement(pe,{name:"checkName",control:e,error:a,label:"Check Name",placeholder:"Choose a name",disabled:n||r,rules:{required:!0,maxLength:100},messages:{required:"This field is required",maxLength:"Input must be less than 100 characters"}}))},Ya=ee(e=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-e.spacing(1)},title:{fontWeight:700,color:e.palette.primary.main}})),fe=({title:e,children:a})=>{const[n,r]=f(!1),l=Ya(),o=()=>{r(!n)};return t.createElement("div",{className:l.root},t.createElement(u,{container:!0,alignItems:"center",spacing:0},t.createElement(u,{item:!0},t.createElement(de,{onClick:o,className:l.button},t.createElement(ca,null))),t.createElement(u,{item:!0},t.createElement(b,{className:l.title},e))),t.createElement(Ht,{in:n},a))},Xa=({control:e,passError:a,failError:n,isLoading:r,disabled:l})=>t.createElement(fe,{title:l?"Pass and fail messages":"Pass and fail messages (optional)"},t.createElement(pe,{name:"passMessage",control:e,error:a,label:"Pass Message",placeholder:"Enter pass message...",disabled:r||l}),t.createElement(pe,{name:"failMessage",control:e,error:n,label:"Fail Message",placeholder:"Enter fail message...",disabled:r||l})),Za=({control:e,error:a,isLoading:n,disabled:r})=>t.createElement(pe,{name:"description",control:e,error:a,label:"Check Description",disabled:n||r,multiline:!0,minRows:4,placeholder:r?void 0:"Enter a brief description about the check",helperText:r?void 0:"Enter a brief description about the check",rules:{required:!0,maxLength:500},messages:{required:"This field is required",maxLength:"Description must be less than 500 characters"}}),en=C(e=>({button:{backgroundColor:e.palette.background.default,color:e.palette.primary.main},label:{paddingRight:e.spacing(2)},icon:{borderLeft:`1px solid ${e.palette.primary.main}`,padding:e.spacing(1,0,0,1)},menu:{marginTop:"52px"}})),tn=({onAddCondition:e,onAddExpression:a})=>{const n=en(),[r,l]=f(null),o=!!r,s=c=>{l(c.currentTarget)},i=()=>{l(null)};return t.createElement(D,null,t.createElement(Ve,{color:"primary"},t.createElement(R,{id:"add-button",className:n.button,"aria-controls":o?"add-menu":void 0,"aria-haspopup":"true","aria-expanded":o?"true":void 0,onClick:s},t.createElement(D,{className:n.label},"Add"),t.createElement(D,{className:n.icon},t.createElement(da,null)))),t.createElement(Be,{id:"add-menu",anchorEl:r,open:o,onClose:i,classes:{paper:n.menu},MenuListProps:{"aria-labelledby":"add-button"}},t.createElement(he,{onClick:()=>{e(),i()}},"Add Condition"),t.createElement(he,{onClick:()=>{a(),i()}},"Add Expression")))},ot=({name:e,control:a,selectLabel:n,options:r,disabled:l})=>t.createElement(me,{name:e,control:a,render:({field:o})=>t.createElement(jt,{variant:"outlined",style:{minWidth:200}},t.createElement(Qt,{id:`${e}-select-label`},n),t.createElement(Jt,{...o,disabled:l,"data-testid":`${e}-select`,labelId:`${e}-select-label`,label:n},r.map(({value:s,label:i})=>t.createElement(he,{key:s,value:s},i))))});var U=(e=>(e.AllOf="all",e.AnyOf="any",e))(U||{});const an={all:"ALL OF",any:"ANY OF"};var st=(e=>(e.Equal="equal",e.NotEqual="notEqual",e.Matches="matches",e.LessThan="lessThan",e.LessThanInclusive="lessThanInclusive",e.GreaterThan="greaterThan",e.GreaterThanInclusive="greaterThanInclusive",e.In="in",e.NotIn="notIn",e.Contains="contains",e.DoesNotContain="doesNotContain",e.SemverGt="semverGt",e.SemverGte="semverGte",e.SemverLt="semverLt",e.SemverLte="semverLte",e.SemverEq="semverEq",e.SemverNeq="semverNeq",e.SemverSatisfies="semverSatisfies",e.SemverGtr="semverGtr",e.SemverLtr="semverLtr",e))(st||{});const nn={equal:"Equals",notEqual:"Does Not Equal",matches:"Matches",semverGt:"Version Greater Than",semverGte:"Version Greater Than or Equals",semverLt:"Version Less Than",semverLte:"Version Less Than or Equals",semverEq:"Version Equals",semverNeq:"Version Not Equals",semverSatisfies:"Version Satisfies Range",semverGtr:"Version Greater Than Range",semverLtr:"Version Less Than Range",lessThan:"Less Than",lessThanInclusive:"Less Than or Equals",greaterThan:"Greater Than",greaterThanInclusive:"Greater Than or Equals",in:"In Array",notIn:"Not in Array",contains:"Contains",doesNotContain:"Does Not Contain"},rn=C(e=>({container:{borderLeft:`1px solid ${e.palette.grey[500]}`,marginLeft:e.spacing(2),padding:e.spacing(2,0,2,0),display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(0)},connector:{borderBottom:`1px solid ${e.palette.grey[500]}`,padding:e.spacing(0),width:"15px",height:"45px"},innerContainer:{backgroundColor:e.palette.background.default,border:`1px solid ${e.palette.grey[500]}`,display:"flex",flexDirection:"column"},inputsContainer:{padding:e.spacing(2),display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",gap:e.spacing(1)},header:{background:"linear-gradient(90deg, #007DFF 0%, #0057B2 100%)",width:"100%",height:"8px"},deleteButton:{marginLeft:e.spacing(1),width:"45px",height:"45px"},deleteIcon:{color:e.palette.type==="dark"?e.palette.background.default:e.palette.common.black}}));function ln(e){const a=I(O);return te([$.GetCollectors,e],async()=>a.getCollectors(e))}function on(e,a){const n=I(O);return te([$.GetFactSchema,e,a],()=>n.getFactSchema(e,a),{enabled:!!e&&!!a})}const sn=(e,a,n,r)=>{const l={};return r&&r.forEach(o=>{var s,i;o&&(l[o.id]={id:o.id,name:(s=o.name)!=null?s:o.id,description:(i=o.description)!=null?i:""})}),e.map((o,s)=>{const i=o.map(c=>l[c.id]);return{name:a[s],description:n[s],ordinal:s+1,checks:i}})},cn=e=>e.map(a=>a.checks.map(n=>{var r;return{id:n.id,label:(r=n.name)!=null?r:n.id}})),dn=e=>{var a;return{id:e.id,name:e.name,description:e.description||"",ownerEntityRef:e.ownerEntityRef,documentationURL:e.documentationURL||"",levels:((a=e.levels)==null?void 0:a.map(n=>({ordinal:n.ordinal,name:n.name||"",description:n.description||"",checks:n.checks.map(r=>({id:r.id,name:r.name,description:r.description}))})))||[],filter:e.filter}},Pe={selectedKinds:"kind",selectedTypes:"spec.type",selectedLifecycles:"spec.lifecycle",selectedOwners:"spec.owner",selectedSystems:"spec.system",selectedTags:"metadata.tags"},it=e=>!e||Object.values(e).every(a=>a.length===0)?void 0:{catalog:Object.entries(e).reduce((a,[n,r])=>{const l=Pe[n];return r.length>0&&(a[l]=r),a},{})},ct=e=>{const a=e?JSON.parse(e):void 0;return Object.keys(Pe).reduce((n,r)=>{var l,o;return n[r]=ha((o=(l=a==null?void 0:a.catalog)==null?void 0:l[Pe[r]])!=null?o:[]),n},{})},mn=(e,a)=>{const n=e?cn(e.levels):[[]],r=n.flat().map(o=>o.id),l=a.filter(o=>!r.includes(o.id));return{inputChips:n,used:l}},De=e=>{var a,n;if(!e)return{};if(e.expressionType){const r={[e.expressionType]:(a=e.conditions)==null?void 0:a.map(l=>({factRef:l.factRef,path:l.path,operator:l.operator,value:l.value}))};return e.expression&&((n=r[e.expressionType])==null||n.push(De(e.expression))),r}if(e.expression)return De(e.expression);if(e.conditions&&e.conditions.length===1){const r=e.conditions[0];return{factRef:r.factRef,path:r.path,operator:r.operator,value:r.value}}return{}},dt=(e,a=!0)=>{var n;if(!e)return{factRef:"",path:"",operator:"",value:"",conditions:[]};const r=e.all||a&&!e.any?U.AllOf:U.AnyOf;return e[r]||a?{factRef:"",path:"",operator:"",value:"",conditions:((n=e[r])!=null?n:[e]).map(l=>l.all||l.any?dt(l,!1):{factRef:l.factRef,path:l.path,operator:l.operator,value:l.value,conditions:[]}),expressionType:r}:{factRef:e.factRef,path:e.path,operator:e.operator,value:e.value,expressionType:U.AllOf,conditions:[]}},pn=e=>({checkName:e.name||"",description:e.description||"",teamOwner:e.ownerEntityRef||"",supportChannel:e.supportChannel||"",expression:dt(e.rule),passMessage:e.passedMessage||void 0,failMessage:e.failedMessage||void 0,filters:ct(e.filter)}),Ie=(e,a="$")=>{const n=[];if(e.type==="object"&&e.properties){const r=e.properties;for(const l in r)if(r.hasOwnProperty(l)){const o=`${a}.${l}`;n.push(o);const s=r[l];n.push(...Ie(s,o))}}if(e.type==="array"&&e.items){const r=`${a}[*]`;n.push(r);const l=Array.isArray(e.items)?e.items:[e.items];for(const o of l)n.push(...Ie(o,r))}return n},un={checkName:"",description:"",teamOwner:"",supportChannel:"",expression:{factRef:"",path:"",operator:"",value:"",expressionType:U.AllOf,conditions:[{factRef:"",path:"",operator:"",value:"",conditions:[]}]},filters:{selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]}},gn=(e,a)=>{const{data:n}=ln(),r=He({control:a,name:`${e}.factRef`}),[l,o]=f(()=>r?Te(r,{defaultSource:"unknown",defaultScope:"default"}):null);P(()=>{o(r&&r!==""?Te(r,{defaultSource:"unknown",defaultScope:"default"}):null)},[r]);const{data:s}=on(l==null?void 0:l.source,l==null?void 0:l.name),i=H(()=>s?Ie(s.schema):[],[s]),c=l&&!i.length,m=H(()=>n==null?void 0:n.flatMap(p=>p.factNames.map(d=>{const h=Te(d,{defaultSource:p.id,defaultScope:"default"});return{label:h.name,value:Ea(h)}})),[n]);return{pathOptions:i,isSchemaLoading:c,factRefOptions:m}},mt=({name:e,label:a,control:n,options:r,getOptionLabel:l,disabled:o})=>t.createElement(me,{name:e,control:n,render:({field:s,fieldState:i})=>t.createElement(Qe,{...s,freeSolo:!0,"data-testid":`${e}-autocomplete`,style:{minWidth:250},disabled:o,options:r,getOptionLabel:l,renderInput:c=>t.createElement(z,{...c,variant:"outlined",label:a,error:i.invalid,helperText:i.error?i.error.message:null}),onChange:(c,m)=>s.onChange(m),onInputChange:(c,m)=>s.onChange(m)})}),hn=({control:e,name:a,handleDelete:n,disabled:r})=>{var l;const o=rn(),s=H(()=>Object.values(st).map(p=>({value:p,label:nn[p]})),[]),{pathOptions:i,isSchemaLoading:c,factRefOptions:m}=gn(a,e);return t.createElement(D,{className:o.container},t.createElement(D,{className:o.connector}),t.createElement(D,{className:o.innerContainer},t.createElement(D,{className:o.header}),t.createElement(D,{className:o.inputsContainer},t.createElement(mt,{name:`${a}.factRef`,control:e,label:"Fact",options:(l=m==null?void 0:m.map(p=>p.value))!=null?l:[],getOptionLabel:p=>{var d,h;return(h=(d=m==null?void 0:m.find(g=>p===g.value))==null?void 0:d.label)!=null?h:p},disabled:r}),t.createElement(mt,{name:`${a}.path`,label:"Path",control:e,disabled:r||!!c,options:i}),t.createElement(ot,{name:`${a}.operator`,control:e,selectLabel:"Operator",options:s,disabled:r}),t.createElement(me,{name:`${a}.value`,control:e,defaultValue:"",render:({field:p})=>t.createElement(z,{...p,label:"Value",variant:"outlined",placeholder:"Enter a value",disabled:r})}))),!r&&t.createElement(de,{onClick:n,className:o.deleteButton,"data-test-id":`${a}-delete-button`},t.createElement(je,{className:o.deleteIcon})))},En=({conditions:e,control:a,name:n,handleDelete:r,disabled:l,setValue:o})=>t.createElement(t.Fragment,null,e.filter(s=>!s.expressionType).map((s,i)=>t.createElement(u,{item:!0,key:i},t.createElement(hn,{control:a,name:`${n}.conditions[${i}]`,"data-testid":`${n}-condition-input`,handleDelete:()=>r(i),disabled:l,setValue:o})))),vn=({expression:e,control:a,name:n,depth:r,getValues:l,setValue:o,trigger:s,disabled:i})=>e?t.createElement(u,{item:!0},t.createElement(pt,{control:a,name:`${n}.expression`,depth:r+1,getValues:l,setValue:o,trigger:s,disabled:i})):null,fn=C(e=>({button:{fontWeight:700,backgroundColor:e.palette.background.default,color:e.palette.primary.main,"&:hover":{backgroundColor:"rgba(46, 119, 208, 0.2)"}},selectedButton:{backgroundColor:"rgba(46, 119, 208, 0.15)"}})),yn=({control:e,name:a,disabled:n})=>{const[r,l]=f(U.AllOf),o=fn(),s=i=>{l(i)};return t.createElement(me,{control:e,name:a,render:({field:{onChange:i}})=>t.createElement(Ve,{color:"primary"},Object.values(U).map(c=>t.createElement(R,{key:c,className:r===c?`${o.selectedButton} ${o.button}`:`${o.button}`,onClick:()=>{s(c),i(c)},disabled:n},an[c])))})},bn=(e,a,n,r)=>({handleAddCondition:async()=>{const l=`${e}`,o=a(l),s=[...(o==null?void 0:o.conditions)||[],{factRef:"",path:"",operator:"",value:""}],i=`${e}.conditions`;n(i,s),await r(i)},handleAddExpression:async()=>{n(`${e}.expression`,{factRef:"",path:"",operator:"",value:"",expressionType:U.AllOf,conditions:[{factRef:"",path:"",operator:"",value:""}]}),await r(`${e}.expression`)},handleDeleteCondition:async l=>{const o=`${e}`,s=[...a(o).conditions||[]];if(s.splice(l,1),s.length===0)n(o,void 0);else{const i=`${e}.conditions`;n(i,s)}await r(o)}}),Cn=ee(e=>({root:{backgroundColor:e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100],border:`1px solid ${e.palette.grey[500]}`,padding:e.spacing(2)},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.grey[500]}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.grey[500]}`,padding:e.spacing(0),width:"15px",height:"20px"}})),pt=({control:e,name:a,depth:n,getValues:r,setValue:l,trigger:o,disabled:s})=>{const i=Cn(),{handleAddCondition:c,handleAddExpression:m,handleDeleteCondition:p}=bn(a,r,l,o),d=`${a}`,h=r(d),g=(h==null?void 0:h.conditions)||[],E=h==null?void 0:h.expression;return t.createElement(D,{className:n>0?i.inner:i.root},n>0&&t.createElement(D,{className:i.connector}),t.createElement(u,{container:!0,spacing:0,direction:"column"},t.createElement(u,{item:!0},t.createElement(yn,{control:e,disabled:s,name:`${a}.expressionType`})),t.createElement(u,{item:!0,container:!0,spacing:0,direction:"column"},t.createElement(En,{handleDelete:p,disabled:s,conditions:g,control:e,name:a,setValue:l}),t.createElement(vn,{expression:E,control:e,name:a,depth:n,getValues:r,setValue:l,trigger:o,disabled:s})),!s&&t.createElement(u,{item:!0},t.createElement(tn,{onAddCondition:c,onAddExpression:m}))))},kn=({control:e,supportContactError:a,disabled:n,isLoading:r,options:l})=>{var o;return t.createElement(fe,{title:n?"Team details":"Team details (optional)"},t.createElement(ot,{name:"teamOwner",control:e,selectLabel:"Check owner",options:(o=l==null?void 0:l.map(s=>({value:s.ref,label:s.name})))!=null?o:[],disabled:n||r}),t.createElement(pe,{name:"supportChannel",control:e,error:a,label:"Support channel",placeholder:"Enter a channel or email to get check support",disabled:n||r,rules:{},messages:{}}))},ut=[{facet:"kind",label:"Kind",stateKey:"selectedKinds"},{facet:"spec.type",label:"Type",stateKey:"selectedTypes"},{facet:"spec.lifecycle",label:"Lifecycle",stateKey:"selectedLifecycles"},{facet:"spec.owner",label:"Owner",stateKey:"selectedOwners"},{facet:"spec.system",label:"System",stateKey:"selectedSystems"},{facet:"metadata.tags",label:"Tags",stateKey:"selectedTags"}],xn=e=>{const a=I(ma),n=I(La);return te([$.GetEntityFacets,e],async()=>{var r;return((r=(await n.getEntityFacets({facets:[e]})).facets[e])==null?void 0:r.map(l=>l.value).sort())||[]},{onError:()=>{a.post({message:`Failed to load facet: ${e}`,severity:"error"})}})},wn=C({formControl:{flexGrow:1}}),gt=({facet:e,label:a,values:n,onChange:r,disabled:l})=>{const o=wn(),{data:s,error:i}=xn(e),c=H(()=>s==null?void 0:s.map(d=>d.toLocaleLowerCase("en-US")),[s]),m=G((d,h)=>{r(c&&c.every(g=>h.includes(g))?void 0:h)},[c,r]),p=G(()=>{r(n!=null&&n.length?n:void 0)},[n,r]);return!(s!=null&&s.length)||!(c!=null&&c.length)||i?t.createElement(b,{color:"error"},"Failed to load facet: ",e):t.createElement(D,{pb:1,pt:1},t.createElement(b,{variant:"subtitle2"},a),t.createElement(Qe,{className:o.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":a,options:c,value:n!=null?n:[],getOptionLabel:d=>{var h;return(h=s[c.indexOf(d)])!=null?h:d},onChange:m,onBlur:p,disabled:l,renderOption:(d,{selected:h})=>{var g;return t.createElement(Yt,{control:t.createElement(Xt,{icon:t.createElement(wa,{fontSize:"small"}),checkedIcon:t.createElement(xa,{fontSize:"small"}),checked:h}),label:(g=s[c.indexOf(d)])!=null?g:d})},size:"small",popupIcon:t.createElement(Sa,{"data-testid":"selected-facets-expand"}),renderInput:d=>t.createElement(z,{...d,variant:"outlined"})}))},Sn=C(e=>({title:{fontWeight:700},container:{padding:e.spacing(0,1.5)},filterContainer:{display:"flex",flexWrap:"wrap",padding:e.spacing(2)}})),Ln=({control:e,setFilters:a,disabled:n})=>{const r=Sn(),l=He({control:e,name:"filters",defaultValue:{selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]}}),o=s=>i=>{a(s,i)};return t.createElement(fe,{title:n?"Filters":"Filters (optional)"},t.createElement(u,{className:r.container,item:!0,xs:12},t.createElement(b,{variant:"body2"},"Apply filters so it's only applicable to relevant entities."),t.createElement(u,{item:!0,xs:12},t.createElement(Se,null,t.createElement(u,{container:!0,className:r.filterContainer,spacing:2},ut.map(s=>t.createElement(u,{item:!0,xs:12,sm:6,md:4,key:s.stateKey},t.createElement(gt,{facet:s.facet,label:s.label,values:l==null?void 0:l[s.stateKey],onChange:o(s.stateKey),disabled:n}))))))))},Nn=({control:e,setValue:a,trigger:n,disabled:r})=>t.createElement(Ln,{control:e,setFilters:async(l,o)=>{a(`filters.${l}`,o!=null?o:[]),await n(`filters.${l}`)},disabled:r}),Tn=e=>{const{selectedCheck:a}=W();let n=un;a&&(n=pn(a));const{control:r,handleSubmit:l,getValues:o,setValue:s,trigger:i,formState:{errors:c}}=ia({defaultValues:n}),{showModal:m}=ve();function p(d){var h,g,E,v,k;if(d===void 0)return!1;let T=!0;if((h=d.conditions)!=null&&h.length&&((g=d.conditions)==null?void 0:g.length)>0)for(const L in d.conditions)d.conditions.hasOwnProperty(L)&&(T=T&&p((E=d.conditions)==null?void 0:E[L]));return d.expression&&(T=T&&p(d.expression)),T?!!(d.value!==""&&d.path!==""&&d.factRef!==""&&d.operator!==""||(v=d.conditions)!=null&&v.length&&((k=d.conditions)==null?void 0:k.length)>0||d.expression!==void 0):!1}return{control:r,handleSubmit:l,getValues:o,setValue:s,trigger:i,errors:c,onSubmit:async d=>{var h,g,E,v,k,T,L,w;const S=o();let N=p(S.expression);if((g=(h=S.expression)==null?void 0:h.conditions)!=null&&g.length&&(N=N&&((v=(E=S.expression)==null?void 0:E.conditions)==null?void 0:v.length)>0),!N){await m({title:"Invalid Rule(s)",message:"The check is invalid as it is either missing a rule or a rule is missing a value.",error:!0});return}if(!await m({title:"Save Check",message:`Are you sure you want to save check: ${d.checkName}?`,error:!1}))return;const M={id:a?a.id:Xe(),ownerEntityRef:(k=d.teamOwner)!=null?k:void 0,name:d.checkName,description:d.description,passedMessage:(T=d.passMessage)!=null?T:void 0,failedMessage:(L=d.failMessage)!=null?L:void 0,rule:De(d.expression),filter:d.filters?it(d.filters):void 0,supportChannel:(w=d.supportChannel)!=null?w:void 0};e(M)}}},Pn=()=>t.createElement("div",{style:{display:"flex",gap:"10px",flexDirection:"column"}},t.createElement(b,{variant:"h6"},"Creating and managing checks"),t.createElement(b,{variant:"body1"},"Checks are entities created from four components: facts, paths, operators and values. These components are then organized via a boolean calculator in the UI."),t.createElement(b,{variant:"body1"},"To create a check, select the components that you want to use, organize them into rules and give your check a meaningful name and a description."),t.createElement(b,{variant:"body1"},"Once created, you will be able to manage and edit your track on its detail page.")),ht=ee(e=>({root:{overflow:"hidden",display:"flex",marginBottom:"53px"},card:{padding:e.spacing(3),display:"flex",gap:e.spacing(2.5)},sectionLabel:{fontWeight:700,margin:e.spacing(2,0),color:e.palette.primary.main}})),Ae=({title:e,open:a,onSave:n})=>{const r=ht(),{hideModal:l,isLoading:o,isReadOnly:s}=W(),{control:i,handleSubmit:c,getValues:m,setValue:p,trigger:d,errors:h,onSubmit:g}=Tn(n),{options:E}=na();return t.createElement(lt,{handleClose:l,title:e,open:a},t.createElement("form",{onSubmit:c(g)},t.createElement(u,{container:!0,spacing:2,className:r.root},t.createElement(u,{item:!0,xs:9},t.createElement(Le,{className:r.card},t.createElement(b,{className:r.sectionLabel,style:{margin:0}},"Check Details"),t.createElement(Ja,{control:i,error:h.checkName,isLoading:o,disabled:s}),t.createElement(Za,{control:i,error:h.description,isLoading:o,disabled:s}),t.createElement(kn,{control:i,disabled:s,isLoading:o,options:E}),t.createElement(b,{className:r.sectionLabel},"Rules"),t.createElement(pt,{control:i,getValues:m,setValue:p,trigger:d,disabled:s,name:"expression",depth:0}),t.createElement(Nn,{control:i,setValue:p,trigger:d,disabled:s}),t.createElement(Xa,{control:i,passError:h.passMessage,failError:h.failMessage,isLoading:o,disabled:s}))),t.createElement(u,{item:!0,xs:3},t.createElement(Pn,null))),t.createElement(u,{container:!0,spacing:4,className:r.root},t.createElement(at,{onCancel:l,saveButtonText:"Save Check",isLoading:o,onSave:s?void 0:c(g)}))))},Dn="Error Creating Check";function In(){const e=I(O),a=ae(),{showAlert:n}=Q(),r=async l=>{const o=await e.updateCheck(l);if(!o)throw new Error("Failed to update check.");return o};return ne([re.UpdateCheck],r,{onSuccess:()=>{a.invalidateQueries({queryKey:[$.GetChecks]})},onError:l=>{let o="Failed to update check.";l instanceof Error&&(o=l.message),n({severity:"error",title:Dn,message:o})}})}const An=()=>{const{selectedCheck:e,hideModal:a}=W(),{setIsLoading:n}=W(),{mutateAsync:r,isLoading:l}=In();return P(()=>{n(l)},[n,l]),t.createElement(Ae,{title:"Edit a Check",open:!!e,onSave:async o=>{const s=await r(o);s&&(a(),window.open(`/soundcheck/checks/${s.id}`,"_self"))}})},Rn="Error Creating Check";function $n(){const e=I(O),a=ae(),{showAlert:n}=Q(),r=async l=>{const o=await e.createCheck(l);if(!o)throw new Error("Failed to create check.");return o};return ne([re.CreateCheck],r,{onSuccess:()=>{a.invalidateQueries({queryKey:[$.GetChecks]})},onError:l=>{let o="Failed to create check.";l instanceof Error&&(o=l.message),n({severity:"error",title:Rn,message:o})}})}const Fn=()=>{const{hideModal:e,showAddModal:a,setIsLoading:n}=W(),{mutateAsync:r,isLoading:l}=$n();return P(()=>{n(l)},[n,l]),t.createElement(Ae,{title:"Create a Check",open:a,onSave:async o=>{const s=await r(o);s&&(e(),window.open(`/soundcheck/checks/${s.id}`,"_self"))}})},On=({handleDelete:e})=>{const[a,n]=f(null),r=!!a,l=s=>{s.stopPropagation(),n(s.currentTarget)},o=s=>{s.stopPropagation(),n(null)};return t.createElement(t.Fragment,null,t.createElement(de,{"aria-label":"summary-card-actions",id:"summary-card-action-menu-button","aria-controls":r?"summary-card-action-menu":void 0,"aria-expanded":r?"true":void 0,"aria-haspopup":"true",onClick:l},t.createElement(Na,null)),t.createElement(Be,{id:"summary-card-action-menu",anchorEl:a,open:r,onClose:o,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{"aria-labelledby":"summary-card-action-menu-button"}},e&&t.createElement(he,{"data-testid":"summary-card-action-delete",onClick:s=>{e(s),o(s)}},t.createElement(Y,null,t.createElement(je,{fontSize:"small"})),t.createElement(j,null,"Delete"))))},Mn=Ge(e=>Ke({root:{width:"100%",height:"100%",minHeight:"385px",display:"flex",flexDirection:"column",padding:e.spacing(2),position:"relative"}}))(Le),Vn=Ge(()=>Ke({root:{display:"flex",flexDirection:"column",flex:1,gap:"3px"}}))(ze),Bn=C(e=>({root:{position:"relative",height:"100%"},cardSection:{marginBottom:e.spacing(2)},summaryDescription:{maxHeight:"150px",overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:6,WebkitBoxOrient:"vertical",wordBreak:"break-word"}})),Et=({title:e,description:a,children:n,handleDelete:r,handleEdit:l,handleView:o})=>{const s=Bn();return t.createElement(Mn,null,t.createElement(Zt,{title:e,action:r&&t.createElement(On,{handleDelete:r})}),t.createElement(Vn,null,t.createElement("div",{className:s.cardSection},t.createElement("div",{className:s.summaryDescription},t.createElement(Mt,{content:a!=null?a:""}))),n&&t.createElement("div",{className:s.cardSection},n)),t.createElement(ea,null),t.createElement(ta,null,t.createElement(R,{size:"small",color:"primary",role:"link",onClick:l||o},l?"Edit":"View")))},Gn="Error Deleting Check";function zn(){const e=I(O),a=ae(),{showAlert:n}=Q(),r=async l=>{const o=await e.deleteCheck(l);if(!o)throw new Error(`Failed to delete check ${l}`);return o};return ne([re.DeleteCheck],r,{onSuccess:()=>{a.invalidateQueries({queryKey:[$.GetChecks]})},onError:(l,o)=>{let s=`Failed to delete check ${o}`;l instanceof Error&&(s=l.message),n({severity:"error",title:Gn,message:s})}})}const Wn=C(e=>({root:{position:"relative",height:"100%"},cardSection:{marginBottom:e.spacing(2)},listItem:{padding:0},listItemText:{margin:0}})),qn=({check:e})=>{var a;const n=Wn();return t.createElement(Ee,{dense:!0,disablePadding:!0,className:n.cardSection},t.createElement(b,{variant:"overline",color:"textSecondary"},"Check Details"),t.createElement(X,{disableGutters:!0,className:n.listItem},t.createElement(Z,{title:"Owner"},t.createElement(Y,null,t.createElement(Ze,{color:"action",fontSize:"small"}))),t.createElement(j,{className:n.listItemText,primary:t.createElement(Ye,{entityRef:(a=e.ownerEntityRef)!=null?a:"No Owner"})})))},Kn=({check:e})=>{const{id:a,name:n,description:r,isEditable:l,ownerEntityRef:o}=e,{loading:s,allowed:i}=le({permission:va,resourceRef:a}),{loading:c,allowed:m}=le({permission:fa,resourceRef:a}),{showModal:p}=ve(),{mutate:d}=zn(),{showReadOnlyModal:h,setSelectedCheck:g}=W(),E=G(async()=>{await p({title:"Delete Check",message:`Are you sure you want to delete the check '${n!=null?n:a}'?`})&&d(a)},[p,n,d,a]);return t.createElement(Et,{title:n!=null?n:a,description:r,children:o&&t.createElement(qn,{check:e}),handleView:()=>h(e),handleEdit:l&&!s&&i?()=>g(e):void 0,handleDelete:l&&!c&&m?E:void 0})},Un=()=>t.createElement(t.Fragment,null,Array.from({length:10},(e,a)=>t.createElement(u,{key:`loading-${a}`,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem"},t.createElement(Je,{variant:"rect",height:385})))),_n=C(()=>({searchIcon:{opacity:".5"},clearButton:{height:"36px",width:"36px"}})),vt=({searchTerm:e,setSearchTerm:a,showClear:n=!0,placeholder:r="Search...",...l})=>{const o=_n(),s=c=>{a(c.target.value)},i=()=>{a("")};return t.createElement(z,{...l,fullWidth:!0,placeholder:r,value:e,onChange:s,InputProps:{startAdornment:t.createElement(We,{position:"start"},t.createElement(Ta,{className:o.searchIcon,"data-testid":"search-icon"})),endAdornment:n&&e?t.createElement(We,{position:"end"},t.createElement(de,{edge:"end",onClick:i,className:o.clearButton},t.createElement(_e,null))):null}})},Hn=C(()=>({searchbar:{maxWidth:"350px"},filters:{display:"flex",alignItems:"center"},dropdownFilters:{margin:"0 15px",display:"flex",alignItems:"center"},selectHolder:{marginLeft:"10px"}})),ft=({searchPlaceholder:e,isLoading:a,searchTerm:n,setSearchTerm:r,filterAlpha:l,handleAlphabeticalFilterChange:o,filterOwner:s,handleOwnerFilterChange:i,owners:c})=>{const m=Hn();return t.createElement(u,{item:!0,xs:9,className:m.filters},t.createElement(vt,{searchTerm:n,disabled:a,setSearchTerm:r,placeholder:e||"Search",variant:"outlined",size:"small",className:m.searchbar}),t.createElement("div",{className:m.dropdownFilters},t.createElement(b,null,"Sort by: "),t.createElement(qe,{className:m.selectHolder,value:l,onChange:o},t.createElement("option",{value:"default"},"Default"),t.createElement("option",{value:"ascending"},"Name A-Z"),t.createElement("option",{value:"descending"},"Name Z-A"))),t.createElement("div",{className:m.dropdownFilters},t.createElement(b,null,"Filter by owner: "),t.createElement(qe,{className:m.selectHolder,value:s,onChange:i},t.createElement("option",{key:"all",value:"all"},"All"),c==null?void 0:c.map((p,d)=>t.createElement("option",{key:p+d,value:p},p)))))},jn=(e,a)=>e==null?void 0:e.sort((n,r)=>{var l,o,s,i;const c=(o=(l=n==null?void 0:n.name)==null?void 0:l.toLocaleLowerCase())!=null?o:n==null?void 0:n.id.toLocaleLowerCase(),m=(i=(s=r==null?void 0:r.name)==null?void 0:s.toLocaleLowerCase())!=null?i:r==null?void 0:r.id.toLocaleLowerCase();return!c||!m?0:c<m?a==="ascending"?-1:1:c>m?a==="ascending"?1:-1:0}),yt=e=>{const a=e==null?void 0:e.map(n=>n==null?void 0:n.ownerEntityRef);return[...new Set(a)]},se=({searchTermProp:e,filterAlphaProp:a,filterOwnerProp:n,checks:r,tracks:l})=>{var o,s;const i=r||l||[],c=(o=i==null?void 0:i.filter)==null?void 0:o.call(i,p=>{var d;return((d=p==null?void 0:p.name)!=null?d:p==null?void 0:p.id).toLocaleLowerCase().includes(e.toLocaleLowerCase())}),m=n&&n!=="all"?(s=c==null?void 0:c.filter)==null?void 0:s.call(c,p=>{var d;return((d=p==null?void 0:p.ownerEntityRef)==null?void 0:d.toLowerCase())===n.toLowerCase()}):c;return a==="default"?m:jn(m!=null?m:[],a)},Qn=C(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end"},header:{padding:e.spacing(0,0,1)}})),Jn=({checksPerPage:e,currentCursor:a})=>{const n=Qn(),[r,l]=f(a),{data:o,isLoading:s}=tt(void 0,e,r),{loading:i,allowed:c}=le({permission:ya}),[m,p]=f(o);P(()=>{o&&p(()=>{var x;return{endCursor:o.endCursor,totalCount:o.totalCount,hasNextPage:(x=o==null?void 0:o.hasNextPage)!=null?x:!1,edges:o.edges}})},[o]);const d=m==null?void 0:m.edges[(m==null?void 0:m.edges.length)-1],h=m==null?void 0:m.edges.map(x=>x.checker),{setShowAddModal:g}=W(),[E,v]=f(),[k,T]=f(""),[L,w]=f("default"),[S,N]=f("all"),[M,q]=f([]),ie=x=>{const A=se({searchTermProp:k,filterAlphaProp:x.target.value,filterOwnerProp:S,checks:h!=null?h:[]});w(x.target.value),v(A)},B=x=>{const A=se({searchTermProp:k,filterAlphaProp:L,filterOwnerProp:x.target.value,checks:h!=null?h:[]});N(x.target.value),v(A)};return P(()=>{const x=m==null?void 0:m.edges.map(_=>_.checker),A=yt(x!=null?x:[]);v(x),q(A!=null?A:[])},[s,m]),P(()=>{const x=m==null?void 0:m.edges.map(_=>_.checker),A=se({searchTermProp:k,filterAlphaProp:L,filterOwnerProp:S,checks:x!=null?x:[]});v(A)},[k,L,S,m]),t.createElement(u,{container:!0,direction:"row"},t.createElement(u,{container:!0,spacing:4,className:n.header},t.createElement(ft,{searchPlaceholder:"Search available checks",isLoading:s,searchTerm:k,setSearchTerm:T,filterAlpha:L,handleAlphabeticalFilterChange:ie,filterOwner:S,handleOwnerFilterChange:B,owners:M}),t.createElement(u,{item:!0,xs:3},t.createElement("div",{className:n.headerButtons},!i&&t.createElement(R,{disabled:!c,variant:"contained",color:"primary",onClick:()=>g(!0)},"Create Check")))),t.createElement(u,{container:!0,spacing:4,role:"list","aria-label":"checks"},s?t.createElement(Un,null):E==null?void 0:E.map(x=>t.createElement(u,{key:x.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},t.createElement(Kn,{check:x})))),(m==null?void 0:m.hasNextPage)&&t.createElement(R,{onClick:()=>l(d==null?void 0:d.cursor)},"Load More Checks"))},Yn=()=>{const{selectedCheck:e}=W();return t.createElement(Ae,{title:"Check Details",open:!!e,onSave:()=>{}})},Xn=C(e=>({checksPageContainer:{padding:e.spacing(3)}})),Zn=()=>{const e=Xn(),[a]=Me(),n=a.get("checksPerPage"),r=n?parseInt(n,10):10,{selectedCheck:l,showAddModal:o,isReadOnly:s}=W();return t.createElement("div",{className:e.checksPageContainer},t.createElement(Jn,{checksPerPage:r}),o&&t.createElement(Fn,null),l&&!s&&t.createElement(An,null),l&&s&&t.createElement(Yn,null))},er=()=>t.createElement(_a,null,t.createElement(Zn,null)),tr=C(e=>({root:{position:"relative",height:"100%"},cardSection:{marginBottom:e.spacing(2)},listItem:{padding:0},listItemText:{margin:0}})),ar=({program:e})=>{var a,n,r;const l=tr(),o=(n=(a=e.levels)==null?void 0:a.length)!=null?n:0,s=(r=e.levels)==null?void 0:r.reduce((i,c)=>i+c.checks.length,0);return t.createElement(Ee,{dense:!0,disablePadding:!0,className:l.cardSection},t.createElement(b,{variant:"overline",color:"textSecondary"},"Track Details"),t.createElement(X,{disableGutters:!0,className:l.listItem},t.createElement(Z,{title:"Levels"},t.createElement(Y,null,t.createElement(Fa,{color:"action",fontSize:"small"}))),t.createElement(j,{className:l.listItemText,primary:t.createElement(b,{variant:"body2",color:"textSecondary"},`${o} ${o===1?"Level":"Levels"}`)})),t.createElement(X,{disableGutters:!0,className:l.listItem},t.createElement(Z,{title:"Checks"},t.createElement(Y,null,t.createElement($a,{color:"action",fontSize:"small"}))),t.createElement(j,{className:l.listItemText,primary:t.createElement(b,{variant:"body2",color:"textSecondary"},`${s} ${s===1?"Check":"Checks"}`)})),e.documentationURL&&t.createElement(X,{disableGutters:!0,className:l.listItem},t.createElement(Z,{title:"Documentation"},t.createElement(Y,null,t.createElement(Ra,{color:"action",fontSize:"small"}))),t.createElement(j,{className:l.listItemText,primary:t.createElement(Vt,{to:e.documentationURL,target:"_blank",rel:"noopener noreferrer"},"Learn more")})),t.createElement(X,{disableGutters:!0,className:l.listItem},t.createElement(Z,{title:"Owner"},t.createElement(Y,null,t.createElement(Ze,{color:"action",fontSize:"small"}))),t.createElement(j,{className:l.listItemText,primary:t.createElement(Ye,{entityRef:e.ownerEntityRef})})))},nr="Error Deleting Track";function rr(){const e=I(O),a=ae(),{showAlert:n}=Q(),r=async l=>{const o=await e.deleteProgram(l);if(!o)throw new Error(`Failed to delete track ${l}`);return o};return ne([re.DeleteProgram],r,{onSuccess:()=>{a.invalidateQueries({queryKey:[$.GetAllPrograms]})},onError:(l,o)=>{let s=`Failed to delete track ${o}`;l instanceof Error&&(s=l.message),n({severity:"error",title:nr,message:s})}})}const lr=({summary:e})=>{const{loading:a,allowed:n}=le({permission:ba,resourceRef:e.id}),{loading:r,allowed:l}=le({permission:Ca,resourceRef:e.id}),{showModal:o}=ve(),{mutate:s}=rr(),{setSelectedProgram:i}=oe(),c=G(async()=>{await o({title:"Delete Track",message:`Are you sure you want to delete track ${e.name}?`})&&s(e.id)},[o,e.id,e.name,s]);return t.createElement(Et,{title:e.name,description:e.description,children:t.createElement(ar,{program:e}),handleView:()=>{i(e)},handleEdit:e.isEditable&&!a&&n?()=>{i(e)}:void 0,handleDelete:e.isEditable&&!r&&l?c:void 0})},or=()=>t.createElement(t.Fragment,null,Array.from({length:6},(e,a)=>t.createElement(u,{key:`loading-${a}`,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem"},t.createElement(Je,{variant:"rect",height:385})))),sr=C(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end"},header:{padding:e.spacing(0,0,1)},pagination:{display:"flex",width:"100%",justifyContent:"space-between"}})),ir=({programsPerPage:e,currentCursor:a})=>{var n;const r=sr(),{loading:l,allowed:o}=le({permission:ka}),{setShowAddModal:s}=oe(),[i,c]=f(a),[m,p]=f([]),{data:d,isLoading:h}=Ba(void 0,e,i),[g,E]=f(d);P(()=>{d&&E(()=>{var y;return{endCursor:d.endCursor,totalCount:d.totalCount,hasNextPage:(y=d==null?void 0:d.hasNextPage)!=null?y:!1,edges:d.edges}})},[d]);const v=(n=g==null?void 0:g.edges)==null?void 0:n.map(y=>y==null?void 0:y.program),k=g==null?void 0:g.edges[(g==null?void 0:g.edges.length)-1],{userEntityRef:T}=Ue(),{showAlert:L}=Q(),[w,S]=f(),[N,M]=f(""),[q,ie]=f("default"),[B,x]=f("all"),[A,_]=f([]),ye=y=>{const F=se({searchTermProp:N,filterAlphaProp:y.target.value,filterOwnerProp:B,tracks:v!=null?v:[]});ie(y.target.value),S(F)},ue=y=>{const F=se({searchTermProp:N,filterAlphaProp:q,filterOwnerProp:y.target.value,tracks:v!=null?v:[]});x(y.target.value),S(F)};P(()=>{const y=g==null?void 0:g.edges.map(ce=>ce.program),F=yt(y!=null?y:[]);S(y),_(F!=null?F:[])},[h,g]),P(()=>{const y=g==null?void 0:g.edges.map(ce=>ce.program),F=se({searchTermProp:N,filterAlphaProp:q,filterOwnerProp:B,tracks:y!=null?y:[]});S(F)},[N,q,B,g]);const be=()=>{p(y=>[...y,i]),c(k==null?void 0:k.cursor)},Ce=()=>{c(m[m.length-1]),p(y=>y.slice(0,-1))},ke=()=>{T?s(!0):L({severity:"error",title:"User Error",message:"Logged in user has not been found in Catalog. Unable to create a Track at this time"})};return t.createElement(u,{container:!0,direction:"row"},t.createElement(u,{container:!0,spacing:4,className:r.header},t.createElement(ft,{searchPlaceholder:"Search available tracks",isLoading:h,searchTerm:N,setSearchTerm:M,filterAlpha:q,handleAlphabeticalFilterChange:ye,filterOwner:B,handleOwnerFilterChange:ue,owners:A}),t.createElement(u,{item:!0,xs:3},t.createElement("div",{className:r.headerButtons},!l&&t.createElement(R,{disabled:!o,variant:"contained",color:"primary",onClick:()=>ke()},"Create Track")))),t.createElement(u,{container:!0,spacing:4,role:"list","aria-label":"tracks"},h?t.createElement(or,null):w==null?void 0:w.map(y=>t.createElement(u,{key:y.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},t.createElement(lr,{summary:y})))),((g==null?void 0:g.hasNextPage)||(m==null?void 0:m.length)>0)&&t.createElement("div",{className:r.pagination},t.createElement(R,{disabled:(m==null?void 0:m.length)<=0,onClick:Ce},"Load Previous Tracks"),t.createElement(R,{disabled:!(g!=null&&g.hasNextPage),onClick:be},"Load Next Tracks")))},cr=C(e=>({titleInput:{marginBottom:e.spacing(1)},title:{fontWeight:700}})),bt=({programName:e,programNameError:a,handleProgramNameChange:n,disabled:r})=>{const l=cr();return t.createElement(u,{item:!0,xs:12},t.createElement(z,{fullWidth:!0,placeholder:"Untitled track",value:e,onChange:n,disabled:r,className:l.titleInput,variant:"outlined",size:"small",margin:"normal",error:a,helperText:a?"Track name must be at least 1 character and less than 100 characters":""}))},Ct=C(e=>{const a=e.palette.type==="dark",n=a?e.palette.common.white:e.palette.common.black,r=a?e.palette.grey[700]:e.palette.common.white,l=a?e.palette.grey[500]:e.palette.grey[300],o=a?e.palette.common.white:e.palette.common.black;return{chip:{width:"100%",height:"36px",color:n,justifyContent:"space-between",background:r,border:`1px solid ${l}`,borderRadius:4,boxShadow:"0px 2px 5px rgba(0, 0, 0, 0.1)",cursor:"move","& *":{fontWeight:700},"&:focus":{background:r,borderColor:o,"& $icon":{color:e.palette.primary.main}}},icon:{},deleteButton:{marginRight:"auto"}}}),dr=({chip:e,disabled:a})=>{var n;const[r,l]=Pa(()=>({type:"chip",item:{id:e.id,label:e.label},collect:s=>({isDragging:s.isDragging()})})),o=Ct();return t.createElement(Ne,{ref:l,label:e.label,className:o.chip,icon:t.createElement(et,{"data-testid":"drag-indicator-icon"}),disabled:a,onDelete:()=>{},deleteIcon:t.createElement(Z,{title:(n=e.description)!=null?n:""},t.createElement(Oa,{className:o.icon,"data-testid":"visibility-icon"}))})},kt=C(e=>({columnHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},subtitle:{color:e.palette.primary.main,fontWeight:"bold"},chipContainer:{display:"flex",flexDirection:"column",alignItems:"flex-start",padding:e.spacing(1),gap:e.spacing(1)},loadingContainer:{marginTop:e.spacing(1),display:"flex",justifyContent:"center",alignItems:"center",height:"100%"}})),mr=()=>{const e=kt();return t.createElement(u,{container:!0,className:e.loadingContainer},t.createElement(aa,null))},pr=({chips:e,disabled:a})=>t.createElement(t.Fragment,null,e.map(n=>t.createElement(dr,{disabled:a,key:n.id,chip:n}))),ur=()=>t.createElement(b,{variant:"body1",color:"textSecondary"},"There are no matches."),gr=({isLoading:e,chips:a=[],disabled:n})=>{const r=kt(),[l,o]=f(""),s=H(()=>a.filter(m=>m.label.toLowerCase().includes(l.toLowerCase())),[a,l]),i=a.length>0||l,c=()=>{if(e)return t.createElement(mr,null);if(s.length>0)return t.createElement(pr,{disabled:n!=null?n:!1,chips:s});if(i)return t.createElement(ur,null)};return t.createElement(u,{container:!0},t.createElement(u,{item:!0,xs:12,className:r.columnHeader},t.createElement(b,{className:r.subtitle},"Checks")),t.createElement(u,{item:!0,xs:12},t.createElement(vt,{searchTerm:l,disabled:e||n,setSearchTerm:o,placeholder:"Search available checks",variant:"outlined",size:"small"})),t.createElement(u,{item:!0,className:r.chipContainer,xs:12},c()))},hr=C(e=>({button:{border:"none",fontWeight:700,fontSize:e.typography.subtitle2.fontSize,lineHeight:"19px",color:e.palette.primary.main,textTransform:"none"}})),xt=({label:e,...a})=>{const n=hr();return t.createElement(R,{className:n.button,...a},e)},Er=C(e=>({input:{border:`1px solid ${e.palette.grey[600]}`,borderRadius:4,padding:e.spacing(1),minHeight:80},hoverBackground:{background:e.palette.type==="dark"?e.palette.grey[600]:e.palette.grey[200]},normalBackground:{background:e.palette.type==="dark"?e.palette.grey[700]:e.palette.common.white},error:{border:"1px solid red"},chipContainer:{display:"flex",flexDirection:"column",fontWeight:"bold",fontSize:e.typography.pxToRem(16),color:e.palette.grey[600]}})),vr=({chips:e,onDelete:a,onDrop:n,error:r=!1,placeholder:l="",disabled:o})=>{const s=Er(),i=Ct(),[{isOver:c},m]=Da(()=>({accept:"chip",drop:p=>{n(p)},collect:p=>({isOver:p.isOver()})}));return t.createElement("div",{ref:m,className:`${s.input} ${r?s.error:""} ${c?s.hoverBackground:s.normalBackground}`,"data-testid":"droppable-input"},t.createElement("div",{className:s.chipContainer},e!=null&&e.length?e.map(p=>t.createElement(Ne,{key:p.id,label:p.label,className:i.chip,icon:t.createElement(et,null),style:{cursor:"pointer"},onDelete:()=>a(p),disabled:o})):l))},fr=C(e=>({inputBase:{fontSize:e.typography.subtitle1.fontSize,fontWeight:700}})),yr=({levelName:e,handleLevelNameChange:a,disabled:n})=>{const r=fr();return t.createElement(z,{fullWidth:!0,placeholder:"Untitled level",value:e,size:"small",variant:"outlined",onChange:a,label:"Level Name",disabled:n,InputProps:{classes:{input:r.inputBase}}})},br=C(e=>({inputBase:{fontSize:e.typography.fontSize,fontWeight:"normal"}})),Cr=({levelDescription:e,levelNameLabel:a,handleLevelDescriptionChange:n,disabled:r})=>{const l=br();return t.createElement(z,{fullWidth:!0,placeholder:"Enter description here",multiline:!0,value:e,size:"small",variant:"outlined",label:`${a} Description`,onChange:n,disabled:r,InputProps:{classes:{input:l.inputBase}}})},kr=C(e=>({columnHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},subtitle:{fontWeight:"bold",color:e.palette.primary.main},levelHeader:{display:"flex",alignItems:"center"},removeButton:{minWidth:150}})),xr=({inputChipsList:e,handleDelete:a,handleDrop:n,addInput:r,removeInput:l,levelsErrors:o,levelNames:s,levelDescriptions:i,handleLevelNameChange:c,handleLevelDescriptionChange:m,disabled:p})=>{const d=kr();return t.createElement(u,{container:!0},t.createElement(u,{item:!0,xs:12,className:d.columnHeader},t.createElement(b,{className:d.subtitle},"Levels"),t.createElement(xt,{label:"Add Level",startIcon:t.createElement(Ma,null),onClick:r,disabled:p})),t.createElement(u,{container:!0,item:!0,spacing:5},e.map((h,g)=>t.createElement(u,{container:!0,item:!0,xs:12,key:g,spacing:2},t.createElement(u,{item:!0,xs:12,className:d.levelHeader},t.createElement(u,{container:!0,spacing:1},t.createElement(u,{item:!0,xs:!0},t.createElement(yr,{levelName:s[g],handleLevelNameChange:E=>c(E.target.value,g),disabled:p!=null?p:!1})),e.length>1&&t.createElement(u,{item:!0,className:d.removeButton},t.createElement(xt,{label:"Remove Level",startIcon:t.createElement(Va,null),onClick:()=>l(g),disabled:p})))),t.createElement(u,{item:!0,xs:12},t.createElement(vr,{chips:h,onDelete:E=>a(E,g),onDrop:E=>n(E,g),error:o[g],placeholder:"Drag and drop checks here to include them in this level",disabled:p})),t.createElement(u,{item:!0,xs:12},t.createElement(Cr,{levelDescription:i[g],levelNameLabel:s[g],handleLevelDescriptionChange:E=>m(E.target.value,g),disabled:p!=null?p:!1}))))))},wr=C(e=>({titleInput:{marginBottom:e.spacing(1)},regularFontSize:{fontSize:e.typography.fontSize},title:{fontWeight:700,fontSize:e.typography.fontSize}})),wt=({programDescription:e,programDescriptionError:a,handleProgramDescriptionChange:n,disabled:r})=>{const l=wr();return t.createElement(u,{item:!0,xs:12},t.createElement(z,{fullWidth:!0,placeholder:"Example: Make sure the project has a ReadMe file and is using the latest version of JavaScript",value:e,onChange:n,disabled:r,className:l.titleInput,minRows:4,variant:"outlined",size:"small",margin:"normal",multiline:!0,InputProps:{classes:{input:l.regularFontSize}},error:a,helperText:a?"Track description must be at least 1 character and less than 250 characters":""}))};var Sr=(e=>(e.SetProgramNameError="VALIDATE_NAME",e.SetName="SET_NAME",e))(Sr||{});const Lr={programName:"",programNameError:!1},Nr=(e,a)=>{switch(a.type){case"SET_NAME":return{...e,programName:a.value};case"VALIDATE_NAME":return{...e,programNameError:a.value};default:return e}},Tr=(e="")=>{const[a,n]=we(Nr,{...Lr,programName:e}),r=()=>{const s=a.programName.trim().length,i=s>0&&s<=100;return n({type:"VALIDATE_NAME",value:!i}),i},l=s=>{n({type:"SET_NAME",value:s})},o=s=>{l(s.target.value),a.programNameError&&r()};return{programName:a.programName,programNameError:a.programNameError,handleProgramNameChange:o,setProgramName:l,isProgramNameValid:r}};var Pr=(e=>(e.SetProgramDescriptionError="VALIDATE_DESCRIPTION",e.SetDescription="SET_DESCRIPTION",e))(Pr||{});const Dr={programDescription:"",programDescriptionError:!1},Ir=(e,a)=>{switch(a.type){case"SET_DESCRIPTION":return{...e,programDescription:a.value};case"VALIDATE_DESCRIPTION":return{...e,programDescriptionError:a.value};default:return e}},Ar=(e="")=>{const[a,n]=we(Ir,{...Dr,programDescription:e}),r=()=>{const s=a.programDescription.trim().length,i=s>0&&s<=250;return n({type:"VALIDATE_DESCRIPTION",value:!i}),i},l=s=>{n({type:"SET_DESCRIPTION",value:s})},o=s=>{l(s.target.value),a.programDescriptionError&&r()};return{programDescription:a.programDescription,programDescriptionError:a.programDescriptionError,handleProgramDescriptionChange:o,setProgramDescription:l,isProgramDescriptionValid:r}},Rr=({programName:e,programDescription:a,areInputsValid:n,isProgramNameValid:r,isProgramDescriptionValid:l,inputChipsList:o,checkers:s,onSave:i,programId:c,levelNames:m,levelDescriptions:p,filters:d})=>{const{showModal:h}=ve(),{userEntityRef:g}=Ue();return async()=>{if(!(r()&&l()&&n())||!await h({title:"Save Track",message:`Are you sure you want to save track: ${e}?`})||!g)return;const E=c!=null?c:Xe(),v=sn(o,m,p,s),k={description:a,id:E,levels:v,name:e,ownerEntityRef:g,filter:it(d)};i(k)}},$r=e=>{const a=H(()=>e?dn(e):null,[e]),[n,r]=f([]),[l,o]=f(!1),{data:s,isLoading:i}=tt(),c=s==null?void 0:s.edges.map(w=>w.checker),m=H(()=>(c!=null?c:[]).filter(w=>!!w).map(w=>{var S,N,M;return{id:(S=w.id)!=null?S:"",label:(N=w.name)!=null?N:w.id,description:(M=w.description)!=null?M:""}}),[c]),{chips:p,inputChipsList:d,handleDrop:h,handleDelete:g,addInput:E,removeInput:v,inputErrors:k,areInputsValid:T,setInputChipsList:L}=qa(n);return P(()=>{if(!n.length&&m.length&&!l){const{inputChips:w,used:S}=mn(a,m);L(w),r(S),o(!0)}},[m,L,n.length,a,l]),{checkers:c,checkersLoading:i,chips:p,inputChipsList:d,handleDrop:h,handleDelete:g,addInput:E,removeInput:v,inputErrors:k,areInputsValid:T}},Fr=e=>{const[a,n]=f(e);return{levelNames:a,handleLevelNameChange:(r,l)=>{n(a.map((o,s)=>s===l?r:o))},addLevelName:r=>{n([...a,r])},removeLevelName:r=>{n(a.filter((l,o)=>o!==r))}}},Or=e=>{const[a,n]=f(e);return{levelDescriptions:a,handleLevelDescriptionChange:(r,l)=>{n(a.map((o,s)=>s===l?r:o))},addLevelDescription:r=>{n([...a,r])},removeLevelDescription:r=>{n(a.filter((l,o)=>o!==r))}}},Mr=C(e=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap",padding:e.spacing(2)},description:{fontSize:e.typography.fontSize}})),St=({filters:e,setFilters:a,disabled:n})=>{const r=Mr(),l=o=>s=>{a(o,s)};return t.createElement(fe,{title:n?"Filters":"Filters (optional)"},t.createElement(u,{container:!0,item:!0,xs:12,spacing:2},t.createElement(u,{item:!0},t.createElement(b,{className:r.description},"Apply filters so it's only applicable to relevant entities.")),t.createElement(u,{item:!0,xs:12},t.createElement(Se,null,t.createElement(u,{container:!0,className:r.filterContainer,spacing:2},ut.map(o=>t.createElement(u,{item:!0,xs:12,sm:6,md:4,key:o.stateKey},t.createElement(gt,{facet:o.facet,label:o.label,values:e[o.stateKey],onChange:l(o.stateKey),disabled:n}))))))))};var Vr=(e=>(e.SetFilter="SET_FILTER",e))(Vr||{});const Br={selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]},Gr=(e,a)=>{switch(a.type){case"SET_FILTER":return{...e,[a.key]:a.values};default:return e}},Lt=e=>{let a=Br;e&&(a=ct(e));const[n,r]=we(Gr,a);return{filters:n,setFilters:(l,o)=>{r({type:"SET_FILTER",key:l,values:o})}}},zr=C(e=>({regularFontSize:{fontSize:e.typography.fontSize,fontWeight:"bold"},description:{fontWeight:"normal",fontSize:e.typography.fontSize},root:{overflow:"hidden",display:"flex",padding:e.spacing(1),marginBottom:"53px"}})),Nt=({onSave:e,title:a,open:n,handleClose:r})=>{var l,o,s,i;const{selectedProgram:c,isLoading:m,setSelectedProgram:p}=oe(),{checkers:d,checkersLoading:h,chips:g,inputChipsList:E,handleDrop:v,handleDelete:k,addInput:T,removeInput:L,inputErrors:w,areInputsValid:S}=$r(c),{programName:N,programNameError:M,handleProgramNameChange:q,isProgramNameValid:ie}=Tr(c==null?void 0:c.name),{programDescription:B,programDescriptionError:x,handleProgramDescriptionChange:A,isProgramDescriptionValid:_}=Ar(c==null?void 0:c.description),ye=(o=c?(l=c.levels)==null?void 0:l.map(V=>{var K;return(K=V.name)!=null?K:`Level ${V.ordinal}`}):E.map((V,K)=>`Level ${K+1}`))!=null?o:[],{levelNames:ue,handleLevelNameChange:be,addLevelName:Ce,removeLevelName:ke}=Fr(ye),y=(i=c?(s=c.levels)==null?void 0:s.map(V=>{var K;return(K=V.description)!=null?K:""}):E.map((V,K)=>""))!=null?i:[],{levelDescriptions:F,handleLevelDescriptionChange:ce,addLevelDescription:Tt,removeLevelDescription:Pt}=Or(y),Dt=()=>{T(),Ce(`Level ${E.length+1}`),Tt("")},It=V=>{L(V),ke(V),Pt(V)},{filters:Re,setFilters:At}=Lt(JSON.stringify(c==null?void 0:c.filter)),Rt=Rr({programName:N,programDescription:B,areInputsValid:S,isProgramNameValid:ie,isProgramDescriptionValid:_,inputChipsList:E,checkers:d,onSave:e,programId:c==null?void 0:c.id,levelNames:ue,levelDescriptions:F,filters:Re}),xe=zr(),$e=ht(),J=c?!(c!=null&&c.isEditable):!1;return t.createElement(lt,{handleClose:r,title:a,open:n},t.createElement(u,{container:!0,spacing:4,className:xe.root},t.createElement(u,{item:!0,xs:12},t.createElement(u,{item:!0,xs:12},t.createElement(b,{className:$e.sectionLabel,style:{margin:0}},"Track Details"),t.createElement(bt,{disabled:m||J,programName:N,programNameError:M,handleProgramNameChange:q})),t.createElement(u,{item:!0,xs:12},t.createElement(wt,{disabled:m||J,programDescription:B,programDescriptionError:x,handleProgramDescriptionChange:A}))),t.createElement(u,{item:!0,xs:12},t.createElement(St,{disabled:J,filters:Re,setFilters:At})),t.createElement(u,{item:!0,xs:12},t.createElement(u,{container:!0,spacing:4},t.createElement(u,{item:!0,xs:12},t.createElement(b,{className:$e.sectionLabel,style:{margin:0}},"Track Levels"),t.createElement(b,{className:xe.description},"Add the checks that apply to each level. You can preview the checks to see the rules that apply to each check.")),t.createElement(u,{item:!0,xs:5},t.createElement(gr,{chips:g,isLoading:h||m,disabled:J})),t.createElement(u,{item:!0,xs:7},t.createElement(xr,{inputChipsList:E,handleDelete:k,handleDrop:v,addInput:Dt,removeInput:It,levelsErrors:w,levelNames:ue,handleLevelNameChange:be,levelDescriptions:F,handleLevelDescriptionChange:ce,disabled:J}))))),t.createElement(u,{container:!0,spacing:4,className:xe.root},t.createElement(at,{onCancel:()=>{p(null),r()},saveButtonText:"Save Track",isLoading:m||h,onSave:Rt,disableSave:J})))},Wr=()=>{const{setIsLoading:e,setShowAddModal:a,showAddModal:n}=oe(),{mutateAsync:r,isLoading:l}=Wa();return P(()=>{e(l)},[e,l]),t.createElement(Nt,{handleClose:()=>a(!1),title:"Create Track",open:n,onSave:async o=>{await r(o)&&window.open("/soundcheck/tracks","_self")}})},qr="Error Updating Track";function Kr(){const e=I(O),a=ae(),{showAlert:n}=Q(),r=async l=>{const o=await e.updateProgram(l);if(!o)throw new Error("Failed to update track.");return o};return ne([re.UpdateProgram],r,{onSuccess:async()=>{await a.invalidateQueries({queryKey:[$.GetAllPrograms]})},onError:l=>{let o="Failed to update track.";l instanceof Error&&(o=l.message),n({severity:"error",title:qr,message:o})}})}const Ur=()=>{const{setSelectedProgram:e,setIsLoading:a,selectedProgram:n}=oe(),{mutateAsync:r,isLoading:l}=Kr();P(()=>a(l),[a,l]);const o=async s=>{await r(s)&&e(null)};return t.createElement(Nt,{handleClose:()=>e(null),title:n!=null&&n.isEditable?"Edit Track":"View Track",open:!!n,onSave:o})},_r=C(e=>({programsPageContainer:{padding:e.spacing(3)},headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap"}})),Hr=()=>{const{selectedProgram:e,showAddModal:a}=oe(),[n]=Me(),r=n.get("tracksPerPage"),l=r?parseInt(r,10):10,o=_r(),s="Programs will now be referred to as Tracks throughout the Soundcheck UI.";return t.createElement("div",{className:o.programsPageContainer},t.createElement(Bt,{variant:"info",message:s,id:"programTrackBanner"}),t.createElement(Ia,{backend:Aa},t.createElement(ir,{programsPerPage:l}),a&&t.createElement(Wr,null),e&&t.createElement(Ur,null)))},jr=C(e=>({programsPageContainer:{padding:e.spacing(3)},lists:{padding:e.spacing(2)},checksDescription:{padding:"0 0 10px 5px"},levelHeader:{marginBottom:"10px"},chip:{marginTop:"10px"}})),Qr=({})=>{var e,a;const n=jr(),r=window.location.pathname.split("tracks/")[1],{data:l,isLoading:o}=Ga(r||""),s=(e=l==null?void 0:l.edges[0])==null?void 0:e.program,{filters:i,setFilters:c}=Lt(s==null?void 0:s.filter),m=()=>{window.open("/soundcheck/tracks","_self")};return t.createElement(t.Fragment,null,t.createElement("div",{className:n.programsPageContainer},o?"loading":t.createElement(u,{container:!0,spacing:3},t.createElement(u,{item:!0,xs:12},t.createElement(b,{variant:"h4"},"Owner: ",s==null?void 0:s.ownerEntityRef)),t.createElement(u,{item:!0,xs:12},t.createElement(bt,{disabled:!0,programName:s?s.name:"",programNameError:!1,handleProgramNameChange:()=>null})),t.createElement(u,{item:!0,xs:12},t.createElement(wt,{disabled:!0,programDescription:s!=null&&s.description?s.description:"",programDescriptionError:!1,handleProgramDescriptionChange:()=>null})),t.createElement(u,{item:!0,xs:12},t.createElement(St,{disabled:!0,filters:i,setFilters:c})),t.createElement(u,{item:!0,xs:12},t.createElement(Le,null,t.createElement(ze,null,t.createElement(u,{container:!0,spacing:4},t.createElement(u,{item:!0,xs:12},t.createElement(Ee,{dense:!0,className:n.lists},(a=s==null?void 0:s.levels)==null?void 0:a.map((p,d)=>t.createElement("div",{key:`levels-${d}`},t.createElement(b,{className:n.levelHeader,variant:"h6"},p.name),t.createElement(j,null,"Description: ",p.description),t.createElement(Ee,{key:`levels-${d}`,dense:!0,className:n.lists},t.createElement(b,{variant:"h6"},"Checks"),p.checks.map((h,g)=>t.createElement("div",{key:`checks-${g}`},t.createElement(Ne,{key:h.name+g,label:h.name,className:n.chip}),t.createElement(X,{divider:!0,className:n.checksDescription},h.description)))))))))))))),t.createElement(R,{variant:"contained",color:"primary",onClick:m},"Track List"))},Jr=()=>{const e=window.location.pathname.split("tracks/");return t.createElement(Ua,null,e[1]?t.createElement(Qr,null):t.createElement(Hr,null))},Yr=C(()=>({tabContent:{margin:0,padding:0}})),Xr=({title:e="Soundcheck"})=>{const a=Yr(),[n,r]=ra(),{group:l}=n,[o,s]=f(void 0),i=m=>{m&&r({...n,group:m})},c=$t();return t.createElement(pa,null,t.createElement(la,null,t.createElement(ua,null,t.createElement(ga,null,t.createElement(Gt,{themeId:"website"},t.createElement(Wt,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),t.createElement(zt,{title:e},c.pathname.split("/").length-1===1&&t.createElement(oa,{onChange:i,initialValue:l,setError:s})),t.createElement(Ft,null,t.createElement(Ot,{path:"/*",element:t.createElement(ge,null,t.createElement(ge.Route,{title:"Overview",path:"/"},t.createElement("div",{className:a.tabContent},t.createElement(sa,{groupSelectorError:o,searchParams:n,setSearchParams:r}))),t.createElement(ge.Route,{title:"Checks",path:"/checks"},t.createElement(er,null)),t.createElement(ge.Route,{title:"Tracks",path:"/tracks"},t.createElement(Jr,null)))})))))))};export{Xr as RoutingPage};
2
+ //# sourceMappingURL=index-e398f5c6.esm.js.map
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import * as React from 'react';
2
3
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
3
4
 
4
5
  /**
@@ -37,14 +38,21 @@ declare const soundcheckPlugin: _backstage_core_plugin_api.BackstagePlugin<{
37
38
  * Provides an EntityPage tab containing Soundcheck content relevant for the
38
39
  * current entity. Expected to be used within {@link @backstage/plugin-catalog#EntityLayout}.
39
40
  */
40
- declare const EntitySoundcheckContent: () => JSX.Element;
41
+ declare const EntitySoundcheckContent: () => React.JSX.Element;
41
42
  /**
42
43
  * @public
43
44
  *
44
45
  * Provides Card to be used on the EntityPage inside the Catalog Plugin.
45
46
  * Must be used within {@link @backstage/plugin-catalog#EntityLayout}.
46
47
  */
47
- declare const EntitySoundcheckCard: ({ title }: EntitySoundcheckCardProps) => JSX.Element;
48
+ declare const EntitySoundcheckCard: ({ title }: EntitySoundcheckCardProps) => React.JSX.Element;
49
+ /**
50
+ * @public
51
+ *
52
+ * Provides an GroupPage tab containing Soundcheck content relevant for the
53
+ * current group. Expected to be used within {@link @backstage/plugin-catalog#GroupLayout}.
54
+ */
55
+ declare const GroupSoundcheckContent: () => React.JSX.Element;
48
56
  /**
49
57
  * @public
50
58
  *
@@ -52,5 +60,11 @@ declare const EntitySoundcheckCard: ({ title }: EntitySoundcheckCardProps) => JS
52
60
  * of your Certifications throughout different groups in your Organization.
53
61
  */
54
62
  declare const SoundcheckOverviewPage: (props: OverviewPageProps) => JSX.Element;
63
+ /**
64
+ * @public
65
+ *
66
+ * Provides the /soundcheck route on your Backstage instance
67
+ */
68
+ declare const SoundcheckRoutingPage: (props: OverviewPageProps) => JSX.Element;
55
69
 
56
- export { EntitySoundcheckCard, EntitySoundcheckCardProps, EntitySoundcheckContent, OverviewPageProps, SoundcheckOverviewPage, soundcheckPlugin };
70
+ export { EntitySoundcheckCard, EntitySoundcheckCardProps, EntitySoundcheckContent, GroupSoundcheckContent, OverviewPageProps, SoundcheckOverviewPage, SoundcheckRoutingPage, soundcheckPlugin };
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{l as f,E as j,m as w,j as x}from"./esm/index-ab8d0702.esm.js";import"react";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"react-router-dom";import"@material-ui/lab";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";export{f as EntitySoundcheckCard,j as EntitySoundcheckContent,w as SoundcheckOverviewPage,x as soundcheckPlugin};
1
+ import{o as f,E as l,G as q,p as w,q as x,n as O}from"./esm/index-5913b2d3.esm.js";import"react";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"@material-ui/lab";import"react-router-dom";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";export{f as EntitySoundcheckCard,l as EntitySoundcheckContent,q as GroupSoundcheckContent,w as SoundcheckOverviewPage,x as SoundcheckRoutingPage,O as soundcheckPlugin};
2
2
  //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,9 +1,9 @@
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.2",
4
+ "version": "0.6.0",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
- "homepage": "https://backstage.spotify.com/",
6
+ "homepage": "https://backstage.spotify.com",
7
7
  "main": "dist/index.esm.js",
8
8
  "types": "dist/index.d.ts",
9
9
  "publishConfig": {
@@ -26,49 +26,52 @@
26
26
  "prepare": "yarn generate"
27
27
  },
28
28
  "dependencies": {
29
- "@backstage/catalog-model": "^1.3.0",
30
- "@backstage/core-components": "^0.13.1",
31
- "@backstage/core-plugin-api": "^1.5.1",
32
- "@backstage/plugin-catalog-react": "^1.6.0",
33
- "@backstage/theme": "^0.3.0",
34
- "@backstage/types": "^1.0.2",
29
+ "@backstage/catalog-model": "^1.4.1",
30
+ "@backstage/core-components": "^0.13.3",
31
+ "@backstage/core-plugin-api": "^1.5.3",
32
+ "@backstage/plugin-catalog-react": "^1.8.0",
33
+ "@backstage/plugin-permission-react": "^0.4.14",
34
+ "@backstage/theme": "^0.4.1",
35
+ "@backstage/types": "^1.1.0",
35
36
  "@material-ui/core": "^4.12.2",
36
37
  "@material-ui/icons": "^4.9.1",
37
38
  "@material-ui/lab": "4.0.0-alpha.61",
38
- "@spotify/backstage-plugin-core": "^0.5.2",
39
+ "@spotify/backstage-plugin-core": "^0.5.4",
40
+ "@spotify/backstage-plugin-soundcheck-common": "^0.7.0",
39
41
  "@tanstack/react-query": "^4.6.1",
40
42
  "classnames": "^2.3.2",
41
- "graphql-request": "5.1.0",
43
+ "graphql-request": "6.1.0",
42
44
  "lodash": "^4.17.21",
43
45
  "luxon": "^3.1.1",
44
46
  "react-confetti": "^6.1.0",
45
47
  "react-dnd": "^16.0.1",
46
48
  "react-dnd-html5-backend": "^16.0.1",
49
+ "react-hook-form": "^7.19.5",
47
50
  "react-use": "^17.2.4",
48
- "react-window": "^1.8.8"
51
+ "react-window": "^1.8.8",
52
+ "uuid": "^9.0.0"
49
53
  },
50
54
  "peerDependencies": {
51
55
  "react": "^16.13.1 || ^17.0.0",
52
56
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
53
57
  },
54
58
  "devDependencies": {
55
- "@backstage/cli": "^0.22.7",
56
- "@backstage/core-app-api": "^1.8.0",
57
- "@backstage/dev-utils": "^1.0.15",
58
- "@backstage/test-utils": "^1.3.1",
59
- "@graphql-codegen/cli": "^3.0.0",
60
- "@graphql-codegen/typescript": "^3.0.0",
61
- "@graphql-codegen/typescript-graphql-request": "^4.5.5",
62
- "@graphql-codegen/typescript-operations": "^3.0.0",
63
- "@spotify/backstage-plugin-core-common": "^0.5.2",
64
- "@spotify/backstage-plugin-soundcheck-common": "^0.5.0",
59
+ "@backstage/cli": "^0.22.9",
60
+ "@backstage/core-app-api": "^1.9.0",
61
+ "@backstage/dev-utils": "^1.0.17",
62
+ "@backstage/test-utils": "^1.4.1",
63
+ "@graphql-codegen/cli": "^4.0.0",
64
+ "@graphql-codegen/typescript": "^4.0.0",
65
+ "@graphql-codegen/typescript-graphql-request": "^5.0.0",
66
+ "@graphql-codegen/typescript-operations": "^4.0.0",
67
+ "@spotify/backstage-plugin-core-common": "^0.5.4",
65
68
  "@testing-library/jest-dom": "^5.10.1",
66
69
  "@testing-library/react": "^12.1.5",
67
70
  "@testing-library/react-hooks": "^8.0.1",
68
71
  "@testing-library/user-event": "^14.0.0",
69
72
  "@types/jest": "^29.4.0",
70
73
  "@types/luxon": "^3.0.1",
71
- "@types/node": "^16.18.11",
74
+ "@types/node": "^18.0.0",
72
75
  "@types/react-window": "^1.8.5",
73
76
  "cross-fetch": "^3.1.5",
74
77
  "msw": "^1.0.0"
@@ -1,2 +0,0 @@
1
- import e,{useState as $,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-4f009bca.esm.js";import{s as H,R as c,A as y,F as P,a as J,u as x,L as K,N as X,b,c as g,d as Z,C as _,e as B,S as ee}from"./index-ab8d0702.esm.js";import{Skeleton as s}from"@material-ui/lab";import{MarkdownContent as F}from"@backstage/core-components";import{stringifyEntityRef as te}from"@backstage/catalog-model";import{useApi as ae,useRouteRef as C,useRouteRefParams as re}from"@backstage/core-plugin-api";import{useQuery as ne}from"@tanstack/react-query";import ie from"react-use/lib/useMeasure";import A from"react-use/lib/usePrevious";import le from"react-confetti";import"react-use/lib/useDebounce";import"graphql-request";import"graphql-tag";import"lodash";import"@material-ui/core/styles/makeStyles";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";function oe(t,r,a){const n=ae(H),i=te(t);return ne(["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={[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(y,{severity:n,title:i},r?e.createElement(F,{className:a.markdownContent,content:r}):null)},me=()=>{const t=D();return e.createElement(P,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(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(f,{variant:"h3"},e.createElement(s,null)),e.createElement(s,null),e.createElement(s,null),e.createElement(s,null))))},D=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=D(),{entity:n}=u(),{data:i,isLoading:l,isError:o}=oe(n,t,r);if(o)return e.createElement(U,{padding:2},e.createElement(y,{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(J,{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(F,{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}=x(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=A(m),R=A(t),[W,S]=$(!1);return M(()=>{typeof E!="undefined"&&typeof m!="undefined"&&t===R&&m>E&&S(!0)},[m,E,t,R]),W?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},z=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=z();return e.createElement(L,{className:l.root,classes:{wrapper:l.wrapper},value:t,label:e.createElement(e.Fragment,null,a?e.createElement(K,{badge:a,className:l.badge}):e.createElement(X,{className:l.badge}),r),component:O,to:n,selected:i})},w=()=>{const t=z();return e.createElement(L,{className:t.root,classes:{wrapper:t.wrapper},label:e.createElement(s,{width:180})})},Ee=()=>e.createElement(P,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}=b(r),i=C(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}=b(n);return i?e.createElement(y,{severity:"error",title:"Error loading certifications"}):l&&!(o!=null&&o.length)?e.createElement(Z,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(_,{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=C(g),{data:n}=b(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}=re(g),i=C(B),{data:l}=x(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(ee,null,e.createElement(we,null));export{Ne as EntitySoundcheckContent};
2
- //# sourceMappingURL=EntitySoundcheckContent-ec837784.esm.js.map
@@ -1,217 +0,0 @@
1
- import{createApiRef as Se,createRouteRef as H,createSubRouteRef as k,createPlugin as $e,createApiFactory as Ie,discoveryApiRef as Ne,fetchApiRef as De,createRoutableExtension as Q,createComponentExtension as Le,useApi as P,errorApiRef as Fe,useRouteRef as j}from"@backstage/core-plugin-api";import{GraphQLClient as Ae}from"graphql-request";import s from"graphql-tag";import t,{createContext as Pe,useState as O,useRef as Oe,useCallback as x,useContext as xe,useEffect as Te,Fragment as qe}from"react";import{QueryClient as ze,QueryClientProvider as Me,useQuery as V}from"@tanstack/react-query";import{memoize as Be}from"lodash";import We from"@material-ui/core/styles/makeStyles";import{makeStyles as p,Modal as Ge,Box as K,Typography as m,Button as _,Fade as Ue,alpha as E,Tooltip as He,withStyles as b,Divider as Qe}from"@material-ui/core";import{MarkdownContent as J,Link as X,EmptyState as Y,InfoCard as je}from"@backstage/core-components";import{useEntity as Z,humanizeEntityRef as Ve}from"@backstage/plugin-catalog-react";import{useAutoUpdatingRelativeTime as Ke,SpotifyLicenseBanner as _e}from"@spotify/backstage-plugin-core";import{stringifyEntityRef as ee,parseEntityRef as Je}from"@backstage/catalog-model";import{Link as Xe}from"react-router-dom";import{Skeleton as f,Alert as Ye}from"@material-ui/lab";import R from"classnames";import Ze from"@material-ui/icons/Schedule";import{DateTime as te}from"luxon";import et from"@material-ui/icons/Check";import tt from"@material-ui/icons/Close";import rt from"@material-ui/icons/RemoveCircleOutline";import at from"@material-ui/icons/HelpOutline";var re=(e=>(e.Medal="MEDAL",e))(re||{}),h=(e=>(e.Failed="FAILED",e.NotApplicable="NOT_APPLICABLE",e.NotReported="NOT_REPORTED",e.Passed="PASSED",e))(h||{});const nt=s`
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
- `,it=s`
24
- fragment check on Check {
25
- id
26
- name
27
- description
28
- }
29
- `,ot=s`
30
- fragment CheckResultSummary on CheckResult {
31
- id
32
- name
33
- result
34
- timestamp
35
- }
36
- `,ct=s`
37
- fragment LevelResultDetails on LevelResult {
38
- ordinal
39
- name
40
- description
41
- badge {
42
- ... on BadgeVariantMedal {
43
- variant
44
- options {
45
- level
46
- color
47
- }
48
- }
49
- }
50
- certified
51
- checks {
52
- ...CheckResultSummary
53
- }
54
- }
55
- ${ot}`,lt=s`
56
- fragment CheckResultDetails on CheckResult {
57
- id
58
- name
59
- description
60
- result
61
- timestamp
62
- notes
63
- }
64
- `,st=s`
65
- fragment OverviewLevelResult on OverviewLevelResult {
66
- ordinal
67
- name
68
- checks {
69
- check {
70
- id
71
- name
72
- description
73
- }
74
- results {
75
- id
76
- entityRef
77
- result
78
- }
79
- }
80
- }
81
- `,ae=s`
82
- fragment HighestLevel on LevelResult {
83
- entityRef
84
- ordinal
85
- name
86
- badge {
87
- ... on BadgeVariantMedal {
88
- variant
89
- options {
90
- color
91
- level
92
- }
93
- }
94
- }
95
- }
96
- `,mt=s`
97
- mutation deleteChecker($checkerId: String!) {
98
- deleteChecker(checkerId: $checkerId)
99
- }
100
- `,dt=s`
101
- mutation deleteProgram($programId: String!) {
102
- programDeleted: deleteProgram(programId: $programId)
103
- }
104
- `,pt=s`
105
- query getAllCertifications($entityRef: String!) {
106
- certifications(entityRef: $entityRef, includeFilteredChecks: false) {
107
- ...CertificationSummary
108
- }
109
- }
110
- ${nt}`,ut=s`
111
- query getAllPrograms($programIds: [String!]) {
112
- programs(programIds: $programIds) {
113
- id
114
- ownerEntityRef
115
- name
116
- description
117
- documentationURL
118
- levels {
119
- ordinal
120
- name
121
- description
122
- checks {
123
- ...check
124
- }
125
- }
126
- }
127
- }
128
- ${it}`,gt=s`
129
- query getCertificationDetails($entityRef: String!, $programId: String!) {
130
- programCertification(
131
- entityRef: $entityRef
132
- programId: $programId
133
- includeFilteredChecks: false
134
- ) {
135
- program {
136
- id
137
- name
138
- description
139
- documentationURL
140
- }
141
- highestLevel {
142
- ...HighestLevel
143
- }
144
- levels {
145
- ...LevelResultDetails
146
- }
147
- }
148
- }
149
- ${ae}
150
- ${ct}`,ht=s`
151
- query getCheckResultDetails($entityRef: String!, $programId: String!, $checkId: String!) {
152
- checkResult(entityRef: $entityRef, programId: $programId, checkId: $checkId) {
153
- ...CheckResultDetails
154
- }
155
- }
156
- ${lt}`,ft=s`
157
- query getCheckers($ids: [String!]) {
158
- checkers(ids: $ids) {
159
- id
160
- ownerEntityRef
161
- name
162
- description
163
- rule
164
- passedMessage
165
- failedMessage
166
- isEditable
167
- schedule {
168
- ... on Frequency {
169
- cron
170
- }
171
- ... on HumanDuration {
172
- years
173
- months
174
- weeks
175
- days
176
- hours
177
- minutes
178
- seconds
179
- milliseconds
180
- }
181
- }
182
- }
183
- }
184
- `,yt=s`
185
- query getFacetsForOwner($ownerEntityRef: String!) {
186
- facetsForOwner(ownerEntityRef: $ownerEntityRef) {
187
- types {
188
- value
189
- count
190
- }
191
- }
192
- }
193
- `,vt=s`
194
- query getProgramOverviewForOwner($ownerEntityRef: String!, $facet: FacetInput) {
195
- programOverviewForOwner(
196
- ownerEntityRef: $ownerEntityRef
197
- facet: $facet
198
- includeFilteredChecks: false
199
- ) {
200
- programs {
201
- program {
202
- id
203
- name
204
- }
205
- highestLevels {
206
- ...HighestLevel
207
- }
208
- levels {
209
- ...OverviewLevelResult
210
- }
211
- }
212
- entityRefs
213
- }
214
- }
215
- ${ae}
216
- ${st}`,kt=(e,r,a)=>e();function Et(e,r=kt){return{deleteChecker(a,n){return r(i=>e.request(mt,a,{...n,...i}),"deleteChecker","mutation")},deleteProgram(a,n){return r(i=>e.request(dt,a,{...n,...i}),"deleteProgram","mutation")},getAllCertifications(a,n){return r(i=>e.request(pt,a,{...n,...i}),"getAllCertifications","query")},getAllPrograms(a,n){return r(i=>e.request(ut,a,{...n,...i}),"getAllPrograms","query")},getCertificationDetails(a,n){return r(i=>e.request(gt,a,{...n,...i}),"getCertificationDetails","query")},getCheckResultDetails(a,n){return r(i=>e.request(ht,a,{...n,...i}),"getCheckResultDetails","query")},getCheckers(a,n){return r(i=>e.request(ft,a,{...n,...i}),"getCheckers","query")},getFacetsForOwner(a,n){return r(i=>e.request(yt,a,{...n,...i}),"getFacetsForOwner","query")},getProgramOverviewForOwner(a,n){return r(i=>e.request(vt,a,{...n,...i}),"getProgramOverviewForOwner","query")}}}var ne=(e,r,a)=>{if(!r.has(e))throw TypeError("Cannot "+a)},l=(e,r,a)=>(ne(e,r,"read from private field"),a?a.call(e):r.get(e)),C=(e,r,a)=>{if(r.has(e))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(e):r.set(e,a)},T=(e,r,a,n)=>(ne(e,r,"write to private field"),n?n.call(e,a):r.set(e,a),a),S,$,d,q,u;const I=Se({id:"plugin.soundcheck"}),Ct=e=>"response"in e&&"errors"in e.response,wt=e=>"response"in e&&"message"in e.response;class bt{constructor(r){C(this,S,void 0),C(this,$,void 0),C(this,d,void 0),C(this,q,n=>{var i,o,c;return Ct(n)?(c=(o=(i=n.response)==null?void 0:i.errors)==null?void 0:o[0].message)!=null?c:`${n}`:wt(n)?n.response.message:`${n}`}),C(this,u,async n=>{try{return await n()}catch(i){throw new Error(`Error from Soundcheck backend: ${l(this,q).call(this,i)}`)}}),T(this,S,r.fetchApi),T(this,$,r.discoveryApi);const a=new Ae("/graphql",{fetch:async(n,i)=>{const o=`${await l(this,$).getBaseUrl("soundcheck")}${n}`;return l(this,S).fetch(o,i)}});T(this,d,Et(a))}async getAllCertifications(r){return l(this,u).call(this,async()=>{const{certifications:a}=await l(this,d).getAllCertifications({entityRef:r});return a})}async getCertificationDetails(r,a){return l(this,u).call(this,async()=>{const{programCertification:n}=await l(this,d).getCertificationDetails({entityRef:r,programId:a});return n})}async getCheckResultDetails(r,a,n){return l(this,u).call(this,async()=>{const{checkResult:i}=await l(this,d).getCheckResultDetails({entityRef:r,programId:a,checkId:n});return i})}async getFacetsForOwner(r){return l(this,u).call(this,async()=>{const{facetsForOwner:a}=await l(this,d).getFacetsForOwner({ownerEntityRef:r});return a})}async getProgramOverviewForOwner(r,a){return l(this,u).call(this,async()=>{const{programOverviewForOwner:n}=await l(this,d).getProgramOverviewForOwner({ownerEntityRef:r,facet:a});return n})}async getAllPrograms(r){return l(this,u).call(this,async()=>{const{programs:a}=await l(this,d).getAllPrograms({programIds:r});return a})}async deleteProgram(r){return l(this,u).call(this,async()=>{const{programDeleted:a}=await l(this,d).deleteProgram({programId:r});return a})}async getCheckers(r){return l(this,u).call(this,async()=>{const{checkers:a}=await l(this,d).getCheckers({ids:r});return a})}async deleteChecker(r){return l(this,u).call(this,async()=>await l(this,d).deleteChecker({checkerId:r}))}}S=new WeakMap,$=new WeakMap,d=new WeakMap,q=new WeakMap,u=new WeakMap;const N=H({id:"soundcheck-entity"}),ie=k({id:"soundcheck-entity-certification-program-redirect",parent:N,path:"/:programId"}),oe=k({id:"soundcheck-entity-certification",parent:N,path:"/:programId/:checkId"}),D=H({id:"soundcheck-overview"});k({id:"soundcheck-checks",parent:D,path:"/checks"}),k({id:"soundcheck-programs",parent:D,path:"/programs"}),k({id:"soundcheck-program-details",parent:D,path:"/program/:programId"});const L=$e({id:"soundcheck",apis:[Ie({api:I,deps:{discoveryApi:Ne,fetchApi:De},factory:e=>new bt(e)})],routes:{entityContent:N}}),Rt=L.provide(Q({name:"EntitySoundcheckContent",component:()=>import("./EntitySoundcheckContent-ec837784.esm.js").then(e=>e.EntitySoundcheckContent),mountPoint:N})),St=L.provide(Le({name:"EntitySoundcheckCard",component:{lazy:()=>import("./index-7b7b98c2.esm.js").then(e=>e.EntitySoundcheckCard)}})),$t=L.provide(Q({name:"SoundcheckOverviewPage",component:()=>import("./index-b2b00eb3.esm.js").then(e=>e.OverviewPage),mountPoint:D})),It=Be(e=>new ze({defaultOptions:{queries:{refetchInterval:6e4,refetchIntervalInBackground:!1,refetchOnWindowFocus:"always",retry:2,retryDelay:r=>{const a=450+Math.ceil(Math.random()*100);return Math.min(a*2**r,3e4)},onError:r=>e.post(r)}}})),Nt=e=>{const r=P(Fe),a=It(r);return t.createElement(Me,{client:a},e.children)};function ce(e){const r=P(I),a=ee(e);return V(["soundcheck/certifications",a],async()=>r.getAllCertifications(a))}function le(e,r){const a=P(I),n=ee(e);return V(["soundcheck/certifications",n,r],async()=>a.getCertificationDetails(n,r),{enabled:!!r})}var se=(e=>(e.GetAllPrograms="soundcheck/programs",e.GetCheckers="soundcheck/checkers",e))(se||{}),me=(e=>(e.DeleteChecker="soundcheck/deleteChecker",e.DeleteProgram="soundcheck/deleteProgram",e))(me||{});const Dt=p(()=>({modalContent:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",backgroundColor:"white"}})),de=Pe({}),Lt=e=>{const r=Dt(),[a,n]=O(!1),[i,o]=O(),c=Oe(),g=x(({title:w,message:be})=>(o({title:w,message:be}),n(!0),new Promise(Re=>{c.current=Re})),[]),v=x(()=>{c.current&&c.current(!0),n(!1)},[]),y=x(()=>{c.current&&c.current(!1),n(!1)},[]);return t.createElement(de.Provider,{value:{showModal:g}},e.children,i&&t.createElement(Ge,{open:a,onClose:y,"aria-labelledby":"confirmation-modal-title","aria-describedby":"confirmation-modal-description"},t.createElement(K,{className:r.modalContent},t.createElement(m,{id:"confirmation-modal-title",variant:"h1"},i.title),t.createElement(m,{id:"confirmation-modal-description",variant:"body1"},i.message),t.createElement(_,{color:"secondary",onClick:y,variant:"contained","aria-label":"cancel"},"Cancel"),t.createElement(_,{color:"primary",onClick:v,variant:"contained","aria-label":"confirm"},"Confirm"))))},Ft=()=>xe(de),pe=24,At=11,z=e=>e==="small"?1:2,Pt=p({root:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",borderWidth:"2px",fontWeight:700,width:({size:e})=>`${pe*z(e)}px`,height:({size:e})=>`${pe*z(e)}px`,fontSize:({size:e})=>`${At*z(e)}px`}}),ue=({className:e,label:r,size:a="small"})=>{const n=Pt({size:a});return t.createElement("span",{className:R(e,n.root),role:"img","aria-label":`${r} badge`},r)},Ot=p(e=>({root:{background:({color:r})=>r,color:e.palette.common.black,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(",")}}})),M=({className:e,badge:r,size:a="small"})=>{const n=Ot({color:r.options.color,size:a});return t.createElement(ue,{className:R(e,n.root),size:a,label:`L${r.options.level}`})},xt=p({root:{borderColor:"currentColor",borderStyle:"dashed"}}),ge=({className:e,size:r="small"})=>{const a=xt();return t.createElement(ue,{className:R(e,a.root),size:r,label:"NL"})},B=p(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),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:e.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function Tt({description:e,documentationUrl:r}){const a=B();return r?t.createElement("div",{className:a.description},t.createElement(J,{content:e}),t.createElement(X,{to:r},"Learn more")):t.createElement("div",{className:a.description},t.createElement(J,{content:e}))}const he=({name:e,level:r,badge:a,description:n,documentationUrl:i})=>{const o=B();return t.createElement("div",{className:o.root},a?t.createElement(M,{size:"large",badge:a}):t.createElement(ge,{size:"large"}),t.createElement("div",null,t.createElement(m,{variant:"caption",className:o.level},r!=null?r:"No Level"),t.createElement(m,{className:o.title},e),n&&t.createElement(Tt,{description:n,documentationUrl:i})))},F=({children:e})=>{const[r,a]=O(!1);return Te(()=>{const n=setTimeout(()=>{a(!0)},250);return()=>clearTimeout(n)},[]),t.createElement(Ue,{in:r,timeout:250},e)},W=({hideDescription:e=!1})=>{const r=B();return t.createElement(F,null,t.createElement("div",{className:r.root},t.createElement(f,{width:44,height:44}),t.createElement("div",null,t.createElement(m,{variant:"caption",className:r.level},t.createElement(f,{width:100})),t.createElement(m,{variant:"h4",className:r.title},t.createElement(f,{width:300})),!e&&t.createElement(m,{variant:"body2"},t.createElement(f,null)))))},fe=p(e=>{const r=e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100];return{wrapper:{backgroundColor:r,color:E(e.palette.getContrastText(r),.8),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:a})=>[`"${a?"badge":"title"} title"`,`"${a?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:E(e.palette.getContrastText(r),.8),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:E(e.palette.getContrastText(r),.8),fontSize:e.typography.subtitle2.fontSize,marginTop:e.spacing(1)}}}),qt=e=>{const r=fe({badge:e.badge});return t.createElement("div",{className:r.wrapper},e.badge?t.createElement(M,{className:r.badge,badge:e.badge}):null,t.createElement(m,{className:r.title},e.title),e.description?t.createElement(m,{className:r.description},e.description):null)},zt=()=>{const e=fe({});return t.createElement(F,null,t.createElement("div",{className:e.wrapper},t.createElement(f,{className:e.title}),t.createElement(m,{className:e.description},t.createElement(f,null))))},Mt=p(e=>({root:{display:"inline-flex",alignItems:"center",gap:e.spacing(1)}})),ye=({timestamp:e,description:r})=>{const a=Mt(),n=te.fromISO(e).toLocaleString(te.DATETIME_FULL),i=Ke(e),o=r?`${r}: ${i}`:void 0;return t.createElement("div",{className:a.root},t.createElement(He,{title:n},t.createElement(m,{variant:"caption","aria-label":o},i)),t.createElement(Ze,null))},Bt=e=>({[h.Passed]:"Check passed",[h.NotReported]:"Check not reported",[h.Failed]:"Check failed",[h.NotApplicable]:"Check not applicable"})[e],Wt=b(e=>({root:{color:e.palette.success.main}}))(et),Gt=b(e=>({root:{color:e.palette.error.main}}))(tt),Ut=b(e=>({root:{color:e.palette.info.main}}))(at),Ht=b(e=>({root:{color:e.palette.text.disabled}}))(rt),ve=({result:e,className:r})=>{const a={className:r,"aria-label":Bt(e),"aria-hidden":!1};return e===h.Passed?t.createElement(Wt,{...a}):e===h.NotReported?t.createElement(Ut,{...a}):e===h.Failed?t.createElement(Gt,{...a}):e===h.NotApplicable?t.createElement(Ht,{...a}):null},ke=p(e=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto",gridColumnGap:e.spacing(1),padding:e.spacing(1),alignItems:"center","&.selected":{backgroundColor:E(e.palette.primary[e.palette.type],.2)},"&:hover, &:active, &:focus":{backgroundColor:E(e.palette.primary[e.palette.type],.3)}}})),Qt=({className:e,href:r,children:a})=>r?t.createElement(Xe,{to:r,className:e},a):t.createElement("div",{className:e},a),jt=({result:e,name:r,timestamp:a,selected:n=!1,href:i})=>{const o=ke(),c=R(o.root,{selected:n});return t.createElement(Qt,{href:i,className:c},t.createElement(ve,{result:e}),t.createElement(m,{variant:"body2"},r),a?t.createElement(ye,{timestamp:a}):null)},G=()=>{const e=ke();return t.createElement(F,null,t.createElement("div",{className:e.root},t.createElement(f,{width:24,height:24}),t.createElement(m,{variant:"body2"},t.createElement(f,null)),t.createElement(f,{width:100,height:24})))},Vt=()=>{const e=Ee();return t.createElement("div",{className:e.root},t.createElement(W,null),new Array(3).fill(null).map((r,a)=>t.createElement(t.Fragment,{key:`skeleton-level-${a}`},t.createElement(zt,null),t.createElement("ul",{className:e.checks},t.createElement(G,null),t.createElement(G,null),t.createElement(G,null)))))},Kt=p(e=>({root:{padding:e.spacing(3)},icon:{display:"none"},message:{padding:0},type:{fontWeight:700,lineHeight:1.75}})),U=e=>{const{type:r,...a}=Kt();return t.createElement(Ye,{severity:e.severity,elevation:1,classes:a,onClose:e.onClose},t.createElement(m,{classes:{root:r}},e.title),e.children)},_t=p(e=>({noChecks:{padding:e.spacing(1)},checks:{padding:0,margin:0,flex:1,listStyle:"none"},checkItem:{borderBottom:`1px solid ${e.palette.divider}`,"&:last-of-type":{borderBottom:"0"}}})),Jt=({checks:e,programId:r,checkId:a})=>{const n=_t(),i=j(oe);return e.length?t.createElement("ul",{className:n.checks},e.map(o=>t.createElement("li",{key:o.id,className:n.checkItem},t.createElement(jt,{...o,selected:o.id===a,href:i({programId:r,checkId:o.id})})))):t.createElement(m,{variant:"body2",className:n.noChecks},"No applicable checks at this level.")},Xt=({level:e,checkId:r,programId:a})=>{var n;return t.createElement(t.Fragment,null,t.createElement(qt,{badge:e.badge,title:e.name,description:e.description}),t.createElement(Jt,{checks:(n=e.checks)!=null?n:[],programId:a,checkId:r}))},Ee=p(e=>({root:{borderRight:`1px solid ${e.palette.divider}`},checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),Yt=({programId:e,checkId:r})=>{var a,n;const i=Ee(),{entity:o}=Z(),{data:c,isLoading:g,isError:v}=le(o,e);return v?t.createElement("div",{className:i.root},t.createElement(K,{padding:2},t.createElement(U,{severity:"error",title:"Error loading certification"}))):g||!e?t.createElement(Vt,null):c?t.createElement("div",{className:i.root},t.createElement(he,{name:c.program.name,level:(a=c.highestLevel)==null?void 0:a.name,badge:(n=c.highestLevel)==null?void 0:n.badge,description:c.program.description,documentationUrl:c.program.documentationURL}),c==null?void 0:c.levels.map(y=>t.createElement(Xt,{key:y.ordinal,level:y,checkId:r,programId:e}))):null},Zt=()=>t.createElement(t.Fragment,null,t.createElement(W,{hideDescription:!0}),t.createElement(W,{hideDescription:!0})),Ce=({className:e})=>t.createElement("div",{className:e},t.createElement(Y,{title:"No certifications available",missing:"data",description:"There are no programs configured that apply to this entity."})),er=({ownerEntityRef:e})=>e?t.createElement(Y,{missing:"data",title:"Missing entities",description:t.createElement(t.Fragment,null,"Looks like the group"," ",Ve(Je(e),{defaultKind:"Group"})," ","doesn't own any entities.",t.createElement("br",null),t.createElement("br",null),"Please select another group from the dropdown in the corner of the header.")}):null,we=We(e=>({certificationWrapper:{display:"flex",justifyContent:"space-between",alignItems:"center"},infoCard:{display:"grid",gridRowGap:e.spacing(2)},emptyState:{"& > div":{backgroundColor:e.palette.background.paper}}})),A=({children:e,title:r})=>{const a=we();return t.createElement(je,{title:r},t.createElement("div",{className:a.infoCard},t.createElement(_e,{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."}),e))},tr=({title:e="Soundcheck"})=>{const{entity:r}=Z(),a=we(),{data:n,isError:i,isLoading:o}=ce(r),c=j(ie);return i?t.createElement(A,{title:e},t.createElement(U,{severity:"error",title:"Error loading certifications"})):o||!n?t.createElement(A,{title:e},t.createElement(Zt,null)):n.length===0?t.createElement(A,{title:e},t.createElement(Ce,{className:a.emptyState})):t.createElement(A,{title:e},n.map((g,v)=>{var y,w;return t.createElement(qe,{key:g.program.name},t.createElement("div",{className:a.certificationWrapper,"data-testid":"soundcheck-program-row"},t.createElement(he,{key:g.program.id,name:g.program.name,badge:(y=g.highestLevel)==null?void 0:y.badge,level:(w=g.highestLevel)==null?void 0:w.name}),t.createElement(X,{to:c({programId:g.program.id})},"View Details")),v<n.length-1?t.createElement(Qe,null):null)}))};export{U as A,re as B,Yt as C,Rt as E,F,M as L,me as M,ge as N,se as Q,h as R,Nt as S,ye as a,ce as b,ie as c,Ce as d,oe as e,tr as f,ve as g,er as h,Lt as i,L as j,Ft as k,St as l,$t as m,I as s,le as u};
217
- //# sourceMappingURL=index-ab8d0702.esm.js.map