PageSourceSearch

https://urp-rebuild.web.app/assets/AdminUsersPage-B99Wgghs.js

js urp-rebuild.web.app collected 2026-10-03 12:39:16 UTC 9,118 bytes, 1 lines download raw bytes

1import{r as a,j as e,I as J}from"./index-hn8V0v61.js";import{A as q}from"./AdminLayout-q01PpU6r.js";import{C as S}from"./Card-CQu9InO1.js";import{P as G}from"./PageHeader-DuR6BCu8.js";import{B as i}from"./Button-CYNSXS9X.js";import{S as C}from"./Select-CYwQOEls.js";import{B as U}from"./Badge-Cc3oj2xH.js";import{M as K}from"./Modal-B3qdet6d.js";import{g as Q,v as X,u as Y}from"./users-dM1gXdE5.js";import"./orders-DPQAeQzg.js";import"./scrollLock-COE6sjjz.js";function de(){const[u,T]=a.useState([]),[r,M]=a.useState(0),[I,v]=a.useState(!0),[x,k]=a.useState(""),[d,A]=a.useState(""),[t,f]=a.useState(1),[j,D]=a.useState(null),[l,E]=a.useState(null),[P,h]=a.useState(!1),[c,y]=a.useState("school_id"),[p,N]=a.useState(""),[g,b]=a.useState(!1),[w,n]=a.useState(null),m=async()=>{v(!0);try{const s=await Q({search:x||void 0,isTeacherVerified:d===""?void 0:d==="true",page:t,pageSize:20});if(s.success&&s.data){const o=s.data;T(o.items||[]),M(o.total)}}catch(s){console.error("Failed to fetch users:",s)}finally{v(!1)}};a.useEffect(()=>{m()},[x,d,t]);const _=s=>{s.preventDefault(),f(1),m()},F=s=>{D(j===s?null:s)},O=s=>{E(s),y("school_id"),N(""),n(null),h(!0)},L=async()=>{if(l){if(c==="other"&&!p.trim()){n('Please provide details for "Other" verification method');return}b(!0),n(null);try{const s=await X(l.userId,{method:c,notes:p.trim()});s.success?(h(!1),m()):n(s.error||"Failed to verify teacher")}catch(s){console.error("Failed to verify teacher:",s),n("Failed to verify teacher")}finally{b(!1)}}},$=async s=>{if(confirm(`Remove teacher verification for ${s.displayName}?`))try{(await Y(s.userId)).success&&m()}catch(o){console.error("Failed to unverify teacher:",o)}},z=s=>new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),V=s=>new Date(s).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}),B=s=>{switch(s){case"school_id":return"School ID";case"school_website_profile":return"School Website Profile";case"employment_contract":return"Employment Contract";case"other":return"Other";default:return s}},R=[{value:"school_id",label:"School ID"},{value:"school_website_profile",label:"School Website Profile"},{value:"employment_contract",label:"Employment Contract"},{value:"other",label:"Other"}],W=[{value:"",label:"All Users"},{value:"true",label:"Verified Teachers"},{value:"false",label:"Not Verified"}],H=s=>e.jsx("div",{className:"bg-gray-50 px-6 py-4 border-t",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold text-gray-900 mb-3",children:"User Information"}),e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"User ID"}),e.jsx("span",{className:"font-mono text-xs",children:s.userId})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"Email"}),e.jsx("span",{children:s.email})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"Name"}),e.jsxs("span",{children:[s.firstName," ",s.lastName]})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"School"}),e.jsx("span",{children:s.schoolName})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"Joined"}),e.jsx("span",{children:V(s.createdAt)})]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Teacher Verification"}),e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"Status"}),e.jsx(U,{variant:s.isTeacherVerified?"success":"default",children:s.isTeacherVerified?"Verified":"Not Verified"})]}),s.isTeacherVerified&&e.jsxs(e.Fragment,{children:[s.teacherVerificationMethod&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"Method"}),e.jsx("span",{children:B(s.teacherVerificationMethod)})]}),s.teacherVerifiedAt&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:"Verified At"}),e.jsx("span",{children:V(s.teacherVerifiedAt)})]}),s.teacherVerificationNotes&&e.jsxs("div",{className:"mt-2",children:[e.jsx("span",{className:"text-gray-600",children:"Notes:"}),e.jsx("p",{className:"mt-1 text-gray-800 bg-white p-2 rounded border",children:s.teacherVerificationNotes})]})]})]}),e.jsx("div",{className:"mt-4",children:s.isTeacherVerified?e.jsx(i,{size:"sm",variant:"outline",onClick:()=>$(s),className:"w-full",children:"Remove Verification"}):e.jsx(i,{size:"sm",onClick:()=>O(s),className:"w-full",children:"Verify Teacher"})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Actions"}),e.jsx("div",{className:"space-y-2",children:e.jsx(i,{size:"sm",variant:"outline",className:"w-full",onClick:()=>{window.location.href=`/admin/orders?search=${encodeURIComponent(s.email)}`},children:"View Orders"})})]})]})});return e.jsxs(q,{children:[e.jsxs("div",{className:"space-y-6",children:[e.jsx(G,{title:"Users",description:"User accounts and teacher verification status.",meta:`${r} total user${r===1?"":"s"}`}),e.jsx(S,{children:e.jsxs("form",{onSubmit:_,className:"flex flex-wrap gap-4",children:[e.jsx("div",{className:"flex-1 min-w-[200px]",children:e.jsx(J,{placeholder:"Search by name, email, or school...",value:x,onChange:s=>k(s.target.value)})}),e.jsx("div",{className:"w-48",children:e.jsx(C,{options:W,value:d,onChange:s=>A(s.target.value)})}),e.jsx(i,{type:"submit",children:"Search"})]})}),e.jsxs(S,{padding:"none",children:[e.jsx("div",{className:"divide-y",children:I?e.jsx("div",{className:"px-6 py-12 text-center",children:e.jsx("div",{className:"animate-spin rounded-full h-6 w-6 border-b-2 border-primary mx-auto"})}):u.length===0?e.jsx("div",{className:"px-6 py-12 text-center text-gray-500",children:"No users found"}):u.map(s=>e.jsxs("div",{children:[e.jsx("div",{className:"px-6 py-4 hover:bg-gray-50 cursor-pointer",onClick:()=>F(s.userId),children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("svg",{className:`h-5 w-5 text-gray-400 transition-transform ${j===s.userId?"rotate-90":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-gray-900",children:s.displayName||`${s.firstName} ${s.lastName}`}),e.jsx("div",{className:"text-sm text-gray-500",children:s.email})]})]}),e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsx("div",{className:"text-sm text-gray-500 max-w-[200px] truncate",children:s.schoolName}),e.jsx("div",{className:"w-28",children:e.jsx(U,{variant:s.isTeacherVerified?"success":"default",children:s.isTeacherVerified?"Verified":"Not Verified"})}),e.jsx("div",{className:"text-sm text-gray-500 w-24",children:z(s.createdAt)})]})]})}),j===s.userId&&H(s)]},s.userId))}),r>20&&e.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-t",children:[e.jsxs("span",{className:"text-sm text-gray-500",children:["Showing ",(t-1)*20+1,"-",Math.min(t*20,r)," of ",r]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(i,{size:"sm",variant:"outline",disabled:t===1,onClick:()=>f(t-1),children:"Previous"}),e.jsx(i,{size:"sm",variant:"outline",disabled:t*20>=r,onClick:()=>f(t+1),children:"Next"})]})]})]})]}),e.jsx(K,{isOpen:P,onClose:()=>h(!1),title:"Verify Teacher",children:l&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-gray-600",children:["Verify teacher status for ",e.jsx("strong",{children:l.displayName})," (",l.email,")"]}),e.jsxs("div",{className:"bg-gray-50 p-3 rounded-lg text-sm",children:[e.jsx("span",{className:"text-gray-600",children:"School:"})," ",l.schoolName]}
1),e.jsx(C,{label:"Verification Method",options:R,value:c,onChange:s=>y(s.target.value)}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:["Notes ",c==="other"&&e.jsx("span",{className:"text-red-500",children:"*"})]}),e.jsx("textarea",{value:p,onChange:s=>N(s.target.value),placeholder:c==="other"?"Please describe how the teacher was verified...":"Optional notes about the verification...",className:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500",rows:3})]}),w&&e.jsx("div",{className:"text-sm text-red-600 bg-red-50 p-3 rounded-lg",children:w}),e.jsxs("div",{className:"flex justify-end gap-3 pt-4",children:[e.jsx(i,{variant:"outline",onClick:()=>h(!1),disabled:g,children:"Cancel"}),e.jsx(i,{onClick:L,loading:g,children:"Verify Teacher"})]})]})})]})}export{de as AdminUsersPage};

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.