From 202d6957bc2cd98cb4c9a55d71a2ac909ff08b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Mon, 21 Jun 2021 09:41:38 +0200 Subject: [PATCH] Allow clearing values in optional selects (#9442) Co-authored-by: Bram Kragten --- src/components/ha-form/ha-form-select.ts | 54 +++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/components/ha-form/ha-form-select.ts b/src/components/ha-form/ha-form-select.ts index 5cf9dc013d..c796bc8baf 100644 --- a/src/components/ha-form/ha-form-select.ts +++ b/src/components/ha-form/ha-form-select.ts @@ -1,14 +1,19 @@ +import "@material/mwc-icon-button/mwc-icon-button"; +import { mdiClose, mdiMenuDown } from "@mdi/js"; +import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; +import "@polymer/paper-menu-button/paper-menu-button"; +import "@polymer/paper-ripple/paper-ripple"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, query } from "lit/decorators"; import { fireEvent } from "../../common/dom/fire_event"; -import "../ha-paper-dropdown-menu"; +import "../ha-svg-icon"; import { HaFormElement, HaFormSelectData, HaFormSelectSchema } from "./ha-form"; @customElement("ha-form-select") export class HaFormSelect extends LitElement implements HaFormElement { - @property() public schema!: HaFormSelectSchema; + @property({ attribute: false }) public schema!: HaFormSelectSchema; @property() public data!: HaFormSelectData; @@ -26,7 +31,33 @@ export class HaFormSelect extends LitElement implements HaFormElement { protected render(): TemplateResult { return html` - + + - + `; } @@ -57,6 +88,11 @@ export class HaFormSelect extends LitElement implements HaFormElement { return Array.isArray(item) ? item[1] || item[0] : item; } + private _clearValue(ev: CustomEvent) { + ev.stopPropagation(); + fireEvent(this, "value-changed", { value: undefined }); + } + private _valueChanged(ev: CustomEvent) { if (!ev.detail.value) { return; @@ -68,8 +104,16 @@ export class HaFormSelect extends LitElement implements HaFormElement { static get styles(): CSSResultGroup { return css` - ha-paper-dropdown-menu { + paper-menu-button { display: block; + padding: 0; + } + paper-input > mwc-icon-button { + --mdc-icon-button-size: 24px; + padding: 2px; + } + .clear-button { + color: var(--secondary-text-color); } `; }