PageSourceSearch

https://pietropaciello.com/_next/static/chunks/pages/dashboard/admin-aa122d123b92ed60.js

js pietropaciello.com collected 2026-10-05 23:18:17 UTC 18,121 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[950],{6293:function(e,s,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/dashboard/admin",function(){return t(9874)}])},9874:function(e,s,t){"use strict";t.r(s),t.d(s,{__N_SSP:function(){return Z}});var a=t(5893),i=t(7294),l=t(4901),n=t(5348),r=t(9417),d=t(1664),c=t.n(d),o=t(8971),m=t(1352),x=t(8463),h=t(9525),u=t(5077),p=t(3766),j=t(1240),v=t(4927),g=t(9539),y=t(9455),N=t(4464),b=t(1408),f=t(6265),w=t(1526),k=t(1163),S=t(6501);let C=e=>{let{isOpen:s,onClose:t,title:n,type:r}=e,{t:d}=(0,l.$G)("dashboard"),[c,x]=(0,i.useState)(!1),[h,u]=(0,i.useState)(null),[p,j]=(0,i.useState)(null);(0,i.useEffect)(()=>{s&&(v(),j(null))},[s,r]);let v=async()=>{x(!0);try{let e=await fetch("".concat("https://pietropaciello.com/api","/admin/dashboard/").concat("revenue"===r?"revenue-details":"orders"===r?"orders-details":"products"===r?"products-details":"users-details"),{credentials:"include"});if(e.ok){let s=await e.json();u(s)}}catch(e){S.ZP.error("Failed to load details")}finally{x(!1)}};return(0,a.jsx)(w.M,{children:s&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(f.E.div,{initial:{opacity:0}
1,animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 bg-black bg-opacity-50 z-40",onClick:t}),(0,a.jsx)(f.E.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},className:"fixed inset-0 flex items-center justify-center z-50 p-4",onClick:e=>{e.target===e.currentTarget&&t()},children:(0,a.jsxs)("div",{className:"bg-white rounded-lg shadow-xl max-w-4xl w-full max-h-[90vh] overflow-hidden",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center p-6 border-b",children:[(0,a.jsx)("h2",{className:"text-2xl font-bold",children:n}),(0,a.jsx)("button",{onClick:t,className:"p-2 hover:bg-gray-100 rounded-lg transition",children:(0,a.jsx)(m.Z,{className:"w-5 h-5"})})]}),(0,a.jsx)("div",{className:"p-6 overflow-y-auto max-h-[calc(90vh-100px)]",children:(()=>{var e,s,t,i,l,n,m,x,u,v;if(c)return(0,a.jsx)("div",{className:"flex justify-center items-center h-64",children:(0,a.jsx)("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary-600"})});if(!h)return null;switch(r){case"revenue":return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.monthlyRevenue")}),(0,a.jsx)("div",{className:"bg-gray-50 rounded-lg p-2",children:(null===(e=h.monthlyRevenue)||void 0===e?void 0:e.length)?(0,a.jsx)("div",{className:"space-y-1 max-h-96 overflow-y-auto",children:h.monthlyRevenue.map(e=>{var s;let t=p===e.key;return(0,a.jsxs)("div",{className:"bg-white rounded-md border",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>j(t?null:e.key),className:"w-full flex justify-between items-center px-3 py-2 hover:bg-gray-50 transition-colors",children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm font-medium",children:[(0,a.jsx)(f.E.span,{animate:{rotate:t?0:-90},transition:{duration:.18},className:"inline-flex",children:(0,a.jsx)(o.Z,{className:"w-4 h-4 text-gray-500"})}),e.month,(0,a.jsxs)("span",{className:"text-xs text-gray-500 font-normal",children:["(",e.count,")"]})]}),(0,a.jsxs)("span",{className:"text-sm font-bold text-green-600",children:["€",Number(e.revenue||0).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})]})]}),(0,a.jsx)(w.M,{initial:!1,children:t&&(0,a.jsx)(f.E.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.22,ease:"easeOut"},className:"overflow-hidden",children:(0,a.jsx)("div",{className:"px-3 pb-3 pt-1 space-y-2 border-t",children:null===(s=e.payments)||void 0===s?void 0:s.map(e=>{var s,t;return(0,a.jsx)("div",{className:"text-sm py-1.5 border-b last:border-b-0",children:(0,a.jsxs)("div",{className:"flex justify-between items-start gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("p",{className:"font-medium truncate",children:e.customerEmail||"Order #".concat(null!==(t=e.orderId)&&void 0!==t?t:e.id)}),e.customerName&&(0,a.jsx)("p",{className:"text-xs text-gray-600 truncate",children:e.customerName}),(null===(s=e.items)||void 0===s?void 0:s.length)>0&&(0,a.jsx)("p",{className:"text-xs text-gray-500 truncate",children:e.items.map(e=>"".concat(e.productName).concat(e.quantity>1?" \xd7".concat(e.quantity):"")).join(", ")})]}),(0,a.jsxs)("div",{className:"text-right whitespace-nowrap",children:[(0,a.jsxs)("p",{className:"font-semibold text-green-600",children:["€",Number(e.amount||0).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})]}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:new Date(e.createdAt).toLocaleDateString()})]})]})},e.id)})})},"content")})]},e.key)})}):(0,a.jsxs)("p",{className:"text-sm text-gray-500 px-3 py-4 text-center",children:[d("admin.modal.monthlyRevenue"),": 0"]})})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.topProducts")}),(0,a.jsx)("div",{className:"space-y-2",children:null===(s=h.topProducts)||void 0===s?void 0:s.slice(0,5).map(e=>(0,a.jsxs)("div",{className:"flex justify-between items-center p-3 bg-gray-50 rounded-lg",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:e.name}),(0,a.jsxs)("p",{className:"text-xs text-gray-500",children:[e.orders_count," ",d("admin.modal.orders")]})]}),(0,a.jsxs)("span",{className:"font-bold text-green-600",children:["$",parseFloat(e.total_revenue).toLocaleStr
1ing()]})]},e.id))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.revenueByType")}),(0,a.jsx)("div",{className:"space-y-2",children:null===(t=h.revenueByType)||void 0===t?void 0:t.map(e=>(0,a.jsxs)("div",{className:"flex justify-between items-center p-3 bg-gray-50 rounded-lg",children:[(0,a.jsx)("span",{className:"font-medium capitalize",children:e.type}),(0,a.jsxs)("span",{className:"font-bold text-green-600",children:["$",parseFloat(e.total_revenue).toLocaleString()]})]},e.type))})]})]});case"orders":return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.orderStatus")}),(0,a.jsx)("div",{className:"grid grid-cols-2 gap-3",children:null===(i=h.orderStats)||void 0===i?void 0:i.map(e=>(0,a.jsxs)("div",{className:"bg-gray-50 rounded-lg p-3",children:[(0,a.jsx)("p",{className:"text-sm text-gray-600 capitalize",children:e.status}),(0,a.jsx)("p",{className:"text-2xl font-bold",children:e.count})]},e.status))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.recentOrders")}),(0,a.jsx)("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:null===(l=h.recentOrders)||void 0===l?void 0:l.slice(0,10).map(e=>(0,a.jsx)("div",{className:"border rounded-lg p-3",children:(0,a.jsxs)("div",{className:"flex justify-between items-start",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:e.orderNumber}),(0,a.jsx)("p",{className:"text-sm text-gray-600",children:e.userEmail}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:new Date(e.createdAt).toLocaleDateString()})]}),(0,a.jsxs)("div",{className:"text-right",children:[(0,a.jsxs)("p",{className:"font-bold",children:["$",e.total]}),(0,a.jsx)("span",{className:"inline-block px-2 py-1 text-xs rounded-full ".concat("completed"===e.status?"bg-green-100 text-green-800":"pending"===e.status?"bg-yellow-100 text-yellow-800":"bg-gray-100 text-gray-800"),children:e.status})]})]})},e.id))})]})]});case"products":return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.productsOverview")}),(0,a.jsx)("div",{className:"grid grid-cols-2 gap-3",children:null===(n=h.productStats)||void 0===n?void 0:n.map(e=>(0,a.jsxs)("div",{className:"bg-gray-50 rounded-lg p-3",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-600",children:[e.type," (",e.status,")"]}),(0,a.jsx)("p",{className:"text-2xl font-bold",children:e.count})]},"".concat(e.type,"-").concat(e.status)))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.mostPurchased")}),(0,a.jsx)("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:null===(m=h.products)||void 0===m?void 0:m.map(e=>(0,a.jsx)("div",{className:"border rounded-lg p-3",children:(0,a.jsxs)("div",{className:"flex justify-between items-start",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:e.name}),(0,a.jsxs)("p",{className:"text-sm text-gray-600 capitalize",children:[e.type," - ",e.status]}),(0,a.jsxs)("p",{className:"text-xs text-gray-500",children:[e.active_users," ",d("admin.modal.activeUsers")," | ",e.total_orders," ",d("admin.modal.orders")]})]}),(0,a.jsx)("div",{className:"text-right",children:(0,a.jsxs)("p",{className:"font-bold",children:["$",e.price]})})]})},e.id))})]})]});case"users":return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.userGrowth")}),(0,a.jsx)("div",{className:"bg-gray-50 rounded-lg p-2",children:(null===(x=h.userGrowth)||void 0===x?void 0:x.length)?(0,a.jsx)("div",{className:"space-y-1 max-h-96 overflow-y-auto",children:h.userGrowth.map(e=>{var s;let t=p===e.key;return(0,a.jsxs)("div",{className:"bg-white rounded-md border",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>j(t?null:e.key),className:"w-full flex justify-between items-center px-3 py-2 hover:bg-gray-50 transition-colors",children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm font-medium",children:[(0,a.jsx)(f.E.span,{animate:{rotate:t?0:-90},transition:{duration:.18},className:"inline-flex",children:(0,a.jsx)(o.Z,{className:"w-4 h-4 text-gray-500"})}),e.month]}),(0,a.jsxs)("span",{className:"text-sm font-bold",children:[e.count," ",d("admin.modal.newUsers")]})]}),(0,a.jsx)(w.M,{initial:!1,children:t&&(0,a.jsx)(f.E.div,{initial:{height:0,opacity:0}
1,animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.22,ease:"easeOut"},className:"overflow-hidden",children:(0,a.jsx)("div",{className:"px-3 pb-3 pt-1 space-y-1.5 border-t",children:null===(s=e.users)||void 0===s?void 0:s.map(e=>(0,a.jsxs)("div",{className:"flex justify-between items-center text-sm py-1.5 border-b last:border-b-0",children:[(0,a.jsxs)("div",{className:"min-w-0 pr-3",children:[(0,a.jsx)("p",{className:"font-medium truncate",children:e.email}),e.name&&(0,a.jsx)("p",{className:"text-xs text-gray-600 truncate",children:e.name})]}),(0,a.jsx)("span",{className:"text-xs text-gray-500 whitespace-nowrap",children:new Date(e.createdAt).toLocaleDateString()})]},e.id))})},"content")})]},e.key)})}):(0,a.jsxs)("p",{className:"text-sm text-gray-500 px-3 py-4 text-center",children:[d("admin.modal.newUsers"),": 0"]})})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.topCountries")}),(0,a.jsx)("div",{className:"space-y-2",children:null===(u=h.usersByCountry)||void 0===u?void 0:u.map(e=>(0,a.jsxs)("div",{className:"flex justify-between items-center p-3 bg-gray-50 rounded-lg",children:[(0,a.jsx)("span",{className:"font-medium",children:e.country||d("admin.modal.notSpecified")}),(0,a.jsxs)("span",{className:"font-bold",children:[e.count," ",d("admin.modal.users")]})]},e.country))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-3",children:d("admin.modal.recentUsers")}),(0,a.jsx)("div",{className:"space-y-2 max-h-96 overflow-y-auto",children:null===(v=h.recentUsers)||void 0===v?void 0:v.slice(0,10).map(e=>(0,a.jsx)("div",{className:"border rounded-lg p-3",children:(0,a.jsxs)("div",{className:"flex justify-between items-start",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:e.email}),(0,a.jsx)("p",{className:"text-sm text-gray-600",children:e.name}),(0,a.jsxs)("p",{className:"text-xs text-gray-500",children:[d("admin.modal.joined")," ",new Date(e.createdAt).toLocaleDateString()]})]}),(0,a.jsx)("div",{className:"text-right",children:(0,a.jsxs)("p",{className:"text-sm font-medium",children:[e.productsCount," ",d("admin.modal.products")]})})]})},e.id))})]})]});default:return null}})()})]})})]})})};var Z=!0;s.default=(0,r.Q)(()=>{let{t:e}=(0,l.$G)("dashboard");(0,k.useRouter)();let[s,t]=(0,i.useState)(!1),[r,d]=(0,i.useState)(!0),[o,m]=(0,i.useState)({totalProducts:0,activeProducts:0,totalUsers:0,totalOrders:0,totalRevenue:0}),[w,Z]=(0,i.useState)({isOpen:!1,type:null,title:""});(0,i.useEffect)(()=>{_()},[]);let _=async()=>{try{let e=await fetch("".concat("https://pietropaciello.com/api","/admin/check-permission"),{credentials:"include"});e.ok&&(await e.json()).isAdmin?(t(!0),P()):(S.ZP.error("Admin access required"),window.location.href="/dashboard")}catch(e){S.ZP.error("Failed to verify admin access"),window.location.href="/dashboard"}finally{d(!1)}},P=async()=>{try{let e=await fetch("".concat("https://pietropaciello.com/api","/admin/dashboard"),{credentials:"include"});if(e.ok){let s=await e.json();m(s.stats||o)}}catch(e){}},E=s=>{Z({isOpen:!0,type:s,title:{revenue:e("admin.modal.revenueDetails"),orders:e("admin.modal.orderDetails"),products:e("admin.modal.productDetails"),users:e("admin.modal.userDetails")}[s]})};if(r)return(0,a.jsx)(n.Z,{children:(0,a.jsx)("div",{className:"flex items-center justify-center h-full py-12",children:(0,a.jsx)("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary-600"})})});if(!s)return null;let D=[{title:e("admin.actions.manageProducts.title"),description:e("admin.actions.manageProducts.description"),icon:x.Z,href:"/dashboard/admin/products-manage",color:"bg-blue-500",stats:e("admin.actions.manageProducts.stats",{count:o.totalProducts})},{title:e("admin.actions.manageUsers.title"),description:e("admin.actions.manageUsers.description"),icon:h.Z,href:"/dashboard/admin/users",color:"bg-green-500",stats:e("admin.actions.manageUsers.stats",{count:o.totalUsers})},{title:"User Products",description:"View all purchased products and expiry dates",icon:u.Z,href:"/dashboard/admin/user-products",color:"bg-
1amber-500",stats:"Manage access & expiry"},{title:e("admin.actions.invoicesReceipts.title"),description:e("admin.actions.invoicesReceipts.description"),icon:p.Z,href:"/dashboard/admin/invoices",color:"bg-purple-500",stats:e("admin.actions.invoicesReceipts.stats")},{title:e("admin.actions.companySettings.title"),description:e("admin.actions.companySettings.description"),icon:j.Z,href:"/dashboard/admin/company",color:"bg-orange-500",stats:e("admin.actions.companySettings.stats")},{title:e("admin.actions.ptaFinances.title"),description:e("admin.actions.ptaFinances.description"),icon:v.Z,href:"/dashboard/admin/finances",color:"bg-emerald-500",stats:e("admin.actions.ptaFinances.stats")}],O=[{label:e("admin.stats.totalRevenue"),value:"€".concat((o.totalRevenue||0).toLocaleString()),icon:v.Z,color:"text-green-600",onClick:()=>E("revenue"),hoverColor:"hover:bg-green-50"},{label:e("admin.stats.totalOrders"),value:o.totalOrders||0,icon:g.Z,color:"text-blue-600",onClick:()=>E("orders"),hoverColor:"hover:bg-blue-50"},{label:e("admin.stats.activeProducts"),value:o.activeProducts||0,icon:x.Z,color:"text-purple-600",onClick:()=>E("products"),hoverColor:"hover:bg-purple-50"},{label:e("admin.stats.totalUsers"),value:o.totalUsers||0,icon:h.Z,color:"text-orange-600",onClick:()=>E("users"),hoverColor:"hover:bg-orange-50"}];return(0,a.jsxs)(n.Z,{isAdmin:!0,children:[(0,a.jsxs)("div",{className:"p-6 lg:p-8",children:[(0,a.jsx)("div",{className:"mb-8",children:(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)(y.Z,{className:"w-8 h-8 text-primary-600 mr-3"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-3xl font-bold text-gray-900",children:e("admin.title")}),(0,a.jsx)("p",{className:"text-gray-600 mt-1",children:e("admin.subtitle")})]})]})}),(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:O.map((e,s)=>{let t=e.icon;return(0,a.jsxs)(f.E.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.3,delay:.1*s},className:"bg-white rounded-lg shadow p-6 cursor-pointer transition-all ".concat(e.hoverColor," hover:shadow-lg"),onClick:e.onClick,children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,a.jsx)(t,{className:"w-8 h-8 ".concat(e.color)}),(0,a.jsx)(N.Z,{className:"w-4 h-4 text-gray-400"})]}),(0,a.jsx)("p",{className:"text-sm text-gray-500 mb-1",children:e.label}),(0,a.jsx)("p",{className:"text-2xl font-bold text-gray-900",children:e.value})]},e.label)})}),(0,a.jsx)("div",{className:"grid md:grid-cols-2 lg:grid-cols-2 gap-6",children:D.map((e,s)=>{let t=e.icon;return(0,a.jsx)(f.E.div,{initial:{opacity:0,x:s%2==0?-20:20},animate:{opacity:1,x:0},transition:{duration:.5,delay:.2+.1*s},children:(0,a.jsx)(c(),{href:e.href,children:(0,a.jsx)("div",{className:"bg-white rounded-lg shadow hover:shadow-lg transition-shadow cursor-pointer p-6",children:(0,a.jsxs)("div",{className:"flex items-start",children:[(0,a.jsx)("div",{className:"p-3 rounded-lg ".concat(e.color," mr-4"),children:(0,a.jsx)(t,{className:"w-6 h-6 text-white"})}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold text-gray-900 mb-1",children:e.title}),(0,a.jsx)("p",{className:"text-sm text-gray-600 mb-2",children:e.description}),e.stats&&(0,a.jsx)("p",{className:"text-sm font-medium text-primary-600",children:e.stats})]}),(0,a.jsx)(b.Z,{className:"w-5 h-5 text-gray-400"})]})})})}
1,e.title)})})]}),(0,a.jsx)(C,{isOpen:w.isOpen,onClose:()=>{Z({isOpen:!1,type:null,title:""})},title:w.title,type:w.type})]})})}},function(e){e.O(0,[736,592,888,179],function(){return e(e.s=6293)}),_N_E=e.O()}]);

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.