Skip to content

Commit 60fe181

Browse files
committed
Add support for area context
1 parent 7f04669 commit 60fe181

File tree

4 files changed

+47
-7
lines changed

4 files changed

+47
-7
lines changed

src/cards/template-new-card/template-new-card-config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export type MushroomBadgeConfig = {
2121

2222
export type TemplateNewCardConfig = LovelaceCardConfig & {
2323
entity?: string;
24+
area?: string;
2425
// Content
2526
primary?: string;
2627
secondary?: string;
@@ -51,7 +52,10 @@ export type TemplateNewCardConfig = LovelaceCardConfig & {
5152
export const templateNewCardConfigStruct = assign(
5253
lovelaceCardConfigStruct,
5354
object({
55+
// Context
5456
entity: optional(string()),
57+
area: optional(string()),
58+
// Content
5559
primary: optional(string()),
5660
secondary: optional(string()),
5761
color: optional(string()),

src/cards/template-new-card/template-new-card-editor.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export const TILE_LABELS = [
4949
];
5050

5151
export const HELPERS = [
52+
"area",
5253
"entity",
5354
"badge_text",
5455
"multiline_secondary",
@@ -72,10 +73,28 @@ export class TemplateCardEditor
7273
this._config = config;
7374
}
7475

76+
private _featureContext = memoizeOne(
77+
(config: TemplateNewCardConfig): LovelaceCardFeatureContext => {
78+
return {
79+
entity_id: config.entity,
80+
area_id: config.area,
81+
};
82+
}
83+
);
84+
7585
private _schema = memoizeOne(
7686
(localize: LocalizeFunc) =>
7787
[
78-
{ name: "entity", selector: { entity: {} } },
88+
{
89+
name: "context",
90+
flatten: true,
91+
type: "expandable",
92+
icon: "mdi:shape",
93+
schema: [
94+
{ name: "entity", selector: { entity: {} } },
95+
{ name: "area", selector: { area: {} } },
96+
],
97+
},
7998
{
8099
name: "content",
81100
flatten: true,
@@ -260,8 +279,7 @@ export class TemplateCardEditor
260279
data.content_layout === "vertical"
261280
);
262281

263-
const entityId = this._config.entity;
264-
const stateObj = entityId ? this.hass!.states[entityId] : undefined;
282+
const featureContext = this._featureContext(this._config);
265283

266284
return html`
267285
<ha-form
@@ -291,7 +309,7 @@ export class TemplateCardEditor
291309
></ha-form>
292310
<hui-card-features-editor
293311
.hass=${this.hass}
294-
.stateObj=${stateObj}
312+
.context=${featureContext}
295313
.features=${this._config!.features ?? []}
296314
@features-changed=${this._featuresChanged}
297315
@edit-detail-element=${this._editDetailElement}

src/cards/template-new-card/template-new-card.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ const TEMPLATE_KEYS = [
5050

5151
type TemplateKey = (typeof TEMPLATE_KEYS)[number];
5252

53+
export interface LovelaceCardFeatureContext {
54+
entity_id?: string;
55+
area_id?: string;
56+
}
57+
5358
@customElement(TEMPLATE_CARD_NEW_NAME)
5459
export class Template extends LitElement implements LovelaceCard {
5560
public static async getConfigElement(): Promise<LovelaceCardEditor> {
@@ -162,6 +167,7 @@ export class Template extends LitElement implements LovelaceCard {
162167
config: this._config,
163168
user: this.hass.user!.name,
164169
entity: this._config.entity,
170+
area: this._config.area,
165171
},
166172
strict: true,
167173
}
@@ -216,6 +222,15 @@ export class Template extends LitElement implements LovelaceCard {
216222
};
217223
}
218224

225+
private _featureContext = memoizeOne(
226+
(config: TemplateNewCardConfig): LovelaceCardFeatureContext => {
227+
return {
228+
entity_id: config.entity,
229+
area_id: config.area,
230+
};
231+
}
232+
);
233+
219234
private getValue(key: TemplateKey) {
220235
const value = this._getTemplateKeyValue(key);
221236
return isTemplate(value)
@@ -342,7 +357,6 @@ export class Template extends LitElement implements LovelaceCard {
342357
const containerOrientationClass =
343358
featurePosition === "inline" ? "horizontal" : "";
344359

345-
const stateObj = entityId ? this.hass.states[entityId] : undefined;
346360
const multilineSecondary = this._config.multiline_secondary;
347361

348362
const secondaryInfo = secondary
@@ -356,6 +370,8 @@ export class Template extends LitElement implements LovelaceCard {
356370
`
357371
: undefined;
358372

373+
const featureContext = this._featureContext(this._config);
374+
359375
return html`
360376
<ha-card style=${styleMap(style)}>
361377
<div
@@ -427,13 +443,14 @@ export class Template extends LitElement implements LovelaceCard {
427443
`
428444
: nothing}
429445
</div>
430-
${features.length > 0 && stateObj
446+
${features.length > 0
431447
? html`
432448
<hui-card-features
433449
.hass=${this.hass}
434-
.stateObj=${stateObj}
450+
.context=${featureContext}
435451
.color=${cssColor}
436452
.features=${features}
453+
.position=${featurePosition}
437454
></hui-card-features>
438455
`
439456
: nothing}

src/ha/panels/lovelace/card-features/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export type LovelaceCardFeatureConfig = {
44

55
export interface LovelaceCardFeatureContext {
66
entity_id?: string;
7+
area_id?: string;
78
}

0 commit comments

Comments
 (0)