Merge pull request #8 from persandstrom/master

Alarm control panel: support code format
This commit is contained in:
Paulus Schoutsen 2015-09-25 15:20:51 -07:00
commit 8c317b4c27
2 changed files with 44 additions and 17 deletions

View File

@ -6,12 +6,12 @@
<dom-module id='more-info-alarm_control_panel'>
<template>
<div class='layout horizontal'>
<paper-input label='code' value='[[entered_code]]' pattern='[0-9]*' type='password' on-change='enteredCodeChanged'></paper-input>
<paper-input label='code' value='{{enteredCode}}' pattern='[[codeFormat]]' type='password' hidden='[[!codeInputVisible]]' disabled='[[!codeInputEnabled]]'></paper-input>
</div>
<div class='layout horizontal'>
<paper-button on-tap='handleDisarmTap' hidden$='[[!disarm_button_enabled]]'>Disarm</paper-button>
<paper-button on-tap='handleHomeTap' hidden$='[[!arm_home_button_enabled]]'>Arm Home</paper-button>
<paper-button on-tap='handleAwayTap' hidden$='[[!arm_away_button_enabled]]'>Arm Away</paper-button>
<paper-button on-tap='handleDisarmTap' hidden='[[!disarmButtonVisible]]' disabled='[[!codeValid]]'>Disarm</paper-button>
<paper-button on-tap='handleHomeTap' hidden='[[!armHomeButtonVisible]]' disabled=[[!codeValid]]>Arm Home</paper-button>
<paper-button on-tap='handleAwayTap' hidden='[[!armAwayButtonVisible]]' disabled='[[!codeValid]]'>Arm Away</paper-button>
</div>
</template>
</dom-module>

View File

@ -5,46 +5,73 @@ import Polymer from '../polymer';
export default new Polymer({
is: 'more-info-alarm_control_panel',
handleDisarmTap() {
this.callService('alarm_disarm', {code: this.entered_code});
this.callService('alarm_disarm', {code: this.enteredCode});
},
handleHomeTap() {
this.callService('alarm_arm_home', {code: this.entered_code});
this.callService('alarm_arm_home', {code: this.enteredCode});
},
handleAwayTap() {
this.callService('alarm_arm_away', {code: this.entered_code});
this.callService('alarm_arm_away', {code: this.enteredCode});
},
properties: {
stateObj: {
type: Object,
observer: 'stateObjChanged',
},
entered_code: {
enteredCode: {
type: String,
value: '',
},
disarm_button_enabled: {
disarmButtonVisible: {
type: Boolean,
value: false,
},
arm_home_button_enabled: {
armHomeButtonVisible: {
type: Boolean,
value: false,
},
arm_away_button_enabled: {
armAwayButtonVisible: {
type: Boolean,
value: false,
},
codeInputVisible: {
type: Boolean,
value: false,
},
enteredCodeChanged(ev) {
this.entered_code = ev.target.value;
codeInputEnabled: {
type: Boolean,
value: false,
},
codeFormat: {
type: String,
value: '',
},
codeValid: {
type: Boolean,
computed: 'validateCode(enteredCode, codeFormat)',
},
},
validateCode(code, format) {
const re = new RegExp(format);
if (format === null) {
return true;
}
return re.test(code);
},
stateObjChanged(newVal) {
if (newVal) {
this.disarm_button_enabled = newVal.state === 'armed_home' || newVal.state === 'armed_away';
this.arm_home_button_enabled = newVal.state === 'disarmed';
this.arm_away_button_enabled = newVal.state === 'disarmed';
this.codeFormat = newVal.attributes.code_format;
this.codeInputVisible = this.codeFormat !== null;
this.codeInputEnabled = (
newVal.state === 'armed_home' ||
newVal.state === 'armed_away' ||
newVal.state === 'disarmed');
this.disarmButtonVisible = (
newVal.state === 'armed_home' ||
newVal.state === 'armed_away');
this.armHomeButtonVisible = newVal.state === 'disarmed';
this.armAwayButtonVisible = newVal.state === 'disarmed';
}
this.async(() => this.fire('iron-resize'), 500);
},
callService(service, data) {