feat: Add media details sidebar and date handling features, including media grouping by date

This commit is contained in:
2025-11-16 03:32:18 +01:00
parent 94b184d3b0
commit 2003a55ff7
16 changed files with 362 additions and 52 deletions

View File

@@ -0,0 +1,36 @@
import { format, parseISO, isToday, isYesterday } from "date-fns";
import type { Media } from "@/domain/types";
/**
* Groups a flat array of media items into a Map
* where keys are human-readable date strings.
* Assumes the media array is already sorted chronologically.
*/
export const groupMediaByDate = (
media: Media[],
): Map<string, Media[]> => { // <-- Return a Map
return media.reduce(
(acc, m) => {
const dateString = m.date_taken ?? m.created_at;
const date = parseISO(dateString);
let groupTitle: string;
if (isToday(date)) {
groupTitle = "Today";
} else if (isYesterday(date)) {
groupTitle = "Yesterday";
} else {
// e.g., "November 2025"
groupTitle = format(date, "MMMM yyyy");
}
if (!acc.has(groupTitle)) {
acc.set(groupTitle, []);
}
acc.get(groupTitle)!.push(m);
return acc;
},
new Map<string, Media[]>(),
);
};