瀏覽代碼

Merge pull request #3120 from marc1006/issue_3119

Fix move selection
Lauri Ojansivu 5 年之前
父節點
當前提交
fd0afd7b05
共有 3 個文件被更改,包括 46 次插入3 次删除
  1. 3 2
      client/components/sidebar/sidebarFilters.js
  2. 1 1
      client/components/swimlanes/swimlanes.jade
  3. 42 0
      models/cards.js

+ 3 - 2
client/components/sidebar/sidebarFilters.js

@@ -157,8 +157,9 @@ Template.disambiguateMultiMemberPopup.events({
 });
 
 Template.moveSelectionPopup.events({
-  'click .js-select-list'() {
-    mutateSelectedCards('move', this._id);
+  'click .js-select-list'(event) {
+    // Move the minicard to the end of the target list
+    mutateSelectedCards('moveToEndOfList', { listId: this._id });
     EscapeActions.executeUpTo('multiselection');
   },
 });

+ 1 - 1
client/components/swimlanes/swimlanes.jade

@@ -2,7 +2,7 @@ template(name="swimlane")
   .swimlane
     +swimlaneHeader
   unless collapseSwimlane
-    .swimlane.js-lists.js-swimlane
+    .swimlane.js-lists.js-swimlane(id="swimlane-{{_id}}")
       if isMiniScreen
         if currentListIsInThisSwimlane _id
           +list(currentList)

+ 42 - 0
models/cards.js

@@ -1255,6 +1255,48 @@ Cards.mutations({
     };
   },
 
+  moveToEndOfList({ listId } = {}) {
+    let swimlaneId = this.swimlaneId;
+    const boardId = this.boardId;
+    let sortIndex = 0;
+
+    // This should never happen, but there was a bug that was fixed in commit
+    // ea0239538a68e225c867411a4f3e0d27c158383.
+    if (!swimlaneId) {
+      const board = Boards.findOne(boardId);
+      swimlaneId = board.getDefaultSwimline()._id;
+    }
+    // Move the minicard to the end of the target list
+    let parentElementDom = $(`#swimlane-${this.swimlaneId}`).get(0);
+    if (!parentElementDom) parentElementDom = $(':root');
+
+    const lastCardDom = $(parentElementDom)
+      .find(`#js-list-${listId} .js-minicard:last`)
+      .get(0);
+    if (lastCardDom) sortIndex = Utils.calculateIndex(lastCardDom, null).base;
+
+    return this.moveOptionalArgs({
+      boardId: boardId,
+      swimlaneId: swimlaneId,
+      listId: listId,
+      sort: sortIndex,
+    });
+  },
+
+  moveOptionalArgs({ boardId, swimlaneId, listId, sort } = {}) {
+    boardId = boardId ?? this.boardId;
+    swimlaneId = swimlaneId ?? this.swimlaneId;
+    // This should never happen, but there was a bug that was fixed in commit
+    // ea0239538a68e225c867411a4f3e0d27c158383.
+    if (!swimlaneId) {
+      const board = Boards.findOne(boardId);
+      swimlaneId = board.getDefaultSwimline()._id;
+    }
+    listId = listId ?? this.listId;
+    sort = sort ?? this.sort;
+    return this.move(boardId, swimlaneId, listId, sort);
+  },
+
   move(boardId, swimlaneId, listId, sort) {
     // Copy Custom Fields
     if (this.boardId !== boardId) {