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 {
|
||||
group: ProjectTaskGroupData;
|
||||
isCollapsed: boolean;
|
||||
|
|
@ -427,7 +436,8 @@ interface ProjectTaskGroupProps {
|
|||
getOwnerColorName: TaskOwnerColorResolver;
|
||||
}
|
||||
|
||||
const ProjectTaskGroup = memo(function ProjectTaskGroup({
|
||||
const ProjectTaskGroup = memo(
|
||||
function ProjectTaskGroup({
|
||||
group,
|
||||
isCollapsed,
|
||||
visibleCount,
|
||||
|
|
@ -451,7 +461,7 @@ const ProjectTaskGroup = memo(function ProjectTaskGroup({
|
|||
onRenameCancel,
|
||||
getDisplaySubject,
|
||||
getOwnerColorName,
|
||||
}: ProjectTaskGroupProps): React.JSX.Element | null {
|
||||
}: ProjectTaskGroupProps): React.JSX.Element | null {
|
||||
if (group.tasks.length === 0) return null;
|
||||
|
||||
const isNoProjectGroup = group.projectKey === NO_PROJECT_KEY;
|
||||
|
|
@ -551,7 +561,34 @@ const ProjectTaskGroup = memo(function ProjectTaskGroup({
|
|||
)}
|
||||
</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({
|
||||
hideHeader = false,
|
||||
|
|
|
|||
Loading…
Reference in a new issue