From 4e826649d3e67fa5d5d152727c7c308ff0866921 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sat, 17 Feb 2018 18:06:00 -0500 Subject: [PATCH 1/2] Keep existing selection after reindexing --- lib/fuzzy-finder-view.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/fuzzy-finder-view.js b/lib/fuzzy-finder-view.js index 685b3ed7..644b37cb 100644 --- a/lib/fuzzy-finder-view.js +++ b/lib/fuzzy-finder-view.js @@ -292,12 +292,25 @@ export default class FuzzyFinderView { } } - setItems (filePaths) { + async setItems (filePaths) { this.items = this.projectRelativePathsForFilePaths(filePaths) if (this.isQueryALineJump()) { return this.selectListView.update({items: [], loadingMessage: null, loadingBadge: null}) } else { - return this.selectListView.update({items: this.items, loadingMessage: null, loadingBadge: null}) + let selectedItem = this.selectListView.getSelectedItem() + if (selectedItem) { + for (let item of this.items) { + if (item.filePath === selectedItem.filePath && item.projectRelativePath === selectedItem.projectRelativePath) { + selectedItem = item + break + } + } + } + + await this.selectListView.update({items: this.items, loadingMessage: null, loadingBadge: null}) + try { + this.selectListView.selectItem(selectedItem) + } catch (error) {} // The previously selected item isn't always guaranteed to exist after a reindex } } From 11275d05ae1283b8e0ce884a2c990bf6bee156d2 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sun, 25 Feb 2018 00:01:40 -0500 Subject: [PATCH 2/2] Fix spec --- lib/fuzzy-finder-view.js | 12 +++++++----- lib/project-view.js | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/fuzzy-finder-view.js b/lib/fuzzy-finder-view.js index 644b37cb..e0fa0228 100644 --- a/lib/fuzzy-finder-view.js +++ b/lib/fuzzy-finder-view.js @@ -292,13 +292,13 @@ export default class FuzzyFinderView { } } - async setItems (filePaths) { + async setItems (filePaths, keepSelection = false) { this.items = this.projectRelativePathsForFilePaths(filePaths) if (this.isQueryALineJump()) { return this.selectListView.update({items: [], loadingMessage: null, loadingBadge: null}) } else { let selectedItem = this.selectListView.getSelectedItem() - if (selectedItem) { + if (keepSelection && selectedItem) { for (let item of this.items) { if (item.filePath === selectedItem.filePath && item.projectRelativePath === selectedItem.projectRelativePath) { selectedItem = item @@ -308,9 +308,11 @@ export default class FuzzyFinderView { } await this.selectListView.update({items: this.items, loadingMessage: null, loadingBadge: null}) - try { - this.selectListView.selectItem(selectedItem) - } catch (error) {} // The previously selected item isn't always guaranteed to exist after a reindex + if (keepSelection) { + try { + this.selectListView.selectItem(selectedItem) + } catch (error) {} // The previously selected item isn't always guaranteed to exist after a reindex + } } } diff --git a/lib/project-view.js b/lib/project-view.js index 79b2d64f..ef574c25 100644 --- a/lib/project-view.js +++ b/lib/project-view.js @@ -60,7 +60,7 @@ export default class ProjectView extends FuzzyFinderView { return } - await this.setItems(this.paths || []) + await this.setItems(this.paths || [], true) if (this.reloadPaths) { this.reloadPaths = false