2 lines
6.9 KiB
JavaScript
2 lines
6.9 KiB
JavaScript
import{r as a,j as e,L as S,H as D,e as o,O as F,a4 as c,z as k}from"./index-9FS9bw8D.js";import{F as M,a as P}from"./UsersIcon-DAyxbQQr.js";function U({title:s,titleId:i,...d},n){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor","aria-hidden":"true","data-slot":"icon",ref:n,"aria-labelledby":i},d),s?a.createElement("title",{id:i},s):null,a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 21h16.5M4.5 3h15M5.25 3v18m13.5-18v18M9 6.75h1.5m-1.5 3h1.5m-1.5 3h1.5m3-6H15m-1.5 3H15m-1.5 3H15M9 21v-3.375c0-.621.504-1.125 1.125-1.125h3.75c.621 0 1.125.504 1.125 1.125V21"}))}const C=a.forwardRef(U),H=()=>{var b,p,f,j,y,N,v,w,R;const[s,i]=a.useState(null),[d,n]=a.useState(!0),[m,x]=a.useState(null),[l,g]=a.useState(!0),[u,h]=a.useState(!1);a.useEffect(()=>{(async()=>{try{n(!0);const[r,E]=await Promise.all([c.getDashboard(),c.getSettings()]);i(r.data.data),g(E.data.data.registrationEnabled),x(null)}catch(r){console.error("Failed to fetch admin dashboard:",r),x("Failed to load dashboard data")}finally{n(!1)}})()},[]);const A=async()=>{try{h(!0),await c.updateSettings({registrationEnabled:!l}),g(!l),k.success(`Registration ${l?"disabled":"enabled"} successfully`)}catch(t){console.error("Failed to update registration setting:",t),k.error("Failed to update registration setting")}finally{h(!1)}};if(d)return e.jsxs("div",{className:"p-6",children:[e.jsx("h1",{className:"text-2xl font-bold text-gray-900 mb-6",children:"Admin Dashboard"}),e.jsx("div",{className:"flex justify-center items-center h-64",children:e.jsx(S,{size:"lg"})})]});if(m)return e.jsxs("div",{className:"p-6",children:[e.jsx("h1",{className:"text-2xl font-bold text-gray-900 mb-6",children:"Admin Dashboard"}),e.jsx("div",{className:"card",children:e.jsxs("div",{className:"text-center py-8",children:[e.jsx("p",{className:"text-red-600 mb-4",children:m}),e.jsx("button",{onClick:()=>window.location.reload(),className:"btn-primary",children:"Retry"})]})})]});const $=[{title:"Total Users",value:((b=s==null?void 0:s.stats)==null?void 0:b.totalUsers)||0,icon:M,color:"blue",subtitle:`${((p=s==null?void 0:s.stats)==null?void 0:p.adminUsers)||0} admins`},{title:"Total Properties",value:((f=s==null?void 0:s.stats)==null?void 0:f.totalProperties)||0,icon:C,color:"green",subtitle:`${((j=s==null?void 0:s.stats)==null?void 0:j.totalEquipment)||0} equipment items`},{title:"Total Applications",value:((y=s==null?void 0:s.stats)==null?void 0:y.totalApplications)||0,icon:D,color:"purple",subtitle:`${((N=s==null?void 0:s.stats)==null?void 0:N.recentApplications)||0} recent`},{title:"Total Products",value:((v=s==null?void 0:s.stats)==null?void 0:v.totalProducts)||0,icon:P,color:"green",subtitle:`${((w=s==null?void 0:s.stats)==null?void 0:w.customProducts)||0} custom`}];return e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h1",{className:"text-2xl font-bold text-gray-900",children:"Admin Dashboard"}),e.jsx("p",{className:"text-gray-600",children:"System overview and management"})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:$.map((t,r)=>e.jsx("div",{className:"card",children:e.jsxs("div",{className:"flex items-center",children:[e.jsx("div",{className:`p-3 rounded-full bg-${t.color}-100`,children:e.jsx(t.icon,{className:`h-6 w-6 text-${t.color}-600`})}),e.jsxs("div",{className:"ml-4",children:[e.jsx("p",{className:"text-sm font-medium text-gray-600",children:t.title}),e.jsx("p",{className:"text-2xl font-bold text-gray-900",children:t.value}),e.jsx("p",{className:"text-xs text-gray-500",children:t.subtitle})]})]})},r))}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[e.jsxs("div",{className:"card",children:[e.jsx("h3",{className:"text-lg font-semibold text-gray-900 mb-4",children:"Quick Actions"}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs(o,{to:"/admin/users",className:"block w-full text-left p-3 rounded-lg border border-gray-200 hover:bg-gray-50 transition-colors",children:[e.jsx("div",{className:"font-medium text-gray-900",children:"Manage Users"}),e.jsx("div",{className:"text-sm text-gray-500",children:"View and manage user accounts"})]}),e.jsxs(o,{to:"/admin/products",className:"block w-full text-left p-3 rounded-lg border border-gray-200 hover:bg-gray-50 transition-colors",children:[e.jsx("div",{className:"font-medium text-gray-900",children:"Manage Products"}),e.jsx("div",{className:"text-sm text-gray-500",children:"Add and manage lawn care products"})]}),e.jsxs(o,{to:"/admin/equipment",className:"block w-full text-left p-3 rounded-lg border border-gray-200 hover:bg-gray-50 transition-colors",children:[e.jsx("div",{className:"font-medium text-gray-900",children:"Manage Equipment"}),e.jsx("div",{className:"text-sm text-gray-500",children:"Add and manage lawn care equipment"})]})]})]}),e.jsxs("div",{className:"card",children:[e.jsx("h3",{className:"text-lg font-semibold text-gray-900 mb-4",children:"System Settings"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg border border-gray-200",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-gray-900",children:"User Registration"}),e.jsx("div",{className:"text-sm text-gray-500",children:l?"New users can register":"Registration is disabled"})]}),e.jsx("button",{onClick:A,disabled:u,className:`relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 ${l?"bg-blue-600":"bg-gray-200"} ${u?"opacity-50 cursor-not-allowed":""}`,children:e.jsx("span",{className:`pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out ${l?"translate-x-5":"translate-x-0"}`})})]}),e.jsxs("button",{onClick:()=>window.open(`${F.apiBaseUrl}/admin/system/health`,"_blank"),className:"w-full text-left p-3 rounded-lg border border-gray-200 hover:bg-gray-50 transition-colors",children:[e.jsx("div",{className:"font-medium text-gray-900",children:"System Health"}),e.jsx("div",{className:"text-sm text-gray-500",children:"Check system status and health"})]})]})]}),e.jsxs("div",{className:"card",children:[e.jsx("h3",{className:"text-lg font-semibold text-gray-900 mb-4",children:"Recent Activity"}),e.jsx("div",{className:"space-y-3",children:((R=s==null?void 0:s.recentActivity)==null?void 0:R.length)>0?s.recentActivity.map((t,r)=>e.jsxs("div",{className:"flex items-center justify-between py-2",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-gray-900",children:t.action}),e.jsx("p",{className:"text-xs text-gray-500",children:t.user})]}),e.jsx("p",{className:"text-xs text-gray-400",children:t.timestamp})]},r)):e.jsx("p",{className:"text-gray-500 text-sm",children:"No recent activity"})})]})]})]})};export{H as default};
|