mirror of
https://github.com/wekan/wekan.git
synced 2026-03-11 08:02:33 +01:00
Move card dialog remembers now the last selected board
This commit is contained in:
parent
f320069ec8
commit
0a4e472601
2 changed files with 214 additions and 25 deletions
|
|
@ -712,7 +712,7 @@ template(name="exportCardPopup")
|
||||||
| {{_ 'export-card-pdf'}}
|
| {{_ 'export-card-pdf'}}
|
||||||
|
|
||||||
template(name="moveCardPopup")
|
template(name="moveCardPopup")
|
||||||
+boardsAndLists
|
+copyAndMoveCard
|
||||||
|
|
||||||
template(name="copyCardPopup")
|
template(name="copyCardPopup")
|
||||||
label(for='copy-card-title') {{_ 'title'}}:
|
label(for='copy-card-title') {{_ 'title'}}:
|
||||||
|
|
@ -749,6 +749,29 @@ template(name="boardsAndLists")
|
||||||
.edit-controls.clearfix
|
.edit-controls.clearfix
|
||||||
button.primary.confirm.js-done {{_ 'done'}}
|
button.primary.confirm.js-done {{_ 'done'}}
|
||||||
|
|
||||||
|
template(name="copyAndMoveCard")
|
||||||
|
unless currentUser.isWorker
|
||||||
|
label {{_ 'boards'}}:
|
||||||
|
select.js-select-boards(autofocus)
|
||||||
|
each boards
|
||||||
|
if $eq _id currentBoard._id
|
||||||
|
option(value="{{_id}}" selected) {{_ 'current'}}
|
||||||
|
else
|
||||||
|
option(value="{{_id}}" selected="{{#if isCardDialogOptionBoardId _id}}selected{{/if}}") {{title}}
|
||||||
|
|
||||||
|
label {{_ 'swimlanes'}}:
|
||||||
|
select.js-select-swimlanes
|
||||||
|
each swimlanes
|
||||||
|
option(value="{{_id}}" selected="{{#if isCardDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
|
||||||
|
|
||||||
|
label {{_ 'lists'}}:
|
||||||
|
select.js-select-lists
|
||||||
|
each lists
|
||||||
|
option(value="{{_id}}" selected="{{#if isCardDialogOptionListId _id}}selected{{/if}}") {{title}}
|
||||||
|
|
||||||
|
.edit-controls.clearfix
|
||||||
|
button.primary.confirm.js-done {{_ 'done'}}
|
||||||
|
|
||||||
template(name="cardMembersPopup")
|
template(name="cardMembersPopup")
|
||||||
input.card-members-filter(type="text" placeholder="{{_ 'search'}}")
|
input.card-members-filter(type="text" placeholder="{{_ 'search'}}")
|
||||||
ul.pop-over-list.js-card-member-list
|
ul.pop-over-list.js-card-member-list
|
||||||
|
|
|
||||||
|
|
@ -826,34 +826,200 @@ Template.editCardAssignerForm.events({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.moveCardPopup.events({
|
class DialogWithBoardSwimlaneList extends BlazeComponent {
|
||||||
'click .js-done'() {
|
/** returns the card dialog options
|
||||||
const card = Cards.findOne(this._id);
|
* @return Object with properties { boardId, swimlaneId, listId }
|
||||||
const bSelect = $('.js-select-boards')[0];
|
*/
|
||||||
let boardId;
|
getCardDialogOptions() {
|
||||||
// if we are a worker, we won't have a board select so we just use the
|
}
|
||||||
// current boardId of the card.
|
|
||||||
if (bSelect) {
|
|
||||||
boardId = bSelect.options[bSelect.selectedIndex].value;
|
|
||||||
} else {
|
|
||||||
boardId = card.boardId;
|
|
||||||
}
|
|
||||||
const lSelect = $('.js-select-lists')[0];
|
|
||||||
const listId = lSelect.options[lSelect.selectedIndex].value;
|
|
||||||
const slSelect = $('.js-select-swimlanes')[0];
|
|
||||||
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
|
|
||||||
|
|
||||||
|
/** list is done
|
||||||
|
* @param listId the selected list id
|
||||||
|
* @param options the selected options (Object with properties { boardId, swimlaneId, listId })
|
||||||
|
*/
|
||||||
|
setDone(listId, options) {
|
||||||
|
}
|
||||||
|
|
||||||
|
onCreated() {
|
||||||
|
this.currentBoardId = Utils.getCurrentBoardId();
|
||||||
|
this.selectedBoardId = new ReactiveVar(this.currentBoardId);
|
||||||
|
this.selectedSwimlaneId = new ReactiveVar('');
|
||||||
|
this.selectedListId = new ReactiveVar('');
|
||||||
|
this.setCardDialogOption(this.currentBoardId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** set the last confirmed dialog field values
|
||||||
|
* @param boardId the current board id
|
||||||
|
*/
|
||||||
|
setCardDialogOption(boardId) {
|
||||||
|
this.cardDialogOption = {
|
||||||
|
'boardId' : "",
|
||||||
|
'swimlaneId' : "",
|
||||||
|
'listId' : "",
|
||||||
|
}
|
||||||
|
|
||||||
|
let currentOptions = this.getCardDialogOptions();
|
||||||
|
if (currentOptions && boardId && currentOptions[boardId]) {
|
||||||
|
this.cardDialogOption = currentOptions[boardId];
|
||||||
|
if (this.cardDialogOption.boardId &&
|
||||||
|
this.cardDialogOption.swimlaneId &&
|
||||||
|
this.cardDialogOption.listId
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.selectedBoardId.set(this.cardDialogOption.boardId)
|
||||||
|
this.selectedSwimlaneId.set(this.cardDialogOption.swimlaneId);
|
||||||
|
this.selectedListId.set(this.cardDialogOption.listId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.getBoardData(this.selectedBoardId.get());
|
||||||
|
if (!this.selectedSwimlaneId.get() || !Swimlanes.findOne({_id: this.selectedSwimlaneId.get(), boardId: this.selectedBoardId.get()})) {
|
||||||
|
this.setFirstSwimlaneId();
|
||||||
|
}
|
||||||
|
if (!this.selectedListId.get() || !Lists.findOne({_id: this.selectedListId.get(), boardId: this.selectedBoardId.get()})) {
|
||||||
|
this.setFirstListId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** sets the first swimlane id */
|
||||||
|
setFirstSwimlaneId() {
|
||||||
|
try {
|
||||||
|
const board = Boards.findOne(this.selectedBoardId.get());
|
||||||
|
const swimlaneId = board.swimlanes().fetch()[0]._id;
|
||||||
|
this.selectedSwimlaneId.set(swimlaneId);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
/** sets the first list id */
|
||||||
|
setFirstListId() {
|
||||||
|
try {
|
||||||
|
const board = Boards.findOne(this.selectedBoardId.get());
|
||||||
|
const listId = board.lists().fetch()[0]._id;
|
||||||
|
this.selectedListId.set(listId);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns if the board id was the last confirmed one
|
||||||
|
* @param boardId check this board id
|
||||||
|
* @return if the board id was the last confirmed one
|
||||||
|
*/
|
||||||
|
isCardDialogOptionBoardId(boardId) {
|
||||||
|
let ret = this.cardDialogOption.boardId == boardId;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns if the swimlane id was the last confirmed one
|
||||||
|
* @param swimlaneId check this swimlane id
|
||||||
|
* @return if the swimlane id was the last confirmed one
|
||||||
|
*/
|
||||||
|
isCardDialogOptionSwimlaneId(swimlaneId) {
|
||||||
|
let ret = this.cardDialogOption.swimlaneId == swimlaneId;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns if the list id was the last confirmed one
|
||||||
|
* @param listId check this list id
|
||||||
|
* @return if the list id was the last confirmed one
|
||||||
|
*/
|
||||||
|
isCardDialogOptionListId(listId) {
|
||||||
|
let ret = this.cardDialogOption.listId == listId;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns all available board */
|
||||||
|
boards() {
|
||||||
|
const ret = Boards.find(
|
||||||
|
{
|
||||||
|
archived: false,
|
||||||
|
'members.userId': Meteor.userId(),
|
||||||
|
_id: { $ne: Meteor.user().getTemplatesBoardId() },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sort: { sort: 1 },
|
||||||
|
},
|
||||||
|
);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns all available swimlanes of the current board */
|
||||||
|
swimlanes() {
|
||||||
|
const board = Boards.findOne(this.selectedBoardId.get());
|
||||||
|
const ret = board.swimlanes();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** returns all available lists of the current board */
|
||||||
|
lists() {
|
||||||
|
const board = Boards.findOne(this.selectedBoardId.get());
|
||||||
|
const ret = board.lists();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** get the board data from the server
|
||||||
|
* @param boardId get the board data of this board id
|
||||||
|
*/
|
||||||
|
getBoardData(boardId) {
|
||||||
|
const self = this;
|
||||||
|
Meteor.subscribe('board', boardId, false, {
|
||||||
|
onReady() {
|
||||||
|
const sameBoardId = self.selectedBoardId.get() == boardId;
|
||||||
|
self.selectedBoardId.set(boardId);
|
||||||
|
|
||||||
|
if (!sameBoardId) {
|
||||||
|
// reset swimlane id (for selection in cards())
|
||||||
|
self.setFirstSwimlaneId();
|
||||||
|
|
||||||
|
// reset list id (for selection in cards())
|
||||||
|
self.setFirstListId();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
events() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
'click .js-done'() {
|
||||||
|
const boardSelect = this.$('.js-select-boards')[0];
|
||||||
|
const boardId = boardSelect.options[boardSelect.selectedIndex].value;
|
||||||
|
|
||||||
|
const listSelect = this.$('.js-select-lists')[0];
|
||||||
|
const listId = listSelect.options[listSelect.selectedIndex].value;
|
||||||
|
|
||||||
|
const swimlaneSelect = this.$('.js-select-swimlanes')[0];
|
||||||
|
const swimlaneId = swimlaneSelect.options[swimlaneSelect.selectedIndex].value;
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
'boardId' : boardId,
|
||||||
|
'swimlaneId' : swimlaneId,
|
||||||
|
'listId' : listId,
|
||||||
|
}
|
||||||
|
this.setDone(boardId, swimlaneId, listId, options);
|
||||||
|
Popup.back(2);
|
||||||
|
},
|
||||||
|
'change .js-select-boards'(event) {
|
||||||
|
const boardId = $(event.currentTarget).val();
|
||||||
|
this.getBoardData(boardId);
|
||||||
|
},
|
||||||
|
'change .js-select-swimlanes'(event) {
|
||||||
|
this.selectedSwimlaneId.set($(event.currentTarget).val());
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Move Card Dialog */
|
||||||
|
(class extends DialogWithBoardSwimlaneList {
|
||||||
|
getCardDialogOptions() {
|
||||||
|
const ret = Meteor.user().getMoveAndCopyDialogOptions();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
setDone(boardId, swimlaneId, listId, options) {
|
||||||
|
Meteor.user().setMoveAndCopyDialogOption(this.currentBoardId, options);
|
||||||
|
const card = this.data();
|
||||||
const minOrder = card.getMinSort(listId, swimlaneId);
|
const minOrder = card.getMinSort(listId, swimlaneId);
|
||||||
card.move(boardId, swimlaneId, listId, minOrder - 1);
|
card.move(boardId, swimlaneId, listId, minOrder - 1);
|
||||||
|
}
|
||||||
|
}).register('moveCardPopup');
|
||||||
|
|
||||||
// set new id's to card object in case the card is moved to top by the comment "moveCard" after this command (.js-move-card)
|
|
||||||
this.boardId = boardId;
|
|
||||||
this.swimlaneId = swimlaneId;
|
|
||||||
this.listId = listId;
|
|
||||||
|
|
||||||
Popup.back(2);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
BlazeComponent.extendComponent({
|
BlazeComponent.extendComponent({
|
||||||
onCreated() {
|
onCreated() {
|
||||||
this.currentBoardId = Utils.getCurrentBoardId();
|
this.currentBoardId = Utils.getCurrentBoardId();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue