Files
Compagnon-du-Lagon---Marama/deploy/.next/static/chunks/app/admin/page-be00d3b5e7fb599b.js
syoul b10d9c515b Simplification complète de l'app - Suppression admin/WiFi/bungalow
- Suppression de toute la partie admin (routes, composants, API)
- Suppression du WiFi et du numéro de bungalow
- Simplification de l'accueil (logo, météo, message statique)
- App 100% statique maintenant
- Redirection simple vers /accueil
- Nettoyage des hooks et types inutilisés
2025-11-23 19:22:34 +01:00

1 line
17 KiB
JavaScript

(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3],{3207:function(e,r,a){Promise.resolve().then(a.bind(a,5176))},5176:function(e,r,a){"use strict";a.r(r),a.d(r,{default:function(){return j}});var t=a(7437),s=a(2265),n=a(9376),l=a(7692),i=a(2869),o=a(7683);function c(e){let{children:r}=e,a=(0,n.useRouter)();return(0,t.jsxs)("div",{className:"min-h-screen bg-background dark:bg-background-dark",children:[(0,t.jsx)("header",{className:"bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800 shadow-sm",children:(0,t.jsxs)("div",{className:"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between",children:[(0,t.jsx)("h1",{className:"text-xl font-bold text-primary dark:text-primary",children:"Administration"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(o.T,{}),(0,t.jsxs)(i.z,{variant:"outline",size:"sm",onClick:()=>{localStorage.removeItem("adminPassword"),a.push("/admin/login")},className:"dark:border-gray-700 dark:text-gray-300",children:[(0,t.jsx)(l.Z,{className:"h-4 w-4 mr-2"}),"D\xe9connexion"]})]})]})}),(0,t.jsx)("main",{className:"max-w-4xl mx-auto px-4 py-6",children:r})]})}var d=a(6070),u=a(5398),m=a(401),x=a(8867);function p(e){let{url:r,size:a=200}=e,[n,l]=(0,s.useState)(!1),o=async()=>{try{await navigator.clipboard.writeText(r),l(!0),alert("✅ Lien copi\xe9 !\n\n".concat(r,"\n\nVous pouvez maintenant le coller (Ctrl+V) pour le partager avec votre client.")),setTimeout(()=>l(!1),3e3)}catch(a){console.error("Erreur lors de la copie:",a);let e=document.createElement("textarea");e.value=r,e.style.position="fixed",e.style.left="-999999px",document.body.appendChild(e),e.select();try{document.execCommand("copy")?(l(!0),alert("✅ Lien copi\xe9 !\n\n".concat(r,"\n\nVous pouvez maintenant le coller (Ctrl+V) pour le partager avec votre client.")),setTimeout(()=>l(!1),3e3)):alert("Copiez ce lien manuellement:\n\n".concat(r))}catch(e){alert("Copiez ce lien manuellement:\n\n".concat(r))}document.body.removeChild(e)}};return(0,t.jsxs)("div",{className:"flex flex-col items-center gap-4 p-6 bg-white rounded-2xl border border-gray-200",children:[(0,t.jsx)(u.t,{value:r,size:a,level:"H"}),(0,t.jsxs)("div",{className:"w-full space-y-3",children:[(0,t.jsx)("p",{className:"text-sm font-medium text-gray-700",children:"Lien unique :"}),(0,t.jsx)("textarea",{readOnly:!0,value:r,onClick:e=>e.currentTarget.select(),onFocus:e=>e.currentTarget.select(),className:"w-full p-3 text-sm font-mono text-primary bg-secondary border-2 border-primary rounded-lg resize-none",rows:3,style:{cursor:"text"}}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(i.z,{size:"sm",onClick:o,className:"flex-1 ".concat(n?"bg-green-600 hover:bg-green-700":""),children:n?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(m.Z,{className:"h-4 w-4 mr-2"}),"Copi\xe9 !"]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(x.Z,{className:"h-4 w-4 mr-2"}),"Copier"]})}),(0,t.jsx)(i.z,{size:"sm",variant:"outline",onClick:()=>{let e=document.querySelector("textarea[readonly]");e&&e.select()},className:"flex-1",children:"S\xe9lectionner"})]}),(0,t.jsx)("p",{className:"text-xs text-gray-500 text-center",children:"\uD83D\uDCA1 Cliquez sur le lien pour le s\xe9lectionner, puis Ctrl+C pour copier"})]})]})}function h(e){let{client:r,onSuccess:a,onCancel:n}=e,[l,o]=(0,s.useState)({email:(null==r?void 0:r.email)||"",bungalowNumber:(null==r?void 0:r.bungalowNumber)||"",wifiName:(null==r?void 0:r.wifiName)||"Lagon-WiFi",wifiPassword:(null==r?void 0:r.wifiPassword)||"",gerantMessage:(null==r?void 0:r.gerantMessage)||"Bienvenue dans notre pension de famille !"}),[c,u]=(0,s.useState)(!1),[h,g]=(0,s.useState)(null),[f,y]=(0,s.useState)(r||null),[b,v]=(0,s.useState)(!1),j=async e=>{e.preventDefault(),u(!0),g(null);try{let e=localStorage.getItem("adminPassword")||"",t=r?"/api/admin/clients/".concat(r.id):"/api/admin/clients",s=await fetch(t,{method:r?"PUT":"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(l)});if(!s.ok){let e=await s.json();throw Error(e.error||"Erreur lors de la sauvegarde")}let n=await s.json();y(n),a()}catch(e){g(e.message)}finally{u(!1)}},N=()=>{if(!f)return"";let e=window.location.origin;return"".concat(e,"/accueil?token=").concat(f.token)},w=async()=>{let e=N();try{await navigator.clipboard.writeText(e),v(!0),alert("✅ Lien copi\xe9 !\n\n".concat(e,"\n\nVous pouvez maintenant le coller (Ctrl+V) pour le partager avec votre client.")),setTimeout(()=>v(!1),3e3)}catch(a){console.error("Erreur lors de la copie:",a);let r=document.createElement("textarea");r.value=e,r.style.position="fixed",r.style.left="-999999px",document.body.appendChild(r),r.select();try{document.execCommand("copy")?(v(!0),alert("✅ Lien copi\xe9 !\n\n".concat(e,"\n\nVous pouvez maintenant le coller (Ctrl+V) pour le partager avec votre client.")),setTimeout(()=>v(!1),3e3)):alert("❌ Copie automatique non support\xe9e.\n\nVeuillez copier manuellement le lien:\n\n".concat(e))}catch(r){alert("❌ Copie automatique non support\xe9e.\n\nVeuillez copier manuellement le lien:\n\n".concat(e))}document.body.removeChild(r)}};return(0,t.jsxs)(d.Zb,{children:[(0,t.jsx)(d.Ol,{children:(0,t.jsx)(d.ll,{children:r?"Modifier le client":"Nouveau client"})}),(0,t.jsxs)(d.aY,{children:[(0,t.jsxs)("form",{onSubmit:j,className:"space-y-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Email *"}),(0,t.jsx)("input",{type:"email",required:!0,value:l.email,onChange:e=>o({...l,email:e.target.value}),disabled:!!r,className:"w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent disabled:bg-gray-100"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Num\xe9ro de bungalow *"}),(0,t.jsx)("input",{type:"text",required:!0,value:l.bungalowNumber,onChange:e=>o({...l,bungalowNumber:e.target.value}),className:"w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Nom du WiFi"}),(0,t.jsx)("input",{type:"text",value:l.wifiName,onChange:e=>o({...l,wifiName:e.target.value}),className:"w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Mot de passe WiFi"}),(0,t.jsx)("input",{type:"text",value:l.wifiPassword,onChange:e=>o({...l,wifiPassword:e.target.value}),className:"w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Message du g\xe9rant"}),(0,t.jsx)("textarea",{value:l.gerantMessage,onChange:e=>o({...l,gerantMessage:e.target.value}),rows:3,className:"w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent"})]}),h&&(0,t.jsx)("div",{className:"bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-xl text-sm",children:h}),(0,t.jsxs)("div",{className:"flex gap-3",children:[(0,t.jsx)(i.z,{type:"button",variant:"outline",onClick:n,className:"flex-1",children:"Annuler"}),(0,t.jsx)(i.z,{type:"submit",disabled:c,className:"flex-1",children:c?"Enregistrement...":r?"Modifier":"Cr\xe9er"})]})]}),f&&!r&&(0,t.jsxs)("div",{className:"mt-6 pt-6 border-t border-gray-200",children:[(0,t.jsx)("h3",{className:"font-semibold text-primary mb-3",children:"Client cr\xe9\xe9 avec succ\xe8s !"}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-sm font-medium text-gray-700 mb-2",children:"Lien unique :"}),(0,t.jsxs)("div",{className:"bg-secondary rounded-xl p-4 space-y-3",children:[(0,t.jsx)("textarea",{readOnly:!0,value:N(),onClick:e=>e.currentTarget.select(),onFocus:e=>e.currentTarget.select(),className:"w-full p-3 text-sm font-mono text-primary bg-white border-2 border-primary rounded-lg resize-none",rows:3,style:{cursor:"text"}}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(i.z,{size:"sm",onClick:w,className:"flex-1 ".concat(b?"bg-green-600 hover:bg-green-700":""),children:b?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(m.Z,{className:"h-4 w-4 mr-2"}),"Copi\xe9 !"]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(x.Z,{className:"h-4 w-4 mr-2"}),"Copier"]})}),(0,t.jsx)(i.z,{size:"sm",variant:"outline",onClick:()=>{let e=document.querySelector("textarea[readonly]");e&&e.select()},className:"flex-1",children:"S\xe9lectionner"})]})]}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"\uD83D\uDCA1 Cliquez sur le lien pour le s\xe9lectionner, puis Ctrl+C pour copier"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-sm text-gray-600 mb-2",children:"QR Code :"}),(0,t.jsx)(p,{url:N()})]})]})]})]})]})}var g=a(7404),f=a(5868),y=a(8930);function b(e){let{onEdit:r,onRefresh:a}=e,[n,l]=(0,s.useState)([]),[o,c]=(0,s.useState)(!0),[u,m]=(0,s.useState)(null),[h,b]=(0,s.useState)(null);(0,s.useEffect)(()=>{v()},[]);let v=async()=>{try{let e=localStorage.getItem("adminPassword")||"",r=await fetch("/api/admin/clients",{headers:{Authorization:"Bearer ".concat(e)}});if(r.ok){let e=await r.json();l(e)}else 404===r.status?console.warn("API non disponible en mode statique"):console.error("Erreur lors du chargement des clients:",r.status),l([])}catch(e){console.warn("API non disponible (mode statique/APK). Les fonctionnalit\xe9s admin n\xe9cessitent un serveur."),l([])}finally{c(!1)}},j=async e=>{if(confirm("\xcates-vous s\xfbr de vouloir supprimer ce client ?"))try{let r=localStorage.getItem("adminPassword")||"";(await fetch("/api/admin/clients/".concat(e),{method:"DELETE",headers:{Authorization:"Bearer ".concat(r)}})).ok&&(v(),a())}catch(e){console.error("Erreur lors de la suppression:",e)}},N=e=>{let r=window.location.origin;return"".concat(r,"/accueil?token=").concat(e)};return o?(0,t.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,t.jsx)("p",{className:"text-gray-600 dark:text-gray-400",children:"Chargement..."})}):0===n.length?(0,t.jsx)(d.Zb,{children:(0,t.jsxs)(d.aY,{className:"py-8 text-center space-y-4",children:[(0,t.jsx)("p",{className:"text-gray-600 dark:text-gray-400",children:"Aucun client pour le moment."}),(0,t.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-xl p-4 text-sm text-yellow-800 dark:text-yellow-300",children:[(0,t.jsx)("p",{className:"font-semibold mb-1",children:"⚠️ Mode hors ligne"}),(0,t.jsx)("p",{children:"L'application admin n\xe9cessite une connexion au serveur pour fonctionner. Les API routes ne sont pas disponibles en mode statique."})]})]})}):(0,t.jsx)("div",{className:"space-y-4",children:n.map(e=>(0,t.jsxs)(d.Zb,{children:[(0,t.jsx)(d.Ol,{children:(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)(d.ll,{className:"text-lg",children:e.email}),(0,t.jsxs)("p",{className:"text-sm text-gray-600 mt-1",children:["Bungalow ",e.bungalowNumber]})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(i.z,{size:"sm",variant:"outline",onClick:()=>{let r=N(e.token);navigator.clipboard.writeText(r)},children:(0,t.jsx)(x.Z,{className:"h-4 w-4"})}),(0,t.jsx)(i.z,{size:"sm",variant:"outline",onClick:()=>b(h===e.id?null:e.id),children:(0,t.jsx)(g.Z,{className:"h-4 w-4"})}),(0,t.jsx)(i.z,{size:"sm",variant:"outline",onClick:()=>r(e),children:(0,t.jsx)(f.Z,{className:"h-4 w-4"})}),(0,t.jsx)(i.z,{size:"sm",variant:"outline",onClick:()=>j(e.id),children:(0,t.jsx)(y.Z,{className:"h-4 w-4"})})]})]})}),(0,t.jsxs)(d.aY,{children:[(0,t.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"font-medium",children:"WiFi:"})," ",e.wifiName]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"font-medium",children:"Message:"})," ",e.gerantMessage.substring(0,50),e.gerantMessage.length>50?"...":""]}),(0,t.jsxs)("div",{className:"text-xs text-gray-500",children:["Cr\xe9\xe9 le ",new Date(e.createdAt).toLocaleDateString("fr-FR")]})]}),h===e.id&&(0,t.jsx)("div",{className:"mt-4 pt-4 border-t border-gray-200",children:(0,t.jsx)(p,{url:N(e.token),size:150})})]})]},e.id))})}var v=a(9397);function j(){let[e,r]=(0,s.useState)(!1),[a,l]=(0,s.useState)(),[o,d]=(0,s.useState)(0),u=(0,n.useRouter)();return(0,s.useEffect)(()=>{let e=localStorage.getItem("adminPassword");if(!e){u.push("/admin/login");return}fetch("/api/admin/clients",{headers:{Authorization:"Bearer ".concat(e)}}).then(e=>{e.ok||404===e.status||401!==e.status&&403!==e.status||(localStorage.removeItem("adminPassword"),u.push("/admin/login"))}).catch(()=>{})},[u]),(0,t.jsx)(c,{children:(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-primary",children:"Gestion des clients"}),!e&&(0,t.jsxs)(i.z,{onClick:()=>{l(void 0),r(!0)},children:[(0,t.jsx)(v.Z,{className:"h-4 w-4 mr-2"}),"Nouveau client"]})]}),e?(0,t.jsx)(h,{client:a,onSuccess:()=>{r(!1),l(void 0),d(e=>e+1)},onCancel:()=>{r(!1),l(void 0)}}):(0,t.jsx)(b,{onEdit:e=>{l(e),r(!0)},onRefresh:()=>d(e=>e+1)})]})})}},7683:function(e,r,a){"use strict";a.d(r,{T:function(){return c}});var t=a(7437),s=a(5922),n=a(5929),l=a(7226),i=a(2869),o=a(2265);function c(){let{theme:e,setTheme:r}=(0,s.F)(),[a,c]=(0,o.useState)(!1);return((0,o.useEffect)(()=>{c(!0)},[]),a)?(0,t.jsx)(i.z,{variant:"ghost",size:"sm",onClick:()=>r("dark"===e?"light":"dark"),className:"h-10 w-10 rounded-full hover:bg-secondary dark:hover:bg-gray-800 p-0","aria-label":"Changer de th\xe8me",children:"dark"===e?(0,t.jsx)(n.Z,{className:"h-5 w-5 text-primary dark:text-yellow-400"}):(0,t.jsx)(l.Z,{className:"h-5 w-5 text-primary dark:text-blue-300"})}):(0,t.jsx)(i.z,{variant:"ghost",size:"sm",className:"h-9 w-9 rounded-full p-0","aria-label":"Changer de th\xe8me",children:(0,t.jsx)(n.Z,{className:"h-5 w-5"})})}},2869:function(e,r,a){"use strict";a.d(r,{z:function(){return o}});var t=a(7437),s=a(2265),n=a(535),l=a(4508);let i=(0,n.j)("inline-flex items-center justify-center whitespace-nowrap rounded-xl text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90 dark:bg-primary dark:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 dark:bg-primary/20 dark:text-primary dark:hover:bg-primary/30",outline:"border-2 border-primary text-primary hover:bg-primary hover:text-white dark:border-primary dark:text-primary dark:hover:bg-primary dark:hover:text-white",ghost:"hover:bg-secondary hover:text-secondary-foreground dark:hover:bg-gray-800 dark:hover:text-gray-200"},size:{default:"h-12 px-6 py-3",sm:"h-10 px-4",lg:"h-14 px-8 text-lg"}},defaultVariants:{variant:"default",size:"default"}}),o=s.forwardRef((e,r)=>{let{className:a,variant:s,size:n,...o}=e;return(0,t.jsx)("button",{className:(0,l.cn)(i({variant:s,size:n,className:a})),ref:r,...o})});o.displayName="Button"},6070:function(e,r,a){"use strict";a.d(r,{Ol:function(){return i},Zb:function(){return l},aY:function(){return c},ll:function(){return o}});var t=a(7437),s=a(2265),n=a(4508);let l=s.forwardRef((e,r)=>{let{className:a,...s}=e;return(0,t.jsx)("div",{ref:r,className:(0,n.cn)("rounded-2xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 shadow-sm",a),...s})});l.displayName="Card";let i=s.forwardRef((e,r)=>{let{className:a,...s}=e;return(0,t.jsx)("div",{ref:r,className:(0,n.cn)("flex flex-col space-y-1.5 p-6",a),...s})});i.displayName="CardHeader";let o=s.forwardRef((e,r)=>{let{className:a,...s}=e;return(0,t.jsx)("h3",{ref:r,className:(0,n.cn)("text-xl font-semibold leading-none tracking-tight text-primary",a),...s})});o.displayName="CardTitle",s.forwardRef((e,r)=>{let{className:a,...s}=e;return(0,t.jsx)("p",{ref:r,className:(0,n.cn)("text-sm text-gray-600 dark:text-gray-400",a),...s})}).displayName="CardDescription";let c=s.forwardRef((e,r)=>{let{className:a,...s}=e;return(0,t.jsx)("div",{ref:r,className:(0,n.cn)("p-6 pt-0",a),...s})});c.displayName="CardContent",s.forwardRef((e,r)=>{let{className:a,...s}=e;return(0,t.jsx)("div",{ref:r,className:(0,n.cn)("flex items-center p-6 pt-0",a),...s})}).displayName="CardFooter"},4508:function(e,r,a){"use strict";a.d(r,{cn:function(){return n}});var t=a(1994),s=a(3335);function n(){for(var e=arguments.length,r=Array(e),a=0;a<e;a++)r[a]=arguments[a];return(0,s.m6)((0,t.W)(r))}}},function(e){e.O(0,[130,659,971,117,744],function(){return e(e.s=3207)}),_N_E=e.O()}]);