PageSourceSearch

https://talleres.deportesanjoaquin.cl/assets/PaginaCanchas-DnsEJFW1.js

js deportesanjoaquin.cl collected 2026-10-09 17:26:09 UTC 22,151 bytes, 6 lines download raw bytes

1import{ae as Ne,t as ae,dl as be,dm as T,j as e,B as f,J as qe,q as S,Q as se,V as re,W as oe,X as ne,Y as te,s as O,D as ue,a as E,b as $,e as H,a6 as ye,E as Ce,d as U,K as me,T as Q,I as C,dn as he,aH as K,c as F,dp as Ee,ac as $e,a5 as le,z as _,dq as ie,dr as De,ds as we,aS as Se,x as Ae,o as Pe,P as ke,dt as Be,du as Te,dv as Oe}from"./index-DgTlfza0.js";import{b as d,u as He,L as ce}from"./vendor-1PmRW4tM.js";import{U as de}from"./undo-2-DbYpEgYC.js";import{a as Re}from"./PaginaAdmin-CKTN9nF2.js";import{P as Le,a as J}from"./pestanas-DQUvgAjB.js";import{T as Me}from"./tabla-CqwRMJPM.js";import"./arrow-up-Be-mtssI.js";/**
2 * @license lucide-react v0.474.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const _e=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"m17 22 5-5",key:"1k6ppv"}],["path",{d:"m17 17 5 5",key:"p7ous7"}]],X=Ne("CalendarX2",_e),xe=({reserva:a,motivoSugerido:m,conTexto:l=!1,alResolver:c})=>{const r=ae(),[x,n]=d.useState(!1),[g,p]=d.useState(""),[t,v]=d.useState(!1),N=be(a),j=`${a.canchaNombre} · ${T(a.fecha)} · ${a.desde}–${a.hasta}`,D=async()=>{if(await r({titulo:`¿Anular la reserva ${a.numero}?`,descripcion:a.monto>0?`${j}. El bloque queda libre; lo cobrado en el mostrador se devuelve por caja.`:`${j}. El bloque queda libre.`,textoConfirmar:"Anular",destructivo:!0}))try{await E.post(`/admin/canchas/reservas/${a.id}/anular`,{motivo:m??"Anulada desde el panel de administración"}),$.exito(`Reserva ${a.numero} anulada`),c()}catch(y){$.error(H(y)?y.mensaje:"No se pudo anular.")}},A=async()=>{v(!0);try{await E.post(`/admin/canchas/reservas/${a.id}/devolucion`,{motivo:g}),$.exito(`Arriendo ${a.numero} devuelto`,{descripcion:"El dinero volvió por la pasarela y el bloque quedó libre."}),n(!1),c()}catch(q){$.error(H(q)?q.mensaje:"No se pudo devolver.")}finally{v(!1)}};return N==="anular"?e.jsxs(f,{variante:l?"contorno":"fantasma",tamano:"sm","aria-label":l?void 0:`Anular la reserva ${a.numero}`,onClick:()=>void D(),children:[e.jsx(qe,{"aria-hidden":"true"}),l?"Anular":null]}):N!=="devolver"?null:e.jsxs(e.Fragment,{children:[e.jsxs(f,{variante:l?"contorno":"fantasma",tamano:"sm","aria-label":l?void 0:`Devolver el arriendo ${a.numero}`,onClick:()=>{p(m??""),n(!0)},children:[e.jsx(de,{"aria-hidden":"true"}),l?`Devolver ${S(a.monto)}`:null]}),e.jsx(se,{open:x,onOpenChange:n,children:e.jsxs(re,{className:"max-w-md",children:[e.jsxs(oe,{children:[e.jsxs(ne,{children:["Devolver el arriendo ",a.numero]}),e.jsx(te,{children:j})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs(O,{tono:"peligro",titulo:"Esto devuelve el dinero de verdad",children:["Se le devuelven ",S(a.monto)," a ",a.responsableNombre," por la misma vía con la que pagó y el bloque queda libre. No se puede deshacer desde aquí."]}),e.jsx(ue,{etiqueta:"Motivo de la devolución",value:g,onChange:q=>p(q.target.value),ayuda:"Al menos diez caracteres. Queda en la reserva y es lo que explica el descuadre de la recaudación."}),e.jsxs(f,{variante:"destructivo",onClick:()=>void A(),cargando:t,textoCargando:"Devolviendo…",disabled:g.trim().length<10,children:[e.jsx(de,{"aria-hidden":"true"}),"Devolver ",S(a.monto)]})]})]})})]})},pe={programado:"aviso",en_curso:"peligro",terminado:"neutro",levantado:"neutro"},Ie={online:"Pagado en línea",efectivo:"Efectivo",debito:"Débito",credito:"Crédito",transferencia:"Transferencia",otro:"Otro medio",pendiente:"Mostrador"},W=a=>a.fechaDesde===a.fechaHasta?`${T(a.fechaDesde)} · ${a.horaDesde}–${a.horaHasta}`:`${T(a.fechaDesde)} ${a.horaDesde} → ${T(a.fechaHasta)} ${a.horaHasta}`,Z=a=>a.canchas.map(m=>m.nombre).join(", "),ee=a=>a.estado==="programado"||a.estado==="en_curso",ze=({bloqueos:a,verTodos:m,alCambiarVerTodos:l,alAbrir:c,alCambiar:r})=>{var p;const x=ae(),n=async t=>{if(await x({titulo:`¿Levantar el bloqueo «${t.motivo}»?`,descripcion:`${Z(t)} · ${W(t)}. Esas horas vuelven a arrendarse desde el portal y el mostrador. El registro del bloqueo se conserva.`,textoConfirmar:"Levantar"}))try{await E.post(`/admin/canchas/bloqueos/${t.id}/levantar`),$.exito("Bloqueo levantado",{descripcion:"Esas horas y
6a se pueden arrendar."}),r()}catch(N){$.error(H(N)?N.mensaje:"No se pudo levantar el bloqueo.")}},g=((p=a.datos)==null?void 0:p.bloqueos)??[];return e.jsxs("div",{className:"space-y-4",children:[e.jsx(ye,{etiqueta:"Ver también los levantados y terminados",activo:m,alCambiar:l,className:"max-w-md"}),a.error&&!a.datos?e.jsx(Ce,{descripcion:a.error.mensaje,esDeRed:a.error.esDeRed,alReintentar:a.recargar}):a.primeraCarga?e.jsxs("div",{className:"space-y-3",children:[e.jsx(U,{className:"h-24 w-full"}),e.jsx(U,{className:"h-24 w-full"})]}):g.length===0?e.jsx(me,{icono:e.jsx(X,{className:"size-6","aria-hidden":"true"}),titulo:m?"Sin bloqueos":"Sin bloqueos vigentes",descripcion:"Bloquea un horario cuando haya un evento: esas horas dejan de arrendarse y te mostramos a quién hay que avisar."}):e.jsx("ul",{className:"space-y-3",children:g.map(t=>e.jsx("li",{children:e.jsx(Q,{className:"p-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:t.motivo}),e.jsx(C,{tono:pe[t.estado],children:he[t.estado]})]}),e.jsx("p",{className:"mt-1 text-sm",children:Z(t)}),e.jsx("p",{className:"tabular text-sm text-muted-foreground",children:W(t)}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t.estado==="levantado"?`Levantado por ${t.levantadoPorNombre??"el equipo"}${t.levantadoEn?` el ${K(t.levantadoEn)}`:""}`:`Bloqueado por ${t.creadoPorNombre??"el equipo"} el ${K(t.creadoEn)}`})]}),e.jsxs("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:[ee(t)&&t.reservasAfectadas>0?e.jsxs(f,{variante:"contorno",tamano:"sm",onClick:()=>c(t.id),children:[t.reservasAfectadas," ",t.reservasAfectadas===1?"reserva por resolver":"reservas por resolver"]}):e.jsx(f,{variante:"fantasma",tamano:"sm",onClick:()=>c(t.id),children:"Ver detalle"}),ee(t)?e.jsx(f,{variante:"fantasma",tamano:"sm",onClick:()=>void n(t),children:"Levantar"}):null]})]})})},t.id))})]})},Ve=({bloqueoId:a,alCerrar:m,alCambiar:l})=>{const c=F(n=>a?E.get(`/admin/canchas/bloqueos/${a}`,{signal:n}):Promise.resolve(null),[a]),r=c.datos&&c.datos.id===a?c.datos:null,x=()=>{c.recargar(),l()};return e.jsx(se,{open:a!==null,onOpenChange:n=>!n&&m(),children:e.jsxs(re,{className:"max-w-2xl",children:[e.jsxs(oe,{children:[e.jsx(ne,{children:r?`Bloqueo: ${r.motivo}`:"Bloqueo de horario"}),e.jsx(te,{children:r?`${Z(r)} · ${W(r)}`:""})]}),c.error&&!r?e.jsx(O,{tono:"peligro",children:c.error.mensaje}):r?e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(C,{tono:pe[r.estado],children:he[r.estado]}),e.jsxs("span",{children:["Bloqueado por ",r.creadoPorNombre??"el equipo"," el ",K(r.creadoEn)]})]}),r.nota?e.jsxs("p",{className:"rounded-md bg-muted p-3 text-sm",children:[e.jsx("span",{className:"font-medium",children:"Nota interna: "}),r.nota]}):null,r.afectadas.length===0?e.jsx(O,{tono:"exito",children:ee(r)?"No quedan reservas en este horario: no hay a quién avisar.":"Este bloqueo ya no bloquea nada, así que no queda a quién avisar."}):e.jsxs(e.Fragment,{children:[e.jsx(O,{tono:"aviso",titulo:`${r.afectadas.length} ${r.afectadas.length===1?"reserva pisa":"reservas pisan"} este bloqueo`,children:"Nada se anuló ni se devolvió solo. Llama a cada persona y resuelve su reserva: la pagada en línea se devuelve por la pasarela; la del mostrador se anula y se devuelve por caja."}),e.jsx("ul",{className:"space-y-2",children:r.afectadas.map(n=>e.jsx("li",{children:e.jsx(Q,{className:"p-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-0.5",children:[e.jsxs("p",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"tabular font-medium",children:n.numero}),e.jsx("span",{className:"text-sm text-muted-foreground",children:Ie[n.metodoPago]})]}),e.jsxs("p",{className:"text-sm",children:[n.canchaNombre," ·"," ",e.jsxs("span",{className:"tabular",children:[T(n.fecha)," · ",n.desde,"–",n.hasta]})]}),e.jsx("p",{className:"text-sm font-medium",children:n.responsableNombre}),e.jsxs("p",{className:"flex flex-wrap gap-x-4 gap-y-1 text-sm",children:[e.jsxs("a",{href:`tel:${n.responsableTelefono}`,className:"enlace-en-texto inline-flex items-center gap-1",children:[e.jsx(Ee,{className:"size-4","aria-hidden":"true"}),n.responsableTelefono]}),n.responsableEmail?e.jsxs("a",{href:`mailto:${n.responsableEmail}`,className:"enlace-en-texto inline-flex items-center gap-1",children:[e.jsx($e,{className:"size-4","aria-hidden":"true"}),n.responsableEmail]}):null]})]}),e.jsxs("div",{className:"flex shrink-0 flex-col items-end gap-2",children:[e.jsx("span",{className:"tabular font-semibold",children:S(n.monto)}),n.accion==="esperar_pago"?e.jsx("p",{className:"max-w-56 text-right text-sm text-muted-foreground",children:"Está pagando ahora. Si el pago entra, podrás devolverlo desde aquí; si no, el horario se libera solo."}):e.jsx(xe,{reserva:n,conTexto:!0,motivoSugerido:`Bloqueo de horario: ${r.motivo}`,alResolver:x})]})]})})},n.id))})]})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx(U,{className:"h-16 w-full"}),e.jsx(U,{className:"h-16 w-full"})]})]})})},V=()=>{const a=new Date;return`${a.getFullYear()}
6-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`},Fe=a=>{const m=new Map;for(const l of a){const c=l.recinto??"sin-recinto",r=m.get(c)??{clave:c,nombre:l.recintoNombre??"Sin recinto",canchas:[]};r.canchas.push(l),m.set(c,r)}return[...m.values()].sort((l,c)=>l.nombre.localeCompare(c.nombre,"es"))},Ue=({abierto:a,alCerrar:m,canchas:l,alCrear:c})=>{const[r,x]=d.useState([]),[n,g]=d.useState(V),[p,t]=d.useState("08:00"),[v,N]=d.useState(V),[j,D]=d.useState("22:00"),[A,q]=d.useState(""),[y,R]=d.useState(""),[b,P]=d.useState({}),[I,L]=d.useState(!1),[w,k]=d.useState(null),[z,s]=d.useState(!1),[Y,B]=d.useState(null),ve=d.useMemo(()=>Fe(l),[l]);d.useEffect(()=>{a&&(x([]),g(V()),t("08:00"),N(V()),D("22:00"),q(""),R(""),P({}),k(null),B(null))},[a]),d.useEffect(()=>{if(!a||r.length===0||!n||!v||!p||!j){k(null),B(null);return}const o=new AbortController,h=window.setTimeout(()=>{s(!0),E.post("/admin/canchas/bloqueos/previsualizar",{canchaIds:r,fechaDesde:n,horaDesde:p,fechaHasta:v,horaHasta:j},{signal:o.signal}).then(i=>{k(i),B(null)}).catch(i=>{o.signal.aborted||(k(null),B(H(i)?i.mensaje:"No pudimos revisar las reservas de ese horario."))}).finally(()=>{o.signal.aborted||s(!1)})},350);return()=>{window.clearTimeout(h),o.abort()}},[a,r,n,p,v,j]);const je=(o,h)=>x(i=>h?[...new Set([...i,o])]:i.filter(u=>u!==o)),fe=(o,h)=>{const i=o.canchas.map(u=>u.id);x(u=>h?[...new Set([...u,...i])]:u.filter(G=>!i.includes(G)))},ge=async o=>{o.preventDefault();const h=we.safeParse({canchaIds:r,fechaDesde:n,horaDesde:p,fechaHasta:v,horaHasta:j,motivo:A,nota:y.trim()||null});if(!h.success){P(Object.fromEntries(h.error.issues.map(i=>[String(i.path[0]??""),i.message])));return}P({}),L(!0);try{const i=await E.post("/admin/canchas/bloqueos",h.data);c(i)}catch(i){H(i)&&Array.isArray(i.detalles)&&P(Object.fromEntries(i.detalles.map(u=>[u.campo,u.mensaje]))),$.error(H(i)?i.mensaje:"No se pudo bloquear el horario.")}finally{L(!1)}},M=(w==null?void 0:w.afectadas)??[];return e.jsx(se,{open:a,onOpenChange:o=>!o&&m(),children:e.jsxs(re,{className:"max-w-2xl",children:[e.jsxs(oe,{children:[e.jsx(ne,{children:"Bloquear horario"}),e.jsx(te,{children:"Las canchas elegidas dejan de arrendarse en ese tramo, por el portal y en el mostrador. Las reservas que ya existan no se anulan solas: te las mostramos para que decidas con cada una."})]}),e.jsxs("form",{onSubmit:ge,className:"space-y-5",noValidate:!0,children:[e.jsxs("fieldset",{className:"space-y-3",children:[e.jsx("legend",{className:"text-sm font-medium",children:"Canchas"}),ve.map(o=>{const h=o.canchas.filter(u=>r.includes(u.id)).length,i=h===o.canchas.length;return e.jsxs("div",{className:"rounded-lg border border-border p-3",children:[e.jsx(le,{className:"min-h-0",etiqueta:e.jsxs("span",{className:"font-medium",children:["Todas las de ",o.nombre]}),checked:i?!0:h>0?"indeterminate":!1,onCheckedChange:u=>fe(o,u===!0)}),e.jsx("div",{className:"ml-7 grid gap-x-4 sm:grid-cols-2",children:o.canchas.map(u=>e.jsx(le,{className:"min-h-0",etiqueta:e.jsxs(e.Fragment,{children:[u.nombre,u.estado==="inactiva"?e.jsx("span",{className:"text-muted-foreground",children:" · inactiva"}):null]}),checked:r.includes(u.id),onCheckedChange:G=>je(u.id,G===!0)},u.id))})]},o.clave)}),b.canchaIds?e.jsx("p",{role:"alert",className:"text-sm font-medium text-destructive",children:b.canchaIds}):null]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(_,{etiqueta:"Desde el día",type:"date",requerido:!0,value:n,onChange:o=>{const h=o.target.value;g(h),h&&v<h&&N(h)},error:b.fechaDesde}),e.jsx(_,{etiqueta:"a las",type:"time",requerido:!0,value:p,onChange:o=>t(o.target.value),error:b.horaDesde})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(_,{etiqueta:"Hasta el día",type:"date",requerido:!0,min:n,value:v,onChange:o=>N(o.target.value),error:b.fechaHasta}),e.jsx(_,{etiqueta:"a las",type:"time",requerido:!0,value:j,onChange:o=>D(o.target.value),error:b.horaHasta})]})]}),e.jsx(_,{etiqueta:"Motivo",requerido:!0,maxLength:ie,value:A,onChange:o=>q(o.target.value),placeholder:"Evento municipal",ayuda:`Lo verá el público junto a las horas bloqueadas. ${A.length}/${ie}.`,error:b.motivo}),e.jsx(ue,{etiqueta:"Nota interna",value:y,onChange:o=>R(o.target.value),ayuda:"Opcional. Solo la ve el equipo: quién pidió el bloqueo, a quién preguntar.",error:b.nota}),e.jsx("div",{"aria-live":"polite",children:r.length===0?null:z&&!w?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Revisando las reservas de ese horario…"}):Y?e.jsx(O,{tono:"info",children:Y}):w&&M.length===0?e.jsx(O,{tono:"exito",children:"No hay reservas en ese horario."}
6):w?e.jsxs(O,{tono:"aviso",titulo:`Hay ${M.length} ${M.length===1?"reserva":"reservas"} en ese horario`,children:[e.jsx("p",{children:"El bloqueo se crea igual y no anula ninguna. Al confirmar te las mostramos con la acción que corresponde a cada una, para que avises a la persona y resuelvas caso a caso."}),e.jsx("ul",{className:"mt-2 space-y-1",children:M.map(o=>e.jsxs("li",{className:"tabular",children:[e.jsx("span",{className:"font-medium",children:o.numero})," · ",o.canchaNombre," ·"," ",T(o.fecha)," ",o.desde,"–",o.hasta," · ",o.responsableNombre," · ",S(o.monto)," ·"," ",De[o.accion]]},o.id))})]}):null}),e.jsxs("div",{className:"flex flex-col-reverse gap-2 border-t border-border pt-4 sm:flex-row sm:justify-end",children:[e.jsx(f,{type:"button",variante:"contorno",onClick:m,children:"Cancelar"}),e.jsxs(f,{type:"submit",cargando:I,textoCargando:"Bloqueando…",children:[e.jsx(X,{"aria-hidden":"true"}),M.length>0?"Bloquear y ver las reservas":"Bloquear horario"]})]})]})]})})},Qe=a=>T(a),ea=()=>{var R,b,P,I,L,w,k,z;const a=ae(),m=He(),[l,c]=d.useState("canchas"),r=F(s=>E.get("/admin/canchas",{signal:s}),[]),x=F(s=>E.get("/admin/canchas/reservas?limite=25",{signal:s}),[]),[n,g]=d.useState(!1),p=F(s=>E.get(`/admin/canchas/bloqueos?vista=${n?"todos":"vigentes"}`,{signal:s}),[n]),[t,v]=d.useState(!1),[N,j]=d.useState(null),D=()=>{p.recargar(),x.recargar()},A=async s=>{if(await a({titulo:`¿Dar de baja «${s.nombre}»?`,descripcion:s.reservasProximas>0?`Tiene ${s.reservasProximas} ${s.reservasProximas===1?"reserva":"reservas"} por venir. Habrá que anularlas antes.`:"Deja de aparecer en el portal y no se podrá reservar.",textoConfirmar:"Dar de baja",destructivo:!0}))try{await E.delete(`/admin/canchas/${s.id}`),$.exito("Cancha dada de baja"),r.recargar()}catch(B){$.error(H(B)?B.mensaje:"No se pudo dar de baja.")}},q=[{id:"nombre",encabezado:"Cancha",celda:s=>e.jsx(ce,{to:`/admin/canchas/${s.id}`,className:"font-medium text-foreground hover:text-primary hover:underline",children:s.nombre})},{id:"tipo",encabezado:"Tipo",celda:s=>e.jsxs("span",{className:"text-muted-foreground",children:[Be[s.tipo]," · ",Te[s.superficie]]})},{id:"recinto",encabezado:"Recinto",ocultarEnMovil:!0,celda:s=>e.jsx("span",{className:"text-muted-foreground",children:s.recintoNombre??"—"})},{id:"desde",encabezado:"Desde",alinear:"derecha",celda:s=>e.jsxs("span",{className:"tabular font-medium",children:[S(s.desdeHora),"/h"]})},{id:"proximas",encabezado:"Por venir",alinear:"derecha",ocultarEnMovil:!0,celda:s=>e.jsx("span",{className:"tabular text-muted-foreground",children:s.reservasProximas})},{id:"estado",encabezado:"Estado",celda:s=>e.jsxs("span",{className:"flex items-center gap-2",children:[s.tieneIluminacion?e.jsx(Oe,{className:"size-4 text-aviso","aria-label":"Con iluminación"}):null,s.estado==="activa"?e.jsx(C,{tono:"exito",children:"Activa"}):e.jsx(C,{tono:"neutro",children:"Inactiva"})]})}],y=(R=x.datos)==null?void 0:R.totales;return e.jsxs(Re,{titulo:"Arriendo de canchas",descripcion:"Las canchas, su tarifario por franja, las reservas y los horarios bloqueados.",acciones:l==="canchas"?e.jsx(f,{comoHijo:!0,children:e.jsxs(ce,{to:"/admin/canchas/nueva",children:[e.jsx(ke,{className:"size-4","aria-hidden":"true"}),"Nueva cancha"]})}):l==="bloqueos"?e.jsxs(f,{onClick:()=>v(!0),disabled:(((b=r.datos)==null?void 0:b.canchas.length)??0)===0,children:[e.jsx(X,{className:"size-4","aria-hidden":"true"}),"Bloquear horario"]}):void 0,children:[e.jsxs(Le,{etiqueta:"Secciones",valor:l,alCambiar:c,pestanas:[{valor:"canchas",etiqueta:"Canchas",contador:(P=r.datos)==null?void 0:P.canchas.length},{valor:"reservas",etiqueta:"Reservas",contador:(I=x.datos)==null?void 0:I.total},{valor:"bloqueos",etiqueta:"Bloqueos",contador:n||(L=p.datos)==null?void 0:L.bloqueos.length}],children:[e.jsx(J,{value:"canchas",children:e.jsx(Me,{columnas:q,filas:((w=r.datos)==null?void 0:w.canch
6as)??[],claveFila:s=>s.id,cargando:r.primeraCarga,error:r.error?{mensaje:r.error.mensaje,esDeRed:r.error.esDeRed}:null,alReintentar:r.recargar,tituloVacio:"Sin canchas",descripcionVacio:"Crea una cancha con su tarifario para que se pueda arrendar desde el portal.",idPreferencias:"canchas-admin",acciones:s=>e.jsxs("div",{className:"flex justify-end gap-1",children:[e.jsx(f,{variante:"fantasma",tamano:"sm","aria-label":`Editar ${s.nombre}`,onClick:()=>m(`/admin/canchas/${s.id}`),children:e.jsx(Se,{"aria-hidden":"true"})}),e.jsx(f,{variante:"fantasma",tamano:"sm","aria-label":`Dar de baja ${s.nombre}`,onClick:()=>void A(s),children:e.jsx(Ae,{"aria-hidden":"true"})})]})})}),e.jsxs(J,{value:"reservas",children:[y?e.jsxs(Q,{className:"mb-4 flex flex-wrap items-center gap-x-8 gap-y-3 p-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Recaudado"}),e.jsx("p",{className:"tabular text-2xl font-semibold",children:S(y.recaudado)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Reservas"}),e.jsx("p",{className:"tabular text-lg font-medium",children:y.reservas})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Horas arrendadas"}),e.jsx("p",{className:"tabular text-lg font-medium",children:y.horas})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Las anuladas no suman."})]}):null,x.datos&&x.datos.reservas.length===0?e.jsx(me,{icono:e.jsx(Pe,{className:"size-6","aria-hidden":"true"}),titulo:"Sin reservas",descripcion:"Cuando alguien arriende una cancha desde el portal o en el mostrador, aparecerá aquí."}):e.jsx("ul",{className:"space-y-3",children:(((k=x.datos)==null?void 0:k.reservas)??[]).map(s=>e.jsx("li",{children:e.jsx(Q,{className:"p-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"tabular font-medium",children:s.numero}),s.estado==="anulada"?e.jsx(C,{tono:"peligro",children:"Anulada"}):s.estado==="pendiente_pago"?e.jsx(C,{tono:"aviso",children:"Pendiente de pago"}):s.esFutura?e.jsx(C,{tono:"exito",children:"Por venir"}):e.jsx(C,{tono:"neutro",children:"Pasada"}),s.esTarifaVecino?e.jsx(C,{tono:"info",children:"Tarifa vecino"}):null,s.bloqueo?e.jsx("button",{type:"button",onClick:()=>j(s.bloqueo.id),className:"rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:e.jsxs(C,{tono:"peligro",icono:e.jsx(X,{"aria-hidden":"true"}),children:["Bloqueado: ",s.bloqueo.motivo]})}):null]}),e.jsx("p",{className:"mt-1 font-medium",children:s.canchaNombre}),e.jsxs("p",{className:"tabular text-sm text-muted-foreground",children:[Qe(s.fecha)," · ",s.desde,"–",s.hasta," (",s.horas," h)"]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[s.responsableNombre," · ",s.responsableTelefono]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-3",children:[e.jsx("span",{className:s.estado==="anulada"?"tabular text-muted-foreground line-through":"tabular font-semibold",children:S(s.monto)}),e.jsx(xe,{reserva:s,alResolver:D})]})]})})},s.id))})]}),e.jsx(J,{value:"bloqueos",children:e.jsx(ze,{bloqueos:p,verTodos:n,alCambiarVerTodos:g,alAbrir:j,alCambiar:D})})]}),e.jsx(Ue,{abierto:t,alCerrar:()=>
6v(!1),canchas:((z=r.datos)==null?void 0:z.canchas)??[],alCrear:s=>{v(!1),D(),s.afectadas.length>0?j(s.id):$.exito("Horario bloqueado",{descripcion:"No había reservas en ese horario: no hay a quién avisar."})}}),e.jsx(Ve,{bloqueoId:N,alCerrar:()=>j(null),alCambiar:D})]})};export{ea as PaginaCanchas};

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.