From b0958f589b910e5a1ceee321e221d01f3ddc80e1 Mon Sep 17 00:00:00 2001 From: Malte Franken Date: Thu, 31 Jan 2019 03:26:39 +0930 Subject: [PATCH] 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 --- src/panels/config/js/trigger/geo_location.js | 85 ++++++++++++++++++++ src/panels/config/js/trigger/trigger_edit.js | 2 + src/translations/en.json | 8 ++ translations/en.json | 8 ++ 4 files changed, 103 insertions(+) create mode 100644 src/panels/config/js/trigger/geo_location.js diff --git a/src/panels/config/js/trigger/geo_location.js b/src/panels/config/js/trigger/geo_location.js new file mode 100644 index 0000000000..1b06943633 --- /dev/null +++ b/src/panels/config/js/trigger/geo_location.js @@ -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 ( +
+ + + + + + {localize( + "ui.panel.config.automation.editor.triggers.type.geo_location.enter" + )} + + + {localize( + "ui.panel.config.automation.editor.triggers.type.geo_location.leave" + )} + + +
+ ); + } +} + +GeolocationTrigger.defaultConfig = { + source: "", + zone: "", + event: "enter", +}; diff --git a/src/panels/config/js/trigger/trigger_edit.js b/src/panels/config/js/trigger/trigger_edit.js index 12de1c3dd3..443c094a3a 100644 --- a/src/panels/config/js/trigger/trigger_edit.js +++ b/src/panels/config/js/trigger/trigger_edit.js @@ -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, diff --git a/src/translations/en.json b/src/translations/en.json index db2ae19271..e4be7b7506 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -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", diff --git a/translations/en.json b/translations/en.json index c6c37c0896..ba5ac3571d 100644 --- a/translations/en.json +++ b/translations/en.json @@ -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",