Etapa completada (local) — widgets de Mirada Empresa
This commit is contained in:
@@ -4,21 +4,43 @@
|
||||
import type { DashboardFilters } from './dashboard-types'
|
||||
import { filtersToQuery } from './dashboard-utils'
|
||||
|
||||
async function fetchWidget<T>(widget: string, surveyId: string, filters: DashboardFilters): Promise<T> {
|
||||
async function fetchWidget<T>(
|
||||
widget: string,
|
||||
surveyId: string,
|
||||
filters: DashboardFilters,
|
||||
extra?: Record<string, string>
|
||||
): Promise<T> {
|
||||
const qs = filtersToQuery(surveyId, filters)
|
||||
const res = await fetch(`/api/dashboard/${widget}?${qs}`, { cache: 'no-store' })
|
||||
const extraQs = extra ? `&${new URLSearchParams(extra).toString()}` : ''
|
||||
const res = await fetch(`/api/dashboard/${widget}?${qs}${extraQs}`, { cache: 'no-store' })
|
||||
if (!res.ok) throw new Error(`Widget ${widget}: ${res.status}`)
|
||||
return res.json()
|
||||
}
|
||||
|
||||
// Mirada Empresa — una entrada por métrica (E1-E10 + estrella).
|
||||
export const queries = {
|
||||
kpis: (sid: string, f: DashboardFilters) => fetchWidget('kpis', sid, f),
|
||||
prevalencia: (sid: string, f: DashboardFilters) => fetchWidget('prevalencia', sid, f),
|
||||
heatmap: (sid: string, f: DashboardFilters) => fetchWidget('heatmap', sid, f),
|
||||
distribucion: (sid: string, f: DashboardFilters) => fetchWidget('distribucion', sid, f),
|
||||
apoyos: (sid: string, f: DashboardFilters) => fetchWidget('apoyos', sid, f),
|
||||
score: (sid: string, f: DashboardFilters) => fetchWidget('score', sid, f),
|
||||
piramide: (sid: string, f: DashboardFilters) => fetchWidget('piramide', sid, f),
|
||||
intensidad: (sid: string, f: DashboardFilters) => fetchWidget('intensidad', sid, f),
|
||||
saturacion: (sid: string, f: DashboardFilters) => fetchWidget('saturacion', sid, f),
|
||||
mePrevalencia: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-prevalencia', sid, f),
|
||||
meRiesgoRotacion: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-riesgo-rotacion', sid, f),
|
||||
meAusentismo: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-ausentismo', sid, f),
|
||||
mePresentismo: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-presentismo', sid, f),
|
||||
mePuntoCiego: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-punto-ciego', sid, f),
|
||||
meApoyos: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-apoyos', sid, f),
|
||||
// p_umbral_senales es parametrizable en la RPC — el widget puede pasarlo,
|
||||
// si no se pasa nada la RPC usa su propio default (2 de 3).
|
||||
meTalentoRiesgo: (sid: string, f: DashboardFilters, umbral?: number) =>
|
||||
fetchWidget('me-talento-riesgo', sid, f, umbral !== undefined ? { umbral: String(umbral) } : undefined),
|
||||
meCarreraCongelada: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-carrera-congelada', sid, f),
|
||||
meIntensidadCarga: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-intensidad-carga', sid, f),
|
||||
meSegmentacion: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-segmentacion', sid, f),
|
||||
meDisposicionRed: (sid: string, f: DashboardFilters) =>
|
||||
fetchWidget('me-disposicion-red', sid, f),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user