From 316c67d8a25f2f892227bc21df0b2b7c5a98aaa0 Mon Sep 17 00:00:00 2001 From: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Date: Tue, 9 Jul 2024 09:59:34 -0700 Subject: [PATCH] fix: refresh single element when element is known (#220126) --- .../preferences/browser/settingsEditor2.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts index 779b9928b57..0bde8345bac 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts @@ -1408,9 +1408,7 @@ export class SettingsEditor2 extends EditorPane { keys.forEach(key => this.settingsTreeModel.updateElementsByName(key)); } - // Attempt to render the tree once rather than - // once for each key to avoid redundant calls to this.refreshTree() - this.renderTree(); + keys.forEach(key => this.renderTree(key)); } else { this.renderTree(); } @@ -1450,7 +1448,6 @@ export class SettingsEditor2 extends EditorPane { // update `list`s live, as they have a separate "submit edit" step built in before this (focusedSetting.parentElement && !focusedSetting.parentElement.classList.contains('setting-item-list')) ) { - this.updateModifiedLabelForKey(key); this.scheduleRefresh(focusedSetting, key); return; @@ -1466,8 +1463,10 @@ export class SettingsEditor2 extends EditorPane { if (key) { const elements = this.currentSettingsModel.getElementsByName(key); if (elements && elements.length) { - // TODO https://github.com/microsoft/vscode/issues/57360 - this.refreshTree(); + if (elements.length >= 2) { + console.warn('More than one setting with key ' + key + ' found'); + } + this.refreshSingleElement(elements[0]); } else { // Refresh requested for a key that we don't know about return; @@ -1483,6 +1482,12 @@ export class SettingsEditor2 extends EditorPane { return !!DOM.findParentWithClass(this.rootElement.ownerDocument.activeElement, 'context-view'); } + private refreshSingleElement(element: SettingsTreeSettingElement): void { + if (this.isVisible()) { + this.settingsTree.rerender(element); + } + } + private refreshTree(): void { if (this.isVisible()) { this.settingsTree.setChildren(null, createGroupIterator(this.currentSettingsModel.root));