| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | import { ReactiveCache } from '/imports/reactiveCache';export class DialogWithBoardSwimlaneList extends BlazeComponent {  /** returns the card dialog options   * @return Object with properties { boardId, swimlaneId, listId }   */  getDialogOptions() {  }  /** list is done   * @param listId the selected list id   * @param options the selected options (Object with properties { boardId, swimlaneId, listId })   */  setDone(listId, options) {  }  /** get the default options   * @return the options   */  getDefaultOption(boardId) {    const ret = {      'boardId' : "",      'swimlaneId' : "",      'listId' : "",    }    return ret;  }  onCreated() {    this.currentBoardId = Utils.getCurrentBoardId();    this.selectedBoardId = new ReactiveVar(this.currentBoardId);    this.selectedSwimlaneId = new ReactiveVar('');    this.selectedListId = new ReactiveVar('');    this.setOption(this.currentBoardId);  }  /** set the last confirmed dialog field values   * @param boardId the current board id   */  setOption(boardId) {    this.cardOption = this.getDefaultOption();    let currentOptions = this.getDialogOptions();    if (currentOptions && boardId && currentOptions[boardId]) {      this.cardOption = currentOptions[boardId];      if (this.cardOption.boardId &&          this.cardOption.swimlaneId &&          this.cardOption.listId      )      {        this.selectedBoardId.set(this.cardOption.boardId)        this.selectedSwimlaneId.set(this.cardOption.swimlaneId);        this.selectedListId.set(this.cardOption.listId);      }    }    this.getBoardData(this.selectedBoardId.get());    if (!this.selectedSwimlaneId.get() || !ReactiveCache.getSwimlane({_id: this.selectedSwimlaneId.get(), boardId: this.selectedBoardId.get()})) {      this.setFirstSwimlaneId();    }    if (!this.selectedListId.get() || !ReactiveCache.getList({_id: this.selectedListId.get(), boardId: this.selectedBoardId.get()})) {      this.setFirstListId();    }  }  /** sets the first swimlane id */  setFirstSwimlaneId() {    try {      const board = ReactiveCache.getBoard(this.selectedBoardId.get());      const swimlaneId = board.swimlanes()[0]._id;      this.selectedSwimlaneId.set(swimlaneId);    } catch (e) {}  }  /** sets the first list id */  setFirstListId() {    try {      const board = ReactiveCache.getBoard(this.selectedBoardId.get());      const listId = board.lists()[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   */  isDialogOptionBoardId(boardId) {    let ret = this.cardOption.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   */  isDialogOptionSwimlaneId(swimlaneId) {    let ret = this.cardOption.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   */  isDialogOptionListId(listId) {    let ret = this.cardOption.listId == listId;    return ret;  }  /** returns all available board */  boards() {    const ret = ReactiveCache.getBoards(      {        archived: false,        'members.userId': Meteor.userId(),        _id: { $ne: ReactiveCache.getCurrentUser().getTemplatesBoardId() },      },      {        sort: { sort: 1 },      },    );    return ret;  }  /** returns all available swimlanes of the current board */  swimlanes() {    const board = ReactiveCache.getBoard(this.selectedBoardId.get());    const ret = board.swimlanes();    return ret;  }  /** returns all available lists of the current board */  lists() {    const board = ReactiveCache.getBoard(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());        },      },    ];  }}
 |