-
-
Notifications
You must be signed in to change notification settings - Fork 78
Expand file tree
/
Copy pathissueChartActions.js
More file actions
99 lines (92 loc) · 3.36 KB
/
Copy pathissueChartActions.js
File metadata and controls
99 lines (92 loc) · 3.36 KB
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
import axios from 'axios';
import {
FETCH_ISSUES_BARCHART_REQUEST,
FETCH_ISSUES_BARCHART_SUCCESS,
FETCH_ISSUES_BARCHART_FAILURE,
FETCH_ISSUE_TYPES_YEARS_REQUEST,
FETCH_ISSUE_TYPES_YEARS_SUCCESS,
FETCH_ISSUE_TYPES_YEARS_FAILURE,
FETCH_LONGEST_OPEN_ISSUES_REQUEST,
FETCH_LONGEST_OPEN_ISSUES_SUCCESS,
FETCH_LONGEST_OPEN_ISSUES_FAILURE,
FETCH_MOST_EXPENSIVE_ISSUES_REQUEST,
FETCH_MOST_EXPENSIVE_ISSUES_SUCCESS,
FETCH_MOST_EXPENSIVE_ISSUES_FAILURE,
SET_DATE_FILTER,
SET_PROJECT_FILTER,
} from '../../constants/bmdashboard/issueConstants';
import { ENDPOINTS } from '../../utils/URL';
export const fetchIssues = () => async dispatch => {
try {
dispatch({ type: FETCH_ISSUES_BARCHART_REQUEST });
const { data } = await axios.get(ENDPOINTS.BM_ISSUE_CHART);
dispatch({ type: FETCH_ISSUES_BARCHART_SUCCESS, payload: data });
} catch (error) {
dispatch({
type: FETCH_ISSUES_BARCHART_FAILURE,
payload: error.message || 'Failed to fetch issues',
});
}
};
export const fetchIssueTypesAndYears = () => async dispatch => {
try {
dispatch({ type: FETCH_ISSUE_TYPES_YEARS_REQUEST });
const { data } = await axios.get(ENDPOINTS.BM_ISSUE_CHART);
const issueTypes = [...new Set(data.map(item => item._id.issueType))];
const years = [...new Set(data.map(item => item._id.issueYear))];
dispatch({ type: FETCH_ISSUE_TYPES_YEARS_SUCCESS, payload: { issueTypes, years } });
} catch (error) {
dispatch({
type: FETCH_ISSUE_TYPES_YEARS_FAILURE,
payload: error.message || 'Failed to fetch issue types and years',
});
}
};
const formatFilters = ({ projectIds, startDate, endDate } = {}) => {
const formatted = {};
if (
(typeof projectIds === 'string' && projectIds.trim() !== '') ||
(Array.isArray(projectIds) && projectIds.length > 0)
) {
formatted.projectIds = Array.isArray(projectIds) ? projectIds.join(',') : projectIds.trim();
}
if (startDate !== undefined && startDate !== '') {
formatted.startDate = startDate;
}
if (endDate !== undefined && endDate !== '') {
formatted.endDate = endDate;
}
return formatted;
};
export const fetchLongestOpenIssues = filters => async dispatch => {
try {
dispatch({ type: FETCH_LONGEST_OPEN_ISSUES_REQUEST });
const formattedFilters = formatFilters(filters);
const response = await axios.get(ENDPOINTS.BM_LONGEST_OPEN_ISSUES, {
params: formattedFilters,
});
dispatch({ type: FETCH_LONGEST_OPEN_ISSUES_SUCCESS, payload: response.data });
} catch (error) {
dispatch({
type: FETCH_LONGEST_OPEN_ISSUES_FAILURE,
payload: error.message || 'Failed to fetch longest open issues',
});
}
};
export const fetchMostExpensiveIssues = filters => async dispatch => {
try {
dispatch({ type: FETCH_MOST_EXPENSIVE_ISSUES_REQUEST });
const formattedFilters = formatFilters(filters);
const response = await axios.get(ENDPOINTS.BM_MOST_EXPENSIVE_ISSUES, {
params: formattedFilters,
});
dispatch({ type: FETCH_MOST_EXPENSIVE_ISSUES_SUCCESS, payload: response.data });
} catch (error) {
dispatch({
type: FETCH_MOST_EXPENSIVE_ISSUES_FAILURE,
payload: error.message || 'Failed to fetch most expensive issues',
});
}
};
export const setDateFilter = dates => ({ type: SET_DATE_FILTER, payload: dates });
export const setProjectFilter = projects => ({ type: SET_PROJECT_FILTER, payload: projects });