feat(enhanced-kanban): implement group reordering and improve drag-and-drop functionality

- Added support for reordering kanban groups via drag-and-drop, enhancing user experience.
- Updated EnhancedKanbanBoard and EnhancedKanbanGroup components to handle group dragging and state management.
- Introduced visual feedback for dragging groups and tasks, improving usability.
- Refined CSS styles for better layout and responsiveness during drag operations.
This commit is contained in:
shancds
2025-06-23 11:37:40 +05:30
parent 67c26a973e
commit b3d39b65b0
5 changed files with 284 additions and 52 deletions

View File

@@ -2,6 +2,7 @@ import React from 'react';
import { useSortable } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import { IProjectTask } from '@/types/project/projectTasksViewModel.types';
import { useAppSelector } from '@/hooks/useAppSelector';
import './EnhancedKanbanTaskCard.css';
interface EnhancedKanbanTaskCardProps {
@@ -11,12 +12,14 @@ interface EnhancedKanbanTaskCardProps {
isDropTarget?: boolean;
}
const EnhancedKanbanTaskCard: React.FC<EnhancedKanbanTaskCardProps> = React.memo(({
task,
const EnhancedKanbanTaskCard: React.FC<EnhancedKanbanTaskCardProps> = React.memo(({
task,
isActive = false,
isDragOverlay = false,
isDropTarget = false
}) => {
const themeMode = useAppSelector(state => state.themeReducer.mode);
const {
attributes,
listeners,
@@ -37,6 +40,7 @@ const EnhancedKanbanTaskCard: React.FC<EnhancedKanbanTaskCardProps> = React.memo
transform: CSS.Transform.toString(transform),
transition,
opacity: isDragging ? 0.5 : 1,
backgroundColor: themeMode === 'dark' ? '#292929' : '#fafafa',
};
return (
@@ -48,7 +52,7 @@ const EnhancedKanbanTaskCard: React.FC<EnhancedKanbanTaskCardProps> = React.memo
{...listeners}
>
<div className="task-content">
<div className="task-title">{task.name}</div>
<div className="task-title" title={task.name}>{task.name}</div>
{/* {task.task_key && <div className="task-key">{task.task_key}</div>} */}
{task.assignees && task.assignees.length > 0 && (
<div className="task-assignees">