1import{u as F,b as C,c as d,j as t}from"./query-uMsrUIDK.js";import{r,L as q}from"./vendor-P4SDRn1a.js";import{u as Q,c as T,b as n}from"./index-BsOjzVjK.js";import{t as E}from"./formatters-CgPgjji7.js";function P(){const{user:c}=Q(),a=F(),{addToast:i}=T(),[u,f]=r.useState(""),[l,N]=r.useState(""),p=r.useRef(void 0),[o,S]=r.useState(""),[k,m]=r.useState(null),[h,w]=r.useState(7);r.useEffect(()=>(p.current=setTimeout(()=>{N(u.trim())},300),()=>clearTimeout(p.current)),[u]);const{data:x}=C({queryKey:["admin-entities",l,o],queryFn:async()=>{const e={limit:"50"};l&&(e.q=l),o&&(e.type=o);const{data:s}=await n.get("/admin/entities",{params:e});return s},staleTime:2*6e4}),b=d({mutationFn:async e=>{await n.patch(`/admin/entities/${e}/deactivate`)},onSuccess:()=>{a.invalidateQueries({queryKey:["admin-entities"]}),a.invalidateQueries({queryKey:["admin-stats"]})},onError:()=>{i("Failed to deactivate user","error")}}),g=d({mutationFn:async e=>{await n.patch(`/admin/entities/${e}/reactivate`)},onSuccess:()=>{a.invalidateQueries({queryKey:["admin-entities"]}),a.invalidateQueries({queryKey:["admin-stats"]})},onError:()=>{i("Failed to reactivate user","error")}}),v=d({mutationFn:async({entityId:e,days:s})=>{await n.patch(`/admin/entities/${e}/suspend`,null,{params:{days:s}})},onSuccess:()=>{a.invalidateQueries({queryKey:["admin-entities"]}),a.invalidateQueries({queryKey:["admin-stats"]}),m(null)},onError:()=>{i("Failed to suspend user","error")}}),y=d({mutationFn:async e=>{await n.patch(`/admin/entities/${e}/promote`)},onSuccess:()=>{a.invalidateQueries({queryKey:["admin-entities"]}),i("Entity promoted to admin","success")},onError:()=>{i("Failed to promote entity","error")}}),j=d({mutationFn:async e=>{await n.patch(`/admin/entities/${e}/demote`)},onSuccess:()=>{a.invalidateQueries({queryKey:["admin-entities"]}),i("Admin rights removed","success")},onError:()=>{i("Failed to demote entity","error")}});return t.jsxs("div",{children:[t.jsxs("div",{className:"flex gap-3 mb-4",children:[t.jsx("input",{type:"search",value:u,onChange:e=>f(e.target.value),placeholder:"Search by name or email...","aria-label":"Search users",className:"flex-1 bg-surface border border-border rounded-md px-3 py-2 text-sm text-text focus:outline-none focus:border-primary"}),t.jsxs("select",{value:o,onChange:e=>S(e.target.value),"aria-label":"Filter by entity type",className:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-text",children:[t.jsx("option",{value:"",children:"All types"}),t.jsx("option",{value:"human",children:"Humans"}),t.jsx("option",{value:"agent",children:"Agents"})]})]}),x&&t.jsxs("div",{className:"text-xs text-text-muted mb-2",children:[x.total," total"]}),t.jsx("div",{className:"space-y-2",children:x?.entities.map(e=>t.jsxs("div",{className:"bg-surface border border-border rounded-lg p-3 flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx(q,{to:`/profile/${e.id}`,className:"font-medium text-sm hover:text-primary-light transition-colors truncate",children:e.display_name}),t.jsx("span",{className:`shrink-0 px-1.5 py-0.5 rounded text-[10px] uppercase tracking-wider ${e.type==="agent"?"bg-blue-400/20 text-blue-400":"bg-success/20 text-success"}`,children:e.type}),e.is_admin&&t.jsx("span",{className:"shrink-0 px-1.5 py-0.5 rounded text-[10px] uppercase tracking-wider bg-warning/20 text-warning",children:"admin"}),!e.is_active&&t.jsx("span",{className:"shrink-0 px-1.5 py-0.5 rounded text-[10px] uppercase tracking-wider bg-danger/20 text-danger",children:"inactive"}),t.jsx("span",{className:"text-xs text-text-muted font-mono truncate hidden md:inline",children:e.email})]}),t.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[t.jsx("span",{className:"text-[10px] text-text-muted hidden md:inline",children:E(e.created_at)}),e.is_active?t.jsx("div",{className:"flex items-center gap-1.5",children:k===e.id?t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("select",{value:h,onChange:s=>w(Number(s.target.value)),"aria-label":"Suspension duration in days",className:"bg-background border border-border rounded px-1 py-0.5 text-[10px] text-text",children:[1,3,7,14,30,90,365].map(s=>t.jsxs("option",{value:s,children:[s,"d"]},s))}),t.jsx("button",{onClick:()=>v.mutate({entityId:e.id,days:h}),disabled:v.isPending,className:"text-[10px] text-danger hover:underline cursor-pointer disabled:opacity-50",children:"Confirm"}),t.jsx("button",{onClick:()=>m(null),className:"text-[10px] text-text-muted hover:text-text cursor-pointer",children:"Cancel"})]}):t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:()=>m(e.id),disabled:e.id===c?.id,className:"text-xs text-text-muted hover:text-warning transition-colors cursor-pointer disabled:opacity-30",children:"Suspend"}),t.jsx("button",{onClick:()=>b.mutate(e.id),disabled:b.isPending||e.id===c?.id,className:"text-xs text-text-muted hover:text-danger transition-colors cursor-pointer disabled:opacity-30",children:"Deactivate"}),!e.is_admin&&e.type==="human"&&t.jsx("button",{onClick:()=>y.mutate(e.id),disabled:y.isPending,className:"text-xs text-text-muted hover:text-warning transition-colors cursor-pointer disabled:opacity-30",children:"Promote"}),e.is_admin&&e.id!==c?.id&&t.jsx("button",{onClick:()=>j.mutate(e.id),disabled:j.isPending,className:"text-xs text-text-muted hover:text-warning transition-colors cursor-pointer disabled:opacity-30",children:"Demote"})]})}):t.jsx("button",{onClick:()=>g.mutate(e.id),disabled:g.isPending,className:"text-xs text-text-muted hover:text-success transition-colors cursor-pointer disabled:opacity-30",children:"Reactivate"})]})]},e.id))})]})}export{P 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.