From 97070e7dad16503d15725d3d159f8280ddfd744d Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Tue, 26 Nov 2024 19:32:28 -0800 Subject: [PATCH 1/7] Additional relative time formats --- src/common/datetime/relative_time.ts | 26 +++++++++++++++---- src/components/ha-relative-time.ts | 15 +++++++++-- .../lovelace/badges/hui-entity-badge.ts | 1 + src/panels/lovelace/badges/types.ts | 2 ++ src/panels/lovelace/cards/hui-tile-card.ts | 1 + src/panels/lovelace/cards/types.ts | 1 + .../components/hui-timestamp-display.ts | 21 ++++++++++----- src/panels/lovelace/components/types.ts | 2 ++ src/state-display/state-display.ts | 14 ++++++++-- 9 files changed, 68 insertions(+), 15 deletions(-) diff --git a/src/common/datetime/relative_time.ts b/src/common/datetime/relative_time.ts index bf3722a977f2..23a16f07f56f 100644 --- a/src/common/datetime/relative_time.ts +++ b/src/common/datetime/relative_time.ts @@ -2,24 +2,40 @@ import memoizeOne from "memoize-one"; import type { FrontendLocaleData } from "../../data/translation"; import { selectUnit } from "../util/select-unit"; +export enum RelativeTimeFormat { + relative = "long", + relative_short = "short", + relative_narrow = "narrow", +} + +export type RelativeTimeStyle = `${RelativeTimeFormat}`; + +export function isRelativeTimeFormat( + format: string +): format is RelativeTimeFormat { + return Object.keys(RelativeTimeFormat).includes(format as RelativeTimeFormat); +} + const formatRelTimeMem = memoizeOne( - (locale: FrontendLocaleData) => - new Intl.RelativeTimeFormat(locale.language, { numeric: "auto" }) + (locale: FrontendLocaleData, style: RelativeTimeStyle) => + new Intl.RelativeTimeFormat(locale.language, { numeric: "auto", style }) ); export const relativeTime = ( from: Date, locale: FrontendLocaleData, to?: Date, - includeTense = true + includeTense = true, + format = RelativeTimeFormat.relative ): string => { const diff = selectUnit(from, to, locale); + const style = RelativeTimeFormat[format]; if (includeTense) { - return formatRelTimeMem(locale).format(diff.value, diff.unit); + return formatRelTimeMem(locale, style).format(diff.value, diff.unit); } return Intl.NumberFormat(locale.language, { style: "unit", unit: diff.unit, - unitDisplay: "long", + unitDisplay: style, }).format(Math.abs(diff.value)); }; diff --git a/src/components/ha-relative-time.ts b/src/components/ha-relative-time.ts index cb9cd7d7b16e..ecb7222ba776 100644 --- a/src/components/ha-relative-time.ts +++ b/src/components/ha-relative-time.ts @@ -2,7 +2,10 @@ import { parseISO } from "date-fns"; import type { PropertyValues } from "lit"; import { ReactiveElement } from "lit"; import { customElement, property } from "lit/decorators"; -import { relativeTime } from "../common/datetime/relative_time"; +import { + relativeTime, + RelativeTimeFormat, +} from "../common/datetime/relative_time"; import { capitalizeFirstLetter } from "../common/string/capitalize-first-letter"; import type { HomeAssistant } from "../types"; @@ -12,6 +15,8 @@ class HaRelativeTime extends ReactiveElement { @property({ attribute: false }) public datetime?: string | Date; + @property({ attribute: false }) public format?: RelativeTimeFormat; + @property({ type: Boolean }) public capitalize = false; private _interval?: number; @@ -65,7 +70,13 @@ class HaRelativeTime extends ReactiveElement { ? parseISO(this.datetime) : this.datetime; - const relTime = relativeTime(date, this.hass.locale); + const relTime = relativeTime( + date, + this.hass.locale, + undefined, + undefined, + this.format + ); this.innerHTML = this.capitalize ? capitalizeFirstLetter(relTime) : relTime; diff --git a/src/panels/lovelace/badges/hui-entity-badge.ts b/src/panels/lovelace/badges/hui-entity-badge.ts index 093e8f92aff3..34c084444357 100644 --- a/src/panels/lovelace/badges/hui-entity-badge.ts +++ b/src/panels/lovelace/badges/hui-entity-badge.ts @@ -185,6 +185,7 @@ export class HuiEntityBadge extends LitElement implements LovelaceBadge { .hass=${this.hass} .content=${this._config.state_content} .name=${this._config.name} + .format=${this._config.format} > `; diff --git a/src/panels/lovelace/badges/types.ts b/src/panels/lovelace/badges/types.ts index 6a5b47994364..76a09788872b 100644 --- a/src/panels/lovelace/badges/types.ts +++ b/src/panels/lovelace/badges/types.ts @@ -2,6 +2,7 @@ import type { ActionConfig } from "../../../data/lovelace/config/action"; import type { LovelaceBadgeConfig } from "../../../data/lovelace/config/badge"; import type { LegacyStateFilter } from "../common/evaluate-filter"; import type { Condition } from "../common/validate-condition"; +import type { TimestampRenderingFormat } from "../components/types"; import type { EntityFilterEntityConfig } from "../entity-rows/types"; import type { DisplayType } from "./hui-entity-badge"; @@ -42,6 +43,7 @@ export interface EntityBadgeConfig extends LovelaceBadgeConfig { tap_action?: ActionConfig; hold_action?: ActionConfig; double_tap_action?: ActionConfig; + format?: TimestampRenderingFormat; /** * @deprecated use `show_state`, `show_name`, `icon_type` */ diff --git a/src/panels/lovelace/cards/hui-tile-card.ts b/src/panels/lovelace/cards/hui-tile-card.ts index 457363681fd6..6bcbca43dcc6 100644 --- a/src/panels/lovelace/cards/hui-tile-card.ts +++ b/src/panels/lovelace/cards/hui-tile-card.ts @@ -255,6 +255,7 @@ export class HuiTileCard extends LitElement implements LovelaceCard { .hass=${this.hass} .content=${this._config.state_content} .name=${this._config.name} + .format=${this._config.format} > `; diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index 9f741915fa80..437397b0f397 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -515,6 +515,7 @@ export interface TileCardConfig extends LovelaceCardConfig { icon_hold_action?: ActionConfig; icon_double_tap_action?: ActionConfig; features?: LovelaceCardFeatureConfig[]; + format?: TimestampRenderingFormat; } export interface HeadingCardConfig extends LovelaceCardConfig { diff --git a/src/panels/lovelace/components/hui-timestamp-display.ts b/src/panels/lovelace/components/hui-timestamp-display.ts index 84d5cde3aec2..f35ab1d50481 100644 --- a/src/panels/lovelace/components/hui-timestamp-display.ts +++ b/src/panels/lovelace/components/hui-timestamp-display.ts @@ -5,7 +5,11 @@ import { customElement, property, state } from "lit/decorators"; import { formatDate } from "../../../common/datetime/format_date"; import { formatDateTime } from "../../../common/datetime/format_date_time"; import { formatTime } from "../../../common/datetime/format_time"; -import { relativeTime } from "../../../common/datetime/relative_time"; +import { + isRelativeTimeFormat, + RelativeTimeFormat, + relativeTime, +} from "../../../common/datetime/relative_time"; import { capitalizeFirstLetter } from "../../../common/string/capitalize-first-letter"; import type { FrontendLocaleData } from "../../../data/translation"; import type { HomeAssistant } from "../../../types"; @@ -22,7 +26,7 @@ const FORMATS: { datetime: formatDateTime, time: formatTime, }; -const INTERVAL_FORMAT = ["relative", "total"]; +const INTERVAL_FORMAT = [...Object.keys(RelativeTimeFormat), "total"]; @customElement("hui-timestamp-display") class HuiTimestampDisplay extends LitElement { @@ -112,10 +116,15 @@ class HuiTimestampDisplay extends LitElement { private _updateRelative(): void { if (this.ts && this.hass?.localize) { - this._relative = - this._format === "relative" - ? relativeTime(this.ts, this.hass!.locale) - : relativeTime(new Date(), this.hass!.locale, this.ts, false); + this._relative = isRelativeTimeFormat(this._format) + ? relativeTime( + this.ts, + this.hass!.locale, + undefined, + undefined, + this._format + ) + : relativeTime(new Date(), this.hass!.locale, this.ts, false); this._relative = this.capitalize ? capitalizeFirstLetter(this._relative) diff --git a/src/panels/lovelace/components/types.ts b/src/panels/lovelace/components/types.ts index e05443f873eb..abfad26e7a51 100644 --- a/src/panels/lovelace/components/types.ts +++ b/src/panels/lovelace/components/types.ts @@ -9,6 +9,8 @@ export interface ConditionalBaseConfig extends LovelaceCardConfig { export const TIMESTAMP_RENDERING_FORMATS = [ "relative", + "relative_narrow", + "relative_short", "total", "date", "time", diff --git a/src/state-display/state-display.ts b/src/state-display/state-display.ts index b91411020d03..ad703fb5b079 100644 --- a/src/state-display/state-display.ts +++ b/src/state-display/state-display.ts @@ -11,6 +11,10 @@ import type { UpdateEntity } from "../data/update"; import { computeUpdateStateDisplay } from "../data/update"; import "../panels/lovelace/components/hui-timestamp-display"; import type { HomeAssistant } from "../types"; +import { + TIMESTAMP_RENDERING_FORMATS, + type TimestampRenderingFormat, +} from "../panels/lovelace/components/types"; const TIMESTAMP_STATE_DOMAINS = ["button", "input_button", "scene"]; @@ -59,6 +63,8 @@ class StateDisplay extends LitElement { @property({ attribute: false }) public name?: string; + @property({ attribute: false }) public format?: TimestampRenderingFormat; + @property({ type: Boolean, attribute: "dash-unavailable" }) public dashUnavailable?: boolean; @@ -77,7 +83,10 @@ class StateDisplay extends LitElement { const stateObj = this.stateObj; const domain = computeStateDomain(stateObj); - if (content === "state") { + if ( + content === "state" || + (this.format && TIMESTAMP_RENDERING_FORMATS.includes(this.format)) + ) { if (this.dashUnavailable && isUnavailableState(stateObj.state)) { return "—"; } @@ -90,7 +99,7 @@ class StateDisplay extends LitElement { `; @@ -133,6 +142,7 @@ class StateDisplay extends LitElement { `; From 547a2185b3581a8ea0ee8fc3ff6203206e44b675 Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Tue, 26 Nov 2024 19:46:08 -0800 Subject: [PATCH 2/7] Fix fallback case --- src/common/datetime/relative_time.ts | 4 ++-- src/components/ha-relative-time.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/datetime/relative_time.ts b/src/common/datetime/relative_time.ts index 23a16f07f56f..b0620f8843a4 100644 --- a/src/common/datetime/relative_time.ts +++ b/src/common/datetime/relative_time.ts @@ -26,10 +26,10 @@ export const relativeTime = ( locale: FrontendLocaleData, to?: Date, includeTense = true, - format = RelativeTimeFormat.relative + format?: RelativeTimeFormat ): string => { const diff = selectUnit(from, to, locale); - const style = RelativeTimeFormat[format]; + const style: RelativeTimeStyle = format ? RelativeTimeFormat[format] : "long"; if (includeTense) { return formatRelTimeMem(locale, style).format(diff.value, diff.unit); } diff --git a/src/components/ha-relative-time.ts b/src/components/ha-relative-time.ts index ecb7222ba776..1fb65501d5ca 100644 --- a/src/components/ha-relative-time.ts +++ b/src/components/ha-relative-time.ts @@ -4,7 +4,7 @@ import { ReactiveElement } from "lit"; import { customElement, property } from "lit/decorators"; import { relativeTime, - RelativeTimeFormat, + type RelativeTimeFormat, } from "../common/datetime/relative_time"; import { capitalizeFirstLetter } from "../common/string/capitalize-first-letter"; import type { HomeAssistant } from "../types"; From c3f7d4588fcdcc8cd642762093aab703690910a4 Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Thu, 12 Dec 2024 11:45:21 -0800 Subject: [PATCH 3/7] Revert alternative state content condition --- src/state-display/state-display.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/state-display/state-display.ts b/src/state-display/state-display.ts index ad703fb5b079..f2041095b3e9 100644 --- a/src/state-display/state-display.ts +++ b/src/state-display/state-display.ts @@ -11,10 +11,7 @@ import type { UpdateEntity } from "../data/update"; import { computeUpdateStateDisplay } from "../data/update"; import "../panels/lovelace/components/hui-timestamp-display"; import type { HomeAssistant } from "../types"; -import { - TIMESTAMP_RENDERING_FORMATS, - type TimestampRenderingFormat, -} from "../panels/lovelace/components/types"; +import type { TimestampRenderingFormat } from "../panels/lovelace/components/types"; const TIMESTAMP_STATE_DOMAINS = ["button", "input_button", "scene"]; @@ -83,10 +80,7 @@ class StateDisplay extends LitElement { const stateObj = this.stateObj; const domain = computeStateDomain(stateObj); - if ( - content === "state" || - (this.format && TIMESTAMP_RENDERING_FORMATS.includes(this.format)) - ) { + if (content === "state") { if (this.dashUnavailable && isUnavailableState(stateObj.state)) { return "—"; } From 903a4e56594cd2b8c1925b55ef45ec590eab7217 Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Thu, 2 Jan 2025 10:44:21 -0800 Subject: [PATCH 4/7] Add format to editor component structs --- .../lovelace/editor/config-elements/hui-entity-badge-editor.ts | 2 ++ .../lovelace/editor/config-elements/hui-tile-card-editor.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/panels/lovelace/editor/config-elements/hui-entity-badge-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entity-badge-editor.ts index 6735b2741ec2..8cea5f2d6c23 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entity-badge-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entity-badge-editor.ts @@ -33,6 +33,7 @@ import { actionConfigStruct } from "../structs/action-struct"; import { baseLovelaceBadgeConfig } from "../structs/base-badge-struct"; import { configElementStyle } from "./config-elements-style"; import "./hui-card-features-editor"; +import { TIMESTAMP_RENDERING_FORMATS } from "../../components/types"; const badgeConfigStruct = assign( baseLovelaceBadgeConfig, @@ -49,6 +50,7 @@ const badgeConfigStruct = assign( show_entity_picture: optional(boolean()), tap_action: optional(actionConfigStruct), image: optional(string()), // For old badge config support + format: optional(enums(TIMESTAMP_RENDERING_FORMATS)), }) ); diff --git a/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts index 710536903b98..f22c1a137b98 100644 --- a/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts @@ -8,6 +8,7 @@ import { assert, assign, boolean, + enums, object, optional, string, @@ -35,6 +36,7 @@ import { baseLovelaceCardConfig } from "../structs/base-card-struct"; import type { EditDetailElementEvent, EditSubElementEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; import "./hui-card-features-editor"; +import { TIMESTAMP_RENDERING_FORMATS } from "../../components/types"; const cardConfigStruct = assign( baseLovelaceCardConfig, @@ -51,6 +53,7 @@ const cardConfigStruct = assign( icon_tap_action: optional(actionConfigStruct), hold_action: optional(actionConfigStruct), features: optional(array(any())), + format: optional(enums(TIMESTAMP_RENDERING_FORMATS)), }) ); From a4a4f63df6caca7e701bfcd1d5a5ee96af72a678 Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Wed, 26 Feb 2025 11:01:02 -0800 Subject: [PATCH 5/7] Fix linting error --- src/common/datetime/relative_time.ts | 4 ++-- src/components/ha-relative-time.ts | 4 ++-- src/components/trace/hat-trace-timeline.ts | 2 +- src/dialogs/more-info/controls/more-info-update.ts | 1 + .../overview/ha-backup-overview-summary.ts | 5 +++++ .../lovelace/components/hui-timestamp-display.ts | 12 +++++++++--- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/common/datetime/relative_time.ts b/src/common/datetime/relative_time.ts index b0620f8843a4..b28748f90f26 100644 --- a/src/common/datetime/relative_time.ts +++ b/src/common/datetime/relative_time.ts @@ -25,8 +25,8 @@ export const relativeTime = ( from: Date, locale: FrontendLocaleData, to?: Date, - includeTense = true, - format?: RelativeTimeFormat + format?: RelativeTimeFormat, + includeTense = true ): string => { const diff = selectUnit(from, to, locale); const style: RelativeTimeStyle = format ? RelativeTimeFormat[format] : "long"; diff --git a/src/components/ha-relative-time.ts b/src/components/ha-relative-time.ts index 1fb65501d5ca..80253b4f9289 100644 --- a/src/components/ha-relative-time.ts +++ b/src/components/ha-relative-time.ts @@ -74,8 +74,8 @@ class HaRelativeTime extends ReactiveElement { date, this.hass.locale, undefined, - undefined, - this.format + this.format, + undefined ); this.innerHTML = this.capitalize ? capitalizeFirstLetter(relTime) diff --git a/src/components/trace/hat-trace-timeline.ts b/src/components/trace/hat-trace-timeline.ts index 7c330ccde18c..bf5f2a015eba 100644 --- a/src/components/trace/hat-trace-timeline.ts +++ b/src/components/trace/hat-trace-timeline.ts @@ -74,7 +74,7 @@ class RenderedTimeTracker { renderTime(from: Date, to: Date): void { this.entries.push(html` - ${relativeTime(from, this.hass.locale, to, false)} later + ${relativeTime(from, this.hass.locale, to, undefined, false)} later `); this.lastReportedTime = to; diff --git a/src/dialogs/more-info/controls/more-info-update.ts b/src/dialogs/more-info/controls/more-info-update.ts index 908e34d5e05c..56c320a79050 100644 --- a/src/dialogs/more-info/controls/more-info-update.ts +++ b/src/dialogs/more-info/controls/more-info-update.ts @@ -106,6 +106,7 @@ class MoreInfoUpdate extends LitElement { lastAutomaticBackupDate, this.hass.locale, now, + undefined, true ), } diff --git a/src/panels/config/backup/components/overview/ha-backup-overview-summary.ts b/src/panels/config/backup/components/overview/ha-backup-overview-summary.ts index b238ad9767ab..e6be358531b6 100644 --- a/src/panels/config/backup/components/overview/ha-backup-overview-summary.ts +++ b/src/panels/config/backup/components/overview/ha-backup-overview-summary.ts @@ -155,6 +155,7 @@ class HaBackupOverviewBackups extends LitElement { lastAttemptDate, this.hass.locale, now, + undefined, true ), } @@ -177,6 +178,7 @@ class HaBackupOverviewBackups extends LitElement { new Date(lastUploadedBackup.date), this.hass.locale, now, + undefined, true ), count: Object.keys(lastUploadedBackup.agents) @@ -245,6 +247,7 @@ class HaBackupOverviewBackups extends LitElement { lastAttemptDate, this.hass.locale, now, + undefined, true ), } @@ -264,6 +267,7 @@ class HaBackupOverviewBackups extends LitElement { new Date(lastUploadedBackup.date), this.hass.locale, now, + undefined, true ), count: Object.keys(lastUploadedBackup.agents) @@ -286,6 +290,7 @@ class HaBackupOverviewBackups extends LitElement { new Date(lastBackup.date), this.hass.locale, now, + undefined, true ), count: Object.keys(lastBackup.agents).length, diff --git a/src/panels/lovelace/components/hui-timestamp-display.ts b/src/panels/lovelace/components/hui-timestamp-display.ts index bbc4d6bc679f..143dcf3d3011 100644 --- a/src/panels/lovelace/components/hui-timestamp-display.ts +++ b/src/panels/lovelace/components/hui-timestamp-display.ts @@ -118,10 +118,16 @@ class HuiTimestampDisplay extends LitElement { this.ts, this.hass!.locale, undefined, - undefined, - this._format + this._format, + undefined ) - : relativeTime(new Date(), this.hass!.locale, this.ts, false); + : relativeTime( + new Date(), + this.hass!.locale, + this.ts, + undefined, + false + ); this._relative = this.capitalize ? capitalizeFirstLetter(this._relative) From 4b2a6797168d715fbcd6b782530558744a7c9eb5 Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Wed, 26 Feb 2025 11:30:55 -0800 Subject: [PATCH 6/7] Fix tests --- test/common/datetime/relative_time.test.ts | 125 ++++++++++++++++----- 1 file changed, 94 insertions(+), 31 deletions(-) diff --git a/test/common/datetime/relative_time.test.ts b/test/common/datetime/relative_time.test.ts index 031f6350ca2a..4df7eb85724a 100644 --- a/test/common/datetime/relative_time.test.ts +++ b/test/common/datetime/relative_time.test.ts @@ -34,7 +34,10 @@ describe("relativeTime", () => { assert.strictEqual(relativeTime(now, locale, now), "now"); }); it("returns 0 seconds without tense", () => { - assert.strictEqual(relativeTime(now, locale, now, false), "0 seconds"); + assert.strictEqual( + relativeTime(now, locale, now, undefined, false), + "0 seconds" + ); }); }); @@ -52,12 +55,12 @@ describe("relativeTime", () => { it("without tense", () => { assert.strictEqual( - relativeTime(date1, locale, date2, false), + relativeTime(date1, locale, date2, undefined, false), "33 seconds" ); assert.strictEqual( - relativeTime(date2, locale, date1, false), + relativeTime(date2, locale, date1, undefined, false), "33 seconds" ); }); @@ -77,12 +80,12 @@ describe("relativeTime", () => { it("without tense", () => { assert.strictEqual( - relativeTime(date1, locale, date2, false), + relativeTime(date1, locale, date2, undefined, false), "2 minutes" ); assert.strictEqual( - relativeTime(date2, locale, date1, false), + relativeTime(date2, locale, date1, undefined, false), "2 minutes" ); }); @@ -101,9 +104,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "2 hours"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "2 hours" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "2 hours"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "2 hours" + ); }); }); @@ -120,9 +129,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "23 hours"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "23 hours" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "23 hours"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "23 hours" + ); }); }); @@ -139,9 +154,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "1 day"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "1 day" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "1 day"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "1 day" + ); }); }); @@ -158,9 +179,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "2 days"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "2 days" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "2 days"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "2 days" + ); }); }); @@ -178,9 +205,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "5 days"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "5 days" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "5 days"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "5 days" + ); }); }); @@ -201,12 +234,12 @@ describe("relativeTime", () => { it("without tense", () => { assert.strictEqual( - relativeTime(date1, locale_monday, date2, false), + relativeTime(date1, locale_monday, date2, undefined, false), "1 week" ); assert.strictEqual( - relativeTime(date2, locale_monday, date1, false), + relativeTime(date2, locale_monday, date1, undefined, false), "1 week" ); }); @@ -227,9 +260,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "1 week"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "1 week" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "1 week"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "1 week" + ); }); }); @@ -250,12 +289,12 @@ describe("relativeTime", () => { it("without tense", () => { assert.strictEqual( - relativeTime(date1, locale_monday, date2, false), + relativeTime(date1, locale_monday, date2, undefined, false), "5 days" ); assert.strictEqual( - relativeTime(date2, locale_monday, date1, false), + relativeTime(date2, locale_monday, date1, undefined, false), "5 days" ); }); @@ -275,9 +314,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "2 weeks"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "2 weeks" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "2 weeks"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "2 weeks" + ); }); }); @@ -294,9 +339,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "4 weeks"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "4 weeks" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "4 weeks"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "4 weeks" + ); }); }); @@ -313,9 +364,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "1 month"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "1 month" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "1 month"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "1 month" + ); }); }); @@ -333,12 +390,12 @@ describe("relativeTime", () => { it("without tense", () => { assert.strictEqual( - relativeTime(date1, locale, date2, false), + relativeTime(date1, locale, date2, undefined, false), "11 months" ); assert.strictEqual( - relativeTime(date2, locale, date1, false), + relativeTime(date2, locale, date1, undefined, false), "11 months" ); }); @@ -357,9 +414,15 @@ describe("relativeTime", () => { }); it("without tense", () => { - assert.strictEqual(relativeTime(date1, locale, date2, false), "1 year"); + assert.strictEqual( + relativeTime(date1, locale, date2, undefined, false), + "1 year" + ); - assert.strictEqual(relativeTime(date2, locale, date1, false), "1 year"); + assert.strictEqual( + relativeTime(date2, locale, date1, undefined, false), + "1 year" + ); }); }); }); From cec0ae68c237ff4f24d089cb8a2d16b35a0ea2c8 Mon Sep 17 00:00:00 2001 From: breakthestatic Date: Wed, 26 Feb 2025 12:03:01 -0800 Subject: [PATCH 7/7] Remove unnecessary trailing undefined argument --- src/components/ha-relative-time.ts | 3 +-- src/panels/lovelace/components/hui-timestamp-display.ts | 8 +------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/components/ha-relative-time.ts b/src/components/ha-relative-time.ts index 80253b4f9289..77abde4ffb01 100644 --- a/src/components/ha-relative-time.ts +++ b/src/components/ha-relative-time.ts @@ -74,8 +74,7 @@ class HaRelativeTime extends ReactiveElement { date, this.hass.locale, undefined, - this.format, - undefined + this.format ); this.innerHTML = this.capitalize ? capitalizeFirstLetter(relTime) diff --git a/src/panels/lovelace/components/hui-timestamp-display.ts b/src/panels/lovelace/components/hui-timestamp-display.ts index 143dcf3d3011..33e986569eb5 100644 --- a/src/panels/lovelace/components/hui-timestamp-display.ts +++ b/src/panels/lovelace/components/hui-timestamp-display.ts @@ -114,13 +114,7 @@ class HuiTimestampDisplay extends LitElement { private _updateRelative(): void { if (this.ts && this.hass?.localize) { this._relative = isRelativeTimeFormat(this._format) - ? relativeTime( - this.ts, - this.hass!.locale, - undefined, - this._format, - undefined - ) + ? relativeTime(this.ts, this.hass!.locale, undefined, this._format) : relativeTime( new Date(), this.hass!.locale,