From 382283d0ce8d1b3c102c11136c71852d25179921 Mon Sep 17 00:00:00 2001 From: shancds Date: Wed, 2 Jul 2025 11:20:56 +0530 Subject: [PATCH 1/4] fix(enhanced-kanban): update subtask placeholder text for clarity --- .../enhanced-kanban/EnhancedKanbanCreateSubtaskCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateSubtaskCard.tsx b/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateSubtaskCard.tsx index 5cd0dabc..5e1aa377 100644 --- a/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateSubtaskCard.tsx +++ b/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateSubtaskCard.tsx @@ -161,7 +161,7 @@ const EnhancedKanbanCreateSubtaskCard = ({ onKeyUp={e => e.stopPropagation()} onKeyPress={e => e.stopPropagation()} onBlur={handleInputBlur} - placeholder={t('kanbanBoard.addSubTaskPlaceholder')} + placeholder={t('newSubtaskNamePlaceholder')} className={`enhanced-kanban-create-subtask-input ${themeMode === 'dark' ? 'dark' : ''}`} disabled={creatingTask} autoFocus From 71e1d58ec66ccbf4612e9010d3be3c873b0157b7 Mon Sep 17 00:00:00 2001 From: shancds Date: Wed, 2 Jul 2025 11:41:43 +0530 Subject: [PATCH 2/4] refactor(enhanced-kanban): simplify task creation event handling - Updated the event handler in EnhancedKanbanCreateTaskCard to clarify that the form reset is separate from the global task addition to Redux, improving code readability and maintainability. --- .../components/enhanced-kanban/EnhancedKanbanCreateTaskCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateTaskCard.tsx b/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateTaskCard.tsx index dbb17262..04c02670 100644 --- a/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateTaskCard.tsx +++ b/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanCreateTaskCard.tsx @@ -89,7 +89,7 @@ const EnhancedKanbanCreateTaskCard: React.FC // Real-time socket event handler const eventHandler = (task: IProjectTask) => { - dispatch(addTaskToGroup({ sectionId, task: { ...task, id: task.id || nanoid(), name: task.name || newTaskName.trim() } })); + // Only reset the form - the global handler will add the task to Redux socket?.off(SocketEvents.QUICK_TASK.toString(), eventHandler); resetForNextTask(); }; From d56eaa9f0208b11b23d9c2dc33b1310e88203f76 Mon Sep 17 00:00:00 2001 From: shancds Date: Wed, 2 Jul 2025 12:05:54 +0530 Subject: [PATCH 3/4] fix(enhanced-kanban): prevent unnecessary state updates on blur event --- .../src/components/enhanced-kanban/EnhancedKanbanGroup.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanGroup.tsx b/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanGroup.tsx index 5d7aa3f2..2119719f 100644 --- a/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanGroup.tsx +++ b/worklenz-frontend/src/components/enhanced-kanban/EnhancedKanbanGroup.tsx @@ -194,10 +194,11 @@ const EnhancedKanbanGroup: React.FC = React.memo(({ }; const handleBlur = async () => { + setIsEditable(false); + if (name === editName) return; if (name === 'Untitled section') { dispatch(fetchEnhancedKanbanGroups(projectId ?? '')); } - setIsEditable(false); if (!projectId || !group.id) return; From c9d9134049087f14bc915a19b52f83fa70abcba5 Mon Sep 17 00:00:00 2001 From: shancds Date: Wed, 2 Jul 2025 12:28:34 +0530 Subject: [PATCH 4/4] refactor(enhanced-kanban): update state management for editable section - Changed the source of `editableSectionId` from `boardReducer` to `enhancedKanbanReducer` for improved state organization. - Added `setEditableSection` and `deleteSection` actions to manage the editable section state within the enhanced kanban slice. --- .../delete-status-drawer.tsx | 4 ++-- .../enhanced-kanban/enhanced-kanban.slice.ts | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/worklenz-frontend/src/components/project-task-filters/delete-status-drawer/delete-status-drawer.tsx b/worklenz-frontend/src/components/project-task-filters/delete-status-drawer/delete-status-drawer.tsx index 48a5a635..ea6aa7bd 100644 --- a/worklenz-frontend/src/components/project-task-filters/delete-status-drawer/delete-status-drawer.tsx +++ b/worklenz-frontend/src/components/project-task-filters/delete-status-drawer/delete-status-drawer.tsx @@ -15,7 +15,7 @@ import { useSelector } from 'react-redux'; import { deleteSection, IGroupBy, -} from '@features/board/board-slice'; +} from '@features/enhanced-kanban/enhanced-kanban.slice'; import { statusApiService } from '@/api/taskAttributes/status/status.api.service'; import { phasesApiService } from '@/api/taskAttributes/phases/phases.api.service'; import logger from '@/utils/errorLogger'; @@ -31,7 +31,7 @@ const DeleteStatusDrawer: React.FC = () => { const { projectView } = useTabSearchParam(); const [form] = Form.useForm(); const { t } = useTranslation('task-list-filters'); - const { editableSectionId, groupBy } = useAppSelector(state => state.boardReducer); + const { editableSectionId, groupBy } = useAppSelector(state => state.enhancedKanbanReducer); const isDelteStatusDrawerOpen = useAppSelector( state => state.deleteStatusReducer.isDeleteStatusDrawerOpen ); diff --git a/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts b/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts index c1ee0bb4..7d53103b 100644 --- a/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts +++ b/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts @@ -101,6 +101,7 @@ interface EnhancedKanbanState { selectedTaskIds: string[]; expandedSubtasks: Record; columnOrder: string[]; + editableSectionId: string | null; } const initialState: EnhancedKanbanState = { @@ -141,6 +142,7 @@ const initialState: EnhancedKanbanState = { selectedTaskIds: [], expandedSubtasks: {}, columnOrder: [], + editableSectionId: null, }; // Performance monitoring utility @@ -373,8 +375,6 @@ const deleteTaskFromGroup = ( } }; - - const enhancedKanbanSlice = createSlice({ name: 'enhancedKanbanReducer', initialState, @@ -871,6 +871,19 @@ const enhancedKanbanSlice = createSlice({ state.groupCache[result.groupId] = result.group; } }, + + setEditableSection: (state, action: PayloadAction) => { + state.editableSectionId = action.payload; + }, + + deleteSection: (state, action: PayloadAction<{ sectionId: string }>) => { + state.taskGroups = state.taskGroups.filter( + section => section.id !== action.payload.sectionId + ); + if (state.editableSectionId === action.payload.sectionId) { + state.editableSectionId = null; + } + }, }, extraReducers: (builder) => { builder @@ -1061,6 +1074,8 @@ export const { updateEnhancedKanbanTaskStartDate, updateEnhancedKanbanSubtask, toggleTaskExpansion, + setEditableSection, + deleteSection, } = enhancedKanbanSlice.actions; export default enhancedKanbanSlice.reducer; \ No newline at end of file