@@ -42,6 +42,47 @@ export const MappingLevelIcon = ({ mappingLevel }) => {
42
42
return null ;
43
43
} ;
44
44
45
+ const sortByLits = [
46
+ {
47
+ sortId : 'mapped' ,
48
+ tooltipMessage : 'Sort by total number of mapped task' ,
49
+ icon : < MappedIcon className = "h1 w1 blue-grey" /> ,
50
+ } ,
51
+ {
52
+ sortId : 'validated' ,
53
+ tooltipMessage : 'Sort by total number of validated task' ,
54
+ icon : < ValidatedIcon className = "h1 w1 blue-grey" /> ,
55
+ } ,
56
+ {
57
+ sortId : 'total' ,
58
+ tooltipMessage : 'Sort by total number of mapped and validated (both combined) tasks' ,
59
+ icon : < AsteriskIcon className = "h1 w1 blue-grey" /> ,
60
+ } ,
61
+ ] ;
62
+
63
+ const SortingHeader = ( { sortBy, setSortBy } : Object ) => {
64
+ return (
65
+ < div className = "flex justify-end items-center" >
66
+ { sortByLits ?. map ( ( sortByItem ) => (
67
+ < div
68
+ key = { sortByItem . sortId }
69
+ className = "w-20 fl tr dib truncate"
70
+ title = { sortByItem . tooltipMessage }
71
+ >
72
+ < button
73
+ className = { `bn dib pt2 mr4 pointer ph2 pv2 hover-bg-black-10 br3 ${
74
+ sortBy === sortByItem ?. sortId ? 'bg-black-10' : 'bg-transparent'
75
+ } `}
76
+ onClick = { ( ) => setSortBy ( sortByItem ?. sortId ) }
77
+ >
78
+ { sortByItem ?. icon }
79
+ </ button >
80
+ </ div >
81
+ ) ) }
82
+ </ div >
83
+ ) ;
84
+ } ;
85
+
45
86
function Contributor ( { user, activeUser, activeStatus, displayTasks } : Object ) {
46
87
const intl = useIntl ( ) ;
47
88
const checkActiveUserAndStatus = ( status , username ) =>
@@ -132,12 +173,14 @@ const Contributions = ({ project, tasks, contribsData, activeUser, activeStatus,
132
173
} ;
133
174
const [ level , setLevel ] = useState ( mappingLevels [ 0 ] ) ;
134
175
const [ userFilter , setUserFilter ] = useState ( defaultUserFilter ) ;
176
+ const [ sortBy , setSortBy ] = useState ( 'total' ) ;
135
177
const { percentMapped, percentValidated, percentBadImagery } = useComputeCompleteness ( tasks ) ;
136
178
137
179
const contributors = useFilterContributors (
138
180
contribsData || [ ] ,
139
181
level && level . value ,
140
182
userFilter && userFilter . value ,
183
+ sortBy ,
141
184
) ;
142
185
143
186
const displayTasks = ( taskIds , status , user ) => {
@@ -194,6 +237,7 @@ const Contributions = ({ project, tasks, contribsData, activeUser, activeStatus,
194
237
delay = { 50 }
195
238
ready = { contributors !== undefined }
196
239
>
240
+ < SortingHeader sortBy = { sortBy } setSortBy = { setSortBy } />
197
241
{ contributors . map ( ( user , k ) => (
198
242
< Contributor
199
243
user = { user }
0 commit comments