PageSourceSearch

https://seedup.mx/assets/index-BNkJ-uqn.js

js seedup.mx collected 2026-10-09 17:55:01 UTC 7,915 bytes, 1 lines download raw bytes

1import{j as e}from"./ui-vendor-Dma9V5TI.js";import{r as t}from"./react-vendor-TFoVDxuw.js";import{a_ as F,aw as X,b1 as G,q as h,ax as q,ay as J,az as K,ag as o,ai as j,aG as U,aH as k,aI as R,aJ as L,aK as m,ap as x}from"./index-BKaMndoJ.js";import{T as Y,a as Q,b as M,c as n,d as W,e as c}from"./table-CugSk3AW.js";import{A as Z,a as ee,b as se,c as ae,d as te,e as ie,f as re,g as le}from"./alert-dialog-CAAaiM7Y.js";import{u as ne,a as ce,b as de,c as oe}from"./usePulsoCoupons-x8g1tHEh.js";import{T as xe}from"./ticket-DJJN9w7M.js";import{P as he}from"./plus-B-AzHlod.js";import{C as me}from"./copy-D8eNjBEg.js";import{a as ue,T as pe}from"./toggle-right-COUVDjnB.js";import{T as ge}from"./trash-2-DxZGZak8.js";import"./useMutation-DES6GBhf.js";function je(i=8){const u="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";let d="";for(let p=0;p<i;p++)d+=u.charAt(Math.floor(Math.random()*u.length));return d}function ve(i){return i?new Date(i).toLocaleDateString("es-MX",{day:"2-digit",month:"short",year:"numeric"}):"—"}function Pe(){const{data:i=[],isLoading:u}=ne(),d=ce(),p=de(),O=oe(),{toast:a}=F(),[$,v]=t.useState(!1),[r,C]=t.useState(null),[N,f]=t.useState(""),[y,T]=t.useState("percentage"),[b,_]=t.useState(""),[A,w]=t.useState(""),[E,S]=t.useState(""),[D,P]=t.useState("all"),B=()=>{f(""),T("percentage"),_(""),w(""),S(""),P("all")},H=async()=>{var l;if(!N.trim()||!b){a({title:"Error",description:"Código y valor del descuento son requeridos.",variant:"destructive"});return}const s={code:N.trim().toUpperCase(),discount_type:y,discount_value:Number(b),max_uses:A?Number(A):null,expires_at:E||null,applicable_plans:D==="all"?["A","B"]:[D]};try{await d.mutateAsync(s),a({title:"Cupón creado",description:`Código "${s.code}" creado exitosamente.`}),B(),v(!1)}catch(g){a({title:"Error al crear cupón",description:(l=g.message)!=null&&l.includes("duplicate")?"Ya existe un cupón con ese código.":g.message,variant:"destructive"})}},I=async s=>{try{await p.mutateAsync({id:s.id,is_active:!s.is_active}),a({title:s.is_active?"Cupón desactivado":"Cupón activado",description:`"${s.code}" ${s.is_active?"desactivado":"activado"}.`})}catch(l){a({title:"Error",description:l.message,variant:"destructive"})}},V=async()=>{if(r){try{await O.mutateAsync(r.id),a({title:"Cupón eliminado",description:`"${r.code}" fue eliminado.`})}catch(s){a({title:"Error",description:s.message,variant:"destructive"})}C(null)}},z=s=>{navigator.clipboard.writeText(s),a({title:"Código copiado",description:s})};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(xe,{className:"h-6 w-6"})," Cupones Pulso B2B"]}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"Gestiona los cupones de descuento para el checkout de Pulso B2B."})]}),e.jsxs(X,{open:$,onOpenChange:v,children:[e.jsx(G,{asChild:!0,children:e.jsxs(h,{onClick:()=>{B(),v(!0)},children:[e.jsx(he,{className:"h-4 w-4 mr-2"})," Crear Cupón"]})}),e.jsxs(q,{className:"sm:max-w-md",children:[e.jsx(J,{children:e.jsx(K,{children:"Nuevo Cupón"})}),e.jsxs("div",{className:"grid gap-4 py-2",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(o,{children:"Código"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(j,{placeholder:"DESCUENTO25",value:N,onChange:s=>f(s.target.value.toUpperCase()),className:"uppercase"}),e.jsx(h,{variant:"outline",size:"sm",onClick:()=>f(je()),children:"Auto"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(o,{children:"Tipo"}),e.jsxs(U,{value:y,onValueChange:s=>T(s),children:[e.jsx(k,{children:e.jsx(R,{})}),e.jsxs(L,{children:[e.jsx(m,{value:"percentage",children:"Porcentaje (%)"}),e.jsx(m,{value:"fixed",children:"Monto fijo ($)"})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(o,{children:"Valor"}),e.jsx(j,{type:"number",placeholder:y==="percentage"?"25":"500",value:b,onChange:s=>_(s.target.value),min:"0"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(o,{children:"Usos máximos"}
1),e.jsx(j,{type:"number",placeholder:"Ilimitado",value:A,onChange:s=>w(s.target.value),min:"1"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(o,{children:"Planes"}),e.jsxs(U,{value:D,onValueChange:P,children:[e.jsx(k,{children:e.jsx(R,{})}),e.jsxs(L,{children:[e.jsx(m,{value:"all",children:"Todos"}),e.jsx(m,{value:"A",children:"Solo PULSO B2B"}),e.jsx(m,{value:"B",children:"Solo RADAR 360"})]})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(o,{children:"Fecha de expiración (opcional)"}),e.jsx(j,{type:"datetime-local",value:E,onChange:s=>S(s.target.value)})]}),e.jsx(h,{onClick:H,disabled:d.isPending,className:"w-full mt-2",children:d.isPending?"Creando...":"Crear Cupón"})]})]})]})]}),u?e.jsx("div",{className:"flex justify-center py-12",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}):i.length===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground",children:'No hay cupones creados aún. Haz clic en "Crear Cupón" para comenzar.'}):e.jsx("div",{className:"border rounded-lg overflow-hidden",children:e.jsxs(Y,{children:[e.jsx(Q,{children:e.jsxs(M,{children:[e.jsx(n,{children:"Código"}),e.jsx(n,{children:"Descuento"}),e.jsx(n,{children:"Planes"}),e.jsx(n,{className:"text-center",children:"Usos"}),e.jsx(n,{children:"Expira"}),e.jsx(n,{className:"text-center",children:"Estado"}),e.jsx(n,{className:"text-right",children:"Acciones"})]})}),e.jsx(W,{children:i.map(s=>{const l=s.expires_at&&new Date(s.expires_at)<new Date,g=s.max_uses!==null&&s.current_uses>=s.max_uses;return e.jsxs(M,{className:s.is_active?"":"opacity-50",children:[e.jsx(c,{children:e.jsxs("button",{onClick:()=>z(s.code),className:"flex items-center gap-1.5 font-mono font-semibold hover:text-primary transition-colors",title:"Copiar código",children:[s.code,e.jsx(me,{className:"h-3.5 w-3.5 text-muted-foreground"})]})}),e.jsx(c,{children:s.discount_type==="percentage"?`${s.discount_value}%`:`$${Number(s.discount_value).toLocaleString("es-MX")} MXN`}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-1",children:[s.applicable_plans.includes("A")&&e.jsx(x,{variant:"outline",className:"text-xs",children:"PULSO"}),s.applicable_plans.includes("B")&&e.jsx(x,{variant:"outline",className:"text-xs",children:"RADAR"})]})}),e.jsxs(c,{className:"text-center",children:[s.current_uses," / ",s.max_uses??"∞"]}),e.jsx(c,{children:e.jsx("span",{className:l?"text-red-500":"",children:ve(s.expires_at)})}),e.jsx(c,{className:"text-center",children:s.is_active?l?e.jsx(x,{variant:"destructive",children:"Expirado"}):g?e.jsx(x,{variant:"secondary",children:"Agotado"}):e.jsx(x,{className:"bg-green-600",children:"Activo"}):e.jsx(x,{variant:"secondary",children:"Inactivo"})}),e.jsx(c,{children:e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[e.jsx(h,{variant:"ghost",size:"icon",onClick:()=>I(s),title:s.is_active?"Desactivar":"Activar",children:s.is_active?e.jsx(ue,{className:"h-4 w-4 text-green-600"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"})}),e.jsx(h,{variant:"ghost",size:"icon",onClick:()=>C(s),title:"Eliminar",children:e.jsx(ge,{className:"h-4 w-4 text-red-500"})})]})})]},s.id)})})]})}),e.jsx(Z,{open:!!r,onOpenChange:s=>!s&&C(null),children:e.jsxs(ee,{children:[e.jsxs(se,{children:[e.jsx(ae,{children:"¿Eliminar cupón?"}),e.jsxs(te,{children:["Esto eliminará permanentemente el cupón ",e.jsxs("strong",{children:['"',r==null?void 0:r.code,'"']}),". Esta acción no se puede deshacer."]})]}),e.jsxs(ie,{children:[e.jsx(re,{children:"Cancelar"}),e.jsx(le,{onClick:V,className:"bg-red-600 hover:bg-red-700",children:"Eliminar"})]})]})})]})}export{Pe 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.