Vercel/src/category/mobile.ts
Sam Becker 3b6001602a
Mobile Sidebar (#330)
* Show top entities on mobile

* Add config

* Localize 'more'/'less' text
2025-10-02 21:46:58 -05:00

50 lines
1.3 KiB
TypeScript

import { getTopNonFavTags, tagsHaveFavs } from '@/tag';
import { PhotoSetCategories } from '@/category';
import {
SHOW_ALBUMS,
SHOW_CAMERAS,
SHOW_FILMS,
SHOW_FOCAL_LENGTHS,
SHOW_LENSES,
SHOW_RECENTS,
SHOW_RECIPES,
SHOW_TAGS,
} from '@/app/config';
const MAX_ALBUM_TAG_COUNT = 3;
const MINIMUM_TOP_ENTITIES = 3;
export const getTopEntities = ({
tags,
recents,
albums,
recipes,
films,
focalLengths,
cameras,
lenses,
}: PhotoSetCategories) => ({
hasFavs: tagsHaveFavs(tags),
hasRecents: SHOW_RECENTS && recents.length > 0,
albums: SHOW_ALBUMS ? albums.slice(0, MAX_ALBUM_TAG_COUNT) : [],
tags: SHOW_TAGS ? getTopNonFavTags(tags).slice(0, MAX_ALBUM_TAG_COUNT) : [],
recipe: SHOW_RECIPES ? recipes[0]?.recipe : undefined,
film: SHOW_FILMS ? films[0]?.film : undefined,
focal: SHOW_FOCAL_LENGTHS ? focalLengths[0]?.focal : undefined,
camera: SHOW_CAMERAS ? cameras[0]?.camera : undefined,
lens: SHOW_LENSES ? lenses[0]?.lens : undefined,
});
export const hasEnoughTopEntities = (categories: PhotoSetCategories) => {
const entityCount = Object.values(getTopEntities(categories))
.reduce<number>((acc, entity) => {
if (Array.isArray(entity)) {
return acc + entity.length;
} else {
return Boolean(entity) ? acc + 1 : acc;
}
}, 0);
return entityCount > MINIMUM_TOP_ENTITIES;
};