Use a method call to move the swimlane server side

This commit is contained in:
John R. Supplee 2021-03-27 18:50:05 +02:00
parent aad300613d
commit ed54c09b48
4 changed files with 83 additions and 66 deletions

View file

@ -346,9 +346,6 @@ BlazeComponent.extendComponent({
},
);
console.log('boards.count():', boards.count());
console.log('boards:', boards);
return boards;
},
@ -361,8 +358,7 @@ BlazeComponent.extendComponent({
let boardId;
if (bSelect) {
boardId = bSelect.options[bSelect.selectedIndex].value;
swimlane.move(boardId);
this.board().getDefaultSwimline();
Meteor.call('moveSwimlane', this.currentSwimlane._id, boardId);
}
Popup.close();
},

View file

@ -202,7 +202,7 @@ Lists.helpers({
this.swimlaneId = swimlaneId;
let _id = null;
existingListWithSameName = Lists.findOne({
const existingListWithSameName = Lists.findOne({
boardId,
title: this.title,
archived: false,
@ -225,6 +225,35 @@ Lists.helpers({
});
},
move(boardId, swimlaneId) {
const boardList = Lists.findOne({
boardId,
title: this.title,
archived: false,
});
let listId;
if (boardList) {
listId = boardList._id;
this.cards().forEach(card => {
card.move(boardId, this._id, boardList._id);
});
} else {
console.log('list.title:', this.title);
console.log('boardList:', boardList);
listId = Lists.insert({
title: this.title,
boardId,
type: this.type,
archived: false,
wipLimit: this.wipLimit,
});
}
this.cards(swimlaneId).forEach(card => {
card.move(boardId, swimlaneId, listId);
});
},
cards(swimlaneId) {
const selector = {
listId: this._id,
@ -297,36 +326,6 @@ Lists.mutations({
return { $set: { starred: !!enable } };
},
move(boardId, swimlaneId, sort=null) {
const mutatedFields = {
boardId,
swimlaneId,
sort,
};
if (this.boardId !== boardId) {
mutatedFields.boardId = boardId;
}
if (this.swimlaneId !== swimlaneId) {
mutatedFields.swimlaneId = swimlaneId;
}
if (sort !== null && sort !== this.sort) {
mutatedFields.sort = sort;
}
if (Object.keys(mutatedFields).length) {
this.cards().forEach(card => {
card.move(boardId, swimlaneId, this._id);
});
Lists.update(this._id, {
$set: mutatedFields,
});
}
},
archive() {
if (this.isTemplateList()) {
this.cards().forEach(card => {

View file

@ -269,36 +269,6 @@ Swimlanes.mutations({
return { $set: { archived: true, archivedAt: new Date() } };
},
move(boardId, sort = null) {
const mutatedFields = {};
if (this.boardId !== boardId) {
mutatedFields.boardId = boardId;
}
if (sort !== null && sort !== this.sort) {
mutatedFields.sort = sort;
}
if (Object.keys(mutatedFields).length) {
this.lists().forEach(list => {
const boardList = Lists.findOne({ boardId, title: list.title });
if (boardList) {
list.cards().forEach(card => {
card.move(boardId, this._id, boardList._id);
});
} else {
list.move(boardId, this._id);
}
});
Swimlanes.update(this._id, {
$set: mutatedFields,
});
}
},
restore() {
if (this.isTemplateSwimlane()) {
this.myLists().forEach(list => {

View file

@ -0,0 +1,52 @@
Meteor.methods({
moveSwimlane(swimlaneId, toBoardId) {
check(swimlaneId, String);
check(toBoardId, String);
const swimlane = Swimlanes.findOne(swimlaneId);
const board = Boards.findOne(toBoardId);
if (swimlane && board) {
swimlane.lists().forEach(list => {
const boardList = Lists.findOne({
boardId: toBoardId,
title: list.title,
archived: false,
});
let toListId;
if (boardList) {
toListId = boardList._id;
} else {
toListId = Lists.insert({
title: list.title,
boardId: toBoardId,
type: list.type,
archived: false,
wipLimit: list.wipLimit,
});
}
Cards.find({
listId: list._id,
swimlaneId,
}).forEach(card => {
card.move(toBoardId, swimlaneId, toListId);
});
});
Swimlanes.update(swimlaneId, {
$set: {
boardId: toBoardId,
},
});
// make sure there is a default swimlane
this.board().getDefaultSwimline();
return true;
}
return false;
},
});