mirror of
https://github.com/immich-app/immich.git
synced 2025-12-09 23:18:02 -05:00
* fix: timezone bucket timezones * chore: open api * fix: interpret local time in utc * fix: tests * fix: refactor memory lane * fix(web): use local date in memory viewer * chore: set localDateTime non-null * fix: filter out memories from the current year * wip: move localDateTime to asset * fix: correct sorting from db * fix: migration * fix: web typo * fix: formatting * fix: e2e * chore: localDateTime is non-null * chore: more non-nulliness * fix: asset stub * fix: tests * fix: use extract and index for day of year * fix: don't show memories before today * fix: cleanup * fix: tests * fix: only use localtime for tz * fix: display memories in client timezone * fix: tests * fix: svelte tests * fix: bugs * chore: open api --------- Co-authored-by: Jonathan Jogenfors <jonathan@jogenfors.se>
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import type { AssetResponseDto } from '@api';
|
|
import lodash from 'lodash-es';
|
|
import { DateTime, Interval } from 'luxon';
|
|
|
|
export const groupDateFormat: Intl.DateTimeFormatOptions = {
|
|
weekday: 'short',
|
|
month: 'short',
|
|
day: 'numeric',
|
|
year: 'numeric',
|
|
};
|
|
|
|
export function formatGroupTitle(date: DateTime): string {
|
|
const today = DateTime.now().startOf('day');
|
|
|
|
// Today
|
|
if (today.hasSame(date, 'day')) {
|
|
return 'Today';
|
|
}
|
|
|
|
// Yesterday
|
|
if (Interval.fromDateTimes(date, today).length('days') == 1) {
|
|
return 'Yesterday';
|
|
}
|
|
|
|
// Last week
|
|
if (Interval.fromDateTimes(date, today).length('weeks') < 1) {
|
|
return date.toLocaleString({ weekday: 'long' });
|
|
}
|
|
|
|
// This year
|
|
if (today.hasSame(date, 'year')) {
|
|
return date.toLocaleString({
|
|
weekday: 'short',
|
|
month: 'short',
|
|
day: 'numeric',
|
|
});
|
|
}
|
|
|
|
return date.toLocaleString(groupDateFormat);
|
|
}
|
|
|
|
export function splitBucketIntoDateGroups(
|
|
assets: AssetResponseDto[],
|
|
locale: string | undefined,
|
|
): AssetResponseDto[][] {
|
|
return lodash
|
|
.chain(assets)
|
|
.groupBy((asset) => new Date(asset.localDateTime).toLocaleDateString(locale, groupDateFormat))
|
|
.sortBy((group) => assets.indexOf(group[0]))
|
|
.value();
|
|
}
|