Refuse to delete a card as long as there is link to it

This fixes https://github.com/wekan/wekan/issues/2785.
reviewable/pr3068/r1
Marc Hartmayer 5 years ago
parent 2691f033cb
commit b740381a72
  1. 7
      client/components/cards/cardDetails.js
  2. 21
      client/components/lists/listHeader.js

@ -967,7 +967,12 @@ BlazeComponent.extendComponent({
},
'click .js-delete': Popup.afterConfirm('cardDelete', function() {
Popup.close();
Cards.remove(this._id);
// verify that there are no linked cards
if (Cards.find({ linkedId: this._id }).count() === 0) {
Cards.remove(this._id);
} else {
// TODO popup...
}
Utils.goBoardId(this.boardId);
}),
'change .js-field-parent-board'(event) {

@ -223,8 +223,25 @@ BlazeComponent.extendComponent({
Template.listMorePopup.events({
'click .js-delete': Popup.afterConfirm('listDelete', function() {
Popup.close();
this.allCards().map(card => Cards.remove(card._id));
Lists.remove(this._id);
// TODO how can we avoid the fetch call?
const allCards = this.allCards().fetch();
const allCardIds = _.pluck(allCards, '_id');
// it's okay if the linked cards are on the same list
if (
Cards.find({
$and: [
{ listId: { $ne: this._id } },
{ linkedId: { $in: allCardIds } },
],
}).count() === 0
) {
allCardIds.map(_id => Cards.remove(_id));
Lists.remove(this._id);
} else {
// TODO popup with a hint that the list cannot be deleted as there are
// linked cards. We can adapt the query above so we can list the linked
// cards.
}
Utils.goBoardId(this.boardId);
}),
});

Loading…
Cancel
Save