From 4a7ea83e80a983fdf176cc78d8e032fe643bf98c Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Thu, 14 Sep 2023 20:43:53 -0500 Subject: [PATCH] Optimize tag page layout --- src/app/(static)/t/[tag]/page.tsx | 23 +++++++++++++++++++++-- src/photo/index.ts | 3 +++ src/services/postgres.ts | 2 +- src/tag/PhotoTag.tsx | 7 +++++-- src/utility/date.ts | 9 +++++---- 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/app/(static)/t/[tag]/page.tsx b/src/app/(static)/t/[tag]/page.tsx index a844e6bc..70cc30f4 100644 --- a/src/app/(static)/t/[tag]/page.tsx +++ b/src/app/(static)/t/[tag]/page.tsx @@ -8,6 +8,7 @@ import { pageTitleForTag, } from '@/tag'; import PhotoTag from '@/tag/PhotoTag'; +import { cc } from '@/utility/css'; import { Metadata } from 'next'; interface TagProps { @@ -35,14 +36,32 @@ export async function generateMetadata({ export default async function TagPage({ params: { tag } }: TagProps) { const photos = await getPhotos(undefined, undefined, undefined, tag); + const dateStart = photos[0].takenAtNaiveFormattedShort; + const dateEnd = photos[photos.length - 1].takenAtNaiveFormattedShort; + return ( -
+
- + {descriptionForTaggedPhotos(photos)} + + {dateStart === dateEnd + ? dateStart + : <>{dateStart}
– {dateEnd}} +
} diff --git a/src/photo/index.ts b/src/photo/index.ts index da664262..9dca4709 100644 --- a/src/photo/index.ts +++ b/src/photo/index.ts @@ -64,6 +64,7 @@ export interface Photo extends PhotoDb { exposureTimeFormatted?: string exposureCompensationFormatted?: string takenAtNaiveFormatted?: string + takenAtNaiveFormattedShort?: string } export const parsePhotoFromDb = (photoDbRaw: PhotoDb): Photo => { @@ -89,6 +90,8 @@ export const parsePhotoFromDb = (photoDbRaw: PhotoDb): Photo => { formatExposureCompensation(photoDb.exposureCompensation), takenAtNaiveFormatted: formatDateFromPostgresString(photoDb.takenAtNaive), + takenAtNaiveFormattedShort: + formatDateFromPostgresString(photoDb.takenAtNaive, true), }; }; diff --git a/src/services/postgres.ts b/src/services/postgres.ts index ae6c64ba..7c20c9ff 100644 --- a/src/services/postgres.ts +++ b/src/services/postgres.ts @@ -166,7 +166,7 @@ const sqlGetPhotosFromDbByTag = ( ) => sql` SELECT * FROM photos WHERE ${tag}=ANY(tags) - ORDER BY taken_at DESC + ORDER BY taken_at ASC LIMIT ${limit} OFFSET ${offset} ` .then(({ rows }) => rows.map(parsePhotoFromDb)); diff --git a/src/tag/PhotoTag.tsx b/src/tag/PhotoTag.tsx index 8746b27d..ab8c23b4 100644 --- a/src/tag/PhotoTag.tsx +++ b/src/tag/PhotoTag.tsx @@ -11,12 +11,15 @@ export default function PhotoTag({ + {tag.replaceAll('-', ' ')} - ); } diff --git a/src/utility/date.ts b/src/utility/date.ts index d092cfdb..90ccdb8c 100644 --- a/src/utility/date.ts +++ b/src/utility/date.ts @@ -1,13 +1,14 @@ import { format, parseISO, parse } from 'date-fns'; +const DATE_STRING_FORMAT_SHORT = 'dd MMM yyyy'; const DATE_STRING_FORMAT = 'd MMM yyyy h:mma'; const DATE_STRING_FORMAT_POSTGRES = 'yyyy-MM-dd HH:mm:ss'; -export const formatDate = (date: Date) => - format(date, DATE_STRING_FORMAT); +export const formatDate = (date: Date, short?: boolean) => + format(date, short? DATE_STRING_FORMAT_SHORT : DATE_STRING_FORMAT); -export const formatDateFromPostgresString = (date: string) => - formatDate(parse(date, DATE_STRING_FORMAT_POSTGRES, new Date())); +export const formatDateFromPostgresString = (date: string, short?: boolean) => + formatDate(parse(date, DATE_STRING_FORMAT_POSTGRES, new Date()), short); export const formatDateForPostgres = (date: Date) => date.toISOString().replace(