Use a Meteor call to copy a board

The current method was to copy a board on the client side.  But
not all data was available for copying rules.  Moving the copy
function to the server side solves this problem.
reviewable/pr3458/r1
John R. Supplee 4 years ago
parent 1c7a9e4de8
commit ff8a36653a
  1. 19
      client/components/lists/listBody.js
  2. 1
      models/boards.js
  3. 16
      server/publications/boards.js

@ -675,12 +675,19 @@ BlazeComponent.extendComponent({
element.type = 'swimlane';
_id = element.copy(this.boardId);
} else if (this.isBoardTemplateSearch) {
board = Boards.findOne(element.linkedId);
board.sort = Boards.find({ archived: false }).count();
board.type = 'board';
board.title = element.title;
delete board.slug;
_id = board.copy();
Meteor.call(
'copyBoard',
element.linkedId,
{
sort: Boards.find({ archived: false }).count(),
type: 'board',
title: element.title,
},
(err, data) => {
_id = data;
},
);
// _id = board.copy();
}
Popup.close();
},

@ -508,6 +508,7 @@ Boards.helpers({
copy() {
const oldId = this._id;
delete this._id;
delete this.slug;
const _id = Boards.insert(this);
// Copy all swimlanes in board

@ -209,3 +209,19 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
return this.ready();
});
Meteor.methods({
copyBoard(boardId, properties) {
check(boardId, String);
check(properties, Object);
const board = Boards.findOne(boardId);
if (board) {
for (const key in properties) {
board[key] = properties[key];
}
return board.copy();
}
return null;
},
});

Loading…
Cancel
Save