@pilotlab/lux-tools
Version:
A luxurious user experience framework, developed by your friends at Pilot.
65 lines (42 loc) • 1.97 kB
text/typescript
import is from '@pilotlab/is';
import { Initializable } from '@pilotlab/initializable';
import { Signal } from '@pilotlab/signals';
export abstract class ActivatableBase<TActivationTarget>
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<any> = new Signal<any>();
/*====================================================================*
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;