import { CSSResultGroup, html, LitElement, TemplateResult, unsafeCSS } from 'lit'; import { customElement, property } from 'lit/decorators'; import { HomeAssistant } from 'custom-card-helpers'; import { styleMap } from 'lit/directives/style-map'; import { ExtendedHomeAssistant, MenuSubmenu, MenuSubmenuItem } from '../types.js'; import { actionHandler } from '../action-handler-directive.js'; import { frigateCardHasAction, refreshDynamicStateParameters } from '../common.js'; import submenuStyle from '../scss/submenu.scss'; import type { Corner } from "@material/mwc-menu"; @customElement('frigate-card-submenu') export class FrigateCardSubmenu extends LitElement { @property({ attribute: false }) public hass?: HomeAssistant & ExtendedHomeAssistant; @property({ attribute: false }) public submenu?: MenuSubmenu; @property({ attribute: false }) public corner?: Corner; protected _renderItem(item: MenuSubmenuItem): TemplateResult | void { if (!this.hass) { return; } const stateParameters = refreshDynamicStateParameters(this.hass, {...item}); return html` { // Attach the action config so ascendants have access to it. ev.detail.config = item; }} .actionHandler=${actionHandler({ hasHold: frigateCardHasAction(item.hold_action), hasDoubleClick: frigateCardHasAction(item.double_tap_action), })} > ${stateParameters.title || ''} ${stateParameters.icon ? html` ` : ``} `; } protected render(): TemplateResult { if (!this.submenu) { return html``; } return html` ${this.submenu.items.map(this._renderItem.bind(this))} `; } static get styles(): CSSResultGroup { return unsafeCSS(submenuStyle); } }