Support for geolocation trigger (#2617)

* initial working version of geolocation trigger

* removed unused code

* removed unused code and imports

* sources now localisable

* fixed source picker to not immediately show save button after loading automation

* labels

* removed unused code

* removed unused import

* transformed source dropdown to simple edit field
This commit is contained in:
Malte Franken 2019-01-31 03:26:39 +09:30 committed by Paulus Schoutsen
parent b37eee56c0
commit b0958f589b
4 changed files with 103 additions and 0 deletions

View File

@ -0,0 +1,85 @@
import { h, Component } from "preact";
import "@polymer/paper-radio-button/paper-radio-button";
import "@polymer/paper-radio-group/paper-radio-group";
import "../../../../components/entity/ha-entity-picker";
import { onChangeEvent } from "../../../../common/preact/event";
export default class GeolocationTrigger extends Component {
constructor() {
super();
this.onChange = onChangeEvent.bind(this, "trigger");
this.zonePicked = this.zonePicked.bind(this);
this.radioGroupPicked = this.radioGroupPicked.bind(this);
}
zonePicked(ev) {
this.props.onChange(
this.props.index,
Object.assign({}, this.props.trigger, { zone: ev.target.value })
);
}
radioGroupPicked(ev) {
this.props.onChange(
this.props.index,
Object.assign({}, this.props.trigger, { event: ev.target.selected })
);
}
/* eslint-disable camelcase */
render({ trigger, hass, localize }) {
const { source, zone, event } = trigger;
return (
<div>
<paper-input
label={localize(
"ui.panel.config.automation.editor.triggers.type.geo_location.source"
)}
name="source"
value={source}
onvalue-changed={this.onChange}
/>
<ha-entity-picker
label={localize(
"ui.panel.config.automation.editor.triggers.type.geo_location.zone"
)}
value={zone}
onChange={this.zonePicked}
hass={hass}
allowCustomEntity
domainFilter="zone"
/>
<label id="eventlabel">
{localize(
"ui.panel.config.automation.editor.triggers.type.geo_location.event"
)}
</label>
<paper-radio-group
selected={event}
aria-labelledby="eventlabel"
onpaper-radio-group-changed={this.radioGroupPicked}
>
<paper-radio-button name="enter">
{localize(
"ui.panel.config.automation.editor.triggers.type.geo_location.enter"
)}
</paper-radio-button>
<paper-radio-button name="leave">
{localize(
"ui.panel.config.automation.editor.triggers.type.geo_location.leave"
)}
</paper-radio-button>
</paper-radio-group>
</div>
);
}
}
GeolocationTrigger.defaultConfig = {
source: "",
zone: "",
event: "enter",
};

View File

@ -5,6 +5,7 @@ import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox";
import EventTrigger from "./event";
import GeolocationTrigger from "./geo_location";
import HassTrigger from "./homeassistant";
import MQTTTrigger from "./mqtt";
import NumericStateTrigger from "./numeric_state";
@ -19,6 +20,7 @@ import ZoneTrigger from "./zone";
const TYPES = {
event: EventTrigger,
state: StateTrigger,
geo_location: GeolocationTrigger,
homeassistant: HassTrigger,
mqtt: MQTTTrigger,
numeric_state: NumericStateTrigger,

View File

@ -590,6 +590,14 @@
"event_type": "Event type",
"event_data": "Event data"
},
"geo_location": {
"label": "Geolocation",
"source": "Source",
"zone": "Zone",
"event": "Event:",
"enter": "Enter",
"leave": "Leave"
},
"state": {
"label": "State",
"from": "From",

View File

@ -378,6 +378,14 @@
"event_type": "Event type",
"event_data": "Event data"
},
"geo_location": {
"label": "Geolocation",
"source": "Source",
"zone": "Zone",
"event": "Event:",
"enter": "Enter",
"leave": "Leave"
},
"state": {
"label": "State",
"from": "From",