@@ -6,6 +6,7 @@ import { Avatar, avatarName } from 'app/types/Authentication/Register';
6
6
import { Request } from 'app/types/code/Submission' ;
7
7
import * as LeaderboardInterfaces from 'app/types/Leaderboard' ;
8
8
import classnames from 'classnames' ;
9
+ // import { type } from 'os';
9
10
import * as React from 'react' ;
10
11
/* tslint:disable-next-line:import-name */
11
12
import Chart from 'react-apexcharts' ;
@@ -22,8 +23,6 @@ export class LeaderboardElement extends React.Component<
22
23
isModelOpen : boolean ;
23
24
onHover : boolean ;
24
25
optionsPie : object ;
25
- optionsLine : object ;
26
- series : object ;
27
26
}
28
27
> {
29
28
// tslint:disable-next-line
@@ -32,41 +31,7 @@ export class LeaderboardElement extends React.Component<
32
31
this . state = {
33
32
isModelOpen : false ,
34
33
onHover : false ,
35
- optionsLine : {
36
- chart : {
37
- foreColor : 'gray' ,
38
- height : 40 ,
39
- id : 'basic-bar' ,
40
- toolbar : {
41
- show : false ,
42
- } ,
43
- zoom : {
44
- enabled : false ,
45
- } ,
46
- } ,
47
- dataLabels : {
48
- enabled : false ,
49
- markers : {
50
- colors : [ 'rgb(0, 143, 251)' , 'rgb(0, 227, 150)' , 'rgb(254, 176, 25)' ] ,
51
- } ,
52
- style : {
53
- colors : [ '#000000' , '#000000' , '#000000' ] ,
54
- } ,
55
- } ,
56
- markers : {
57
- hover : {
58
- size : '5' ,
59
- sizeOffset : '0' ,
60
- } ,
61
- size : '5' ,
62
- } ,
63
- stroke : {
64
- curve : 'smooth' ,
65
- } ,
66
- xaxis : {
67
- categories : [ 1991 , 1992 , 1993 , 1994 , 1995 , 1996 , 1997 , 1998 ] ,
68
- } ,
69
- } ,
34
+
70
35
optionsPie : {
71
36
chart : {
72
37
foreColor : 'gray' ,
@@ -98,33 +63,9 @@ export class LeaderboardElement extends React.Component<
98
63
} ,
99
64
} ,
100
65
} ,
101
- series : {
102
- data : [ 30 , 40 , 45 , 50 , 49 , 60 , 70 , 91 ] ,
103
- name : 'series-1' ,
104
- } ,
105
66
} ;
106
67
}
107
68
108
- public componentDidMount ( ) {
109
- const { player } = this . props ;
110
- const ratingArray : number [ ] = [ ] ;
111
- const labelArray : string [ ] = [ ] ;
112
- player . rating . forEach ( ( element ) => {
113
- ratingArray . push ( Math . round ( element . rating * 100 ) / 100 ) ;
114
- const dateobj = new Date ( element . validFrom ) ;
115
- labelArray . push ( dateobj . toLocaleDateString ( 'en-GB' ) . substr ( 0 , 5 ) ) ;
116
- } ) ;
117
- this . setState ( ( prevState ) => ( { series : { ...prevState . series , data : ratingArray } } ) ) ;
118
- this . setState ( ( prevState ) => ( {
119
- optionsLine : {
120
- ...prevState . optionsLine ,
121
- xaxis : {
122
- categories : labelArray ,
123
- } ,
124
- } ,
125
- } ) ) ;
126
- }
127
-
128
69
public handleOnClick = ( ) => {
129
70
this . setState ( ( prevState , props ) => ( {
130
71
isModelOpen : ! prevState . isModelOpen ,
@@ -152,6 +93,92 @@ export class LeaderboardElement extends React.Component<
152
93
updatePlayerId2,
153
94
updateRequest,
154
95
} = this . props ;
96
+ const ratingArray : number [ ] = [ ] ;
97
+ const labelArray : string [ ] = [ ] ;
98
+ let tempDate = '' ;
99
+ let prevRate = 0 ;
100
+ let maxWinningStreak = 0 ;
101
+ let curWinningStreak = 0 ;
102
+ let currentRate = 0 ;
103
+ player . rating . forEach ( ( element ) => {
104
+ currentRate = Math . round ( element . rating * 100 ) / 100 ;
105
+ ratingArray . push ( currentRate ) ;
106
+
107
+ if ( currentRate > prevRate ) {
108
+ curWinningStreak += 1 ;
109
+ } else {
110
+ if ( curWinningStreak > maxWinningStreak ) {
111
+ maxWinningStreak = curWinningStreak ;
112
+ curWinningStreak = 0 ;
113
+ }
114
+ }
115
+ prevRate = currentRate ;
116
+
117
+ let realDate = '' ;
118
+ const dateobj = new Date ( element . validFrom ) ;
119
+ realDate = dateobj . toLocaleDateString ( 'en-GB' ) . substr ( 0 , 5 ) ;
120
+ if ( realDate === tempDate ) {
121
+ labelArray . push ( ' ' ) ;
122
+ } else {
123
+ tempDate = realDate ;
124
+ labelArray . push ( realDate ) ;
125
+ }
126
+ } ) ;
127
+ const series = { data : ratingArray , name : 'Points' } ;
128
+ const optionsLine = {
129
+ chart : {
130
+ foreColor : 'gray' ,
131
+ height : 40 ,
132
+ id : 'basic-bar' ,
133
+ toolbar : {
134
+ show : false ,
135
+ } ,
136
+ zoom : {
137
+ enabled : false ,
138
+ } ,
139
+ } ,
140
+ dataLabels : {
141
+ enabled : false ,
142
+ markers : {
143
+ colors : [ 'rgb(0, 143, 251)' , 'rgb(0, 227, 150)' , 'rgb(254, 176, 25)' ] ,
144
+ } ,
145
+ style : {
146
+ colors : [ '#000000' , '#000000' , '#000000' ] ,
147
+ } ,
148
+ } ,
149
+ markers : {
150
+ hover : {
151
+ size : '0' ,
152
+ sizeOffset : '0' ,
153
+ } ,
154
+ size : '0' ,
155
+ } ,
156
+ stroke : {
157
+ curve : 'smooth' ,
158
+ } ,
159
+ xaxis : {
160
+ axisBorder : {
161
+ color : '#000' ,
162
+ show : true ,
163
+ } ,
164
+ axisTicks : {
165
+ show : false ,
166
+ } ,
167
+ categories : labelArray ,
168
+ labels : {
169
+ style : {
170
+ colors : 'rgb(255,255,255)' ,
171
+ } ,
172
+ } ,
173
+ } ,
174
+ yaxis : {
175
+ labels : {
176
+ style : {
177
+ colors : 'rgb(255,255,255)' ,
178
+ } ,
179
+ } ,
180
+ } ,
181
+ } ;
155
182
return (
156
183
< Col
157
184
md = { 26 }
@@ -193,6 +220,7 @@ export class LeaderboardElement extends React.Component<
193
220
style = { {
194
221
color : colors [ player . rank ] ,
195
222
marginLeft : '4px' ,
223
+ marginRight : '0px' ,
196
224
position : 'relative' ,
197
225
top : '20%' ,
198
226
} }
@@ -210,7 +238,7 @@ export class LeaderboardElement extends React.Component<
210
238
marginLeft : '4px' ,
211
239
} }
212
240
className = { classnames (
213
- player . rank <= 10 ? styles [ 'leader-ava' ] : styles [ 'leader-ava-l' ] ,
241
+ player . rank <= 9 ? styles [ 'leader-ava' ] : styles [ 'leader-ava-l' ] ,
214
242
) }
215
243
>
216
244
{ player . rank }
@@ -279,6 +307,10 @@ export class LeaderboardElement extends React.Component<
279
307
width = { 30 }
280
308
height = { 30 }
281
309
className = "mr-3"
310
+ style = { {
311
+ filter :
312
+ ' invert(14%) sepia(3%) saturate(68960%) hue-rotate(320deg) brightness(102%) contrast(110%)' ,
313
+ } }
282
314
onClickCapture = { async ( e ) => {
283
315
// hello
284
316
e . stopPropagation ( ) ;
@@ -303,26 +335,24 @@ export class LeaderboardElement extends React.Component<
303
335
>
304
336
{ this . state . isModelOpen ? (
305
337
< div
306
- className = " row justify-content-center"
338
+ className = { classnames ( styles . chart_holder , ' row' , ' justify-content-center' ) }
307
339
onClick = { ( event ) => {
308
340
event . stopPropagation ( ) ;
309
341
} }
310
342
>
311
- < div className = { classnames ( styles . chart_div , 'col col-lg-5' ) } >
343
+ < div className = { classnames ( styles . chart_div , styles . pie_chart ) } >
312
344
< Chart
313
345
options = { this . state . optionsPie }
314
346
series = { [ player . ties , player . wins , player . losses ] }
315
347
type = "donut"
316
- width = "380 "
348
+ width = "400 "
317
349
/>
350
+ < div className = { classnames ( styles . winning_streak ) } >
351
+ Highest winning streak: { maxWinningStreak }
352
+ </ div >
318
353
</ div >
319
- < div className = { classnames ( styles . chart_div , 'col-lg-5' ) } >
320
- < Chart
321
- options = { this . state . optionsLine }
322
- series = { [ this . state . series ] }
323
- type = "line"
324
- width = "500"
325
- />
354
+ < div className = { classnames ( styles . chart_div ) } >
355
+ < Chart options = { optionsLine } series = { [ series ] } type = "line" width = "760" />
326
356
</ div >
327
357
</ div >
328
358
) : null }
0 commit comments