1import{q as l,g as _,cw as Q,j as e,C as j,z as u,k as v,aG as W,d as f,I as w,i as c,U as M,f as b,b as o,H as J,n as K,cx as V,cy as X,cz as Y}from"./client-entry-XwGFDyCO.js";import{T as k}from"./textarea-CVA0nboY.js";import{L as r}from"./label-CYAjwfq0.js";import{g as m,a as Z}from"./userRoleUtils-Bdp-Zxz1.js";import{D as $}from"./DefaultLayout-DnsJtYb0.js";import{u as ee}from"./useRedirectHomeUnlessUserIsAdmin-DC4E1fPy.js";import{U as se}from"./user-plus-CbZXAyPU.js";import{S as ae}from"./square-pen-NqZ-xTOA.js";import{T as te}from"./trash-2-DeEeEcg2.js";import{G as le}from"./globe-Bo0uWlX8.js";import{C as re}from"./crown-DTFVytE6.js";import"./chevron-up-D4bcvZeo.js";import"./file-text-D_ISa_ds.js";import"./car-YlNT5O42.js";import"./credit-card-BM2NE39C.js";import"./roleBasedAccess-YuZs66M8.js";const Re=({user:C})=>{ee({user:C});const[n,F]=l.useState(""),[g,D]=l.useState(""),[d,O]=l.useState(null),[L,N]=l.useState(!1),[B,y]=l.useState(!1),[h,T]=l.useState(null),{data:I,isLoading:z,refetch:R}=_(Q),[t,p]=l.useState({roleType:"",expiresAt:"",notes:""}),[i,x]=l.useState({isActive:!0,expiresAt:"",notes:""}),U=I?.filter(s=>{const a=!n||s.firstName?.toLowerCase().includes(n.toLowerCase())||!1||s.lastName?.toLowerCase().includes(n.toLowerCase())||!1||s.email?.toLowerCase().includes(n.toLowerCase())||!1,A=!g||s.userRoles.some(E=>E.roleType===g&&E.isActive);return a&&A}),P=async()=>{if(!(!d||!t.roleType))try{await X({userId:d.id,roleType:t.roleType,expiresAt:t.expiresAt?new Date(t.expiresAt):void 0,notes:t.notes||void 0}),N(!1),p({roleType:"",expiresAt:"",notes:""}),R()}catch(s){console.error("Failed to add role:",s)}},G=async(s,a)=>{try{await V({userId:s,roleType:a,notes:"Removed by admin"}),R()}catch(A){console.error("Failed to remove role:",A)}},H=async()=>{if(h)try{await Y({roleId:h.id,isActive:i.isActive,expiresAt:i.expiresAt?new Date(i.expiresAt):void 0,notes:i.notes||void 0}),y(!1),T(null),x({isActive:!0,expiresAt:"",notes:""}),R()}catch(s){console.error("Failed to update role:",s)}},q=s=>{T(s),x({isActive:s.isActive,expiresAt:s.expiresAt?new Date(s.expiresAt).toISOString().split("T")[0]:"",notes:s.notes||""}),y(!0)},S=s=>{switch(s){case c.UserType.BOARD_MEMBER:return e.jsx(re,{className:"w-4 h-4"});case c.UserType.SPONSOR:return e.jsx(K,{className:"w-4 h-4"});case c.UserType.CORPORATE_MEMBER:return e.jsx(J,{className:"w-4 h-4"});case c.UserType.MEMBER:return e.jsx(M,{className:"w-4 h-4"});default:return e.jsx(le,{className:"w-4 h-4"})}};return e.jsx($,{user:C,children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold text-gray-900",children:"User Role Management"}),e.jsx("p",{className:"text-gray-600 mt-2",children:"Manage user roles and permissions. Users can have multiple roles simultaneously."})]}),e.jsxs(j,{children:[e.jsx(u,{children:e.jsxs(v,{className:"flex items-center",children:[e.jsx(W,{className:"w-5 h-5 mr-2"}),"Search Users"]})}),e.jsx(f,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(r,{htmlFor:"search",children:"Search Users"}),e.jsx(w,{id:"search",placeholder:"Search by name or email...",value:n,onChange:s=>F(s.target.value)})]}),e.jsxs("div",{children:[e.jsx(r,{htmlFor:"role-filter",children:"Filter by Role"}),e.jsxs("select",{id:"role-filter",className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",value:g,onChange:s=>D(s.target.value),children:[e.jsx("option",{value:"",children:"All Roles"}),Object.values(c.UserType).map(s=>e.jsx("option",{value:s,children:m(s)},s))]})]})]})})]}),e.jsxs(j,{children:[e.jsx(u,{children:e.jsxs(v,{className:"flex items-center",children:[e.jsx(M,{className:"w-5 h-5 mr-2"}),"Users (",U?.length||0,")"]})}),e.jsx(f,{children:z?e.jsx("div",{className:"text-center py-8",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"})}):e.jsx("div",{className:"space-y-4",children:U?.map(s=>e.jsxs("div",{className:"border rounded-lg p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"font-semibold",children:[s.firstName||""," ",s.lastName||""]}),e.jsx("p",{className:"text-sm text-gray-600",children:s.email}),s.isAdmin&&e.jsx(b,{className:"mt-1 bg-red-100 text-red-800",children:"Admin"})]}),e.jsx("div",{className:"flex gap-2",children:e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>{O(s),N(!0)},children:[e.jsx(se,{className:"w-4 h-4 mr-1"}),"Add Role"]})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"text-sm font-medium text-gray-700",children:"Active Roles:"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[s.userRoles.filter(a=>a.isActive).map(a=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(b,{className:Z(a.roleType),children:[S(a.roleType),e.jsx("span",{className:"ml-1",children:m(a.roleType)})]}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(o,{variant:"ghost",size:"sm",onClick:()=>q(a),children:e.jsx(ae,{className:"w-3 h-3"})}),e.jsx(o,{variant:"ghost",size:"sm",onClick:()=>G(s.id,a.roleType),children:e.jsx(te,{className:"w-3 h-3"})})]})]},a.id)),s.userRoles.filter(a=>a.isActive).length===0&&e.jsx("p",{className:"text-sm text-gray-500",children:"No active roles"})]})]}),s.userRoles.filter(a=>!a.isActive).length>0&&e.jsxs("div",{className:"mt-3 pt-3 border-t",children:[e.jsx("h4",{className:"text-sm font-medium text-gray-700",children:"Inactive Roles:"}),e.jsx("div",{className:"flex flex-wrap gap-2 mt-1",children:s.userRoles.filter(a=>!a.isActive).map(a=>e.jsxs(b,{variant:"secondary",className:"opacity-60",children:[S(a.roleType),e.jsx("span",{className:"ml-1",children:m(a.roleType)})]},a.id))})]})]},s.id))})})]}),L&&d&&e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs(j,{className:"w-full max-w-md",children:[e.jsx(u,{children:e.jsxs(v,{children:["Add Role to ",d.firstName||""," ",d.lastName||""]})}),e.jsxs(f,{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(r,{htmlFor:"role-type",children:"Role Type"}),e.jsxs("select",{id:"role-type",className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",value:t.roleType,onCh
1ange:s=>p(a=>({...a,roleType:s.target.value})),children:[e.jsx("option",{value:"",children:"Select a role"}),Object.values(c.UserType).map(s=>e.jsx("option",{value:s,children:m(s)},s))]})]}),e.jsxs("div",{children:[e.jsx(r,{htmlFor:"expires-at",children:"Expires At (Optional)"}),e.jsx(w,{id:"expires-at",type:"date",value:t.expiresAt,onChange:s=>p(a=>({...a,expiresAt:s.target.value}))})]}),e.jsxs("div",{children:[e.jsx(r,{htmlFor:"notes",children:"Notes (Optional)"}),e.jsx(k,{id:"notes",value:t.notes,onChange:s=>p(a=>({...a,notes:s.target.value})),placeholder:"Any notes about this role assignment..."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(o,{onClick:P,className:"flex-1",children:"Add Role"}),e.jsx(o,{variant:"outline",onClick:()=>N(!1),className:"flex-1",children:"Cancel"})]})]})]})}),B&&h&&e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs(j,{className:"w-full max-w-md",children:[e.jsx(u,{children:e.jsxs(v,{children:["Edit Role: ",m(h.roleType)]})}),e.jsxs(f,{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"checkbox",id:"is-active",checked:i.isActive,onChange:s=>x(a=>({...a,isActive:s.target.checked})),className:"rounded"}),e.jsx(r,{htmlFor:"is-active",children:"Active"})]}),e.jsxs("div",{children:[e.jsx(r,{htmlFor:"edit-expires-at",children:"Expires At (Optional)"}),e.jsx(w,{id:"edit-expires-at",type:"date",value:i.expiresAt,onChange:s=>x(a=>({...a,expiresAt:s.target.value}))})]}),e.jsxs("div",{children:[e.jsx(r,{htmlFor:"edit-notes",children:"Notes"}),e.jsx(k,{id:"edit-notes",value:i.notes,onChange:s=>x(a=>({...a,notes:s.target.value})),placeholder:"Any notes about this role..."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(o,{onClick:H,className:"flex-1",children:"Update Role"}),e.jsx(o,{variant:"outline",onClick:()=>y(!1),className:"flex-1",children:"Cancel"})]})]})]})})]})})};export{Re 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.