Saltar al contenido
Curso Dashboard con Filament 5: widgets, gráficos y PDF
07/14 Dashboard: filtros, KPIs y gráficos Stats overview widget de Filament al límite: variación, icono, color y sparkline
Tu lectura Quedan 15 min
Lección 7 de 14 · Dashboard: filtros, KPIs y gráficos

Stats overview widget de Filament al límite: variación, icono, color y sparkline

15 min de lectura Laravel 13

Hola, bienvenido. El stats overview widget de Filament 5 pinta cada KPI como un Stat, y un Stat admite bastante más que un número: una descripción con su icono, un color, un icono junto a la etiqueta y una sparkline con chart(). En esta lección vamos a usar todo eso con los 4 KPIs del curso, ingresos, pedidos, ticket medio y clientes nuevos, cada uno con su variación respecto al periodo anterior y leyendo el filtro de la lección 6.

Y lo vamos a hacer sin una sola consulta en el widget: las métricas de la lección 5 ya calculan el valor, el anterior y la serie diaria, y el widget solo coloca cada dato en su sitio. Al final veremos hasta dónde llega el Stat, y lo que se queda fuera es lo que resolveremos en la lección 8.

Lo que da de sí un Stat

Un Stat se crea con Stat::make(), que recibe la etiqueta y el valor, y se completa con métodos encadenados. Cada uno de ellos tiene ya su dato en lo que construimos en la lección 5, en Kpi, en KpiResult o en Trend:

Método de Stat Qué pinta De dónde sale
make($label, $value) La etiqueta y el valor grande Kpi::label() y Kpi::format() del valor
icon() Un icono junto a la etiqueta Kpi::icon()
description() Una línea bajo el valor La variación con Format::percent() y el valor anterior
descriptionIcon() Un icono junto a la descripción Trend::icon(): flecha arriba, flecha abajo o guion
color() El color de la descripción, su icono y la sparkline Trend::color(): success, danger o gray
chart() La sparkline, con Chart.js KpiResult::$sparkline, un valor por día

Fíjate en la última columna: no hay nada que calcular. El color de la tendencia lo decide Trend, sin que el widget compare números, y el formato del valor lo decide cada Kpi, que sabe si es dinero o un recuento. Por eso el widget va a quedar en menos de 50 líneas y por eso, en la lección 8, otro widget completamente distinto va a poder pintar los mismos KPIs sin repetir ni una regla.

Lo único nuevo que necesitamos son 2 piezas pequeñas. La primera, una forma de que cada widget obtenga su Period del filtro de la página sin tocar el array de pageFilters; la segunda, el formato de la variación en porcentaje, que todavía no existe en Format. Las creamos en ese orden y después el widget, que las usa.

Lo que queda de esta lección
  1. 02El trait InteractsWithPeriod
  2. 03La variación con Format::percent()
  3. 04El widget SalesOverview
  4. 05Tests del widget con pest-plugin-livewire
  5. 06Las 4 cajas en el navegador
  6. 07Hasta dónde llega Stat
Sigue leyendo con tu suscripción El curso completo, con su proyecto final, el certificado y el foro con los planes trimestral y anual, está incluido en la suscripción. Ver los planes