refactor(tasks-controller): enhance getTasksV3 method for performance and clarity
- Improved logging for performance tracking in the getTasksV3 method. - Streamlined progress refresh logic and removed unnecessary calculations to optimize initial load times. - Unified query handling by aligning with the getList method for consistency. - Transformed response structure to maintain compatibility with V3 format while ensuring efficient data processing. - Added memoized selectors in the frontend for better performance and reduced re-renders.
This commit is contained in:
@@ -109,7 +109,14 @@ export const selectCurrentGrouping = (state: RootState) => state.grouping.curren
|
||||
export const selectCustomPhases = (state: RootState) => state.grouping.customPhases;
|
||||
export const selectGroupOrder = (state: RootState) => state.grouping.groupOrder;
|
||||
export const selectGroupStates = (state: RootState) => state.grouping.groupStates;
|
||||
export const selectCollapsedGroups = (state: RootState) => new Set(state.grouping.collapsedGroups);
|
||||
export const selectCollapsedGroupsArray = (state: RootState) => state.grouping.collapsedGroups;
|
||||
|
||||
// Memoized selector to prevent unnecessary re-renders
|
||||
export const selectCollapsedGroups = createSelector(
|
||||
[selectCollapsedGroupsArray],
|
||||
(collapsedGroupsArray) => new Set(collapsedGroupsArray)
|
||||
);
|
||||
|
||||
export const selectIsGroupCollapsed = (state: RootState, groupId: string) =>
|
||||
state.grouping.collapsedGroups.includes(groupId);
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
createAsyncThunk,
|
||||
EntityState,
|
||||
EntityId,
|
||||
createSelector,
|
||||
} from '@reduxjs/toolkit';
|
||||
import { Task, TaskManagementState, TaskGroup, TaskGrouping } from '@/types/task-management.types';
|
||||
import { ITaskListColumn } from '@/types/tasks/taskList.types';
|
||||
@@ -1142,7 +1143,12 @@ export const {
|
||||
|
||||
// Export the selectors
|
||||
export const selectAllTasks = (state: RootState) => state.taskManagement.entities;
|
||||
export const selectAllTasksArray = (state: RootState) => Object.values(state.taskManagement.entities);
|
||||
|
||||
// Memoized selector to prevent unnecessary re-renders
|
||||
export const selectAllTasksArray = createSelector(
|
||||
[selectAllTasks],
|
||||
(entities) => Object.values(entities)
|
||||
);
|
||||
export const selectTaskById = (state: RootState, taskId: string) => state.taskManagement.entities[taskId];
|
||||
export const selectTaskIds = (state: RootState) => state.taskManagement.ids;
|
||||
export const selectGroups = (state: RootState) => state.taskManagement.groups;
|
||||
@@ -1153,15 +1159,21 @@ export const selectSelectedPriorities = (state: RootState) => state.taskManageme
|
||||
export const selectSearch = (state: RootState) => state.taskManagement.search;
|
||||
export const selectSubtaskLoading = (state: RootState, taskId: string) => state.taskManagement.loadingSubtasks[taskId] || false;
|
||||
|
||||
// Memoized selectors
|
||||
export const selectTasksByStatus = (state: RootState, status: string) =>
|
||||
Object.values(state.taskManagement.entities).filter(task => task.status === status);
|
||||
// Memoized selectors to prevent unnecessary re-renders
|
||||
export const selectTasksByStatus = createSelector(
|
||||
[selectAllTasksArray, (_state: RootState, status: string) => status],
|
||||
(tasks, status) => tasks.filter(task => task.status === status)
|
||||
);
|
||||
|
||||
export const selectTasksByPriority = (state: RootState, priority: string) =>
|
||||
Object.values(state.taskManagement.entities).filter(task => task.priority === priority);
|
||||
export const selectTasksByPriority = createSelector(
|
||||
[selectAllTasksArray, (_state: RootState, priority: string) => priority],
|
||||
(tasks, priority) => tasks.filter(task => task.priority === priority)
|
||||
);
|
||||
|
||||
export const selectTasksByPhase = (state: RootState, phase: string) =>
|
||||
Object.values(state.taskManagement.entities).filter(task => task.phase === phase);
|
||||
export const selectTasksByPhase = createSelector(
|
||||
[selectAllTasksArray, (_state: RootState, phase: string) => phase],
|
||||
(tasks, phase) => tasks.filter(task => task.phase === phase)
|
||||
);
|
||||
|
||||
// Add archived selector
|
||||
export const selectArchived = (state: RootState) => state.taskManagement.archived;
|
||||
|
||||
Reference in New Issue
Block a user