;
onTaskClick: (task: KanbanTask) => void;
+ onDeleteTask?: (taskId: string) => void;
onAddTask: (status: TaskStatus) => void;
onAddTaskInline: (task: {
title: string;
@@ -30,6 +31,7 @@ export const KanbanBoard = ({
members,
etapes,
onTaskClick,
+ onDeleteTask,
onAddTask,
onAddTaskInline,
onTaskMove,
@@ -63,6 +65,7 @@ export const KanbanBoard = ({
members={members}
etapes={etapes}
onTaskClick={onTaskClick}
+ onDeleteTask={onDeleteTask}
onAddTask={onAddTask}
onAddTaskInline={onAddTaskInline}
onDragStart={handleDragStart}
diff --git a/packages/tablo-views/src/components/kanban/KanbanColumn.tsx b/packages/tablo-views/src/components/kanban/KanbanColumn.tsx
index 516db0a..a913ae6 100644
--- a/packages/tablo-views/src/components/kanban/KanbanColumn.tsx
+++ b/packages/tablo-views/src/components/kanban/KanbanColumn.tsx
@@ -15,6 +15,7 @@ interface KanbanColumnProps {
members: TabloMember[];
etapes: Etape[];
onTaskClick: (task: KanbanTask) => void;
+ onDeleteTask?: (taskId: string) => void;
onAddTask: (status: KanbanColumnType["status"]) => void;
onAddTaskInline: (task: {
title: string;
@@ -33,6 +34,7 @@ export const KanbanColumn = ({
members,
etapes,
onTaskClick,
+ onDeleteTask,
onAddTask,
onAddTaskInline,
onDragStart,
@@ -84,6 +86,7 @@ export const KanbanColumn = ({
task={task}
etapeTitle={etape?.title}
onClick={() => onTaskClick(task)}
+ onDelete={onDeleteTask ? () => onDeleteTask(task.id) : undefined}
/>
);
diff --git a/packages/tablo-views/src/components/kanban/KanbanTaskCard.tsx b/packages/tablo-views/src/components/kanban/KanbanTaskCard.tsx
index ba58c74..8ceaae9 100644
--- a/packages/tablo-views/src/components/kanban/KanbanTaskCard.tsx
+++ b/packages/tablo-views/src/components/kanban/KanbanTaskCard.tsx
@@ -1,11 +1,12 @@
import type { KanbanTask } from "@xtablo/shared-types";
import { TypographyH4, TypographyMuted } from "@xtablo/ui/components/typography";
-import { CalendarIcon, User } from "lucide-react";
+import { CalendarIcon, Trash2Icon, User } from "lucide-react";
interface KanbanTaskCardProps {
task: KanbanTask;
etapeTitle?: string;
onClick: () => void;
+ onDelete?: () => void;
}
function formatDueDate(dateStr: string): string {
@@ -23,7 +24,7 @@ function isOverdue(dateStr: string): boolean {
return due < today;
}
-export const KanbanTaskCard = ({ task, etapeTitle, onClick }: KanbanTaskCardProps) => {
+export const KanbanTaskCard = ({ task, etapeTitle, onClick, onDelete }: KanbanTaskCardProps) => {
const overdue = task.due_date && task.status !== "done" && isOverdue(task.due_date);
return (
@@ -31,9 +32,24 @@ export const KanbanTaskCard = ({ task, etapeTitle, onClick }: KanbanTaskCardProp
onClick={onClick}
className="bg-card border border-border rounded-lg p-3 hover:shadow-md transition-shadow cursor-pointer group"
>
-
- {task.title}
-
+
+
+ {task.title}
+
+ {onDelete && (
+
+ )}
+
{task.description && (
diff --git a/packages/tablo-views/src/components/kanban/TaskModal.tsx b/packages/tablo-views/src/components/kanban/TaskModal.tsx
index b87066b..aebfe4f 100644
--- a/packages/tablo-views/src/components/kanban/TaskModal.tsx
+++ b/packages/tablo-views/src/components/kanban/TaskModal.tsx
@@ -58,7 +58,6 @@ export const TaskModal = ({
initialDueDate,
onCreateTask,
onUpdateTask,
- onDeleteTask,
}: TaskModalProps) => {
const [title, setTitle] = useState("");
const [description, setDescription] = useState("");
@@ -140,12 +139,6 @@ export const TaskModal = ({
onClose();
};
- const handleDelete = () => {
- if (!taskId || !task) return;
- onDeleteTask?.(task.id);
- onClose();
- };
-
if (!isOpen) return null;
return (
@@ -261,16 +254,6 @@ export const TaskModal = ({
{/* Actions */}
- {taskId && task && (
-
- )}