import { categoryCount, type Category } from '../../data/types' import { ArrowLeftIcon } from '../common/Icon' import { AppGrid } from './AppGrid' import { CesCardGrid } from './CesCardGrid' import { GroupBlock } from './GroupBlock' import { PosterGrid } from './PosterGrid' /** * 分类明细视图:返回条 + 面包屑 + hero(图标 / 标题 / 数量)+ 内容区。 * * 内容区按分类类型切换: * - apps:指定分组时只渲染该组,否则单组扁平渲染、多组带小标题分组渲染; * - posters:6 列海报; * - articles:上图下文白卡网格。 */ type DetailViewProps = { category: Category /** 从侧栏子菜单进入时指定的分组 */ groupId?: string onBack: () => void /** 点击卡片 / 海报进入条目详情 */ onOpenItem: (itemId: string) => void } export function DetailView({ category, groupId, onBack, onOpenItem }: DetailViewProps) { const groups = category.kind === 'apps' ? category.groups : [] const activeGroup = groupId !== undefined ? groups.find((group) => group.id === groupId) : undefined const title = activeGroup?.name ?? category.title const count = activeGroup !== undefined ? activeGroup.items.length : categoryCount(category) const breadcrumb = activeGroup !== undefined ? `首页 / ${category.title} / ${activeGroup.name}` : `首页 / ${category.title}` function renderBody() { if (category.kind === 'posters') { return } if (category.kind === 'articles') { return } if (activeGroup !== undefined) { return } if (category.groups.length === 1) { return } if (category.groups.length === 0) { return

{category.emptyText ?? '暂无内容'}

} return ( <> {category.groups.map((group) => ( ))} ) } return (
{breadcrumb}

{title}

[{count}]
{renderBody()}
) }