/** * createPageState — helper estándar para el patrón loading/error/data de una * página con datos remotos (HTTP o Firestore one-shot). * * Encapsula el boilerplate repetido en cada vista: * - `loading` signal (true mientras carga o recarga). * - `loadError` signal (el error crudo o null). * - `errorState` computed que convierte el error a `EmptyStateMetadata` listo * para ``, reactivo al idioma. * - `reload()` function que re-ejecuta el `loader` async. * * El caller controla el template; `createPageState` solo maneja el estado: * * ```ts * readonly page = createPageState( * this.i18n, * async () => { * const res = await firstValueFrom(this.svc.getData()); * this.items.set(res.items); * }, * { errorTitle: () => this.t('errorTitle'), retryLabel: () => this.t('retry') } * ); * ``` * * Template: * ```html * @if (page.loading()) { } * @else if (page.errorState(); as e) { } * @else { } * ``` * * El helper llama a `reload()` automáticamente al construirse (carga inicial), * igual que el patrón clásico `void this.load()` en el constructor. * Para deshabilitar la carga automática, pasar `{ autoLoad: false }`. * * Para pull-to-refresh usar `connectPageRefresh(() => page.reload())` como siempre. */ import { EmptyStateMetadata } from '../../components/molecules/empty-state/types'; import { I18nService } from '../i18n'; /** Labels i18n para el empty-state de error. Funciones para ser reactivas. */ export interface PageStateLabels { errorTitle?: () => string; offlineTitle?: () => string; offlineHint?: () => string; retryLabel?: () => string; /** Descripción del error (default: mensaje del backend). */ errorDescription?: (err: unknown) => string; } /** Objeto retornado por `createPageState`. */ export interface PageState { /** true mientras el loader está en curso. */ readonly loading: () => boolean; /** Error crudo del último intento (null si fue exitoso). */ readonly loadError: () => unknown | null; /** * Props para `` — null si no hay error. * Reactivo al idioma (llama `i18n.lang()` internamente). */ readonly errorState: () => EmptyStateMetadata | null; /** Re-ejecuta el loader (sets loading=true, limpia error). */ reload(): Promise; } /** * Crea el estado de carga de una página. * * @param i18n - `I18nService` inyectado en la page (para reactividad al idioma). * @param loader - función async que carga los datos y los siembra en signals * propias de la page. Si lanza, el error se captura en `loadError`. * @param labels - labels i18n opcionales. Si se omiten usa defaults genéricos. * @param options - `autoLoad`: si false no carga al construirse (default true). */ export declare function createPageState(i18n: I18nService, loader: () => Promise, labels?: PageStateLabels, options?: { autoLoad?: boolean; }): PageState;