boards_store.js.es6 3.7 KB
Newer Older
P
Phil Hughes 已提交
1 2
((w) => {
  w.BoardsStore = {
3
    disabled: false,
4 5 6 7
    state: {},
    create: function () {
      this.state.lists = [];
      this.state.filters = {
P
Phil Hughes 已提交
8 9 10 11
        author_id: gl.utils.getParameterValues('author_id')[0],
        assignee_id: gl.utils.getParameterValues('assignee_id')[0],
        milestone_title: gl.utils.getParameterValues('milestone_title')[0],
        label_name: gl.utils.getParameterValues('label_name[]')
12 13
      };
    },
14
    new: function (board, persist = true) {
15 16 17 18
      const doneList = this.getDoneList(),
            list = new List(board);
      this.state.lists.push(list);

19 20
      if (persist) {
        list.save();
21
        this.removeBlankState();
P
Phil Hughes 已提交
22 23
      }

24 25
      return list;
    },
26 27 28 29
    updateNewListDropdown: function () {
      const data = $('.js-new-board-list').data('glDropdown').renderedData;
      $('.js-new-board-list').data('glDropdown').renderData(data);
    },
30
    shouldAddBlankState: function () {
31 32 33 34 35 36 37 38 39
      // Decide whether to add the blank state
      let addBlankState = true;

      this.state.lists.forEach(function (list) {
        if (list.type !== 'backlog' && list.type !== 'done') {
          addBlankState = false;
          return;
        }
      });
40 41 42
      return addBlankState;
    },
    addBlankState: function () {
43
      const addBlankState = this.shouldAddBlankState();
44

45
      if (this.welcomeIsHidden() || this.disabled) return;
46 47 48 49 50 51 52

      if (addBlankState) {
        this.new({
          id: 'blank',
          list_type: 'blank',
          title: 'Welcome to your Issue Board!',
          position: 0
53
        }, false);
54 55 56
      }
    },
    removeBlankState: function () {
57 58
      if (this.welcomeIsHidden()) return;

59
      this.removeList('blank');
60 61 62 63

      $.cookie('issue_board_welcome_hidden', 'true', {
        expires: 365 * 10
      });
P
Phil Hughes 已提交
64
    },
65 66 67
    welcomeIsHidden: function () {
      return $.cookie('issue_board_welcome_hidden') === 'true';
    },
P
Phil Hughes 已提交
68
    getDoneList: function () {
69
      return this.findList('type', 'done');
P
Phil Hughes 已提交
70
    },
P
Phil Hughes 已提交
71
    removeList: function (id) {
72
      const list = this.findList('id', id);
73 74 75

      if (!list) return;

76
      list.destroy();
77

P
Phil Hughes 已提交
78 79
      this.state.lists = _.reject(this.state.lists, (list) => {
        return list.id === id;
P
Phil Hughes 已提交
80
      });
81 82

      this.updateNewListDropdown();
P
Phil Hughes 已提交
83
    },
P
Phil Hughes 已提交
84
    moveList: function (oldIndex, newIndex) {
85
      const listFrom = this.findList('position', oldIndex),
P
Phil Hughes 已提交
86
            listTo = this.findList('position', newIndex);
P
Phil Hughes 已提交
87

88
      listFrom.position = newIndex;
89 90 91
      if (newIndex === listTo.position) {
        listTo.position = oldIndex;
      } else if (newIndex > listTo.position) {
92
        listTo.position--;
P
Phil Hughes 已提交
93
      } else {
94
        listTo.position++;
P
Phil Hughes 已提交
95
      }
96 97

      listFrom.update();
P
Phil Hughes 已提交
98
    },
99 100 101 102
    moveCardToList: function (listFromId, listToId, issueId) {
      const listFrom = this.findList('id', listFromId),
            listTo = this.findList('id', listToId),
            issueTo = listTo.findIssue(issueId);
P
Phil Hughes 已提交
103
      let issue = listFrom.findIssue(issueId);
P
Phil Hughes 已提交
104
      const issueLists = issue.getLists(),
105
            listLabels = issueLists.map(function (issue) {
P
Phil Hughes 已提交
106 107
              return issue.label;
            });
108

P
Phil Hughes 已提交
109
      // Add to new lists issues if it doesn't already exist
110
      if (!issueTo) {
111
        listTo.addIssue(issue, listFrom);
P
Phil Hughes 已提交
112 113
      }

114
      if (listTo.type === 'done' && listFrom.type !== 'backlog') {
P
Phil Hughes 已提交
115 116
        issueLists.forEach((list) => {
          list.removeIssue(issue);
P
Phil Hughes 已提交
117
        });
118
        issue.removeLabels(listLabels);
119 120
      } else {
        listFrom.removeIssue(issue);
P
Phil Hughes 已提交
121 122
      }
    },
123 124 125
    findList: function (key, val) {
      return _.find(this.state.lists, (list) => {
        return list[key] === val;
P
Phil Hughes 已提交
126
      });
P
Phil Hughes 已提交
127 128 129
    },
    updateFiltersUrl: function () {
      history.pushState(null, null, `?${$.param(this.state.filters)}`);
P
Phil Hughes 已提交
130 131 132
    }
  };
}(window));