PageSourceSearch

https://snatchbot.me/assets/UserManagement-B1jKTqNl.js

js snatchbot.me collected 2026-10-02 03:30:09 UTC 18,674 bytes, 1 lines download raw bytes

1import{l as ae,z as te,r as H,E as u,m as O,j as e,S as t,d as j,e as D,f as F,g as I,h as E,B as q,o as c}from"./index-I62JRt1H.js";import{B as v}from"./badge-lfzhF6_J.js";import{T as ie,a as re,b as C,c as T}from"./tabs-DUijgShU.js";import{I as _}from"./input-DBJDfzrZ.js";import{L as r}from"./label-5vpJj_Ue.js";import{S as y,a as f,b as N,c as b,d as i}from"./select-COhviM_l.js";import{D as ne,f as le,a as de,b as oe,c as ce,e as me,d as he}from"./dialog-Dd6YciCQ.js";import{T as V,a as W,b as U,c as l,d as G,e as d}from"./table-DWAWLDmn.js";import{U as R}from"./UniversalLayout-CarWIMAo.js";import{B as xe}from"./building-DceQpoBo.js";import{U as ue}from"./users-B3NyEcwH.js";import{S as ge}from"./shield-CxxrofKN.js";import{A as pe}from"./activity-Bde0EHFl.js";import{S as je}from"./settings-Dqqmpmfa.js";import{U as ve}from"./user-plus-D3vLBMKp.js";import"./index-BzddEND0.js";import"./index-Cb4SWhpe.js";import"./index-BbrmPujv.js";import"./index-BdQq_4o_.js";import"./Combination-D1L2m2go.js";import"./index-C1bPbuBw.js";import"./index-G5GKFJr4.js";import"./index-BwK0RK3I.js";import"./chevron-down-BzK6-MSD.js";import"./chevron-up-CUIFaMfV.js";import"./check-C17Qnmce.js";import"./index-BX7YUykL.js";import"./scroll-area-CKjIzio_.js";import"./SnatchBot logo-BuDrPWu8.js";import"./avatar-D3J61k_u.js";import"./bell-qa2QKQ3L.js";import"./bot-CMZl-uvP.js";import"./database-4lUIbWlw.js";import"./rocket-DY_PEBIK.js";import"./chart-column-C5hRhj-l.js";import"./brain-C-WVlFXN.js";import"./monitor-Dcv6GjtX.js";import"./credit-card-BaPO3PfQ.js";import"./key-Bf_miw0H.js";import"./circle-help-DyPIsVEj.js";import"./search-BmtbJITW.js";import"./log-out-5gi0vsJH.js";import"./message-circle-BLFf8NlY.js";import"./plus-Bd_2mKbe.js";import"./sparkles-Bq1SW_on.js";import"./menu-fDLNSMbb.js";function hs(){const{toast:h}=ae(),L=te(),[Q,P]=H.useState(!1),[o,z]=H.useState({email:"",role:"end_user",teamId:""}),[n,g]=H.useState({name:"",description:"",industry:"",size:""}),{data:p,isLoading:Y}=u({queryKey:["/api/user"],retry:!1}),{data:a,isLoading:J}=u({queryKey:["/api/user-management/organizations","org_001"],enabled:!0,queryFn:()=>c("GET","/api/user-management/organizations/org_001")}),{data:M=[],isLoading:X}=u({queryKey:["/api/user-management/users","org_001"],enabled:!0,queryFn:()=>c("GET","/api/user-management/organizations/org_001/users")}),{data:B=[],isLoading:ye}=u({queryKey:["/api/user-management/teams","org_001"],enabled:!0,queryFn:()=>c("GET","/api/user-management/organizations/org_001/teams")}),{data:Z=[],isLoading:ee}=u({queryKey:["/api/user-management/activity","org_001"],enabled:!0,queryFn:()=>c("GET","/api/user-management/organizations/org_001/activity?limit=20")}),{data:$=[],isLoading:A}=u({queryKey:["/api/user-management/roles"],queryFn:()=>c("GET","/api/user-management/roles")}),w=O({mutationFn:s=>c("POST","/api/user-management/organizations",s),onSuccess:()=>{h({title:"Organization Created",description:"Your organization has been created successfully."}),g({name:"",description:"",industry:"",size:""}),L.invalidateQueries({queryKey:["/api/user"]})},onError:s=>{h({title:"Error",description:s.message||"Failed to create organization",variant:"destructive"})}}),S=O({mutationFn:s=>c("POST","/api/user-management/invite",s),onSuccess:()=>{h({title:"Invitation Sent",description:"User invitation has been sent successfully."}),P(!1),z({email:"",role:"end_user",teamId:""}),L.invalidateQueries({queryKey:["/api/user-management/users"]})},onError:s=>{h({title:"Error",description:s.message||"Failed to send invitation",variant:"destructive"})}}),se=O({mutationFn:({userId:s,role:m})=>c("PUT",`/api/user-management/users/${s}/role`,{role:m}),onSuccess:()=>{h({title:"Role Updated",description:"User role has been updated successfully."}),L.invalidateQueries({queryKey:["/api/user-management/users"]})},onError:s=>{h({title:"Error",description:s.message||"Failed to update user role",variant:"destructive"})}}),K=s=>({super_admin:"bg-red-500",admin:"bg-orange-500",manager:"bg-blue-500",developer:"bg-green-500",end_user:"bg-gray-500"})[s]||"bg-gray-500",k=s=>new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"});return Y?e.jsx(R,{children:e.jsx("div",{style:{backgroundColor:"var(--color-surface-secondary)",minHeight:"100vh",padding:"var(--space-6)"}
1,children:e.jsxs("div",{className:"max-w-7xl mx-auto space-y-6",children:[e.jsx(t,{className:"h-12 w-64"}),e.jsx(t,{className:"h-6 w-96"}),e.jsx("div",{className:"grid gap-6",children:e.jsx(t,{className:"h-96"})})]})})}):p&&p.organizationId===null?e.jsx(R,{children:e.jsx("div",{style:{backgroundColor:"var(--color-surface-secondary)",minHeight:"100vh",padding:"var(--space-6)"},children:e.jsx("div",{className:"max-w-2xl mx-auto",children:e.jsxs(j,{children:[e.jsxs(D,{children:[e.jsxs(F,{className:"flex items-center gap-2",children:[e.jsx(xe,{className:"h-5 w-5","aria-hidden":"true"}),"Create Your Organization"]}),e.jsx(I,{children:"Set up your organization to start managing users and teams."})]}),e.jsxs(E,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"org-name",children:"Organization Name"}),e.jsx(_,{id:"org-name","data-testid":"input-org-name",value:n.name,onChange:s=>g({...n,name:s.target.value}),placeholder:"Enter organization name",style:{minHeight:"var(--touch-target-min)"},"aria-required":"true"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"org-description",children:"Description"}),e.jsx(_,{id:"org-description","data-testid":"input-org-description",value:n.description,onChange:s=>g({...n,description:s.target.value}),placeholder:"Brief description of your organization",style:{minHeight:"var(--touch-target-min)"}})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"org-industry",children:"Industry"}),e.jsxs(y,{value:n.industry,onValueChange:s=>g({...n,industry:s}),children:[e.jsx(f,{id:"org-industry","data-testid":"select-org-industry",style:{minHeight:"var(--touch-target-min)"},children:e.jsx(N,{placeholder:"Select industry"})}),e.jsxs(b,{children:[e.jsx(i,{value:"technology","data-testid":"option-industry-technology",children:"Technology"}),e.jsx(i,{value:"healthcare","data-testid":"option-industry-healthcare",children:"Healthcare"}),e.jsx(i,{value:"finance","data-testid":"option-industry-finance",children:"Finance"}),e.jsx(i,{value:"education","data-testid":"option-industry-education",children:"Education"}),e.jsx(i,{value:"retail","data-testid":"option-industry-retail",children:"Retail"}),e.jsx(i,{value:"manufacturing","data-testid":"option-industry-manufacturing",children:"Manufacturing"}),e.jsx(i,{value:"other","data-testid":"option-industry-other",children:"Other"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"org-size",children:"Company Size"}),e.jsxs(y,{value:n.size,onValueChange:s=>g({...n,size:s}),children:[e.jsx(f,{id:"org-size","data-testid":"select-org-size",style:{minHeight:"var(--touch-target-min)"},children:e.jsx(N,{placeholder:"Select size"})}),e.jsxs(b,{children:[e.jsx(i,{value:"1-10","data-testid":"option-size-1-10",children:"1-10 employees"}),e.jsx(i,{value:"11-50","data-testid":"option-size-11-50",children:"11-50 employees"}),e.jsx(i,{value:"51-200","data-testid":"option-size-51-200",children:"51-200 employees"}),e.jsx(i,{value:"201-1000","data-testid":"option-size-201-1000",children:"201-1000 employees"}),e.jsx(i,{value:"1000+","data-testid":"option-size-1000-plus",children:"1000+ employees"})]})]})]})]}),e.jsx(q,{"data-testid":"button-create-organization",onClick:()=>w.mutate(n),disabled:!n.name||w.isPending,className:"w-full",style:{minHeight:"var(--touch-target-min)"},"aria-busy":w.isPending,children:w.isPending?"Creating...":"Create Organization"})]})]})})})}):e.jsx(R,{children:e.jsxs("div",{style:{backgroundColor:"var(--color-surface-primary)",minHeight:"100vh",padding:"var(--space-6)"},children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h1",{className:"text-3xl font-bold mb-2",style:{color:"var(--color-text-primary)",fontSize:"var(--font-size-3xl)",fontWeight:"var(--font-weight-bold)"},children:"User Management"}),e.jsxs("p",{className:"text-muted-foreground",style:{color:"var(--color-text-secondary)"},children:["Manage users, roles, and permissions for ",(a==null?void 0:a.name)||"your organization"]})]}),e.jsxs(ie,{defaultValue:"users",className:"space-y-6",children:[e.jsxs(re,{"data-testid":"tabs-user-management",children:[e.jsxs(C,{value:"users",className:"flex items-center gap-2","data-testid":"tab-users",style:{minHeight:"var(--touch-target-min)"},children:[e.jsx(ue,{className:"h-4 w-4","aria-hidden":"true"}),"Users"]}),e.jsxs(C,{value:"roles",className:"flex items-center gap-2","data-testid":"tab-roles",style:{minHeight:"var(--touch-target-min)"},children:[e.jsx(ge,{className:"h-4 w-4","aria-hidden":"true"}),"Roles & Permissions"]}),e.jsxs(C,{value:"activity",className:"flex items-center gap-2","data-testid":"tab-activity",style:{minHeight:"var(--touch-target-min)"},children:[e.jsx(pe,{className:"h-4 w-4","aria-hidden":"true"}
1),"Activity Log"]}),e.jsxs(C,{value:"settings",className:"flex items-center gap-2","data-testid":"tab-settings",style:{minHeight:"var(--touch-target-min)"},children:[e.jsx(je,{className:"h-4 w-4","aria-hidden":"true"}),"Organization Settings"]})]}),e.jsxs(T,{value:"users",className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold",style:{fontSize:"var(--font-size-xl)",fontWeight:"var(--font-weight-semibold)",color:"var(--color-text-primary)"},children:"Team Members"}),e.jsx("p",{className:"text-sm text-muted-foreground",style:{color:"var(--color-text-secondary)"},children:"Manage your organization's users and their access levels"})]}),e.jsxs(ne,{open:Q,onOpenChange:P,children:[e.jsx(le,{asChild:!0,children:e.jsxs(q,{"data-testid":"button-invite-user",style:{minHeight:"var(--touch-target-min)"},children:[e.jsx(ve,{className:"h-4 w-4 mr-2","aria-hidden":"true"}),"Invite User"]})}),e.jsxs(de,{"data-testid":"dialog-invite-user",children:[e.jsxs(oe,{children:[e.jsx(ce,{children:"Invite New User"}),e.jsx(me,{children:"Send an invitation to add a new team member to your organization."})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"invite-email",children:"Email Address"}),e.jsx(_,{id:"invite-email",type:"email","data-testid":"input-invite-email",value:o.email,onChange:s=>z({...o,email:s.target.value}),placeholder:"[email protected]",style:{minHeight:"var(--touch-target-min)"},"aria-required":"true"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"invite-role",children:"Role"}),e.jsxs(y,{value:o.role,onValueChange:s=>
1z({...o,role:s}),children:[e.jsx(f,{id:"invite-role","data-testid":"select-invite-role",style:{minHeight:"var(--touch-target-min)"},children:e.jsx(N,{})}),e.jsx(b,{children:A?e.jsx("div",{className:"p-2",children:e.jsx(t,{className:"h-8 w-full"})}):$.map(s=>e.jsx(i,{value:s.value,"data-testid":`option-role-${s.value}`,children:s.value.replace("_"," ").toUpperCase()},s.value))})]})]}),B.length>0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{htmlFor:"invite-team",children:"Team (Optional)"}),e.jsxs(y,{value:o.teamId,onValueChange:s=>z({...o,teamId:s}),children:[e.jsx(f,{id:"invite-team","data-testid":"select-invite-team",style:{minHeight:"var(--touch-target-min)"},children:e.jsx(N,{placeholder:"Select a team"})}),e.jsx(b,{children:B.map(s=>e.jsx(i,{value:s.id.toString(),"data-testid":`option-team-${s.id}`,children:s.name},s.id))})]})]})]}),e.jsx(he,{children:e.jsx(q,{"data-testid":"button-send-invitation",onClick:()=>S.mutate(o),disabled:!o.email||S.isPending,style:{minHeight:"var(--touch-target-min)"},"aria-busy":S.isPending,children:S.isPending?"Sending...":"Send Invitation"})})]})]})]}),e.jsx(j,{children:X?e.jsxs("div",{className:"p-6 space-y-4",children:[e.jsx(t,{className:"h-10 w-full"}),e.jsx(t,{className:"h-16 w-full"}),e.jsx(t,{className:"h-16 w-full"}),e.jsx(t,{className:"h-16 w-full"})]}):e.jsxs(V,{children:[e.jsx(W,{children:e.jsxs(U,{children:[e.jsx(l,{children:"Name"}),e.jsx(l,{children:"Email"}),e.jsx(l,{children:"Role"}),e.jsx(l,{children:"Team"}),e.jsx(l,{children:"Last Login"}),e.jsx(l,{children:"Actions"})]})}),e.jsx(G,{children:M.map(s=>{var m;return e.jsxs(U,{"data-testid":`row-user-${s.id}`,children:[e.jsx(d,{children:e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",style:{fontWeight:"var(--font-weight-medium)",color:"var(--color-text-primary)"},"data-testid":`text-user-name-${s.id}`,children:s.firstName&&s.lastName?`${s.firstName} ${s.lastName}`:s.username||"Unknown User"}),s.isOwner&&e.jsx(v,{variant:"outline",className:"text-xs","data-testid":`badge-owner-${s.id}`,children:"Owner"})]})}),e.jsx(d,{"data-testid":`text-user-email-${s.id}`,children:s.email||"No email"}),e.jsx(d,{children:e.jsx(v,{className:K(s.role),"data-testid":`badge-user-role-${s.id}`,children:((m=s.role)==null?void 0:m.replace("_"," ").toUpperCase())||"NO ROLE"})}),e.jsx(d,{"data-testid":`text-user-team-${s.id}`,children:s.teamName||"-"}),e.jsx(d,{"data-testid":`text-user-last-login-${s.id}`,children:s.lastLoginAt?k(s.lastLoginAt):"Never"}),e.jsx(d,{children:s.id!==(p==null?void 0:p.id)&&e.jsxs(y,{value:s.role,onValueChange:x=>se.mutate({userId:s.id,role:x}),children:[e.jsx(f,{className:"w-32","data-testid":`select-change-role-${s.id}`,style:{minHeight:"var(--touch-target-min)"},children:e.jsx(N,{})}),e.jsx(b,{children:$.map(x=>e.jsx(i,{value:x.value,"data-testid":`option-change-role-${x.value}-${s.id}`,children:x.value.replace("_"," ").toUpperCase()},x.value))})]})})]},s.id)})})]})})]}),e.jsxs(T,{value:"roles",className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold mb-2",style:{fontSize:"var(--font-size-xl)",fontWeight:"var(--font-weight-semibold)",color:"var(--color-text-primary)"},children:"Roles & Permissions"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-6",style:{color:"var(--color-text-secondary)"},children:"Overview of available roles and their permissions in your organization"})]}),e.jsx("div",{className:"grid gap-4",children:A?e.jsxs(e.Fragment,{children:[e.jsx(t,{className:"h-32"}),e.jsx(t,{className:"h-32"}),e.jsx(t,{className:"h-32"})]}):$.map(s=>e.jsxs(j,{"data-testid":`card-role-${s.value}`,children:[e.jsxs(D,{children:[e.jsxs(F,{className:"flex items-center justify-between",children:[e.jsx("span",{children:s.value.replace("_"," ").toUpperCase()}),e.jsxs(v,{className:K(s.value),"data-testid":`badge-role-count-${s.value}`,children:[M.filter(m=>m.role===s.value).length," users"]})]}),e.jsx(I,{children:s.description||`Users with ${s.value.replace("_"," ")} privileges`})]}),e.jsx(E,{children:e.jsxs("div",{className:"text-sm text-muted-foreground",style:{color:"var(--color-text-secondary)"},children:[e.jsx("strong",{children:"Permissions:"})," Role-based access controls active"]})})]},s.value))})]}),e.jsxs(T,{value:"activity",className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold mb-2",style:{fontSize:"var(--font-size-xl)",fontWeight:"var(--font-weight-semibold)",color:"var(--color-text-primary)"}
1,children:"Activity Log"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-6",style:{color:"var(--color-text-secondary)"},children:"Recent actions and changes in your organization"})]}),e.jsx(j,{children:ee?e.jsxs("div",{className:"p-6 space-y-4",children:[e.jsx(t,{className:"h-10 w-full"}),e.jsx(t,{className:"h-16 w-full"}),e.jsx(t,{className:"h-16 w-full"}),e.jsx(t,{className:"h-16 w-full"})]}):e.jsxs(V,{children:[e.jsx(W,{children:e.jsxs(U,{children:[e.jsx(l,{children:"Action"}),e.jsx(l,{children:"User"}),e.jsx(l,{children:"Target"}),e.jsx(l,{children:"Date"})]})}),e.jsx(G,{children:Z.map(s=>e.jsxs(U,{"data-testid":`row-activity-${s.id}`,children:[e.jsx(d,{children:e.jsx(v,{variant:"outline","data-testid":`badge-activity-action-${s.id}`,children:s.action.replace("_"," ").toUpperCase()})}),e.jsx(d,{"data-testid":`text-activity-user-${s.id}`,children:s.userName||s.userId||"System"}),e.jsx(d,{"data-testid":`text-activity-target-${s.id}`,children:s.entityType?`${s.entityType}: ${s.entityId}`:"-"}),e.jsx(d,{"data-testid":`text-activity-date-${s.id}`,children:k(s.timestamp)})]},s.id))})]})})]}),e.jsxs(T,{value:"settings",className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold mb-2",style:{fontSize:"var(--font-size-xl)",fontWeight:"var(--font-weight-semibold)",color:"var(--color-text-primary)"},children:"Organization Settings"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-6",style:{color:"var(--color-text-secondary)"},children:"Manage your organization's configuration and preferences"})]}),e.jsxs(j,{children:[e.jsxs(D,{children:[e.jsx(F,{children:"Organization Information"}),e.jsx(I,{children:"Basic information about your organization"})]}),e.jsx(E,{className:"space-y-4",children:J?e.jsxs("div",{className:"space-y-4",children:[e.jsx(t,{className:"h-10 w-full"}),e.jsx(t,{className:"h-10 w-full"}),e.jsx(t,{className:"h-10 w-full"})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(r,{children:"Organization Name"}),e.jsx("div",{className:"mt-1 text-sm",style:{color:"var(--color-text-secondary)"},"data-testid":"text-org-name",children:(a==null?void 0:a.name)||"Not set"})]}),e.jsxs("div",{children:[e.jsx(r,{children:"Industry"}),e.jsx("div",{className:"mt-1 text-sm",style:{color:"var(--color-text-secondary)"},"data-testid":"text-org-industry",children:(a==null?void 0:a.industry)||"Not set"})]}),e.jsxs("div",{children:[e.jsx(r,{children:"Company Size"}),e.jsx("div",{className:"mt-1 text-sm",style:{color:"var(--color-text-secondary)"},"data-testid":"text-org-size",children:(a==null?void 0:a.size)||"Not set"})]}),e.jsxs("div",{children:[e.jsx(r,{children:"Subscription Tier"}),e.jsx("div",{className:"mt-1",children:e.jsx(v,{"data-testid":"badge-org-subscription",children:(a==null?void 0:a.subscriptionTier)||"starter"})})]})]}),e.jsxs("div",{children:[e.jsx(r,{children:"Description"}),e.jsx("div",{className:"mt-1 text-sm",style:{color:"var(--color-text-secondary)"},"data-testid":"text-org-description",children:(a==null?void 0:a.description)||"No description provided"})]})]})})]})]})]})]})})}export{hs 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.