commit f98de97e4da4d76423dddee93c1c1406e9faf599
parent 9ecfc31fd435bba759b3f77fb3adc1ecf53fe1a4
Author: Dan Stillman <dstillman@zotero.org>
Date: Thu, 2 Feb 2017 18:37:57 -0500
Don't select last item in list when item is removed from collection
Diffstat:
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git 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 <collectionID>-<itemID>
+ // '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
@@ -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();