feat(purga): Monday eliminado completamente del sistema
14 servicios eliminados, 7 controllers local-only, crons locales, config sin MONDAY_*, frontend sin banners/avisos Monday. 552 tests API + 7 apps construidas.
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
import { useEffect, useState } from 'react'
|
||||
import { fetchEstadoSistema, type EstadoSistema } from '../services/sistema'
|
||||
|
||||
const INTERVALO_POLL_MS = 60_000
|
||||
|
||||
export function useEstadoSistema(): EstadoSistema | null | undefined {
|
||||
const [estado, setEstado] = useState<EstadoSistema | null | undefined>(undefined)
|
||||
useEffect(() => {
|
||||
let activo = true
|
||||
const consultar = () => {
|
||||
void fetchEstadoSistema().then((e) => { if (activo) setEstado(e) })
|
||||
}
|
||||
consultar()
|
||||
const id = setInterval(consultar, INTERVALO_POLL_MS)
|
||||
return () => { activo = false; clearInterval(id) }
|
||||
}, [])
|
||||
return estado
|
||||
}
|
||||
|
||||
export function useModoLocal(): boolean {
|
||||
const estado = useEstadoSistema()
|
||||
return estado !== undefined && estado !== null && !estado.mondayOk
|
||||
}
|
||||
|
||||
export default function BannerModoLocal({ parcial }: { parcial?: boolean }) {
|
||||
const modoLocal = useModoLocal()
|
||||
if (!modoLocal && !parcial) return null
|
||||
return (
|
||||
<div role="status" className="border-b border-amber-200 bg-amber-50">
|
||||
<p className="mx-auto max-w-[1280px] px-4 py-2 text-xs font-medium text-amber-700 sm:px-6">
|
||||
{modoLocal
|
||||
? 'Modo local — Monday no disponible. Tus capturas se guardan y se sincronizarán automáticamente.'
|
||||
: 'Datos parciales (modo local)'}
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -57,8 +57,8 @@ export default function SeccionEquipo() {
|
||||
</thead>
|
||||
<tbody className="divide-y divide-[#E5E7EB]">
|
||||
{equipo.porVendedor.map((v) => (
|
||||
<tr key={v.mondayUserId} className="transition-colors duration-100 hover:bg-[#F8FAFC] dark:bg-[#0F172A]">
|
||||
<td className={CLASE_CELDA}>{v.nombre ?? `Monday #${v.mondayUserId}`}</td>
|
||||
<tr key={v.usuarioId} className="transition-colors duration-100 hover:bg-[#F8FAFC] dark:bg-[#0F172A]">
|
||||
<td className={CLASE_CELDA}>{v.nombre ?? 'Sin nombre'}</td>
|
||||
<td className={CLASE_CELDA}>{v.leadsAsignados}</td>
|
||||
<td className={CLASE_CELDA}>{v.leadsNuevosSemana}</td>
|
||||
</tr>
|
||||
|
||||
@@ -29,7 +29,7 @@ export interface ApartadoPorVencer {
|
||||
}
|
||||
|
||||
export interface VendedorEquipo {
|
||||
mondayUserId: number
|
||||
usuarioId: string
|
||||
nombre: string | null
|
||||
leadsAsignados: number
|
||||
leadsNuevosSemana: number
|
||||
@@ -37,7 +37,6 @@ export interface VendedorEquipo {
|
||||
|
||||
export interface ResumenMiDia {
|
||||
generadoEn: string
|
||||
sinMapeoMonday: boolean
|
||||
misLeads: LeadMiDia[]
|
||||
misActividadesHoy: ActividadMiDia[]
|
||||
apartadosPorVencer: ApartadoPorVencer[]
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
import { conAuth, getToken } from './auth'
|
||||
|
||||
const API_URL = import.meta.env.VITE_API_URL || '/api'
|
||||
|
||||
export interface EstadoSistema {
|
||||
mondayOk: boolean
|
||||
pendientesSync: number
|
||||
}
|
||||
|
||||
export async function fetchEstadoSistema(): Promise<EstadoSistema | null> {
|
||||
if (!getToken()) return null
|
||||
try {
|
||||
const res = await fetch(`${API_URL}/sistema/estado`, conAuth())
|
||||
if (!res.ok) return null
|
||||
return (await res.json()) as EstadoSistema
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user