summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/boards/boards_util.js
blob: 6b7b0c2e28d1b2ac123aa007e595e677fbb617b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import { sortBy } from 'lodash';
import ListIssue from 'ee_else_ce/boards/models/issue';
import { ListType } from './constants';
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import boardsStore from '~/boards/stores/boards_store';

export function getMilestone() {
  return null;
}

export function formatBoardLists(lists) {
  const formattedLists = lists.nodes.map(list =>
    boardsStore.updateListPosition({ ...list, doNotFetchIssues: true }),
  );
  return formattedLists.reduce((map, list) => {
    return {
      ...map,
      [list.id]: list,
    };
  }, {});
}

export function formatIssue(issue) {
  return new ListIssue({
    ...issue,
    labels: issue.labels?.nodes || [],
    assignees: issue.assignees?.nodes || [],
  });
}

export function formatListIssues(listIssues) {
  const issues = {};
  let listIssuesCount;

  const listData = listIssues.nodes.reduce((map, list) => {
    listIssuesCount = list.issues.count;
    let sortedIssues = list.issues.edges.map(issueNode => ({
      ...issueNode.node,
    }));
    sortedIssues = sortBy(sortedIssues, 'relativePosition');

    return {
      ...map,
      [list.id]: sortedIssues.map(i => {
        const id = getIdFromGraphQLId(i.id);

        const listIssue = new ListIssue({
          ...i,
          id,
          labels: i.labels?.nodes || [],
          assignees: i.assignees?.nodes || [],
        });

        issues[id] = listIssue;

        return id;
      }),
    };
  }, {});

  return { listData, issues, listIssuesCount };
}

export function formatListsPageInfo(lists) {
  const listData = lists.nodes.reduce((map, list) => {
    return {
      ...map,
      [list.id]: list.issues.pageInfo,
    };
  }, {});
  return listData;
}

export function fullBoardId(boardId) {
  return `gid://gitlab/Board/${boardId}`;
}

export function fullLabelId(label) {
  if (label.project_id !== null) {
    return `gid://gitlab/ProjectLabel/${label.id}`;
  }
  return `gid://gitlab/GroupLabel/${label.id}`;
}

export function moveIssueListHelper(issue, fromList, toList) {
  if (toList.type === ListType.label) {
    issue.addLabel(toList.label);
  }
  if (fromList && fromList.type === ListType.label) {
    issue.removeLabel(fromList.label);
  }

  if (toList.type === ListType.assignee) {
    issue.addAssignee(toList.assignee);
  }
  if (fromList && fromList.type === ListType.assignee) {
    issue.removeAssignee(fromList.assignee);
  }

  return issue;
}

export default {
  getMilestone,
  formatIssue,
  formatListIssues,
  fullBoardId,
  fullLabelId,
};