Volver al manual
Informes 7 min Propietario y administradores

Widgets con código propio (HTML, CSS y JavaScript)

Los ocho tipos de gráfico cubren casi todo. Cuando lo que tienes en la cabeza no es ninguno de ellos —un semáforo, una tarjeta con tu marca, una tabla con formato propio, un indicador con forma de medidor— puedes escribirlo tú.

Cuándo usarlo

La regla honesta: si un widget normal lo hace, usa el widget normal. Es más rápido de montar, se entiende sin abrir nada y no depende de que alguien mantenga ese código. El de código propio es para lo que de verdad no encaja.

Casos donde compensa:

  • Un panel para colgar en una pantalla del local, con tu tipografía y tus colores.
  • Un semáforo: verde si la tasa de asistencia supera el 80 %, rojo si baja del 60 %.
  • Una tabla con formato condicional, resaltando lo que se sale de lo normal.
  • Un texto que redacte el número en una frase, para quien no lee gráficos.

Cómo funciona

Se elige el tipo «código», se define la consulta igual que en cualquier otro widget —medidas, dimensiones, filtros— y luego se escribe el HTML, el CSS y el JavaScript que la dibujan.

Dibuja distinto; no consigue los datos distinto

Un widget de código está obligado a traer su consulta con al menos una medida. Eso es lo que impide que «personalizado» acabe significando «sin control»: el acotado a tu empresa, las relaciones aprobadas y los topes siguen en medio, porque el camino a los datos es el mismo que el de todos los demás.

Las plantillas de arranque

No hace falta empezar de cero. El editor trae siete puntos de partida, y en el panel se llaman así:

  • En blanco — el esqueleto mínimo, para partir de cero con la estructura ya puesta.
  • Tarjeta grande — un número destacado con su etiqueta.
  • Ranking con barras — el top de una dimensión, ordenado.
  • Medidor — un valor sobre un objetivo.
  • Barras de progreso — varias categorías con su avance.
  • Tabla con semáforo — filas con formato condicional por color.
  • SVG a medida — un dibujo propio que se redibuja al cambiar de tamaño.

Se cargan, se cambian los textos y ya está.

Cómo llegan los datos

Tu código recibe un objeto ctx con el resultado de la consulta, el tamaño del widget y la versión del entorno. Lo básico es leer las filas y pintarlas:

javascript
const filas = ctx.data.rows;
const total = filas.reduce((suma, f) => suma + f.revenue, 0);

document.getElementById('total').textContent =
  new Intl.NumberFormat('es-PE').format(total / 100);

Cuando cambian los datos o el tamaño

El widget avisa cuando llegan datos nuevos —al cambiar el periodo, por ejemplo— y cuando alguien lo redimensiona en el lienzo:

javascript
ctx.on('update', () => dibujar());
ctx.on('resize', () => dibujar());

Qué NO puede hacer, y por qué

El widget corre aislado. No es una restricción de configuración: es el muro que permite que un informe con código escrito por una persona lo pueda mirar todo el equipo sin riesgo.

  • No accede a la red. Ni a nuestra API, ni a una externa. No puede pedir datos ni enviarlos.
  • No ve tu sesión. No alcanza las cookies del panel ni la página que lo contiene.
  • No puede abrir ventanas ni avisos del navegador. Para depurar están los mensajes de consola, que el editor te enseña.
  • No carga librerías externas. Consecuencia directa de lo primero.

Un bucle infinito congela la pestaña

Esto conviene decirlo claro: si tu código entra en un bucle sin fin, se bloquea la pestaña entera, no solo el widget. No hay forma de que el panel te ofrezca cerrarlo, porque él también se queda parado. Se soluciona cerrando la pestaña y volviendo a entrar; el informe no se rompe. Para el resto de fallos —un error al arrancar, un widget que no carga— sí hay un botón para cerrarlo y seguir usando el informe.

Los topes

  • 8.000 caracteres de HTML y 8.000 de CSS.
  • 20.000 caracteres de JavaScript.
  • 120.000 caracteres de código sumando todos los widgets de un informe.

Dan de sobra para un widget bien escrito. Si te quedas corto, casi siempre es que el widget está haciendo trabajo que le correspondería a la consulta: agrupar, filtrar o calcular en JavaScript lo que el explorador ya sabe hacer.

Monta tu primer flujo en una tarde

Conecta tu número de WhatsApp, arma el flujo con botones y listas, y publícalo. Sin código y sin depender de nadie.

  • 7 días gratis, sin tarjeta
  • Cancela desde tu panel
  • Credenciales cifradas