'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { Button } from "@/registry/new-york/ui/button" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription, } from "@/registry/new-york/ui/dialog" import { useToast } from "@/registry/new-york/hooks/use-toast" import { AddNavigationForm } from './AddNavigationForm' import { Draggable } from "@hello-pangea/dnd" import { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from "@/registry/new-york/ui/tooltip" import { NavigationItem } from '@/types/navigation' import { navigationIcons, type IconType } from '@/lib/icons' import { Folder, FolderOpen, List, Image, Pencil, Trash, ChevronsUp, ChevronsDown } from 'lucide-react' import { cn } from "@/lib/utils" import { Badge } from "@/registry/new-york/ui/badge" interface NavigationCardProps { item: NavigationItem index: number onUpdate: () => void onMoveToTop?: () => void onMoveToBottom?: () => void showMoveToTop?: boolean showMoveToBottom?: boolean } export function NavigationCard({ item, index, onUpdate, onMoveToTop, onMoveToBottom, showMoveToTop, showMoveToBottom }: NavigationCardProps) { const router = useRouter() const { toast } = useToast() const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false) const Icon = item.icon && navigationIcons[item.icon as IconType] ? navigationIcons[item.icon as IconType] : navigationIcons.Folder const handleEdit = async (values: { title: string; description?: string; icon: string; enabled: boolean; }) => { try { const response = await fetch(`/api/navigation/${item.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...item, title: values.title, description: values.description, icon: values.icon, enabled: values.enabled }) }) if (!response.ok) throw new Error('Failed to save') setIsEditDialogOpen(false) onUpdate() toast({ title: "成功", description: "保存成功" }) } catch (error) { toast({ title: "错误", description: "保存失败", variant: "destructive" }) } } const handleDelete = async () => { try { const response = await fetch(`/api/navigation/${item.id}`, { method: 'DELETE' }) if (!response.ok) throw new Error('Failed to delete') setIsDeleteDialogOpen(false) onUpdate() toast({ title: "成功", description: "删除成功" }) } catch (error) { toast({ title: "错误", description: "删除失败", variant: "destructive" }) } } return ( {(provided, snapshot) => (

{item.title}

{(item.enabled ?? true) ? "已启用" : "已禁用"}

{item.description}

分类管理

站点管理

{showMoveToTop && (

置顶

)} {showMoveToBottom && (

置底

)}

编辑

删除

编辑分类 setIsEditDialogOpen(false)} /> 确认删除 确定要删除这个导航吗?此操作无法撤消,所有相关的分类和子项目都将被删除。
)}
) }