2 lines
13 KiB
JavaScript
2 lines
13 KiB
JavaScript
import{r as $,j as e,i as T,a,I as W,M as pe,C as L,R as fe,V as je,t as X,S as A,B as p,b as ge,T as j,H as ve,K as Q,c as be,g as ye,W as Se,U as Ce}from"./index-DToJe2Ku.js";import{D as Z,a as ee,b as se,c as re,d as _e,e as $e}from"./EditOutlined-HstnAQKL.js";import{d as Te,E as ze}from"./EmptyState-Cayd2Agb.js";import{d as Me,a as Pe,T as Ie,D as Re}from"./PhoneOutlined-DwV4_75a.js";import{T as we,a as ke,b as De,d as Ee}from"./TabLabelCount-Do8fdFrz.js";import{A as te,G as b,P as Ae,a as le}from"./PageHeader-CpHrViiJ.js";import{d as Oe}from"./Close-CDWIlUqJ.js";import{T as y}from"./TextField-BWG9GEvb.js";import{B as S}from"./Button-LbQOCjty.js";import{C as Ue,L as Y}from"./Link-vyutVhMN.js";import{I as We}from"./InputAdornment-BhldVMji.js";import{T as Le,a as qe,b as Be,c as k,d as He}from"./TableRow-BUnIA1ki.js";import{T as i}from"./TableCell-eZ4CXwlI.js";var q={},Ve=T;Object.defineProperty(q,"__esModule",{value:!0});var ae=q.default=void 0,Fe=Ve($()),Ne=e;ae=q.default=(0,Fe.default)((0,Ne.jsx)("path",{d:"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 14H4V8l8 5 8-5zm-8-7L4 6h16z"}),"MailOutline");var B={},Ge=T;Object.defineProperty(B,"__esModule",{value:!0});var ne=B.default=void 0,Ke=Ge($()),D=e;ne=B.default=(0,Ke.default)((0,D.jsxs)("g",{fillRule:"evenodd",children:[(0,D.jsx)("circle",{cx:"17",cy:"15.5",r:"1.12"}),(0,D.jsx)("path",{d:"M17 17.5c-.73 0-2.19.36-2.24 1.08.5.71 1.32 1.17 2.24 1.17s1.74-.46 2.24-1.17c-.05-.72-1.51-1.08-2.24-1.08"}),(0,D.jsx)("path",{d:"M18 11.09V6.27L10.5 3 3 6.27v4.91c0 4.54 3.2 8.79 7.5 9.82.55-.13 1.08-.32 1.6-.55C13.18 21.99 14.97 23 17 23c3.31 0 6-2.69 6-6 0-2.97-2.16-5.43-5-5.91M11 17c0 .56.08 1.11.23 1.62-.24.11-.48.22-.73.3-3.17-1-5.5-4.24-5.5-7.74v-3.6l5.5-2.4 5.5 2.4v3.51c-2.84.48-5 2.94-5 5.91m6 4c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4"})]}),"AdminPanelSettingsOutlined");var H={},Qe=T;Object.defineProperty(H,"__esModule",{value:!0});var ie=H.default=void 0,Ye=Qe($()),E=e;ie=H.default=(0,Ye.default)([(0,E.jsx)("path",{d:"M21 12.22C21 6.73 16.74 3 12 3c-4.69 0-9 3.65-9 9.28-.6.34-1 .98-1 1.72v2c0 1.1.9 2 2 2h1v-6.1c0-3.87 3.13-7 7-7s7 3.13 7 7V19h-8v2h8c1.1 0 2-.9 2-2v-1.22c.59-.31 1-.92 1-1.64v-2.3c0-.7-.41-1.31-1-1.62"},"0"),(0,E.jsx)("circle",{cx:"9",cy:"13",r:"1"},"1"),(0,E.jsx)("circle",{cx:"15",cy:"13",r:"1"},"2"),(0,E.jsx)("path",{d:"M18 11.03C17.52 8.18 15.04 6 12.05 6c-3.03 0-6.29 2.51-6.03 6.45 2.47-1.01 4.33-3.21 4.86-5.89 1.31 2.63 4 4.44 7.12 4.47"},"3")],"SupportAgentOutlined");var V={},Je=T;Object.defineProperty(V,"__esModule",{value:!0});var oe=V.default=void 0,Xe=Je($()),Ze=e;oe=V.default=(0,Xe.default)((0,Ze.jsx)("path",{d:"M4 18v-.65c0-.34.16-.66.41-.81C6.1 15.53 8.03 15 10 15c.03 0 .05 0 .08.01.1-.7.3-1.37.59-1.98-.22-.02-.44-.03-.67-.03-2.42 0-4.68.67-6.61 1.82-.88.52-1.39 1.5-1.39 2.53V20h9.26c-.42-.6-.75-1.28-.97-2zm6-6c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0-6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m10.75 10c0-.22-.03-.42-.06-.63l1.14-1.01-1-1.73-1.45.49c-.32-.27-.68-.48-1.08-.63L18 11h-2l-.3 1.49c-.4.15-.76.36-1.08.63l-1.45-.49-1 1.73 1.14 1.01c-.03.21-.06.41-.06.63s.03.42.06.63l-1.14 1.01 1 1.73 1.45-.49c.32.27.68.48 1.08.63L16 21h2l.3-1.49c.4-.15.76-.36 1.08-.63l1.45.49 1-1.73-1.14-1.01c.03-.21.06-.41.06-.63M17 18c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2"}),"ManageAccountsOutlined");var F={},es=T;Object.defineProperty(F,"__esModule",{value:!0});var ce=F.default=void 0,ss=es($()),rs=e;ce=F.default=(0,ss.default)((0,rs.jsx)("path",{d:"M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4m0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4"}),"PersonOutlineOutlined");const ts=["admin","rep","manager"],J={name:"",email:"",phone:"",role:"rep",pin:"",password:""},ls=(r,n)=>n&&!r.includes(n)?[n,...r]:r;function as({open:r,mode:n,initial:u,onClose:m,onSaved:C}){const o=n==="edit",[t,z]=a.useState(J),[h,M]=a.useState(!1),[g,x]=a.useState(null);a.useEffect(()=>{r&&(z({...J,...u||{}}),x(null))},[r,u]);const c=d=>f=>z(v=>({...v,[d]:f.target.value})),O=async()=>{if(!t.name.trim()){x("Name is required.");return}if(!t.email.trim()){x("Email is required.");return}if(!o&&!t.password.trim()){x("Password is required.");return}M(!0),x(null);const d={first_name:t.name.trim(),email:t.email.trim(),phone:t.phone,role:t.role,...t.password?{password:t.password}:{},...t.pin?{pin:String(t.pin)}:{}};try{o?await fe(u.id,d):await je(d),C()}catch(f){x(f.message||"Failed to save user")}finally{M(!1)}};return e.jsxs(Z,{open:r,onClose:h?void 0:m,maxWidth:"sm",fullWidth:!0,children:[e.jsxs(ee,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o?"Edit Team User":"Add Team User",e.jsx(W,{onClick:m,size:"small",disabled:h,children:e.jsx(Oe,{})})]}),e.jsxs(se,{dividers:!0,children:[g&&e.jsx(te,{severity:"error",sx:{mb:2},children:g}),e.jsxs(b,{container:!0,spacing:2,sx:{mt:0},children:[e.jsx(b,{item:!0,xs:12,sm:6,children:e.jsx(y,{fullWidth:!0,size:"small",label:"Name *",value:t.name,onChange:c("name")})}),e.jsx(b,{item:!0,xs:12,sm:6,children:e.jsx(y,{fullWidth:!0,size:"small",label:"Email *",value:t.email,onChange:c("email")})}),e.jsx(b,{item:!0,xs:12,sm:6,children:e.jsx(y,{fullWidth:!0,size:"small",label:"Phone",value:t.phone,onChange:c("phone")})}),e.jsx(b,{item:!0,xs:12,sm:6,children:e.jsx(y,{select:!0,fullWidth:!0,size:"small",label:"Role",value:t.role,onChange:c("role"),children:ls(ts,t.role).map(d=>e.jsx(pe,{value:d,children:d},d))})}),e.jsx(b,{item:!0,xs:12,sm:6,children:e.jsx(y,{fullWidth:!0,size:"small",label:"PIN",value:t.pin,onChange:c("pin")})}),e.jsx(b,{item:!0,xs:12,sm:6,children:e.jsx(y,{fullWidth:!0,size:"small",type:"password",label:o?"New Password (optional)":"Password *",value:t.password,onChange:c("password")})})]})]}),e.jsxs(re,{sx:{px:3,py:2},children:[e.jsx(S,{onClick:m,disabled:h,children:"Cancel"}),e.jsx(S,{variant:"contained",onClick:O,disabled:h,startIcon:h?e.jsx(L,{size:16,color:"inherit"}):null,children:o?"Save Changes":"Create User"})]})]})}const ns={admin:{color:"primary",icon:ne},manager:{color:"success",icon:oe},rep:{color:"info",icon:Ee},support:{color:"warning",icon:ie}},de=r=>ns[String(r||"").toLowerCase()]||{color:"secondary",icon:ce};function is({name:r,email:n,role:u}){const{color:m,icon:C}=de(u),o=n?n.split("@")[0]:"";return e.jsxs(A,{direction:"row",spacing:1.5,alignItems:"center",children:[e.jsxs(p,{sx:{position:"relative",display:"inline-flex"},children:[e.jsx(Ce,{name:r,size:40,sx:{border:"2px solid",borderColor:`${m}.lighter`}}),e.jsx(p,{sx:{position:"absolute",right:-3,bottom:-3,width:18,height:18,borderRadius:"50%",bgcolor:`${m}.main`,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",border:"2px solid #fff"},children:e.jsx(C,{sx:{fontSize:11}})})]}),e.jsxs(p,{sx:{minWidth:0},children:[e.jsx(j,{variant:"body2",sx:{fontWeight:600,color:"grey.800",lineHeight:1.25},children:r}),o&&e.jsxs(j,{variant:"caption",color:"text.secondary",children:["@",o]})]})]})}function os({role:r}){const{color:n,icon:u}=de(r);return e.jsx(le,{size:"small",icon:e.jsx(u,{sx:{fontSize:15,ml:.5}}),label:X(r),sx:{fontWeight:600,bgcolor:`${n==="secondary"?"grey.100":`${n}.lighter`}`,color:`${n==="secondary"?"grey.700":`${n}.dark`}`,"& .MuiChip-icon":{color:"inherit"}}})}function Ss(){var K;const[r,n]=a.useState([]),[u,m]=a.useState(!0),[C,o]=a.useState(null),[t,z]=a.useState(0),[h,M]=a.useState(""),[g,x]=a.useState(0),[c,O]=a.useState(10),[d,f]=a.useState({open:!1,mode:"add",initial:null}),[v,P]=a.useState(null),[I,N]=a.useState(!1),_=()=>{m(!0),o(null),be().then(s=>n(s.map(ye))).catch(s=>o(s.message||"Failed to load team users")).finally(()=>m(!1))};a.useEffect(()=>{_()},[]);const R=a.useMemo(()=>{const s=[];return r.forEach(l=>{s.includes(l.role)||s.push(l.role)}),[{key:"all",label:"All"},...s.map(l=>({key:l,label:X(l)}))]},[r]),U=((K=R[Math.min(t,R.length-1)])==null?void 0:K.key)||"all",ue=a.useMemo(()=>{const s={all:r.length};return r.forEach(l=>{s[l.role]=(s[l.role]||0)+1}),s},[r]),w=a.useMemo(()=>r.filter(s=>{const l=U==="all"||s.role===U,me=!h||[s.name,s.email,s.phone,s.role].join(" ").toLowerCase().includes(h.toLowerCase());return l&&me}),[r,U,h]),G=w.slice(g*c,g*c+c),xe=()=>{f({open:!1,mode:"add",initial:null}),_()},he=async()=>{N(!0);try{await Se(v.id),P(null),_()}catch(s){o(s.message||"Failed to delete user")}finally{N(!1)}};return e.jsxs(e.Fragment,{children:[e.jsx(Ae,{title:"App Users",breadcrumbs:[{label:"App Users"}],action:e.jsxs(A,{direction:"row",spacing:1.5,children:[e.jsx(S,{variant:"outlined",startIcon:e.jsx(Te,{}),onClick:_,disabled:u,children:"Refresh"}),e.jsx(S,{variant:"contained",startIcon:e.jsx(_e,{}),onClick:()=>f({open:!0,mode:"add",initial:null}),children:"Add User"})]})}),e.jsxs(Ue,{sx:{overflow:"hidden"},children:[e.jsxs(p,{sx:{px:2.5,py:2,borderBottom:1,borderColor:"divider",display:"flex",alignItems:"center",gap:1.5,background:s=>`linear-gradient(90deg, ${s.palette.primary.lighter}66 0%, ${s.palette.background.paper} 70%)`},children:[e.jsx(p,{sx:{width:40,height:40,borderRadius:2,bgcolor:"primary.lighter",color:"primary.main",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:e.jsx(ge,{fontSize:"small"})}),e.jsxs(p,{children:[e.jsx(j,{variant:"subtitle1",sx:{fontWeight:700,color:"grey.800",lineHeight:1.2},children:"App Users Directory"}),e.jsx(j,{variant:"caption",color:"text.secondary",children:"Manage console members, roles and access"})]})]}),e.jsxs(A,{direction:{xs:"column",md:"row"},spacing:1.5,sx:{p:2},alignItems:{md:"center"},children:[e.jsx(y,{size:"small",placeholder:"Search by name, email, phone…",value:h,onChange:s=>{M(s.target.value),x(0)},sx:{minWidth:300},InputProps:{startAdornment:e.jsx(We,{position:"start",children:e.jsx(ve,{fontSize:"small"})})}}),e.jsx(p,{sx:{flexGrow:1}}),!u&&e.jsxs(A,{direction:"row",spacing:1,alignItems:"center",children:[e.jsxs(j,{variant:"body2",color:"text.secondary",children:[w.length," ",w.length===1?"user":"users"]}),e.jsx(le,{size:"small",label:"live · PostgreSQL",sx:{height:22,fontSize:"0.7rem",bgcolor:"success.lighter",color:"success.dark",fontWeight:600}})]})]}),e.jsx(p,{sx:{px:2,borderBottom:1,borderColor:"divider"},children:e.jsx(we,{value:Math.min(t,R.length-1),onChange:(s,l)=>{z(l),x(0)},variant:"scrollable",scrollButtons:"auto",children:R.map((s,l)=>e.jsx(ke,{label:e.jsx(De,{label:s.label,count:ue[s.key]||0,active:t===l})},s.key))})}),C&&e.jsx(te,{severity:"error",sx:{m:2},action:e.jsx(S,{color:"inherit",size:"small",onClick:_,children:"Retry"}),children:C}),e.jsx(Le,{children:e.jsxs(qe,{sx:{minWidth:800},children:[e.jsx(Be,{children:e.jsxs(k,{sx:{"& th":{bgcolor:"grey.50",fontWeight:700,color:"grey.700",textTransform:"uppercase",fontSize:"0.72rem",letterSpacing:.4}},children:[e.jsx(i,{sx:{width:64},children:"S.No"}),e.jsx(i,{children:"User"}),e.jsx(i,{children:"Email"}),e.jsx(i,{children:"Phone"}),e.jsx(i,{children:"Role"}),e.jsx(i,{align:"right",children:"Actions"})]})}),e.jsx(He,{children:u?e.jsx(k,{children:e.jsx(i,{colSpan:6,sx:{border:"none"},children:e.jsx(p,{sx:{display:"flex",justifyContent:"center",py:6},children:e.jsx(L,{})})})}):G.length===0?e.jsx(k,{children:e.jsx(i,{colSpan:6,sx:{border:"none"},children:e.jsx(ze,{title:"No team users found",caption:"Try a different role or search term, or add a user."})})}):G.map((s,l)=>e.jsxs(k,{hover:!0,children:[e.jsx(i,{children:e.jsx(j,{variant:"body2",color:"text.secondary",children:g*c+l+1})}),e.jsx(i,{children:e.jsx(is,{name:s.name,email:s.email,role:s.role})}),e.jsx(i,{children:s.email?e.jsxs(Y,{href:`mailto:${s.email}`,underline:"hover",color:"text.primary",sx:{display:"inline-flex",alignItems:"center",gap:.75,fontSize:"0.8125rem"},children:[e.jsx(ae,{sx:{fontSize:15,color:"grey.400"}}),s.email]}):e.jsx(j,{variant:"body2",color:"text.disabled",children:"—"})}),e.jsx(i,{children:s.phone?e.jsxs(Y,{href:`tel:${s.phone}`,underline:"hover",color:"text.primary",sx:{display:"inline-flex",alignItems:"center",gap:.75,fontSize:"0.8125rem"},children:[e.jsx(Me,{sx:{fontSize:15,color:"grey.400"}}),s.phone]}):e.jsx(j,{variant:"body2",color:"text.disabled",children:"—"})}),e.jsx(i,{children:e.jsx(os,{role:s.role})}),e.jsxs(i,{align:"right",children:[e.jsx(Q,{title:"Edit",children:e.jsx(W,{size:"small",onClick:()=>f({open:!0,mode:"edit",initial:s}),children:e.jsx($e,{fontSize:"small"})})}),e.jsx(Q,{title:"Delete",children:e.jsx(W,{size:"small",color:"error",onClick:()=>P(s),children:e.jsx(Pe,{fontSize:"small"})})})]})]},s.id))})]})}),e.jsx(Ie,{component:"div",count:w.length,page:g,onPageChange:(s,l)=>x(l),rowsPerPage:c,onRowsPerPageChange:s=>{O(+s.target.value),x(0)},rowsPerPageOptions:[5,10,25]})]}),e.jsx(as,{open:d.open,mode:d.mode,initial:d.initial,onClose:()=>f({open:!1,mode:"add",initial:null}),onSaved:xe}),e.jsxs(Z,{open:!!v,onClose:I?void 0:()=>P(null),children:[e.jsx(ee,{children:"Delete user?"}),e.jsx(se,{children:e.jsxs(Re,{children:["This will permanently remove ",e.jsx("strong",{children:v==null?void 0:v.name})," from the PostgreSQL database. This cannot be undone."]})}),e.jsxs(re,{sx:{px:3,py:2},children:[e.jsx(S,{onClick:()=>P(null),disabled:I,children:"Cancel"}),e.jsx(S,{color:"error",variant:"contained",onClick:he,disabled:I,startIcon:I?e.jsx(L,{size:16,color:"inherit"}):null,children:"Delete"})]})]})]})}export{Ss as default};
|