import is from '@pilotlab/is'; import { Initializable } from '@pilotlab/initializable'; import { Signal } from '@pilotlab/signals'; export abstract class ActivatableBase extends Initializable { constructor(data?:any) { super(); if (is.notEmpty(data)) this.p_initializationData = data; } /*====================================================================* START: Properties *====================================================================*/ get name():string { return 'default'; } get isActivated():boolean { return this.p_isActivated; } protected p_isActivated:boolean = false; get activationTarget():TActivationTarget { return this.p_activationTarget; } protected p_activationTarget:TActivationTarget; protected p_initializationData:any; /*====================================================================* START: Signals *====================================================================*/ activated:Signal = new Signal(); /*====================================================================* START: Methods *====================================================================*/ activate(target:TActivationTarget, ...args:any[]):void { if (is.empty(target)) return; this.p_activationTarget = target; this.p_onActivationStarted(this.p_initializationData, ...args); this.p_onActivated(this.p_initializationData, ...args); this.activated.dispatch(this.p_initializationData); this.p_isActivated = true; } deactivate(...args:any[]):void { this.p_onDeactivated(...args); this.p_isActivated = false; } protected p_onActivationStarted(data:any, ...args:any[]):void {} protected p_onActivated(data:any, ...args:any[]):void {} protected p_onDeactivated(...args:any[]):void {} } // End class export default ActivatableBase;