mirror of
https://github.com/home-assistant/frontend.git
synced 2025-12-20 02:38:53 +00:00
Automations, scripts, scenes: add a tooltip for relative time (#28158)
* add a tooltip for last_triggered * add a tooltip for last_triggered * add a tooltip for last_activated * Apply suggestions from code review * Apply suggestion from @MindFreeze Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com> * Apply suggestion from @MindFreeze Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com> * Apply suggestion from @MindFreeze Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com> --------- Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
This commit is contained in:
@@ -35,6 +35,8 @@ import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
|||||||
import { fireEvent } from "../../../common/dom/fire_event";
|
import { fireEvent } from "../../../common/dom/fire_event";
|
||||||
import { computeStateName } from "../../../common/entity/compute_state_name";
|
import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||||
import { navigate } from "../../../common/navigate";
|
import { navigate } from "../../../common/navigate";
|
||||||
|
import { slugify } from "../../../common/string/slugify";
|
||||||
|
import "../../../components/ha-tooltip";
|
||||||
import type { LocalizeFunc } from "../../../common/translations/localize";
|
import type { LocalizeFunc } from "../../../common/translations/localize";
|
||||||
import {
|
import {
|
||||||
hasRejectedItems,
|
hasRejectedItems,
|
||||||
@@ -327,14 +329,19 @@ class HaAutomationPicker extends SubscribeMixin(LitElement) {
|
|||||||
const date = new Date(automation.last_triggered);
|
const date = new Date(automation.last_triggered);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const dayDifference = differenceInDays(now, date);
|
const dayDifference = differenceInDays(now, date);
|
||||||
|
const formattedTime = formatShortDateTimeWithConditionalYear(
|
||||||
|
date,
|
||||||
|
this.hass.locale,
|
||||||
|
this.hass.config
|
||||||
|
);
|
||||||
|
const elementId = "last-triggered-" + slugify(automation.entity_id);
|
||||||
return html`
|
return html`
|
||||||
${dayDifference > 3
|
${dayDifference > 3
|
||||||
? formatShortDateTimeWithConditionalYear(
|
? formattedTime
|
||||||
date,
|
: html`
|
||||||
this.hass.locale,
|
<ha-tooltip for=${elementId}>${formattedTime}</ha-tooltip>
|
||||||
this.hass.config
|
<span id=${elementId}>${relativeTime(date, locale)}</span>
|
||||||
)
|
`}
|
||||||
: relativeTime(date, locale)}
|
|
||||||
`;
|
`;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import { LitElement, css, html, nothing } from "lit";
|
|||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import memoizeOne from "memoize-one";
|
import memoizeOne from "memoize-one";
|
||||||
import { computeCssColor } from "../../../common/color/compute-color";
|
import { computeCssColor } from "../../../common/color/compute-color";
|
||||||
import { formatShortDateTime } from "../../../common/datetime/format_date_time";
|
import { formatShortDateTimeWithConditionalYear } from "../../../common/datetime/format_date_time";
|
||||||
import { relativeTime } from "../../../common/datetime/relative_time";
|
import { relativeTime } from "../../../common/datetime/relative_time";
|
||||||
import { storage } from "../../../common/decorators/storage";
|
import { storage } from "../../../common/decorators/storage";
|
||||||
import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
||||||
@@ -301,10 +301,21 @@ class HaSceneDashboard extends SubscribeMixin(LitElement) {
|
|||||||
const date = new Date(scene.state);
|
const date = new Date(scene.state);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const dayDifference = differenceInDays(now, date);
|
const dayDifference = differenceInDays(now, date);
|
||||||
|
const formattedTime = formatShortDateTimeWithConditionalYear(
|
||||||
|
date,
|
||||||
|
this.hass.locale,
|
||||||
|
this.hass.config
|
||||||
|
);
|
||||||
|
const elementId = "last-activated-" + slugify(scene.entity_id);
|
||||||
return html`
|
return html`
|
||||||
${dayDifference > 3
|
${dayDifference > 3
|
||||||
? formatShortDateTime(date, this.hass.locale, this.hass.config)
|
? formattedTime
|
||||||
: relativeTime(date, this.hass.locale)}
|
: html`
|
||||||
|
<ha-tooltip for=${elementId}>${formattedTime}</ha-tooltip>
|
||||||
|
<span id=${elementId}
|
||||||
|
>${relativeTime(date, this.hass.locale)}</span
|
||||||
|
>
|
||||||
|
`}
|
||||||
`;
|
`;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
|||||||
import { fireEvent } from "../../../common/dom/fire_event";
|
import { fireEvent } from "../../../common/dom/fire_event";
|
||||||
import { computeStateName } from "../../../common/entity/compute_state_name";
|
import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||||
import { navigate } from "../../../common/navigate";
|
import { navigate } from "../../../common/navigate";
|
||||||
|
import { slugify } from "../../../common/string/slugify";
|
||||||
|
import "../../../components/ha-tooltip";
|
||||||
import type { LocalizeFunc } from "../../../common/translations/localize";
|
import type { LocalizeFunc } from "../../../common/translations/localize";
|
||||||
import {
|
import {
|
||||||
hasRejectedItems,
|
hasRejectedItems,
|
||||||
@@ -302,19 +304,27 @@ class HaScriptPicker extends SubscribeMixin(LitElement) {
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
title: localize("ui.card.automation.last_triggered"),
|
title: localize("ui.card.automation.last_triggered"),
|
||||||
template: (script) => {
|
template: (script) => {
|
||||||
|
if (!script.last_triggered) {
|
||||||
|
return this.hass.localize("ui.components.relative_time.never");
|
||||||
|
}
|
||||||
const date = new Date(script.last_triggered);
|
const date = new Date(script.last_triggered);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const dayDifference = differenceInDays(now, date);
|
const dayDifference = differenceInDays(now, date);
|
||||||
|
const formattedTime = formatShortDateTimeWithConditionalYear(
|
||||||
|
date,
|
||||||
|
this.hass.locale,
|
||||||
|
this.hass.config
|
||||||
|
);
|
||||||
|
const elementId = "last-triggered-" + slugify(script.entity_id);
|
||||||
return html`
|
return html`
|
||||||
${script.last_triggered
|
${dayDifference > 3
|
||||||
? dayDifference > 3
|
? formattedTime
|
||||||
? formatShortDateTimeWithConditionalYear(
|
: html`
|
||||||
date,
|
<ha-tooltip for=${elementId}>${formattedTime}</ha-tooltip>
|
||||||
this.hass.locale,
|
<span id=${elementId}
|
||||||
this.hass.config
|
>${relativeTime(date, this.hass.locale)}</span
|
||||||
)
|
>
|
||||||
: relativeTime(date, this.hass.locale)
|
`}
|
||||||
: this.hass.localize("ui.components.relative_time.never")}
|
|
||||||
`;
|
`;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user