From 480448acbb4ec867874204a09b90face0bb14b93 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Wed, 27 Mar 2024 08:53:53 +0100 Subject: [PATCH] Add maximum number of columns option for section view (#20145) * Add maximum number of columns option for section view * Add comment --- src/data/lovelace/config/view.ts | 1 + .../editor/view-editor/hui-view-editor.ts | 32 +++++++++++++++++-- .../lovelace/views/hui-sections-view.ts | 9 ++++-- src/translations/en.json | 1 + 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/data/lovelace/config/view.ts b/src/data/lovelace/config/view.ts index 10b454c15d..4db1b1ff99 100644 --- a/src/data/lovelace/config/view.ts +++ b/src/data/lovelace/config/view.ts @@ -18,6 +18,7 @@ export interface LovelaceBaseViewConfig { visible?: boolean | ShowViewConfig[]; subview?: boolean; back_path?: string; + max_columns?: number; // Only used for section view, it should move to a section view config type when the views will have dedicated editor. } export interface LovelaceViewConfig extends LovelaceBaseViewConfig { diff --git a/src/panels/lovelace/editor/view-editor/hui-view-editor.ts b/src/panels/lovelace/editor/view-editor/hui-view-editor.ts index b22dc61d68..f38b6c6e6e 100644 --- a/src/panels/lovelace/editor/view-editor/hui-view-editor.ts +++ b/src/panels/lovelace/editor/view-editor/hui-view-editor.ts @@ -37,7 +37,7 @@ export class HuiViewEditor extends LitElement { private _suggestedPath = false; private _schema = memoizeOne( - (localize: LocalizeFunc) => + (localize: LocalizeFunc, viewType: string) => [ { name: "title", selector: { text: {} } }, { @@ -68,6 +68,20 @@ export class HuiViewEditor extends LitElement { }, }, }, + ...(viewType === SECTION_VIEW_LAYOUT + ? ([ + { + name: "max_columns", + selector: { + number: { + min: 1, + max: 10, + mode: "slider", + }, + }, + }, + ] as const satisfies HaFormSchema[]) + : []), { name: "subview", selector: { @@ -95,13 +109,17 @@ export class HuiViewEditor extends LitElement { return nothing; } - const schema = this._schema(this.hass.localize); + const schema = this._schema(this.hass.localize, this._type); const data = { ...this._config, type: this._type, }; + if (data.max_columns === undefined && this._type === SECTION_VIEW_LAYOUT) { + data.max_columns = 4; + } + return html` 0 ? html`
${this.badges}
` @@ -73,7 +76,8 @@ export class SectionsView extends LitElement implements LovelaceViewElement {
${repeat( @@ -232,7 +236,6 @@ export class SectionsView extends LitElement implements LovelaceViewElement { static get styles(): CSSResultGroup { return css` :host { - --max-column-count: 4; --row-gap: var(--ha-view-sections-row-gap, 8px); --column-gap: var(--ha-view-sections-column-gap, 32px); --column-min-width: var(--ha-view-sections-column-min-width, 320px); @@ -259,7 +262,7 @@ export class SectionsView extends LitElement implements LovelaceViewElement { } .container { - --max-count: min(var(--total-count), var(--max-column-count)); + --max-count: min(var(--total-count), var(--max-columns-count, 4)); --max-width: min( calc( (var(--max-count) + 1) * var(--column-min-width) + diff --git a/src/translations/en.json b/src/translations/en.json index cd82c08792..317da5222e 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -5355,6 +5355,7 @@ "sections": "Sections (experimental)" }, "subview": "Subview", + "max_columns": "Max number of columns", "subview_helper": "Subviews don't appear in tabs and have a back button.", "edit_ui": "Edit in visual editor", "edit_yaml": "Edit in YAML",