-
Disarm
-
Arm Home
-
Arm Away
+
+
+
+ [[localize('ui.card.alarm_control_panel.disarm')]]
+
+
+
+
+ [[localize('ui.card.alarm_control_panel.arm_home')]]
+
+
+ [[localize('ui.card.alarm_control_panel.arm_away')]]
+
+
`;
}
@@ -61,67 +95,50 @@ class MoreInfoAlarmControlPanel extends EventsMixin(PolymerElement) {
hass: Object,
stateObj: {
type: Object,
- observer: 'stateObjChanged',
+ observer: '_stateObjChanged'
},
- enteredCode: {
+ _enteredCode: {
type: String,
- value: '',
+ value: ''
},
- numericPin: {
- type: Boolean,
- value: false,
- },
- disarmButtonVisible: {
- type: Boolean,
- value: false,
- },
- armHomeButtonVisible: {
- type: Boolean,
- value: false,
- },
- armAwayButtonVisible: {
- type: Boolean,
- value: false,
- },
- codeInputEnabled: {
- type: Boolean,
- value: false,
- },
- codeFormat: {
+ _codeFormat: {
type: String,
- value: '',
+ value: ''
},
- codeValid: {
+ _codeValid: {
type: Boolean,
- computed: 'validateCode(enteredCode, codeFormat)',
+ computed: '_validateCode(_enteredCode, _codeFormat)'
},
+ _disarmVisible: {
+ type: Boolean,
+ value: false
+ },
+ _armVisible: {
+ type: Boolean,
+ value: false
+ },
+ _inputEnabled: {
+ type: Boolean,
+ value: false
+ }
};
}
- validateCode(code, format) {
- var re = new RegExp(format);
- if (format === null) {
- return true;
- }
- return re.test(code);
+ constructor() {
+ super();
+ this._armedStates = ['armed_home', 'armed_away', 'armed_night', 'armed_custom_bypass'];
}
- stateObjChanged(newVal, oldVal) {
+ _stateObjChanged(newVal, oldVal) {
if (newVal) {
+ const state = newVal.state;
const props = {
- codeFormat: newVal.attributes.code_format,
- numericPin: newVal.attributes.code_format === '^\\d+$',
- armHomeButtonVisible: newVal.state === 'disarmed',
- armAwayButtonVisible: newVal.state === 'disarmed',
+ _codeFormat: newVal.attributes.code_format,
+ _armVisible: state === 'disarmed',
+ _disarmVisible: this._armedStates.includes(state) ||
+ state === 'pending' || state === 'triggered'
};
- props.disarmButtonVisible = (
- newVal.state === 'armed_home' ||
- newVal.state === 'armed_away' ||
- newVal.state === 'armed_night' ||
- newVal.state === 'armed_custom_bypass' ||
- newVal.state === 'pending' ||
- newVal.state === 'triggered');
- props.codeInputEnabled = props.disarmButtonVisible || newVal.state === 'disarmed';
+ props._inputEnabled = props._disarmVisible || props._armVisible;
this.setProperties(props);
}
if (oldVal) {
@@ -131,34 +148,32 @@ class MoreInfoAlarmControlPanel extends EventsMixin(PolymerElement) {
}
}
- numberPadClicked(ev) {
- this.enteredCode += ev.target.getAttribute('data-digit');
+ _isNumber(format) {
+ return format === 'Number';
}
- clearCode() {
- this.enteredCode = '';
+ _validateCode(code, format) {
+ return !format || code.length > 0;
}
- handleDisarmTap() {
- this.callService('alarm_disarm', { code: this.enteredCode });
+ _digitClicked(ev) {
+ this._enteredCode += ev.target.getAttribute('data-digit');
}
- handleHomeTap() {
- this.callService('alarm_arm_home', { code: this.enteredCode });
+ _clearEnteredCode() {
+ this._enteredCode = '';
}
- handleAwayTap() {
- this.callService('alarm_arm_away', { code: this.enteredCode });
- }
-
- callService(service, data) {
- var serviceData = data || {};
- serviceData.entity_id = this.stateObj.entity_id;
- this.hass.callService('alarm_control_panel', service, serviceData)
- .then(function () {
- this.enteredCode = '';
- }.bind(this));
+ _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);
diff --git a/src/translations/en.json b/src/translations/en.json
index f5a0191c15..d1c2f24826 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -315,6 +315,13 @@
},
"ui": {
"card": {
+ "alarm_control_panel": {
+ "code": "Code",
+ "clear_code": "Clear",
+ "disarm": "Disarm",
+ "arm_home": "Arm home",
+ "arm_away": "Arm away"
+ },
"camera": {
"not_available": "Image not available"
},