Skip to content

Commit

Permalink
Use new API for layout options (#1386)
Browse files Browse the repository at this point in the history
* Use new API for grid layout options

* Use new layout options
  • Loading branch information
piitaya committed Mar 7, 2024
1 parent a6b086d commit 548ac95
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 33 deletions.
11 changes: 7 additions & 4 deletions src/cards/alarm-control-panel-card/alarm-control-panel-card.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { HassEntity } from "home-assistant-js-websocket";
import { css, CSSResultGroup, html, nothing, PropertyValues, TemplateResult } from "lit";
import { customElement, query, state } from "lit/decorators.js";
import { customElement, query } from "lit/decorators.js";
import { classMap } from "lit/directives/class-map.js";
import { styleMap } from "lit/directives/style-map.js";
import {
Expand All @@ -12,6 +12,7 @@ import {
HomeAssistant,
LovelaceCard,
LovelaceCardEditor,
LovelaceLayoutOptions,
} from "../../ha";
import "../../shared/badge-icon";
import "../../shared/button";
Expand Down Expand Up @@ -87,11 +88,13 @@ export class AlarmControlPanelCard
return Boolean(this._config?.states?.length);
}

public getGridSize() {
public getLayoutOptions(): LovelaceLayoutOptions {
const options = super.getLayoutOptions();
if (this._config?.show_keypad) {
return [4, 1] as [number, number];
delete options.grid_columns;
delete options.grid_rows;
}
return super.getGridSize();
return options;
}

@query("#alarmCode") private _input?: HaTextField;
Expand Down
23 changes: 15 additions & 8 deletions src/cards/template-card/template-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
HomeAssistant,
LovelaceCard,
LovelaceCardEditor,
LovelaceLayoutOptions,
RenderTemplateResult,
subscribeRenderTemplate,
} from "../../ha";
Expand Down Expand Up @@ -82,20 +83,26 @@ export class TemplateCard extends MushroomBaseElement implements LovelaceCard {
return height;
}

public getGridSize(): [number, number] {
this._inGrid = true;
let column = 2;
let row = 1;
if (!this._config) return [column, row];
// For backward compatibility
public getGridSize(): [number | undefined, number | undefined] {
const { grid_columns, grid_rows } = this.getLayoutOptions();
return [grid_columns, grid_rows];
}

public getLayoutOptions(): LovelaceLayoutOptions {
const options = {
grid_columns: 2,
grid_rows: 1,
};
if (!this._config) return options;
const appearance = computeAppearance(this._config);
if (appearance.layout === "vertical") {
row += 1;
options.grid_rows += 1;
}
if (appearance.layout === "horizontal") {
column = 4;
options.grid_columns = 4;
}
return [column, row];
return options;
}

setConfig(config: TemplateCardConfig): void {
Expand Down
5 changes: 5 additions & 0 deletions src/ha/data/lovelace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ export interface LovelaceCardConfig {
[key: string]: any;
}

export interface LovelaceLayoutOptions {
grid_columns?: number;
grid_rows?: number;
}

export interface ToggleActionConfig extends BaseActionConfig {
action: "toggle";
}
Expand Down
52 changes: 31 additions & 21 deletions src/utils/base-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@ import { HassEntity } from "home-assistant-js-websocket";
import { html, nothing, TemplateResult } from "lit";
import { property, state } from "lit/decorators.js";
import { classMap } from "lit/directives/class-map.js";
import { computeRTL, computeStateDisplay, HomeAssistant, isActive, isAvailable } from "../ha";
import {
computeRTL,
computeStateDisplay,
HomeAssistant,
isActive,
isAvailable,
LovelaceLayoutOptions,
} from "../ha";
import setupCustomlocalize from "../localize";
import "../shared/badge-icon";
import "../shared/card";
Expand Down Expand Up @@ -54,26 +61,10 @@ export class MushroomBaseCard<
};
}

public getGridSize(): [number, number] {
this._inGrid = true;
let column = 2;
let row = 1;
if (!this._config) return [column, row];
const appearance = computeAppearance(this._config);
if (appearance.layout === "vertical") {
row += 1;
}
if (appearance.layout === "horizontal") {
column = 4;
}
if (
appearance?.layout !== "horizontal" &&
this.hasControls &&
!("collapsible_controls" in this._config && this._config?.collapsible_controls)
) {
row += 1;
}
return [column, row];
// For backward compatibility
public getGridSize(): [number | undefined, number | undefined] {
const { grid_columns, grid_rows } = this.getLayoutOptions();
return [grid_columns, grid_rows];
}

public getCardSize(): number | Promise<number> {
Expand All @@ -93,6 +84,25 @@ export class MushroomBaseCard<
return height;
}

public getLayoutOptions(): LovelaceLayoutOptions {
const options = {
grid_columns: 2,
grid_rows: 1,
};
if (!this._config) return options;
const appearance = computeAppearance(this._config);
if (appearance.layout === "vertical") {
options.grid_rows += 1;
}
if (appearance.layout === "horizontal") {
options.grid_columns = 4;
}
if (appearance?.layout !== "horizontal" && this.hasControls) {
options.grid_rows += 1;
}
return options;
}

protected renderPicture(picture: string): TemplateResult {
return html`
<mushroom-shape-avatar
Expand Down

0 comments on commit 548ac95

Please sign in to comment.