1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1124],{2460:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});var i=t(7876),a=t(5961),r=t.n(a),s=t(4232),o=t(9099),d=t(4258);function l(e){let{children:n}=e,{user:t,loading:a}=(0,d.A)(),l=(0,o.useRouter)();return((0,s.useEffect)(()=>{a||t||l.push("/admin/login")},[t,a,l]),a||!t)?(0,i.jsxs)("div",{className:"jsx-8dcc8f99a5caa9b5 admin-loading",children:[(0,i.jsx)("div",{className:"jsx-8dcc8f99a5caa9b5 spinner"}),(0,i.jsx)(r(),{id:"8dcc8f99a5caa9b5",children:".admin-loading.jsx-8dcc8f99a5caa9b5{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#fff}.spinner.jsx-8dcc8f99a5caa9b5{width:40px;height:40px;border:4px solid#f3f3f3;border-top:4px solid#ef6f46;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}"})]}):n}},3518:(e,n,t)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/printer",function(){return t(7546)}])},4258:(e,n,t)=>{"use strict";t.d(n,{A:()=>s});var i=t(4232),a=t(6754);let r=new a.NE({UserPoolId:"eu-central-1_ajyqkmP04",ClientId:"3jk4bfm7sk1am4nc4bq689gok5"});function s(){let[e,n]=(0,i.useState)(null),[t,s]=(0,i.useState)(!0);return(0,i.useEffect)(()=>{if(!r)return;let e=r.getCurrentUser();e?e.getSession((t,i)=>{t||!i.isValid()?n(null):n(e),s(!1)}):s(!1)},[]),{user:e,loading:t,login:(e,t)=>new Promise((i,s)=>{let o=new a.By({Username:e,Password:t}),d=new a.TU({Username:e,Pool:r});d.authenticateUser(o,{onSuccess:e=>{n(d),i(e)},onFailure:e=>{s(e)}})}),logout:()=>{e&&(e.signOut(),n(null))}}}},5682:()=>{},7546:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>l});var i=t(7876),a=t(4232),r=t(7328),s=t.n(r),o=t(2460),d=t(4258);function l(){let{user:e}=(0,d.A)(),[n,t]=(0,a.useState)([]),[r,l]=(0,a.useState)(null),[c,p]=(0,a.useState)({display_name:"",company:""}),[m,u]=(0,a.useState)(!1),x=a.useRef(null),f=a.useCallback(async()=>{if(!x.current)try{let e=await fetch("/api/printer/scans");e.ok&&t(await e.json())}catch(e){}},[]);(0,a.useEffect)(()=>{f();let e=setInterval(f,2e3);return()=>clearInterval(e)},[f]);let h=()=>{x.current=null,l(null)},g=async n=>{u(!0);let i=n.id||n.ticketId;try{let n=await new Promise((n,t)=>{if(!e)return t("No user");e.getSession((e,i)=>{e||!i.isValid()?t("Invalid session"):n(i.getIdToken().getJwtToken())})}),a=await fetch("/api/admin/update-ticket",{method:"PATCH",headers:{Authorization:"Bearer ".concat(n),"Content-Type":"application/json"},body:JSON.stringify({id:i,...c})});if(!a.ok)throw Error((await a.json()).message||a.status);t(e=>e.map(e=>(e.id||e.ticketId)===i?{...e,name:c.display_name,display_name:c.display_name,company:c.company}:e)),x.current=null,l(null),setTimeout(f,500)}catch(e){alert("Error al guardar: "+e.message)}u(!1)};return(0,i.jsxs)(o.A,{children:[(0,i.jsxs)(s(),{children:[(0,i.jsx)("title",{children:"Estaci\xf3n de Impresi\xf3n de Tickets"}),(0,i.jsx)("meta",{name:"robots",content:"noindex,nofollow"}),(0,i.jsx)("style",{children:"\n .ticket-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.04);\n gap: 12px;\n }\n .ticket-name { font-size: 20px; font-weight: bold; }\n .ticket-tier { color: #f7931a; font-weight: bold; font-size: 14px; }\n .ticket-company { color: #6b7280; font-size: 13px; font-style: italic; margin-top: 2px; }\n .ticket-id { font-size: 12px; color: #9ca3af; margin-top: 4px; }\n .btn-print {\n background: #000; color: #fff; border: none;\n padding: 12px 24px; border-radius: 8px; font-size: 16px;\n font-weight: bold; cursor: pointer; white-space: nowrap;\n }\n .btn-edit {\n background: #f3f4f6; color: #374151; border: 1px solid #d1d5db;\n padding: 10px 18px; border-radius: 8px; font-size: 14px;\n font-weight: 600; cursor: pointer; white-space: nowrap;\n }\n .btn-save {\n background: #16a34a; color: white; border: none;\n padding: 9px 18px; border-radius: 7px; font-size: 14px;\n font-weight: 600; cursor: pointer;\n }\n .btn-cancel {\n background: #f3f4f6; color: #374151; border: 1px solid #d1d5db;\n padding: 9px 18px; border-radius: 7px; font-size: 14px;\n font-weight: 600; cursor: pointer;\n }\n .edit-input {\n width: 100%; padding: 7px 10px; border: 1px solid #d1d5db;\n border-radius: 6px; font-size: 14px; margin-bottom: 6px;\n }\n .edit-label {\n font-size: 11px; color: #6b7280; font-weight: 600;\n margin-bottom: 2px; display: block;\n }\n "})]}),(0,i.jsxs)("div",{style:{maxWidth:800,margin:"0 auto",padding:"20px"},children:[(0,i.jsx)("h2",{children:"\uD83D\uDDA8ï¸ Estaci\xf3n de Impresi\xf3n de Etiquetas"}),(0,i.jsx)("p",{style:{color:"#666",marginBottom:30},children:"Escanea tickets con el m\xf3vil. Aparecer\xe1n aqu\xed en tiempo real. Puedes editar los datos antes de imprimir."}),(0,i.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:15},children:0===n.length?(0,i.jsx)("div",{style:{padding:40,textAlign:"center",background:"#f9fafb",borderRadius:12},children:"â³ Esperando el primer escaneo desde el m\xf3vil..."}):n.map(e=>{let n=e.id||e.ticketId,t=r===n;return(0,i.jsxs)("div",{className:"ticket-row",children:[t?(0,i.jsxs)("div",{style:{flex:1},children:[(0,i.jsx)("label",{className:"edit-label",children:"Nombre y apellido"}),(0,i.jsx)("input",{className:"edit-input",value:c.display_name,onChange:e=>p(n=>({...n,display_name:e.target.value})),placeholder:"Nombre Apellido"}),(0,i.jsx)("label",{className:"edit-label",children:"Empresa (opcional)"}),(0,i.jsx)("input",{className:"edit-input",value:c.company,onChange:e=>p(n=>({...n,company:e.target.value})),placeholder:"Nombre de empresa",style:{marginBottom:0}}),(0,i.jsxs)("div",{style:{display:"flex",gap:8,marginTop:8},children:[(0,i.jsx)("button",{className:"btn-save",disabled:m,onClick:()=>g(e),children:m?"Guardando...":"â Guardar"}),(0,i.jsx)("button",{className:"btn-cancel",onClick:h,children:"Cancelar"})]})]}):(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"ticket-name",children:e.name||e.display_name||"â"}),(0,i.jsx)("div",{className:"ticket-tier",children:e.tier||"VIP / GENERAL"}),e.company&&(0,i.jsxs)("div",{className:"ticket-company",children:["\uD83C\uDFE2 ",e.company]}),(0,i.jsxs)("div",{className:"ticket-id",children:["ID: ",e.ticketId||e.id]})]}),!t&&(0,i.jsxs)("div",{style:{display:"flex",gap:8,flexShrink:0},children:[(0,i.jsx)("button",{className:"btn-edit",onClick:()=>(e=>{let n=e.id||e.ticketId;x.current=n,l(n),p({display_name:e.display_name||e.name||"",company:e.company||""})})(e),children:"âï¸ Editar"}),(0,i.jsx)("button",{className:"btn-print",onClick:()=>(e=>{let n=e.name||e.display_name||"â",t=e.company||"",i=e.ticketId||e.id,a=window.open("","_blank","width=800,height=600");a.document.write('\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset="utf-8" />\n <title>Ticket â '.concat(n,'</title>\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body { background: white; }\n @page {\n margin: 0;\n size: 3.9in 2.4in;\n }\n .sticker {\n width: 3.9in;\n height: 2.4in;\n padding: 4mm 6mm;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n font-family: Arial, sans-serif;\n background: white;\n color: black;\n overflow: hidden;\n }\n .sticker-name {\n font-size: 20px;\n font-weight: 900;\n text-transform: uppercase;\n line-height: 1.15;\n word-break: break-word;\n max-width: 100%;\n margin-bottom: 8px;\n }\n .sticker-company {\n font-size: 15px;\n font-weight: 700;\n color: #222;\n margin-top: 6px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n </style>\n </head>\n <body>\n <div class="sticker">\n <div class="sticker-name">').concat(n,'</div>\n <img src="https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=').concat(encodeURIComponent(i),'" width="100" height="100" />\n ').concat(t?'<div class="sticker-company">'.concat(t,"</div>"):"","\n </div>\n <script>\n var img = document.querySelector('img');\n function doPrint() { setTimeout(function() { window.print(); window.close(); }, 200); }\n if (img.complete) doPrint();\n else { img.onload = doPrint; img.onerror = doPrint; }\n <\/script>\n </body>\n </html>\n ")),a.document.close()})(e),children:"\uD83D\uDDA8ï¸ Imprimir"})]})]},n)})})]})]})}}},e=>{e.O(0,[2909,6754,636,6593,8792],()=>e(e.s=3518)),_N_E=e.O()}]);
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.