From bcb29135499ea1b7df072c531ceaee85a1667d4c Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Thu, 29 Jan 2026 20:50:52 -0600 Subject: [PATCH] fix: address code review feedback - add explicit TypeScript return types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add explicit JSX.Element return types to all Kanban components - Add explicit void return type to handleDragStart - Add explicit Promise return type to handleDragEnd (async) - Import React for JSX namespace access - Complies with typescript.md: explicit return types REQUIRED Components updated: - KanbanBoard.tsx - KanbanColumn.tsx - TaskCard.tsx Per code review checklist (code-review.md section 4a): ✓ NO any types ✓ Explicit return types on all exported functions ✓ Explicit parameter types ✓ Interfaces for props ✓ Proper event handler types --- apps/web/src/components/kanban/KanbanBoard.tsx | 8 ++++---- apps/web/src/components/kanban/KanbanColumn.tsx | 3 ++- apps/web/src/components/kanban/TaskCard.tsx | 3 ++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/web/src/components/kanban/KanbanBoard.tsx b/apps/web/src/components/kanban/KanbanBoard.tsx index 7d3c12a..4a15312 100644 --- a/apps/web/src/components/kanban/KanbanBoard.tsx +++ b/apps/web/src/components/kanban/KanbanBoard.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState, useMemo } from "react"; +import React, { useState, useMemo } from "react"; import type { Task } from "@mosaic/shared"; import { TaskStatus } from "@mosaic/shared"; import { @@ -40,7 +40,7 @@ const columns = [ * - Task cards with title, priority badge, assignee avatar * - PATCH /api/tasks/:id on status change */ -export function KanbanBoard({ tasks = [], onStatusChange }: KanbanBoardProps) { +export function KanbanBoard({ tasks = [], onStatusChange }: KanbanBoardProps): JSX.Element { const [activeTaskId, setActiveTaskId] = useState(null); const sensors = useSensors( @@ -80,11 +80,11 @@ export function KanbanBoard({ tasks = [], onStatusChange }: KanbanBoardProps) { [tasks, activeTaskId] ); - function handleDragStart(event: DragStartEvent) { + function handleDragStart(event: DragStartEvent): void { setActiveTaskId(event.active.id as string); } - async function handleDragEnd(event: DragEndEvent) { + async function handleDragEnd(event: DragEndEvent): Promise { const { active, over } = event; if (!over) { diff --git a/apps/web/src/components/kanban/KanbanColumn.tsx b/apps/web/src/components/kanban/KanbanColumn.tsx index 86bbac8..7096f78 100644 --- a/apps/web/src/components/kanban/KanbanColumn.tsx +++ b/apps/web/src/components/kanban/KanbanColumn.tsx @@ -1,5 +1,6 @@ "use client"; +import React from "react"; import type { Task } from "@mosaic/shared"; import { TaskStatus } from "@mosaic/shared"; import { useDroppable } from "@dnd-kit/core"; @@ -34,7 +35,7 @@ const statusBadgeColors = { * A droppable column for tasks of a specific status. * Uses @dnd-kit/core for drag-and-drop functionality. */ -export function KanbanColumn({ status, title, tasks }: KanbanColumnProps) { +export function KanbanColumn({ status, title, tasks }: KanbanColumnProps): JSX.Element { const { setNodeRef, isOver } = useDroppable({ id: status, }); diff --git a/apps/web/src/components/kanban/TaskCard.tsx b/apps/web/src/components/kanban/TaskCard.tsx index 4e9fa86..e1e9b19 100644 --- a/apps/web/src/components/kanban/TaskCard.tsx +++ b/apps/web/src/components/kanban/TaskCard.tsx @@ -1,5 +1,6 @@ "use client"; +import React from "react"; import type { Task } from "@mosaic/shared"; import { TaskPriority } from "@mosaic/shared"; import { useSortable } from "@dnd-kit/sortable"; @@ -47,7 +48,7 @@ function getInitials(name: string): string { * - Assignee avatar (if assigned) * - Due date (if set) */ -export function TaskCard({ task }: TaskCardProps) { +export function TaskCard({ task }: TaskCardProps): JSX.Element { const { attributes, listeners,