"use client";
import { useState } from "react";
import { ArrowLeft, MoreHorizontal, Pencil, Trash2, Clock, Copy, ExternalLink } from "lucide-react";
import { useRouter } from "next/navigation";
import Link from "next/link";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { DeleteConfirmationDialog } from "@/components/ui/delete-confirmation-dialog";
import { TaskFormSheet } from "@/components/task-form/task-form-sheet";
import { deleteTask } from "@/lib/tasksService";
import {
Task,
TaskStatus,
TaskPriority,
TASK_STATUS_CONFIG,
TASK_PRIORITY_CONFIG
} from "@/types/task";
import { Project } from "@/types/project";
interface TaskHeaderProps {
task: Task;
project: Project | null;
onTaskUpdated?: (task: Task) => void;
onTaskDeleted?: () => void;
}
// Badge de estado
function TaskStatusBadge({ status }: { status: TaskStatus }) {
const config = TASK_STATUS_CONFIG[status];
return (
{config.label}
);
}
// Badge de prioridad
function TaskPriorityBadge({ priority }: { priority: TaskPriority }) {
const config = TASK_PRIORITY_CONFIG[priority];
if (priority === '0') return null;
return (
{config.label}
);
}
export function TaskHeader({ task, project, onTaskUpdated, onTaskDeleted }: TaskHeaderProps) {
const router = useRouter();
const [isEditSheetOpen, setIsEditSheetOpen] = useState(false);
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
const [isDeleting, setIsDeleting] = useState(false);
const handleCopyRef = () => {
navigator.clipboard.writeText(task.ref);
};
const handleEditSuccess = (updatedTask: Task) => {
onTaskUpdated?.(updatedTask);
};
const handleConfirmDelete = async () => {
setIsDeleting(true);
try {
await deleteTask(task.id);
onTaskDeleted?.();
// Navegar al proyecto o a la lista de proyectos
if (project) {
router.push(`/proyectos/${project.id}`);
} else {
router.push('/proyectos');
}
} catch (error) {
console.error("Error deleting task:", error);
// TODO: Mostrar toast de error
} finally {
setIsDeleting(false);
}
};
return (
{/* Breadcrumb */}
{/* Header principal */}
{/* Título y badges */}
{task.title}
{/* Referencia y proyecto */}
{project && (
<>
|
Proyecto: {project.name}
>
)}
{/* Acciones */}
setIsEditSheetOpen(true)}>
Editar tarea
Registrar tiempo
setIsDeleteDialogOpen(true)}>
Eliminar
{/* Sheet de edición */}
{/* Diálogo de confirmación de eliminación */}
);
}