@redocly/realm 0.130.0-custom.3 → 0.130.0-custom.4
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 +1 @@
|
|
|
1
|
-
import*as e from"react";import{useCallback as le,useMemo as E,useState as se,useEffect as ie}from"react";import{useLocation as H}from"react-router-dom";import{Flex as oe}from"@redocly/portal-legacy-ui";import{Button as R}from"@redocly/theme/components/Button/Button";import{AddIcon as G}from"@redocly/theme/icons/AddIcon/AddIcon";import{SubtractIcon as _}from"@redocly/theme/icons/SubtractIcon/SubtractIcon";import{ArrowLeftIcon as U}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{useProcessScorecard as Z}from"@redocly/theme/ext/process-scorecard";import{getScorecardColorVariable as J,withoutPathPrefix as Q}from"@redocly/theme/core/utils";import{Link as W}from"../../../../client/app/Link";import ce from"../../../../client/app/CircularProgress";import{isDefined as B}from"../../../../utils/guards/is-defined.js";import{removeLeadingSlash as ue}from"../../../../utils/url/remove-leading-slash.js";import{StatusByLevelWidget as me}from"./StatusByLevelWidget";import{OTHER_TEAMS_LABEL as de,NON_CONFORMANT as pe}from"./utils";import{LevelIndicator as ge}from"./LevelIndicator";import{AppPageWrapper as X,CardValue as P,CardsWrapper as Y,CatalogDescription as fe,ModeSwitcherTab as O,ModeSwitcherTabs as Ee,CardRow as ee,ProblemsByStatusCardBody as te,ScoreCardStatusCardBody as re,TableWrap as j,LevelComplianceCardTitle as he,ContentWithDotWrap as k,ScorecardCard as V,ScorecardCardTitle as F}from"./index.styles";import{ApiLevel as ne,InstanceStatus as q,LevelStatus as N,RuleStatus as ae}from"./components";import{Grid as z}from"./Grid/Grid";import{useDetailedScorecard as ye}from"./useDetailedScorecard";import{Gauge as ve,GaugeValue as be}from"./Gauge";function Se(d,c,p){if(d===c)return 0;if(d==null||d==="")return 1;if(c==null||c==="")return-1;if(p==="number"){const u=Number(d),a=Number(c),l=Number.isNaN(u),g=Number.isNaN(a);return l&&g?0:l?1:g?-1:u-a}if(p==="date"){const u=new Date(String(d)).getTime(),a=new Date(String(c)).getTime(),l=Number.isNaN(u),g=Number.isNaN(a);return l&&g?0:l?1:g?-1:u-a}return String(d).localeCompare(String(c))}function $e(d){const c=H(),{data:p,levelNames:u,hasPublishedAt:a,hasTeam:l,teamLabel:g}=d,{getApiTableColumns:L}=Z(),h=le((y,S,x)=>{const w=y.getValue(x)?new Date(y.getValue(x)).getTime():0,r=S.getValue(x)?new Date(S.getValue(x)).getTime():0;return w>r?1:-1},[]),b=E(()=>{const y=L?.()??[],S=y.filter(r=>r.placement==="beforeLevels"),x=y.filter(r=>r.placement!=="beforeLevels"),w=r=>({id:r.id,header:String(r.header),accessorFn:s=>r.getValue?.(s),enableSorting:!!(r.sortingFn||r.sortRule),...r.sortingFn||r.sortRule?{sortingFn:(s,f,n)=>r.sortingFn?r.sortingFn({rowA:s.original,rowB:f.original,valueA:s.getValue(n),valueB:f.getValue(n)}):Se(r.getSortValue?.(s.original)??s.getValue(n),r.getSortValue?.(f.original)??f.getValue(n),r.sortRule||"string")}:{},...r.sortDescFirst!==void 0?{sortDescFirst:r.sortDescFirst}:{},cell:({getValue:s,row:f})=>{const n=s(),i=f.original;return r.render?r.render({row:i,value:n}):n==null||n===""?"-":String(n)},...r.size!==void 0?{size:r.size}:{},...r.minSize!==void 0?{minSize:r.minSize}:{},...r.maxSize!==void 0?{maxSize:r.maxSize}:{}});return[{id:"title",header:"API",accessorKey:"api.title",size:200,cell:({getValue:r,row:s})=>e.createElement(W,{to:Q(c.pathname)+"/apis/"+encodeURIComponent(ue(s.original.api.link))},r()," ",s.original.api.version)},a?{header:"Published at",accessorKey:"api.publishedAt",sortingFn:h,cell:({getValue:r})=>{const s=r();return s?new Date(s).toLocaleDateString():"-"}}:void 0,l?{header:g,accessorKey:"api.team"}:void 0,{id:"level",header:"Level",accessorKey:"scorecard.scorecardLevel",cell:({getValue:r,row:s})=>e.createElement(ne,{level:r(),colorVariable:J(s.original?.scorecard.scorecardLevelIdx,u.length+1)})},...S.map(w),...u.map(r=>({id:r,header:`${r}`,accessorKey:"scorecard.levels",sortingFn:(s,f,n)=>{const i=s.getValue(n)[n].uniqueErrors,D=f.getValue(n)[n].uniqueErrors,t=s.getValue(n)[n].uniqueWarnings,o=f.getValue(n)[n].uniqueWarnings;return i===D?t-o:i-D},cell:({getValue:s,row:{original:f}})=>{const n=s(),i=f.api.link;return n?.[r]?e.createElement(ge,{key:i,uniqueErrors:n[r].uniqueErrors,uniqueWarnings:n[r].uniqueWarnings,customDisplay:n[r].customDisplay,id:i}):null}})),...x.map(w)].filter(B)},[h,u,c.pathname,a,l,g,L]),m=E(()=>{const y=Math.max(b.length-3,0);return`25% max(140px, 15%) max(140px, 10%)${y>0?` repeat(${y}, 1fr)`:""}`},[b.length]);return e.createElement(z,{columns:b,data:p,sortBy:[{id:"title",desc:!1}],gridTemplateColumns:m})}function He(d){const c=H(),{data:p}=d,u=E(()=>[{header:"Rules",accessorKey:"ruleId",cell:({getValue:a})=>e.createElement(W,{to:Q(c.pathname)+"/rules/"+encodeURIComponent(a())},a())},{id:"status",header:"Status",accessorKey:"status",size:200,cell:({row:a})=>e.createElement(ae,{errors:a.original.errorApisCount,warnings:a.original.warningApisCount})},{header:"Problem APIs",width:200,accessorKey:"apisCount",cell:({getValue:a})=>a(),sortDescFirst:!0},{header:"Problem count",size:200,accessorKey:"count",sortDescFirst:!0}],[c.pathname]);return e.createElement(z,{columns:u,data:p,virtualized:!1,sortBy:[{id:"status",desc:!0}]})}function Ge(d){const{data:c,levelNames:p,filters:u,setActiveTab:a,teamLabel:l,teamProperty:g}=d,L=E(()=>[{id:"team",header:`API ${l}`,accessorKey:"team",size:200,cell:({getValue:h})=>e.createElement("a",{href:"#",onClick:b=>{b.preventDefault(),a("apis"),u.find(m=>m.property===g)?.selectOption(h())}},h())},...[pe,...p].map(h=>({id:h,header:`${h}`,accessorFn:b=>b.levels[h]?.apis}))],[u,p,a,l,g]);return e.createElement(z,{columns:L,data:c,sortBy:[{id:"team",desc:!1}],groupHeaderTitle:"APIs by level"})}function Ce(d){const{data:c,title:p}=d,u=E(()=>[{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:a})=>a.getCanExpand()?e.createElement(R,{onClick:a.getToggleExpandedHandler(),variant:"text",size:"medium",icon:a.getIsExpanded()?e.createElement(_,null):e.createElement(G,null)}):null},{header:"Rules",accessorKey:"ruleId",cell:({getValue:a,row:l})=>l.getCanExpand()?e.createElement("span",{onClick:l.getToggleExpandedHandler()},a()):null},{header:"Status",accessorKey:"status",size:200,cell:({getValue:a})=>{const l=a();return e.createElement(ae,{errors:l?.errorsCount,warnings:l?.warningsCount})},enableSorting:!1},{header:"Problem count",accessorKey:"problemsCount",size:200,sortDescFirst:!0}],[]);return e.createElement(z,{columns:u,data:c,sortBy:[{id:"ruleId",desc:!1}],empty:e.createElement(e.Fragment,null,"\u2705 This API is compliant with ",e.createElement("strong",null,p)," level rules"),subRowKey:"problems"})}function _e(d){const{catalogSlug:c,slug:p,data:u,hasTeam:a,hasPublishedAt:l,teamLabel:g}=d,{apis:L,apisCount:h,warningApisCount:b,errorApisCount:m,levels:y,count:S}=u,x=E(()=>Object.values(L),[L]),w=x.length===0,r=w?void 0:{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:n})=>n.getCanExpand()?e.createElement(R,{onClick:n.getToggleExpandedHandler(),variant:"text",size:"medium",icon:n.getIsExpanded()?e.createElement(_,null):e.createElement(G,null)}):null},s=E(()=>[r,{header:"API",accessorKey:"title"},l?{header:"Published at",accessorKey:"publishedAt",cell:({getValue:n})=>{const i=n();return i?new Date(i).toLocaleDateString():"-"}}:void 0,a?{header:g,accessorKey:"team",cell:({getValue:n})=>n()||de}:void 0,{header:"Problem count",size:200,accessorKey:"count",cell:({getValue:n})=>n()||0,sortDescFirst:!0}].filter(B),[a,l,g,w]),f=E(()=>Object.entries(u.teams).sort((n,i)=>i[1]-n[1]),[u.teams]);return e.createElement(X,null,e.createElement(R,{icon:e.createElement(U,null),iconPosition:"left",variant:"ghost",size:"large",to:`${c}scorecard`},"Back to dashboard"),e.createElement("h1",null,"Rule ",p),e.createElement(Y,null,e.createElement(V,null,e.createElement(F,null,"Rule status"),e.createElement(re,null,e.createElement("div",null,e.createElement(P,null,h),e.createElement("br",null),"APIs"),e.createElement("div",null,e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},h-b-m),e.createElement(q,{severity:"Pass"})),e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},b),e.createElement(q,{severity:"Warn"})),e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},m),e.createElement(q,{severity:"Error"}))))),e.createElement(V,null,e.createElement(F,null,"Problems by level"),e.createElement(te,null,Object.entries(y).map(([n,i])=>e.createElement(ee,{key:n},e.createElement("span",null,n),e.createElement(ve,{chunks:[{share:i.errors/S*100,colorVariable:"--scorecard-color-error"},{share:i.warnings/S*100,colorVariable:"--scorecard-color-warning"}]}),e.createElement(be,null,i.errors+i.warnings))))),e.createElement(V,null,e.createElement(F,null,`Problems by ${g}`),e.createElement(te,null,f.slice(0,4).map(([n,i])=>e.createElement(ee,{key:n},e.createElement("span",{style:{flex:1,textAlign:"left"}},n),e.createElement(P,null,i)))))),e.createElement(z,{columns:s,data:x,sortBy:[{id:"title",desc:!1}],subRowKey:"problems",slug:p}))}function Ue(d){const{slug:c,api:p,teamLabel:u,catalogSlug:a}=d,{api:l}=p||{},{scorecard:g,isLoading:L}=ye(`/${c}`),{processScorecard:h,getApiTableColumns:b}=Z(),m=g&&h(g,p.api),y=m?.levels||{},S=E(()=>Object.keys(y),[y]),x=E(()=>l?.publishedAt instanceof Date?l?.publishedAt.toLocaleDateString():l?.publishedAt,[l]),w=E(()=>{if(!m?.levels)return{};const t={};for(const o of Object.keys(m.levels)){const A=m.levels[o].problems.reduce((T,C)=>(T[C.ruleId]||(T[C.ruleId]=[]),T[C.ruleId].push(C),T),{});t[o]=Object.entries(A).map(([T,C])=>({ruleId:T,problems:[...C.filter(v=>v.severity==="error"),...C.filter(v=>v.severity==="warn")],problemsCount:C.length,status:{errorsCount:C.filter(v=>v.severity==="error").length,warningsCount:C.filter(v=>v.severity==="warn").length}}))}return t},[m?.levels]),r=E(()=>{if(!m)return[];const t={api:p.api,scorecard:m};return(b?.()??[]).filter(o=>!o.details?.hidden).map(o=>{const A=o.getValue?.(t),T=o.details?.description,C=typeof T=="function"?T(t):T;let v;if(o.details?.render){if(v=o.details.render({row:t,value:A}),v===null)return}else if(o.render){if(v=o.render({row:t,value:A}),v===null)return}else v=A==null||A===""?"-":String(A);const K=o.details?.status,I=typeof K=="function"?K({row:t,value:A}):K,M=o.details?.statusRule,$={errors:I?.errors??(M==="problem-if-truthy"&&A?1:0),warnings:I?.warnings??0};return!I&&M==="problem-if-falsy"&&!A&&($.errors=1),{id:`custom-${o.id}`,label:o.details?.tabLabel||o.header,description:C,content:v,placement:o.placement==="beforeLevels"?"beforeLevels":"afterLevels",status:$}}).filter(B)},[p.api,b,m]),s=E(()=>r.filter(t=>t.placement==="beforeLevels"),[r]),f=E(()=>r.filter(t=>t.placement==="afterLevels"),[r]),n=E(()=>[...s.map(t=>t.id),...S,...f.map(t=>t.id)],[f,s,S]),[i,D]=se(n[0]||"");return ie(()=>{n.length&&D(t=>n.includes(t)?t:n[0])},[n]),L?e.createElement(oe,{justifyContent:"center",mt:"2em"},e.createElement(ce,null)):m?e.createElement(X,null,e.createElement(R,{icon:e.createElement(U,null),iconPosition:"left",variant:"ghost",size:"large",to:`${a}scorecard`},"Back to dashboard"),e.createElement("h1",null,l?.title||c),e.createElement(fe,null,x&&e.createElement(e.Fragment,null,"Published at: ",new Date().toLocaleString(void 0,{timeZoneName:"short"}),e.createElement("br",null)),e.createElement(W,{to:l?.link,external:!0},"Documentation")),e.createElement(Y,null,e.createElement(V,null,e.createElement(he,null,e.createElement("span",null,"Scorecard level"),e.createElement(ne,{level:m.scorecardLevel,colorVariable:J(m.scorecardLevelIdx,Object.keys(y).length)})),e.createElement(re,null,e.createElement("div",null,"Compliance by level"),e.createElement("div",null,Object.entries(m.levels).map(([t,o])=>e.createElement(k,{key:t},e.createElement(P,{style:{width:"100px",textAlign:"right"}},t),e.createElement(N,{errors:o.errors,warnings:o.warnings})))))),e.createElement(me,{title:"Rules compliance",levels:Object.entries(m.levels).map(([t,o])=>({errors:o.uniqueErrors,warnings:o.uniqueWarnings,total:d.rulesPerLevel[t].length,name:t}))}),e.createElement(V,null,e.createElement(F,null,u),e.createElement(P,{style:{fontWeight:"normal"}},l?.team))),e.createElement(Ee,{style:{justifyContent:"flex-start"},"data-component-name":"Scorecard/ModeSwitcherTabs"},s.map(t=>e.createElement(O,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t.id,isActive:i===t.id,onClick:()=>D(t.id)},e.createElement(k,null,e.createElement("span",null,t.label),e.createElement(N,{errors:t.status.errors,warnings:t.status.warnings})))),S.map(t=>e.createElement(O,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t,isActive:i===t,onClick:()=>D(t)},e.createElement(k,null,e.createElement("span",null,t)," ",e.createElement(N,{errors:m.levels[t].errors,warnings:m.levels[t].warnings})))),f.map(t=>e.createElement(O,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t.id,isActive:i===t.id,onClick:()=>D(t.id)},e.createElement(k,null,e.createElement("span",null,t.label),e.createElement(N,{errors:t.status.errors,warnings:t.status.warnings}))))),s.map(t=>e.createElement(j,{key:t.id,isActive:i===t.id},e.createElement(V,null,t.description?e.createElement("p",{style:{marginTop:0,marginBottom:12,color:"var(--text-color-secondary)"}},t.description):null,e.createElement("div",null,t.content)))),S.map(t=>e.createElement(j,{key:t,isActive:i===t},e.createElement(Ce,{title:t,data:w[t]}))),f.map(t=>e.createElement(j,{key:t.id,isActive:i===t.id},e.createElement(V,null,t.description?e.createElement("p",{style:{marginTop:0,marginBottom:12,color:"var(--text-color-secondary)"}},t.description):null,e.createElement("div",null,t.content))))):e.createElement("div",null,"Scorecard not found")}export{$e as ApiListView,Ue as ApiPage,Ce as ApiView,_e as RuleView,He as RulesView,Ge as TeamsView};
|
|
1
|
+
import*as e from"react";import{useCallback as se,useMemo as E,useState as ie,useEffect as oe}from"react";import{useLocation as G}from"react-router-dom";import{Flex as ce}from"@redocly/portal-legacy-ui";import{Button as I}from"@redocly/theme/components/Button/Button";import{AddIcon as _}from"@redocly/theme/icons/AddIcon/AddIcon";import{SubtractIcon as U}from"@redocly/theme/icons/SubtractIcon/SubtractIcon";import{ArrowLeftIcon as Z}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{useProcessScorecard as J}from"@redocly/theme/ext/process-scorecard";import{getScorecardColorVariable as Q,withoutPathPrefix as X}from"@redocly/theme/core/utils";import{Link as O}from"../../../../client/app/Link";import ue from"../../../../client/app/CircularProgress";import{isDefined as j}from"../../../../utils/guards/is-defined.js";import{removeLeadingSlash as me}from"../../../../utils/url/remove-leading-slash.js";import{StatusByLevelWidget as de}from"./StatusByLevelWidget";import{OTHER_TEAMS_LABEL as pe,NON_CONFORMANT as ge}from"./utils";import{LevelIndicator as fe}from"./LevelIndicator";import{AppPageWrapper as Y,CardValue as P,CardsWrapper as ee,CatalogDescription as Ee,ModeSwitcherTab as q,ModeSwitcherTabs as he,CardRow as te,ProblemsByStatusCardBody as re,ScoreCardStatusCardBody as ne,TableWrap as M,LevelComplianceCardTitle as ye,ContentWithDotWrap as k,ScorecardCard as V,ScorecardCardTitle as N}from"./index.styles";import{ApiLevel as ae,InstanceStatus as $,LevelStatus as R,RuleStatus as le}from"./components";import{Grid as z}from"./Grid/Grid";import{useDetailedScorecard as ve}from"./useDetailedScorecard";import{Gauge as be,GaugeValue as Se}from"./Gauge";function Ce(c,u,p){if(c===u)return 0;if(c==null||c==="")return 1;if(u==null||u==="")return-1;if(p==="number"){const m=Number(c),a=Number(u),s=Number.isNaN(m),g=Number.isNaN(a);return s&&g?0:s?1:g?-1:m-a}if(p==="date"){const m=new Date(String(c)).getTime(),a=new Date(String(u)).getTime(),s=Number.isNaN(m),g=Number.isNaN(a);return s&&g?0:s?1:g?-1:m-a}return String(c).localeCompare(String(u))}function F(c){return c==="error"?{errors:1,warnings:0}:c==="warning"?{errors:0,warnings:1}:{errors:0,warnings:0}}function He(c){const u=G(),{data:p,levelNames:m,hasPublishedAt:a,hasTeam:s,teamLabel:g}=c,{getApiTableColumns:L}=J(),h=se((y,S,A)=>{const D=y.getValue(A)?new Date(y.getValue(A)).getTime():0,r=S.getValue(A)?new Date(S.getValue(A)).getTime():0;return D>r?1:-1},[]),b=E(()=>{const y=L?.()??[],S=y.filter(r=>r.placement==="beforeLevels"),A=y.filter(r=>r.placement!=="beforeLevels"),D=r=>({id:r.id,header:String(r.header),accessorFn:o=>r.getValue?.(o)??r.getSortValue?.(o),enableSorting:!!(r.sortingFn||r.sortRule||r.getSortValue||r.getValue),sortingFn:(o,f,n)=>{const l=o.original,x=f.original,t=r.getSortValue?.(l)??o.getValue(n),i=r.getSortValue?.(x)??f.getValue(n);return r.sortingFn?r.sortingFn({rowA:l,rowB:x,valueA:t,valueB:i}):Ce(t,i,r.sortRule||"string")},...r.sortDescFirst!==void 0?{sortDescFirst:r.sortDescFirst}:{},cell:({getValue:o,row:f})=>{const n=o(),l=f.original;return r.render?r.render({row:l,value:n}):n==null||n===""?"-":String(n)},...r.size!==void 0?{size:r.size}:{},...r.minSize!==void 0?{minSize:r.minSize}:{},...r.maxSize!==void 0?{maxSize:r.maxSize}:{}});return[{id:"title",header:"API",accessorKey:"api.title",size:200,cell:({getValue:r,row:o})=>e.createElement(O,{to:X(u.pathname)+"/apis/"+encodeURIComponent(me(o.original.api.link))},r()," ",o.original.api.version)},a?{header:"Published at",accessorKey:"api.publishedAt",sortingFn:h,cell:({getValue:r})=>{const o=r();return o?new Date(o).toLocaleDateString():"-"}}:void 0,s?{header:g,accessorKey:"api.team"}:void 0,{id:"level",header:"Level",accessorKey:"scorecard.scorecardLevel",cell:({getValue:r,row:o})=>e.createElement(ae,{level:r(),colorVariable:Q(o.original?.scorecard.scorecardLevelIdx,m.length+1)})},...S.map(D),...m.map(r=>({id:r,header:`${r}`,accessorKey:"scorecard.levels",sortingFn:(o,f,n)=>{const l=o.getValue(n)[n].uniqueErrors,x=f.getValue(n)[n].uniqueErrors,t=o.getValue(n)[n].uniqueWarnings,i=f.getValue(n)[n].uniqueWarnings;return l===x?t-i:l-x},cell:({getValue:o,row:{original:f}})=>{const n=o(),l=f.api.link;return n?.[r]?e.createElement(fe,{key:l,uniqueErrors:n[r].uniqueErrors,uniqueWarnings:n[r].uniqueWarnings,customDisplay:n[r].customDisplay,id:l}):null}})),...A.map(D)].filter(j)},[h,m,u.pathname,a,s,g,L]),d=E(()=>{const y=Math.max(b.length-3,0);return`25% max(140px, 15%) max(140px, 10%)${y>0?` repeat(${y}, 1fr)`:""}`},[b.length]);return e.createElement(z,{columns:b,data:p,sortBy:[{id:"title",desc:!1}],gridTemplateColumns:d})}function Ge(c){const u=G(),{data:p}=c,m=E(()=>[{header:"Rules",accessorKey:"ruleId",cell:({getValue:a})=>e.createElement(O,{to:X(u.pathname)+"/rules/"+encodeURIComponent(a())},a())},{id:"status",header:"Status",accessorKey:"status",size:200,cell:({row:a})=>e.createElement(le,{errors:a.original.errorApisCount,warnings:a.original.warningApisCount})},{header:"Problem APIs",width:200,accessorKey:"apisCount",cell:({getValue:a})=>a(),sortDescFirst:!0},{header:"Problem count",size:200,accessorKey:"count",sortDescFirst:!0}],[u.pathname]);return e.createElement(z,{columns:m,data:p,virtualized:!1,sortBy:[{id:"status",desc:!0}]})}function _e(c){const{data:u,levelNames:p,filters:m,setActiveTab:a,teamLabel:s,teamProperty:g}=c,L=E(()=>[{id:"team",header:`API ${s}`,accessorKey:"team",size:200,cell:({getValue:h})=>e.createElement("a",{href:"#",onClick:b=>{b.preventDefault(),a("apis"),m.find(d=>d.property===g)?.selectOption(h())}},h())},...[ge,...p].map(h=>({id:h,header:`${h}`,accessorFn:b=>b.levels[h]?.apis}))],[m,p,a,s,g]);return e.createElement(z,{columns:L,data:u,sortBy:[{id:"team",desc:!1}],groupHeaderTitle:"APIs by level"})}function Ae(c){const{data:u,title:p}=c,m=E(()=>[{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:a})=>a.getCanExpand()?e.createElement(I,{onClick:a.getToggleExpandedHandler(),variant:"text",size:"medium",icon:a.getIsExpanded()?e.createElement(U,null):e.createElement(_,null)}):null},{header:"Rules",accessorKey:"ruleId",cell:({getValue:a,row:s})=>s.getCanExpand()?e.createElement("span",{onClick:s.getToggleExpandedHandler()},a()):null},{header:"Status",accessorKey:"status",size:200,cell:({getValue:a})=>{const s=a();return e.createElement(le,{errors:s?.errorsCount,warnings:s?.warningsCount})},enableSorting:!1},{header:"Problem count",accessorKey:"problemsCount",size:200,sortDescFirst:!0}],[]);return e.createElement(z,{columns:m,data:u,sortBy:[{id:"ruleId",desc:!1}],empty:e.createElement(e.Fragment,null,"\u2705 This API is compliant with ",e.createElement("strong",null,p)," level rules"),subRowKey:"problems"})}function Ue(c){const{catalogSlug:u,slug:p,data:m,hasTeam:a,hasPublishedAt:s,teamLabel:g}=c,{apis:L,apisCount:h,warningApisCount:b,errorApisCount:d,levels:y,count:S}=m,A=E(()=>Object.values(L),[L]),D=A.length===0,r=D?void 0:{id:"expand",maxSize:40,size:40,header:()=>null,enableSorting:!1,cell:({row:n})=>n.getCanExpand()?e.createElement(I,{onClick:n.getToggleExpandedHandler(),variant:"text",size:"medium",icon:n.getIsExpanded()?e.createElement(U,null):e.createElement(_,null)}):null},o=E(()=>[r,{header:"API",accessorKey:"title"},s?{header:"Published at",accessorKey:"publishedAt",cell:({getValue:n})=>{const l=n();return l?new Date(l).toLocaleDateString():"-"}}:void 0,a?{header:g,accessorKey:"team",cell:({getValue:n})=>n()||pe}:void 0,{header:"Problem count",size:200,accessorKey:"count",cell:({getValue:n})=>n()||0,sortDescFirst:!0}].filter(j),[a,s,g,D]),f=E(()=>Object.entries(m.teams).sort((n,l)=>l[1]-n[1]),[m.teams]);return e.createElement(Y,null,e.createElement(I,{icon:e.createElement(Z,null),iconPosition:"left",variant:"ghost",size:"large",to:`${u}scorecard`},"Back to dashboard"),e.createElement("h1",null,"Rule ",p),e.createElement(ee,null,e.createElement(V,null,e.createElement(N,null,"Rule status"),e.createElement(ne,null,e.createElement("div",null,e.createElement(P,null,h),e.createElement("br",null),"APIs"),e.createElement("div",null,e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},h-b-d),e.createElement($,{severity:"Pass"})),e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},b),e.createElement($,{severity:"Warn"})),e.createElement(k,null,e.createElement(P,{style:{textAlign:"right"}},d),e.createElement($,{severity:"Error"}))))),e.createElement(V,null,e.createElement(N,null,"Problems by level"),e.createElement(re,null,Object.entries(y).map(([n,l])=>e.createElement(te,{key:n},e.createElement("span",null,n),e.createElement(be,{chunks:[{share:l.errors/S*100,colorVariable:"--scorecard-color-error"},{share:l.warnings/S*100,colorVariable:"--scorecard-color-warning"}]}),e.createElement(Se,null,l.errors+l.warnings))))),e.createElement(V,null,e.createElement(N,null,`Problems by ${g}`),e.createElement(re,null,f.slice(0,4).map(([n,l])=>e.createElement(te,{key:n},e.createElement("span",{style:{flex:1,textAlign:"left"}},n),e.createElement(P,null,l)))))),e.createElement(z,{columns:o,data:A,sortBy:[{id:"title",desc:!1}],subRowKey:"problems",slug:p}))}function Ze(c){const{slug:u,api:p,teamLabel:m,catalogSlug:a}=c,{api:s}=p||{},{scorecard:g,isLoading:L}=ve(`/${u}`),{processScorecard:h,getApiTableColumns:b}=J(),d=g&&h(g,p.api),y=d?.levels||{},S=E(()=>Object.keys(y),[y]),A=E(()=>s?.publishedAt instanceof Date?s?.publishedAt.toLocaleDateString():s?.publishedAt,[s]),D=E(()=>{if(!d?.levels)return{};const t={};for(const i of Object.keys(d.levels)){const w=d.levels[i].problems.reduce((T,C)=>(T[C.ruleId]||(T[C.ruleId]=[]),T[C.ruleId].push(C),T),{});t[i]=Object.entries(w).map(([T,C])=>({ruleId:T,problems:[...C.filter(v=>v.severity==="error"),...C.filter(v=>v.severity==="warn")],problemsCount:C.length,status:{errorsCount:C.filter(v=>v.severity==="error").length,warningsCount:C.filter(v=>v.severity==="warn").length}}))}return t},[d?.levels]),r=E(()=>{if(!d)return[];const t={api:p.api,scorecard:d};return(b?.()??[]).filter(i=>!i.details?.hidden).map(i=>{const w=i.getValue?.(t),T=i.details?.description,C=typeof T=="function"?T(t):T;let v;if(i.details?.render){if(v=i.details.render({row:t,value:w}),v===null)return}else if(i.render){if(v=i.render({row:t,value:w}),v===null)return}else v=w==null||w===""?"-":String(w);const K=i.details?.status,B=typeof K=="function"?K({row:t,value:w}):K,H=i.details?.statusRule;let W=B||"success";return!B&&H==="problem-if-truthy"&&(W=w?"error":"success"),!B&&H==="problem-if-falsy"&&(W=w?"success":"error"),{id:`custom-${i.id}`,label:i.details?.tabLabel||i.header,description:C,content:v,placement:i.placement==="beforeLevels"?"beforeLevels":"afterLevels",status:W}}).filter(j)},[p.api,b,d]),o=E(()=>r.filter(t=>t.placement==="beforeLevels"),[r]),f=E(()=>r.filter(t=>t.placement==="afterLevels"),[r]),n=E(()=>[...o.map(t=>t.id),...S,...f.map(t=>t.id)],[f,o,S]),[l,x]=ie(n[0]||"");return oe(()=>{n.length&&x(t=>n.includes(t)?t:n[0])},[n]),L?e.createElement(ce,{justifyContent:"center",mt:"2em"},e.createElement(ue,null)):d?e.createElement(Y,null,e.createElement(I,{icon:e.createElement(Z,null),iconPosition:"left",variant:"ghost",size:"large",to:`${a}scorecard`},"Back to dashboard"),e.createElement("h1",null,s?.title||u),e.createElement(Ee,null,A&&e.createElement(e.Fragment,null,"Published at: ",new Date().toLocaleString(void 0,{timeZoneName:"short"}),e.createElement("br",null)),e.createElement(O,{to:s?.link,external:!0},"Documentation")),e.createElement(ee,null,e.createElement(V,null,e.createElement(ye,null,e.createElement("span",null,"Scorecard level"),e.createElement(ae,{level:d.scorecardLevel,colorVariable:Q(d.scorecardLevelIdx,Object.keys(y).length)})),e.createElement(ne,null,e.createElement("div",null,"Compliance by level"),e.createElement("div",null,Object.entries(d.levels).map(([t,i])=>e.createElement(k,{key:t},e.createElement(P,{style:{width:"100px",textAlign:"right"}},t),e.createElement(R,{errors:i.errors,warnings:i.warnings})))))),e.createElement(de,{title:"Rules compliance",levels:Object.entries(d.levels).map(([t,i])=>({errors:i.uniqueErrors,warnings:i.uniqueWarnings,total:c.rulesPerLevel[t].length,name:t}))}),e.createElement(V,null,e.createElement(N,null,m),e.createElement(P,{style:{fontWeight:"normal"}},s?.team))),e.createElement(he,{style:{justifyContent:"flex-start"},"data-component-name":"Scorecard/ModeSwitcherTabs"},o.map(t=>e.createElement(q,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t.id,isActive:l===t.id,onClick:()=>x(t.id)},e.createElement(k,null,e.createElement("span",null,t.label),e.createElement(R,{errors:F(t.status).errors,warnings:F(t.status).warnings})))),S.map(t=>e.createElement(q,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t,isActive:l===t,onClick:()=>x(t)},e.createElement(k,null,e.createElement("span",null,t)," ",e.createElement(R,{errors:d.levels[t].errors,warnings:d.levels[t].warnings})))),f.map(t=>e.createElement(q,{"data-component-name":"Scorecard/ModeSwitcherTab",key:t.id,isActive:l===t.id,onClick:()=>x(t.id)},e.createElement(k,null,e.createElement("span",null,t.label),e.createElement(R,{errors:F(t.status).errors,warnings:F(t.status).warnings}))))),o.map(t=>e.createElement(M,{key:t.id,isActive:l===t.id},e.createElement(V,null,t.description?e.createElement("p",{style:{marginTop:0,marginBottom:12,color:"var(--text-color-secondary)"}},t.description):null,e.createElement("div",null,t.content)))),S.map(t=>e.createElement(M,{key:t,isActive:l===t},e.createElement(Ae,{title:t,data:D[t]}))),f.map(t=>e.createElement(M,{key:t.id,isActive:l===t.id},e.createElement(V,null,t.description?e.createElement("p",{style:{marginTop:0,marginBottom:12,color:"var(--text-color-secondary)"}},t.description):null,e.createElement("div",null,t.content))))):e.createElement("div",null,"Scorecard not found")}export{He as ApiListView,Ze as ApiPage,Ae as ApiView,Ue as RuleView,Ge as RulesView,_e as TeamsView};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/realm",
|
|
3
|
-
"version": "0.130.0-custom.
|
|
3
|
+
"version": "0.130.0-custom.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -91,14 +91,14 @@
|
|
|
91
91
|
"xpath": "0.0.34",
|
|
92
92
|
"yaml-ast-parser": "0.0.43",
|
|
93
93
|
"zod": "^3.25.76",
|
|
94
|
+
"@redocly/config": "0.43.0-custom.0",
|
|
95
|
+
"@redocly/openapi-docs": "3.18.0-custom.0",
|
|
96
|
+
"@redocly/realm-asyncapi-sdk": "0.9.0-next.0",
|
|
94
97
|
"@redocly/graphql-docs": "1.7.0-custom.0",
|
|
95
98
|
"@redocly/asyncapi-docs": "1.7.0-custom.0",
|
|
96
|
-
"@redocly/
|
|
99
|
+
"@redocly/portal-legacy-ui": "0.14.0-next.0",
|
|
97
100
|
"@redocly/theme": "0.62.0-custom.0",
|
|
98
|
-
"@redocly/
|
|
99
|
-
"@redocly/portal-plugin-mock-server": "0.16.0-next.0",
|
|
100
|
-
"@redocly/realm-asyncapi-sdk": "0.9.0-next.0",
|
|
101
|
-
"@redocly/portal-legacy-ui": "0.14.0-next.0"
|
|
101
|
+
"@redocly/portal-plugin-mock-server": "0.16.0-next.0"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"react": "^19.2.4",
|