'use client'; import PhotoAlbum from '@/album/PhotoAlbum'; import { useAppState } from '@/app/AppState'; import PhotoCamera from '@/camera/PhotoCamera'; import AnimateItems from '@/components/AnimateItems'; import AppGrid from '@/components/AppGrid'; import PhotoFilm from '@/film/PhotoFilm'; import PhotoLens from '@/lens/PhotoLens'; import { Photo } from '@/photo'; import PhotoRecipe from '@/recipe/PhotoRecipe'; import PhotoTag from '@/tag/PhotoTag'; import clsx from 'clsx/lite'; import { formatDistanceToNowStrict } from 'date-fns'; import AdminAboutMenu from './AdminAboutMenu'; import PhotoLarge from '@/photo/PhotoLarge'; import { ReactNode, useMemo } from 'react'; import { Camera } from '@/camera'; import { Lens } from '@/lens'; import { Album } from '@/album'; import { useAppText } from '@/i18n/state/client'; import PhotoAvatar from '@/photo/PhotoAvatar'; import Link from 'next/link'; import { PATH_ADMIN_ABOUT_EDIT } from '@/app/path'; import { LuCirclePlus, LuUser } from 'react-icons/lu'; import AdminEmptyState from '@/admin/AdminEmptyState'; export default function AboutPageClient({ title, subhead, descriptionHtml, photosCount = 0, photosOldest, photoAvatar, photoHero, camera, lens, recipe, film, album, tag, lastUpdated, }: { title?: string subhead?: string descriptionHtml?: ReactNode photosCount?: number photosOldest?: string photoAvatar?: Photo photoHero?: Photo camera?: Camera lens?: Lens recipe?: string film?: string album?: Album tag?: string lastUpdated?: Date }) { const { isUserSignedIn, } = useAppState(); const appText = useAppText(); const renderItem = (label: string, content?: ReactNode) => (
{label}
{content || '--'}
); const items = useMemo(() => [ renderItem( appText.about.photoCount, photosCount.toString().padStart(4, '0'), ), renderItem( appText.about.firstPhoto, photosOldest?.slice(0, 10), ), camera && renderItem( appText.about.topCamera, , ), lens && renderItem( appText.about.topLens, , ), recipe && renderItem( appText.about.topRecipe, , ), film && renderItem( appText.about.topFilm, , ), album && renderItem( appText.about.recentAlbum, , ), tag && renderItem( appText.about.popularTag, , ), ].filter(Boolean), [ appText.about, photosCount, photosOldest, camera, lens, recipe, film, album, tag, ]); return (
} />
{title || appText.about.titleDefault}
{subhead &&
{subhead}
}
{lastUpdated &&
{appText.about.updated( formatDistanceToNowStrict(lastUpdated), )}
}
{isUserSignedIn && }
{descriptionHtml ? descriptionHtml : isUserSignedIn && } includeContainer={false} className="gap-3! p-6!" > Add optional description } } /> {photoHero && } ]} /> ); }