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

18 19
      return list;
    },
P
Phil Hughes 已提交
20
    new (listObj) {
P
Phil Hughes 已提交
21
      const list = this.addList(listObj),
22
            backlogList = this.findList('type', 'backlog', 'backlog');
P
Phil Hughes 已提交
23 24 25

      list
        .save()
P
Phil Hughes 已提交
26
        .then(() => {
P
Phil Hughes 已提交
27 28
          // Remove any new issues from the backlog
          // as they will be visible in the new list
P
Phil Hughes 已提交
29 30 31 32
          for (let i = 0, issuesLength = list.issues.length; i < issuesLength; i++) {
            const issue = list.issues[i];
            backlogList.removeIssue(issue);
          }
P
Phil Hughes 已提交
33 34 35
        });
      this.removeBlankState();
    },
P
Phil Hughes 已提交
36
    updateNewListDropdown () {
37
      const glDropdown = $('.js-new-board-list').data('glDropdown');
P
Phil Hughes 已提交
38

39 40 41 42 43 44
      if (glDropdown) {
        const renderedData = glDropdown.renderedData;

        if (renderedData) {
          glDropdown.renderData(renderedData);
        }
P
Phil Hughes 已提交
45
      }
46
    },
P
Phil Hughes 已提交
47
    shouldAddBlankState () {
48
      // Decide whether to add the blank state
P
Phil Hughes 已提交
49
      return !(this.state.lists.filter((list) => {
50
        return list.type !== 'backlog' && list.type !== 'done';
P
Phil Hughes 已提交
51
      })[0]);
52
    },
P
Phil Hughes 已提交
53
    addBlankState () {
54
      if (this.welcomeIsHidden() || this.disabled) return;
55

P
Phil Hughes 已提交
56 57
      if (this.shouldAddBlankState()) {
        this.addList({
58 59 60 61
          id: 'blank',
          list_type: 'blank',
          title: 'Welcome to your Issue Board!',
          position: 0
P
Phil Hughes 已提交
62
        });
63 64
      }
    },
P
Phil Hughes 已提交
65
    removeBlankState () {
66
      this.removeList('blank');
67 68 69 70

      $.cookie('issue_board_welcome_hidden', 'true', {
        expires: 365 * 10
      });
P
Phil Hughes 已提交
71
    },
P
Phil Hughes 已提交
72
    welcomeIsHidden () {
73 74
      return $.cookie('issue_board_welcome_hidden') === 'true';
    },
P
Phil Hughes 已提交
75
    removeList (id) {
76
      const list = this.findList('id', id);
77 78 79

      if (!list) return;

P
Phil Hughes 已提交
80 81
      this.state.lists = this.state.lists.filter((list) => {
        return list.id !== id;
P
Phil Hughes 已提交
82 83
      });
    },
P
Phil Hughes 已提交
84
    moveList (oldIndex, newIndex) {
85
      if (oldIndex === newIndex) return;
86

87
      const listFrom = this.findList('position', oldIndex),
P
Phil Hughes 已提交
88
            listTo = this.findList('position', newIndex);
P
Phil Hughes 已提交
89

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

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

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

116
      if (listTo.type === 'done' && listFrom.type !== 'backlog') {
P
Phil Hughes 已提交
117 118
        for (let i = 0, listsLength = issueLists.length; i < listsLength; i++) {
          const list = issueLists[i];
119
          list.removeIssue(issue);
P
Phil Hughes 已提交
120
        }
121
        issue.removeLabels(listLabels);
122 123
      } else {
        listFrom.removeIssue(issue);
P
Phil Hughes 已提交
124 125
      }
    },
126
    findList (key, val, type = 'label') {
P
Phil Hughes 已提交
127
      return this.state.lists.filter((list) => {
128
        return list[key] === val && list['type'] === type;
P
Phil Hughes 已提交
129
      })[0];
P
Phil Hughes 已提交
130
    },
P
Phil Hughes 已提交
131
    updateFiltersUrl () {
P
Phil Hughes 已提交
132
      history.pushState(null, null, `?${$.param(this.state.filters)}`);
P
Phil Hughes 已提交
133 134 135
    }
  };
}(window));