diff options
author | Marc Hartmayer <hello@hartmayer.com> | 2020-04-30 01:03:37 +0200 |
---|---|---|
committer | Marc Hartmayer <hello@hartmayer.com> | 2020-04-30 01:59:44 +0200 |
commit | b740381a7248e1e059cecedcf6cd6824abb792b3 (patch) | |
tree | 8076a31bee3e2d84e078f78016ba7fc6247a9a75 | |
parent | 2691f033cbd072864cf79e95d131a93449d3c84d (diff) | |
download | wekan-b740381a7248e1e059cecedcf6cd6824abb792b3.tar.gz wekan-b740381a7248e1e059cecedcf6cd6824abb792b3.tar.bz2 wekan-b740381a7248e1e059cecedcf6cd6824abb792b3.zip |
Refuse to delete a card as long as there is link to it
This fixes https://github.com/wekan/wekan/issues/2785.
-rw-r--r-- | client/components/cards/cardDetails.js | 7 | ||||
-rw-r--r-- | client/components/lists/listHeader.js | 21 |
2 files changed, 25 insertions, 3 deletions
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 271fbe2f..e8e36178 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.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) { diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 46dbd748..a839bb72 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -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); }), }); |