Files
doormile_crm_build/dist/assets/Tenants-DljX6wl-.js

2 lines
28 KiB
JavaScript

import{r as T,j as e,i as $,a as c,I as K,T as l,M as V,D as X,C as J,s as Fe,c as Z,e as qe,u as Ee,S as x,d as he,B as m,g as we,f as Be,h as Ve,U as me,k as Q,l as Ne}from"./index-D5YLj2UL.js";import{D as ye,a as be,d as He,b as Ce,c as Se,e as Ue,T as Ge,f as Ke,g as Ze,h as Ye,i as Qe,j as Xe,k as Je,l as ge,m as et,n as tt}from"./Close-eRCqxR-v.js";import{d as st,T as rt,a as nt,b as O,c as g,e as it,E as lt}from"./EmptyState-D4iekmIG.js";import{S as N,d as at,a as ze,b as _e,c as pe}from"./StatusChip-DlxyAh13.js";import{A as Te,G as i,P as ot,C as ee}from"./PageHeader-XoX0cOz3.js";import{T as u}from"./TextField-u3avXgBK.js";import{B as _}from"./Button-DwYdzZig.js";import{C as ct}from"./Link-JpzXpIh3.js";import{I as dt}from"./InputAdornment-faOW2dLA.js";var te={},ut=$;Object.defineProperty(te,"__esModule",{value:!0});var $e=te.default=void 0,xt=ut(T()),ht=e;$e=te.default=(0,xt.default)((0,ht.jsx)("path",{d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"}),"KeyboardArrowDown");var se={},mt=$;Object.defineProperty(se,"__esModule",{value:!0});var Ie=se.default=void 0,gt=mt(T()),pt=e;Ie=se.default=(0,gt.default)((0,pt.jsx)("path",{d:"M7.41 15.41 12 10.83l4.59 4.58L18 14l-6-6-6 6z"}),"KeyboardArrowUp");var re={},jt=$;Object.defineProperty(re,"__esModule",{value:!0});var D=re.default=void 0,ft=jt(T()),vt=e;D=re.default=(0,ft.default)((0,vt.jsx)("path",{d:"M12 12c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2m6-1.8C18 6.57 15.35 4 12 4s-6 2.57-6 6.2c0 2.34 1.95 5.44 6 9.14 4.05-3.7 6-6.8 6-9.14M12 2c4.2 0 8 3.22 8 8.2 0 3.32-2.67 7.25-8 11.8-5.33-4.55-8-8.48-8-11.8C4 5.22 7.8 2 12 2"}),"PlaceOutlined");var ne={},yt=$;Object.defineProperty(ne,"__esModule",{value:!0});var Le=ne.default=void 0,bt=yt(T()),Ct=e;Le=ne.default=(0,bt.default)((0,Ct.jsx)("path",{d:"M20 8h-3V4H3c-1.1 0-2 .9-2 2v11h2c0 1.66 1.34 3 3 3s3-1.34 3-3h6c0 1.66 1.34 3 3 3s3-1.34 3-3h2v-5zm-.5 1.5 1.96 2.5H17V9.5zM6 18c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1m2.22-3c-.55-.61-1.33-1-2.22-1s-1.67.39-2.22 1H3V6h12v9zM18 18c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1"}),"LocalShippingOutlined");var ie={},St=$;Object.defineProperty(ie,"__esModule",{value:!0});var We=ie.default=void 0,zt=St(T()),_t=e;We=ie.default=(0,zt.default)((0,_t.jsx)("path",{d:"m21.9 8.89-1.05-4.37c-.22-.9-1-1.52-1.91-1.52H5.05c-.9 0-1.69.63-1.9 1.52L2.1 8.89c-.24 1.02-.02 2.06.62 2.88.08.11.19.19.28.29V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6.94c.09-.09.2-.18.28-.28.64-.82.87-1.87.62-2.89m-2.99-3.9 1.05 4.37c.1.42.01.84-.25 1.17-.14.18-.44.47-.94.47-.61 0-1.14-.49-1.21-1.14L16.98 5zM13 5h1.96l.54 4.52c.05.39-.07.78-.33 1.07-.22.26-.54.41-.95.41-.67 0-1.22-.59-1.22-1.31zM8.49 9.52 9.04 5H11v4.69c0 .72-.55 1.31-1.29 1.31-.34 0-.65-.15-.89-.41-.25-.29-.37-.68-.33-1.07m-4.45-.16L5.05 5h1.97l-.58 4.86c-.08.65-.6 1.14-1.21 1.14-.49 0-.8-.29-.93-.47-.27-.32-.36-.75-.26-1.17M5 19v-6.03c.08.01.15.03.23.03.87 0 1.66-.36 2.24-.95.6.6 1.4.95 2.31.95.87 0 1.65-.36 2.23-.93.59.57 1.39.93 2.29.93.84 0 1.64-.35 2.24-.95.58.59 1.37.95 2.24.95.08 0 .15-.02.23-.03V19z"}),"StorefrontOutlined");var le={},Tt=$;Object.defineProperty(le,"__esModule",{value:!0});var Pe=le.default=void 0,$t=Tt(T()),It=e;Pe=le.default=(0,$t.default)((0,It.jsx)("path",{d:"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8"}),"InfoOutlined");var ae={},Lt=$;Object.defineProperty(ae,"__esModule",{value:!0});var Re=ae.default=void 0,Wt=Lt(T()),Pt=e;Re=ae.default=(0,Wt.default)((0,Pt.jsx)("path",{d:"M21 11.01 3 11v2h18zM3 16h12v2H3zM21 6H3v2.01L21 8z"}),"NotesOutlined");var oe={},Rt=$;Object.defineProperty(oe,"__esModule",{value:!0});var Me=oe.default=void 0,Mt=Rt(T()),kt=e;Me=oe.default=(0,Mt.default)((0,kt.jsx)("path",{d:"M16.01 11H4v2h12.01v3L20 12l-3.99-4z"}),"ArrowRightAlt");var ce={},At=$;Object.defineProperty(ce,"__esModule",{value:!0});var ke=ce.default=void 0,Dt=At(T()),Ot=e;ke=ce.default=(0,Dt.default)((0,Ot.jsx)("path",{d:"m20.5 3-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5M10 5.47l4 1.4v11.66l-4-1.4zm-5 .99 3-1.01v11.7l-3 1.16zm14 11.08-3 1.01V6.86l3-1.16z"}),"MapOutlined");const Ft=["retail","wholesale","manufacturer","distributor","services","ecommerce","other"],qt=["newClient","contacted","onboarded","lost"],Et=["Daily","Weekly","Fortnightly","Monthly","Occasional"],wt=["basicOnly","full","none"],je={name:"",phone:"",city:"",businessState:"",businessType:"retail",status:"newClient",frequency:"Daily",parcelVolume:0,activeContracts:0,provider:"",efficiency:"",logisticsSegment:"",transitFrom:"",transitTo:"",neighbourhood:"",surveyAddress:"",surveyLat:"",surveyLng:"",dataConsent:"basicOnly",notes:""},H=(t,r)=>r&&!t.includes(r)?[r,...t]:t;function Bt({open:t,mode:r,initial:h,onClose:p,onSaved:j}){const b=r==="edit",[s,f]=c.useState(je),[v,W]=c.useState(!1),[M,S]=c.useState(null);c.useEffect(()=>{t&&(f({...je,...h||{}}),S(null))},[t,h]);const a=o=>C=>f(z=>({...z,[o]:C.target.value})),P=async()=>{if(!s.name.trim()){S("Client name is required.");return}W(!0),S(null);const o=s.surveyLat===""?void 0:Number(s.surveyLat),C=s.surveyLng===""?void 0:Number(s.surveyLng),z={name:s.name.trim(),phone:s.phone,city:s.city,businessState:s.businessState,businessType:s.businessType,status:s.status,frequency:s.frequency,parcelVolume:Number(s.parcelVolume)||0,activeContracts:Number(s.activeContracts)||0,provider:s.provider,efficiency:s.efficiency,logisticsSegment:s.logisticsSegment,transitFrom:s.transitFrom,transitTo:s.transitTo,neighbourhood:s.neighbourhood,surveyAddress:s.surveyAddress,surveyZone:s.neighbourhood,dataConsent:s.dataConsent,notes:s.notes,lastUpdated:new Date().toISOString().slice(0,10),...o!=null?{surveyLat:o}:{},...C!=null?{surveyLng:C}:{},...o!=null&&C!=null?{surveyGeo:{lat:o,lon:C}}:{}};try{b?await Fe(Z.clients,h.id,z):await qe(Z.clients,{...z,clientId:`client_${Date.now()}`,surveySubmitted:!1}),j()}catch(R){S(R.message||"Failed to save client")}finally{W(!1)}};return e.jsxs(ye,{open:t,onClose:v?void 0:p,maxWidth:"md",fullWidth:!0,children:[e.jsxs(be,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[b?"Edit Client":"Add Client",e.jsx(K,{onClick:p,size:"small",disabled:v,children:e.jsx(He,{})})]}),e.jsxs(Ce,{dividers:!0,children:[M&&e.jsx(Te,{severity:"error",sx:{mb:2},children:M}),e.jsx(l,{variant:"overline",color:"text.secondary",children:"Business"}),e.jsxs(i,{container:!0,spacing:2,sx:{mt:0,mb:1},children:[e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Client Name *",value:s.name,onChange:a("name")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Phone",value:s.phone,onChange:a("phone")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{select:!0,fullWidth:!0,size:"small",label:"Business Type",value:s.businessType,onChange:a("businessType"),children:H(Ft,s.businessType).map(o=>e.jsx(V,{value:o,children:o},o))})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{select:!0,fullWidth:!0,size:"small",label:"Status",value:s.status,onChange:a("status"),children:H(qt,s.status).map(o=>e.jsx(V,{value:o,children:o},o))})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{select:!0,fullWidth:!0,size:"small",label:"Order Frequency",value:s.frequency,onChange:a("frequency"),children:H(Et,s.frequency).map(o=>e.jsx(V,{value:o,children:o},o))})}),e.jsx(i,{item:!0,xs:12,sm:3,children:e.jsx(u,{fullWidth:!0,size:"small",type:"number",label:"Parcel Volume",value:s.parcelVolume,onChange:a("parcelVolume")})}),e.jsx(i,{item:!0,xs:12,sm:3,children:e.jsx(u,{fullWidth:!0,size:"small",type:"number",label:"Active Contracts",value:s.activeContracts,onChange:a("activeContracts")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Current Provider",value:s.provider,onChange:a("provider")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Efficiency",value:s.efficiency,onChange:a("efficiency")})}),e.jsx(i,{item:!0,xs:12,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Logistics Segment",value:s.logisticsSegment,onChange:a("logisticsSegment"),placeholder:"First Mile, Last Mile"})})]}),e.jsx(X,{sx:{my:1.5}}),e.jsx(l,{variant:"overline",color:"text.secondary",children:"Location & Transit"}),e.jsxs(i,{container:!0,spacing:2,sx:{mt:0,mb:1},children:[e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"City",value:s.city,onChange:a("city")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"State",value:s.businessState,onChange:a("businessState")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Neighbourhood / Zone",value:s.neighbourhood,onChange:a("neighbourhood")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Transit From",value:s.transitFrom,onChange:a("transitFrom")})}),e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Transit To",value:s.transitTo,onChange:a("transitTo")})}),e.jsx(i,{item:!0,xs:12,sm:3,children:e.jsx(u,{fullWidth:!0,size:"small",type:"number",label:"Latitude",value:s.surveyLat,onChange:a("surveyLat")})}),e.jsx(i,{item:!0,xs:12,sm:3,children:e.jsx(u,{fullWidth:!0,size:"small",type:"number",label:"Longitude",value:s.surveyLng,onChange:a("surveyLng")})}),e.jsx(i,{item:!0,xs:12,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Survey Address",value:s.surveyAddress,onChange:a("surveyAddress"),multiline:!0,minRows:2})})]}),e.jsx(X,{sx:{my:1.5}}),e.jsx(l,{variant:"overline",color:"text.secondary",children:"Other"}),e.jsxs(i,{container:!0,spacing:2,sx:{mt:0},children:[e.jsx(i,{item:!0,xs:12,sm:6,children:e.jsx(u,{select:!0,fullWidth:!0,size:"small",label:"Data Consent",value:s.dataConsent,onChange:a("dataConsent"),children:H(wt,s.dataConsent).map(o=>e.jsx(V,{value:o,children:o},o))})}),e.jsx(i,{item:!0,xs:12,children:e.jsx(u,{fullWidth:!0,size:"small",label:"Notes",value:s.notes,onChange:a("notes"),multiline:!0,minRows:2})})]})]}),e.jsxs(Se,{sx:{px:3,py:2},children:[e.jsx(_,{onClick:p,disabled:v,children:"Cancel"}),e.jsx(_,{variant:"contained",onClick:P,disabled:v,startIcon:v?e.jsx(J,{size:16,color:"inherit"}):null,children:b?"Save Changes":"Create Client"})]})]})}const Vt=t=>"CLI-"+String(t).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().substring(0,6).padStart(6,"0");function Nt(t){var p,j;const r=t.payload||{},h=Vt(t.id);return{id:t.id,logicalId:h,clientId:h,name:r.name||"—",phone:r.phone||"",city:r.city||"",businessState:r.businessState||"",businessType:r.businessType||"",status:r.status||"unknown",parcelVolume:r.parcelVolume??0,activeContracts:r.activeContracts??0,frequency:r.frequency||"",provider:r.provider||"",efficiency:r.efficiency||"",logisticsSegment:r.logisticsSegment||"",transitFrom:r.transitFrom||"",transitTo:r.transitTo||"",neighbourhood:r.neighbourhood||r.surveyZone||"",surveyAddress:r.surveyAddress||"",surveyLat:r.surveyLat??((p=r.surveyGeo)==null?void 0:p.lat)??"",surveyLng:r.surveyLng??((j=r.surveyGeo)==null?void 0:j.lon)??"",dataConsent:r.dataConsent||"",lastUpdated:r.lastUpdated||"",notes:r.notes||""}}const Ht=t=>String(t||"").replace(/[_-]+/g," ").replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/\s+/g," ").replace(/\b\w/g,r=>r.toUpperCase()).trim(),L=Ht,Ut=t=>({full:"success",basiconly:"info",none:"default"})[String(t||"").toLowerCase()]||"default",Gt=t=>{const r=String(t||"").toLowerCase();return/high|good|excellent/.test(r)?"success":/med|average|moderate/.test(r)?"warning":/low|poor|bad/.test(r)?"error":"info"},Kt={textTransform:"uppercase",letterSpacing:.4,fontSize:"0.68rem",fontWeight:700,color:"grey.700"};function I({label:t,color:r="default"}){return t==null||t===""?e.jsx(l,{variant:"body2",sx:{fontWeight:500,color:"grey.500"},children:"—"}):e.jsx(ee,{size:"small",label:t,sx:{fontWeight:600,...r==="default"?{bgcolor:"grey.100",color:"grey.700"}:{bgcolor:`${r}.lighter`,color:`${r}.dark`}}})}function y({label:t,children:r}){return e.jsxs(m,{children:[e.jsx(l,{variant:"caption",color:"text.secondary",sx:Kt,children:t}),e.jsx(m,{sx:{mt:.5},children:r})]})}function U({label:t,value:r}){return e.jsx(y,{label:t,children:e.jsx(l,{variant:"body2",sx:{fontWeight:500,color:r?"grey.800":"grey.500",wordBreak:"break-word"},children:r||"—"})})}function G({icon:t,title:r,accent:h="primary",children:p}){return e.jsxs(m,{sx:{height:"100%",borderRadius:2,border:1,borderColor:"divider",bgcolor:"background.paper",overflow:"hidden"},children:[e.jsxs(x,{direction:"row",spacing:1,alignItems:"center",sx:{px:2,py:1.25,borderBottom:1,borderColor:"divider",bgcolor:`${h}.lighter`,opacity:.999},children:[e.jsx(t,{sx:{fontSize:18,color:`${h}.main`}}),e.jsx(l,{variant:"overline",sx:{fontWeight:700,color:"grey.800",letterSpacing:.6,lineHeight:1},children:r})]}),e.jsx(x,{spacing:1.75,sx:{p:2},children:p})]})}function fe({label:t,value:r,icon:h,color:p="primary"}){return e.jsx(m,{sx:{flex:1,p:1.5,borderRadius:1.5,border:1,borderColor:"divider",bgcolor:"grey.50"},children:e.jsxs(x,{direction:"row",spacing:1,alignItems:"center",children:[e.jsx(m,{sx:{width:32,height:32,borderRadius:1,bgcolor:`${p}.lighter`,color:`${p}.main`,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:e.jsx(h,{sx:{fontSize:18}})}),e.jsxs(m,{children:[e.jsx(l,{variant:"h5",sx:{fontWeight:700,color:"grey.800",lineHeight:1.1},children:r}),e.jsx(l,{variant:"caption",color:"text.secondary",children:t})]})]})})}function ve({label:t,value:r,color:h="grey.800"}){return e.jsxs(m,{sx:{textAlign:"center",minWidth:56},children:[e.jsx(l,{variant:"body2",sx:{fontWeight:700,color:h,lineHeight:1.2},children:r}),e.jsx(l,{variant:"caption",color:"text.secondary",sx:{fontSize:"0.65rem"},children:t})]})}function Zt({row:t,index:r,onEdit:h,onDelete:p}){const[j,b]=c.useState(!1);return e.jsxs(c.Fragment,{children:[e.jsxs(O,{hover:!0,sx:{cursor:"pointer","& > *":{borderBottom:j?"unset":void 0},...j&&{bgcolor:"primary.lighter","&:hover":{bgcolor:"primary.lighter"}}},onClick:()=>b(s=>!s),children:[e.jsx(g,{padding:"checkbox",children:e.jsx(K,{size:"small",onClick:s=>{s.stopPropagation(),b(f=>!f)},children:j?e.jsx(Ie,{}):e.jsx($e,{})})}),e.jsx(g,{sx:{whiteSpace:"nowrap"},children:e.jsx(l,{variant:"caption",sx:{fontFamily:"monospace",fontWeight:700,color:"primary.main",bgcolor:"primary.lighter",px:1,py:.5,borderRadius:1,border:"1px solid",borderColor:"primary.light",whiteSpace:"nowrap"},children:t.logicalId})}),e.jsx(g,{children:e.jsxs(x,{direction:"row",spacing:1.25,alignItems:"center",children:[e.jsx(me,{name:t.name,size:38}),e.jsxs(m,{sx:{minWidth:0},children:[e.jsx(l,{variant:"body2",sx:{fontWeight:600,color:"grey.800"},children:t.name}),e.jsx(x,{direction:"row",spacing:.75,alignItems:"center",sx:{mt:.4},children:t.businessType&&e.jsx(ee,{size:"small",label:L(t.businessType),sx:{height:20,fontSize:"0.68rem",fontWeight:600,bgcolor:"grey.100",color:"grey.700"}})})]})]})}),e.jsx(g,{children:e.jsxs(x,{direction:"row",spacing:.75,alignItems:"center",children:[e.jsx(Je,{sx:{fontSize:15,color:"grey.400"}}),e.jsxs(m,{children:[e.jsx(l,{variant:"body2",children:t.phone||"—"}),t.frequency&&e.jsx(l,{variant:"caption",color:"text.secondary",children:t.frequency})]})]})}),e.jsx(g,{children:e.jsxs(x,{direction:"row",spacing:.75,alignItems:"center",children:[e.jsx(D,{sx:{fontSize:15,color:"grey.400"}}),e.jsxs(m,{children:[e.jsxs(l,{variant:"body2",children:[t.city||"—",t.businessState?`, ${t.businessState}`:""]}),t.neighbourhood&&e.jsx(l,{variant:"caption",color:"text.secondary",children:t.neighbourhood})]})]})}),e.jsx(g,{children:e.jsxs(x,{direction:"row",spacing:1.5,alignItems:"center",justifyContent:"center",divider:e.jsx(X,{orientation:"vertical",flexItem:!0}),children:[e.jsx(ve,{label:"Parcels",value:Number(t.parcelVolume).toLocaleString()}),e.jsx(ve,{label:"Contracts",value:t.activeContracts,color:"primary.main"})]})}),e.jsx(g,{children:e.jsx(pe,{status:t.status})}),e.jsxs(g,{align:"right",children:[e.jsx(Q,{title:"Edit",children:e.jsx(K,{size:"small",onClick:s=>{s.stopPropagation(),h(t)},children:e.jsx(ge,{fontSize:"small"})})}),e.jsx(Q,{title:"Delete",children:e.jsx(K,{size:"small",onClick:s=>{s.stopPropagation(),p(t)},children:e.jsx(et,{fontSize:"small"})})})]})]}),e.jsx(O,{children:e.jsx(g,{colSpan:8,sx:{py:0,borderBottom:j?void 0:"none"},children:e.jsx(Ne,{in:j,timeout:"auto",unmountOnExit:!0,children:e.jsxs(m,{sx:{m:2,borderRadius:2.5,border:1,borderColor:"divider",overflow:"hidden",boxShadow:"0 4px 16px rgba(0,0,0,0.06)"},children:[e.jsxs(x,{direction:{xs:"column",sm:"row"},justifyContent:"space-between",alignItems:{xs:"flex-start",sm:"center"},spacing:1.5,sx:{px:2.5,py:1.75,borderBottom:1,borderColor:"divider",background:s=>`linear-gradient(90deg, ${s.palette.primary.lighter}88 0%, ${s.palette.background.paper} 75%)`},children:[e.jsxs(x,{direction:"row",spacing:1.5,alignItems:"center",children:[e.jsx(me,{name:t.name,size:40}),e.jsxs(m,{children:[e.jsx(l,{variant:"subtitle1",sx:{fontWeight:700,lineHeight:1.2},children:t.name}),e.jsxs(x,{direction:"row",spacing:.75,alignItems:"center",sx:{mt:.25},children:[e.jsx(tt,{sx:{fontSize:14,color:"grey.400"}}),e.jsx(l,{variant:"caption",color:"text.secondary",children:t.clientId})]})]}),e.jsx(pe,{status:t.status,sx:{ml:.5}})]}),e.jsx(_,{size:"small",variant:"contained",startIcon:e.jsx(ge,{}),onClick:()=>h(t),children:"Edit Client"})]}),e.jsx(m,{sx:{p:2.5,bgcolor:"grey.50"},children:e.jsxs(i,{container:!0,spacing:2.5,alignItems:"stretch",children:[e.jsx(i,{item:!0,xs:12,md:4,children:e.jsxs(G,{icon:We,title:"Business",accent:"primary",children:[e.jsxs(x,{direction:"row",spacing:1.5,children:[e.jsx(fe,{label:"Parcel Volume",value:Number(t.parcelVolume).toLocaleString(),icon:ze,color:"primary"}),e.jsx(fe,{label:"Active Contracts",value:t.activeContracts,icon:_e,color:"primary"})]}),e.jsx(y,{label:"Client ID",children:e.jsx(l,{variant:"body2",sx:{fontFamily:"monospace",fontWeight:600,color:"grey.800"},children:t.clientId})}),e.jsx(y,{label:"Business Type",children:e.jsx(I,{label:t.businessType&&L(t.businessType),color:"primary"})}),e.jsx(y,{label:"Order Frequency",children:e.jsx(I,{label:t.frequency&&L(t.frequency),color:"info"})})]})}),e.jsx(i,{item:!0,xs:12,md:4,children:e.jsxs(G,{icon:Le,title:"Logistics",accent:"primary",children:[e.jsx(y,{label:"Logistics Segment",children:t.logisticsSegment?e.jsx(x,{direction:"row",spacing:.75,flexWrap:"wrap",useFlexGap:!0,children:String(t.logisticsSegment).split(/[,/]/).map(s=>s.trim()).filter(Boolean).map(s=>e.jsx(I,{label:L(s),color:"primary"},s))}):e.jsx(I,{label:null})}),e.jsx(U,{label:"Current Provider",value:t.provider}),e.jsx(y,{label:"Efficiency",children:e.jsx(I,{label:t.efficiency&&L(t.efficiency),color:Gt(t.efficiency)})}),e.jsx(y,{label:"Transit Route",children:(()=>{const s=[t.transitFrom,...String(t.transitTo||"").split(",")].map(f=>f.trim()).filter(Boolean);return s.length?e.jsx(x,{direction:"row",spacing:.75,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:s.map((f,v)=>e.jsxs(c.Fragment,{children:[v>0&&e.jsx(Me,{sx:{fontSize:20,color:"primary.main"}}),e.jsx(I,{label:L(f),color:v===0?"default":"info"})]},`${f}-${v}`))}):e.jsx(I,{label:null})})()})]})}),e.jsx(i,{item:!0,xs:12,md:4,children:e.jsxs(G,{icon:D,title:"Location & Survey",accent:"primary",children:[e.jsx(y,{label:"City / State",children:e.jsx(l,{variant:"body2",sx:{fontWeight:500,color:"grey.800"},children:[t.city,t.businessState].filter(Boolean).join(", ")||"—"})}),e.jsx(U,{label:"Neighbourhood",value:t.neighbourhood}),e.jsx(y,{label:"Survey Address",children:e.jsxs(x,{direction:"row",spacing:1,sx:{p:1.25,borderRadius:1.5,bgcolor:"grey.50",border:1,borderColor:"divider"},children:[e.jsx(D,{sx:{fontSize:16,color:"grey.400",mt:"2px"}}),e.jsx(l,{variant:"body2",sx:{color:"grey.800",lineHeight:1.5},children:t.surveyAddress||"—"})]})}),e.jsx(y,{label:"Coordinates",children:t.surveyLat&&t.surveyLng?e.jsxs(x,{direction:"row",spacing:1.25,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[e.jsx(Q,{title:`${t.surveyLat}, ${t.surveyLng}`,arrow:!0,placement:"top",children:e.jsxs(x,{direction:"row",spacing:.5,alignItems:"center",sx:{cursor:"default"},children:[e.jsx(D,{sx:{fontSize:16,color:"grey.400"}}),e.jsx(l,{variant:"body2",sx:{fontWeight:500,color:"grey.800",borderBottom:"1px dotted",borderColor:"grey.300"},children:[t.neighbourhood,t.city].filter(Boolean).join(", ")||"Pinned location"})]})}),e.jsx(_,{component:"a",href:`https://www.google.com/maps?q=${t.surveyLat},${t.surveyLng}`,target:"_blank",rel:"noopener",size:"small",variant:"outlined",startIcon:e.jsx(ke,{sx:{fontSize:16}}),sx:{py:.25,px:1.25,minWidth:0,fontSize:"0.75rem",fontWeight:600,borderRadius:5,color:"primary.main",borderColor:"primary.100",bgcolor:"primary.lighter","&:hover":{borderColor:"primary.main",bgcolor:"primary.lighter"}},children:"View on map"})]}):e.jsx(l,{variant:"body2",sx:{color:"grey.500"},children:"—"})})]})}),e.jsx(i,{item:!0,xs:12,children:e.jsx(G,{icon:Pe,title:"Contact & Compliance",accent:"primary",children:e.jsxs(i,{container:!0,spacing:2.5,children:[e.jsx(i,{item:!0,xs:12,sm:6,md:4,children:e.jsx(U,{label:"Phone",value:t.phone})}),e.jsx(i,{item:!0,xs:12,sm:6,md:4,children:e.jsx(y,{label:"Data Consent",children:e.jsx(I,{label:t.dataConsent&&L(t.dataConsent),color:Ut(t.dataConsent)})})}),e.jsx(i,{item:!0,xs:12,sm:6,md:4,children:e.jsx(U,{label:"Last Updated",value:t.lastUpdated})}),t.notes&&e.jsx(i,{item:!0,xs:12,children:e.jsxs(m,{sx:{p:2,borderRadius:1.5,bgcolor:"warning.lighter",border:1,borderColor:"warning.light"},children:[e.jsxs(x,{direction:"row",spacing:1,alignItems:"center",sx:{mb:.5},children:[e.jsx(Re,{sx:{fontSize:16,color:"warning.dark"}}),e.jsx(l,{variant:"caption",sx:{color:"warning.dark",textTransform:"uppercase",letterSpacing:.4,fontSize:"0.68rem",fontWeight:700},children:"Notes"})]}),e.jsx(l,{variant:"body2",sx:{color:"grey.800"},children:t.notes})]})})]})})})]})})]})})})})]})}function is(){var xe;const[t,r]=c.useState([]),[h,p]=c.useState(!0),[j,b]=c.useState(null),[s]=Ee(),[f,v]=c.useState(0),[W,M]=c.useState(s.get("q")||""),[S,a]=c.useState(0),[P,o]=c.useState(10);c.useEffect(()=>{const n=s.get("q");n!=null&&(M(n),a(0))},[s]);const[C,z]=c.useState({open:!1,mode:"add",initial:null}),[R,F]=c.useState(null),[q,de]=c.useState(!1),k=()=>{p(!0),b(null),Be(Z.clients).then(n=>r(n.map(Nt))).catch(n=>b(n.message||"Failed to load clients")).finally(()=>p(!1))};c.useEffect(()=>{k()},[]);const E=c.useMemo(()=>({total:t.length,newCount:t.filter(n=>n.status==="newClient").length,parcels:t.reduce((n,d)=>n+(Number(d.parcelVolume)||0),0),contracts:t.reduce((n,d)=>n+(Number(d.activeContracts)||0),0)}),[t]),w=c.useMemo(()=>{const n=[];return t.forEach(d=>{n.includes(d.status)||n.push(d.status)}),[{key:"all",label:"All"},...n.map(d=>({key:d,label:L(d)}))]},[t]),Y=((xe=w[Math.min(f,w.length-1)])==null?void 0:xe.key)||"all",Ae=c.useMemo(()=>{const n={all:t.length};return t.forEach(d=>{n[d.status]=(n[d.status]||0)+1}),n},[t]),B=c.useMemo(()=>t.filter(n=>{const d=Y==="all"||n.status===Y,A=!W||[n.name,n.phone,n.city,n.businessType,n.clientId,n.neighbourhood].join(" ").toLowerCase().includes(W.toLowerCase());return d&&A}),[t,Y,W]),ue=B.slice(S*P,S*P+P),De=()=>{z({open:!1,mode:"add",initial:null}),k()},Oe=async()=>{de(!0);try{await Ve(Z.clients,R.id),F(null),k()}catch(n){b(n.message||"Failed to delete client")}finally{de(!1)}};return e.jsxs(e.Fragment,{children:[e.jsx(ot,{title:"Clients",breadcrumbs:[{label:"Clients"}],action:e.jsxs(x,{direction:"row",spacing:1.5,children:[e.jsx(_,{variant:"outlined",startIcon:e.jsx(st,{}),onClick:k,disabled:h,children:"Refresh"}),e.jsx(_,{variant:"contained",startIcon:e.jsx(Ue,{}),onClick:()=>z({open:!0,mode:"add",initial:null}),children:"Add Client"})]})}),e.jsxs(i,{container:!0,spacing:2.5,sx:{mb:3},children:[e.jsx(i,{item:!0,xs:12,sm:6,lg:3,children:e.jsx(N,{accent:!0,title:"Total Clients",value:E.total,icon:he,caption:"All registered"})}),e.jsx(i,{item:!0,xs:12,sm:6,lg:3,children:e.jsx(N,{accent:!0,title:"New Clients",value:E.newCount,icon:at,color:"primary",caption:"Awaiting onboarding"})}),e.jsx(i,{item:!0,xs:12,sm:6,lg:3,children:e.jsx(N,{accent:!0,title:"Total Parcel Volume",value:E.parcels.toLocaleString(),icon:ze,color:"primary",caption:"Across all clients"})}),e.jsx(i,{item:!0,xs:12,sm:6,lg:3,children:e.jsx(N,{accent:!0,title:"Active Contracts",value:E.contracts,icon:_e,color:"primary",caption:"Currently running"})})]}),e.jsxs(ct,{sx:{overflow:"hidden"},children:[e.jsxs(m,{sx:{px:2.5,py:2,borderBottom:1,borderColor:"divider",display:"flex",alignItems:"center",gap:1.5,background:n=>`linear-gradient(90deg, ${n.palette.primary.lighter}66 0%, ${n.palette.background.paper} 70%)`},children:[e.jsx(m,{sx:{width:40,height:40,borderRadius:2,bgcolor:"primary.lighter",color:"primary.main",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:e.jsx(he,{fontSize:"small"})}),e.jsxs(m,{children:[e.jsx(l,{variant:"subtitle1",sx:{fontWeight:700,color:"grey.800",lineHeight:1.2},children:"Client Directory"}),e.jsx(l,{variant:"caption",color:"text.secondary",children:"Browse, search and manage every client account"})]})]}),e.jsxs(x,{direction:{xs:"column",md:"row"},spacing:1.5,sx:{p:2},alignItems:{md:"center"},children:[e.jsx(u,{size:"small",placeholder:"Search by name, phone, city, ID…",value:W,onChange:n=>{M(n.target.value),a(0)},sx:{minWidth:300},InputProps:{startAdornment:e.jsx(dt,{position:"start",children:e.jsx(we,{fontSize:"small"})})}}),e.jsx(m,{sx:{flexGrow:1}}),!h&&e.jsxs(x,{direction:"row",spacing:1,alignItems:"center",children:[e.jsxs(l,{variant:"body2",color:"text.secondary",children:[B.length," ",B.length===1?"client":"clients"]}),e.jsx(ee,{size:"small",label:"live · doormile_clients",sx:{height:22,fontSize:"0.7rem",bgcolor:"success.lighter",color:"success.dark",fontWeight:600}})]})]}),e.jsx(m,{sx:{px:2,borderBottom:1,borderColor:"divider"},children:e.jsx(Ge,{value:Math.min(f,w.length-1),onChange:(n,d)=>{v(d),a(0)},variant:"scrollable",scrollButtons:"auto",children:w.map((n,d)=>e.jsx(Ke,{label:e.jsx(Ze,{label:n.label,count:Ae[n.key]||0,active:f===d})},n.key))})}),j&&e.jsx(Te,{severity:"error",sx:{m:2},action:e.jsx(_,{color:"inherit",size:"small",onClick:k,children:"Retry"}),children:j}),e.jsx(Ye,{children:e.jsxs(rt,{sx:{minWidth:900},children:[e.jsx(nt,{children:e.jsxs(O,{sx:{"& th":{bgcolor:"grey.50",fontWeight:700,color:"grey.700",textTransform:"uppercase",fontSize:"0.72rem",letterSpacing:.4}},children:[e.jsx(g,{padding:"checkbox"}),e.jsx(g,{children:"ID"}),e.jsx(g,{children:"Client"}),e.jsx(g,{children:"Contact"}),e.jsx(g,{children:"Location"}),e.jsx(g,{align:"center",children:"Volume"}),e.jsx(g,{children:"Status"}),e.jsx(g,{align:"right",children:"Actions"})]})}),e.jsx(it,{children:h?e.jsx(O,{children:e.jsx(g,{colSpan:8,sx:{border:"none"},children:e.jsx(m,{sx:{display:"flex",justifyContent:"center",py:6},children:e.jsx(J,{})})})}):ue.length===0?e.jsx(O,{children:e.jsx(g,{colSpan:8,sx:{border:"none"},children:e.jsx(lt,{title:"No clients found",caption:"Try a different tab or search term, or add a client."})})}):ue.map((n,d)=>e.jsx(Zt,{row:n,index:S*P+d,onEdit:A=>z({open:!0,mode:"edit",initial:A}),onDelete:A=>F(A)},n.id))})]})}),e.jsx(Qe,{component:"div",count:B.length,page:S,onPageChange:(n,d)=>a(d),rowsPerPage:P,onRowsPerPageChange:n=>{o(+n.target.value),a(0)},rowsPerPageOptions:[5,10,25]})]}),e.jsx(Bt,{open:C.open,mode:C.mode,initial:C.initial,onClose:()=>z({open:!1,mode:"add",initial:null}),onSaved:De}),e.jsxs(ye,{open:!!R,onClose:q?void 0:()=>F(null),children:[e.jsx(be,{children:"Delete client?"}),e.jsx(Ce,{children:e.jsxs(Xe,{children:["This will permanently remove ",e.jsx("strong",{children:R==null?void 0:R.name})," from the doormile_clients collection. This cannot be undone."]})}),e.jsxs(Se,{sx:{px:3,py:2},children:[e.jsx(_,{onClick:()=>F(null),disabled:q,children:"Cancel"}),e.jsx(_,{color:"error",variant:"contained",onClick:Oe,disabled:q,startIcon:q?e.jsx(J,{size:16,color:"inherit"}):null,children:"Delete"})]})]})]})}export{is as default};