diff --git a/gallery/src/pages/components/ha-form.ts b/gallery/src/pages/components/ha-form.ts index fb2cec39af..4d8ad42b73 100644 --- a/gallery/src/pages/components/ha-form.ts +++ b/gallery/src/pages/components/ha-form.ts @@ -1,18 +1,18 @@ /* eslint-disable lit/no-template-arrow */ import "@material/mwc-button"; -import { LitElement, TemplateResult, html } from "lit"; +import { html, LitElement, TemplateResult } from "lit"; import { customElement, state } from "lit/decorators"; -import { computeInitialHaFormData } from "../../../../src/components/ha-form/compute-initial-ha-form-data"; -import type { HaFormSchema } from "../../../../src/components/ha-form/types"; -import "../../../../src/components/ha-form/ha-form"; -import "../../components/demo-black-white-row"; import { mockAreaRegistry } from "../../../../demo/src/stubs/area_registry"; import { mockDeviceRegistry } from "../../../../demo/src/stubs/device_registry"; import { mockEntityRegistry } from "../../../../demo/src/stubs/entity_registry"; import { mockHassioSupervisor } from "../../../../demo/src/stubs/hassio_supervisor"; +import { computeInitialHaFormData } from "../../../../src/components/ha-form/compute-initial-ha-form-data"; +import "../../../../src/components/ha-form/ha-form"; +import type { HaFormSchema } from "../../../../src/components/ha-form/types"; +import { getEntity } from "../../../../src/fake_data/entity"; import { provideHass } from "../../../../src/fake_data/provide_hass"; import { HomeAssistant } from "../../../../src/types"; -import { getEntity } from "../../../../src/fake_data/entity"; +import "../../components/demo-black-white-row"; const ENTITIES = [ getEntity("alarm_control_panel", "alarm", "disarmed", { @@ -147,7 +147,9 @@ const SCHEMAS: { { name: "target", selector: { target: {} } }, { name: "number", selector: { number: { min: 0, max: 10 } } }, { name: "boolean", selector: { boolean: {} } }, - { name: "time", selector: { time: {} } }, + { name: "time", required: true, selector: { time: {} } }, + { name: "datetime", required: true, selector: { datetime: {} } }, + { name: "date", required: true, selector: { date: {} } }, { name: "action", selector: { action: {} } }, { name: "text", selector: { text: { multiline: false } } }, { name: "text_multiline", selector: { text: { multiline: true } } }, diff --git a/src/components/ha-form/compute-initial-ha-form-data.ts b/src/components/ha-form/compute-initial-ha-form-data.ts index 7c5d728d91..b70148fa86 100644 --- a/src/components/ha-form/compute-initial-ha-form-data.ts +++ b/src/components/ha-form/compute-initial-ha-form-data.ts @@ -34,12 +34,25 @@ export const computeInitialHaFormData = ( }; } else if ("selector" in field) { const selector: Selector = field.selector; - if ("boolean" in selector) { + + if ("device" in selector) { + data[field.name] = selector.device.multiple ? [] : ""; + } else if ("entity" in selector) { + data[field.name] = selector.entity.multiple ? [] : ""; + } else if ("area" in selector) { + data[field.name] = selector.area.multiple ? [] : ""; + } else if ("boolean" in selector) { data[field.name] = false; - } else if ("text" in selector) { + } else if ( + "text" in selector || + "addon" in selector || + "attribute" in selector || + "icon" in selector || + "theme" in selector + ) { data[field.name] = ""; } else if ("number" in selector) { - data[field.name] = "min" in selector.number ? selector.number.min : 0; + data[field.name] = selector.number.min ?? 0; } else if ("select" in selector) { if (selector.select.options.length) { data[field.name] = selector.select.options[0][0]; @@ -50,6 +63,23 @@ export const computeInitialHaFormData = ( minutes: 0, seconds: 0, }; + } else if ("time" in selector) { + data[field.name] = "00:00:00"; + } else if ("date" in selector || "datetime" in selector) { + const now = new Date().toISOString().slice(0, 10); + data[field.name] = `${now} 00:00:00`; + } else if ("color_rgb" in selector) { + data[field.name] = [0, 0, 0]; + } else if ("color_temp" in selector) { + data[field.name] = selector.color_temp.min_mireds ?? 153; + } else if ( + "action" in selector || + "media" in selector || + "target" in selector + ) { + data[field.name] = {}; + } else { + throw new Error("Selector not supported in initial form data"); } } });