From 1f62553b0a90c708ca753f661faac0e5f9e11bda Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Fri, 10 Jun 2022 10:41:09 +0100 Subject: [PATCH] Merge pull request #8347 from overleaf/ae-outline-performance Only update the outline view when the outline changes GitOrigin-RevId: aadf0016111a5f3568475b9ee1849acc46934a30 --- .../frontend/js/features/outline/outline-manager.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/services/web/frontend/js/features/outline/outline-manager.js b/services/web/frontend/js/features/outline/outline-manager.js index 4b9fc0cd37..fe5c14cdcf 100644 --- a/services/web/frontend/js/features/outline/outline-manager.js +++ b/services/web/frontend/js/features/outline/outline-manager.js @@ -1,3 +1,4 @@ +import { isEqual, cloneDeep } from 'lodash' import './controllers/outline-controller' import { matchOutline, nestOutline } from './outline-parser' import isValidTeXFile from '../../main/is-valid-tex-file' @@ -9,6 +10,7 @@ class OutlineManager { this.shareJsDoc = null this.isTexFile = false this.flatOutline = [] + this.previousFlatOutline = [] this.outline = [] this.highlightedLine = null this.ignoreNextScroll = false @@ -67,14 +69,19 @@ class OutlineManager { } updateOutline() { - this.outline = [] if (this.isTexFile) { const content = this.ide.editorManager.getCurrentDocValue() if (content) { this.flatOutline = matchOutline(content) - this.outline = nestOutline(this.flatOutline) + if (!isEqual(this.flatOutline, this.previousFlatOutline)) { + this.previousFlatOutline = cloneDeep(this.flatOutline) + this.outline = nestOutline(this.flatOutline) + } + return } } + this.previousFlatOutline = [] + this.outline = [] } // set highlightedLine to the closest outline line above the editorLine