PageSourceSearch

https://www.closelio.ai/assets/ComplianceReviews-BFFzpkRG.js

js closelio.ai collected 2026-10-05 12:09:59 UTC 2,527 bytes, 1 lines download raw bytes

1import{r as o,j as a,aG as m,aH as p,aI as u,aJ as x,aW as v,aY as g,L as h,az as j,ac as d}from"./index-BK_dRcWU.js";import{a as b}from"./adminApi-QaXRvFIA.js";const f={a2p_brand:"A2P Brand",a2p_campaign:"A2P Campaign",voice_integrity:"Voice Integrity"},w=["pending","submitted","rejected","all"];function y(t){const r=t.payload||{},s=n=>typeof r[n]=="string"?r[n]:"";return s("company_name")||s("brand_name")||s("contact_name")||s("use_case")||s("email")||t.user_id.slice(0,8)}function S(){const[t,r]=o.useState("pending"),[s,n]=o.useState(null),[l,c]=o.useState(null);return o.useEffect(()=>{let e=!1;return n(null),c(null),b.listComplianceReviews(t).then(i=>{e||n(i.reviews||[])}).catch(i=>{e||c(i instanceof Error?i.message:"Failed to load reviews")}),()=>{e=!0}},[t]),a.jsxs(m,{children:[a.jsx(p,{title:"Compliance Review",subtitle:"Held A2P / Voice Integrity submissions awaiting human review before Twilio."}),a.jsx(u,{children:a.jsxs(x,{title:"Queue",children:[a.jsx("div",{className:"mb-4 flex gap-2",children:w.map(e=>a.jsx("button",{onClick:()=>r(e),className:"rounded-md px-3 py-1.5 text-[12.5px] font-semibold capitalize transition-colors",style:{background:t===e?"var(--accent)":"var(--rowHover)",color:t===e?"var(--btn-primary-text)":"var(--oc-text-muted)",border:"1px solid var(--border)"},children:e},e))}),l?a.jsx(v,{size:"inline",title:"Couldn't load the review queue",message:l}):s?s.length===0?a.jsx(g,{title:`No ${t==="all"?"":t} reviews`,body:"Nothing to review right now."}):a.jsx("div",{className:"space-y-2",children:s.map(e=>a.jsx(h,{to:`/admin/compliance/${e.id}`,className:"block",children:a.jsx(j,{className:"transition-colors hover:bg-[var(--rowHover)]",children:a.jsx("div",{className:"flex items-center justify-between gap-3",children:a.jsxs("div",{className:"min-w-0",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(d,{children:f[e.kind]||e.kind}),a.jsx("span",{className:"truncate text-[14px] font-semibold",style:{color:"var(--oc-text)"},children:y(e)}),e.status==="pending"&&!e.slack_notified_at&&a.jsx(d,{variant:"warning",children:"not pinged"})]}),a.jsxs("p",{className:"mt-0.5 text-[12px]",style:{color:"var(--oc-text-muted)"},children:[new Date(e.created_at).toLocaleString()," · ",e.status]})]})})})},e.id))}):a.jsx("div",{className:"space-y-2",children:Array.from({length:3}).map((e,i)=>a.jsx("div",{className:"h-[64px] animate-pulse rounded-lg",style:{background:"var(--rowHover)",border:"1px solid var(--border)"}},i))})]})})]})}export{S as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.