API: - GET /api/monday/usuarios: usuarios activos no-guest del workspace - PATCH /api/usuarios/me/monday: vincula/desvincula el mondayUserId del usuario autenticado (valida contra el workspace) - GET /api/leads/buscar?q=: búsqueda de leads por nombre/teléfono/email (sin acentos, orden updatedAt desc, límite 15) - aPublico/me ahora incluyen mondayUserId Landing (/): - Nueva sección 'Configuración de cuenta': login inline, selector del usuario de Monday, guardar/desvincular, cerrar sesión Alta de clientes (/client): - Búsqueda de leads de Monday con debounce en la pantalla de entrada; al elegir uno prellena nombre/email/celular y guarda leadMondayId - El picker (borradores + alta nueva + búsqueda de lead) es ahora siempre la pantalla de entrada Tests: api 294, landing 8, alta-clientes 96 — todos verdes
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import { MODULOS } from './data/modulos'
|
|
import { TarjetaModulo } from './components/TarjetaModulo'
|
|
import { ConfiguracionCuenta } from './components/ConfiguracionCuenta'
|
|
|
|
export default function App() {
|
|
return (
|
|
<div className="flex min-h-screen flex-col">
|
|
<header className="px-6 pt-20 pb-16 sm:px-12 lg:px-24">
|
|
<p className="text-xs font-bold tracking-widest text-accent uppercase">FRASA Desarrollos</p>
|
|
<h1 className="mt-4 text-4xl font-light text-neutral-900 sm:text-5xl">
|
|
Ecosistema comercial
|
|
</h1>
|
|
</header>
|
|
|
|
<main className="flex-1 px-6 sm:px-12 lg:px-24">
|
|
<nav aria-label="Módulos del ecosistema">
|
|
<ul className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
|
|
{MODULOS.map((modulo) => (
|
|
<TarjetaModulo key={modulo.id} modulo={modulo} />
|
|
))}
|
|
</ul>
|
|
</nav>
|
|
|
|
<ConfiguracionCuenta />
|
|
</main>
|
|
|
|
<footer className="px-6 pt-24 pb-10 sm:px-12 lg:px-24">
|
|
<p className="text-xs text-neutral-400">Consult (AS) Technology</p>
|
|
</footer>
|
|
</div>
|
|
)
|
|
}
|