mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Use memoize in formatDateNumeric (#16686)
This commit is contained in:
parent
25986f239e
commit
9797950f32
@ -31,52 +31,63 @@ const formatDateMem = memoizeOne(
|
|||||||
);
|
);
|
||||||
|
|
||||||
// 10/08/2021
|
// 10/08/2021
|
||||||
export const formatDateNumeric = (dateObj: Date, locale: FrontendLocaleData) =>
|
export const formatDateNumeric = (
|
||||||
formatDateNumericMem(locale, dateObj);
|
dateObj: Date,
|
||||||
|
locale: FrontendLocaleData
|
||||||
|
) => {
|
||||||
|
const formatter = formatDateNumericMem(locale);
|
||||||
|
|
||||||
const formatDateNumericMem = memoizeOne(
|
if (
|
||||||
(locale: FrontendLocaleData, dateObj: Date) => {
|
locale.date_format === DateFormat.language ||
|
||||||
const localeString =
|
locale.date_format === DateFormat.system
|
||||||
locale.date_format === DateFormat.system ? undefined : locale.language;
|
) {
|
||||||
|
return formatter.format(dateObj);
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
const parts = formatter.formatToParts(dateObj);
|
||||||
locale.date_format === DateFormat.language ||
|
|
||||||
locale.date_format === DateFormat.system
|
|
||||||
) {
|
|
||||||
return new Intl.DateTimeFormat(localeString, {
|
|
||||||
year: "numeric",
|
|
||||||
month: "numeric",
|
|
||||||
day: "numeric",
|
|
||||||
}).format(dateObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
const parts = new Intl.DateTimeFormat(localeString, {
|
const literal = parts.find((value) => value.type === "literal")?.value;
|
||||||
|
const day = parts.find((value) => value.type === "day")?.value;
|
||||||
|
const month = parts.find((value) => value.type === "month")?.value;
|
||||||
|
const year = parts.find((value) => value.type === "year")?.value;
|
||||||
|
|
||||||
|
const lastPart = parts.at(parts.length - 1);
|
||||||
|
let lastLiteral = lastPart?.type === "literal" ? lastPart?.value : "";
|
||||||
|
|
||||||
|
if (locale.language === "bg" && locale.date_format === DateFormat.YMD) {
|
||||||
|
lastLiteral = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const formats = {
|
||||||
|
[DateFormat.DMY]: `${day}${literal}${month}${literal}${year}${lastLiteral}`,
|
||||||
|
[DateFormat.MDY]: `${month}${literal}${day}${literal}${year}${lastLiteral}`,
|
||||||
|
[DateFormat.YMD]: `${year}${literal}${month}${literal}${day}${lastLiteral}`,
|
||||||
|
};
|
||||||
|
|
||||||
|
return formats[locale.date_format];
|
||||||
|
};
|
||||||
|
|
||||||
|
const formatDateNumericMem = memoizeOne((locale: FrontendLocaleData) => {
|
||||||
|
const localeString =
|
||||||
|
locale.date_format === DateFormat.system ? undefined : locale.language;
|
||||||
|
|
||||||
|
if (
|
||||||
|
locale.date_format === DateFormat.language ||
|
||||||
|
locale.date_format === DateFormat.system
|
||||||
|
) {
|
||||||
|
return new Intl.DateTimeFormat(localeString, {
|
||||||
year: "numeric",
|
year: "numeric",
|
||||||
month: "numeric",
|
month: "numeric",
|
||||||
day: "numeric",
|
day: "numeric",
|
||||||
}).formatToParts(dateObj);
|
});
|
||||||
|
|
||||||
const literal = parts.find((value) => value.type === "literal")?.value;
|
|
||||||
const day = parts.find((value) => value.type === "day")?.value;
|
|
||||||
const month = parts.find((value) => value.type === "month")?.value;
|
|
||||||
const year = parts.find((value) => value.type === "year")?.value;
|
|
||||||
|
|
||||||
const lastPart = parts.at(parts.length - 1);
|
|
||||||
let lastLiteral = lastPart?.type === "literal" ? lastPart?.value : "";
|
|
||||||
|
|
||||||
if (localeString === "bg" && locale.date_format === DateFormat.YMD) {
|
|
||||||
lastLiteral = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
const formats = {
|
|
||||||
[DateFormat.DMY]: `${day}${literal}${month}${literal}${year}${lastLiteral}`,
|
|
||||||
[DateFormat.MDY]: `${month}${literal}${day}${literal}${year}${lastLiteral}`,
|
|
||||||
[DateFormat.YMD]: `${year}${literal}${month}${literal}${day}${lastLiteral}`,
|
|
||||||
};
|
|
||||||
|
|
||||||
return formats[locale.date_format];
|
|
||||||
}
|
}
|
||||||
);
|
|
||||||
|
return new Intl.DateTimeFormat(localeString, {
|
||||||
|
year: "numeric",
|
||||||
|
month: "numeric",
|
||||||
|
day: "numeric",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Aug 10
|
// Aug 10
|
||||||
export const formatDateShort = (dateObj: Date, locale: FrontendLocaleData) =>
|
export const formatDateShort = (dateObj: Date, locale: FrontendLocaleData) =>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user