1import{r as o,j as e,L as B,b as _}from"./app-agent-BZC6DXaU.js";import{A as Y}from"./AdminLayout-BZCd3cL1.js";import"./preload-helper-I4rgV-VL.js";import"./_commonjsHelpers-CqkleIqs.js";import"./theme-DO6h0AN3.js";function H(n,a){const s=new URL(n,window.location.origin);return Object.entries(a).forEach(([l,i])=>{if(!(i==null||i==="")){if(Array.isArray(i)){i.forEach(m=>s.searchParams.append(`${l}[]`,String(m)));return}s.searchParams.set(l,String(i))}}),s.pathname+s.search}function ie({users:n,filters:a={},createUrl:s,exportUrl:l="/admin/users/export",campaignOptions:i=[]}){const[m,y]=o.useState(a.q||""),[C,$]=o.useState(a.filter||"all"),[F,P]=o.useState(a.campaign||""),[f,j]=o.useState(()=>new Set),[c,h]=o.useState(!1),[K,p]=o.useState(!1),[q,b]=o.useState(""),[A,M]=o.useState(!1),d=a.sort||"created_at",g=a.dir==="asc"?"asc":"desc",E=n?.data||[],R=n?.links||[],w=Number(n?.total||0),u=E.map(t=>t.id),L=u.filter(t=>f.has(t)).length,k=u.length>0&&L===u.length,Q=L>0&&!k,V=w>u.length,D=c?w:L,T=u.filter(t=>f.has(t)),v=T.length;o.useEffect(()=>{y(a.q||""),$(a.filter||"all"),P(a.campaign||""),h(!1)},[a.q,a.filter,a.campaign]),o.useEffect(()=>{const t=new Set((n?.data||[]).map(r=>r.id));j(r=>{const x=new Set;return r.forEach(O=>{t.has(O)&&x.add(O)}),x}),h(!1),p(!1),b("")},[n?.data]);const U=(t={})=>({q:m||void 0,filter:C&&C!=="all"?C:void 0,campaign:F||void 0,sort:t.sort??(d!=="created_at"?d:void 0),dir:t.dir??(d!=="created_at"||g!=="desc"?g:void 0),...t}),z=t=>{t?.preventDefault(),_.get("/admin/users",U(),{preserveScroll:!0,replace:!0})},S=t=>{const r=d===t?g==="asc"?"desc":"asc":t==="last_login"?"desc":"asc";_.get("/admin/users",U({sort:t,dir:r}),{preserveScroll:!0,replace:!0})},G=t=>{h(!1),p(!1),b(""),j(r=>{const x=new Set(r);return x.has(t)?x.delete(t):x.add(t),x})},J=()=>{if(p(!1),b(""),k||c){j(new Set),h(!1);return}j(new Set(u)),h(!1)},I=()=>{j(new Set),h(!1),p(!1),b("")},W=()=>{q!=="DELETE"||A||T.length===0||c||(M(!0),_.post("/admin/users/bulk-destroy",{ids:T},{preserveScroll:!0,onFinish:()=>M(!1),onSuccess:()=>I()}))},X=()=>{if(D===0)return;if(c){window.location.assign(H(l,{all:1,q:a.q||void 0,filter:a.filter&&a.filter!=="all"?a.filter:void 0,campaign:a.campaign||void 0}));return}const t=u.filter(r=>f.has(r));t.length!==0&&window.location.assign(H(l,{ids:t,q:a.q||void 0,filter:a.filter&&a.filter!=="all"?a.filter:void 0,campaign:a.campaign||void 0}))};return e.jsx(Y,{title:"Users",subtitle:"Find people, filter by campaign, then edit or impersonate.",actions:e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:"agent-button agent-button--ghost",disabled:D===0,onClick:X,children:["Export CSV",D>0?` (${D})`:""]}),e.jsx(B,{href:s||"/admin/users/create",className:"agent-button agent-button--accent",children:"Add user"})]}),children:e.jsxs("div",{className:"agent-page admin-users",children:[e.jsxs("form",{className:"admin-toolbar",onSubmit:z,children:[e.jsx("input",{className:"agent-input",placeholder:"Search name, email, source, campaign",value:m,onChange:t=>y(t.target.value)}),e.jsxs("select",{className:"agent-input admin-band__select",value:C,onChange:t=>$(t.target.value),children:[e.jsx("option",{value:"all",children:"All"}),e.jsx("option",{value:"active",children:"Active sub"}),e.jsx("option",{value:"no-subscription",children:"No sub"}),e.jsx("option",{value:"attributed",children:"Has UTM"}),e.jsx("option",{value:"admin",children:"Admins"})]}),e.jsxs("select",{className:"agent-input admin-band__select",value:F,onChange:t=>P(t.target.value),children:[e.jsx("option",{value:"",children:"All campaigns"}),i.map(t=>e.jsx("option",{value:t,children:t},t))]}),e.jsx("button",{type:"submit",className:"agent-button",children:"Filter"})]}),v>0&&e.jsxs("div",{className:"admin-users__select-banner",role:"status",children:[e.jsxs("span",{children:[e.jsx("strong",{children:c?w:v}),c?" users matching this filter are selected.":v===1?" user selected.":" users selected."]}),e.jsx("div",{className:"admin-users__bulk-confirm",children:c?e.jsx("button",{type:"button",className:"agent-button agent-button--ghost",onClick:I,children:"Clear selection"}):K?e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"agent-label",htmlFor:"bulk-delete-confirm",children:"Type DELETE"}),e.jsx("input",{id:"bulk-delete-confirm",className:"agent-input",value:q,onChange:t=>b(t.target.value),onKeyDown:t=>{t.key==="Enter"&&t.preventDefault()},autoComplete:"off",placeholder:"DELETE",style:{width:"8rem"}}),e.jsx("button",{type:"button",className:"agent-button agent-button--danger",disabled:A||q!=="DELETE",onClick:W,children:A?"Deletingâ¦":`Delete ${v} ${v===1?"user":"users"}`}),e.jsx("button",{type:"button",className:"agent-button agent-button--ghost",onClick:()=>{p(!1),b("")},children:"Cancel"})]}):e.jsx("button",{type:"button",className:"agent-button agent-button--danger",onClick:()=>p(!0),children:"Delete selected"})})]}),k&&V&&!c&&e.jsxs("div",{className:"admin-users__select-banner",role:"status",children:[e.jsxs("span",{children:["All ",e.jsx("strong",{children:u.length})," users on this page are selected."]}),e.jsxs("button",{type:"button",className:"agent-button agent-button--ghost",onClick:()=>{h(!0),j(new Set(u)),p(!1),b("")},children:["Select all ",w," matching"]})]}),e.jsx("div",{className:"admin-table-wrap",children:e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{className:"admin-table__check",children:e.jsx("input",{type:"checkbox",checked:k||c,ref:t=>
1{t&&(t.indeterminate=Q&&!c)},onChange:J,"aria-label":"Select all users on this page",disabled:E.length===0})}),e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Email"}),e.jsx(N,{column:"utm_source",label:"Source",sort:d,dir:g,onSort:S}),e.jsx(N,{column:"signup_campaign",label:"Campaign",sort:d,dir:g,onSort:S}),e.jsx(N,{column:"type",label:"Role",sort:d,dir:g,onSort:S}),e.jsx(N,{column:"sub",label:"Sub",sort:d,dir:g,onSort:S}),e.jsx(N,{column:"last_login",label:"Last active",sort:d,dir:g,onSort:S}),e.jsx("th",{})]})}),e.jsxs("tbody",{children:[E.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:9,className:"agent-muted",children:"No users match."})}),E.map(t=>e.jsxs("tr",{className:f.has(t.id)||c?"is-selected":void 0,children:[e.jsx("td",{className:"admin-table__check",children:e.jsx("input",{type:"checkbox",checked:f.has(t.id)||c,onChange:()=>G(t.id),"aria-label":`Select ${t.name||t.email}`})}),e.jsx("td",{children:e.jsx("strong",{children:t.name||""})}),e.jsx("td",{className:"agent-muted","data-label":"Email",children:t.email}),e.jsx("td",{className:"agent-muted","data-label":"Source",children:t.utm_source||""}),e.jsx("td",{className:"agent-muted","data-label":"Campaign",children:t.signup_campaign||""}),e.jsx("td",{"data-label":"Role",children:e.jsx("span",{className:"admin-pill",children:t.type})}),e.jsx("td",{className:"agent-faint","data-label":"Sub",children:t.plan_status||""}),e.jsx("td",{className:"agent-muted","data-label":"Last active",children:t.last_login||""}),e.jsx("td",{className:"admin-table__actions",children:e.jsxs("span",{className:"admin-table__action-pair",children:[e.jsx(B,{href:t.edit_url,children:"Edit"}),e.jsx("button",{type:"button",className:"admin-table__impersonate",onClick:()=>_.post(t.impersonate_url),children:"Impersonate"})]})})]},t.id))]})]})}),R.length>3&&e.jsx("nav",{className:"admin-pagination",children:R.map((t,r)=>ee(t,r))})]})})}function N({column:n,label:a,sort:s,dir:l,onSort:i}){const m=s===n,y=m?l==="asc"?"ascending":"descending":"none";return e.jsx("th",{"aria-sort":y,children:e.jsxs("button",{type:"button",className:`admin-table__sort${m?" is-active":""}`,onClick:()=>i(n),children:[a,e.jsx("span",{className:"admin-table__sort-ind","aria-hidden":"true",children:m?l==="asc"?"â":"â":""})]})})}function Z(n){const a=String(n||"").replace(/«/gi,"«").replace(/»/gi,"»").replace(/‹/gi,"â¹").replace(/›/gi,"âº").replace(/<[^>]+>/g,"").trim(),s=a.toLowerCase(),l=s==="pagination.previous"||s==="previous"||a==="«"||a==="â¹"||/^«\s*previous$/i.test(a),i=s==="pagination.next"||s==="next"||a==="»"||a==="âº"||/^next\s*»$/i.test(a);return l?{text:"â¹",ariaLabel:"Previous page"}:i?{text:"âº",ariaLabel:"Next page"}:{text:a}}function ee(n,a){const{text:s,ariaLabel:l}=Z(n.label);return n.url?e.jsx("button",{type:"button",className:`admin-pagination__item${n.active?" is-active":""}`,"aria-label":l,"aria-current":n.active?"page":void 0,onClick:()=>_.get(n.url,{},{preserveScroll:!0}),children:s},a):e.jsx("span",{className:"admin-pagination__item is-disabled","aria-label":l,"aria-disabled":l?!0:void 0,children:s},a)}export{ie 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.