From f98de97e4da4d76423dddee93c1c1406e9faf599 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Thu, 2 Feb 2017 18:37:57 -0500 Subject: [PATCH] Don't select last item in list when item is removed from collection --- chrome/content/zotero/xpcom/itemTreeView.js | 6 +++++- test/tests/itemTreeViewTest.js | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index 07959f54e..3e2941e2c 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -487,7 +487,11 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio var sort = false; var savedSelection = this.getSelectedItems(true); - var previousFirstSelectedRow = this._rowMap[ids[0]]; + var previousFirstSelectedRow = this._rowMap[ + // 'collection-item' ids are in the form - + // 'item' events are just integers + type == 'collection-item' ? ids[0].split('-')[1] : ids[0] + ]; // If there's not at least one new item to be selected, get a scroll position to restore later var scrollPosition = false; diff --git a/test/tests/itemTreeViewTest.js b/test/tests/itemTreeViewTest.js index 7a8786aab..eb2d6b9e6 100644 --- a/test/tests/itemTreeViewTest.js +++ b/test/tests/itemTreeViewTest.js @@ -242,7 +242,7 @@ describe("Zotero.ItemTreeView", function() { var items = []; var num = 6; for (let i = 0; i < num; i++) { - let item = createUnsavedDataObject('item'); + let item = createUnsavedDataObject('item', { title: "" + i }); item.addToCollection(collection.id); yield item.saveTx(); items.push(item); @@ -251,6 +251,17 @@ describe("Zotero.ItemTreeView", function() { // Select the third item in the list itemsView.selection.select(2); + + // Remove item + var treeRow = itemsView.getRow(2); + yield Zotero.DB.executeTransaction(function* () { + yield collection.removeItems([treeRow.ref.id]); + }.bind(this)); + + // Selection should stay on third row + assert.equal(itemsView.selection.currentIndex, 2); + + // Delete item var treeRow = itemsView.getRow(2); yield treeRow.ref.eraseTx();