import '@polymer/iron-flex-layout/iron-flex-layout-classes.js'; import '@polymer/paper-button/paper-button.js'; import '@polymer/paper-input/paper-input.js'; import { html } from '@polymer/polymer/lib/utils/html-tag.js'; import { PolymerElement } from '@polymer/polymer/polymer-element.js'; import EventsMixin from '../../../mixins/events-mixin.js'; import LocalizeMixin from '../../../mixins/localize-mixin.js'; class MoreInfoAlarmControlPanel extends LocalizeMixin(EventsMixin(PolymerElement)) { static get template() { return html`
`; } static get properties() { return { hass: Object, stateObj: { type: Object, observer: '_stateObjChanged' }, _enteredCode: { type: String, value: '' }, _codeFormat: { type: String, value: '' }, _codeValid: { type: Boolean, computed: '_validateCode(_enteredCode, _codeFormat)' }, _disarmVisible: { type: Boolean, value: false }, _armVisible: { type: Boolean, value: false }, _inputEnabled: { type: Boolean, value: false } }; } constructor() { super(); this._armedStates = ['armed_home', 'armed_away', 'armed_night', 'armed_custom_bypass']; } _stateObjChanged(newVal, oldVal) { if (newVal) { const state = newVal.state; const props = { _codeFormat: newVal.attributes.code_format, _armVisible: state === 'disarmed', _disarmVisible: this._armedStates.includes(state) || state === 'pending' || state === 'triggered' }; props._inputEnabled = props._disarmVisible || props._armVisible; this.setProperties(props); } if (oldVal) { setTimeout(() => { this.fire('iron-resize'); }, 500); } } _isNumber(format) { return format === 'Number'; } _validateCode(code, format) { return !format || code.length > 0; } _digitClicked(ev) { this._enteredCode += ev.target.getAttribute('data-digit'); } _clearEnteredCode() { this._enteredCode = ''; } _callService(ev) { const service = ev.target.getAttribute('data-service'); const data = { entity_id: this.stateObj.entity_id, code: this._enteredCode }; this.hass.callService('alarm_control_panel', service, data) .then(() => { this._enteredCode = ''; }); } } customElements.define('more-info-alarm_control_panel', MoreInfoAlarmControlPanel);