boards_store.js.es6 3.4 KB
Newer Older
P
Phil Hughes 已提交
1 2 3
((w) => {
  w.BoardsStore = {
    state: {
P
Phil Hughes 已提交
4
      lists: [],
P
Phil Hughes 已提交
5 6 7 8 9 10
      filters: {
        author: {},
        assignee: {},
        milestone: {},
      }
    },
P
Phil Hughes 已提交
11
    new: function (board) {
12 13 14 15 16 17 18 19
      const doneList = this.getDoneList(),
            list = new List(board);
      this.state.lists.push(list);

      if (list.type !== 'blank') {
        service.createList(list.label.id)
          .then(function (resp) {
            const data = resp.json();
P
Phil Hughes 已提交
20

21 22 23 24 25 26 27
            list.id = data.id;
            list.type = data.list_type;
            list.position = data.position;
          });

        this.removeBlankState();
        this.addBlankState();
P
Phil Hughes 已提交
28
      }
29 30 31
    },
    addBlankState: function () {
      const doneList = this.getDoneList();
P
Phil Hughes 已提交
32

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
      // 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;
        }
      });

      if (addBlankState) {
        this.new({
          id: 'blank',
          list_type: 'blank',
          title: 'Welcome to your Issue Board!',
          position: 0
        });
      }
    },
    removeBlankState: function () {
      this.removeList('blank');
P
Phil Hughes 已提交
54
    },
P
Phil Hughes 已提交
55 56
    getDoneList: function () {
      return _.find(this.state.lists, (list) => {
57
        return list.type === 'done';
P
Phil Hughes 已提交
58 59
      });
    },
P
Phil Hughes 已提交
60
    removeList: function (id) {
61 62 63 64 65 66 67 68
      const list = _.find(this.state.lists, (list) => {
        return list.id === id;
      });

      if (id !== 'blank') {
        list.destroy();
      }

P
Phil Hughes 已提交
69 70
      this.state.lists = _.reject(this.state.lists, (list) => {
        return list.id === id;
P
Phil Hughes 已提交
71
      });
P
Phil Hughes 已提交
72

P
Phil Hughes 已提交
73
      if (id !== 'blank') {
74
        this.addBlankState();
P
Phil Hughes 已提交
75
      }
P
Phil Hughes 已提交
76
    },
P
Phil Hughes 已提交
77 78
    moveList: function (oldIndex, newIndex) {
      const listFrom = _.find(this.state.lists, (list) => {
79
        return list.position === oldIndex;
P
Phil Hughes 已提交
80 81
      });

P
Phil Hughes 已提交
82
      const listTo = _.find(this.state.lists, (list) => {
83
        return list.position === newIndex;
P
Phil Hughes 已提交
84 85
      });

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

      listFrom.update();
P
Phil Hughes 已提交
94
    },
P
Phil Hughes 已提交
95 96 97
    moveCardToList: function (listFromId, listToId, issueId, toIndex) {
      const listFrom = _.find(this.state.lists, (list) => {
        return list.id === listFromId;
P
Phil Hughes 已提交
98
      });
P
Phil Hughes 已提交
99 100
      const listTo = _.find(this.state.lists, (list) => {
        return list.id === listToId;
P
Phil Hughes 已提交
101
      });
P
Phil Hughes 已提交
102 103 104 105
      const issueTo = listTo.findIssue(issueId);
      let issue = listFrom.findIssue(issueId);
      const issueLists = this.getListsForIssue(issue);
      listFrom.removeIssue(issue);
P
Phil Hughes 已提交
106

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

P
Phil Hughes 已提交
115 116 117 118
      if (listTo.id === 'done' && listFrom.id !== 'backlog') {
        issueLists.forEach((list) => {
          issue.removeLabel(list.label);
          list.removeIssue(issue);
P
Phil Hughes 已提交
119 120
        });
      }
P
Phil Hughes 已提交
121 122

      service.moveIssue(issue.id, listFrom.id, listTo.id);
P
Phil Hughes 已提交
123
    },
P
Phil Hughes 已提交
124 125 126
    getListsForIssue: function (issue) {
      return _.filter(this.state.lists, (list) => {
        return list.findIssue(issue.id);
P
Phil Hughes 已提交
127 128
      });
    },
129
    clearDone: function () {
P
Phil Hughes 已提交
130 131 132 133
      Vue.set(BoardsStore.state, 'done', {});
    }
  };
}(window));