From 97f9df2f2def62afa514cd024633d6ba708d0482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 26 Feb 2021 13:47:08 +0100 Subject: [PATCH] Add toggle to show_hide optional fields in add-on config (#8430) --- .../addon-view/config/hassio-addon-config.ts | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/hassio/src/addon-view/config/hassio-addon-config.ts b/hassio/src/addon-view/config/hassio-addon-config.ts index 83e5976231..d19b490833 100644 --- a/hassio/src/addon-view/config/hassio-addon-config.ts +++ b/hassio/src/addon-view/config/hassio-addon-config.ts @@ -15,11 +15,15 @@ import { query, TemplateResult, } from "lit-element"; +import memoizeOne from "memoize-one"; import { fireEvent } from "../../../../src/common/dom/fire_event"; import "../../../../src/components/buttons/ha-progress-button"; import "../../../../src/components/ha-button-menu"; import "../../../../src/components/ha-card"; import "../../../../src/components/ha-form/ha-form"; +import type { HaFormSchema } from "../../../../src/components/ha-form/ha-form"; +import "../../../../src/components/ha-formfield"; +import "../../../../src/components/ha-switch"; import "../../../../src/components/ha-yaml-editor"; import type { HaYamlEditor } from "../../../../src/components/ha-yaml-editor"; import { @@ -48,6 +52,8 @@ class HassioAddonConfig extends LitElement { @internalProperty() private _canShowSchema = false; + @internalProperty() private _showOptional = false; + @internalProperty() private _error?: string; @internalProperty() private _options?: Record; @@ -56,7 +62,21 @@ class HassioAddonConfig extends LitElement { @query("ha-yaml-editor") private _editor?: HaYamlEditor; + private _filteredShchema = memoizeOne( + (options: Record, schema: HaFormSchema[]) => { + return schema.filter((entry) => entry.name in options || entry.required); + } + ); + protected render(): TemplateResult { + const showForm = + !this._yamlMode && this._canShowSchema && this.addon.schema; + const hasHiddenOptions = + showForm && + JSON.stringify(this.addon.schema) !== + JSON.stringify( + this._filteredShchema(this.addon.options, this.addon.schema!) + ); return html`

${this.addon.name}

@@ -78,11 +98,16 @@ class HassioAddonConfig extends LitElement {
- ${!this._yamlMode && this._canShowSchema && this.addon.schema + ${showForm ? html`` : html` Invalid YAML
`} + ${hasHiddenOptions + ? html` + + + ` + : ""}