diff options
author | Maxime Quandalle <maxime@quandalle.com> | 2015-10-14 23:40:00 +0200 |
---|---|---|
committer | Maxime Quandalle <maxime@quandalle.com> | 2015-10-14 23:40:27 +0200 |
commit | 43de3b8a01b001ec665294fa8bd75f5d01df7df0 (patch) | |
tree | ac9fe20b4442076ee594a6b809b3f6857a86d783 | |
parent | ab761f11868ce5af80d2d54e173827dc043fef02 (diff) | |
download | wekan-43de3b8a01b001ec665294fa8bd75f5d01df7df0.tar.gz wekan-43de3b8a01b001ec665294fa8bd75f5d01df7df0.tar.bz2 wekan-43de3b8a01b001ec665294fa8bd75f5d01df7df0.zip |
Prevent dublicated empty labels of the same color
-rw-r--r-- | client/components/cards/labels.js | 2 | ||||
-rw-r--r-- | models/boards.js | 19 |
2 files changed, 15 insertions, 6 deletions
diff --git a/client/components/cards/labels.js b/client/components/cards/labels.js index d2ee0140..6a411561 100644 --- a/client/components/cards/labels.js +++ b/client/components/cards/labels.js @@ -69,12 +69,12 @@ Template.formLabel.events({ Template.createLabelPopup.events({ // Create the new label 'submit .create-label'(evt, tpl) { + evt.preventDefault(); const board = Boards.findOne(Session.get('currentBoard')); const name = tpl.$('#labelName').val().trim(); const color = Blaze.getData(tpl.find('.fa-check')).color; board.addLabel(name, color); Popup.back(); - evt.preventDefault(); }, }); diff --git a/models/boards.js b/models/boards.js index 8d2b63e4..fd0212c5 100644 --- a/models/boards.js +++ b/models/boards.js @@ -93,9 +93,7 @@ Boards.helpers({ }, getLabel(name, color) { - return this.labels.find((current) => { - return ((current.name === name) && (current.color === color)); - }); + return _.findWhere(this.labels, { name, color }); }, labelIndex(labelId) { @@ -138,11 +136,22 @@ Boards.mutations({ addLabel(name, color) { const _id = Random.id(6); + + // If an empty label of a given color already exists we don't want to create + // an other one because they would be indistinguishable in the UI (they + // would still have different `_id` but that is not exposed to the user). + if (name === '' && this.getLabel(name, color)) { + return {}; + } return { $push: {labels: { _id, name, color }}}; }, editLabel(labelId, name, color) { const labelIndex = this.labelIndex(labelId); + + if (name === '' && this.getLabel(name, color)) { + return {}; + } return { $set: { [`labels.${labelIndex}.name`]: name, @@ -299,8 +308,8 @@ if (Meteor.isServer) { }); }); - // If the user removes a label from a board, we have to remove references to - // this label in all cards of the board. + // If the user remove one label from a board, we cant to remove reference of + // this label in any card of this board. Boards.after.update((userId, doc, fieldNames, modifier) => { if (!_.contains(fieldNames, 'labels') || !modifier.$pull || |