Fichero

libs/suspense/types/suspenseable-broadcaster.ts

Descripción

Definición de clase abstracta para la implementación de un componente Suspenseable cuya operación de en modo "reactivo", es decir basada en la captura de eventos que indiquen cuando el componente está listo para ser desplegado o cuando se ha producido un error. Sólo fuerza la definición del método eventHandler(), que debe definir el nombre del evento a capturar.

Modo reactivo

El componente se despliega una vez recibido el evento <eventName>:load:

<suspense>
 <ng-template [defaultView]="compFactory" [componentParams]="compParams" clazzName="CompComponent" onEvent="comp"></ng-template>

 <ng-template fallbackView><qp-suspense-spinner>Cargando Comp...</qp-suspense-spinner></ng-template>
 <ng-template errorView><qp-suspense-error>Falló carga de Comp</qp-suspense-error></ng-template>
</suspense>

El nombre del evento debe ser el mismo que el nombre del componente SuspenseableBroadcaster, sin el sufijo "Component"; y debe ser indicado como el @Input() onEvent del componente. Si se especifica onEvent con algún error, el componente no se desplegará y el mensaje de error indicará la corrección a realizar. En este modo, una vez que el componente realice las operaciones que lo disponibilizan para ser desplegado, se deberá incluir la correspondiente llamada al método this.broadcastLoad(). Análogamente, en caso de error se deberá llamar al método this.broadcastError().

Extiende

SuspenseableRenderer

Implementa

Pick

Índice

Propiedades
Métodos

Propiedades

Opcional eventName
Tipo : string

Nombre del evento a capturar, en caso de operar en modo "reactivo"

eventService
Tipo : EventService
Valor por defecto : inject(EVENT_SERVICE)

Servicio de eventos, requerido para el modo de operación "reactivo"

defaultDisplay
Tipo : string
Valor por defecto : 'inherit'
Heredado desde SuspenseableRenderer
elementRef
Tipo : ElementRef
Valor por defecto : inject(ElementRef)
Heredado desde SuspenseableRenderer
platformId
Tipo : Object
Valor por defecto : inject(PLATFORM_ID)
Heredado desde SuspenseableRenderer
renderer
Tipo : Renderer2
Valor por defecto : inject(Renderer2)
Heredado desde SuspenseableRenderer

Métodos

broadcastError
broadcastError()
Devuelve : void
broadcastLoad
broadcastLoad()
Devuelve : void
Abstract eventHandler
eventHandler(eventName: string)
Parámetros :
Nombre Tipo Opcional
eventName string No
Devuelve : void
renderComponenteReady
renderComponenteReady()
Heredado desde SuspenseableRenderer

En caso que la operación sea desde dentro de un browser, se cambia el valor de display a su valor inicial; de esa manera se despliega el componente (asumiendo un estado listo para ser desplegado).

Devuelve : void
import { inject } from "@angular/core";
import { EventService } from "@queplan/qp-suspense/services";
import { EVENT_SERVICE, ISuspenseable, SuspenseableRenderer } from "./types";

/**
 * Definición de clase abstracta para la implementación de un componente Suspenseable
 * cuya operación de en modo "reactivo", es decir basada en la captura de eventos que indiquen
 * cuando el componente está listo para ser desplegado o cuando se ha producido un error.
 * Sólo fuerza la definición del método `eventHandler()`, que debe definir el nombre del evento
 * a capturar.
 * 
 * Modo reactivo 
 * ----------------
 * 
 * El componente se despliega una vez recibido el evento `<eventName>:load`:
 * 
 * ```
 * <suspense>
 *  <ng-template [defaultView]="compFactory" [componentParams]="compParams" clazzName="CompComponent" onEvent="comp"></ng-template>
 * 
 *  <ng-template fallbackView><qp-suspense-spinner>Cargando Comp...</qp-suspense-spinner></ng-template>
 *  <ng-template errorView><qp-suspense-error>Falló carga de Comp</qp-suspense-error></ng-template>
 * </suspense>
 * ```
 * 
 * El nombre del evento debe ser el mismo que el nombre del componente SuspenseableBroadcaster, sin el sufijo "Component";
 * y debe ser indicado como el @Input() `onEvent` del componente.  
 * Si se especifica onEvent con algún error, el componente no se desplegará y el mensaje de error indicará la corrección a realizar.
 * En este modo, una vez que el componente realice las operaciones que lo disponibilizan para ser desplegado, se deberá incluir la 
 * correspondiente llamada al método `this.broadcastLoad()`.  
 * Análogamente, en caso de error se deberá llamar al método `this.broadcastError()`.
 */
export abstract class SuspenseableBroadcaster extends SuspenseableRenderer implements Pick<ISuspenseable, 'eventHandler' | 'broadcastLoad' | 'broadcastError'> {
  /**
   * Servicio de eventos, requerido para el modo de operación "reactivo"
   */
  eventService : EventService = inject(EVENT_SERVICE);

  /**
   * Nombre del evento a capturar, en caso de operar en modo "reactivo"
   */
  eventName   ?: string;
  
  abstract eventHandler(eventName: string): void;

  broadcastLoad(): void {
    /**
     * Sólo notifica el estado en caso de  estar operando en modo "reactivo"
     */
    if (this.eventName) {   
      this.renderComponenteReady();   
      this.eventService.broadcast(`${this.eventName}:load`, true);
    } else {
      throw new Error('Usando modo reactivo sin haber defido el nombre del evento. Verifique implementación de eventHandler()');
    }
  }

  broadcastError(): void {
    /**
     * Sólo notifica el estado en caso de  estar operando en modo "reactivo"
     */    
    if (this.eventName) {
      this.renderComponenteReady();
      this.eventService.broadcast(`${this.eventName}:error`, true);
    } else {
      throw new Error('Usando modo reactivo sin haber defido el nombre del evento. Verifique implementación de eventHandler()');
    }
  }
  
}

comparación de resultados ""

    No hay resultados que coincidan ""