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
      };
    },
P
Phil Hughes 已提交
14 15
    addList: function (listObj) {
      const list = new List(listObj);
16 17
      this.state.lists.push(list);

18 19
      return list;
    },
P
Phil Hughes 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32
    new: function (listObj) {
      const list = this.addList(listObj),
            backlogList = this.findList('type', 'backlog');

      list
        .save()
        .then(function () {
          // Remove any new issues from the backlog
          // as they will be visible in the new list
          _.each(list.issues, backlogList.removeIssue.bind(backlogList));
        });
      this.removeBlankState();
    },
33 34
    updateNewListDropdown: function () {
      const data = $('.js-new-board-list').data('glDropdown').renderedData;
P
Phil Hughes 已提交
35 36 37 38

      if (data) {
        $('.js-new-board-list').data('glDropdown').renderData(data);
      }
39
    },
40
    shouldAddBlankState: function () {
41
      // Decide whether to add the blank state
42
      return !!_.find(this.state.lists, function (list) {
43
        return list.type === 'backlog' || list.type === 'done';
44
      });
45 46
    },
    addBlankState: function () {
47
      if (this.welcomeIsHidden() || this.disabled) return;
48

P
Phil Hughes 已提交
49 50
      if (this.shouldAddBlankState()) {
        this.addList({
51 52 53 54
          id: 'blank',
          list_type: 'blank',
          title: 'Welcome to your Issue Board!',
          position: 0
P
Phil Hughes 已提交
55
        });
56 57 58 59
      }
    },
    removeBlankState: function () {
      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
    removeList: function (id) {
69
      const list = this.findList('id', id);
70 71 72

      if (!list) return;

P
Phil Hughes 已提交
73
      this.state.lists = _.reject(this.state.lists, (list) => {
P
Phil Hughes 已提交
74
        return list.id === id;
P
Phil Hughes 已提交
75 76
      });
    },
P
Phil Hughes 已提交
77
    moveList: function (oldIndex, newIndex) {
78
      if (oldIndex === newIndex) return;
79

80
      const listFrom = this.findList('position', oldIndex),
P
Phil Hughes 已提交
81
            listTo = this.findList('position', newIndex);
P
Phil Hughes 已提交
82

83
      listFrom.position = newIndex;
84 85 86
      if (newIndex === listTo.position) {
        listTo.position = oldIndex;
      } else if (newIndex > listTo.position) {
87
        listTo.position--;
P
Phil Hughes 已提交
88
      } else {
89
        listTo.position++;
P
Phil Hughes 已提交
90
      }
91 92

      listFrom.update();
P
Phil Hughes 已提交
93
    },
94 95 96
    moveCardToList: function (listFromId, listToId, issueId) {
      const listFrom = this.findList('id', listFromId),
            listTo = this.findList('id', listToId),
97 98 99
            issueTo = listTo.findIssue(issueId),
            issue = listFrom.findIssue(issueId),
            issueLists = issue.getLists(),
100
            listLabels = issueLists.map(function (issue) {
P
Phil Hughes 已提交
101 102
              return issue.label;
            });
103

P
Phil Hughes 已提交
104
      // Add to new lists issues if it doesn't already exist
105
      if (!issueTo) {
106
        listTo.addIssue(issue, listFrom);
P
Phil Hughes 已提交
107 108
      }

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