Skip to content

Commit

Permalink
refactor: add update hass on state change for custom cards
Browse files Browse the repository at this point in the history
  • Loading branch information
ngocjohn committed Aug 28, 2024
1 parent 5b49d38 commit 0c50967
Showing 1 changed file with 53 additions and 43 deletions.
96 changes: 53 additions & 43 deletions src/vehicle-info-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ import {
defaultConfig,
getCarEntity,
} from './utils/ha-helpers';
import { languages } from './localize/languageImports';
import { imageOverlay } from 'leaflet';

const HELPERS = (window as any).loadCardHelpers ? (window as any).loadCardHelpers() : undefined;

Expand All @@ -67,10 +65,10 @@ export class VehicleCard extends LitElement implements LovelaceCard {
@property({ type: Object }) private config!: VehicleCardConfig;
@property({ type: Boolean }) public editMode = false;
@property({ type: Boolean }) loading = true;
@property() public additionalCards: { [key: string]: any[] } = {};

@state() private selectedTheme!: string;
@state() private vehicleEntities: VehicleEntities = {};
@state() private additionalCards: { [key: string]: any[] } = {};
@state() private customButtons: { [key: string]: any[] } = {};
@state() private activeCardType: string | null = null;
@state() private ecoScoresVisible!: boolean;
Expand Down Expand Up @@ -121,31 +119,6 @@ export class VehicleCard extends LitElement implements LovelaceCard {
this.applyTheme(this.selectedTheme);
}

private getGridRowSize(): number {
const { show_slides, show_map, show_buttons } = this.config;

let gridRowSize = 2;
if (show_slides) gridRowSize += 2;
if (show_map) gridRowSize += 2;
if (show_buttons) gridRowSize += 2;
return gridRowSize;
}

public getCardSize() {
// console.log('mansory', this.getGridRowSize());
return 3;
}

public getLayoutOptions() {
const gridRowSize = this.getGridRowSize();
console.log('sections', gridRowSize);
return {
grid_min_rows: gridRowSize,
grid_columns: 4,
grid_min_columns: 4,
};
}

private configureCustomCards(): void {
const lang = this.selectedLanguage;

Expand Down Expand Up @@ -175,6 +148,46 @@ export class VehicleCard extends LitElement implements LovelaceCard {
}
}

private async createCards(cardConfigs: LovelaceCardConfig[], stateProperty: string): Promise<void> {
if (HELPERS) {
const helpers = await HELPERS;
const cards = await Promise.all(
cardConfigs.map(async (cardConfig) => {
const element = await helpers.createCardElement(cardConfig);
element.hass = this.hass;
return element;
})
);
this.additionalCards[stateProperty] = cards;
}
this.requestUpdate();
}

private getGridRowSize(): number {
const { show_slides, show_map, show_buttons } = this.config;

let gridRowSize = 2;
if (show_slides) gridRowSize += 2;
if (show_map) gridRowSize += 2;
if (show_buttons) gridRowSize += 2;
return gridRowSize;
}

public getCardSize() {
// console.log('mansory', this.getGridRowSize());
return 3;
}

public getLayoutOptions() {
const gridRowSize = this.getGridRowSize();
console.log('sections', gridRowSize);
return {
grid_min_rows: gridRowSize,
grid_columns: 4,
grid_min_columns: 4,
};
}

private async configureAsync(): Promise<void> {
this.selectedTheme = this.config.selected_theme?.theme || 'Default';
if (this.config.selected_language && this.config.selected_language === 'system') {
Expand Down Expand Up @@ -222,7 +235,6 @@ export class VehicleCard extends LitElement implements LovelaceCard {
this.customNotify = customNotify;
}
}
this.requestUpdate();
}

// https://lit.dev/docs/components/styles/
Expand Down Expand Up @@ -254,20 +266,6 @@ export class VehicleCard extends LitElement implements LovelaceCard {
super.disconnectedCallback();
}

private async createCards(cardConfigs: LovelaceCardConfig[], stateProperty: string): Promise<void> {
if (HELPERS) {
const helpers = await HELPERS;
const cards = await Promise.all(
cardConfigs.map(async (cardConfig) => {
const element = await helpers.createCardElement(cardConfig);
element.hass = this.hass;
return element;
})
);
this.additionalCards[stateProperty] = cards;
}
}

private createCustomButtons(buttonConfigs: ButtonConfigItem | ButtonConfigItem[], stateProperty: string) {
const btn = Array.isArray(buttonConfigs)
? buttonConfigs.map((config) => ({ ...config, type: stateProperty }))
Expand Down Expand Up @@ -295,6 +293,18 @@ export class VehicleCard extends LitElement implements LovelaceCard {
eletricBar.classList.remove('show-after');
}
}
//update hass on custom cards
if (changedProps.has('hass')) {
this._updateHassOnCards();
}
}

private _updateHassOnCards(): void {
Object.keys(this.additionalCards).forEach((stateProperty) => {
this.additionalCards[stateProperty].forEach((card) => {
card.hass = this.hass;
});
});
}

// https://lit.dev/docs/components/lifecycle/#reactive-update-cycle-performing
Expand Down

0 comments on commit 0c50967

Please sign in to comment.