Fix tag date meta, rationalize camera converters
This commit is contained in:
parent
436462001a
commit
7a333d7c3e
@ -13,12 +13,12 @@ import {
|
||||
isPathTagPhotoShare,
|
||||
isPathTagShare,
|
||||
} from '@/site/paths';
|
||||
import { getMakeModelFromCameraString } from '@/camera';
|
||||
import { getCameraFromKey } from '@/camera';
|
||||
|
||||
const PHOTO_ID = 'UsKSGcbt';
|
||||
const TAG = 'tag-name';
|
||||
const CAMERA = 'fujifilm-x-t1';
|
||||
const CAMERA_OBJECT = getMakeModelFromCameraString(CAMERA);
|
||||
const CAMERA_OBJECT = getCameraFromKey(CAMERA);
|
||||
const SHARE = 'share';
|
||||
|
||||
const PATH_ROOT = '/';
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { auth } from '@/auth';
|
||||
import { getImageCacheHeadersForAuth, getPhotosCached } from '@/cache';
|
||||
import { getMakeModelFromCameraString } from '@/camera';
|
||||
import { getCameraFromKey } from '@/camera';
|
||||
import {
|
||||
IMAGE_OG_SMALL_SIZE,
|
||||
MAX_PHOTOS_TO_SHOW_PER_TAG,
|
||||
@ -15,7 +15,7 @@ export async function GET(
|
||||
_: Request,
|
||||
context: { params: { camera: string } },
|
||||
) {
|
||||
const camera = getMakeModelFromCameraString(context.params.camera);
|
||||
const camera = getCameraFromKey(context.params.camera);
|
||||
|
||||
const [
|
||||
photos,
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { getMakeModelFromCameraString } from '@/camera';
|
||||
import { getCameraFromKey } from '@/camera';
|
||||
import { Metadata } from 'next';
|
||||
import { generateMetaForCamera } from '@/camera/meta';
|
||||
import { GRID_THUMBNAILS_TO_SHOW_MAX } from '@/photo';
|
||||
@ -18,7 +18,7 @@ interface CameraProps {
|
||||
export async function generateMetadata({
|
||||
params,
|
||||
}: CameraProps): Promise<Metadata> {
|
||||
const camera = getMakeModelFromCameraString(params.camera);
|
||||
const camera = getCameraFromKey(params.camera);
|
||||
|
||||
const [
|
||||
photos,
|
||||
@ -57,7 +57,7 @@ export default async function CameraPage({
|
||||
params,
|
||||
searchParams,
|
||||
}: CameraProps & PaginationParams) {
|
||||
const camera = getMakeModelFromCameraString(params.camera);
|
||||
const camera = getCameraFromKey(params.camera);
|
||||
|
||||
const {
|
||||
photos,
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { cameraFromPhoto, getMakeModelFromCameraString } from '@/camera';
|
||||
import { cameraFromPhoto, getCameraFromKey } from '@/camera';
|
||||
import CameraShareModal from '@/camera/CameraShareModal';
|
||||
import { generateMetaForCamera } from '@/camera/meta';
|
||||
import { Metadata } from 'next';
|
||||
@ -19,7 +19,7 @@ interface CameraProps {
|
||||
export async function generateMetadata({
|
||||
params,
|
||||
}: CameraProps): Promise<Metadata> {
|
||||
const camera = getMakeModelFromCameraString(params.camera);
|
||||
const camera = getCameraFromKey(params.camera);
|
||||
|
||||
const [
|
||||
photos,
|
||||
@ -58,7 +58,7 @@ export default async function Share({
|
||||
params,
|
||||
searchParams,
|
||||
}: CameraProps & PaginationParams) {
|
||||
const cameraFromParams = getMakeModelFromCameraString(params.camera);
|
||||
const cameraFromParams = getCameraFromKey(params.camera);
|
||||
|
||||
const {
|
||||
photos,
|
||||
|
||||
@ -20,6 +20,7 @@ export async function generateMetadata({
|
||||
const [
|
||||
photos,
|
||||
count,
|
||||
dateRange,
|
||||
] = await getPhotosTagDataCached({
|
||||
tag,
|
||||
limit: GRID_THUMBNAILS_TO_SHOW_MAX,
|
||||
@ -30,7 +31,7 @@ export async function generateMetadata({
|
||||
title,
|
||||
description,
|
||||
images,
|
||||
} = generateMetaForTag(tag, photos, count);
|
||||
} = generateMetaForTag(tag, photos, count, dateRange);
|
||||
|
||||
return {
|
||||
title,
|
||||
|
||||
8
src/cache/index.ts
vendored
8
src/cache/index.ts
vendored
@ -69,14 +69,14 @@ const getPhotoCacheTag = (photoId: string) => `photo-${photoId}`;
|
||||
const getPhotoTagCountTag = (tag: string) =>
|
||||
`${TAG_PHOTOS_COUNT}-${TAG_TAGS}-${tag}`;
|
||||
|
||||
const getPhotoCameraCountTag = ({ make, model }: Camera) =>
|
||||
`${TAG_PHOTOS_COUNT}-${TAG_CAMERAS}-${createCameraKey(make, model)}`;
|
||||
const getPhotoCameraCountTag = (camera: Camera) =>
|
||||
`${TAG_PHOTOS_COUNT}-${TAG_CAMERAS}-${createCameraKey(camera)}`;
|
||||
|
||||
const getPhotoTagDateRangeTag = (tag: string) =>
|
||||
`${TAG_PHOTOS_DATE_RANGE}-${TAG_TAGS}-${tag}`;
|
||||
|
||||
const getPhotoCameraDateRangeTag = ({ make, model }: Camera) =>
|
||||
`${TAG_PHOTOS_DATE_RANGE}-${TAG_CAMERAS}-${createCameraKey(make, model)}`;
|
||||
const getPhotoCameraDateRangeTag = (camera: Camera) =>
|
||||
`${TAG_PHOTOS_DATE_RANGE}-${TAG_CAMERAS}-${createCameraKey(camera)}`;
|
||||
|
||||
export const revalidatePhotosTag = () =>
|
||||
revalidateTag(TAG_PHOTOS);
|
||||
|
||||
@ -8,12 +8,12 @@ export type Camera = {
|
||||
model: string
|
||||
};
|
||||
|
||||
export const createCameraKey = (make: string, model: string) =>
|
||||
export const createCameraKey = ({ make, model }: Camera) =>
|
||||
parameterize(`${make}-${model}`);
|
||||
|
||||
// Assumes no makes ('Fujifilm,' 'Apple,' 'Canon', etc.) have dashes
|
||||
export const getMakeModelFromCameraString = (camera: string): Camera => {
|
||||
const [make, model] = camera.toLowerCase().split(/[-| ](.*)/s);
|
||||
export const getCameraFromKey = (cameraKey: string): Camera => {
|
||||
const [make, model] = cameraKey.toLowerCase().split(/[-| ](.*)/s);
|
||||
return { make, model };
|
||||
};
|
||||
|
||||
@ -24,7 +24,7 @@ export const cameraFromPhoto = (
|
||||
photo?.make && photo?.model
|
||||
? { make: photo.make, model: photo.model }
|
||||
: typeof fallback === 'string'
|
||||
? getMakeModelFromCameraString(fallback)
|
||||
? getCameraFromKey(fallback)
|
||||
: fallback ?? CAMERA_PLACEHOLDER;
|
||||
|
||||
export const formatCameraText = ({ make, model }: Camera) =>
|
||||
|
||||
@ -281,7 +281,7 @@ const sqlGetUniqueCameras = async () => sql`
|
||||
WHERE hidden IS NOT TRUE
|
||||
ORDER BY camera ASC
|
||||
`.then(({ rows }) => rows.map(({ make, model }) => ({
|
||||
cameraKey: createCameraKey(make, model),
|
||||
cameraKey: createCameraKey({ make, model }),
|
||||
camera: { make, model } as Camera,
|
||||
})));
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import { BASE_URL } from './config';
|
||||
import {
|
||||
Camera,
|
||||
createCameraKey,
|
||||
getMakeModelFromCameraString,
|
||||
getCameraFromKey,
|
||||
} from '@/camera';
|
||||
|
||||
// Prefixes
|
||||
@ -81,11 +81,8 @@ export const pathForTag = (tag: string, next?: number) =>
|
||||
export const pathForTagShare = (tag: string) =>
|
||||
`${pathForTag(tag)}/${SHARE}`;
|
||||
|
||||
export const pathForCamera = ({ make, model }: Camera, next?: number) =>
|
||||
pathWithNext(
|
||||
`${PREFIX_CAMERA}/${createCameraKey(make, model)}`,
|
||||
next,
|
||||
);
|
||||
export const pathForCamera = (camera: Camera, next?: number) =>
|
||||
pathWithNext(`${PREFIX_CAMERA}/${createCameraKey(camera)}`, next);
|
||||
|
||||
export const pathForCameraShare = (camera: Camera) =>
|
||||
`${pathForCamera(camera)}/${SHARE}`;
|
||||
@ -177,7 +174,7 @@ export const getPathComponents = (pathname = ''): {
|
||||
const tag = pathname.match(/^\/t\/([^/]+)/)?.[1];
|
||||
const cameraString = pathname.match(/^\/shot-on\/([^/]+)/)?.[1];
|
||||
const camera = cameraString
|
||||
? getMakeModelFromCameraString(cameraString)
|
||||
? getCameraFromKey(cameraString)
|
||||
: undefined;
|
||||
return {
|
||||
photoId: (
|
||||
|
||||
Loading…
Reference in New Issue
Block a user