fix: Some cards with child cards wouldn't be clickable

This commit is contained in:
Jérôme Wiedemann 2023-07-24 01:41:22 +00:00
parent 1b87e97105
commit 9f21c58dac
1 changed files with 30 additions and 4 deletions

View File

@ -641,12 +641,33 @@ class ButtonCard extends LitElement {
return result;
}
private _isClickable(state: HassEntity | undefined): boolean {
private _isClickable(state: HassEntity | undefined, configState: StateConfig | undefined): boolean {
let clickable = true;
const tap_action = this._getTemplateOrValue(state, this._config!.tap_action!.action);
const hold_action = this._getTemplateOrValue(state, this._config!.hold_action!.action);
const double_tap_action = this._getTemplateOrValue(state, this._config!.double_tap_action!.action);
if (tap_action != 'none' || hold_action != 'none' || double_tap_action != 'none') {
let hasChildCards = false;
if (this._config!.custom_fields) {
hasChildCards = Object.keys(this._config!.custom_fields).some((key) => {
const value = this._config!.custom_fields![key];
if ((value as CustomFieldCard)!.card) {
return true;
}
return false;
});
}
if (!hasChildCards && configState) {
if (configState.custom_fields) {
return (hasChildCards = Object.keys(configState.custom_fields).some((key) => {
const value = configState.custom_fields![key];
if ((value as CustomFieldCard)!.card) {
return true;
}
return false;
}));
}
}
if (tap_action != 'none' || hold_action != 'none' || double_tap_action != 'none' || hasChildCards) {
clickable = true;
} else {
clickable = false;
@ -684,7 +705,7 @@ class ButtonCard extends LitElement {
const tooltipStyleFromConfig = this._buildStyleGeneric(this._stateObj, configState, 'tooltip');
const classList: ClassInfo = {
'button-card-main': true,
disabled: !this._isClickable(this._stateObj),
disabled: !this._isClickable(this._stateObj, configState),
};
if (this._config?.tooltip) {
this.classList.add('tooltip');
@ -995,11 +1016,16 @@ class ButtonCard extends LitElement {
tap_action: { action: 'toggle' },
...this._config,
};
} else {
} else if (this._config!.entity) {
this._config = {
tap_action: { action: 'more-info' },
...this._config,
};
} else {
this._config = {
tap_action: { action: 'none' },
...this._config,
};
}
this._config!.default_color = 'var(--primary-text-color)';