Informes personalizados
Usa defineReportKind para resolver payloads y devolver un arbol de presentacion pequeno.
import { z } from "zod";import { createMlRegistryPack } from "mlform/builtins";import { defineReportKind, registerDefinedReportKind } from "mlform/kit";import { resolveMappedReportPayload } from "mlform/schema";
const riskSummaryReport = defineReportKind({ kind: "risk-summary", schema: z.object({ id: z.string().optional(), kind: z.literal("risk-summary"), label: z.string().optional(), mappedTo: z.union([z.string(), z.number()]).optional(), }), resolve: ({ report, result }) => resolveMappedReportPayload(report, result, { aliases: ["old_risk_summary"], onAlias: (alias, target) => console.warn(`Alias ${alias} usado para ${target}`), }), render: { summary: ({ payload }) => ({ title: payload.label ?? "Risk", value: payload.score, tone: payload.score > 0.8 ? "danger" : "neutral", }), content: ({ payload }) => [ { type: "metric", label: "Score", value: payload.score }, { type: "list", label: "Drivers", items: payload.drivers }, ], },});
const pack = createMlRegistryPack();registerDefinedReportKind(pack.registry, pack.descriptorRegistry, riskSummaryReport);Si resolve falla, solo ese informe queda en estado error.
Los informes con fetch reciben request.reportContext con id, mappedTo resuelto, backend, modelValues, displayValues, meta del submit y salida raw. Usa eso en vez de normalizar ids:
fetch: () => ({ async submit(request) { return fetchDetails(request.reportContext?.targetKey, request.modelValues); },});