Add copy swimlane functionality

This commit is contained in:
John R. Supplee 2021-04-22 14:05:20 +02:00
parent 2119a3a51e
commit 4940af0573
7 changed files with 101 additions and 59 deletions

View file

@ -39,6 +39,8 @@ template(name="swimlaneActionPopup")
hr
ul.pop-over-list
li: a.js-close-swimlane {{_ 'archive-swimlane'}}
ul.pop-over-list
li: a.js-copy-swimlane {{_ 'copy-swimlane'}}
ul.pop-over-list
li: a.js-move-swimlane {{_ 'move-swimlane'}}

View file

@ -55,6 +55,7 @@ Template.swimlaneActionPopup.events({
Popup.close();
},
'click .js-move-swimlane': Popup.open('moveSwimlane'),
'click .js-copy-swimlane': Popup.open('copySwimlane'),
});
Template.swimlaneActionPopup.events({

View file

@ -71,3 +71,13 @@ template(name="moveSwimlanePopup")
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
template(name="copySwimlanePopup")
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each toBoard in toBoards
option(value="{{toBoard._id}}" selected="{{#if $eq toBoard.title board.title}}1{{/if}}") {{toBoard.title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}

View file

@ -324,45 +324,54 @@ BlazeComponent.extendComponent({
},
}).register('listsGroup');
BlazeComponent.extendComponent({
class MoveSwimlaneComponent extends BlazeComponent {
serverMethod = 'moveSwimlane';
onCreated() {
this.currentSwimlane = this.currentData();
},
}
board() {
return Boards.findOne(Session.get('currentBoard'));
},
}
toBoardsSelector() {
return {
archived: false,
'members.userId': Meteor.userId(),
type: 'board',
_id: { $ne: this.board()._id },
};
}
toBoards() {
const boards = Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
type: 'board',
_id: { $ne: this.board()._id },
},
{
sort: { title: 1 },
},
);
return boards;
},
return Boards.find(this.toBoardsSelector(), { sort: { title: 1 } });
}
events() {
return [
{
'click .js-done'() {
const swimlane = Swimlanes.findOne(this.currentSwimlane._id);
// const swimlane = Swimlanes.findOne(this.currentSwimlane._id);
const bSelect = $('.js-select-boards')[0];
let boardId;
if (bSelect) {
boardId = bSelect.options[bSelect.selectedIndex].value;
Meteor.call('moveSwimlane', this.currentSwimlane._id, boardId);
Meteor.call(this.serverMethod, this.currentSwimlane._id, boardId);
}
Popup.close();
},
},
];
},
}).register('moveSwimlanePopup');
}
}
MoveSwimlaneComponent.register('moveSwimlanePopup');
(class extends MoveSwimlaneComponent {
serverMethod = 'copySwimlane';
toBoardsSelector() {
const selector = super.toBoardsSelector();
delete selector._id;
return selector;
}
}.register('copySwimlanePopup'));