53 lines
1.0 KiB
TypeScript
53 lines
1.0 KiB
TypeScript
import {
|
|
getPhotosCached,
|
|
getPhotosTagCountCached,
|
|
getPhotosTagDateRangeCached,
|
|
} from '@/photo/cache';
|
|
import {
|
|
PaginationSearchParams,
|
|
getPaginationForSearchParams,
|
|
} from '@/site/pagination';
|
|
import { pathForTag } from '@/site/paths';
|
|
|
|
export const getPhotosTagDataCached = ({
|
|
tag,
|
|
limit,
|
|
}: {
|
|
tag: string,
|
|
limit?: number,
|
|
}) =>
|
|
Promise.all([
|
|
getPhotosCached({ tag, limit }),
|
|
getPhotosTagCountCached(tag),
|
|
getPhotosTagDateRangeCached(tag),
|
|
]);
|
|
|
|
export const getPhotosTagDataCachedWithPagination = async ({
|
|
tag,
|
|
limit: limitProp,
|
|
searchParams,
|
|
}: {
|
|
tag: string,
|
|
limit?: number,
|
|
searchParams?: PaginationSearchParams,
|
|
}) => {
|
|
const { offset, limit } = getPaginationForSearchParams(searchParams);
|
|
|
|
const [photos, count, dateRange] =
|
|
await getPhotosTagDataCached({
|
|
tag,
|
|
limit: limitProp ?? limit,
|
|
});
|
|
|
|
const showMorePath = count > photos.length
|
|
? pathForTag(tag, offset + 1)
|
|
: undefined;
|
|
|
|
return {
|
|
photos,
|
|
count,
|
|
dateRange,
|
|
showMorePath,
|
|
};
|
|
};
|