Don't change selection unnecessarily when creating trashed item

This commit is contained in:
Dan Stillman 2015-06-23 16:56:10 -04:00
parent 27f6f018d3
commit 0d1d4ee5cb
2 changed files with 28 additions and 24 deletions

View File

@ -823,14 +823,14 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
} }
} }
if (sort) {
yield this.sort(typeof sort == 'number' ? sort : false);
}
else {
this._refreshItemRowMap();
}
if (singleSelect) { if (singleSelect) {
if (sort) {
yield this.sort(typeof sort == 'number' ? sort : false);
}
else {
this._refreshItemRowMap();
}
if (!extraData[singleSelect] || !extraData[singleSelect].skipSelect) { if (!extraData[singleSelect] || !extraData[singleSelect].skipSelect) {
// Reset to Info tab // Reset to Info tab
this._ownerDocument.getElementById('zotero-view-tabbox').selectedIndex = 0; this._ownerDocument.getElementById('zotero-view-tabbox').selectedIndex = 0;
@ -841,19 +841,14 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
else if (action == 'modify' && ids.length == 1 && else if (action == 'modify' && ids.length == 1 &&
savedSelection.length == 1 && savedSelection[0] == ids[0]) { savedSelection.length == 1 && savedSelection[0] == ids[0]) {
// If the item no longer matches the search term, clear the search // If the item no longer matches the search term, clear the search
// DEBUG: Still needed/wanted? (and search is async, so doesn't work anyway,
// here or above)
if (quicksearch && this._rowMap[ids[0]] == undefined) { if (quicksearch && this._rowMap[ids[0]] == undefined) {
Zotero.debug('Selected item no longer matches quicksearch -- clearing'); Zotero.debug('Selected item no longer matches quicksearch -- clearing');
quicksearch.value = ''; quicksearch.value = '';
quicksearch.doCommand(); quicksearch.doCommand();
} }
if (sort) {
yield this.sort(typeof sort == 'number' ? sort : false);
}
else {
this._refreshItemRowMap();
}
if (activeWindow) { if (activeWindow) {
yield this.selectItem(ids[0]); yield this.selectItem(ids[0]);
} }
@ -861,16 +856,8 @@ Zotero.ItemTreeView.prototype.notify = Zotero.Promise.coroutine(function* (actio
yield this.rememberSelection(savedSelection); yield this.rememberSelection(savedSelection);
} }
} }
else // On removal of a row, select item at previous position
{ else if (savedSelection.length) {
if (sort) {
yield this.sort(typeof sort == 'number' ? sort : false);
}
else {
this._refreshItemRowMap();
}
// On removal of a row, select item at previous position
if (action == 'remove' || action == 'trash' || action == 'delete') { if (action == 'remove' || action == 'trash' || action == 'delete') {
// In duplicates view, select the next set on delete // In duplicates view, select the next set on delete
if (collectionTreeRow.isDuplicates()) { if (collectionTreeRow.isDuplicates()) {

View File

@ -116,6 +116,23 @@ describe("Zotero.ItemTreeView", function() {
assert.equal(selected[0], existingItemID); assert.equal(selected[0], existingItemID);
}); });
it("shouldn't change selection outside of trash if new trashed item is created with skipSelect", function* () {
yield selectLibrary(win);
yield waitForItemsLoad(win);
itemsView.selection.clearSelection();
var item = createUnsavedDataObject('item');
item.deleted = true;
var id = yield item.saveTx({
skipSelect: true
});
// Nothing should be selected
selected = itemsView.getSelectedItems(true);
assert.lengthOf(selected, 0);
})
it("shouldn't select a modified item", function* () { it("shouldn't select a modified item", function* () {
// Create item // Create item
var item = new Zotero.Item('book'); var item = new Zotero.Item('book');