mirror of https://github.com/wekan/wekan
parent
15ce816ec6
commit
d4338dd5cc
@ -0,0 +1,180 @@ |
||||
export class DialogWithBoardSwimlaneList extends BlazeComponent { |
||||
/** returns the card dialog options |
||||
* @return Object with properties { boardId, swimlaneId, listId } |
||||
*/ |
||||
getCardDialogOptions() { |
||||
} |
||||
|
||||
/** 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()); |
||||
}, |
||||
}, |
||||
]; |
||||
} |
||||
} |
||||
|
||||
Loading…
Reference in new issue