Vercel/app/admin/recipes/[recipe]/edit/page.tsx
Sam Becker 1e66815a3d
Albums (#315)
* Make /db top-level module

* Create Album type

* Pin pnpm version

* Generalize query modules

* Finalize album postgres data type

* Remove temp albums prop

* Create basic album primitives

* Fix temporary album bugs

* Add albums to sidebar

* Disambiguate string date utilities

* Localize album language

* Add album join option to core photo queries

* Tweak album icon placement

* Add album photo detail page

* Refine Album data model

* Display album subhead when available

* Generate album og images

* Finalize album share modal

* Add albums to sitemap

* Statically pre-render albums

* Display tags on albums

* Add albums to cmd-k menu

* Handle album tag overflow

* Stop truncating album subheads

* Create core admin album views

* Make albums editable

* Create/edit albums on photo save, add delete album
2025-09-16 21:47:22 -05:00

59 lines
1.6 KiB
TypeScript

import AdminChildPage from '@/components/AdminChildPage';
import { redirect } from 'next/navigation';
import { getPhotosCached, getPhotosMetaCached } from '@/photo/cache';
import { PATH_ADMIN, PATH_ADMIN_RECIPES, pathForRecipe } from '@/app/path';
import PhotoLightbox from '@/photo/PhotoLightbox';
import AdminRecipeBadge from '@/admin/AdminRecipeBadge';
import AdminRecipeForm from '@/admin/AdminRecipeForm';
import { getRecipePropsFromPhotos } from '@/recipe';
import AdminShowRecipeButton from '@/admin/AdminShowRecipeButton';
const MAX_PHOTO_TO_SHOW = 6;
interface Props {
params: Promise<{ recipe: string }>
}
export default async function RecipePageEdit({
params,
}: Props) {
const { recipe: recipeFromParams } = await params;
const recipe = decodeURIComponent(recipeFromParams);
const [
{ count },
photos,
] = await Promise.all([
getPhotosMetaCached({ recipe }),
getPhotosCached({ recipe, limit: MAX_PHOTO_TO_SHOW }),
]);
const { data, film } = getRecipePropsFromPhotos(photos) ?? {};
if (count === 0) { redirect(PATH_ADMIN); }
return (
<AdminChildPage
backPath={PATH_ADMIN_RECIPES}
backLabel="Recipes"
breadcrumb={<AdminRecipeBadge {...{ recipe, count, hideBadge: true }} />}
accessory={data && film &&
<AdminShowRecipeButton
title={recipe}
data={data}
film={film}
/>
}
>
<AdminRecipeForm {...{ recipe }}>
<PhotoLightbox
{...{ count, photos, recipe }}
maxPhotosToShow={MAX_PHOTO_TO_SHOW}
moreLink={pathForRecipe(recipe)}
/>
</AdminRecipeForm>
</AdminChildPage>
);
};