Ver Fonte

Avoid set self as parent card, for real

Andrés Manelli há 6 anos atrás
pai
commit
97822f35fd

+ 5 - 5
client/components/cards/cardDetails.jade

@@ -306,27 +306,27 @@ template(name="cardMorePopup")
     h2 {{_ 'change-card-parent'}}
     label {{_ 'source-board'}}:
       select.js-field-parent-board
+        if isTopLevel
+          option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
+        else
+          option(value="none") {{_ 'custom-field-dropdown-none'}}
         each boards
           if isParentBoard
             option(value="{{_id}}" selected) {{title}}
           else
             option(value="{{_id}}") {{title}}
-        if isTopLevel
-          option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
-        else
-          option(value="none") {{_ 'custom-field-dropdown-none'}}
 
     label {{_ 'parent-card'}}:
       select.js-field-parent-card
         if isTopLevel
           option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
         else
+          option(value="none") {{_ 'custom-field-dropdown-none'}}
           each cards
             if isParentCard
               option(value="{{_id}}" selected) {{title}}
             else
               option(value="{{_id}}") {{title}}
-          option(value="none") {{_ 'custom-field-dropdown-none'}}
     br
     | {{_ 'added'}}
     span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}

+ 16 - 23
client/components/cards/cardDetails.js

@@ -578,11 +578,14 @@ BlazeComponent.extendComponent({
 BlazeComponent.extendComponent({
   onCreated() {
     this.currentCard = this.currentData();
+    this.parentBoard = new ReactiveVar(null);
     this.parentCard = this.currentCard.parentCard();
     if (this.parentCard) {
-      this.parentBoard = this.parentCard.board();
+      const list = $('.js-field-parent-card');
+      list.val(this.parentCard._id);
+      this.parentBoard.set(this.parentCard.board()._id);
     } else {
-      this.parentBoard = null;
+      this.parentBoard.set(null);
     }
   },
 
@@ -601,9 +604,9 @@ BlazeComponent.extendComponent({
 
   cards() {
     const currentId = Session.get('currentCard');
-    if (this.parentBoard) {
+    if (this.parentBoard.get()) {
       return Cards.find({
-        boardId: this.parentBoard,
+        boardId: this.parentBoard.get(),
         _id: {$ne: currentId},
       });
     } else {
@@ -613,8 +616,8 @@ BlazeComponent.extendComponent({
 
   isParentBoard() {
     const board = this.currentData();
-    if (this.parentBoard) {
-      return board._id === this.parentBoard;
+    if (this.parentBoard.get()) {
+      return board._id === this.parentBoard.get();
     }
     return false;
   },
@@ -628,11 +631,10 @@ BlazeComponent.extendComponent({
   },
 
   setParentCardId(cardId) {
-    if (cardId === 'null') {
-      cardId = null;
-      this.parentCard = null;
-    } else {
+    if (cardId) {
       this.parentCard = Cards.findOne(cardId);
+    } else {
+      this.parentCard = null;
     }
     this.currentCard.setParentId(cardId);
   },
@@ -669,23 +671,14 @@ BlazeComponent.extendComponent({
       'change .js-field-parent-board'(evt) {
         const selection = $(evt.currentTarget).val();
         const list = $('.js-field-parent-card');
-        list.empty();
         if (selection === 'none') {
-          this.parentBoard = null;
-          list.prop('disabled', true);
+          this.parentBoard.set(null);
         } else {
-          this.parentBoard = Boards.findOne(selection);
-          this.parentBoard.cards().forEach(function(card) {
-            list.append(
-              $('<option></option>').val(card._id).html(card.title)
-            );
-          });
+          subManager.subscribe('board', $(evt.currentTarget).val());
+          this.parentBoard.set(selection);
           list.prop('disabled', false);
         }
-        list.append(
-          `<option value='none' selected='selected'>${TAPi18n.__('custom-field-dropdown-none')}</option>`
-        );
-        this.setParentCardId('null');
+        this.setParentCardId(null);
       },
       'change .js-field-parent-card'(evt) {
         const selection = $(evt.currentTarget).val();