PageSourceSearch

https://laiglesiafiel.com/assets/SubscriptionMonitoring-dd5170e3.js

js laiglesiafiel.com collected 2026-10-02 01:36:11 UTC 5,737 bytes, 1 lines download raw bytes

1import{j as e,R as C,bj as k,q as z,ae as H,u as L}from"./vendor-ui-fc56ca80.js";import{r,e as R}from"./vendor-react-f9ccc48d.js";import{B as n,t as S,y,I as V,v as $,w as F,x as q,U as G,V as W,W as c,X as i,Y as X,Z as t,R as Y,P as Z,G as M,D as _,d as J,e as K,bo as O,f as D}from"./index-90016d22.js";import{a as P}from"./adminService-9c8edc1b.js";import"./vendor-firebase-a557f106.js";import"./vendor-utils-323b9898.js";import"./vendor-charts-9af8b7c0.js";function ie(){const[x,f]=r.useState(!0),[m,T]=r.useState([]),[N,U]=r.useState(""),[l,u]=r.useState(1),[d,A]=r.useState(1),I=R(),j=async()=>{try{f(!0);const s=await P.getAllChurches({pageSize:50,page:l,searchTerm:N});T(s.items),A(s.totalPages)}catch(s){console.error("Error loading subscription data:",s),L.error("Error al cargar datos de suscripciones")}finally{f(!1)}};r.useEffect(()=>{j()},[l]);const B=s=>{s.preventDefault(),u(1),j()},b=(s,a)=>!a||a===0||a===1/0?0:Math.min(100,s/a*100),E=s=>{switch(s){case"premium":return"default";case"standard":return"secondary";case"basic":return"outline";default:return"outline"}},v=s=>s>=90?"bg-red-500":s>=75?"bg-yellow-500":"bg-green-500";return e.jsxs("div",{className:"container mx-auto py-8 max-w-7xl space-y-8 animate-in fade-in duration-500",children:[e.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-start md:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Monitoreo de Uso y Cuotas"}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"Supervisa el consumo de recursos de cada iglesia y su estado de suscripción."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(n,{variant:"outline",onClick:j,disabled:x,children:[e.jsx(C,{className:`h-4 w-4 mr-2 ${x?"animate-spin":""}`}),"Actualizar"]}),e.jsxs(n,{variant:"outline",disabled:!0,children:[e.jsx(k,{className:"h-4 w-4 mr-2"}),"Exportar CSV"]})]})]}),e.jsx(S,{children:e.jsx(y,{className:"pt-6",children:e.jsxs("form",{onSubmit:B,className:"flex gap-4",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(z,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(V,{placeholder:"Buscar por nombre de iglesia...",className:"pl-9",value:N,onChange:s=>U(s.target.value)})]}),e.jsx(n,{type:"submit",children:"Buscar"})]})})}),e.jsxs(S,{children:[e.jsxs($,{children:[e.jsx(F,{children:"Listado de Iglesias"}),e.jsxs(q,{children:["Mostrando ",m.length," resultados"]})]}),e.jsxs(y,{children:[e.jsx("div",{className:"rounded-md border",children:e.jsxs(G,{children:[e.jsx(W,{children:e.jsxs(c,{children:[e.jsx(i,{children:"Iglesia / Ubicación"}),e.jsx(i,{children:"Plan"}),e.jsx(i,{children:"Uso de Usuarios"}),e.jsx(i,{children:"Uso de Miembros"}),e.jsx(i,{className:"text-right",children:"Salud"}),e.jsx(i,{className:"w-[50px]"})]})}),e.jsx(X,{children:x?e.jsx(c,{children:e.jsx(t,{colSpan:6,className:"h-24 text-center",children:e.jsx(C,{className:"h-6 w-6 animate-spin mx-auto text-muted-foreground"})})}):m.length===0?e.jsx(c,{children:e.jsx(t,{colSpan:6,className:"h-24 text-center text-muted-foreground",children:"No se encontraron iglesias"})}):m.map(s=>{var w;const a=b(s.userCount||0,s.maxUsers||1),h=s.maxMembers??50,o=h>1e6,p=o?0:b(s.memberCount||0,h),g=P.calculateHealthScore(s);return e.jsxs(c,{children:[e.jsxs(t,{children:[e.jsx("div",{className:"font-medium",children:s.name}),e.jsx("div",{className:"text-xs text-muted-foreground truncate max-w-[200px]",children:s.city||s.address||"Sin ubicación"})]}),e.jsxs(t,{children:[e.jsx(Y,{variant:E(s.plan),children:((w=Z[s.plan])==null?void 0:w.name)||s.plan}),e.jsx("div",{className:"text-xs text-muted-foreground mt-1",children:s.status==="active"?e.jsx("span",{className:"text-green-600 flex items-center gap-1",children:"● Activo"}):e.jsxs("span",{className:"text-red-500 flex items-center gap-1",children:["● ",s.status]})})]}),e.jsxs(t,{className:"w-[200px]",children:[e.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[e.jsxs("span",{children:[s.userCount||0," / ",s.maxUsers]}),e.jsxs("span",{className:"text-muted-foreground",children:[a.toFixed(0),"%"]})]}),e.jsx(M,{value:a,className:"h-2",indicatorClassName:v(a)})]}),e.jsxs(t,{className:"w-[200px]",children:[e.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[e.jsxs("span",{children:[s.memberCount||0," / ",o?"∞":h]}),!o&&e.jsxs("span",{className:"text-muted-foreground",children:[p.toFixed(0),"%"]})]}),!o&&e.jsx(M,{value:p,className:"h-2",indicatorClassName:v(p)})]}),e.jsx(t,{className:"text-right",children:e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx("div",{className:`text-lg font-bold ${g>80?"text-green-600":g>50?"text-yellow-600":"text-red-600"}`,children:g}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"pts"})]})}),e.jsx(t,{children:e.jsxs(_,{children:[e.jsx(J,{asChild:!0,children:e.jsxs(n,{variant:"ghost",className:"h-8 w-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Abrir menú"}),e.jsx(H,{className:"h-4 w-4"})]})}),e.jsxs(K,{align:"end",children:[e.jsx(O,{children:"Acciones"}),e.jsx(D,{onClick:()=>I(`/admin/church/${s.id}`),children:"Ver Detalles"}),e.jsx(D,{onClick:()=>navigator.clipboard.writeText(s.id),children:"Copiar ID"})]})]})})]},s.id)})})]})}),d>1&&e.jsxs("div",{className:"flex justify-center gap-2 mt-4",children:[e.jsx(n,{variant:"outline",size:"sm",onClick:()=>u(s=>Math.max(1,s-1)),disabled:l===1,children:"Anterior"}),e.jsxs("div",{className:"flex items-center text-sm",children:["Página ",l," de ",d]}),e.jsx(n,{variant:"outline",size:"sm",onClick:()=>u(s=>Math.min(d,s+1)),disabled:l===d,children:"Siguiente"})]})]})]})]})}export{ie 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.