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,32 +0,0 @@
|
||||
import { useEffect, useState } from 'react'
|
||||
import { fetchEstadoSistema } from '../services/sistema'
|
||||
|
||||
const INTERVALO_POLL_MS = 60_000
|
||||
|
||||
export function useModoLocal(): boolean {
|
||||
const [modoLocal, setModoLocal] = useState(false)
|
||||
useEffect(() => {
|
||||
let activo = true
|
||||
const consultar = () => {
|
||||
void fetchEstadoSistema().then((estado) => {
|
||||
if (activo) setModoLocal(estado !== null && !estado.mondayOk)
|
||||
})
|
||||
}
|
||||
consultar()
|
||||
const id = setInterval(consultar, INTERVALO_POLL_MS)
|
||||
return () => { activo = false; clearInterval(id) }
|
||||
}, [])
|
||||
return modoLocal
|
||||
}
|
||||
|
||||
export default function BannerModoLocal() {
|
||||
const modoLocal = useModoLocal()
|
||||
if (!modoLocal) 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">
|
||||
Modo local — Monday no disponible. Tus capturas se guardan y se sincronizarán automáticamente.
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -8,7 +8,7 @@ interface Props {
|
||||
}
|
||||
|
||||
/**
|
||||
* Buscador con debounce de leads/oportunidades de Monday (GET /leads/buscar):
|
||||
* Buscador con debounce de leads/oportunidades (GET /leads/buscar):
|
||||
* jala nombre, teléfono y email del cliente al cotizador; si el resultado es
|
||||
* una oportunidad, la cotización queda vinculada a ella al guardar.
|
||||
*/
|
||||
@@ -35,7 +35,7 @@ export function BuscadorCliente({ onSeleccion }: Props) {
|
||||
})
|
||||
.catch(() => {
|
||||
setResultados(null)
|
||||
setError('No se pudo buscar en Monday. Intenta de nuevo.')
|
||||
setError('No se pudo buscar. Intenta de nuevo.')
|
||||
})
|
||||
.finally(() => setBuscando(false))
|
||||
}, DEBOUNCE_MS)
|
||||
@@ -45,7 +45,7 @@ export function BuscadorCliente({ onSeleccion }: Props) {
|
||||
return (
|
||||
<div>
|
||||
<label htmlFor="busqueda-cliente" className="mb-2 block text-xs font-medium text-[#4B5563] dark:text-[#CBD5E1]">
|
||||
Buscar cliente en Monday (lead u oportunidad)
|
||||
Buscar cliente (lead u oportunidad)
|
||||
</label>
|
||||
<input
|
||||
id="busqueda-cliente"
|
||||
|
||||
@@ -438,7 +438,7 @@ export default function CotizadorPage() {
|
||||
role="status"
|
||||
className="mb-6 rounded-lg border border-blue-200 bg-blue-50 px-4 py-3 text-sm font-medium text-blue-800"
|
||||
>
|
||||
Cotizando para {nombreCliente} — al guardar, la cotización queda vinculada a su oportunidad en Monday.
|
||||
Cotizando para {nombreCliente} — al guardar, la cotización queda ligada a su oportunidad.
|
||||
</p>
|
||||
)}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ export function urlPublicaCotizacion(id: string): string {
|
||||
return `${API_URL}/cotizaciones/${id}/publico`
|
||||
}
|
||||
|
||||
/** POST /cotizaciones — persiste y registra la oportunidad en Monday */
|
||||
/** POST /cotizaciones — persiste y liga la oportunidad del cliente */
|
||||
export async function guardarCotizacion(payload: GuardarCotizacionPayload): Promise<CotizacionGuardada> {
|
||||
const resp = await fetch(`${API_URL}/cotizaciones`, conAuth({
|
||||
method: 'POST',
|
||||
@@ -116,7 +116,7 @@ export async function getMisCotizaciones(): Promise<CotizacionGuardada[]> {
|
||||
return (await resp.json()) as CotizacionGuardada[]
|
||||
}
|
||||
|
||||
// ---------- Búsqueda de clientes en Monday (prellenado del cotizador) ----------
|
||||
// ---------- Búsqueda de clientes para el prellenado del cotizador ----------
|
||||
|
||||
export interface LeadResumen {
|
||||
id: string
|
||||
|
||||
@@ -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