Deselect tags when deleted (regression from Reactification)
This commit is contained in:
parent
3a777dcf40
commit
fc43514ff0
2 changed files with 58 additions and 20 deletions
|
@ -74,17 +74,21 @@ Zotero.TagSelector = class TagSelectorContainer extends React.Component {
|
||||||
if (type == 'item' && (event == 'trash')) {
|
if (type == 'item' && (event == 'trash')) {
|
||||||
return this.setState({tags: await this.getTags()});
|
return this.setState({tags: await this.getTags()});
|
||||||
}
|
}
|
||||||
|
|
||||||
// If a selected tag no longer exists, deselect it
|
// If a selected tag no longer exists, deselect it
|
||||||
if (type == 'item-tag') {
|
if (type == 'tag' && (event == 'modify' || event == 'delete')) {
|
||||||
if (event == 'delete' || event == 'trash' || event == 'modify') {
|
let changed = false;
|
||||||
for (let tag of this.selectedTags) {
|
for (let id of ids) {
|
||||||
if (tag == extraData[ids[0]].old.tag) {
|
let tag = extraData[id].old.tag;
|
||||||
this.selectedTags.delete(tag);
|
if (this.selectedTags.has(tag)) {
|
||||||
}
|
this.selectedTags.delete(tag);
|
||||||
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.setState({tags: await this.getTags()});
|
if (changed && typeof(this.props.onSelection) === 'function') {
|
||||||
|
this.props.onSelection(this.selectedTags);
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setState({tags: await this.getTags()});
|
this.setState({tags: await this.getTags()});
|
||||||
|
|
|
@ -189,32 +189,36 @@ describe("Tag Selector", function () {
|
||||||
|
|
||||||
|
|
||||||
describe("#notify()", function () {
|
describe("#notify()", function () {
|
||||||
it("should add a tag when added to an item in the library root", function* () {
|
it("should add a tag when added to an item in the library root", async function () {
|
||||||
var promise;
|
var promise;
|
||||||
|
|
||||||
if (collectionsView.selection.currentIndex != 0) {
|
if (collectionsView.selection.currentIndex != 0) {
|
||||||
promise = waitForTagSelector(win);
|
promise = waitForTagSelector(win);
|
||||||
yield collectionsView.selectLibrary();
|
await collectionsView.selectLibrary();
|
||||||
yield promise;
|
await promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add item with tag to library root
|
// Add item with tag to library root
|
||||||
var item = createUnsavedDataObject('item');
|
promise = waitForTagSelector(win);
|
||||||
|
var item = await createDataObject('item');
|
||||||
|
await promise
|
||||||
|
|
||||||
|
var tagA = Zotero.Utilities.randomString();
|
||||||
|
var tagB = Zotero.Utilities.randomString();
|
||||||
item.setTags([
|
item.setTags([
|
||||||
{
|
{
|
||||||
tag: 'A'
|
tag: tagA
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
tag: 'B',
|
tag: tagB,
|
||||||
type: 1
|
type: 1
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
promise = waitForTagSelector(win);
|
promise = waitForTagSelector(win);
|
||||||
yield item.saveTx();
|
await item.saveTx();
|
||||||
yield promise;
|
await promise;
|
||||||
|
|
||||||
// Tag selector should have at least one tag
|
assert.includeMembers(getRegularTags(), [tagA, tagB]);
|
||||||
assert.isAbove(getRegularTags().length, 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should add a tag when an item is added in a collection", function* () {
|
it("should add a tag when an item is added in a collection", function* () {
|
||||||
|
@ -394,7 +398,7 @@ describe("Tag Selector", function () {
|
||||||
yield item.saveTx();
|
yield item.saveTx();
|
||||||
yield promise;
|
yield promise;
|
||||||
|
|
||||||
// Tag selector should show the new item's tag
|
// Tag selector should show the new tag
|
||||||
assert.include(getRegularTags(), "A");
|
assert.include(getRegularTags(), "A");
|
||||||
|
|
||||||
// Remove tag from library
|
// Remove tag from library
|
||||||
|
@ -404,8 +408,38 @@ describe("Tag Selector", function () {
|
||||||
yield tagSelector.openDeletePrompt();
|
yield tagSelector.openDeletePrompt();
|
||||||
yield promise;
|
yield promise;
|
||||||
|
|
||||||
// Tag selector shouldn't show the deleted item's tag
|
// Tag selector shouldn't show the deleted tag
|
||||||
assert.notInclude(getRegularTags(), "A");
|
assert.notInclude(getRegularTags(), "A");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should deselect a tag when deleted from a library", async function () {
|
||||||
|
var libraryID = Zotero.Libraries.userLibraryID;
|
||||||
|
await selectLibrary(win);
|
||||||
|
|
||||||
|
var promise = waitForTagSelector(win);
|
||||||
|
|
||||||
|
var item1 = await createDataObject('item', { tags: [{ tag: 'A' }] });
|
||||||
|
var item2 = await createDataObject('item', { tags: [{ tag: 'B' }] });
|
||||||
|
await promise;
|
||||||
|
|
||||||
|
tagSelector.handleTagSelected('A');
|
||||||
|
await waitForTagSelector(win);
|
||||||
|
|
||||||
|
// Tag selector should show the selected tag
|
||||||
|
assert.include(getRegularTags(), 'A');
|
||||||
|
// And not the unselected one
|
||||||
|
assert.notInclude(getRegularTags(), 'B');
|
||||||
|
|
||||||
|
// Remove tag from library
|
||||||
|
promise = waitForTagSelector(win);
|
||||||
|
await Zotero.Tags.removeFromLibrary(libraryID, Zotero.Tags.getID('A'));
|
||||||
|
await promise;
|
||||||
|
|
||||||
|
// Deleted tag should no longer be shown or selected
|
||||||
|
assert.notInclude(getRegularTags(), 'A');
|
||||||
|
assert.notInclude(Array.from(tagSelector.getTagSelection()), 'A');
|
||||||
|
// Other tags should be shown again
|
||||||
|
assert.include(getRegularTags(), 'B');
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue