1 line
38 KiB
JavaScript
1 line
38 KiB
JavaScript
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67978,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(56322);let i={en:{title:"Invite a team member",subtitle:"They'll receive an email invitation to join your workspace.",firstName:"First name",lastName:"Last name",email:"Email address",role:"Role",cancel:"Cancel",sending:"Sending…",sendInvite:"Send invite →",failedInvite:"Failed to send invitation",more:e=>`+${e} more`,roleOptions:[{value:"MANAGER",label:"Manager",description:"Full fleet operations, without billing or team settings",permissions:["Vehicles","Reservations","CRM","Offers","Reports","License approval"]},{value:"AGENT",label:"Agent",description:"Day-to-day operations only",permissions:["View fleet","Reservations","Check-in / Check-out","View customers"]}]},fr:{title:"Inviter un membre",subtitle:"Cette personne recevra un e-mail d'invitation pour rejoindre votre espace de travail.",firstName:"Prénom",lastName:"Nom",email:"Adresse e-mail",role:"Rôle",cancel:"Annuler",sending:"Envoi…",sendInvite:"Envoyer l'invitation →",failedInvite:"Échec de l'envoi de l'invitation",more:e=>`+${e} de plus`,roleOptions:[{value:"MANAGER",label:"Manager",description:"Opérations complètes, sans accès à la facturation ni aux paramètres de l’équipe",permissions:["Véhicules","Réservations","CRM","Offres","Rapports","Validation des permis"]},{value:"AGENT",label:"Agent",description:"Opérations quotidiennes uniquement",permissions:["Voir la flotte","Réservations","Départ / Retour","Voir les clients"]}]},ar:{title:"دعوة عضو في الفريق",subtitle:"سيتلقى رسالة بريد إلكتروني للانضمام إلى مساحة العمل.",firstName:"الاسم الأول",lastName:"اسم العائلة",email:"البريد الإلكتروني",role:"الدور",cancel:"إلغاء",sending:"جارٍ الإرسال…",sendInvite:"← إرسال الدعوة",failedInvite:"فشل إرسال الدعوة",more:e=>`+${e} أكثر`,roleOptions:[{value:"MANAGER",label:"مدير",description:"صلاحيات تشغيل كاملة للأسطول، من دون الفوترة أو إعدادات الفريق",permissions:["المركبات","الحجوزات","CRM","العروض","التقارير","الموافقة على الرخص"]},{value:"AGENT",label:"وكيل",description:"العمليات اليومية فقط",permissions:["عرض الأسطول","الحجوزات","الاستلام / الإرجاع","عرض العملاء"]}]}};function n({open:e,onClose:s,onInvite:l}){let{language:c}=(0,r.useDashboardI18n)(),d=i[c],o="ar"===c,[m,x]=(0,a.useState)(""),[u,b]=(0,a.useState)(""),[v,g]=(0,a.useState)(""),[p,h]=(0,a.useState)("AGENT"),[f,k]=(0,a.useState)(!1),[z,N]=(0,a.useState)(null);(0,a.useEffect)(()=>{e||setTimeout(()=>{x(""),b(""),g(""),h("AGENT"),N(null)},200)},[e]);let j=async e=>{e.preventDefault(),N(null),k(!0);try{await l({firstName:m.trim(),lastName:u.trim(),email:v.trim(),role:p}),s()}catch(e){N(e.message??d.failedInvite)}finally{k(!1)}};return e?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-blue-950/30 backdrop-blur-sm",onClick:e=>{e.target===e.currentTarget&&s()},children:(0,t.jsxs)("div",{className:"bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-700 rounded-2xl shadow-xl w-full max-w-md mx-4 p-6",dir:o?"rtl":"ltr",children:[(0,t.jsxs)("div",{className:"mb-5",children:[(0,t.jsx)("h2",{className:"text-lg font-medium text-zinc-900 dark:text-white",children:d.title}),(0,t.jsx)("p",{className:"text-sm text-zinc-500 dark:text-zinc-400 mt-1",children:d.subtitle})]}),(0,t.jsxs)("form",{onSubmit:j,className:"space-y-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400 mb-1.5",children:d.firstName}),(0,t.jsx)("input",{type:"text",value:m,onChange:e=>x(e.target.value),placeholder:"Youssef",required:!0,className:"w-full px-3 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white placeholder:text-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-900 dark:focus:ring-white focus:ring-offset-0 focus:border-transparent"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400 mb-1.5",children:d.lastName}),(0,t.jsx)("input",{type:"text",value:u,onChange:e=>b(e.target.value),placeholder:"Benali",required:!0,className:"w-full px-3 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white placeholder:text-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-900 dark:focus:ring-white focus:border-transparent"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400 mb-1.5",children:d.email}),(0,t.jsx)("input",{type:"email",value:v,onChange:e=>g(e.target.value),placeholder:"youssef@yourcompany.com",required:!0,className:"w-full px-3 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white placeholder:text-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-900 dark:focus:ring-white focus:border-transparent"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400 mb-1.5",children:d.role}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-2",children:d.roleOptions.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>h(e.value),className:["text-left px-3 py-3 rounded-xl border transition-all",p===e.value?"border-zinc-900 dark:border-white bg-zinc-50 dark:bg-zinc-800":"border-zinc-200 dark:border-zinc-700 hover:border-zinc-300 dark:hover:border-zinc-600"].join(" "),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-zinc-900 dark:text-white",children:e.label}),p===e.value&&(0,t.jsx)("span",{className:"w-4 h-4 rounded-full bg-zinc-900 dark:bg-white flex items-center justify-center",children:(0,t.jsx)("svg",{className:"w-2.5 h-2.5 text-white dark:text-zinc-900",fill:"currentColor",viewBox:"0 0 12 12",children:(0,t.jsx)("path",{d:"M10 3L5 8.5 2 5.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})})]}),(0,t.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 leading-snug",children:e.description}),(0,t.jsxs)("div",{className:"mt-2 flex flex-wrap gap-1",children:[e.permissions.slice(0,3).map(e=>(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-700 text-zinc-500 dark:text-zinc-400",children:e},e)),e.permissions.length>3&&(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-700 text-zinc-500 dark:text-zinc-400",children:d.more(e.permissions.length-3)})]})]},e.value))})]}),z&&(0,t.jsx)("div",{className:"px-3 py-2.5 rounded-lg bg-red-50 dark:bg-red-950/30 border border-red-100 dark:border-red-900/50",children:(0,t.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:z})}),(0,t.jsxs)("div",{className:`flex gap-2 pt-2 border-t border-zinc-100 dark:border-zinc-800 ${o?"flex-row-reverse":""}`,children:[(0,t.jsx)("button",{type:"button",onClick:s,className:"flex-1 px-4 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg text-zinc-600 dark:text-zinc-400 hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-colors",children:d.cancel}),(0,t.jsx)("button",{type:"submit",disabled:f,className:"flex-1 px-4 py-2 text-sm bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:bg-zinc-800 dark:hover:bg-zinc-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:f?d.sending:d.sendInvite})]})]})]})}):null}let s={en:{pendingInvite:"Pending invite",deactivated:"Deactivated",role:"Role",cancel:"Cancel",saveChanges:"Save changes",saving:"Saving…",working:"Working…",deactivate:"Deactivate",reactivate:"Reactivate",remove:"Remove",removePermanently:"Remove permanently",confirmDeactivateTitle:"Deactivate this member?",confirmRemoveTitle:"Permanently remove this member?",confirmReactivateTitle:"Reactivate this member?",confirmDeactivateDesc:"They'll immediately lose dashboard access. You can reactivate anytime.",confirmRemoveDesc:"This will delete the employee record and revoke their dashboard access. This cannot be undone.",confirmReactivateDesc:"They'll regain dashboard access with their current role.",roleOptions:[{value:"MANAGER",label:"Manager",description:"Full ops — no billing"},{value:"AGENT",label:"Agent",description:"Reservations & check-ins"}]},fr:{pendingInvite:"Invitation en attente",deactivated:"Désactivé",role:"Rôle",cancel:"Annuler",saveChanges:"Enregistrer",saving:"Enregistrement…",working:"En cours…",deactivate:"Désactiver",reactivate:"Réactiver",remove:"Supprimer",removePermanently:"Supprimer définitivement",confirmDeactivateTitle:"Désactiver ce membre ?",confirmRemoveTitle:"Supprimer définitivement ce membre ?",confirmReactivateTitle:"Réactiver ce membre ?",confirmDeactivateDesc:"Il perdra immédiatement l'accès au tableau de bord. Vous pouvez le réactiver à tout moment.",confirmRemoveDesc:"Cela supprimera le compte et révoquera son accès au tableau de bord. Cette action est irréversible.",confirmReactivateDesc:"Il retrouvera l'accès au tableau de bord avec son rôle actuel.",roleOptions:[{value:"MANAGER",label:"Manager",description:"Opérations complètes — sans facturation"},{value:"AGENT",label:"Agent",description:"Réservations et enregistrements"}]},ar:{pendingInvite:"دعوة قيد الانتظار",deactivated:"معطل",role:"الدور",cancel:"إلغاء",saveChanges:"حفظ التغييرات",saving:"جارٍ الحفظ…",working:"جارٍ التنفيذ…",deactivate:"تعطيل",reactivate:"إعادة التفعيل",remove:"حذف",removePermanently:"حذف نهائياً",confirmDeactivateTitle:"تعطيل هذا العضو؟",confirmRemoveTitle:"حذف هذا العضو نهائياً؟",confirmReactivateTitle:"إعادة تفعيل هذا العضو؟",confirmDeactivateDesc:"سيفقد الوصول إلى لوحة التحكم فوراً. يمكنك إعادة التفعيل في أي وقت.",confirmRemoveDesc:"سيتم حذف سجل الموظف وإلغاء صلاحياته. هذا الإجراء لا يمكن التراجع عنه.",confirmReactivateDesc:"سيستعيد الوصول إلى لوحة التحكم بدوره الحالي.",roleOptions:[{value:"MANAGER",label:"مدير",description:"عمليات كاملة — بدون فوترة"},{value:"AGENT",label:"وكيل",description:"الحجوزات والاستلام"}]}};function l({member:e,open:i,onClose:n,onUpdateRole:c,onDeactivate:d,onReactivate:o,onRemove:m}){let{language:x}=(0,r.useDashboardI18n)(),u=s[x],b="ar"===x,[v,g]=(0,a.useState)("AGENT"),[p,h]=(0,a.useState)("idle"),[f,k]=(0,a.useState)(null),[z,N]=(0,a.useState)(null);if((0,a.useEffect)(()=>{e&&i&&(g("OWNER"===e.role?"MANAGER":e.role),h("idle"),k(null),N(null))},[e,i]),!i||!e)return null;let j="pending"===e.invitationStatus,y=e.isActive,w="idle"!==p,A=(e.firstName[0]??"")+(e.lastName[0]??""),R=async()=>{if(v===e.role)return void n();h("saving"),N(null);try{await c(e.id,v),n()}catch(e){N(e.message),h("idle")}},C=async()=>{h("deactivating"),N(null);try{await d(e.id),n()}catch(e){N(e.message),h("idle")}k(null)},M=async()=>{h("reactivating"),N(null);try{await o(e.id),n()}catch(e){N(e.message),h("idle")}k(null)},S=async()=>{h("removing"),N(null);try{await m(e.id),n()}catch(e){N(e.message),h("idle")}k(null)};return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-blue-950/30 backdrop-blur-sm",onClick:e=>{e.target!==e.currentTarget||w||n()},children:(0,t.jsxs)("div",{className:"bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-700 rounded-2xl shadow-xl w-full max-w-md mx-4 p-6",dir:b?"rtl":"ltr",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-5 pb-5 border-b border-zinc-100 dark:border-zinc-800",children:[(0,t.jsx)("div",{className:"w-10 h-10 rounded-full bg-zinc-100 dark:bg-zinc-800 flex items-center justify-center text-sm font-medium text-zinc-600 dark:text-zinc-300",children:A}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"font-medium text-zinc-900 dark:text-white text-sm",children:[e.firstName," ",e.lastName]}),(0,t.jsx)("p",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:e.email})]}),(0,t.jsxs)("div",{className:"ml-auto",children:[j&&(0,t.jsx)("span",{className:"text-xs px-2 py-1 rounded-full bg-orange-50 dark:bg-orange-950/30 text-orange-700 dark:text-orange-400 border border-orange-100 dark:border-orange-900/50",children:u.pendingInvite}),!j&&!y&&(0,t.jsx)("span",{className:"text-xs px-2 py-1 rounded-full bg-zinc-100 dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400",children:u.deactivated})]})]}),f&&(0,t.jsxs)("div",{className:"mb-4 px-4 py-3 rounded-xl border border-red-100 dark:border-red-900/50 bg-red-50 dark:bg-red-950/20",children:[(0,t.jsxs)("p",{className:"text-sm font-medium text-red-700 dark:text-red-400 mb-1",children:["deactivate"===f&&u.confirmDeactivateTitle,"remove"===f&&u.confirmRemoveTitle,"reactivate"===f&&u.confirmReactivateTitle]}),(0,t.jsxs)("p",{className:"text-xs text-red-600 dark:text-red-500 mb-3",children:["deactivate"===f&&u.confirmDeactivateDesc,"remove"===f&&u.confirmRemoveDesc,"reactivate"===f&&u.confirmReactivateDesc]}),(0,t.jsxs)("div",{className:`flex gap-2 ${b?"flex-row-reverse":""}`,children:[(0,t.jsx)("button",{onClick:()=>k(null),className:"flex-1 text-xs px-3 py-1.5 rounded-lg border border-zinc-200 dark:border-zinc-700 text-zinc-600 dark:text-zinc-400 hover:bg-zinc-50 dark:hover:bg-zinc-800",children:u.cancel}),(0,t.jsx)("button",{onClick:"deactivate"===f?C:"reactivate"===f?M:S,disabled:w,className:["flex-1 text-xs px-3 py-1.5 rounded-lg font-medium disabled:opacity-50","reactivate"===f?"bg-zinc-900 dark:bg-white text-white dark:text-zinc-900":"bg-red-600 text-white hover:bg-red-700"].join(" "),children:w?u.working:"deactivate"===f?u.deactivate:"reactivate"===f?u.reactivate:u.removePermanently})]})]}),!j&&y&&(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-zinc-500 dark:text-zinc-400 mb-2",children:u.role}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-2",children:u.roleOptions.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:["text-left px-3 py-2.5 rounded-xl border transition-all",v===e.value?"border-zinc-900 dark:border-white bg-zinc-50 dark:bg-zinc-800":"border-zinc-200 dark:border-zinc-700 hover:border-zinc-300 dark:hover:border-zinc-600"].join(" "),children:[(0,t.jsx)("div",{className:"text-sm font-medium text-zinc-900 dark:text-white",children:e.label}),(0,t.jsx)("div",{className:"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5",children:e.description})]},e.value))})]}),z&&(0,t.jsx)("div",{className:"mb-4 px-3 py-2 rounded-lg bg-red-50 dark:bg-red-950/30 border border-red-100 dark:border-red-900/50",children:(0,t.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:z})}),(0,t.jsxs)("div",{className:`flex items-center gap-2 pt-4 border-t border-zinc-100 dark:border-zinc-800 ${b?"flex-row-reverse":""}`,children:[(0,t.jsxs)("div",{className:`flex gap-2 ${b?"ml-auto":"mr-auto"}`,children:[y&&!j&&(0,t.jsx)("button",{onClick:()=>k("deactivate"),disabled:w,className:"text-xs px-3 py-1.5 rounded-lg border border-red-200 dark:border-red-900/50 text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-950/20 disabled:opacity-50 transition-colors",children:u.deactivate}),!y&&(0,t.jsx)("button",{onClick:()=>k("reactivate"),disabled:w,className:"text-xs px-3 py-1.5 rounded-lg border border-zinc-200 dark:border-zinc-700 text-zinc-600 dark:text-zinc-400 hover:bg-zinc-50 dark:hover:bg-zinc-800 disabled:opacity-50 transition-colors",children:u.reactivate}),(0,t.jsx)("button",{onClick:()=>k("remove"),disabled:w,className:"text-xs px-3 py-1.5 rounded-lg text-red-500 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-950/20 disabled:opacity-50 transition-colors",children:u.remove})]}),(0,t.jsx)("button",{onClick:n,disabled:w,className:"px-4 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg text-zinc-600 dark:text-zinc-400 hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-colors disabled:opacity-50",children:u.cancel}),y&&!j&&(0,t.jsx)("button",{onClick:R,disabled:w,className:"px-4 py-2 text-sm bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors disabled:opacity-50",children:"saving"===p?u.saving:u.saveChanges})]})]})})}let c=[{manager:"full",agent:"full"},{manager:"full",agent:"none"},{manager:"full",agent:"none"},{manager:"full",agent:"none"},{manager:"full",agent:"full"},{manager:"full",agent:"full"},{manager:"full",agent:"partial"},{manager:"full",agent:"full"},{manager:"full",agent:"full"},{manager:"full",agent:"full"},{manager:"full",agent:"partial"},{manager:"full",agent:"none"},{manager:"full",agent:"none"},{manager:"full",agent:"none"},{manager:"full",agent:"none"},{manager:"full",agent:"full"},{manager:"none",agent:"none"},{manager:"none",agent:"none"},{manager:"none",agent:"none"},{manager:"none",agent:"none"}],d={en:{heading:"Role permissions",subtitle:"What each role can do across the dashboard. Owners have full access to everything.",colFeature:"Feature",colManager:"Manager",colAgent:"Agent",full:"Full",noAccess:"No access",limited:"Limited",featureLabels:["View fleet & vehicles","Add / edit vehicles","Publish / unpublish vehicle","Upload vehicle photos","View reservations","Create reservations","Cancel reservations","Check-in / check-out","Damage inspection","Customer CRM — view","Customer CRM — edit","Approve driver licenses","Flag / blacklist customer","Offers & promotions","Analytics & reports","Contract & invoice PDF","Billing & subscription","Invite / remove staff","Brand & site settings","Payment settings"],agentNotes:["","","","","","","Own only","","","","Notes only","","","","","","","","",""]},fr:{heading:"Permissions par rôle",subtitle:"Ce que chaque rôle peut faire dans l’espace de travail. Les propriétaires ont un accès complet à l’ensemble du système.",colFeature:"Fonctionnalité",colManager:"Manager",colAgent:"Agent",full:"Complet",noAccess:"Aucun accès",limited:"Limité",featureLabels:["Voir la flotte et les véhicules","Ajouter / modifier des véhicules","Publier / dépublier un véhicule","Téléverser des photos de véhicule","Voir les réservations","Créer des réservations","Annuler des réservations","Départ / retour","Inspection des dommages","CRM clients — consultation","CRM clients — modification","Approuver les permis de conduire","Signaler / bloquer un client","Offres et promotions","Analyses et rapports","Contrat et facture PDF","Facturation et abonnement","Inviter / supprimer des membres de l’équipe","Paramètres marque et site","Paramètres de paiement"],agentNotes:["","","","","","","Les siennes uniquement","","","","Notes uniquement","","","","","","","","",""]},ar:{heading:"صلاحيات الأدوار",subtitle:"ما يمكن لكل دور القيام به داخل مساحة العمل. يملك المالكون صلاحية كاملة على كل شيء.",colFeature:"الميزة",colManager:"المدير",colAgent:"الوكيل",full:"كامل",noAccess:"لا وصول",limited:"محدود",featureLabels:["عرض الأسطول والمركبات","إضافة / تعديل المركبات","نشر / إلغاء نشر المركبة","رفع صور المركبة","عرض الحجوزات","إنشاء الحجوزات","إلغاء الحجوزات","الاستلام / الإرجاع","فحص الأضرار","إدارة العملاء — عرض","إدارة العملاء — تعديل","الموافقة على رخص القيادة","تمييز العميل / حظره","العروض والحملات الترويجية","التحليلات والتقارير","العقد والفاتورة بصيغة PDF","الفوترة والاشتراك","دعوة / إزالة الموظفين","إعدادات العلامة والموقع","إعدادات الدفع"],agentNotes:["","","","","","","حجوزاته فقط","","","","الملاحظات فقط","","","","","","","","",""]}};function o({access:e,label:a,limitedNote:r}){return"full"===e?(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("svg",{className:"w-3.5 h-3.5 text-green-600 dark:text-green-400 flex-shrink-0",fill:"none",viewBox:"0 0 14 14",children:(0,t.jsx)("path",{d:"M2.5 7L5.5 10L11.5 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),(0,t.jsx)("span",{className:"text-xs text-zinc-700 dark:text-zinc-300",children:a.full})]}):"partial"===e?(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("div",{className:"w-3.5 h-3.5 flex-shrink-0 flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-2.5 h-0.5 rounded bg-orange-500"})}),(0,t.jsx)("span",{className:"text-xs text-orange-700 dark:text-orange-400",children:r||a.limited})]}):(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("div",{className:"w-3.5 h-3.5 flex-shrink-0 flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-2 h-0.5 rounded bg-zinc-300 dark:bg-zinc-600"})}),(0,t.jsx)("span",{className:"text-xs text-zinc-400 dark:text-zinc-600",children:a.noAccess})]})}function m(){let{language:e}=(0,r.useDashboardI18n)(),a=d[e];return(0,t.jsxs)("div",{dir:"ar"===e?"rtl":"ltr",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)("h2",{className:"text-base font-medium text-zinc-900 dark:text-white",children:a.heading}),(0,t.jsx)("p",{className:"text-sm text-zinc-500 dark:text-zinc-400 mt-0.5",children:a.subtitle})]}),(0,t.jsxs)("div",{className:"border border-zinc-200 dark:border-zinc-700 rounded-xl overflow-hidden",children:[(0,t.jsxs)("div",{className:"grid grid-cols-[1fr_120px_120px] bg-zinc-50 dark:bg-zinc-800/50 border-b border-zinc-200 dark:border-zinc-700",children:[(0,t.jsx)("div",{className:"px-4 py-2.5 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide",children:a.colFeature}),(0,t.jsx)("div",{className:"px-4 py-2.5 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide border-l border-zinc-200 dark:border-zinc-700",children:a.colManager}),(0,t.jsx)("div",{className:"px-4 py-2.5 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide border-l border-zinc-200 dark:border-zinc-700",children:a.colAgent})]}),c.map((e,r)=>(0,t.jsxs)("div",{className:["grid grid-cols-[1fr_120px_120px]",r<c.length-1?"border-b border-zinc-100 dark:border-zinc-800":"",r%2==0?"":"bg-zinc-50/50 dark:bg-zinc-800/20"].join(" "),children:[(0,t.jsx)("div",{className:"px-4 py-2.5 text-xs text-zinc-600 dark:text-zinc-400",children:a.featureLabels[r]}),(0,t.jsx)("div",{className:"px-4 py-2.5 border-l border-zinc-100 dark:border-zinc-800",children:(0,t.jsx)(o,{access:e.manager,label:{full:a.full,noAccess:a.noAccess,limited:a.limited},limitedNote:e.managerNote??""})}),(0,t.jsx)("div",{className:"px-4 py-2.5 border-l border-zinc-100 dark:border-zinc-800",children:(0,t.jsx)(o,{access:e.agent,label:{full:a.full,noAccess:a.noAccess,limited:a.limited},limitedNote:a.agentNotes[r]??""})})]},r))]})]})}var x=e.i(94327);function u(e){return{...e,total:e.total+1,pending:e.pending+1}}function b(e,t,a){return e.map(e=>e.id===t?{...e,isActive:a}:e)}function v(e,t){return"deactivate"===t?{...e,active:e.active-1,inactive:e.inactive+1}:{...e,active:e.active+1,inactive:e.inactive-1}}let g=["bg-violet-100 dark:bg-violet-900/40 text-violet-700 dark:text-violet-300","bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300","bg-teal-100 dark:bg-teal-900/40 text-teal-700 dark:text-teal-300","bg-orange-100 dark:bg-orange-900/40 text-orange-700 dark:text-orange-300","bg-pink-100 dark:bg-pink-900/40 text-pink-700 dark:text-pink-300"],p={OWNER:{en:"Owner",fr:"Propriétaire",ar:"مالك"},MANAGER:{en:"Manager",fr:"Manager",ar:"مدير"},AGENT:{en:"Agent",fr:"Agent",ar:"وكيل"}};function h({role:e,language:a}){let r={OWNER:"bg-violet-50 dark:bg-violet-950/40 text-violet-700 dark:text-violet-300 border-violet-100 dark:border-violet-900/50",MANAGER:"bg-blue-50 dark:bg-blue-950/40 text-blue-700 dark:text-blue-300 border-blue-100 dark:border-blue-900/50",AGENT:"bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 border-zinc-200 dark:border-zinc-700"},i=p[e]?.[a]??e.charAt(0)+e.slice(1).toLowerCase();return(0,t.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-full border font-medium ${r[e]??r.AGENT}`,children:i})}function f({member:e,language:a}){return"pending"===e.invitationStatus?(0,t.jsx)("span",{className:"text-xs px-2 py-0.5 rounded-full border bg-orange-50 dark:bg-orange-950/30 text-orange-700 dark:text-orange-400 border-orange-100 dark:border-orange-900/50",children:"fr"===a?"Invitation en attente":"ar"===a?"دعوة قيد الانتظار":"Pending invite"}):e.isActive?(0,t.jsx)("span",{className:"text-xs px-2 py-0.5 rounded-full border bg-green-50 dark:bg-green-950/30 text-green-700 dark:text-green-400 border-green-100 dark:border-green-900/50",children:"fr"===a?"Actif":"ar"===a?"نشط":"Active"}):(0,t.jsx)("span",{className:"text-xs px-2 py-0.5 rounded-full border bg-zinc-100 dark:bg-zinc-800 text-zinc-500 dark:text-zinc-500 border-zinc-200 dark:border-zinc-700",children:"fr"===a?"Désactivé":"ar"===a?"معطل":"Deactivated"})}e.s(["default",0,function(){let{language:e}=(0,r.useDashboardI18n)(),i={en:{title:"Team",subtitle:"Manage your employees and their access levels",inviteMember:"Invite member",totalMembers:"Total members",active:"Active",pendingInvite:"Pending invite",deactivated:"Deactivated",search:"Search by name or email…",allRoles:"All roles",owner:"Owner",manager:"Manager",agent:"Agent",allStatuses:"All statuses",pending:"Pending",loadingTeam:"Loading team…",noMembers:"No members match your filters",member:"Member",role:"Role",status:"Status",lastActive:"Last active",manage:"Manage",inviteSent:"Invite sent to",roleUpdated:"Role updated",memberDeactivated:"Member deactivated",memberReactivated:"Member reactivated",memberRemoved:"Member removed",you:"(you)"},fr:{title:"Équipe",subtitle:"Gérez vos employés et leurs niveaux d'accès",inviteMember:"Inviter un membre",totalMembers:"Total membres",active:"Actif",pendingInvite:"Invitation en attente",deactivated:"Désactivé",search:"Rechercher par nom ou email…",allRoles:"Tous les rôles",owner:"Propriétaire",manager:"Manager",agent:"Agent",allStatuses:"Tous les statuts",pending:"En attente",loadingTeam:"Chargement de l'équipe…",noMembers:"Aucun membre ne correspond aux filtres",member:"Membre",role:"Rôle",status:"Statut",lastActive:"Dernière activité",manage:"Gérer",inviteSent:"Invitation envoyée à",roleUpdated:"Rôle mis à jour",memberDeactivated:"Membre désactivé",memberReactivated:"Membre réactivé",memberRemoved:"Membre supprimé",you:"(vous)"},ar:{title:"الفريق",subtitle:"إدارة الموظفين ومستويات الوصول الخاصة بهم",inviteMember:"دعوة عضو",totalMembers:"إجمالي الأعضاء",active:"نشط",pendingInvite:"دعوة قيد الانتظار",deactivated:"معطل",search:"ابحث بالاسم أو البريد الإلكتروني…",allRoles:"كل الأدوار",owner:"مالك",manager:"مدير",agent:"وكيل",allStatuses:"كل الحالات",pending:"قيد الانتظار",loadingTeam:"جارٍ تحميل الفريق…",noMembers:"لا يوجد أعضاء مطابقون للفلاتر",member:"العضو",role:"الدور",status:"الحالة",lastActive:"آخر نشاط",manage:"إدارة",inviteSent:"تم إرسال الدعوة إلى",roleUpdated:"تم تحديث الدور",memberDeactivated:"تم تعطيل العضو",memberReactivated:"تمت إعادة تفعيل العضو",memberRemoved:"تم حذف العضو",you:"(أنت)"}}[e],{members:s,stats:c,loading:d,error:o,invite:p,updateRole:k,deactivate:z,reactivate:N,remove:j}=function(){let[e,t]=(0,a.useState)([]),[r,i]=(0,a.useState)({total:0,active:0,pending:0,inactive:0}),[n,s]=(0,a.useState)(!0),[l,c]=(0,a.useState)(null),d=(0,a.useCallback)(async()=>{s(!0),c(null);try{let[e,a]=await Promise.all([(0,x.apiFetch)("/team"),(0,x.apiFetch)("/team/stats")]);t(e),i(a)}catch(e){c(e.message)}finally{s(!1)}},[]);(0,a.useEffect)(()=>{d()},[d]);let o=(0,a.useCallback)(async e=>{let a=await (0,x.apiFetch)("/team/invite",{method:"POST",body:JSON.stringify(e)});return t(e=>[...e,a.employee]),i(u),a},[]),m=(0,a.useCallback)(async(e,a)=>{let r=await (0,x.apiFetch)(`/team/${e}/role`,{method:"PATCH",body:JSON.stringify({role:a})});return t(t=>{var a;return a=r.role,t.map(t=>t.id===e?{...t,role:a}:t)}),r},[]),g=(0,a.useCallback)(async e=>{let a=await (0,x.apiFetch)(`/team/${e}/deactivate`,{method:"POST"});return t(t=>b(t,e,!1)),i(e=>v(e,"deactivate")),a},[]),p=(0,a.useCallback)(async e=>{let a=await (0,x.apiFetch)(`/team/${e}/reactivate`,{method:"POST"});return t(t=>b(t,e,!0)),i(e=>v(e,"reactivate")),a},[]),h=(0,a.useCallback)(async a=>{let n;await (0,x.apiFetch)(`/team/${a}`,{method:"DELETE"});let s=(n=e.find(e=>e.id===a),{members:e.filter(e=>e.id!==a),stats:{...r,total:r.total-!!n,active:n?.isActive?r.active-1:r.active,pending:n?.invitationStatus==="pending"?r.pending-1:r.pending,inactive:n?.isActive||n?.invitationStatus!=="accepted"?r.inactive:r.inactive-1}});t(s.members),i(s.stats)},[e,r]);return{members:e,stats:r,loading:n,error:l,refetch:d,invite:o,updateRole:m,deactivate:g,reactivate:p,remove:h}}(),[y,w]=(0,a.useState)(null),[A,R]=(0,a.useState)(""),[C,M]=(0,a.useState)(""),[S,T]=(0,a.useState)(""),[D,E]=(0,a.useState)(!1),[I,L]=(0,a.useState)(null),[O,P]=(0,a.useState)(null);(0,a.useEffect)(()=>{let e=!1;return(0,x.apiFetch)("/auth/employee/me").then(({employee:t})=>{e||w(t.id)}).catch(()=>{e||w(null)}),()=>{e=!0}},[]);let $=s.find(e=>e.id===y),G=$?.role==="OWNER";function F(e){P(e),setTimeout(()=>P(null),3e3)}let q=(0,a.useMemo)(()=>s.filter(e=>{let t=A.toLowerCase(),a=!t||`${e.firstName} ${e.lastName}`.toLowerCase().includes(t)||e.email.toLowerCase().includes(t),r=!C||e.role===C,i=!S||"active"===S&&e.isActive&&"accepted"===e.invitationStatus||"pending"===S&&"pending"===e.invitationStatus||"inactive"===S&&!e.isActive&&"accepted"===e.invitationStatus;return a&&r&&i}),[s,A,C,S]),W=async e=>{await p(e),F(`${i.inviteSent} ${e.email}`)},V=async(e,t)=>{await k(e,t),F(i.roleUpdated)},B=async e=>{await z(e),F(i.memberDeactivated)},U=async e=>{await N(e),F(i.memberReactivated)},J=async e=>{await j(e),F(i.memberRemoved)};return(0,t.jsxs)("div",{className:"max-w-5xl mx-auto py-8 px-4 sm:px-6",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between mb-6",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-2xl font-medium text-zinc-900 dark:text-white",children:i.title}),(0,t.jsx)("p",{className:"text-sm text-zinc-500 dark:text-zinc-400 mt-1",children:i.subtitle})]}),G&&(0,t.jsxs)("button",{onClick:()=>E(!0),className:"flex items-center gap-1.5 px-4 py-2 text-sm bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors",children:[(0,t.jsx)("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 16 16",children:(0,t.jsx)("path",{d:"M8 3v10M3 8h10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})}),i.inviteMember]})]}),(0,t.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-6",children:[{label:i.totalMembers,value:c.total},{label:i.active,value:c.active},{label:i.pendingInvite,value:c.pending},{label:i.deactivated,value:c.inactive}].map(e=>(0,t.jsxs)("div",{className:"bg-zinc-50 dark:bg-zinc-800/50 rounded-xl p-4 flex flex-col gap-1",children:[(0,t.jsx)("span",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:e.label}),(0,t.jsx)("span",{className:"text-2xl font-medium text-zinc-900 dark:text-white",children:e.value})]},e.label))}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 mb-4",children:[(0,t.jsxs)("div",{className:"relative flex-1 min-w-48",children:[(0,t.jsxs)("svg",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-zinc-400",fill:"none",viewBox:"0 0 14 14",children:[(0,t.jsx)("circle",{cx:"6",cy:"6",r:"4.5",stroke:"currentColor",strokeWidth:"1.2"}),(0,t.jsx)("path",{d:"M10 10L13 13",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]}),(0,t.jsx)("input",{type:"text",placeholder:i.search,value:A,onChange:e=>R(e.target.value),className:"w-full pl-8 pr-3 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-900 text-zinc-900 dark:text-white placeholder:text-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-900 dark:focus:ring-white focus:border-transparent"})]}),(0,t.jsxs)("select",{value:C,onChange:e=>M(e.target.value),className:"px-3 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-900 text-zinc-700 dark:text-zinc-300 focus:outline-none focus:ring-2 focus:ring-zinc-900 dark:focus:ring-white",children:[(0,t.jsx)("option",{value:"",children:i.allRoles}),(0,t.jsx)("option",{value:"OWNER",children:i.owner}),(0,t.jsx)("option",{value:"MANAGER",children:i.manager}),(0,t.jsx)("option",{value:"AGENT",children:i.agent})]}),(0,t.jsxs)("select",{value:S,onChange:e=>T(e.target.value),className:"px-3 py-2 text-sm border border-zinc-200 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-900 text-zinc-700 dark:text-zinc-300 focus:outline-none focus:ring-2 focus:ring-zinc-900 dark:focus:ring-white",children:[(0,t.jsx)("option",{value:"",children:i.allStatuses}),(0,t.jsx)("option",{value:"active",children:i.active}),(0,t.jsx)("option",{value:"pending",children:i.pending}),(0,t.jsx)("option",{value:"inactive",children:i.deactivated})]})]}),(0,t.jsx)("div",{className:"border border-zinc-200 dark:border-zinc-700 rounded-xl overflow-hidden mb-10",children:d?(0,t.jsxs)("div",{className:"py-16 flex flex-col items-center gap-2 text-zinc-400",children:[(0,t.jsx)("div",{className:"w-5 h-5 border-2 border-zinc-200 dark:border-zinc-700 border-t-zinc-500 rounded-full animate-spin"}),(0,t.jsx)("span",{className:"text-sm",children:i.loadingTeam})]}):o?(0,t.jsx)("div",{className:"py-12 text-center text-sm text-red-500",children:o}):0===q.length?(0,t.jsx)("div",{className:"py-16 text-center",children:(0,t.jsx)("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:i.noMembers})}):(0,t.jsxs)("table",{className:"w-full",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{className:"bg-zinc-50 dark:bg-zinc-800/50 border-b border-zinc-200 dark:border-zinc-700",children:[(0,t.jsx)("th",{className:"text-left px-4 py-3 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide",children:i.member}),(0,t.jsx)("th",{className:"text-left px-4 py-3 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide",children:i.role}),(0,t.jsx)("th",{className:"text-left px-4 py-3 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide",children:i.status}),(0,t.jsx)("th",{className:"text-left px-4 py-3 text-xs font-medium text-zinc-500 dark:text-zinc-400 uppercase tracking-wide hidden sm:table-cell",children:i.lastActive}),(0,t.jsx)("th",{className:"px-4 py-3"})]})}),(0,t.jsx)("tbody",{children:q.map(a=>(0,t.jsxs)("tr",{className:"border-b border-zinc-100 dark:border-zinc-800 last:border-0 hover:bg-zinc-50 dark:hover:bg-zinc-800/30 transition-colors",children:[(0,t.jsx)("td",{className:"px-4 py-3",children:(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:`w-8 h-8 rounded-full flex items-center justify-center text-xs font-medium flex-shrink-0 ${g[a.id.split("").reduce((e,t)=>e+t.charCodeAt(0),0)%g.length]}`,children:(a.firstName[0]??"")+(a.lastName[0]??"")}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-sm font-medium text-zinc-900 dark:text-white",children:[a.firstName," ",a.lastName,a.id===y&&(0,t.jsx)("span",{className:"ml-1.5 text-[10px] text-zinc-400",children:i.you})]}),(0,t.jsx)("div",{className:"text-xs text-zinc-500 dark:text-zinc-400",children:a.email})]})]})}),(0,t.jsx)("td",{className:"px-4 py-3",children:(0,t.jsx)(h,{role:a.role,language:e})}),(0,t.jsx)("td",{className:"px-4 py-3",children:(0,t.jsx)(f,{member:a,language:e})}),(0,t.jsx)("td",{className:"px-4 py-3 hidden sm:table-cell",children:(0,t.jsx)("span",{className:"text-xs text-zinc-400 dark:text-zinc-500",children:"pending"===a.invitationStatus?"—":function(e,t){if(!e)return"fr"===t?"Jamais":"ar"===t?"أبداً":"Never";let a=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(a<2)return"fr"===t?"À l'instant":"ar"===t?"الآن":"Just now";if(a<60)return"fr"===t?`il y a ${a} min`:"ar"===t?`منذ ${a} دقيقة`:`${a}m ago`;let r=Math.floor(a/60);if(r<24)return"fr"===t?`il y a ${r}h`:"ar"===t?`منذ ${r} ساعة`:`${r}h ago`;let i=Math.floor(r/24);return i<30?"fr"===t?`il y a ${i}j`:"ar"===t?`منذ ${i} يوم`:`${i}d ago`:new Date(e).toLocaleDateString("fr"===t?"fr":"ar"===t?"ar":"en",{month:"short",day:"numeric"})}(a.lastActiveAt,e)})}),(0,t.jsx)("td",{className:"px-4 py-3 text-right",children:G&&"OWNER"!==a.role&&(0,t.jsx)("button",{onClick:()=>L(a),className:"text-xs px-3 py-1.5 border border-zinc-200 dark:border-zinc-700 rounded-lg text-zinc-600 dark:text-zinc-400 hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-colors",children:i.manage})})]},a.id))})]})}),(0,t.jsx)(m,{}),(0,t.jsx)(n,{open:D,onClose:()=>E(!1),onInvite:W}),(0,t.jsx)(l,{member:I,open:!!I,onClose:()=>L(null),onUpdateRole:V,onDeactivate:B,onReactivate:U,onRemove:J}),O&&(0,t.jsxs)("div",{className:"fixed bottom-6 right-6 z-50 flex items-center gap-2 px-4 py-2.5 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-xl shadow-lg text-sm font-medium animate-in slide-in-from-bottom-2 duration-200",children:[(0,t.jsx)("svg",{className:"w-4 h-4 text-green-400 dark:text-green-600",fill:"none",viewBox:"0 0 16 16",children:(0,t.jsx)("path",{d:"M3 8L6.5 11.5L13 5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),O]})]})}],67978)}]); |