perf(renderer): skip unchanged project task groups
This commit is contained in:
parent
fd3137237d
commit
b6139d8558
1 changed files with 158 additions and 121 deletions
|
|
@ -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 {
|
interface ProjectTaskGroupProps {
|
||||||
group: ProjectTaskGroupData;
|
group: ProjectTaskGroupData;
|
||||||
isCollapsed: boolean;
|
isCollapsed: boolean;
|
||||||
|
|
@ -427,7 +436,8 @@ interface ProjectTaskGroupProps {
|
||||||
getOwnerColorName: TaskOwnerColorResolver;
|
getOwnerColorName: TaskOwnerColorResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ProjectTaskGroup = memo(function ProjectTaskGroup({
|
const ProjectTaskGroup = memo(
|
||||||
|
function ProjectTaskGroup({
|
||||||
group,
|
group,
|
||||||
isCollapsed,
|
isCollapsed,
|
||||||
visibleCount,
|
visibleCount,
|
||||||
|
|
@ -551,7 +561,34 @@ const ProjectTaskGroup = memo(function ProjectTaskGroup({
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
});
|
},
|
||||||
|
(prev, next) =>
|
||||||
|
prev.group.projectKey === next.group.projectKey &&
|
||||||
|
prev.group.projectLabel === next.group.projectLabel &&
|
||||||
|
areTaskReferencesEqual(prev.group.tasks, next.group.tasks) &&
|
||||||
|
prev.isCollapsed === next.isCollapsed &&
|
||||||
|
prev.visibleCount === next.visibleCount &&
|
||||||
|
prev.noProjectGroupColor === next.noProjectGroupColor &&
|
||||||
|
prev.showMoreLabel === next.showMoreLabel &&
|
||||||
|
prev.showLessLabel === next.showLessLabel &&
|
||||||
|
prev.isPinned === next.isPinned &&
|
||||||
|
prev.isArchived === next.isArchived &&
|
||||||
|
prev.isNewTask === next.isNewTask &&
|
||||||
|
prev.isTeamOffline === next.isTeamOffline &&
|
||||||
|
prev.renamingKey === next.renamingKey &&
|
||||||
|
prev.formatTeamHeader === next.formatTeamHeader &&
|
||||||
|
prev.onToggleGroup === next.onToggleGroup &&
|
||||||
|
prev.onVisibleCountChange === next.onVisibleCountChange &&
|
||||||
|
prev.onTogglePin === next.onTogglePin &&
|
||||||
|
prev.onToggleArchive === next.onToggleArchive &&
|
||||||
|
prev.onMarkUnread === next.onMarkUnread &&
|
||||||
|
prev.onRename === next.onRename &&
|
||||||
|
prev.onDelete === next.onDelete &&
|
||||||
|
prev.onRenameComplete === next.onRenameComplete &&
|
||||||
|
prev.onRenameCancel === next.onRenameCancel &&
|
||||||
|
prev.getDisplaySubject === next.getDisplaySubject &&
|
||||||
|
prev.getOwnerColorName === next.getOwnerColorName
|
||||||
|
);
|
||||||
|
|
||||||
export const GlobalTaskList = memo(function GlobalTaskList({
|
export const GlobalTaskList = memo(function GlobalTaskList({
|
||||||
hideHeader = false,
|
hideHeader = false,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue