diff --git a/src/photo/PhotoDetailPage.tsx b/src/photo/PhotoDetailPage.tsx index 7b806f25..0ff0677d 100644 --- a/src/photo/PhotoDetailPage.tsx +++ b/src/photo/PhotoDetailPage.tsx @@ -41,6 +41,7 @@ export default function PhotoDetailPage({ tag={tag} photos={photos} selectedPhoto={photo} + dateRange={dateRange} />} />} {camera && diff --git a/src/photo/PhotoSetHeader.tsx b/src/photo/PhotoSetHeader.tsx index 1f62dd39..f034a867 100644 --- a/src/photo/PhotoSetHeader.tsx +++ b/src/photo/PhotoSetHeader.tsx @@ -60,7 +60,7 @@ export default function PhotoSetHeader({ )}> {start === end ? start - : <>{start}
– {end}} + : <>{end}
– {start}} ]} /> diff --git a/src/photo/index.ts b/src/photo/index.ts index 6bbb8508..d92b35c0 100644 --- a/src/photo/index.ts +++ b/src/photo/index.ts @@ -185,16 +185,26 @@ export const descriptionForPhotoSet = ( photoLabelForCount(explicitCount ?? photos.length), ].join(' '); +const sortPhotosByDate = ( + photos: Photo[], + order: 'ASC' | 'DESC' = 'DESC' +) => + [...photos].sort((a, b) => order === 'DESC' + ? b.takenAt.getTime() - a.takenAt.getTime() + : a.takenAt.getTime() - b.takenAt.getTime()); + export const dateRangeForPhotos = ( photos: Photo[], explicitDateRange?: PhotoDateRange, ) => { + const photosSorted = sortPhotosByDate(photos); + const start = formatDateFromPostgresString( - explicitDateRange?.start ?? photos[0].takenAtNaive, + explicitDateRange?.start ?? photosSorted[photos.length - 1].takenAtNaive, true, ); const end = formatDateFromPostgresString( - explicitDateRange?.end ?? photos[photos.length - 1].takenAtNaive, + explicitDateRange?.end ?? photosSorted[0].takenAtNaive, true ); const description = start === end diff --git a/src/services/postgres.ts b/src/services/postgres.ts index 03cd5700..59a1bf06 100644 --- a/src/services/postgres.ts +++ b/src/services/postgres.ts @@ -202,7 +202,7 @@ const sqlGetPhotosByTag = ( SELECT * FROM photos WHERE ${tag}=ANY(tags) AND hidden IS NOT TRUE - ORDER BY taken_at ASC + ORDER BY taken_at DESC LIMIT ${limit} `; @@ -226,7 +226,7 @@ const sqlGetPhotosBySimulation = async ( SELECT * FROM photos WHERE film_simulation=${simulation} AND hidden IS NOT TRUE - ORDER BY taken_at ASC + ORDER BY taken_at DESC LIMIT ${limit} `; diff --git a/src/tag/TagHeader.tsx b/src/tag/TagHeader.tsx index 36ffc44c..7d63ed21 100644 --- a/src/tag/TagHeader.tsx +++ b/src/tag/TagHeader.tsx @@ -1,4 +1,4 @@ -import { Photo } from '@/photo'; +import { Photo, PhotoDateRange } from '@/photo'; import PhotoTag from './PhotoTag'; import { descriptionForTaggedPhotos } from '.'; import { pathForTagShare } from '@/site/paths'; @@ -9,11 +9,13 @@ export default function TagHeader({ photos, selectedPhoto, count, + dateRange, }: { tag: string photos: Photo[] selectedPhoto?: Photo count?: number + dateRange?: PhotoDateRange }) { return ( ); }