Vercel/src/about/AboutPageClient.tsx
Strtus 8e6df1e70c Simplify About page to title, subhead, and description only.
Remove avatar/hero photos and gallery stats from the public About view and admin editor, and add env-backed defaults for ABOUT_TITLE and ABOUT_SUBHEAD.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 17:16:31 +08:00

69 lines
2.1 KiB
TypeScript

'use client';
import { useAppState } from '@/app/AppState';
import AnimateItems from '@/components/AnimateItems';
import AppGrid from '@/components/AppGrid';
import { ReactNode } from 'react';
import { useAppText } from '@/i18n/state/client';
import Link from 'next/link';
import { PATH_ADMIN_ABOUT_EDIT } from '@/app/path';
import { LuCirclePlus } from 'react-icons/lu';
import AdminEmptyState from '@/admin/AdminEmptyState';
import AdminAboutMenu from './AdminAboutMenu';
import clsx from 'clsx/lite';
export default function AboutPageClient({
title,
subhead,
descriptionHtml,
}: {
title?: string
subhead?: string
descriptionHtml?: ReactNode
}) {
const { isUserSignedIn } = useAppState();
const appText = useAppText();
return (
<AnimateItems
type="bottom"
items={[<div
key="about-page"
className="mt-5 max-w-2xl"
>
<AppGrid
contentMain={<div className="space-y-6">
<div className="flex items-start justify-between gap-4">
<div className="space-y-2">
<h1 className="text-2xl font-bold">
{title || appText.about.titleDefault}
</h1>
{subhead &&
<p className="text-medium">{subhead}</p>}
</div>
{isUserSignedIn && <AdminAboutMenu />}
</div>
{descriptionHtml
? descriptionHtml
: isUserSignedIn &&
<Link
href={PATH_ADMIN_ABOUT_EDIT}
className={clsx(
'flex items-center justify-center gap-2.5',
'border border-dashed border-medium rounded-lg',
)}
>
<AdminEmptyState
icon={<LuCirclePlus size={22} />}
includeContainer={false}
className="gap-3! p-6!"
>
Add description
</AdminEmptyState>
</Link>}
</div>} />
</div>]}
/>
);
}