Support Select/InputSelect mushroom cards (#151)

Add cards

* Select Card.
* Input Select Card

Contribution by wallforfry
This commit is contained in:
Wallerand Delevacq
2024-10-19 12:27:42 +02:00
committed by GitHub
parent d7f100df16
commit dbebfc88d3
5 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,41 @@
import {cards} from "../types/strategy/cards";
import {EntityRegistryEntry} from "../types/homeassistant/data/entity_registry";
import {SelectCardConfig} from "../types/lovelace-mushroom/cards/select-card-config";
import {SelectCard} from './SelectCard';
// noinspection JSUnusedGlobalSymbols Class is dynamically imported
/**
* InputSelect Card Class
*
* Used to create a card for controlling an entity of the input_select domain.
*
* @class
* @extends AbstractCard
*/
class InputSelectCard extends SelectCard {
/**
* Default configuration of the card.
*
* @type {SelectCardConfig}
* @private
*/
#defaultConfig: SelectCardConfig = {
type: "custom:mushroom-select-card",
icon: undefined,
};
/**
* Class constructor.
*
* @param {EntityRegistryEntry} entity The hass entity to create a card for.
* @param {cards.InputSelectCardOptions} [options={}] Options for the card.
* @throws {Error} If the Helper module isn't initialized.
*/
constructor(entity: EntityRegistryEntry, options: cards.InputSelectCardOptions = {}) {
super(entity);
this.config = Object.assign(this.config, this.#defaultConfig, options);
}
}
export {InputSelectCard};

41
src/cards/SelectCard.ts Normal file
View File

@ -0,0 +1,41 @@
import {AbstractCard} from "./AbstractCard";
import {cards} from "../types/strategy/cards";
import {EntityRegistryEntry} from "../types/homeassistant/data/entity_registry";
import {SelectCardConfig} from "../types/lovelace-mushroom/cards/select-card-config";
// noinspection JSUnusedGlobalSymbols Class is dynamically imported
/**
* Select Card Class
*
* Used to create a card for controlling an entity of the select domain.
*
* @class
* @extends AbstractCard
*/
class SelectCard extends AbstractCard {
/**
* Default configuration of the card.
*
* @type {SelectCardConfig}
* @private
*/
#defaultConfig: SelectCardConfig = {
type: "custom:mushroom-select-card",
icon: undefined,
};
/**
* Class constructor.
*
* @param {EntityRegistryEntry} entity The hass entity to create a card for.
* @param {cards.SelectCardOptions} [options={}] Options for the card.
* @throws {Error} If the Helper module isn't initialized.
*/
constructor(entity: EntityRegistryEntry, options: cards.SelectCardOptions = {}) {
super(entity);
this.config = Object.assign(this.config, this.#defaultConfig, options);
}
}
export {SelectCard};

View File

@ -100,6 +100,16 @@ export const configurationDefaults: StrategyDefaults = {
showControls: true,
hidden: false,
},
select: {
title: "Selects",
showControls: false,
hidden: false,
},
input_select: {
title: "Input Selects",
showControls: false,
hidden: false,
},
},
home_view: {
hidden: [],

View File

@ -0,0 +1,18 @@
import {ActionsSharedConfig} from "../shared/config/actions-config";
import {LovelaceCardConfig} from "../../homeassistant/data/lovelace";
import {EntitySharedConfig} from "../shared/config/entity-config";
import {AppearanceSharedConfig} from "../shared/config/appearance-config";
/**
* Select Card Config.
*
* @property {string} [icon_color=blue] Custom color for icon when entity state is active.
*
* @see https://github.com/piitaya/lovelace-mushroom/blob/main/docs/cards/select.md
*/
export type SelectCardConfig = LovelaceCardConfig &
EntitySharedConfig &
AppearanceSharedConfig &
ActionsSharedConfig & {
icon_color?: string;
};

View File

@ -16,6 +16,7 @@ import {MediaPlayerCardConfig} from "../lovelace-mushroom/cards/media-player-car
import {NumberCardConfig} from "../lovelace-mushroom/cards/number-card-config";
import {PersonCardConfig} from "../lovelace-mushroom/cards/person-card-config";
import {VacuumCardConfig} from "../lovelace-mushroom/cards/vacuum-card-config";
import {SelectCardConfig} from '../lovelace-mushroom/cards/select-card-config';
export namespace cards {
/**
@ -58,6 +59,8 @@ export namespace cards {
export type PictureEntityCardOptions = Omit<PictureEntityCardConfig, "type">;
export type TemplateCardOptions = Omit<TemplateCardConfig, "type">;
export type VacuumCardOptions = Omit<VacuumCardConfig, "type">;
export type SelectCardOptions = Omit<SelectCardConfig, "type">;
export type InputSelectCardOptions = Omit<SelectCardConfig, "type">;
}