diff --git a/models/cards.js b/models/cards.js index 65977ef2a..eea26b14d 100644 --- a/models/cards.js +++ b/models/cards.js @@ -367,6 +367,24 @@ Cards.allow({ }); Cards.helpers({ + mapCustomFieldsToBoard(boardId) { + // Map custom fields to new board + return this.customFields.map(cf => { + const oldCf = CustomFields.findOne(cf._id); + const newCf = CustomFields.findOne({ + boardIds: boardId, + name: oldCf.name, + type: oldCf.type, + }); + if (newCf) { + cf._id = newCf._id; + } else if (!_.contains(oldCf.boardIds, boardId)) { + oldCf.addBoard(boardId); + } + return cf; + }); + }, + copy(boardId, swimlaneId, listId) { const oldId = this._id; const oldCard = Cards.findOne(oldId); @@ -397,16 +415,7 @@ Cards.helpers({ delete this.labelIds; this.labelIds = newCardLabels; - // Copy Custom Fields - CustomFields.find({ - _id: { - $in: oldCard.customFields.map(cf => { - return cf._id; - }), - }, - }).forEach(cf => { - if (!_.contains(cf.boardIds, boardId)) cf.addBoard(boardId); - }); + this.customFields = this.mapCustomFieldsToBoard(newBoard._id); } delete this._id; @@ -1528,16 +1537,7 @@ Cards.mutations({ labelIds: newCardLabelIds, }); - // Copy custom fields - CustomFields.find({ - _id: { - $in: this.customFields.map(cf => { - return cf._id; - }), - }, - }).forEach(cf => { - if (!_.contains(cf.boardIds, boardId)) cf.addBoard(boardId); - }); + mutatedFields.customFields = this.mapCustomFieldsToBoard(newBoard._id); } Cards.update(this._id, {