From 2901174ba335cfd6d7eb0a1670be3ace78d52082 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 10 Sep 2017 03:18:25 -0400 Subject: [PATCH] Fix intermittent item selection failure --- chrome/content/zotero/xpcom/collectionTreeView.js | 12 +++++------- chrome/content/zotero/xpcom/itemTreeView.js | 1 - chrome/content/zotero/zoteroPane.js | 2 +- test/tests/collectionTreeViewTest.js | 8 ++++++++ 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/chrome/content/zotero/xpcom/collectionTreeView.js b/chrome/content/zotero/xpcom/collectionTreeView.js index a3f491db1..5e709cb97 100644 --- a/chrome/content/zotero/xpcom/collectionTreeView.js +++ b/chrome/content/zotero/xpcom/collectionTreeView.js @@ -38,6 +38,7 @@ Zotero.CollectionTreeView = function() { Zotero.LibraryTreeView.apply(this); + this.itemTreeView = null; this.itemToSelect = null; this.hideSources = []; @@ -1179,11 +1180,9 @@ Zotero.CollectionTreeView.prototype.selectItem = Zotero.Promise.coroutine(functi yield this.selectLibrary(item.libraryID); } - var itemsView = this.selectedTreeRow.itemTreeView; + yield this.itemTreeView.waitForLoad(); - yield itemsView.waitForLoad(); - - var selected = yield itemsView.selectItem(itemID, expand); + var selected = yield this.itemTreeView.selectItem(itemID, expand); if (selected) { return true; } @@ -1197,10 +1196,9 @@ Zotero.CollectionTreeView.prototype.selectItem = Zotero.Promise.coroutine(functi yield this.selectLibrary(item.libraryID); } - itemsView = this.selectedTreeRow.itemTreeView; - yield itemsView.waitForLoad(); + yield this.itemTreeView.waitForLoad(); - return itemsView.selectItem(itemID, expand); + return this.itemTreeView.selectItem(itemID, expand); }); diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index c17672c6a..afd33a043 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -40,7 +40,6 @@ Zotero.ItemTreeView = function (collectionTreeRow) { this.wrappedJSObject = this; this.rowCount = 0; this.collectionTreeRow = collectionTreeRow; - collectionTreeRow.itemTreeView = this; this._skipKeypress = false; diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js index 30638e193..8c05035f8 100644 --- a/chrome/content/zotero/zoteroPane.js +++ b/chrome/content/zotero/zoteroPane.js @@ -1225,7 +1225,7 @@ var ZoteroPane = new function() this._updateToolbarIconsForRow(collectionTreeRow); - this.itemsView = new Zotero.ItemTreeView(collectionTreeRow); + this.itemsView = this.collectionsView.itemTreeView = new Zotero.ItemTreeView(collectionTreeRow); if (collectionTreeRow.isPublications()) { this.itemsView.collapseAll = true; } diff --git a/test/tests/collectionTreeViewTest.js b/test/tests/collectionTreeViewTest.js index 7ba275c2d..438f65c9e 100644 --- a/test/tests/collectionTreeViewTest.js +++ b/test/tests/collectionTreeViewTest.js @@ -62,6 +62,14 @@ describe("Zotero.CollectionTreeView", function() { assert.isTrue(cv.isContainerOpen(group1Row)); assert.isFalse(cv.isContainerOpen(group2Row)); }); + + it("should update associated item tree view", function* () { + var collection = yield createDataObject('collection'); + var item = yield createDataObject('item', { collections: [collection.id] }); + yield cv.reload(); + yield cv.selectCollection(collection.id); + yield cv.selectItem(item.id); + }); }); describe("collapse/expand", function () {