From 9ae1f01ad64c4f31b7271eee28d53ed88d0d3b3f Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Wed, 23 Feb 2022 11:51:40 -0600 Subject: [PATCH] Grid Card to HA Form (#11798) --- .../config-elements/hui-grid-card-editor.ts | 90 ++++++------------- 1 file changed, 26 insertions(+), 64 deletions(-) diff --git a/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts index 1d45bce946..49c30c100f 100644 --- a/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-grid-card-editor.ts @@ -12,8 +12,8 @@ import { string, } from "superstruct"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { computeRTLDirection } from "../../../../common/util/compute_rtl"; -import { GridCardConfig } from "../../cards/types"; +import type { HaFormSchema } from "../../../../components/ha-form/types"; +import type { GridCardConfig } from "../../cards/types"; import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import { HuiStackCardEditor } from "./hui-stack-card-editor"; @@ -27,6 +27,17 @@ const cardConfigStruct = assign( }) ); +const SCHEMA: HaFormSchema[] = [ + { + type: "grid", + name: "", + schema: [ + { name: "columns", selector: { number: { min: 1, mode: "box" } } }, + { name: "square", selector: { boolean: {} } }, + ], + }, +]; + @customElement("hui-grid-card-editor") export class HuiGridCardEditor extends HuiStackCardEditor { public setConfig(config: Readonly): void { @@ -34,80 +45,31 @@ export class HuiGridCardEditor extends HuiStackCardEditor { this._config = config; } - get _columns(): number { - return this._config!.columns || 3; - } - - get _square(): boolean { - return this._config!.square ?? true; - } - protected render(): TemplateResult { if (!this.hass || !this._config) { return html``; } + const data = { square: true, columns: 3, ...this._config }; + return html` -
-
- - - - -
-
+ ${super.render()} `; } - private _handleColumnsChanged(ev): void { - if (!this._config) { - return; - } - const value = Number(ev.target.value); - if (this._columns === value) { - return; - } - if (!ev.target.value) { - this._config = { ...this._config }; - delete this._config.columns; - } else { - this._config = { - ...this._config, - columns: value, - }; - } - fireEvent(this, "config-changed", { config: this._config }); + private _valueChanged(ev: CustomEvent): void { + fireEvent(this, "config-changed", { config: ev.detail.value }); } - private _handleSquareChanged(ev): void { - if (!this._config || this._square === ev.target.checked) { - return; - } - - fireEvent(this, "config-changed", { - config: { ...this._config, square: ev.target.checked }, - }); - } + private _computeLabelCallback = (schema: HaFormSchema) => + this.hass!.localize(`ui.panel.lovelace.editor.card.grid.${schema.name}`); } declare global {