From 4c725dd48164c3c076f991b7644b8510fbbec1e5 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Thu, 14 Sep 2023 16:15:14 -0500 Subject: [PATCH] Rename routes to paths --- src/app/(auth-state)/admin/photos/page.tsx | 6 ++-- src/app/(static)/p/[photoId]/layout.tsx | 4 +-- src/auth/index.ts | 4 +-- src/components/FooterAuth.tsx | 4 +-- src/photo/PhotoLarge.tsx | 6 ++-- src/photo/PhotoLink.tsx | 4 +-- src/photo/PhotoLinks.tsx | 8 ++--- src/photo/PhotoModal.tsx | 6 ++-- src/photo/PhotoOGTile.tsx | 6 ++-- src/photo/PhotoSmall.tsx | 4 +-- src/photo/PhotoTiny.tsx | 4 +-- src/photo/SharePhotoButton.tsx | 4 +-- src/photo/index.ts | 14 ++++---- src/services/blob.ts | 4 +-- src/site/paths.ts | 41 ++++++++++++++++++++++ src/site/routes.ts | 36 ------------------- src/tag/PhotoTag.tsx | 4 +-- 17 files changed, 82 insertions(+), 77 deletions(-) create mode 100644 src/site/paths.ts delete mode 100644 src/site/routes.ts diff --git a/src/app/(auth-state)/admin/photos/page.tsx b/src/app/(auth-state)/admin/photos/page.tsx index e2203d01..a970445e 100644 --- a/src/app/(auth-state)/admin/photos/page.tsx +++ b/src/app/(auth-state)/admin/photos/page.tsx @@ -18,7 +18,7 @@ import { getBlobUploadUrls, } from '@/services/blob'; import { getPhotos, getPhotosCount } from '@/services/postgres'; -import { routeForPhoto } from '@/site/routes'; +import { pathForPhoto, pathForPhotoEdit } from '@/site/paths'; import { getPhotosLimitForQuery, titleForPhoto } from '@/photo'; import MorePhotos from '@/components/MorePhotos'; @@ -74,7 +74,7 @@ export default async function AdminPage({
{photo.title || @@ -97,7 +97,7 @@ export default async function AdminPage({ {photo.takenAtNaive}
- + } - {!isRouteSignIn(path) && } + {!isPathSignIn(path) && } } /> ); diff --git a/src/photo/PhotoLarge.tsx b/src/photo/PhotoLarge.tsx index e5cc9bcc..9bf83dc5 100644 --- a/src/photo/PhotoLarge.tsx +++ b/src/photo/PhotoLarge.tsx @@ -3,7 +3,7 @@ import SiteGrid from '@/components/SiteGrid'; import ImageLarge from '@/components/ImageLarge'; import { cc } from '@/utility/css'; import Link from 'next/link'; -import { routeForPhoto } from '@/site/routes'; +import { pathForPhoto } from '@/site/paths'; import SharePhotoButton from './SharePhotoButton'; import PhotoTags from '@/tag/PhotoTags'; @@ -32,7 +32,7 @@ export default function PhotoLarge({ {renderMiniGrid(<> {titleForPhoto(photo)} diff --git a/src/photo/PhotoLink.tsx b/src/photo/PhotoLink.tsx index ebe3b078..07af1512 100644 --- a/src/photo/PhotoLink.tsx +++ b/src/photo/PhotoLink.tsx @@ -5,7 +5,7 @@ import { Photo } from '@/photo'; import Link from 'next/link'; import { AnimationConfig } from '../components/AnimateItems'; import { useAppState } from '@/state'; -import { routeForPhoto } from '@/site/routes'; +import { pathForPhoto } from '@/site/paths'; export default function PhotoLink({ photo, @@ -23,7 +23,7 @@ export default function PhotoLink({ return ( photo ? { if (nextPhotoAnimation) { diff --git a/src/photo/PhotoLinks.tsx b/src/photo/PhotoLinks.tsx index ed5c81ed..4a9565f7 100644 --- a/src/photo/PhotoLinks.tsx +++ b/src/photo/PhotoLinks.tsx @@ -4,7 +4,7 @@ import { useEffect } from 'react'; import { Photo, getNextPhoto, getPreviousPhoto } from '@/photo'; import PhotoLink from './PhotoLink'; import { usePathname, useRouter } from 'next/navigation'; -import { isRoutePhotoShare, routeForPhoto } from '@/site/routes'; +import { isPathPhotoShare, pathForPhoto } from '@/site/paths'; import { useAppState } from '@/state'; import { AnimationConfig } from '@/components/AnimateItems'; @@ -23,7 +23,7 @@ export default function PhotoLinks({ const { setNextPhotoAnimation } = useAppState(); - const isRouteShare = isRoutePhotoShare(pathname); + const isRouteShare = isPathPhotoShare(pathname); const previousPhoto = getPreviousPhoto(photo, photos); const nextPhoto = getNextPhoto(photo, photos); @@ -34,14 +34,14 @@ export default function PhotoLinks({ case 'J': if (previousPhoto) { setNextPhotoAnimation?.(ANIMATION_RIGHT); - router.push(routeForPhoto(previousPhoto, isRouteShare)); + router.push(pathForPhoto(previousPhoto, isRouteShare)); } break; case 'ARROWRIGHT': case 'L': if (nextPhoto) { setNextPhotoAnimation?.(ANIMATION_LEFT); - router.push(routeForPhoto(nextPhoto, isRouteShare)); + router.push(pathForPhoto(nextPhoto, isRouteShare)); } break; case 'ESCAPE': diff --git a/src/photo/PhotoModal.tsx b/src/photo/PhotoModal.tsx index d14f7aea..7d327bbd 100644 --- a/src/photo/PhotoModal.tsx +++ b/src/photo/PhotoModal.tsx @@ -2,7 +2,7 @@ import Modal from '@/components/Modal'; import PhotoOGTile from '@/photo/PhotoOGTile'; -import { absoluteRouteForPhoto, routeForPhoto } from '@/site/routes'; +import { absolutePathForPhoto, pathForPhoto } from '@/site/paths'; import { TbPhotoShare } from 'react-icons/tb'; import { cc } from '@/utility/css'; import { BiCopy } from 'react-icons/bi'; @@ -11,10 +11,10 @@ import { toast } from 'sonner'; import { FiCheckSquare } from 'react-icons/fi'; export default function PhotoModal({ photo }: { photo: Photo }) { - const shareUrl = absoluteRouteForPhoto(photo); + const shareUrl = absolutePathForPhoto(photo); return ( - +
{ diff --git a/src/photo/PhotoSmall.tsx b/src/photo/PhotoSmall.tsx index 90c75219..61f9d981 100644 --- a/src/photo/PhotoSmall.tsx +++ b/src/photo/PhotoSmall.tsx @@ -2,7 +2,7 @@ import { Photo, titleForPhoto } from '.'; import ImageSmall from '@/components/ImageSmall'; import Link from 'next/link'; import { cc } from '@/utility/css'; -import { routeForPhoto } from '@/site/routes'; +import { pathForPhoto } from '@/site/paths'; export default function PhotoSmall({ photo, @@ -13,7 +13,7 @@ export default function PhotoSmall({ }) { return ( diff --git a/src/photo/index.ts b/src/photo/index.ts index 419b7d5b..da664262 100644 --- a/src/photo/index.ts +++ b/src/photo/index.ts @@ -1,7 +1,7 @@ import { - ABSOLUTE_ROUTE_FOR_HOME_IMAGE, - absoluteRouteForPhotoImage, -} from '@/site/routes'; + ABSOLUTE_PATH_FOR_HOME_IMAGE, + absolutePathForPhotoImage, +} from '@/site/paths'; import { formatDateFromPostgresString } from '@/utility/date'; import { formatAperture, @@ -140,11 +140,11 @@ export const generateOgImageMetaForPhotos = (photos: Photo[]): Metadata => { // Show multiple photos once a 3x2 grid is available return { openGraph: { - images: ABSOLUTE_ROUTE_FOR_HOME_IMAGE, + images: ABSOLUTE_PATH_FOR_HOME_IMAGE, }, twitter: { card: 'summary_large_image', - images: ABSOLUTE_ROUTE_FOR_HOME_IMAGE, + images: ABSOLUTE_PATH_FOR_HOME_IMAGE, }, }; } else if (photos.length > 0) { @@ -152,11 +152,11 @@ export const generateOgImageMetaForPhotos = (photos: Photo[]): Metadata => { const photo = photos[0]; return { openGraph: { - images: absoluteRouteForPhotoImage(photo), + images: absolutePathForPhotoImage(photo), }, twitter: { card: 'summary_large_image', - images: absoluteRouteForPhotoImage(photo), + images: absolutePathForPhotoImage(photo), }, }; } diff --git a/src/services/blob.ts b/src/services/blob.ts index 6db6832f..9a77901a 100644 --- a/src/services/blob.ts +++ b/src/services/blob.ts @@ -1,5 +1,5 @@ import { BLOB_BASE_URL } from '@/site'; -import { ROUTE_ADMIN_UPLOAD_BLOB_HANDLER } from '@/site/routes'; +import { PATH_ADMIN_UPLOAD_BLOB_HANDLER } from '@/site/paths'; import { del, list, put } from '@vercel/blob'; import { upload } from '@vercel/blob/client'; @@ -43,7 +43,7 @@ export const uploadPhotoFromClient = async ( file, { access: 'public', - handleUploadUrl: ROUTE_ADMIN_UPLOAD_BLOB_HANDLER, + handleUploadUrl: PATH_ADMIN_UPLOAD_BLOB_HANDLER, }, ); diff --git a/src/site/paths.ts b/src/site/paths.ts new file mode 100644 index 00000000..4e05ae7d --- /dev/null +++ b/src/site/paths.ts @@ -0,0 +1,41 @@ +import { Photo } from '@/photo'; +import { BASE_URL } from './config'; + +const PREFIX_PHOTO = '/p'; +const PREFIX_TAG = '/t'; +const PREFIX_ADMIN = '/admin'; + +export const PATH_ADMIN_PHOTOS = `${PREFIX_ADMIN}/photos`; +export const PATH_ADMIN_UPLOAD = `${PREFIX_ADMIN}/uploads`; +export const PATH_ADMIN_UPLOAD_BLOB_HANDLER = `${PATH_ADMIN_UPLOAD}/blob`; + +export const ABSOLUTE_PATH_FOR_HOME_IMAGE = `${BASE_URL}/home-image`; + +export const pathForPhoto = (photo: Photo, share?: boolean) => + share + ? `${PREFIX_PHOTO}/${photo.idShort}/share` + : `${PREFIX_PHOTO}/${photo.idShort}`; + +export const pathForPhotoEdit = (photo: Photo) => + `${PATH_ADMIN_PHOTOS}/${photo.idShort}/edit`; + +export const pathForTag = (tag: string) => `${PREFIX_TAG}/${tag}`; + +export const absolutePathForPhoto = (photo: Photo) => + `${BASE_URL}${pathForPhoto(photo)}`; + +export const absolutePathForPhotoImage = (photo: Photo) => + `${absolutePathForPhoto(photo)}/image`; + +export const isPathPhoto = (pathname = '') => + /^\/p\/[^/]+\/?$/.test(pathname); + +export const isPathPhotoShare = (pathname = '') => + /^\/p\/[^/]+\/share\/?$/.test(pathname); + +export const isPathSignIn = (pathname = '') => + pathname.startsWith('/sign-in'); + +export const isPathProtected = (pathname = '') => + pathname.startsWith(PREFIX_ADMIN) || + pathname === '/checklist'; diff --git a/src/site/routes.ts b/src/site/routes.ts deleted file mode 100644 index 72ea13d4..00000000 --- a/src/site/routes.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Photo } from '@/photo'; -import { BASE_URL } from './config'; - -const PHOTO_PREFIX = '/p'; -const TAG_PREFIX = '/t'; - -export const ROUTE_ADMIN_UPLOAD = '/admin/uploads'; -export const ROUTE_ADMIN_UPLOAD_BLOB_HANDLER = '/admin/uploads/blob'; - -export const ABSOLUTE_ROUTE_FOR_HOME_IMAGE = `${BASE_URL}/home-image`; - -export const routeForPhoto = (photo: Photo, share?: boolean) => - share - ? `${PHOTO_PREFIX}/${photo.idShort}/share` - : `${PHOTO_PREFIX}/${photo.idShort}`; - -export const routeForTag = (tag: string) => `${TAG_PREFIX}/${tag}`; - -export const absoluteRouteForPhoto = (photo: Photo) => - `${BASE_URL}${routeForPhoto(photo)}`; - -export const absoluteRouteForPhotoImage = (photo: Photo) => - `${absoluteRouteForPhoto(photo)}/image`; - -export const isRoutePhoto = (pathname = '') => - /^\/p\/[^/]+\/?$/.test(pathname); - -export const isRoutePhotoShare = (pathname = '') => - /^\/p\/[^/]+\/share\/?$/.test(pathname); - -export const isRouteSignIn = (pathname = '') => - pathname.startsWith('/sign-in'); - -export const isRouteProtected = (pathname = '') => - pathname.startsWith('/admin') || - pathname === '/checklist'; diff --git a/src/tag/PhotoTag.tsx b/src/tag/PhotoTag.tsx index ea7fcabd..70197185 100644 --- a/src/tag/PhotoTag.tsx +++ b/src/tag/PhotoTag.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import { routeForTag } from '@/site/routes'; +import { pathForTag } from '@/site/paths'; import { FaTag } from 'react-icons/fa'; export default function PhotoTag({ @@ -10,7 +10,7 @@ export default function PhotoTag({ return (