feat: add drag-and-drop to Kanban board
- Implement native HTML5 Drag and Drop API on task cards - Cards show grab cursor and reduce opacity while dragging - Drop zones highlight with indigo glow and pulse animation - Moving a task updates its status and logs an activity entry - Added handleMoveTask to App.tsx with STATUS_LABELS import - CSS: drag-over styles, pulse keyframes, grab/grabbing cursors
This commit is contained in:
12
src/App.tsx
12
src/App.tsx
@@ -1,5 +1,5 @@
|
||||
import { useState } from 'react';
|
||||
import { SEED_TASKS } from './data';
|
||||
import { SEED_TASKS, STATUS_LABELS } from './data';
|
||||
import type { Task, User, Status } from './data';
|
||||
import { LoginPage } from './Login';
|
||||
import { Sidebar } from './Sidebar';
|
||||
@@ -80,6 +80,13 @@ export default function App() {
|
||||
setTasks(prev => prev.map(t => t.id === taskId ? { ...t, status: t.status === 'done' ? 'todo' : 'done' as Status } : t));
|
||||
};
|
||||
|
||||
const handleMoveTask = (taskId: string, newStatus: Status) => {
|
||||
setTasks(prev => prev.map(t => t.id === taskId ? {
|
||||
...t, status: newStatus,
|
||||
activity: [...t.activity, { id: `a${Date.now()}`, text: `🔄 ${currentUser.name} moved task to ${STATUS_LABELS[newStatus]}`, timestamp: new Date().toISOString() }]
|
||||
} : t));
|
||||
};
|
||||
|
||||
const displayPage = VIEW_PAGES.includes(activePage) ? activeView : activePage;
|
||||
const filteredMyTasks = tasks.filter(t => t.assignee === currentUser.id);
|
||||
|
||||
@@ -100,7 +107,8 @@ export default function App() {
|
||||
)}
|
||||
{displayPage === 'kanban' && (
|
||||
<KanbanBoard tasks={tasks} currentUser={currentUser} onTaskClick={handleTaskClick}
|
||||
onAddTask={handleKanbanAdd} filterUser={filterUser} searchQuery={searchQuery} />
|
||||
onAddTask={handleKanbanAdd} filterUser={filterUser} searchQuery={searchQuery}
|
||||
onMoveTask={handleMoveTask} />
|
||||
)}
|
||||
{displayPage === 'list' && (
|
||||
<ListView tasks={tasks} currentUser={currentUser} onTaskClick={handleTaskClick}
|
||||
|
||||
Reference in New Issue
Block a user