mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
fix(web): Make date-time formatting follow locale (#17899)
* fixed missing $locale parameter to .toLocaleString * Remove unused types and functions in timeline-util * remove unused export * re-enable export because it is needed for tests * format
This commit is contained in:
parent
205260d31c
commit
85ac0512a6
6 changed files with 31 additions and 70 deletions
|
|
@ -1,41 +1,13 @@
|
|||
import type { AssetBucket } from '$lib/stores/assets-store.svelte';
|
||||
import { locale } from '$lib/stores/preferences.store';
|
||||
import { type CommonJustifiedLayout } from '$lib/utils/layout-utils';
|
||||
|
||||
import type { AssetResponseDto } from '@immich/sdk';
|
||||
import { memoize } from 'lodash-es';
|
||||
import { DateTime, type LocaleOptions } from 'luxon';
|
||||
import { get } from 'svelte/store';
|
||||
|
||||
export type DateGroup = {
|
||||
bucket: AssetBucket;
|
||||
index: number;
|
||||
row: number;
|
||||
col: number;
|
||||
date: DateTime;
|
||||
groupTitle: string;
|
||||
assets: AssetResponseDto[];
|
||||
assetsIntersecting: boolean[];
|
||||
height: number;
|
||||
intersecting: boolean;
|
||||
geometry: CommonJustifiedLayout;
|
||||
};
|
||||
export type ScrubberListener = (
|
||||
bucketDate: string | undefined,
|
||||
overallScrollPercent: number,
|
||||
bucketScrollPercent: number,
|
||||
) => void | Promise<void>;
|
||||
export type ScrollTargetListener = ({
|
||||
bucket,
|
||||
dateGroup,
|
||||
asset,
|
||||
offset,
|
||||
}: {
|
||||
bucket: AssetBucket;
|
||||
dateGroup: DateGroup;
|
||||
asset: AssetResponseDto;
|
||||
offset: number;
|
||||
}) => void;
|
||||
|
||||
export const fromLocalDateTime = (localDateTime: string) =>
|
||||
DateTime.fromISO(localDateTime, { zone: 'UTC', locale: get(locale) });
|
||||
|
|
@ -43,31 +15,6 @@ export const fromLocalDateTime = (localDateTime: string) =>
|
|||
export const fromDateTimeOriginal = (dateTimeOriginal: string, timeZone: string) =>
|
||||
DateTime.fromISO(dateTimeOriginal, { zone: timeZone });
|
||||
|
||||
export type LayoutBox = {
|
||||
aspectRatio: number;
|
||||
top: number;
|
||||
width: number;
|
||||
height: number;
|
||||
left: number;
|
||||
forcedAspectRatio?: boolean;
|
||||
};
|
||||
|
||||
export function findTotalOffset(element: HTMLElement, stop: HTMLElement) {
|
||||
let offset = 0;
|
||||
while (element.offsetParent && element !== stop) {
|
||||
offset += element.offsetTop;
|
||||
element = element.offsetParent as HTMLElement;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
export const groupDateFormat: Intl.DateTimeFormatOptions = {
|
||||
weekday: 'short',
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
year: 'numeric',
|
||||
};
|
||||
|
||||
export function formatGroupTitle(_date: DateTime): string {
|
||||
if (!_date.isValid) {
|
||||
return _date.toString();
|
||||
|
|
@ -87,20 +34,24 @@ export function formatGroupTitle(_date: DateTime): string {
|
|||
|
||||
// Last week
|
||||
if (date >= today.minus({ days: 6 }) && date < today) {
|
||||
return date.toLocaleString({ weekday: 'long' });
|
||||
return date.toLocaleString({ weekday: 'long' }, { locale: get(locale) });
|
||||
}
|
||||
|
||||
// This year
|
||||
if (today.hasSame(date, 'year')) {
|
||||
return date.toLocaleString({
|
||||
weekday: 'short',
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
});
|
||||
return date.toLocaleString(
|
||||
{
|
||||
weekday: 'short',
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
},
|
||||
{ locale: get(locale) },
|
||||
);
|
||||
}
|
||||
|
||||
return getDateLocaleString(date);
|
||||
return getDateLocaleString(date, { locale: get(locale) });
|
||||
}
|
||||
|
||||
export const getDateLocaleString = (date: DateTime, opts?: LocaleOptions): string =>
|
||||
date.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY, opts);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue