import { Context } from "../context/Context"; import { IRule } from "./interface/IRule"; /* * use https://www.npmjs.com/package/validatorjs */ import { ERuleTypes } from "./enum/ERuleTypes"; import { ActionParams } from "../action/type/ActionParams"; import { BaseRule } from "./base/BaseRule"; import { ChangeDeviceActionParams } from "../action/type/ChangeDeviceActionParams"; export class ChangeDeviceRules extends BaseRule implements IRule { constructor(params: ActionParams){ super(params); } /*@overwrite*/ public validate(rules: Array, context: Context): boolean { let passes : any = []; rules.forEach(rule => { switch (rule) { case ERuleTypes.IS_VALID_DEVICE: passes.push(this.isCorrectDevice(this.params)); break; } }); if(passes.every((pass : boolean) => pass == true)){ this.passes = true; return true; }else{ this.fails = true; return false; } } public isCorrectDevice(params: ActionParams): boolean { let paramsObj: ChangeDeviceActionParams = Object.assign(params); let device = paramsObj.device ? paramsObj.device : null; let data = { device_type: paramsObj.type, device_id: device ? device.deviceId : "", device_name: device ? device.label : "", }; let rules = { device_type: 'string|in:microphone,camera,playback', device_id: 'required', device_name: 'required' }; let messages = { "string.device_type":'Invalid device type', "in.device_type":'Invalid device type', "required.device_id":'Device identifier is required', "required.device_name":'Device name is required', }; return this.evaluate(data, rules, messages); } }