PageSourceSearch

https://www.ignislove.com/assets/email-CaLSrkqn.js

js ignislove.com collected 2026-10-08 17:53:17 UTC 32,797 bytes, 8 lines download raw bytes

1import{r as ee}from"./rolldown-runtime-CXHxssQy.js";import{f as se,l as ae}from"./vendor-core-DLV7unHF.js";import{b as K,n as b,r as E}from"./vendor-data-gP-SiX90.js";import{n as N}from"./queryClient-CbhGi5gS.js";import{An as te,Ir as ie,Kt as U,Lr as ne,Nn as I,Rn as y,an as R,dr as $,fn as W,fr as G,kt as le,mn as X,on as re,wt as Z,zr as de,zt as ce}from"./vendor-ui-HbZeGnVr.js";import{t as u}from"./button-BpBAlEZu.js";import{a as T,c as J,o as k,r as P,s as D}from"./dialog-CDZ2249b.js";import{t as j}from"./input-C-oqphw0.js";import{t as o}from"./label-rmk_lUq_.js";import{a as _,i as V,n as S,r as H,t as A}from"./card-C09EQudm.js";import{a as M,i as F,n as L,r as O,t as f}from"./select-CkGTehtz.js";import{t as w}from"./badge-Ckh5MnAv.js";import{t as Y}from"./switch-DaRePIGG.js";import{n as x}from"./dist-CKggLyJL.js";import{t as Q}from"./textarea-jnpLt1XA.js";import{a as me,i as q,o as z,r as oe}from"./Admin-RMWKZrYD.js";var p=ee(se(),1);function ue(){const{data:s=[],isLoading:i}=E({queryKey:["/api/admin/email/templates"]}),{data:a=[]}=E({queryKey:["/api/admin/email/templates/defaults"]});return{templates:s,defaults:a,isLoading:i}}function xe(s,i){const a=K();return{updateMutation:b({mutationFn:async({id:t,data:n})=>await N("PUT",`/api/admin/email/templates/${t}`,n),onSuccess:()=>{a.invalidateQueries({queryKey:["/api/admin/email/templates"]}),s(null),x.success("Plantilla actualizada")},onError:()=>x.error("Error al actualizar plantilla")}),seedMutation:b({mutationFn:async()=>await N("POST","/api/admin/email/templates/seed",{}),onSuccess:()=>{a.invalidateQueries({queryKey:["/api/admin/email/templates"]}),x.success("Plantillas sincronizadas")},onError:()=>x.error("Error al sincronizar plantillas")}),previewMutation:b({mutationFn:async({templateKey:t,data:n})=>await(await N("POST","/api/admin/email/templates/preview",{templateKey:t,data:n})).json(),onSuccess:t=>i(t.html),onError:()=>x.error("Error al previsualizar")})}}function he(){const[s,i]=(0,p.useState)({templateKey:"",status:"",recipient:"",limit:20,offset:0}),{data:a,isLoading:t,refetch:n}=E({queryKey:["/api/admin/email/logs",s],queryFn:async()=>{const l=new URLSearchParams;s.templateKey&&l.set("templateKey",s.templateKey),s.status&&l.set("status",s.status),s.recipient&&l.set("recipient",s.recipient),l.set("limit",String(s.limit)),l.set("offset",String(s.offset));const d=await fetch(`/api/admin/email/logs?${l.toString()}`);if(!d.ok)throw new Error("Failed to fetch logs");return d.json()}});return{logs:a?.logs||[],total:a?.total||0,isLoading:t,refetch:n,filters:s,setFilters:i}}var e=ae();function pe({template:s,form:i,setForm:a,onClose:t,onSave:n,isPending:l}){return(0,e.jsx)(k,{open:!!s,onOpenChange:d=>!d&&t(),children:(0,e.jsxs)(D,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,e.jsx)(P,{children:(0,e.jsxs)(T,{children:["Editar Plantilla: ",s?.name]})}),(0,e.jsxs)("div",{className:"space-y-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"subject",children:"Asunto del Email"}),(0,e.jsx)(j,{id:"subject",value:i.subject,onChange:d=>a({...i,subject:d.target.value}),placeholder:"Asunto del email","data-testid":"input-template-subject"}),(0,e.jsxs)("p",{className:"text-xs text-muted-foreground mt-1",children:["Usa variables como ","{{firstName}}",", ","{{orderNumber}}",", ","{{brandName}}"]})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"html",children:"Contenido HTML"}),(0,e.jsx)(Q,{id:"html",value:i.html,onChange:d=>a({...i,html:d.target.value}),placeholder:"Contenido HTML del email",className:"font-mono text-sm min-h-[300px]","data-testid":"input-template-html"})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"description",children:"Descripción"}),(0,e.jsx)(j,{id:"description",value:i.description,onChange:d=>a({...i,description:d.target.value}),placeholder:"Descripción de la plantilla","data-testid":"input-template-description"})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)(Y,{checked:i.isActive,onCheckedChange:d=>a({...i,isActive:d}),"data-testid":"switch-template-active"}),(0,e.jsx)(o,{children:"Plantilla activa"})]}),(0,e.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,e.jsx)(u,{variant:"outline",onClick:t,children:"Cancelar"}),(0,e.jsxs)(u,{onClick:n,disabled:l,className:"bg-[#EA4B7D] hover:bg-[#
1EA4B7D]/90","data-testid":"button-save-template",children:[l&&(0,e.jsx)(y,{className:"w-4 h-4 mr-2 animate-spin"}),"Guardar Cambios"]})]})]})]})})}function je({html:s,onClose:i}){return(0,e.jsx)(k,{open:!!s,onOpenChange:a=>!a&&i(),children:(0,e.jsxs)(D,{className:"max-w-4xl max-h-[90vh]",children:[(0,e.jsx)(P,{children:(0,e.jsx)(T,{children:"Vista Previa del Email"})}),(0,e.jsx)("div",{className:"border rounded-lg overflow-hidden bg-gray-100",children:(0,e.jsx)("iframe",{srcDoc:s||"",className:"w-full h-[600px]",title:"Email Preview"})})]})})}var ge={WELCOME:{firstName:"María"},ORDER_CONFIRMATION:{firstName:"María",orderNumber:"ORD-12345",total:"59.99"},PASSWORD_RESET:{firstName:"María",resetLink:"https://ignislove.es/reset/abc123"}};function ve(){const[s,i]=(0,p.useState)(null),[a,t]=(0,p.useState)(null),[n,l]=(0,p.useState)({subject:"",html:"",description:"",isActive:!0}),{templates:d,isLoading:g}=ue(),{updateMutation:v,seedMutation:h,previewMutation:C}=xe(i,t),r=m=>{i(m),l({subject:m.subject,html:m.html,description:m.description||"",isActive:m.isActive})},c=()=>{s&&v.mutate({id:s.id,data:n})},B=m=>{C.mutate({templateKey:m.key,data:ge[m.key]||{}})};return g?(0,e.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,e.jsx)(y,{className:"w-8 h-8 animate-spin text-[#EA4B7D]"})}):(0,e.jsxs)("div",{className:"space-y-6",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,e.jsxs)("div",{className:"min-w-0",children:[(0,e.jsx)("h3",{className:"text-lg font-semibold",children:"Plantillas de Email"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:"Personaliza el contenido de los emails que reciben tus clientes"})]}),(0,e.jsxs)(u,{onClick:()=>h.mutate(),disabled:h.isPending,variant:"outline",className:"shrink-0 w-full sm:w-auto","data-testid":"button-sync-templates",children:[(0,e.jsx)(W,{className:`w-4 h-4 mr-2 ${h.isPending?"animate-spin":""}`}),"Sincronizar Plantillas"]})]}),d.length===0?(0,e.jsx)(A,{children:(0,e.jsxs)(S,{className:"py-12 text-center",children:[(0,e.jsx)(I,{className:"w-12 h-12 mx-auto text-muted-foreground mb-4"}),(0,e.jsx)("h4",{className:"font-medium mb-2",children:"No hay plantillas"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Sincroniza las plantillas por defecto para empezar"}),(0,e.jsx)(u,{onClick:()=>h.mutate(),"data-testid":"button-seed-templates",children:"Crear Plantillas por Defecto"})]})}):(0,e.jsx)("div",{className:"grid gap-4",children:d.map(m=>(0,e.jsxs)(A,{className:"overflow-hidden","data-testid":`card-template-${m.key}`,children:[(0,e.jsx)(V,{className:"pb-3",children:(0,e.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,e.jsx)("div",{className:"p-2 bg-[#EA4B7D]/10 rounded-lg shrink-0",children:(0,e.jsx)($,{className:"w-5 h-5 text-[#EA4B7D]"})}),(0,e.jsxs)("div",{className:"min-w-0",children:[(0,e.jsx)(_,{className:"text-base truncate",children:m.name}),(0,e.jsxs)(H,{className:"text-xs truncate",children:["Clave: ",m.key]})]})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[(0,e.jsx)(w,{variant:m.isActive?"default":"secondary",children:m.isActive?"Activa":"Inactiva"}),(0,e.jsx)(u,{variant:"ghost",size:"sm",onClick:()=>B(m),"data-testid":`button-preview-${m.key}`,children:(0,e.jsx)(G,{className:"w-4 h-4"})}),(0,e.jsx)(u,{variant:"ghost",size:"sm",onClick:()=>r(m),"data-testid":`button-edit-${m.key}`,children:(0,e.jsx)(U,{className:"w-4 h-4"})})]})]})}),(0,e.jsxs)(S,{children:[(0,e.jsxs)("div",{className:"text-sm",children:[(0,e.jsx)("span",{className:"font-medium",children:"Asunto:"})," ",(0,e.jsx)("span",{className:"text-muted-foreground line-clamp-2",children:m.subject})]}),m.description&&(0,e.jsx)("p",{className:"text-xs text-muted-foreground mt-2 line-clamp-2",children:m.description})]})]},m.id))}),(0,e.jsx)(pe,{template:s,form:n,setForm:l,onClose:()=>i(null),onSave:c,isPending:v.isPending}),(0,e.jsx)(je,{html:a,onClose:()=>t(null)})]})}function fe({filters:s,onFiltersChange:i}){return(0,e.jsxs)("div",{className:"flex flex-wrap gap-4 mb-6",children:[(0,e.jsxs)("div",{className:"flex-1 min-w-[200px]",children:[(0,e.jsx)(o,{className:"mb-2 block text-sm",children:"Buscar destinatario"}),(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsx)(re,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),(0,e.jsx)(j,{placeholder:"Email del destinatario",value:s.recipient,onChange:a=>i({recipient:a.target.value,offset:0}),className:"pl-9","data-testid":"input-search-recipient"})]})]}),(0,e.jsxs)("div",{className:"w-48",children:[(0,e.jsx)(o,{className:"mb-2 block text-sm",children:"Plantilla"}),(0,e.jsxs)(O,{value:s.templateKey,onValueChange:a=>i({templateKey:a==="all"?"":a,offset:0}),children:[(0,e.jsx)(F,{"data-testid":"select-template-filter",children:(0,e.jsx)(M,{placeholder:"Todas"})}),(0,e.jsxs)(L,{children:[(0,e.jsx)(f,{value:"all",children:"Todas"}),(0,e.jsx)(f,{value:"WELCOME",children:"Bienvenida"}),(0,e.jsx)(f,{value:"ORDER_CONFIRMATION",children:"Confirmación"}),(0,e.jsx)(f,{value:"PASSWORD_RESET",children:"Recuperación"})]})]})]}),(0,e.jsxs)("div",{className:"w-40",children:[(0,e.jsx)(o,{className:"mb-2 block text-sm",children:"Estado"}),(0,e.jsxs)(O,{value:s.status,onValueChange:a=>i({status:a==="all"?"":a,offset:0}),children:[(0,e.jsx)(F,{"data-testid":"select-status-filter",children:(0,e.jsx)(M,{placeholder:"Todos"})}),(0,e.jsxs)(L,{children:[(0,e.jsx)(f,{value:"all",children:"Todos"}),(0,e.jsx)(f,{value:"sent",children:"Enviado"}),(0,e.jsx)(f,{value:"failed",children:"Fallido"})]})]})]})]})}function Ne({status:s}){return s==="sent"?(0,e.jsxs)(w,{className:"bg-green-100 text-green-800",children:[(0,e.jsx)(de,{className:"w-3 h-3 mr-1"}
1)," Enviado"]}):s==="failed"?(0,e.jsxs)(w,{className:"bg-red-100 text-red-800",children:[(0,e.jsx)(Z,{className:"w-3 h-3 mr-1"})," Fallido"]}):(0,e.jsx)(w,{variant:"secondary",children:s})}var be={WELCOME:"Bienvenida",ORDER_CONFIRMATION:"Confirmación",PASSWORD_RESET:"Recuperación"};function ye(s){return new Date(s).toLocaleString("es-ES",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})}function Ce({logs:s}){return(0,e.jsx)("div",{className:"rounded-lg border overflow-hidden",children:(0,e.jsxs)("table",{className:"w-full",children:[(0,e.jsx)("thead",{className:"bg-muted/50",children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{className:"text-left p-3 text-sm font-medium",children:"Fecha"}),(0,e.jsx)("th",{className:"text-left p-3 text-sm font-medium",children:"Destinatario"}),(0,e.jsx)("th",{className:"text-left p-3 text-sm font-medium",children:"Plantilla"}),(0,e.jsx)("th",{className:"text-left p-3 text-sm font-medium",children:"Asunto"}),(0,e.jsx)("th",{className:"text-left p-3 text-sm font-medium",children:"Estado"})]})}),(0,e.jsx)("tbody",{children:s.map(i=>(0,e.jsxs)("tr",{className:"border-t","data-testid":`row-email-log-${i.id}`,children:[(0,e.jsx)("td",{className:"p-3 text-sm",children:ye(i.createdAt)}),(0,e.jsx)("td",{className:"p-3 text-sm font-mono text-xs",children:i.recipient}),(0,e.jsx)("td",{className:"p-3 text-sm",children:(0,e.jsx)(w,{variant:"outline",children:be[i.templateKey]||i.templateKey})}),(0,e.jsx)("td",{className:"p-3 text-sm max-w-[200px] truncate",title:i.subject,children:i.subject}),(0,e.jsx)("td",{className:"p-3",children:(0,e.jsx)(Ne,{status:i.status})})]},i.id))})]})})}function we({total:s,logsCount:i,currentPage:a,totalPages:t,onPageChange:n}){return(0,e.jsxs)("div",{className:"flex items-center justify-between mt-4",children:[(0,e.jsxs)("p",{className:"text-sm text-muted-foreground",children:["Mostrando ",i," de ",s," emails"]}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)(u,{variant:"outline",size:"sm",disabled:a===1,onClick:()=>n(a-1),"data-testid":"button-prev-page",children:(0,e.jsx)(ne,{className:"w-4 h-4"})}),(0,e.jsxs)("span",{className:"text-sm",children:["Página ",a," de ",t||1]}),(0,e.jsx)(u,{variant:"outline",size:"sm",disabled:a>=t,onClick:()=>n(a+1),"data-testid":"button-next-page",children:(0,e.jsx)(ie,{className:"w-4 h-4"})})]})]})}function Ee(){const{logs:s,total:i,isLoading:a,refetch:t,filters:n,setFilters:l}=he(),d=Math.ceil(i/n.limit),g=Math.floor(n.offset/n.limit)+1,v=h=>l({...n,offset:(h-1)*n.limit});return(0,e.jsxs)("div",{className:"space-y-6",children:[(0,e.jsxs)("div",{className:"flex items-center justify-between",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("h3",{className:"text-lg font-semibold",children:"Historial de Emails"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:"Revisa todos los emails enviados desde la plataforma"})]}),(0,e.jsxs)(u,{variant:"outline",onClick:()=>t(),"data-testid":"button-refresh-logs",children:[(0,e.jsx)(W,{className:"w-4 h-4 mr-2"}),"Actualizar"]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)(S,{className:"pt-6",children:[(0,e.jsx)(fe,{filters:n,onFiltersChange:h=>l({...n,...h})}),a?(0,e.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,e.jsx)(y,{className:"w-8 h-8 animate-spin text-[#EA4B7D]"})}):s.length===0?(0,e.jsxs)("div",{className:"text-center py-12",children:[(0,e.jsx)(R,{className:"w-12 h-12 mx-auto text-muted-foreground mb-4"}),(0,e.jsx)("h4",{className:"font-medium mb-2",children:"No hay emails registrados"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:"Los emails enviados aparecerán aquí"})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(Ce,{logs:s}),(0,e.jsx)(we,{total:i,logsCount:s.length,currentPage:g,totalPages:d,onPageChange:v})]})]})})]})}function Se(){const{data:s=[],isLoading:i}=E({queryKey:["/api/admin/email/templates"],select:t=>t.filter(n=>n.type==="marketing"||n.key==="PROMOTION")}),{data:a=[]}=E({queryKey:["/api/admin/email/templates"]});return{templates:s,allTemplates:a,isLoading:i}}function Ae(){const{data:s=[],isLoading:i}=E({queryKey:["/api/admin/email/campaigns"]});return{campaigns:s,isLoading:i}}function Te(s){const i=K();return{createMutation:b({mutationFn:async a=>N("POST","/api/admin/email/templates",a),onSuccess:()=>{i.invalidateQueries({queryKey:["/api/admin/email/templates"]}),s.onCreateSuccess?.(),x.success("Plantilla creada")},onError:()=>x.error("Error al crear plantilla")}),updateMutation:b({mutationFn:async({id:a,data:t})=>
1N("PUT",`/api/admin/email/templates/${a}`,t),onSuccess:()=>{i.invalidateQueries({queryKey:["/api/admin/email/templates"]}),s.onUpdateSuccess?.(),x.success("Plantilla actualizada")},onError:()=>x.error("Error al actualizar plantilla")}),deleteMutation:b({mutationFn:async a=>N("DELETE",`/api/admin/email/templates/${a}`),onSuccess:()=>{i.invalidateQueries({queryKey:["/api/admin/email/templates"]}),x.success("Plantilla eliminada")},onError:()=>x.error("Error al eliminar plantilla")}),previewMutation:b({mutationFn:async({templateKey:a,data:t})=>(await N("POST","/api/admin/email/templates/preview",{templateKey:a,data:t})).json(),onError:()=>x.error("Error al previsualizar")})}}function ke(s){const i=K();return{createMutation:b({mutationFn:async a=>N("POST","/api/admin/email/campaigns",a),onSuccess:()=>{i.invalidateQueries({queryKey:["/api/admin/email/campaigns"]}),s.onCreateSuccess?.(),x.success("Campaña creada")},onError:()=>x.error("Error al crear campaña")}),sendMutation:b({mutationFn:async a=>(await N("POST",`/api/admin/email/campaigns/${a}/send`,{})).json(),onSuccess:a=>{i.invalidateQueries({queryKey:["/api/admin/email/campaigns"]}),x.success(`Campaña enviada: ${a.sentCount} emails enviados, ${a.failedCount} fallidos`)},onError:()=>x.error("Error al enviar campaña")})}}function Pe({template:s,onPreview:i,onEdit:a,onDelete:t}){return(0,e.jsxs)(A,{"data-testid":`card-marketing-template-${s.id}`,children:[(0,e.jsx)(V,{className:"pb-3",children:(0,e.jsxs)("div",{className:"flex items-center justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-3",children:[(0,e.jsx)("div",{className:"p-2 bg-[#EA4B7D]/10 rounded-lg",children:(0,e.jsx)(I,{className:"w-5 h-5 text-[#EA4B7D]"})}),(0,e.jsxs)("div",{children:[(0,e.jsx)(_,{className:"text-base",children:s.name}),(0,e.jsxs)(H,{className:"text-xs",children:["Clave: ",s.key]})]})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)(w,{variant:s.isActive?"default":"secondary",children:s.isActive?"Activa":"Inactiva"}),(0,e.jsx)(u,{variant:"ghost",size:"sm",onClick:i,"data-testid":`button-preview-marketing-${s.id}`,children:(0,e.jsx)(G,{className:"w-4 h-4"})}),(0,e.jsx)(u,{variant:"ghost",size:"sm",onClick:a,"data-testid":`button-edit-marketing-${s.id}`,children:(0,e.jsx)(U,{className:"w-4 h-4"})}),s.type==="marketing"&&(0,e.jsx)(u,{variant:"ghost",size:"sm",onClick:t,"data-testid":`button-delete-marketing-${s.id}`,children:(0,e.jsx)(ce,{className:"w-4 h-4 text-red-500"})})]})]})}),(0,e.jsxs)(S,{children:[(0,e.jsxs)("div",{className:"text-sm",children:[(0,e.jsx)("span",{className:"font-medium",children:"Asunto:"})," ",(0,e.jsx)("span",{className:"text-muted-foreground",children:s.subject})]}),s.description&&(0,e.jsx)("p",{className:"text-xs text-muted-foreground mt-2",children:s.description})]})]})}var De=`<div class="content">
2  <h2>¡Hola {{firstName}}!</h2>
3  <p>Tu mensaje aquí...</p>
4  <p style="text-align: center;">
5    <a href="https://ignislove.es" class="button">Ver Más</a>
6  </p>
7  <p>Con cariño,<br><strong>El equipo de {{brandName}}</strong></p>
8</div>`;function Me({onSubmit:s,isPending:i}){const[a,t]=(0,p.useState)({key:"",name:"",subject:"",html:De,description:""});return(0,e.jsxs)("div",{className:"space-y-4",children:[(0,e.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"key",children:"Clave Única"}),(0,e.jsx)(j,{id:"key",value:a.key,onChange:n=>t({...a,key:n.target.value.toUpperCase().replace(/[^A-Z0-9_]/g,"_")}),placeholder:"OFERTA_VERANO","data-testid":"input-new-template-key"})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"name",children:"Nombre"}),(0,e.jsx)(j,{id:"name",value:a.name,onChange:n=>t({...a,name:n.target.value}),placeholder:"Oferta de Verano","data-testid":"input-new-template-name"})]})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"subject",children:"Asunto del Email"}),(0,e.jsx)(j,{id:"subject",value:a.subject,onChange:n=>t({...a,subject:n.target.value}),placeholder:"¡Oferta especial para ti!","data-testid":"input-new-template-subject"}),(0,e.jsxs)("p",{className:"text-xs text-muted-foreground mt-1",children:["Variables: ","{{firstName}}",", ","{{brandName}}"]})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"html",children:"Contenido HTML"}),(0,e.jsx)(Q,{id:"html",value:a.html,onChange:n=>t({...a,html:n.target.value}),className:"font-mono text-sm min-h-[300px]","data-testid":"input-new-template-html"})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"description",children:"Descripción"}),(0,e.jsx)(j,{id:"description",value:a.description,onChange:n=>t({...a,description:n.target.value}),placeholder:"Descripción de la plantilla","data-testid":"input-new-template-description"})]}),(0,e.jsx)("div",{className:"flex justify-end gap-2",children:(0,e.jsxs)(u,{onClick:()=>s(a),disabled:i||!a.key||!a.name||!a.subject||!a.html,className:"bg-[#EA4B7D] hover:bg-[#
8EA4B7D]/90","data-testid":"button-submit-new-template",children:[i&&(0,e.jsx)(y,{className:"w-4 h-4 mr-2 animate-spin"}),"Crear Plantilla"]})})]})}function Fe({template:s,onSubmit:i,isPending:a}){const[t,n]=(0,p.useState)({name:s.name,subject:s.subject,html:s.html,description:s.description||"",isActive:s.isActive});return(0,e.jsxs)("div",{className:"space-y-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"name",children:"Nombre"}),(0,e.jsx)(j,{id:"name",value:t.name,onChange:l=>n({...t,name:l.target.value}),"data-testid":"input-edit-template-name"})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"subject",children:"Asunto del Email"}),(0,e.jsx)(j,{id:"subject",value:t.subject,onChange:l=>n({...t,subject:l.target.value}),"data-testid":"input-edit-template-subject"}),(0,e.jsxs)("p",{className:"text-xs text-muted-foreground mt-1",children:["Variables: ","{{firstName}}",", ","{{brandName}}"]})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"html",children:"Contenido HTML"}),(0,e.jsx)(Q,{id:"html",value:t.html,onChange:l=>n({...t,html:l.target.value}),className:"font-mono text-sm min-h-[300px]","data-testid":"input-edit-template-html"})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"description",children:"Descripción"}),(0,e.jsx)(j,{id:"description",value:t.description,onChange:l=>n({...t,description:l.target.value}),"data-testid":"input-edit-template-description"})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)(Y,{checked:t.isActive,onCheckedChange:l=>n({...t,isActive:l}),"data-testid":"switch-edit-template-active"}),(0,e.jsx)(o,{children:"Plantilla activa"})]}),(0,e.jsx)("div",{className:"flex justify-end gap-2",children:(0,e.jsxs)(u,{onClick:()=>i(t),disabled:a,className:"bg-[#EA4B7D] hover:bg-[#EA4B7D]/90","data-testid":"button-save-template",children:[a&&(0,e.jsx)(y,{className:"w-4 h-4 mr-2 animate-spin"}),"Guardar Cambios"]})})]})}function Le({templates:s,previewHtml:i,onPreviewChange:a}){const[t,n]=(0,p.useState)(!1),[l,d]=(0,p.useState)(null),{createMutation:g,updateMutation:v,deleteMutation:h,previewMutation:C}=Te({onCreateSuccess:()=>n(!1),onUpdateSuccess:()=>d(null)}),r=c=>{C.mutate({templateKey:c.key,data:{firstName:"María"}},{onSuccess:B=>a(B.html)})};return(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("h3",{className:"text-lg font-semibold",children:"Plantillas de Marketing"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:"Crea y gestiona plantillas para campañas de email"})]}),(0,e.jsxs)(k,{open:t,onOpenChange:n,children:[(0,e.jsx)(J,{asChild:!0,children:(0,e.jsxs)(u,{className:"bg-[#EA4B7D] hover:bg-[#EA4B7D]/90","data-testid":"button-create-template",children:[(0,e.jsx)(X,{className:"w-4 h-4 mr-2"}),"Nueva Plantilla"]})}),(0,e.jsxs)(D,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,e.jsx)(P,{children:(0,e.jsx)(T,{children:"Crear Plantilla de Marketing"})}),(0,e.jsx)(Me,{onSubmit:c=>g.mutate({...c,type:"marketing"}),isPending:g.isPending})]})]})]}),s.length===0?(0,e.jsx)(A,{children:(0,e.jsxs)(S,{className:"py-12 text-center",children:[(0,e.jsx)($,{className:"w-12 h-12 mx-auto text-muted-foreground mb-4"}),(0,e.jsx)("h4",{className:"font-medium mb-2",children:"No hay plantillas de marketing"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Crea tu primera plantilla para empezar a enviar campañas"})]})}):(0,e.jsx)("div",{className:"grid gap-4",children:s.map(c=>(0,e.jsx)(Pe,{template:c,onPreview:()=>r(c),onEdit:()=>d(c),onDelete:()=>h.mutate(c.id)},c.id))}),(0,e.jsx)(k,{open:!!l,onOpenChange:c=>!c&&d(null),children:(0,e.jsxs)(D,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,e.jsx)(P,{children:(0,e.jsxs)(T,{children:["Editar Plantilla: ",l?.name]})}),l&&(0,e.jsx)(Fe,{template:l,onSubmit:c=>v.mutate({id:l.id,data:c}),isPending:v.isPending})]})}),(0,e.jsx)(k,{open:!!i,onOpenChange:c=>!c&&a(null),children:(0,e.jsxs)(D,{className:"max-w-4xl max-h-[90vh]",children:[(0,e.jsx)(P,{children:(0,e.jsx)(T,{children:"Vista Previa del Email"})}),(0,e.jsx)("div",{className:"border rounded-lg overflow-hidden bg-gray-100",children:(0,e.jsx)("iframe",{srcDoc:i||"",className:"w-full h-[600px]",title:"Email Preview"})})]})})]})}function Oe(s){return{variant:{completed:"default",sending:"secondary",failed:"destructive"}[s]||"outline",label:{draft:"Borrador",sending:"Enviando...",completed:"Completada",failed:"Fallida"}[s]||s}}function Re({campaign:s,onSend:i,isSending:a}){const{variant:t,label:n}=Oe(s.status);return(0,e.jsxs)(A,{"data-testid":`card-campaign-${s.id}`,children:[(0,e.jsx)(V,{className:"pb-3",children:(0,e.jsxs)("div",{className:"flex items-center justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-3",children:[(0,e.jsx)("div",{className:"p-2 bg-blue-500/10 rounded-lg",children:(0,e.jsx)(le,{className:"w-5 h-5 text-blue-500"})}),(0,e.jsxs)("div",{children:[(0,e.jsx)(_,{className:"text-base",children:s.name}),(0,e.jsx)(H,{className:"text-xs",children:new Date(s.createdAt).toLocaleDateString("es-ES")})]})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)(w,{variant:t,children:n}),s.status==="draft"&&(0,e.jsx)(u,{size:"sm",onClick:i,disabled:a,className:"bg-green-600 hover:bg-green-700","data-testid":`button-send-campaign-${s.id}`,children:a?(0,e.jsx)(y,{className:"w-4 h-4 animate-spin"}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(R,{className:"w-4 h-4 mr-1"}),"Enviar"]})})]})]})}),s.status==="completed"&&(0,e.jsx)(S,{children:(0,e.jsxs)("div",{className:"flex gap-4 text-sm",children:[(0,e.jsxs)("span",{className:"text-green-600",children:["Enviados: ",s.sentCount]}),s.failedCount>0&&(0,e.jsxs)("span",{className:"text-red-500",children:["Fallidos: ",s.failedCount]})]})})]})}function Be({selectedRecipients:s,onAdd:i,onRemove:a}){const[t,n]=(0,p.useState)(""),[l,d]=(0,p.useState)(!1),{data:g=[],isLoading:v}=E({queryKey:["/api/admin/email/campaigns/recipients/search",t],queryFn:async()=>(await N("GET",`/api/admin/email/campaigns/recipients/search?q=${encodeURIComponent(t)}`)).json(),enabled:l&&t.length>0}),h=r=>{i(r),n(""),d(!1)},C=g.filter(r=>!s.find(c=>c.id===r.id));return(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(o,{children:"Buscar y seleccionar clientes"}),(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsx)(j,{value:t,onChange:r=>{n(r.target.value),d(!0)},onFocus:()=>d(!0),placeholder:"Buscar por email o nombre...","data-testid":"input-search-recipients"}),l&&(t||g.length>0)&&(0,e.jsx)("div",{className:"absolute z-10 w-full mt-1 bg-white border rounded-md shadow-lg max-h-48 overflow-y-auto",children:v?(0,e.jsxs)("div",{className:"p-3 text-center text-sm text-muted-foreground",children:[(0,e.jsx)(y,{className:"w-4 h-4 animate-spin inline mr-2"}),"Buscando..."]}):C.length===0?(0,e.jsx)("div",{className:"p-3 text-center text-sm text-muted-foreground",children:"No se encontraron resultados"}):C.map(r=>(0,e.jsxs)("button",{type:"button",className:"w-full px-3 py-2 text-left text-sm hover:bg-gray-100 flex items-center justify-between",onClick:()=>h(r),"data-testid":`button-add-recipient-${r.id}`,children:[(0,e.jsx)("span",{children:r.name}),(0,e.jsx)("span",{className:"text-xs text-muted-foreground",children:r.email})]},r.id))})]}),s.length>0&&(0,e.jsx)("div",{className:"flex flex-wrap gap-2 mt-2",children:s.map(r=>(0,e.jsxs)(w,{variant:"secondary",className:"flex items-center gap-1",children:[r.name,(0,e.jsx)("button",{type:"button",onClick:()=>a(r.id),className:"ml-1 hover:text-red-500","data-testid":`button-remove-recipient-${r.id}`,children:(0,e.jsx)(Z,{className:"w-3 h-3"})})]},r.id))}),(0,e.jsxs)("p",{className:"text-xs text-muted-foreground",children:[s.length," cliente(s) seleccionado(s)"]})]})}function qe({templates:s,onSubmit:i,isPending:a}){const[t,n]=(0,p.useState)({name:"",templateId:0,targetAudience:"customers"}),[l,d]=(0,p.useState)([]),g=()=>{const r={name:t.name,templateId:t.templateId,targetAudience:t.targetAudience};t.targetAudience==="selected"&&(r.selectedRecipientIds=l.map(c=>c.id)),i(r)},v=r=>{l.find(c=>c.id===r.id)||d([...l,r])},h=r=>{d(l.filter(c=>c.id!==r))},C=a||!t.name||!t.templateId||t.targetAudience==="selected"&&l.length===0;return(0,e.jsxs)("div",{className:"space-y-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"name",children:"Nombre de la Campaña"}),(0,e.jsx)(j,{id:"name",value:t.name,onChange:r=>n({...t,name:r.target.value}),placeholder:"Campaña de Verano 2026","data-testid":"input-campaign-name"})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"template",children:"Plantilla"}),(0,e.jsxs)(O,{value:t.templateId?String(t.templateId):"",onValueChange:r=>n({...t,templateId:parseInt(r)}),children:[(0,e.jsx)(F,{"data-testid":"select-campaign-template",children:(0,e.jsx)(M,{placeholder:"Selecciona una plantilla"})}),(0,e.jsx)(L,{children:s.filter(r=>r.isActive).map(r=>(0,e.jsx)(f,{value:String(r.id),children:r.name},r.id))})]})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)(o,{htmlFor:"audience",children:"Destinatarios"}),(0,e.jsxs)(O,{value:t.targetAudience,onValueChange:r=>{n({...t,targetAudience:r}),r!=="selected"&&d([])},children:[(0,e.jsx)(F,{"data-testid":"select-campaign-audience",children:(0,e.jsx)(M,{placeholder:"Selecciona el grupo"})}),(0,e.jsxs)(L,{children:[(0,e.jsx)(f,{value:"customers",children:"Todos los clientes registrados"}),(0,e.jsx)(f,{value:"all",children:"Todos los usuarios"}),(0,e.jsx)(f,{value:"selected",children:"Clientes específicos"})]})]})]}),t.targetAudience==="selected"&&(0,e.jsx)(Be,{selectedRecipients:l,onAdd:v,onRemove:h}),(0,e.jsx)("div",{className:"flex justify-end gap-2",children:(0,e.jsxs)(u,{onClick:g,disabled:C,className:"bg-[#EA4B7D] hover:bg-[#
8EA4B7D]/90","data-testid":"button-submit-campaign",children:[a&&(0,e.jsx)(y,{className:"w-4 h-4 mr-2 animate-spin"}),"Crear Campaña"]})})]})}function ze({campaigns:s,templates:i}){const[a,t]=(0,p.useState)(!1),{createMutation:n,sendMutation:l}=ke({onCreateSuccess:()=>t(!1)});return(0,e.jsxs)("div",{children:[(0,e.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("h3",{className:"text-lg font-semibold",children:"Campañas"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:"Crea y envía campañas de email a tus clientes"})]}),(0,e.jsxs)(k,{open:a,onOpenChange:t,children:[(0,e.jsx)(J,{asChild:!0,children:(0,e.jsxs)(u,{variant:"outline","data-testid":"button-create-campaign",children:[(0,e.jsx)(X,{className:"w-4 h-4 mr-2"}),"Nueva Campaña"]})}),(0,e.jsxs)(D,{children:[(0,e.jsx)(P,{children:(0,e.jsx)(T,{children:"Crear Campaña"})}),(0,e.jsx)(qe,{templates:i,onSubmit:d=>n.mutate(d),isPending:n.isPending})]})]})]}),s.length===0?(0,e.jsx)(A,{children:(0,e.jsxs)(S,{className:"py-12 text-center",children:[(0,e.jsx)(R,{className:"w-12 h-12 mx-auto text-muted-foreground mb-4"}),(0,e.jsx)("h4",{className:"font-medium mb-2",children:"No hay campañas"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Crea una campaña para enviar emails masivos"})]})}):(0,e.jsx)("div",{className:"grid gap-4",children:s.map(d=>(0,e.jsx)(Re,{campaign:d,onSend:()=>l.mutate(d.id),isSending:l.isPending},d.id))})]})}function Ke(){const[s,i]=(0,p.useState)(null),{templates:a,allTemplates:t,isLoading:n}=Se(),{campaigns:l,isLoading:d}=Ae();return n||d?(0,e.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,e.jsx)(y,{className:"w-8 h-8 animate-spin text-[#EA4B7D]"})}):(0,e.jsxs)("div",{className:"space-y-8",children:[(0,e.jsx)(Le,{templates:a,previewHtml:s,onPreviewChange:i}),(0,e.jsx)(ze,{campaigns:l,templates:t})]})}function ts(){return(0,e.jsxs)("div",{className:"space-y-6",children:[(0,e.jsxs)("div",{className:"flex items-center gap-3",children:[(0,e.jsx)("div",{className:"p-2 bg-[#EA4B7D]/10 rounded-lg",children:(0,e.jsx)(I,{className:"w-6 h-6 text-[#EA4B7D]"})}),(0,e.jsxs)("div",{children:[(0,e.jsx)("h2",{className:"text-xl font-semibold",children:"Gestión de Emails"}),(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:"Administra plantillas, campañas de marketing y revisa el historial de envíos"})]})]}),(0,e.jsxs)(oe,{defaultValue:"templates",className:"w-full",children:[(0,e.jsxs)(me,{className:"grid w-full grid-cols-3 max-w-lg",children:[(0,e.jsxs)(z,{value:"templates","data-testid":"tab-templates",children:[(0,e.jsx)($,{className:"w-4 h-4 mr-2"}),"Automáticas"]}),(0,e.jsxs)(z,{value:"marketing","data-testid":"tab-marketing",children:[(0,e.jsx)(te,{className:"w-4 h-4 mr-2"}),"Marketing"]}),(0,e.jsxs)(z,{value:"logs","data-testid":"tab-logs",children:[(0,e.jsx)(R,{className:"w-4 h-4 mr-2"}),"Historial"]})]}),(0,e.jsx)(q,{value:"templates",className:"mt-6",children:(0,e.jsx)(ve,{})}),(0,e.jsx)(q,{value:"marketing",className:"mt-6",children:(0,e.jsx)(Ke,{})}),(0,e.jsx)(q,{value:"logs",className:"mt-6",children:(0,e.jsx)(Ee,{})})]})]})}export{ts as EmailTab};

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.