ソースを参照

Prevent dublicated empty labels of the same color

Maxime Quandalle 9 年 前
コミット
43de3b8a01
2 ファイル変更15 行追加6 行削除
  1. 1 1
      client/components/cards/labels.js
  2. 14 5
      models/boards.js

+ 1 - 1
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();
   },
 });
 

+ 14 - 5
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 ||