import { Utils } from '../common/Utils';
const __ = {
private: Symbol('private'),
}
/**
* 层级控制器
* BaseLevelControl 类是一个基础层级控制类,用于管理层级的进入和退出。
* @memberof THING
* @public
*/
class BaseLevelControl {
/**
* 构造函数
* @param {object} options - 配置参数
* @param {boolean} [options.isEnabled=true] - 是否启用
*/
constructor(options = {}) {
const _private = this[__.private] = {};
_private.isRunning = false;
_private.isEnabled = Utils.parseBoolean(options['isEnabled'], true);
_private.options = options;
}
/**
* 启用
* @param {object} param - 参数
*/
enable(param) {
const _private = this[__.private];
_private.isEnabled = true;
if (_private.isRunning) {
return;
}
const current = param['current'];
if (!current) {
return;
}
const condition = _private.options['condition']
if (!current.test(condition)) {
return;
}
_private.isRunning = true;
this.onEnable(param);
}
/**
* 禁用
* @param {object} param - 参数
*/
disable(param) {
const _private = this[__.private];
if (!_private.isEnabled) {
return;
}
_private.isEnabled = false;
if (!_private.isRunning) {
return;
}
this.onDisable(param);
_private.isRunning = false;
}
/**
* 进入层级
* </br>当进入层级时调用。
* @param {object} param - 进入层级的参数。
*/
onEnter(param) {
const _private = this[__.private];
_private.isRunning = true;
}
/**
* 退出层级
* </br>当离开层级时调用。
* @param {object} param - 离开层级的参数。
*/
onLeave(param) {
const _private = this[__.private];
_private.isRunning = false;
}
/**
* 开启事件的回调
* </br>当层级没有切换,有需要切换层级控制时触发
*/
onEnable() {
}
/**
* 关闭事件的回调
* </br>当层级没有切换,有需要切换层级控制时触发
*/
onDisable() {
}
/**
* 获取是否正在运行
* @type {boolean}
*/
get isRunning() {
let _private = this[__.private];
return _private.isRunning;
}
/**
* 获取是否启用
* @type {boolean}
*/
get isEnabled() {
let _private = this[__.private];
return _private.isEnabled;
}
/**
* 获取配置参数
* @type {object}
*/
get options() {
let _private = this[__.private];
return _private.options;
}
get isBaseLevelControl() {
return true;
}
}
export { BaseLevelControl };