import type { ComponentType, ReactNode } from 'react'; /** * Contexto disponible al imprimir un documento concreto (fila o detalle). * Se construye en el punto de disparo (menú de fila o barra del detalle) y se * pasa a los resolvers de la configuración (`reportCode`, `buildParameters`, …). */ export interface PrintContext { /** Id (PK) del documento a imprimir. */ documentId: string; /** Número de documento legible (si está disponible). */ documentNumber?: string | null; /** Estado actual del documento (DRAFT, POSTED, …). */ docState?: string | null; /** Origen de la acción. */ source: 'row' | 'detail'; /** Fila cruda del listado (solo cuando `source === 'row'`). */ row?: Record; } /** * Props que el kit pasa al visor inyectado por el host. El kit nunca importa * `@siesateams/format-designer`: el host inyecta el `ReportViewer` real y el kit * solo resuelve estos valores a partir de `printing` + el `PrintContext`. */ export interface PrintViewerProps { /** = reportCode resuelto (code de la plantilla de fábrica). */ reportId: string; /** Parámetros del render. Default: `{ id: documentId }`. */ parameters: Record; apiBaseUrl: string; tenantId?: () => string | null | undefined; authToken?: () => string | null | undefined; } /** * Configuración de impresión declarada una sola vez en el `MasterDocumentProvider`. * La heredan `MasterDocumentPage`, `SmartMasterDocument` y `DocumentList`. */ export interface MasterDocumentPrintConfig { /** Activa/desactiva impresión para este MasterDocument. Default: `true`. */ enabled?: boolean; /** * Code de la plantilla de fábrica de FormatDesigner (lo que el `ReportViewer` * recibe como `reportId`). NO es el FormatSourceId. Estático o derivado del documento. */ reportCode: string | ((ctx: PrintContext) => string); /** Base URL del backend de FormatDesigner (p. ej. `${origin}/api/core/format-designer`). */ apiBaseUrl: string | (() => string); /** Parámetros del render. Default: `{ id: ctx.documentId }`. */ buildParameters?: (ctx: PrintContext) => Record; /** Resolver de tenant (se envía como header TenantId). Opcional. */ tenantId?: () => string | null | undefined; /** Resolver de token (si el visor lo requiere). Opcional. */ authToken?: () => string | null | undefined; /** * Visor inyectado por el host (evita que el kit dependa de format-designer). * Usar `viewer` (componente) o `renderViewer` (render-prop). Si se proveen * ambos, gana `renderViewer`. */ viewer?: ComponentType; renderViewer?: (props: PrintViewerProps) => ReactNode; /** Etiqueta de la acción/botón. Default: "Imprimir". */ label?: string; /** * Estilo del botón "Imprimir" de la barra del detalle. Default: `'ghost'` * (texto primary-600 #0e79fd, sin fondo) — legible por sí solo y no compite * con la acción primaria (SPEC §5.2). Alternativas: * - `'secondary'`: botón outline gris elevado (igual a "Guardar"). * - `'primary'`: botón sólido azul (úsalo solo si la impresión es la acción dominante). */ buttonVariant?: 'primary' | 'secondary' | 'ghost'; /** Título del modal. Default: `Imprimir — {identity.label}`. */ title?: (ctx: PrintContext) => string; /** * Habilita la impresión por documento/estado. Default: imprimible si el * documento tiene `id` (ya está guardado). Útil para ocultar impresión en * borradores, por ejemplo. */ canPrint?: (ctx: PrintContext) => boolean; /** * Mensaje amigable que se muestra al hacer clic en Imprimir cuando la impresión * está habilitada pero el backend/visor AÚN no está configurado. * Default: "La función de impresión de este documento aún no está implementada." */ notConfiguredMessage?: string; } /** * API imperativa expuesta por contexto. Tanto el menú de fila como el botón del * detalle la consumen: `isPrintAvailable` decide si la acción se MUESTRA (regla a) * y `openPrint` abre el modal único (la regla b — backend configurado — la evalúa * el host al abrir). */ export interface MasterDocumentPrintApi { /** Abre el modal de impresión para el documento del contexto dado. */ openPrint: (ctx: PrintContext) => void; /** * `true` si la acción debe MOSTRARSE (habilitada + documento guardado + canPrint). * No implica que el backend esté configurado; eso lo evalúa `openPrint`. */ isPrintAvailable: (ctx: PrintContext) => boolean; /** Etiqueta resuelta de la acción/botón (default "Imprimir"). */ label: string; /** Variante resuelta del botón del detalle (default `'ghost'`). */ buttonVariant: 'primary' | 'secondary' | 'ghost'; } //# sourceMappingURL=MasterDocumentPrinting.types.d.ts.map