homebridge-virtual-accessories
Version:
Virtual HomeKit accessories for Homebridge.
53 lines • 2.45 kB
JavaScript
/* eslint-disable curly */
import { SecuritySystemArmedMode, SecuritySystemState } from '../schema.js';
import { Utils } from '../../utils/utils.js';
/**
*
*/
export class SecuritySystemConfiguration {
defaultState;
armedModes;
armingDelay = 0;
errorFields = [];
fieldNames = Utils.proxiedPropertiesOf(this);
isValid(prefix) {
const isValidDefaultState = (Utils.required(this.defaultState) &&
SecuritySystemState.States.includes(this.defaultState) &&
this.armedModesContainsDefaultState());
const isValidArmedModes = (Utils.notEmpty(this.armedModes));
const isValidArmingDelay = (Utils.required(this.armingDelay) &&
(this.armingDelay >= 0 && this.armingDelay <= 60));
// Store fields failing validation
if (!isValidDefaultState)
this.errorFields.push(prefix + '.' + this.fieldNames.defaultState);
if (!isValidArmedModes)
this.errorFields.push(prefix + '.' + this.fieldNames.armedModes);
if (!isValidArmingDelay)
this.errorFields.push(prefix + '.' + this.fieldNames.armingDelay);
return [
(isValidDefaultState &&
isValidArmedModes &&
isValidArmingDelay),
this.errorFields,
];
}
// TODO: remove this method once ng-formworks feature 'Feature request: Implement multi select using oneOf as set of checkboxes'
// (https://github.com/zahmo/ng-formworks/issues/26) is complete
/**
* This method is necessary becasue the values for
* states are: 'disarmed', 'armedaway', 'armednight', 'armedstay'
* while values for
* armed modes are: 'Away', 'Night', 'Home'
*/
armedModesContainsDefaultState() {
let armedModesContainsDefaultState = false;
if ((this.defaultState === SecuritySystemState.ArmedAway && this.armedModes.includes(SecuritySystemArmedMode.ArmedAway)) ||
(this.defaultState === SecuritySystemState.ArmedNight && this.armedModes.includes(SecuritySystemArmedMode.ArmedNight)) ||
(this.defaultState === SecuritySystemState.ArmedStay && this.armedModes.includes(SecuritySystemArmedMode.ArmedStay)) ||
(this.defaultState === SecuritySystemState.Disarmed)) {
armedModesContainsDefaultState = true;
}
return armedModesContainsDefaultState;
}
}
//# sourceMappingURL=configurationSecuritySystem.js.map