mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-27 11:16:35 +00:00
🕶 convert hui-persisten-notification-item to TypeScript/LitElement (#3032)
This commit is contained in:
parent
fe73213643
commit
e23f046c4d
@ -10,14 +10,14 @@ import "@material/mwc-button";
|
|||||||
import "./hui-notification-item-template";
|
import "./hui-notification-item-template";
|
||||||
|
|
||||||
import { HomeAssistant } from "../../../../types";
|
import { HomeAssistant } from "../../../../types";
|
||||||
import { HassEntity } from "home-assistant-js-websocket";
|
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
|
import { HassNotification } from "./types";
|
||||||
|
|
||||||
@customElement("hui-configurator-notification-item")
|
@customElement("hui-configurator-notification-item")
|
||||||
export class HuiConfiguratorNotificationItem extends LitElement {
|
export class HuiConfiguratorNotificationItem extends LitElement {
|
||||||
@property() public hass?: HomeAssistant;
|
@property() public hass?: HomeAssistant;
|
||||||
|
|
||||||
@property() public notification?: HassEntity;
|
@property() public notification?: HassNotification;
|
||||||
|
|
||||||
protected render(): TemplateResult | void {
|
protected render(): TemplateResult | void {
|
||||||
if (!this.hass || !this.notification) {
|
if (!this.hass || !this.notification) {
|
||||||
|
@ -10,14 +10,14 @@ import {
|
|||||||
import "./hui-configurator-notification-item";
|
import "./hui-configurator-notification-item";
|
||||||
import "./hui-persistent-notification-item";
|
import "./hui-persistent-notification-item";
|
||||||
|
|
||||||
import { HassEntity } from "home-assistant-js-websocket";
|
|
||||||
import { HomeAssistant } from "../../../../types";
|
import { HomeAssistant } from "../../../../types";
|
||||||
|
import { HassNotification } from "./types";
|
||||||
|
|
||||||
@customElement("hui-notification-item")
|
@customElement("hui-notification-item")
|
||||||
export class HuiNotificationItem extends LitElement {
|
export class HuiNotificationItem extends LitElement {
|
||||||
@property() public hass?: HomeAssistant;
|
@property() public hass?: HomeAssistant;
|
||||||
|
|
||||||
@property() public notification?: HassEntity;
|
@property() public notification?: HassNotification;
|
||||||
|
|
||||||
protected shouldUpdate(changedProps: PropertyValues): boolean {
|
protected shouldUpdate(changedProps: PropertyValues): boolean {
|
||||||
if (!this.hass || !this.notification || changedProps.has("notification")) {
|
if (!this.hass || !this.notification || changedProps.has("notification")) {
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
import "@material/mwc-button";
|
|
||||||
import "@polymer/paper-icon-button/paper-icon-button";
|
|
||||||
import "@polymer/paper-tooltip/paper-tooltip";
|
|
||||||
|
|
||||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
|
||||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
|
||||||
|
|
||||||
import "../../../../components/ha-relative-time";
|
|
||||||
import "../../../../components/ha-markdown";
|
|
||||||
import "./hui-notification-item-template";
|
|
||||||
|
|
||||||
import LocalizeMixin from "../../../../mixins/localize-mixin";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @appliesMixin LocalizeMixin
|
|
||||||
*/
|
|
||||||
export class HuiPersistentNotificationItem extends LocalizeMixin(
|
|
||||||
PolymerElement
|
|
||||||
) {
|
|
||||||
static get template() {
|
|
||||||
return html`
|
|
||||||
<style>
|
|
||||||
.time {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
margin-top: 6px;
|
|
||||||
}
|
|
||||||
ha-relative-time {
|
|
||||||
color: var(--secondary-text-color);
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: var(--primary-color);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<hui-notification-item-template>
|
|
||||||
<span slot="header">[[_computeTitle(notification)]]</span>
|
|
||||||
|
|
||||||
<ha-markdown content="[[notification.message]]"></ha-markdown>
|
|
||||||
|
|
||||||
<div class="time">
|
|
||||||
<span>
|
|
||||||
<ha-relative-time
|
|
||||||
hass="[[hass]]"
|
|
||||||
datetime="[[notification.created_at]]"
|
|
||||||
></ha-relative-time>
|
|
||||||
<paper-tooltip
|
|
||||||
>[[_computeTooltip(hass, notification)]]</paper-tooltip
|
|
||||||
>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<mwc-button slot="actions" on-click="_handleDismiss"
|
|
||||||
>[[localize('ui.card.persistent_notification.dismiss')]]</mwc-button
|
|
||||||
>
|
|
||||||
</hui-notification-item-template>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
|
|
||||||
static get properties() {
|
|
||||||
return {
|
|
||||||
hass: Object,
|
|
||||||
notification: Object,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
_handleDismiss() {
|
|
||||||
this.hass.callService("persistent_notification", "dismiss", {
|
|
||||||
notification_id: this.notification.notification_id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_computeTitle(notification) {
|
|
||||||
return notification.title || notification.notification_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
_computeTooltip(hass, notification) {
|
|
||||||
if (!hass || !notification) return null;
|
|
||||||
|
|
||||||
const d = new Date(notification.created_at);
|
|
||||||
return d.toLocaleDateString(hass.language, {
|
|
||||||
year: "numeric",
|
|
||||||
month: "short",
|
|
||||||
day: "numeric",
|
|
||||||
minute: "numeric",
|
|
||||||
hour: "numeric",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
customElements.define(
|
|
||||||
"hui-persistent-notification-item",
|
|
||||||
HuiPersistentNotificationItem
|
|
||||||
);
|
|
@ -0,0 +1,110 @@
|
|||||||
|
import {
|
||||||
|
html,
|
||||||
|
LitElement,
|
||||||
|
TemplateResult,
|
||||||
|
property,
|
||||||
|
customElement,
|
||||||
|
css,
|
||||||
|
CSSResult,
|
||||||
|
} from "lit-element";
|
||||||
|
import "@material/mwc-button";
|
||||||
|
import "@polymer/paper-tooltip/paper-tooltip";
|
||||||
|
|
||||||
|
import "../../../../components/ha-relative-time";
|
||||||
|
import "../../../../components/ha-markdown";
|
||||||
|
import "./hui-notification-item-template";
|
||||||
|
|
||||||
|
import { HomeAssistant } from "../../../../types";
|
||||||
|
import { HassNotification } from "./types";
|
||||||
|
|
||||||
|
@customElement("hui-persistent-notification-item")
|
||||||
|
export class HuiPersistentNotificationItem extends LitElement {
|
||||||
|
@property() public hass?: HomeAssistant;
|
||||||
|
|
||||||
|
@property() public notification?: HassNotification;
|
||||||
|
|
||||||
|
protected render(): TemplateResult | void {
|
||||||
|
if (!this.hass || !this.notification) {
|
||||||
|
return html``;
|
||||||
|
}
|
||||||
|
|
||||||
|
return html`
|
||||||
|
<hui-notification-item-template>
|
||||||
|
<span slot="header">${this._computeTitle(this.notification)}</span>
|
||||||
|
|
||||||
|
<ha-markdown content="${this.notification.message}"></ha-markdown>
|
||||||
|
|
||||||
|
<div class="time">
|
||||||
|
<span>
|
||||||
|
<ha-relative-time
|
||||||
|
.hass="${this.hass}"
|
||||||
|
.datetime="${this.notification.created_at}"
|
||||||
|
></ha-relative-time>
|
||||||
|
<paper-tooltip
|
||||||
|
>${this._computeTooltip(
|
||||||
|
this.hass,
|
||||||
|
this.notification
|
||||||
|
)}</paper-tooltip
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<mwc-button slot="actions" @click="${this._handleDismiss}"
|
||||||
|
>${this.hass.localize(
|
||||||
|
"ui.card.persistent_notification.dismiss"
|
||||||
|
)}</mwc-button
|
||||||
|
>
|
||||||
|
</hui-notification-item-template>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
static get styles(): CSSResult {
|
||||||
|
return css`
|
||||||
|
.time {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
ha-relative-time {
|
||||||
|
color: var(--secondary-text-color);
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: var(--primary-color);
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _handleDismiss(): void {
|
||||||
|
this.hass!.callService("persistent_notification", "dismiss", {
|
||||||
|
notification_id: this.notification!.notification_id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private _computeTitle(notification: HassNotification): string | undefined {
|
||||||
|
return notification.title || notification.notification_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _computeTooltip(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
notification: HassNotification
|
||||||
|
): string | undefined {
|
||||||
|
if (!hass || !notification) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const d = new Date(notification.created_at!);
|
||||||
|
return d.toLocaleDateString(hass.language, {
|
||||||
|
year: "numeric",
|
||||||
|
month: "short",
|
||||||
|
day: "numeric",
|
||||||
|
minute: "numeric",
|
||||||
|
hour: "numeric",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface HTMLElementTagNameMap {
|
||||||
|
"hui-persistent-notification-item": HuiPersistentNotificationItem;
|
||||||
|
}
|
||||||
|
}
|
8
src/panels/lovelace/components/notifications/types.ts
Normal file
8
src/panels/lovelace/components/notifications/types.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
|
|
||||||
|
export declare type HassNotification = HassEntity & {
|
||||||
|
notification_id?: string;
|
||||||
|
created_at?: string;
|
||||||
|
title?: string;
|
||||||
|
message?: string;
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user