diff --git a/src/renderer/components/sidebar/GlobalTaskList.tsx b/src/renderer/components/sidebar/GlobalTaskList.tsx index 37fdc2cb..f5868894 100644 --- a/src/renderer/components/sidebar/GlobalTaskList.tsx +++ b/src/renderer/components/sidebar/GlobalTaskList.tsx @@ -401,6 +401,15 @@ const TaskRows = memo(function TaskRows({ ); }); +function areTaskReferencesEqual(prev: readonly GlobalTask[], next: readonly GlobalTask[]): boolean { + if (prev === next) return true; + if (prev.length !== next.length) return false; + for (let i = 0; i < prev.length; i += 1) { + if (prev[i] !== next[i]) return false; + } + return true; +} + interface ProjectTaskGroupProps { group: ProjectTaskGroupData; isCollapsed: boolean; @@ -427,131 +436,159 @@ interface ProjectTaskGroupProps { getOwnerColorName: TaskOwnerColorResolver; } -const ProjectTaskGroup = memo(function ProjectTaskGroup({ - group, - isCollapsed, - visibleCount, - noProjectGroupColor, - showMoreLabel, - showLessLabel, - isPinned, - isArchived, - isNewTask, - isTeamOffline, - renamingKey, - formatTeamHeader, - onToggleGroup, - onVisibleCountChange, - onTogglePin, - onToggleArchive, - onMarkUnread, - onRename, - onDelete, - onRenameComplete, - onRenameCancel, - getDisplaySubject, - getOwnerColorName, -}: ProjectTaskGroupProps): React.JSX.Element | null { - if (group.tasks.length === 0) return null; +const ProjectTaskGroup = memo( + function ProjectTaskGroup({ + group, + isCollapsed, + visibleCount, + noProjectGroupColor, + showMoreLabel, + showLessLabel, + isPinned, + isArchived, + isNewTask, + isTeamOffline, + renamingKey, + formatTeamHeader, + onToggleGroup, + onVisibleCountChange, + onTogglePin, + onToggleArchive, + onMarkUnread, + onRename, + onDelete, + onRenameComplete, + onRenameCancel, + getDisplaySubject, + getOwnerColorName, + }: ProjectTaskGroupProps): React.JSX.Element | null { + if (group.tasks.length === 0) return null; - const isNoProjectGroup = group.projectKey === NO_PROJECT_KEY; - const groupColor = isNoProjectGroup ? noProjectGroupColor : projectColor(group.projectLabel); - const showMoreVisible = canProjectGroupShowMore(visibleCount, group.tasks.length); - const showLessVisible = canProjectGroupShowLess(visibleCount, group.tasks.length); + const isNoProjectGroup = group.projectKey === NO_PROJECT_KEY; + const groupColor = isNoProjectGroup ? noProjectGroupColor : projectColor(group.projectLabel); + const showMoreVisible = canProjectGroupShowMore(visibleCount, group.tasks.length); + const showLessVisible = canProjectGroupShowLess(visibleCount, group.tasks.length); - return ( -
- - {!isCollapsed && ( - - )} - {!isCollapsed && (showMoreVisible || showLessVisible) && ( -
- {showMoreVisible && ( - + {isCollapsed ? ( + + ) : ( + )} - {showLessVisible && ( - - )} -
- )} -
- ); -}); +