From fe4811b2780940a0b76535892f0fef3e9d2db2dd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 31 May 2019 15:51:12 -0700 Subject: [PATCH 1/3] Allow saving unit system (#3235) --- src/onboarding/onboarding-core-config.ts | 12 +++++++++++- src/panels/config/core/ha-config-core-form.ts | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/onboarding/onboarding-core-config.ts b/src/onboarding/onboarding-core-config.ts index bdba99a0c6..65c4841e59 100644 --- a/src/onboarding/onboarding-core-config.ts +++ b/src/onboarding/onboarding-core-config.ts @@ -142,7 +142,11 @@ class OnboardingCoreConfig extends LitElement { "ui.panel.config.core.section.core.core_config.unit_system" )} - + ${this.hass.localize( "ui.panel.config.core.section.core.core_config.unit_system_metric" @@ -238,6 +242,12 @@ class OnboardingCoreConfig extends LitElement { this[`_${target.name}`] = target.value; } + private _unitSystemChanged( + ev: PolymerChangedEvent + ) { + this._unitSystem = ev.detail.value; + } + private async _detect() { this._working = true; try { diff --git a/src/panels/config/core/ha-config-core-form.ts b/src/panels/config/core/ha-config-core-form.ts index 6d363fc4b6..94d25fed73 100644 --- a/src/panels/config/core/ha-config-core-form.ts +++ b/src/panels/config/core/ha-config-core-form.ts @@ -129,7 +129,11 @@ class ConfigCoreForm extends LitElement { "ui.panel.config.core.section.core.core_config.unit_system" )} - + ${this.hass.localize( "ui.panel.config.core.section.core.core_config.unit_system_metric" @@ -209,6 +213,12 @@ class ConfigCoreForm extends LitElement { this[`_${target.name}`] = target.value; } + private _unitSystemChanged( + ev: PolymerChangedEvent + ) { + this._unitSystem = ev.detail.value; + } + private async _save() { this._working = true; try { From be4dd5b20bb3eb173dcff3b842f32a18969cd845 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 31 May 2019 21:26:47 -0700 Subject: [PATCH 2/3] Fix Google manage entity button on small screens (#3234) --- src/panels/config/cloud/cloud-google-pref.ts | 8 ++++++-- src/panels/config/cloud/cloud-remote-pref.ts | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/panels/config/cloud/cloud-google-pref.ts b/src/panels/config/cloud/cloud-google-pref.ts index 628d524704..03ed8031ed 100644 --- a/src/panels/config/cloud/cloud-google-pref.ts +++ b/src/panels/config/cloud/cloud-google-pref.ts @@ -99,6 +99,7 @@ export class CloudGooglePref extends LitElement { > Sync entities to Google +
Manage Entities @@ -151,11 +152,14 @@ export class CloudGooglePref extends LitElement { paper-input { width: 200px; } + .card-actions { + display: flex; + } .card-actions a { text-decoration: none; } - .card-actions mwc-button { - float: right; + .spacer { + flex-grow: 1; } `; } diff --git a/src/panels/config/cloud/cloud-remote-pref.ts b/src/panels/config/cloud/cloud-remote-pref.ts index 140be2c388..46ccd45290 100644 --- a/src/panels/config/cloud/cloud-remote-pref.ts +++ b/src/panels/config/cloud/cloud-remote-pref.ts @@ -127,6 +127,9 @@ export class CloudRemotePref extends LitElement { .card-actions { display: flex; } + .card-actions a { + text-decoration: none; + } .spacer { flex-grow: 1; } From be6b25f5be3e5c0c78608fd5937fd1da0720eb35 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 1 Jun 2019 14:23:32 -0700 Subject: [PATCH 3/3] Google Entities updates (#3237) * Match Google Expose default with backend for when no config value set * Allow toggling domains --- .../domain-toggler/dialog-domain-toggler.ts | 97 +++++++++++++++++++ .../show-dialog-domain-toggler.ts | 20 ++++ .../cloud/ha-config-cloud-google-assistant.ts | 50 ++++++++-- src/panels/config/cloud/ha-config-cloud.ts | 2 + src/panels/config/ha-panel-config.ts | 2 + 5 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 src/dialogs/domain-toggler/dialog-domain-toggler.ts create mode 100644 src/dialogs/domain-toggler/show-dialog-domain-toggler.ts diff --git a/src/dialogs/domain-toggler/dialog-domain-toggler.ts b/src/dialogs/domain-toggler/dialog-domain-toggler.ts new file mode 100644 index 0000000000..8a8d7ddd67 --- /dev/null +++ b/src/dialogs/domain-toggler/dialog-domain-toggler.ts @@ -0,0 +1,97 @@ +import { + customElement, + LitElement, + property, + CSSResultArray, + css, + TemplateResult, + html, +} from "lit-element"; +import "../../components/dialog/ha-paper-dialog"; +import { HomeAssistant } from "../../types"; +import { HaDomainTogglerDialogParams } from "./show-dialog-domain-toggler"; +import { PolymerChangedEvent } from "../../polymer-types"; +import { haStyleDialog } from "../../resources/styles"; + +@customElement("dialog-domain-toggler") +class DomainTogglerDialog extends LitElement { + public hass!: HomeAssistant; + @property() private _params?: HaDomainTogglerDialogParams; + + public async showDialog(params: HaDomainTogglerDialogParams): Promise { + this._params = params; + } + + protected render(): TemplateResult | void { + if (!this._params) { + return html``; + } + + const domains = this._params.domains + .map((domain) => [this.hass.localize(`domain.${domain}`), domain]) + .sort(); + + return html` + +

Toggle Domains

+
+ ${domains.map( + (domain) => + html` +
${domain[0]}
+ + ${this.hass.localize("state.default.off")} + + + ${this.hass.localize("state.default.on")} + + ` + )} +
+
+ `; + } + + private _openedChanged(ev: PolymerChangedEvent): void { + // Closed dialog by clicking on the overlay + if (!ev.detail.value) { + this._params = undefined; + } + } + + private _handleOff(ev) { + this._params!.toggleDomain(ev.currentTarget.domain, false); + ev.currentTarget.blur(); + } + + private _handleOn(ev) { + this._params!.toggleDomain(ev.currentTarget.domain, true); + ev.currentTarget.blur(); + } + + static get styles(): CSSResultArray { + return [ + haStyleDialog, + css` + ha-paper-dialog { + max-width: 500px; + } + div { + display: grid; + grid-template-columns: auto auto auto; + align-items: center; + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "dialog-domain-toggler": DomainTogglerDialog; + } +} diff --git a/src/dialogs/domain-toggler/show-dialog-domain-toggler.ts b/src/dialogs/domain-toggler/show-dialog-domain-toggler.ts new file mode 100644 index 0000000000..e97c54354e --- /dev/null +++ b/src/dialogs/domain-toggler/show-dialog-domain-toggler.ts @@ -0,0 +1,20 @@ +import { fireEvent } from "../../common/dom/fire_event"; + +export interface HaDomainTogglerDialogParams { + domains: string[]; + toggleDomain: (domain: string, turnOn: boolean) => void; +} + +export const loadDomainTogglerDialog = () => + import(/* webpackChunkName: "dialog-domain-toggler" */ "./dialog-domain-toggler"); + +export const showDomainTogglerDialog = ( + element: HTMLElement, + dialogParams: HaDomainTogglerDialogParams +): void => { + fireEvent(element, "show-dialog", { + dialogTag: "dialog-domain-toggler", + dialogImport: loadDomainTogglerDialog, + dialogParams, + }); +}; diff --git a/src/panels/config/cloud/ha-config-cloud-google-assistant.ts b/src/panels/config/cloud/ha-config-cloud-google-assistant.ts index 9856be59f1..cc0f799a19 100644 --- a/src/panels/config/cloud/ha-config-cloud-google-assistant.ts +++ b/src/panels/config/cloud/ha-config-cloud-google-assistant.ts @@ -8,6 +8,7 @@ import { property, } from "lit-element"; import "@polymer/paper-toggle-button"; +import "@polymer/paper-icon-button"; import "../../../layouts/hass-subpage"; import "../../../layouts/hass-loading-screen"; import "../../../components/ha-card"; @@ -33,12 +34,21 @@ import computeStateName from "../../../common/entity/compute_state_name"; import { fireEvent } from "../../../common/dom/fire_event"; import { showToast } from "../../../util/toast"; import { PolymerChangedEvent } from "../../../polymer-types"; +import { showDomainTogglerDialog } from "../../../dialogs/domain-toggler/show-dialog-domain-toggler"; +import computeDomain from "../../../common/entity/compute_domain"; + +const DEFAULT_CONFIG_EXPOSE = true; + +const configIsExposed = (config: GoogleEntityConfig) => + config.should_expose === undefined + ? DEFAULT_CONFIG_EXPOSE + : config.should_expose; @customElement("ha-config-cloud-google-assistant") class CloudGoogleAssistant extends LitElement { @property() public hass!: HomeAssistant; @property() public cloudStatus!: CloudStatusLoggedIn; - @property() public isWide!: boolean; + @property() public narrow!: boolean; @property() private _entities?: GoogleEntity[]; @property() private _entityConfigs: CloudPreferences["google_entity_configs"] = {}; @@ -69,7 +79,7 @@ class CloudGoogleAssistant extends LitElement { const stateObj = this.hass.states[entity.entity_id]; const config = this._entityConfigs[entity.entity_id] || {}; const isExposed = emptyFilter - ? Boolean(config.should_expose) + ? configIsExposed(config) : filterFunc(entity.entity_id); if (isExposed) { selected++; @@ -114,7 +124,18 @@ class CloudGoogleAssistant extends LitElement { return html` - ${selected} selected + + ${selected}${!this.narrow + ? html` + selected + ` + : ""} + + ${!emptyFilter ? html`