| 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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 |
12x
5x
5x
12x
12x
12x
1x
7x
7x
12x
1x
12x
3x
3x
12x
1x
1x
1x
8x
8x
8x
1x
1x
| import { createSelector } from 'reselect';
import { CommitsContainerSorts } from 'app/actions/ActionTypes';
import { hasSearch, commitsMatchSearch } from './search';
import {
hasDates,
commitsMatchDates,
getDefaultedStartDate,
getDefaultedEndDate,
} from './dates';
import {
getCommits,
getCommitsContainerSort,
getSearch,
getStartDate,
getEndDate,
} from './stateVars';
// returns commits for the current path filtered by selected authors
// and time range
export const getFilteredCommits = createSelector(
getCommits,
getSearch,
getStartDate,
getEndDate,
getDefaultedStartDate,
getDefaultedEndDate,
(
commits,
search,
startDate,
endDate,
defaultedStartDate,
defaultedEndDate
) => {
const filteredCommits =
!hasSearch(search) && !hasDates(startDate, endDate)
? commits.slice(0)
: commits.filter(commit => {
return (
commitsMatchSearch(commit, search) &&
commitsMatchDates(commit, defaultedStartDate, defaultedEndDate)
);
});
return filteredCommits;
}
);
export const getFirstFilteredCommit = createSelector(
getFilteredCommits,
commits => {
return commits[0];
}
);
export const getLastFilteredCommit = createSelector(
getFilteredCommits,
commits => {
return commits[commits.length - 1];
}
);
export const getFilteredSortedCommits = createSelector(
getFilteredCommits,
getCommitsContainerSort,
(commits, commitsContainerSort) => {
return commits.sort((a, b) => {
switch (commitsContainerSort) {
case CommitsContainerSorts.LINES:
return (
b.linesAdded + b.linesDeleted - (a.linesAdded + a.linesDeleted)
);
case CommitsContainerSorts.TIME:
return b.authorDate - a.authorDate;
}
return 0;
});
}
);
export const getAreCommitsFiltered = createSelector(
getStartDate,
getEndDate,
getSearch,
(startDate, endDate, search) => {
return startDate || endDate || (search != null && search.trim().length > 0);
}
);
// commits in the timeplot respect the search filter but not the date
// filters
export const getCommitsForTimeplot = createSelector(
getCommits,
getSearch,
(commits, search) => {
const filteredCommits = !hasSearch(search)
? commits.slice(0)
: commits.filter(commit => {
return commitsMatchSearch(commit, search);
});
return filteredCommits;
}
);
export const getAuthorDateRange = createSelector(
getFilteredCommits,
commits => {
let minAuthorDate = Date.now();
let maxAuthorDate = 0;
for (const commit of commits) {
Eif (commit.authorDate < minAuthorDate) {
minAuthorDate = commit.authorDate;
}
if (commit.authorDate > maxAuthorDate) {
maxAuthorDate = commit.authorDate;
}
}
return {
minAuthorDate,
maxAuthorDate,
};
}
);
|