import React from 'react'; import { cn } from '@/lib/utils'; /** * 控制台元数据列表组件 * 用于展示键值对形式的元数据信息 */ interface MetadataItem { /** 键名 */ key: string; /** 值 */ value: React.ReactNode; /** 是否为可选字段 */ optional?: boolean; } interface MetadataListProps { /** 元数据列表 */ items: MetadataItem[]; /** 布局方向 */ layout?: 'vertical' | 'horizontal'; /** 额外的 className */ className?: string; } /** * 元数据列表组件 * 用于控制台中展示键值对信息 */ export function MetadataList({ items, layout = 'vertical', className, }: MetadataListProps) { // 过滤掉空值 const visibleItems = items.filter( (item) => item.value !== null && item.value !== undefined && item.value !== '' ); if (visibleItems.length === 0) { return (
暂无元数据
); } if (layout === 'horizontal') { return (
{visibleItems.map((item) => (
{item.key}: {item.value}
))}
); } return (
{visibleItems.map((item) => (
{item.key} {item.optional && ( (可选) )}
{item.value}
))}
); } /** * 元数据项组件 * 单个键值对展示 */ interface MetadataEntryProps { /** 键名 */ label: string; /** 值 */ value: React.ReactNode; /** 是否为可选字段 */ optional?: boolean; /** 额外的 className */ className?: string; } export function MetadataEntry({ label, value, optional, className, }: MetadataEntryProps) { if (value === null || value === undefined || value === '') { return null; } return (
{label} {optional && ( (可选) )} {value}
); }