PageSourceSearch

https://www.laparapharma.fr/assets/AdminCategories-DETUuWLS.js

js laparapharma.fr collected 2026-10-08 19:17:00 UTC 6,789 bytes, 4 lines download raw bytes

1import{j as e}from"./vendor-ui-DDEuK28x.js";import{r}from"./vendor-react-CHVEsUye.js";import{b as Q,u as T,c as C}from"./vendor-query-DhIlFTxI.js";import{u as k,D as B,r as O,B as n,t as G,v as R,w as V,I as q,x as J,y as U,z as $,G as W,H as X,J as E,K as F,L as P,C as Y,a as Z,b as ee,e as se,P as te,s as l}from"./app-0fHd0a0L.js";import{A as ae,a as re,T as ie,b as ne,c as le,d as oe,e as ce,f as de,g as ue,h as me}from"./alert-dialog-BixIFe1c.js";import{T as xe,a as he,b as _,c as o,d as je,e as c}from"./table-BHvjqvA4.js";import{P as ge}from"./plus-BSslw6oO.js";import"./vendor-supabase-CA_epuTA.js";import"./vendor-charts-CfeFnci7.js";import"./vendor-editor-CrAbYJJi.js";const Ae=()=>{const[L,m]=r.useState(!1),[i,b]=r.useState(null),[w,x]=r.useState(""),[D,d]=r.useState(""),[S,h]=r.useState(""),[y,j]=r.useState(""),{toast:a}=k(),g=Q(),{data:p,isLoading:z}=T({queryKey:["admin-categories"],queryFn:async()=>{const{data:s,error:t}=await l.from("categories").select(`
2          *,
3          author:authors(id, name, photo_url)
4        `).order("name");if(t)throw t;return s}}),{data:f}=T({queryKey:["admin-authors-dropdown"],queryFn:async()=>{const{data:s,error:t}=await l.from("authors").select("id, name, photo_url").order("name");if(t)throw t;return s}}),v=C({mutationFn:async s=>{const{error:t}=await l.from("categories").insert(s);if(t)throw t},onSuccess:()=>{g.invalidateQueries({queryKey:["admin-categories"]}),a({title:"Catégorie créée avec succès"}),u()},onError:s=>{a({title:"Erreur",description:s.message,variant:"destructive"})}}),N=C({mutationFn:async({id:s,...t})=>{const{error:A}=await l.from("categories").update(t).eq("id",s);if(A)throw A},onSuccess:()=>{g.invalidateQueries({queryKey:["admin-categories"]}),a({title:"Catégorie mise à jour"}),u()},onError:s=>{a({title:"Erreur",description:s.message,variant:"destructive"})}}),H=C({mutationFn:async s=>{const{error:t}=await l.from("categories").delete().eq("id",s);if(t)throw t},onSuccess:()=>{g.invalidateQueries({queryKey:["admin-categories"]}),a({title:"Catégorie supprimée"})},onError:s=>{a({title:"Erreur",description:s.message,variant:"destructive"})}}),u=()=>{x(""),d(""),h(""),j(""),b(null),m(!1)},I=s=>{b(s),x(s.name),d(s.slug),h(s.description||""),j(s.author_id||""),m(!0)},K=s=>{s.preventDefault();const t={name:w,slug:D,description:S,author_id:y||null};i?N.mutate({id:i.id,...t}):v.mutate(t)},M=s=>s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"");return e.jsxs("div",{className:"p-8",children:[e.jsxs("div",{className:"flex items-center justify-between mb-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Catégories"}),e.jsx("p",{className:"text-muted-foreground",children:"Gérez les catégories de votre blog."})]}),e.jsxs(B,{open:L,onOpenChange:s=>{m(s),s||u()},children:[e.jsx(O,{asChild:!0,children:e.jsxs(n,{className:"btn-primary",children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),"Nouvelle catégorie"]})}),e.jsxs(G,{children:[e.jsx(R,{children:e.jsx(V,{children:i?"Modifier la catégorie":"Nouvelle catégorie"})}),e.jsxs("form",{onSubmit:K,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium",children:"Nom"}),e.jsx(q,{value:w,onChange:s=>{x(s.target.value),i||d(M(s.target.value))},placeholder:"Nom de la catégorie",required:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium",children:"Slug"}),e.jsx(q,{value:D,onChange:s=>d(s.target.value),placeholder:"slug-de-la-categorie",required:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium",children:"Description"}),e.jsx(J,{value:S,onChange:s=>h(s.target.value),placeholder:"Description de la catégorie",rows:3})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium",children:"Auteur associé"}),e.jsxs(U,{value:y||"none",onValueChange:s=>j(s==="none"?"":s),children:[e.jsx($,{children:e.jsx(W,{placeholder:"Sélectionner un auteur"})}),e.jsxs(X,{children:[e.jsx(E,{value:"none",children:"Aucun auteur"}),f==null?void 0:f.map(s=>e.jsx(E,{value:s.id,children:e.jsxs("div",{className:"flex items-center gap-2",children:[s.photo_url?e.jsx("img",{src:s.photo_url,alt:"",className:"w-5 h-5 rounded-full object-cover"}):e.jsx(F,{className:"w-5 h-5 text-muted-foreground"}),s.name]})},s.id))]})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"L'auteur sera affiché sur tous les articles de cette catégorie."})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(n,{type:"button",variant:"outline",onClick:u,children:"Annuler"}),e.jsxs(n,{type:"submit",disabled:v.isPending||N.isPending,children:[(v.isPending||N.isPending)&&e.jsx(P,{className:"w-4 h-4 mr-2 animate-spin"}),i?"Mettre à jour":"Créer"]})]})]})]})]})]}),e.jsxs(Y,{children:[e.jsx(Z,{children:e.jsx(ee,{children:"Liste des catégories"})}),e.jsx(se,{children:z?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(P,{className:"w-8 h-8 animate-spin text-muted-foreground"})}):p&&p.length>0?e.jsxs(xe,{children:[e.jsx(he,{children:e.jsxs(_,{children:[e.jsx(o,{children:"Nom"}),e.jsx(o,{children:"Slug"}),e.jsx(o,{children:"Auteur"}),e.jsx(o,{children:"Description"}),e.jsx(o,{className:"w-[100px]",children:"Actions"})]})}),e.jsx(je,{children:p.map(s=>e.jsxs(_,{children:[e.jsx(c,{className:"font-medium",children:s.name}),e.jsx(c,{className:"text-muted-foreground",children:s.slug}),e.jsx(c,{children:s.author?e.jsxs("div",{className:"flex items-center gap-2",children:[s.author.photo_url?e.jsx("img",{src:s.author.photo_url,alt:"",className:"w-6 h-6 rounded-full object-cover"}):e.jsx(F,{className:"w-6 h-6 text-muted-foreground"}),e.jsx("span",{className:"text-sm",children:s.author.name})]}):e.jsx("span",{className:"text-muted-foreground text-sm",children:"Non assigné"})}),e.jsx(c,{className:"max-w-xs truncate",children:s.description||"-"}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-1",children:[e.jsx(n,{variant:"ghost",size:"icon",onClick:()=>I(s),children:e.jsx(te,{className:"w-4 h-4"})}),e.jsxs(ae,{children:[e.jsx(re,{asChild:!0,children:e.jsx(n,{variant:"ghost",size:"icon",className:"text-destructive hover:text-destructive",children:e.jsx(ie,{className:"w-4 h-4"})})}),e.jsxs(ne,{children:[e.jsxs(le,{children:[e.jsx(oe,{children:"Supprimer cette catégorie ?"}),e.jsxs(ce,{children:['Cette action est irréversible. La catégorie "',s.name,'" sera définitivement supprimée.']})]}),e.jsxs(de,{children:[e.jsx(ue,{children:"Annuler"}),e.jsx(me,{onClick:()=>H.mutate(s.id),children:"Supprimer"})]})]})]})]})})]},s.id))})]}):e.jsx("p",{className:"text-center text-muted-foreground py-8",children:"Aucune catégorie pour le moment."})})]})]})};export{Ae as default};

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.