1import{a3 as w,F as b,r as _,P as j,ab as y,j as r,i as q,o as C,p as g,l as S,B as u,s as n}from"./index-Bj3g7Z6n.js";import{S as F,a as N,b as K,c as Q,d as M}from"./select-B3ESPlDy.js";import{A}from"./arrow-up-1i67e8Gi.js";import{A as T}from"./arrow-down-fi36MAqh.js";import{T as k}from"./trash-2-C3_qP8oE.js";import"./index-dP3aIPNJ.js";import"./chevron-down-B1MXwv-_.js";import"./chevron-up--nB-FXHv.js";const H=()=>{const{toast:c}=w(),i=b(),[d,h]=_.useState(""),{data:m}=j({queryKey:["retailers"],queryFn:async()=>{const{data:e,error:a}=await n.from("retailers").select("*").order("name");if(a)throw a;return e}}),{data:t}=j({queryKey:["featured-beauty-retailers-admin"],queryFn:async()=>{const{data:e,error:a}=await n.from("featured_beauty_retailers").select(` 2 *, 3 retailers ( 4 id, 5 name, 6 logo_url 7 ) 8 `).order("sort_order");if(a)throw a;return e}}),p=y({mutationFn:async e=>{const a=(t==null?void 0:t.reduce((o,l)=>Math.max(o,l.sort_order),-1))??-1,{error:s}=await n.from("featured_beauty_retailers").insert({retailer_id:e,sort_order:a+1,is_active:!0});if(s)throw s},onSuccess:()=>{i.invalidateQueries({queryKey:["featured-beauty-retailers-admin"]}),i.invalidateQueries({queryKey:["featured-beauty-retailers"]}),h(""),c({title:"Featured retailer added successfully"})},onError:()=>{c({title:"Error adding featured retailer",variant:"destructive"})}}),v=y({mutationFn:async e=>{const{error:a}=await n.from("featured_beauty_retailers").delete().eq("id",e);if(a)throw a},onSuccess:()=>{i.invalidateQueries({queryKey:["featured-beauty-retailers-admin"]}),i.invalidateQueries({queryKey:["featured-beauty-retailers"]}),c({title:"Featured retailer removed"})}}),f=y({mutationFn:async({id:e,newOrder:a})=>{const{error:s}=await n.from("featured_beauty_retailers").update({sort_order:a}).eq("id",e);if(s)throw s},onSuccess:()=>{i.invalidateQueries({queryKey:["featured-beauty-retailers-admin"]}),i.invalidateQueries({queryKey:["featured-beauty-retailers"]})}}),x=(e,a)=>{if(!t)return;const s=a==="up"?e-1:e+1;if(s<0||s>=t.length)return;const o=t[e],l=t[s];f.mutate({id:o.id,newOrder:l.sort_order}),f.mutate({id:l.id,newOrder:o.sort_order})};return r.jsxs(q,{children:[r.jsx(C,{children:r.jsx(g,{children:"Featured Beauty Retailers"})}),r.jsxs(S,{className:"space-y-4",children:[r.jsxs("div",{className:"flex gap-2",children:[r.jsxs(F,{value:d,onValueChange:h,children:[r.jsx(N,{children:r.jsx(K,{placeholder:"Select retailer"})}),r.jsx(Q,{children:m==null?void 0:m.map(e=>r.jsx(M,{value:e.id,children:e.name},e.id))})]}),r.jsx(u,{onClick:()=>d&&p.mutate(d),disabled:!d||p.isPending,children:"Add"})]}),r.jsx("div",{className:"space-y-2",children:t==null?void 0:t.map((e,a)=>{var s;return r.jsxs("div",{className:"flex items-center gap-2 p-2 border rounded",children:[r.jsx("div",{className:"flex-1",children:(s=e.retailers)==null?void 0:s.name}),r.jsxs("div",{className:"flex gap-1",children:[r.jsx(u,{size:"sm",variant:"outline",onClick:()=>x(a,"up"),disabled:a===0,children:r.jsx(A,{className:"h-4 w-4"})}),r.jsx(u,{size:"sm",variant:"outline",onClick:()=>x(a,"down"),disabled:a===((t==null?void 0:t.length)??0)-1,children:r.jsx(T,{className:"h-4 w-4"})}),r.jsx(u,{size:"sm",variant:"destructive",onClick:()=>v.mutate(e.id),children:r.jsx(k,{className:"h-4 w-4"})})]})]},e.id)})})]})]})};export{H as FeaturedBeautyRetailersManagement};
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.