Merge pull request #252 from shancds/test/row-kanban-board-v1.1.7

Test/row kanban board v1.1.7
This commit is contained in:
Chamika J
2025-07-09 16:58:46 +05:30
committed by GitHub
4 changed files with 27 additions and 9 deletions

View File

@@ -69,8 +69,7 @@ cd worklenz
2. Set up environment variables 2. Set up environment variables
- Copy the example environment files - Copy the example environment files
```bash ```bash
cp .env.example .env cp worklenz-backend/.env.template worklenz-backend/.env
cp worklenz-backend/.env.example worklenz-backend/.env
``` ```
- Update the environment variables with your configuration - Update the environment variables with your configuration

View File

@@ -26,5 +26,8 @@
"noDueDate": "No due date", "noDueDate": "No due date",
"save": "Save", "save": "Save",
"clear": "Clear", "clear": "Clear",
"nextWeek": "Next week" "nextWeek": "Next week",
"noSubtasks": "No subtasks",
"showSubtasks": "Show subtasks",
"hideSubtasks": "Hide subtasks"
} }

View File

@@ -30,6 +30,7 @@ import {
fetchTask, fetchTask,
} from '@/features/task-drawer/task-drawer.slice'; } from '@/features/task-drawer/task-drawer.slice';
import { updateSubtask } from '@/features/board/board-slice'; import { updateSubtask } from '@/features/board/board-slice';
import { updateEnhancedKanbanSubtask } from '@/features/enhanced-kanban/enhanced-kanban.slice';
type SubTaskTableProps = { type SubTaskTableProps = {
subTasks: ISubTask[]; subTasks: ISubTask[];
@@ -111,6 +112,13 @@ const SubTaskTable = ({ subTasks, loadingSubTasks, refreshSubTasks, t }: SubTask
try { try {
await tasksApiService.deleteTask(taskId); await tasksApiService.deleteTask(taskId);
dispatch(
updateEnhancedKanbanSubtask({
sectionId: '',
subtask: { id: taskId, parent_task_id: selectedTaskId || '', manual_progress: false },
mode: 'delete',
})
);
dispatch( dispatch(
updateSubtask({ updateSubtask({
sectionId: '', sectionId: '',
@@ -119,9 +127,6 @@ const SubTaskTable = ({ subTasks, loadingSubTasks, refreshSubTasks, t }: SubTask
}) })
); );
// Note: Enhanced kanban updates are now handled by the global socket handler
// No need to dispatch here as it will be handled by useTaskSocketHandlers
refreshSubTasks(); refreshSubTasks();
} catch (error) { } catch (error) {
logger.error('Error deleting subtask:', error); logger.error('Error deleting subtask:', error);

View File

@@ -18,6 +18,7 @@ import { deleteTask } from '@/features/tasks/tasks.slice';
import { deleteTask as deleteTaskFromManagement } from '@/features/task-management/task-management.slice'; import { deleteTask as deleteTaskFromManagement } from '@/features/task-management/task-management.slice';
import { deselectTask } from '@/features/task-management/selection.slice'; import { deselectTask } from '@/features/task-management/selection.slice';
import { deleteBoardTask } from '@/features/board/board-slice'; import { deleteBoardTask } from '@/features/board/board-slice';
import { deleteTask as deleteKanbanTask, updateEnhancedKanbanSubtask } from '@/features/enhanced-kanban/enhanced-kanban.slice';
import useTabSearchParam from '@/hooks/useTabSearchParam'; import useTabSearchParam from '@/hooks/useTabSearchParam';
import { ITaskViewModel } from '@/types/tasks/task.types'; import { ITaskViewModel } from '@/types/tasks/task.types';
@@ -61,9 +62,19 @@ const TaskDrawerHeader = ({ inputRef, t }: TaskDrawerHeaderProps) => {
// Clear the task drawer state and URL // Clear the task drawer state and URL
dispatch(setSelectedTaskId(null)); dispatch(setSelectedTaskId(null));
dispatch(deleteTask({ taskId: selectedTaskId }));
dispatch(deleteBoardTask({ sectionId: '', taskId: selectedTaskId }));
if (taskFormViewModel?.task?.is_sub_task) {
dispatch(updateEnhancedKanbanSubtask({
sectionId: '',
subtask: { id: selectedTaskId, parent_task_id: taskFormViewModel?.task?.parent_task_id || '', manual_progress: false },
mode: 'delete',
}));
} else {
dispatch(deleteKanbanTask(selectedTaskId)); // <-- Add this line
}
dispatch(setShowTaskDrawer(false)); dispatch(setShowTaskDrawer(false));
// Reset the flag after a short delay
// Clear the URL parameter last to avoid race conditions
setTimeout(() => { setTimeout(() => {
clearTaskFromUrl(); clearTaskFromUrl();
isDeleting.current = false; isDeleting.current = false;