import AdminSortableList, { SortableDragHandle } from './AdminSortableList'; import type { AsideWidget, AsideWidgetId } from '../../api/types'; const WIDGET_META: Record = { tag_cloud: { label: '标签云', hint: '在右侧栏展示热门标签', }, recent_comments: { label: '最新评论', hint: '在右侧栏展示最近回复', }, recent_users: { label: '最新注册', hint: '在右侧栏展示最近注册的用户', }, friend_links: { label: '友情链接', hint: '关闭后不在右侧栏展示,友链仍可在「友情链接」页面查看与申请', }, showcase: { label: '开源展柜', hint: '展示精选公网部署;关闭后仍可直接访问 /showcase', }, }; type Props = { widgets: AsideWidget[]; onChange: (next: AsideWidget[]) => void; }; export default function AsideWidgetList({ widgets, onChange }: Props) { const handleToggle = (id: AsideWidgetId, enabled: boolean) => { onChange(widgets.map(w => (w.id === id ? { ...w, enabled } : w))); }; return ( widget.id} onReorder={onChange} showMoveButtons={false} className="admin-sortable-list admin-sortable-list--boxed" ariaLabel="右侧栏组件" renderItem={(widget, _index, controls) => { const meta = WIDGET_META[widget.id]; return (
{meta.label} {meta.hint}
); }} /> ); }