boards_store.js.es6 3.1 KB
Newer Older
P
Phil Hughes 已提交
1 2 3
((w) => {
  w.BoardsStore = {
    state: {
P
Phil Hughes 已提交
4
      lists: [],
P
Phil Hughes 已提交
5
      filters: {
P
Phil Hughes 已提交
6 7
        author_id: null,
        assignee_id: null,
P
Phil Hughes 已提交
8 9
        milestone_title: null,
        label_name: []
P
Phil Hughes 已提交
10 11
      }
    },
12 13 14 15 16 17 18 19 20
    reset: function () {
      this.state.lists = [];
      this.state.filters = {
        author: {},
        assignee: {},
        milestone: {},
        label: []
      };
    },
21
    new: function (board, persist = true) {
22 23 24 25
      const doneList = this.getDoneList(),
            list = new List(board);
      this.state.lists.push(list);

26 27
      if (persist) {
        list.save();
28 29
        this.removeBlankState();
        this.addBlankState();
P
Phil Hughes 已提交
30 31
      }

32 33 34
      return list;
    },
    shouldAddBlankState: function () {
35 36 37 38 39 40 41 42 43
      // 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;
        }
      });
44 45 46
      return addBlankState;
    },
    addBlankState: function () {
47 48
      if ($.cookie('issue_board_welcome_hidden') === 'true') return;

49 50
      const doneList = this.getDoneList(),
            addBlankState = this.shouldAddBlankState();
51 52 53 54 55 56 57

      if (addBlankState) {
        this.new({
          id: 'blank',
          list_type: 'blank',
          title: 'Welcome to your Issue Board!',
          position: 0
58
        }, false);
59 60 61
      }
    },
    removeBlankState: function () {
62
      if ($.cookie('issue_board_welcome_hidden') === 'true') return;
63
      this.removeList('blank');
64 65 66 67

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

P
Phil Hughes 已提交
76 77
      this.state.lists = _.reject(this.state.lists, (list) => {
        return list.id === id;
P
Phil Hughes 已提交
78 79
      });
    },
P
Phil Hughes 已提交
80
    moveList: function (oldIndex, newIndex) {
81
      const listFrom = this.findList('position', oldIndex),
P
Phil Hughes 已提交
82
            listTo = this.findList('position', newIndex);
P
Phil Hughes 已提交
83

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

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

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

108
      if (listTo.type === 'done' && listFrom.type !== 'backlog') {
P
Phil Hughes 已提交
109 110
        issueLists.forEach((list) => {
          list.removeIssue(issue);
P
Phil Hughes 已提交
111 112 113
        });
      }
    },
114 115 116
    findList: function (key, val) {
      return _.find(this.state.lists, (list) => {
        return list[key] === val;
P
Phil Hughes 已提交
117 118 119 120
      });
    }
  };
}(window));