}
label="Astia/Soft"
type="icon-last"
iconWide
diff --git a/app/admin/recipes/[recipe]/edit/page.tsx b/app/admin/recipes/[recipe]/edit/page.tsx
index 4c85519a..c9db0fbd 100644
--- a/app/admin/recipes/[recipe]/edit/page.tsx
+++ b/app/admin/recipes/[recipe]/edit/page.tsx
@@ -32,7 +32,7 @@ export default async function RecipePageEdit({
const {
recipeData,
- filmSimulation,
+ film,
} = getPhotoWithRecipeFromPhotos(photos) ?? {};
if (count === 0) { redirect(PATH_ADMIN); }
@@ -42,11 +42,11 @@ export default async function RecipePageEdit({
backPath={PATH_ADMIN_RECIPES}
backLabel="Recipes"
breadcrumb={
}
- accessory={recipeData && filmSimulation &&
+ accessory={recipeData && film &&
}
>
diff --git a/app/admin/uploads/[uploadPath]/page.tsx b/app/admin/uploads/[uploadPath]/page.tsx
index 7ed68f0c..d55b9912 100644
--- a/app/admin/uploads/[uploadPath]/page.tsx
+++ b/app/admin/uploads/[uploadPath]/page.tsx
@@ -10,7 +10,7 @@ import {
} from '@/app/config';
import ErrorNote from '@/components/ErrorNote';
import { getRecipeTitleForData } from '@/photo/db/query';
-import { FilmSimulation } from '@/simulation';
+import { FilmSimulation } from '@/film';
export const maxDuration = 60;
@@ -49,10 +49,10 @@ export default async function UploadPage({ params }: Params) {
] = await Promise.all([
getUniqueTagsCached(),
getUniqueRecipesCached(),
- formDataFromExif?.recipeData && formDataFromExif.filmSimulation
+ formDataFromExif?.recipeData && formDataFromExif.film
? getRecipeTitleForData(
formDataFromExif.recipeData,
- formDataFromExif.filmSimulation as FilmSimulation,
+ formDataFromExif.film as FilmSimulation,
)
: undefined,
]);
diff --git a/app/film-demo/animate/page.tsx b/app/film-demo/animate/page.tsx
index 841140d9..0542cda2 100644
--- a/app/film-demo/animate/page.tsx
+++ b/app/film-demo/animate/page.tsx
@@ -5,7 +5,7 @@ import { clsx } from 'clsx/lite';
import {
FILM_SIMULATION_FORM_INPUT_OPTIONS,
} from '@/platforms/fujifilm/simulation';
-import PhotoFilmSimulation from '@/simulation/PhotoFilmSimulation';
+import PhotoFilm from '@/film/PhotoFilm';
import { useEffect, useState } from 'react';
export default function FilmPage() {
@@ -27,8 +27,8 @@ export default function FilmPage() {
diff --git a/app/film-demo/page.tsx b/app/film-demo/page.tsx
index cb5724c1..972e4143 100644
--- a/app/film-demo/page.tsx
+++ b/app/film-demo/page.tsx
@@ -1,15 +1,15 @@
import {
FILM_SIMULATION_FORM_INPUT_OPTIONS,
} from '@/platforms/fujifilm/simulation';
-import PhotoFilmSimulation from '@/simulation/PhotoFilmSimulation';
+import PhotoFilm from '@/film/PhotoFilm';
export default function FilmPage() {
return (
{FILM_SIMULATION_FORM_INPUT_OPTIONS.map(({ value }) =>
)}
diff --git a/app/film/[simulation]/[photoId]/page.tsx b/app/film/[film]/[photoId]/page.tsx
similarity index 62%
rename from app/film/[simulation]/[photoId]/page.tsx
rename to app/film/[film]/[photoId]/page.tsx
index 0566cd4f..f20b5942 100644
--- a/app/film/[simulation]/[photoId]/page.tsx
+++ b/app/film/[film]/[photoId]/page.tsx
@@ -11,7 +11,7 @@ import {
absolutePathForPhotoImage,
} from '@/app/paths';
import PhotoDetailPage from '@/photo/PhotoDetailPage';
-import { FilmSimulation } from '@/simulation';
+import { FilmSimulation } from '@/film';
import {
getPhotosMetaCached,
getPhotosNearIdCached,
@@ -20,30 +20,30 @@ import { cache } from 'react';
const getPhotosNearIdCachedCached = cache((
photoId: string,
- simulation: FilmSimulation,
+ film: FilmSimulation,
) =>
getPhotosNearIdCached(
photoId,
- { simulation, limit: RELATED_GRID_PHOTOS_TO_SHOW + 2 },
+ { film, limit: RELATED_GRID_PHOTOS_TO_SHOW + 2 },
));
-interface PhotoFilmSimulationProps {
- params: Promise<{ photoId: string, simulation: FilmSimulation }>
+interface PhotoFilmProps {
+ params: Promise<{ photoId: string, film: FilmSimulation }>
}
export async function generateMetadata({
params,
-}: PhotoFilmSimulationProps): Promise
{
- const { photoId, simulation } = await params;
+}: PhotoFilmProps): Promise {
+ const { photoId, film } = await params;
- const { photo } = await getPhotosNearIdCachedCached(photoId, simulation);
+ const { photo } = await getPhotosNearIdCachedCached(photoId, film);
if (!photo) { return {}; }
const title = titleForPhoto(photo);
const description = descriptionForPhoto(photo);
const images = absolutePathForPhotoImage(photo);
- const url = absolutePathForPhoto({ photo, simulation });
+ const url = absolutePathForPhoto({ photo, film: film });
return {
title,
@@ -63,24 +63,24 @@ export async function generateMetadata({
};
}
-export default async function PhotoFilmSimulationPage({
+export default async function PhotoFilmPage({
params,
-}: PhotoFilmSimulationProps) {
- const { photoId, simulation } = await params;
+}: PhotoFilmProps) {
+ const { photoId, film } = await params;
const { photo, photos, photosGrid, indexNumber } =
- await getPhotosNearIdCachedCached(photoId, simulation);
+ await getPhotosNearIdCachedCached(photoId, film);
if (!photo) { redirect(PATH_ROOT); }
- const { count, dateRange } = await getPhotosMetaCached({ simulation });
+ const { count, dateRange } = await getPhotosMetaCached({ film: film });
return (
simulations.map(({ simulation }) => ({ simulation })),
+ getUniqueFilms,
+ films => films.map(({ film }) => ({ film })),
);
export async function GET(
_: Request,
- context: { params: Promise<{ simulation: FilmSimulation }> },
+ context: { params: Promise<{ film: FilmSimulation }> },
) {
- const { simulation } = await context.params;
+ const { film } = await context.params;
const [
photos,
{ fontFamily, fonts },
headers,
] = await Promise.all([
- getPhotosCached({ limit: MAX_PHOTOS_TO_SHOW_PER_CATEGORY, simulation }),
+ getPhotosCached({
+ limit: MAX_PHOTOS_TO_SHOW_PER_CATEGORY,
+ film: film,
+ }),
getIBMPlexMono(),
getImageResponseCacheControlHeaders(),
]);
@@ -38,8 +41,8 @@ export async function GET(
const { width, height } = IMAGE_OG_DIMENSION_SMALL;
return new ImageResponse(
- simulations.map(({ simulation }) => ({ simulation })),
+ getUniqueFilms,
+ films => films.map(({ film }) => ({ film })),
);
-interface FilmSimulationProps {
- params: Promise<{ simulation: FilmSimulation }>
+interface FilmProps {
+ params: Promise<{ film: FilmSimulation }>
}
export async function generateMetadata({
params,
-}: FilmSimulationProps): Promise {
- const { simulation } = await params;
+}: FilmProps): Promise {
+ const { film } = await params;
const [
photos,
{ count, dateRange },
- ] = await getPhotosFilmSimulationDataCachedCached({
- simulation,
+ ] = await getPhotosFilmDataCachedCached({
+ film,
limit: INFINITE_SCROLL_GRID_INITIAL,
});
@@ -43,7 +43,7 @@ export async function generateMetadata({
title,
description,
images,
- } = generateMetaForFilmSimulation(simulation, photos, count, dateRange);
+ } = generateMetaForFilm(film, photos, count, dateRange);
return {
title,
@@ -62,24 +62,24 @@ export async function generateMetadata({
};
}
-export default async function FilmSimulationPage({
+export default async function FilmPage({
params,
-}: FilmSimulationProps) {
- const { simulation } = await params;
+}: FilmProps) {
+ const { film } = await params;
const [
photos,
{ count, dateRange },
- ] = await getPhotosFilmSimulationDataCachedCached({
- simulation,
+ ] = await getPhotosFilmDataCachedCached({
+ film,
limit: INFINITE_SCROLL_GRID_INITIAL,
});
if (photos.length === 0) { redirect(PATH_ROOT); }
return (
- photos[0])
@@ -32,7 +32,7 @@ export default async function OGOverviewPage() {
.catch(() => []),
getPhotosCached({ limit: 1, camera })
.catch(() => []),
- getPhotosCached({ limit: 1, simulation })
+ getPhotosCached({ limit: 1, film })
.catch(() => []),
getPhotosCached({ limit: 1, focal })
.catch(() => []),
@@ -45,7 +45,7 @@ export default async function OGOverviewPage() {
-
+
);
diff --git a/app/page.tsx b/app/page.tsx
index 39e9797d..f738529f 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -35,7 +35,7 @@ export default async function HomePage() {
lenses,
tags,
recipes,
- simulations,
+ films,
focalLengths,
] = await Promise.all([
getPhotosCached()
@@ -59,7 +59,7 @@ export default async function HomePage() {
lenses,
tags,
recipes,
- simulations,
+ films,
focalLengths,
}}
/>
diff --git a/src/admin/AdminShowRecipeButton.tsx b/src/admin/AdminShowRecipeButton.tsx
index 52c9f66d..bfe97689 100644
--- a/src/admin/AdminShowRecipeButton.tsx
+++ b/src/admin/AdminShowRecipeButton.tsx
@@ -9,11 +9,11 @@ import { TbChecklist } from 'react-icons/tb';
export default function AdminShowRecipeButton({
title,
recipe,
- simulation,
+ film,
}: {
title: string
recipe: FujifilmRecipe
- simulation: FujifilmSimulation
+ film: FujifilmSimulation
}) {
const { setRecipeModalProps } = useAppState();
@@ -26,7 +26,7 @@ export default function AdminShowRecipeButton({
onClick={() => setRecipeModalProps?.({
title,
recipe,
- simulation,
+ film,
})}
>
Preview
diff --git a/src/admin/insights/AdminAppInsights.tsx b/src/admin/insights/AdminAppInsights.tsx
index ac11d13c..8595a9d0 100644
--- a/src/admin/insights/AdminAppInsights.tsx
+++ b/src/admin/insights/AdminAppInsights.tsx
@@ -1,7 +1,7 @@
import {
getPhotosMeta,
getUniqueCameras,
- getUniqueFilmSimulations,
+ getUniqueFilms,
getUniqueFocalLengths,
getUniqueLenses,
getUniqueRecipes,
@@ -34,7 +34,7 @@ export default async function AdminAppInsights() {
lenses,
tags,
recipes,
- filmSimulations,
+ films,
focalLengths,
] = await Promise.all([
getPhotosMeta({ hidden: 'include' }),
@@ -46,7 +46,7 @@ export default async function AdminAppInsights() {
getUniqueLenses(),
getUniqueTags(),
getUniqueRecipes(),
- getUniqueFilmSimulations(),
+ getUniqueFilms(),
getUniqueFocalLengths(),
]);
@@ -94,7 +94,7 @@ export default async function AdminAppInsights() {
lensesCount: lenses.length,
tagsCount: tags.length,
recipesCount: recipes.length,
- filmSimulationsCount: filmSimulations.length,
+ filmsCount: films.length,
focalLengthsCount: focalLengths.length,
dateRange,
}}
diff --git a/src/admin/insights/AdminAppInsightsClient.tsx b/src/admin/insights/AdminAppInsightsClient.tsx
index 4e2a7a99..da633400 100644
--- a/src/admin/insights/AdminAppInsightsClient.tsx
+++ b/src/admin/insights/AdminAppInsightsClient.tsx
@@ -41,7 +41,7 @@ import ScoreCardContainer from '@/components/ScoreCardContainer';
import IconLens from '@/components/icons/IconLens';
import IconCamera from '@/components/icons/IconCamera';
import IconRecipe from '@/components/icons/IconRecipe';
-import IconFilmSimulation from '@/components/icons/IconFilmSimulation';
+import IconFilm from '@/components/icons/IconFilm';
import IconFocalLength from '@/components/icons/IconFocalLength';
import IconTag from '@/components/icons/IconTag';
import IconPhoto from '@/components/icons/IconPhoto';
@@ -96,7 +96,7 @@ export default function AdminAppInsightsClient({
lensesCount,
tagsCount,
recipesCount,
- filmSimulationsCount,
+ filmsCount,
focalLengthsCount,
dateRange,
},
@@ -487,11 +487,11 @@ export default function AdminAppInsightsClient({
/>
: null;
case 'films':
- return filmSimulationsCount > 0
+ return filmsCount > 0
?
}
- content={pluralize(filmSimulationsCount, 'film simulation')}
+ icon={
}
+ content={pluralize(filmsCount, 'film')}
/>
: null;
case 'focal-lengths':
diff --git a/src/admin/insights/index.ts b/src/admin/insights/index.ts
index 1a3edc9f..e6716a10 100644
--- a/src/admin/insights/index.ts
+++ b/src/admin/insights/index.ts
@@ -53,7 +53,7 @@ export interface PhotoStats {
lensesCount: number
tagsCount: number
recipesCount: number
- filmSimulationsCount: number
+ filmsCount: number
focalLengthsCount: number
dateRange?: PhotoDateRange
}
diff --git a/src/app/config.ts b/src/app/config.ts
index e899ec7e..8ba47615 100644
--- a/src/app/config.ts
+++ b/src/app/config.ts
@@ -249,7 +249,7 @@ export const SHOW_TAGS =
CATEGORY_VISIBILITY.includes('tags');
export const SHOW_RECIPES =
CATEGORY_VISIBILITY.includes('recipes');
-export const SHOW_FILM_SIMULATIONS =
+export const SHOW_FILMS =
CATEGORY_VISIBILITY.includes('films');
export const SHOW_FOCAL_LENGTHS =
CATEGORY_VISIBILITY.includes('focal-lengths');
diff --git a/src/app/paths.ts b/src/app/paths.ts
index 5a42b3c5..311f1da8 100644
--- a/src/app/paths.ts
+++ b/src/app/paths.ts
@@ -2,7 +2,7 @@ import { Photo } from '@/photo';
import { PhotoSetCategory } from '@/category';
import { BASE_URL, GRID_HOMEPAGE_ENABLED } from './config';
import { Camera } from '@/camera';
-import { FilmSimulation } from '@/simulation';
+import { FilmSimulation } from '@/film';
import { parameterize } from '@/utility/string';
import { TAG_HIDDEN } from '@/tag';
import { Lens } from '@/lens';
@@ -26,7 +26,7 @@ export const PREFIX_CAMERA = '/shot-on';
export const PREFIX_LENS = '/lens';
export const PREFIX_TAG = '/tag';
export const PREFIX_RECIPE = '/recipe';
-export const PREFIX_FILM_SIMULATION = '/film';
+export const PREFIX_FILM = '/film';
export const PREFIX_FOCAL_LENGTH = '/focal';
// Dynamic paths
@@ -34,8 +34,7 @@ const PATH_PHOTO_DYNAMIC = `${PREFIX_PHOTO}/[photoId]`;
const PATH_CAMERA_DYNAMIC = `${PREFIX_CAMERA}/[make]/[model]`;
const PATH_LENS_DYNAMIC = `${PREFIX_LENS}/[make]/[model]`;
const PATH_TAG_DYNAMIC = `${PREFIX_TAG}/[tag]`;
-// eslint-disable-next-line max-len
-const PATH_FILM_SIMULATION_DYNAMIC = `${PREFIX_FILM_SIMULATION}/[simulation]`;
+const PATH_FILM_DYNAMIC = `${PREFIX_FILM}/[film]`;
const PATH_FOCAL_LENGTH_DYNAMIC = `${PREFIX_FOCAL_LENGTH}/[focal]`;
const PATH_RECIPE_DYNAMIC = `${PREFIX_RECIPE}/[recipe]`;
@@ -86,7 +85,7 @@ export const PATHS_TO_CACHE = [
PATH_CAMERA_DYNAMIC,
PATH_LENS_DYNAMIC,
PATH_TAG_DYNAMIC,
- PATH_FILM_SIMULATION_DYNAMIC,
+ PATH_FILM_DYNAMIC,
PATH_FOCAL_LENGTH_DYNAMIC,
PATH_RECIPE_DYNAMIC,
...PATHS_ADMIN,
@@ -121,7 +120,7 @@ export const pathForPhoto = ({
camera,
lens,
tag,
- simulation,
+ film,
focal,
recipe,
}: PhotoPathParams) => {
@@ -135,8 +134,8 @@ export const pathForPhoto = ({
prefix = pathForLens(lens);
} else if (tag) {
prefix = pathForTag(tag);
- } else if (simulation) {
- prefix = pathForFilmSimulation(simulation);
+ } else if (film) {
+ prefix = pathForFilm(film);
} else if (recipe) {
prefix = pathForRecipe(recipe);
} else if (focal) {
@@ -152,8 +151,8 @@ export const pathForTag = (tag: string) =>
export const pathForCamera = ({ make, model }: Camera) =>
`${PREFIX_CAMERA}/${parameterize(make)}/${parameterize(model)}`;
-export const pathForFilmSimulation = (simulation: FilmSimulation) =>
- `${PREFIX_FILM_SIMULATION}/${simulation}`;
+export const pathForFilm = (film: FilmSimulation) =>
+ `${PREFIX_FILM}/${film}`;
export const pathForLens = ({ make, model }: Lens) =>
make
@@ -178,8 +177,8 @@ export const absolutePathForCamera= (camera: Camera) =>
export const absolutePathForLens= (lens: Lens) =>
`${BASE_URL}${pathForLens(lens)}`;
-export const absolutePathForFilmSimulation = (simulation: FilmSimulation) =>
- `${BASE_URL}${pathForFilmSimulation(simulation)}`;
+export const absolutePathForFilm = (film: FilmSimulation) =>
+ `${BASE_URL}${pathForFilm(film)}`;
export const absolutePathForRecipe = (recipe: string) =>
`${BASE_URL}${pathForRecipe(recipe)}`;
@@ -199,9 +198,8 @@ export const absolutePathForCameraImage= (camera: Camera) =>
export const absolutePathForLensImage= (lens: Lens) =>
`${absolutePathForLens(lens)}/image`;
-export const absolutePathForFilmSimulationImage =
- (simulation: FilmSimulation) =>
- `${absolutePathForFilmSimulation(simulation)}/image`;
+export const absolutePathForFilmImage = (film: FilmSimulation) =>
+ `${absolutePathForFilm(film)}/image`;
export const absolutePathForRecipeImage = (recipe: string) =>
`${absolutePathForRecipe(recipe)}/image`;
@@ -230,13 +228,13 @@ export const isPathCamera = (pathname = '') =>
export const isPathCameraPhoto = (pathname = '') =>
new RegExp(`^${PREFIX_CAMERA}/[^/]+/[^/]+/[^/]+/?$`).test(pathname);
-// film/[simulation]
-export const isPathFilmSimulation = (pathname = '') =>
- new RegExp(`^${PREFIX_FILM_SIMULATION}/[^/]+/?$`).test(pathname);
+// film/[film]
+export const isPathFilm = (pathname = '') =>
+ new RegExp(`^${PREFIX_FILM}/[^/]+/?$`).test(pathname);
-// film/[simulation]/[photoId]
-export const isPathFilmSimulationPhoto = (pathname = '') =>
- new RegExp(`^${PREFIX_FILM_SIMULATION}/[^/]+/[^/]+/?$`).test(pathname);
+// film/[film]/[photoId]
+export const isPathFilmPhoto = (pathname = '') =>
+ new RegExp(`^${PREFIX_FILM}/[^/]+/[^/]+/?$`).test(pathname);
// focal/[focal]
export const isPathFocalLength = (pathname = '') =>
@@ -299,8 +297,8 @@ export const getPathComponents = (pathname = ''): {
new RegExp(`^${PREFIX_TAG}/[^/]+/([^/]+)`))?.[1];
const photoIdFromCamera = pathname.match(
new RegExp(`^${PREFIX_CAMERA}/[^/]+/[^/]+/([^/]+)`))?.[1];
- const photoIdFromFilmSimulation = pathname.match(
- new RegExp(`^${PREFIX_FILM_SIMULATION}/[^/]+/([^/]+)`))?.[1];
+ const photoIdFromFilm = pathname.match(
+ new RegExp(`^${PREFIX_FILM}/[^/]+/([^/]+)`))?.[1];
const photoIdFromFocalLength = pathname.match(
new RegExp(`^${PREFIX_FOCAL_LENGTH}/[0-9]+mm/([^/]+)`))?.[1];
const tag = pathname.match(
@@ -309,8 +307,8 @@ export const getPathComponents = (pathname = ''): {
new RegExp(`^${PREFIX_CAMERA}/([^/]+)`))?.[1];
const cameraModel = pathname.match(
new RegExp(`^${PREFIX_CAMERA}/[^/]+/([^/]+)`))?.[1];
- const simulation = pathname.match(
- new RegExp(`^${PREFIX_FILM_SIMULATION}/([^/]+)`))?.[1] as FilmSimulation;
+ const film = pathname.match(
+ new RegExp(`^${PREFIX_FILM}/([^/]+)`))?.[1] as FilmSimulation;
const focalString = pathname.match(
new RegExp(`^${PREFIX_FOCAL_LENGTH}/([0-9]+)mm`))?.[1];
@@ -325,12 +323,12 @@ export const getPathComponents = (pathname = ''): {
photoIdFromPhoto ||
photoIdFromTag ||
photoIdFromCamera ||
- photoIdFromFilmSimulation ||
+ photoIdFromFilm ||
photoIdFromFocalLength
),
tag,
camera,
- simulation,
+ film,
focal,
};
};
@@ -340,7 +338,7 @@ export const getEscapePath = (pathname?: string) => {
photoId,
tag,
camera,
- simulation,
+ film,
focal,
} = getPathComponents(pathname);
@@ -348,7 +346,7 @@ export const getEscapePath = (pathname?: string) => {
(photoId && isPathPhoto(pathname)) ||
(tag && isPathTag(pathname)) ||
(camera && isPathCamera(pathname)) ||
- (simulation && isPathFilmSimulation(pathname)) ||
+ (film && isPathFilm(pathname)) ||
(focal && isPathFocalLength(pathname))
) {
return PATH_ROOT;
@@ -356,8 +354,8 @@ export const getEscapePath = (pathname?: string) => {
return pathForTag(tag);
} else if (camera && isPathCameraPhoto(pathname)) {
return pathForCamera(camera);
- } else if (simulation && isPathFilmSimulationPhoto(pathname)) {
- return pathForFilmSimulation(simulation);
+ } else if (film && isPathFilmPhoto(pathname)) {
+ return pathForFilm(film);
} else if (focal && isPathFocalLengthPhoto(pathname)) {
return pathForFocalLength(focal);
}
diff --git a/src/category/data.ts b/src/category/data.ts
index 7485033c..f4b6e8f3 100644
--- a/src/category/data.ts
+++ b/src/category/data.ts
@@ -1,13 +1,13 @@
import {
getUniqueCameras,
- getUniqueFilmSimulations,
+ getUniqueFilms,
getUniqueFocalLengths,
getUniqueLenses,
getUniqueRecipes,
getUniqueTags,
} from '@/photo/db/query';
import {
- SHOW_FILM_SIMULATIONS,
+ SHOW_FILMS,
SHOW_FOCAL_LENGTHS,
SHOW_LENSES,
SHOW_RECIPES,
@@ -40,8 +40,8 @@ export const getDataForCategories = () => [
.then(sortCategoriesByCount)
.catch(() => [])
: [],
- SHOW_FILM_SIMULATIONS
- ? getUniqueFilmSimulations()
+ SHOW_FILMS
+ ? getUniqueFilms()
.then(sortCategoriesByCount)
.catch(() => [])
: [],
@@ -58,7 +58,7 @@ export const getCountsForCategories = async () => {
lenses,
tags,
recipes,
- filmSimulations,
+ films,
focalLengths,
] = await Promise.all(getDataForCategories());
@@ -79,8 +79,8 @@ export const getCountsForCategories = async () => {
acc[recipe.recipe] = recipe.count;
return acc;
}, {} as Record
),
- filmSimulations: filmSimulations.reduce((acc, filmSimulation) => {
- acc[filmSimulation.simulation] = filmSimulation.count;
+ films: films.reduce((acc, film) => {
+ acc[film.film] = film.count;
return acc;
}, {} as Record),
focalLengths: focalLengths.reduce((acc, focalLength) => {
diff --git a/src/category/index.ts b/src/category/index.ts
index acd4f40a..698330cc 100644
--- a/src/category/index.ts
+++ b/src/category/index.ts
@@ -1,7 +1,7 @@
import { Photo } from '../photo';
import { Camera, Cameras } from '@/camera';
import { PhotoDateRange } from '../photo';
-import { FilmSimulation, FilmSimulations } from '@/simulation';
+import { FilmSimulation, Films } from '@/film';
import { Lens, Lenses } from '@/lens';
import { Tags } from '@/tag';
import { FocalLengths } from '@/focal';
@@ -39,7 +39,7 @@ export interface PhotoSetCategory {
lens?: Lens
tag?: string
recipe?: string
- simulation?: FilmSimulation
+ film?: FilmSimulation
focal?: number
}
@@ -48,7 +48,7 @@ export interface PhotoSetCategories {
lenses: Lenses
tags: Tags
recipes: Recipes
- simulations: FilmSimulations
+ films: Films
focalLengths: FocalLengths
}
@@ -80,11 +80,9 @@ export const sortCategoriesByCount = (
const convertCategoryKeysToCategoryNames =
(categoryKeys: CategoryKeys): (keyof PhotoSetCategories)[] => {
return categoryKeys.map(key => {
- return key === 'films'
- ? 'simulations'
- : key === 'focal-lengths'
- ? 'focalLengths'
- : key;
+ return key === 'focal-lengths'
+ ? 'focalLengths'
+ : key;
});
};
diff --git a/src/category/useCategoryCounts.ts b/src/category/useCategoryCounts.ts
index 75e9bbf6..1d5a02f1 100644
--- a/src/category/useCategoryCounts.ts
+++ b/src/category/useCategoryCounts.ts
@@ -4,6 +4,7 @@ import { Camera } from '@/camera';
import { Lens } from '@/lens';
import { useAppState } from '@/state/AppState';
import { useCallback } from 'react';
+import { FujifilmSimulation } from '@/platforms/fujifilm/simulation';
export default function useCategoryCounts() {
const { categoriesWithCounts } = useAppState();
@@ -28,9 +29,9 @@ export default function useCategoryCounts() {
return recipeCounts[recipe];
}, [categoriesWithCounts]);
- const getFilmSimulationCount = useCallback((simulation: string) => {
- const filmSimulationCounts = categoriesWithCounts?.filmSimulations ?? {};
- return filmSimulationCounts[simulation];
+ const getFilmCount = useCallback((film: FujifilmSimulation) => {
+ const filmCounts = categoriesWithCounts?.films ?? {};
+ return filmCounts[film];
}, [categoriesWithCounts]);
const getFocalLengthCount = useCallback((focalLength: number) => {
@@ -43,7 +44,7 @@ export default function useCategoryCounts() {
getLensCount,
getTagCount,
getRecipeCount,
- getFilmSimulationCount,
+ getFilmCount,
getFocalLengthCount,
};
}
diff --git a/src/category/useCategoryCountsForPhoto.ts b/src/category/useCategoryCountsForPhoto.ts
index 86b50620..b059ffdb 100644
--- a/src/category/useCategoryCountsForPhoto.ts
+++ b/src/category/useCategoryCountsForPhoto.ts
@@ -10,7 +10,7 @@ export default function useCategoryCountsForPhoto(photo: Photo) {
getLensCount,
getTagCount,
getRecipeCount,
- getFilmSimulationCount,
+ getFilmCount,
getFocalLengthCount,
} = useCategoryCounts();
@@ -25,21 +25,20 @@ export default function useCategoryCountsForPhoto(photo: Photo) {
return acc;
}, {} as Record),
recipeCount: photo.recipeTitle ? getRecipeCount(photo.recipeTitle) : 0,
- simulationCount:
- photo.filmSimulation ? getFilmSimulationCount(photo.filmSimulation) : 0,
+ filmCount: photo.film ? getFilmCount(photo.film) : 0,
focalCount: photo.focalLength ? getFocalLengthCount(photo.focalLength) : 0,
}), [
getCameraCount,
getLensCount,
getRecipeCount,
- getFilmSimulationCount,
+ getFilmCount,
getFocalLengthCount,
getTagCount,
camera,
lens,
photo.tags,
photo.recipeTitle,
- photo.filmSimulation,
+ photo.film,
photo.focalLength,
]);
diff --git a/src/app/CommandK.tsx b/src/cmdk/CommandK.tsx
similarity index 79%
rename from src/app/CommandK.tsx
rename to src/cmdk/CommandK.tsx
index af1d9413..c1e7f01a 100644
--- a/src/app/CommandK.tsx
+++ b/src/cmdk/CommandK.tsx
@@ -1,7 +1,7 @@
-import CommandKClient from '@/components/cmdk/CommandKClient';
+import CommandKClient from './CommandKClient';
import { getPhotosMetaCached } from '@/photo/cache';
import { photoQuantityText } from '@/photo';
-import { ADMIN_DEBUG_TOOLS_ENABLED } from './config';
+import { ADMIN_DEBUG_TOOLS_ENABLED } from '../app/config';
import { getDataForCategories } from '@/category/data';
export default async function CommandK() {
@@ -11,7 +11,7 @@ export default async function CommandK() {
lenses,
tags,
recipes,
- filmSimulations,
+ films,
focalLengths,
] = await Promise.all([
getPhotosMetaCached()
@@ -24,7 +24,7 @@ export default async function CommandK() {
cameras={cameras}
lenses={lenses}
tags={tags}
- simulations={filmSimulations}
+ films={films}
recipes={recipes}
focalLengths={focalLengths}
showDebugTools={ADMIN_DEBUG_TOOLS_ENABLED}
diff --git a/src/components/cmdk/CommandKClient.tsx b/src/cmdk/CommandKClient.tsx
similarity index 95%
rename from src/components/cmdk/CommandKClient.tsx
rename to src/cmdk/CommandKClient.tsx
index 7b3d86bb..aaddd55d 100644
--- a/src/components/cmdk/CommandKClient.tsx
+++ b/src/cmdk/CommandKClient.tsx
@@ -25,17 +25,17 @@ import {
PATH_ROOT,
PATH_SIGN_IN,
pathForCamera,
- pathForFilmSimulation,
+ pathForFilm,
pathForFocalLength,
pathForLens,
pathForPhoto,
pathForRecipe,
pathForTag,
-} from '../../app/paths';
-import Modal from '../Modal';
+} from '../app/paths';
+import Modal from '../components/Modal';
import { clsx } from 'clsx/lite';
import { useDebounce } from 'use-debounce';
-import Spinner from '../Spinner';
+import Spinner from '../components/Spinner';
import { usePathname, useRouter } from 'next/navigation';
import { useTheme } from 'next-themes';
import { BiDesktop, BiLockAlt, BiMoon, BiSun } from 'react-icons/bi';
@@ -59,20 +59,20 @@ import * as VisuallyHidden from '@radix-ui/react-visually-hidden';
import InsightsIndicatorDot from '@/admin/insights/InsightsIndicatorDot';
import { PhotoSetCategories } from '@/category';
import { formatCameraText } from '@/camera';
-import { labelForFilmSimulation } from '@/platforms/fujifilm/simulation';
+import { labelForFilm } from '@/platforms/fujifilm/simulation';
import { formatFocalLength } from '@/focal';
import { formatRecipe } from '@/recipe';
-import IconLens from '../icons/IconLens';
+import IconLens from '../components/icons/IconLens';
import { formatLensText } from '@/lens';
-import IconTag from '../icons/IconTag';
-import IconCamera from '../icons/IconCamera';
-import IconPhoto from '../icons/IconPhoto';
-import IconRecipe from '../icons/IconRecipe';
-import IconFocalLength from '../icons/IconFocalLength';
-import IconFilmSimulation from '../icons/IconFilmSimulation';
-import IconLock from '../icons/IconLock';
+import IconTag from '../components/icons/IconTag';
+import IconCamera from '../components/icons/IconCamera';
+import IconPhoto from '../components/icons/IconPhoto';
+import IconRecipe from '../components/icons/IconRecipe';
+import IconFocalLength from '../components/icons/IconFocalLength';
+import IconFilm from '../components/icons/IconFilm';
+import IconLock from '../components/icons/IconLock';
import useVisualViewportHeight from '@/utility/useVisualViewport';
-import useMaskedScroll from '../useMaskedScroll';
+import useMaskedScroll from '../components/useMaskedScroll';
const DIALOG_TITLE = 'Global Command-K Menu';
const DIALOG_DESCRIPTION = 'For searching photos, views, and settings';
@@ -112,7 +112,7 @@ export default function CommandKClient({
lenses,
tags,
recipes,
- simulations,
+ films,
focalLengths,
showDebugTools,
footer,
@@ -333,13 +333,13 @@ export default function CommandKClient({
})),
};
case 'films': return {
- heading: 'Film Simulations',
- accessory: ,
- items: simulations.map(({ simulation, count }) => ({
- label: labelForFilmSimulation(simulation).medium,
+ heading: 'Films',
+ accessory: ,
+ items: films.map(({ film, count }) => ({
+ label: labelForFilm(film).medium,
annotation: formatCount(count),
annotationAria: formatCountDescriptive(count),
- path: pathForFilmSimulation(simulation),
+ path: pathForFilm(film),
})),
};
case 'focal-lengths': return {
@@ -355,7 +355,7 @@ export default function CommandKClient({
}
})
.filter(Boolean) as CommandKSection[]
- , [tagsIncludingHidden, cameras, lenses, recipes, simulations, focalLengths]);
+ , [tagsIncludingHidden, cameras, lenses, recipes, films, focalLengths]);
const clientSections: CommandKSection[] = [{
heading: 'Theme',
diff --git a/src/components/cmdk/CommandKItem.tsx b/src/cmdk/CommandKItem.tsx
similarity index 97%
rename from src/components/cmdk/CommandKItem.tsx
rename to src/cmdk/CommandKItem.tsx
index 94d34455..907094c0 100644
--- a/src/components/cmdk/CommandKItem.tsx
+++ b/src/cmdk/CommandKItem.tsx
@@ -1,7 +1,7 @@
import { clsx } from 'clsx/lite';
import { Command } from 'cmdk';
import { ReactNode } from 'react';
-import Spinner from '../Spinner';
+import Spinner from '../components/Spinner';
export default function CommandKItem({
label,
diff --git a/src/components/icons/IconFilmSimulation.tsx b/src/components/icons/IconFilm.tsx
similarity index 66%
rename from src/components/icons/IconFilmSimulation.tsx
rename to src/components/icons/IconFilm.tsx
index 033f1571..9a322c4a 100644
--- a/src/components/icons/IconFilmSimulation.tsx
+++ b/src/components/icons/IconFilm.tsx
@@ -1,6 +1,6 @@
import { IconBaseProps } from 'react-icons';
import { IoFilmOutline } from 'react-icons/io5';
-export default function IconFilmSimulation(props: IconBaseProps) {
+export default function IconFilm(props: IconBaseProps) {
return ;
}
diff --git a/src/simulation/FilmSimulationHeader.tsx b/src/film/FilmHeader.tsx
similarity index 58%
rename from src/simulation/FilmSimulationHeader.tsx
rename to src/film/FilmHeader.tsx
index 57a20ac2..ee2b14f6 100644
--- a/src/simulation/FilmSimulationHeader.tsx
+++ b/src/film/FilmHeader.tsx
@@ -1,18 +1,17 @@
import { Photo, PhotoDateRange } from '@/photo';
-import { FilmSimulation, descriptionForFilmSimulationPhotos } from '.';
+import { FilmSimulation, descriptionForFilmPhotos } from '.';
import PhotoHeader from '@/photo/PhotoHeader';
-import PhotoFilmSimulation from
- '@/simulation/PhotoFilmSimulation';
+import PhotoFilm from '@/film/PhotoFilm';
-export default function FilmSimulationHeader({
- simulation,
+export default function FilmHeader({
+ film,
photos,
selectedPhoto,
indexNumber,
count,
dateRange,
}: {
- simulation: FilmSimulation
+ film: FilmSimulation
photos: Photo[]
selectedPhoto?: Photo
indexNumber?: number
@@ -21,9 +20,9 @@ export default function FilmSimulationHeader({
}) {
return (
}
- entityDescription={descriptionForFilmSimulationPhotos(
+ film={film}
+ entity={}
+ entityDescription={descriptionForFilmPhotos(
photos, undefined, count, dateRange)}
photos={photos}
selectedPhoto={selectedPhoto}
diff --git a/src/simulation/FilmSimulationOGTile.tsx b/src/film/FilmOGTile.tsx
similarity index 60%
rename from src/simulation/FilmSimulationOGTile.tsx
rename to src/film/FilmOGTile.tsx
index c2faf69b..19f7843a 100644
--- a/src/simulation/FilmSimulationOGTile.tsx
+++ b/src/film/FilmOGTile.tsx
@@ -1,19 +1,19 @@
import { Photo, PhotoDateRange } from '@/photo';
import {
- absolutePathForFilmSimulationImage,
- pathForFilmSimulation,
+ absolutePathForFilmImage,
+ pathForFilm,
} from '@/app/paths';
import OGTile from '@/components/OGTile';
import {
FilmSimulation,
- descriptionForFilmSimulationPhotos,
- titleForFilmSimulation,
+ descriptionForFilmPhotos,
+ titleForFilm,
} from '.';
export type OGLoadingState = 'unloaded' | 'loading' | 'loaded' | 'failed';
-export default function FilmSimulationOGTile({
- simulation,
+export default function FilmOGTile({
+ film,
photos,
loadingState: loadingStateExternal,
riseOnHover,
@@ -23,7 +23,7 @@ export default function FilmSimulationOGTile({
count,
dateRange,
}: {
- simulation: FilmSimulation
+ film: FilmSimulation
photos: Photo[]
loadingState?: OGLoadingState
onLoad?: () => void
@@ -35,11 +35,11 @@ export default function FilmSimulationOGTile({
}) {
return (
+
+
+ );
+};
diff --git a/src/simulation/PhotoFilmSimulation.tsx b/src/film/PhotoFilm.tsx
similarity index 61%
rename from src/simulation/PhotoFilmSimulation.tsx
rename to src/film/PhotoFilm.tsx
index 0d26d680..3b6136ac 100644
--- a/src/simulation/PhotoFilmSimulation.tsx
+++ b/src/film/PhotoFilm.tsx
@@ -1,6 +1,6 @@
-import { labelForFilmSimulation } from '@/platforms/fujifilm/simulation';
-import PhotoFilmSimulationIcon from './PhotoFilmSimulationIcon';
-import { pathForFilmSimulation } from '@/app/paths';
+import { labelForFilm } from '@/platforms/fujifilm/simulation';
+import PhotoFilmIcon from './PhotoFilmIcon';
+import { pathForFilm } from '@/app/paths';
import { FilmSimulation } from '.';
import { FujifilmRecipe } from '@/platforms/fujifilm/recipe';
import EntityLink, {
@@ -8,28 +8,28 @@ import EntityLink, {
} from '@/components/primitives/EntityLink';
import clsx from 'clsx/lite';
-export default function PhotoFilmSimulation({
- simulation,
+export default function PhotoFilm({
+ film,
type = 'icon-last',
badged = true,
contrast = 'low',
countOnHover,
...props
}: {
- simulation: FilmSimulation
+ film: FilmSimulation
countOnHover?: number
recipe?: FujifilmRecipe
} & EntityLinkExternalProps) {
- const { small, medium, large } = labelForFilmSimulation(simulation);
+ const { small, medium, large } = labelForFilm(film);
return (
}
- title={`Film Simulation: ${large}`}
+ title={`Film: ${large}`}
type={type}
badged={badged}
contrast={contrast}
diff --git a/src/simulation/PhotoFilmSimulationIcon.tsx b/src/film/PhotoFilmIcon.tsx
similarity index 99%
rename from src/simulation/PhotoFilmSimulationIcon.tsx
rename to src/film/PhotoFilmIcon.tsx
index 9c05d18d..c7db5dbf 100644
--- a/src/simulation/PhotoFilmSimulationIcon.tsx
+++ b/src/film/PhotoFilmIcon.tsx
@@ -1,18 +1,18 @@
/* eslint-disable max-len */
-import { labelForFilmSimulation } from '@/platforms/fujifilm/simulation';
+import { labelForFilm } from '@/platforms/fujifilm/simulation';
import { CSSProperties } from 'react';
import { FilmSimulation } from '.';
const INTRINSIC_WIDTH = 28;
const INTRINSIC_HEIGHT = 16;
-export default function PhotoFilmSimulationIcon({
- simulation,
+export default function PhotoFilmIcon({
+ film,
height = INTRINSIC_HEIGHT,
className,
style,
}: {
- simulation?: FilmSimulation
+ film?: FilmSimulation
height?: number
className?: string
style?: CSSProperties
@@ -21,9 +21,9 @@ export default function PhotoFilmSimulationIcon({