@@ -7,57 +7,109 @@ import ToggleButton from '@mui/material/ToggleButton';
7
7
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup' ;
8
8
import { useState } from "react" ;
9
9
10
+ function MonthlyDates ( length ) {
11
+ const today = new Date ( ) ;
12
+ const dates = Array . from ( { length } , ( _ , i ) => {
13
+ const date = new Date ( today ) ;
14
+ date . setMonth ( date . getMonth ( ) - i ) ;
15
+ return date ;
16
+ } ) ;
17
+ return dates ;
18
+ }
19
+
20
+ function DailyDates ( length ) {
21
+ const today = new Date ( ) ;
22
+ const dates = Array . from ( { length } , ( _ , i ) => {
23
+ const date = new Date ( today ) ;
24
+ date . setDate ( date . getDate ( ) - i ) ;
25
+ return date ;
26
+ } ) ;
27
+ return dates ;
28
+ }
29
+
30
+ function QuarterlyDates ( length ) {
31
+ const today = new Date ( ) ;
32
+ const dates = Array . from ( { length } , ( _ , i ) => {
33
+ const date = new Date ( today ) ;
34
+ date . setMonth ( date . getMonth ( ) - i * 3 ) ;
35
+ return date ;
36
+ } ) ;
37
+ return dates ;
38
+ }
39
+
10
40
export function StatsPage ( ) {
11
- const [ platform , setPlatform ] = useState ( 'web ' ) ;
41
+ const [ interval , setInterval ] = useState ( 'month ' ) ;
12
42
13
43
const handleChange = (
14
44
event ,
15
45
newAlignment ,
16
46
) => {
17
- setPlatform ( newAlignment ) ;
47
+ setInterval ( newAlignment ) ;
18
48
} ;
19
49
50
+
51
+ let dateAxis = { data : DailyDates ( 31 ) , scaleType : 'time' , label : 'Date' } ;
52
+ if ( interval === 'year' ) {
53
+ dateAxis = { data : MonthlyDates ( 12 ) , scaleType : 'time' , label : 'Date' } ;
54
+ } else if ( interval === 'all time' ) {
55
+ dateAxis = {
56
+ data : QuarterlyDates ( 12 ) , scaleType : 'time' , label : 'Date' , valueFormatter : ( date , context ) =>
57
+ `${ date . getMonth ( ) } ${ date . getYear ( ) } ` , // TODO: Use a better formatter, set different on tick/label
58
+ } ;
59
+ }
60
+
20
61
return (
21
62
< CenteredPage >
22
63
< Grid size = { 12 } >
23
64
< Typography variant = "h5" > Stats</ Typography >
24
- < Typography > Stats about the application</ Typography >
65
+ < br />
66
+ < Typography > Metics for your threat modeling process.</ Typography >
67
+ < br />
68
+
25
69
< ToggleButtonGroup
26
- color = "primary"
27
- value = { platform }
28
- exclusive
29
- onChange = { handleChange }
30
- aria-label = "Platform"
70
+ color = "primary"
71
+ value = { interval }
72
+ exclusive
73
+ onChange = { handleChange }
74
+ aria-label = "Time interval"
75
+ size = "small"
31
76
>
32
- < ToggleButton value = "web " > month</ ToggleButton >
33
- < ToggleButton value = "android " > year</ ToggleButton >
34
- < ToggleButton value = "ios " > all time</ ToggleButton >
77
+ < ToggleButton value = "month " > month</ ToggleButton >
78
+ < ToggleButton value = "year " > year</ ToggleButton >
79
+ < ToggleButton value = "all time " > all time</ ToggleButton >
35
80
</ ToggleButtonGroup >
36
81
</ Grid >
37
82
< Grid size = { 6 } >
38
83
< Paper sx = { { padding : "20px" } } >
39
84
< Typography variant = "h6" > Systems with an approved threat model (%)</ Typography >
40
85
< LineChart
41
- xAxis = { [ { data : [ 1 , 2 , 3 , 5 , 8 , 10 ] } ] }
86
+ xAxis = { [ dateAxis ] }
87
+ yAxis = { [ { max : 100 , label : 'Percentage' } ] }
42
88
series = { [
43
89
{
44
- data : [ 2 , 5.5 , 2 , 8.5 , 1.5 , 5 ] ,
90
+ data : [ 2 , null , null , 5.5 , 2 , 8.5 , 1.5 , 5 ] ,
45
91
} ,
92
+
46
93
] }
47
94
width = { 700 }
48
95
height = { 300 }
49
96
grid = { { vertical : true , horizontal : true } }
97
+ loading = { false }
98
+ title = "Systems with an approved threat model (%)"
50
99
/>
51
100
</ Paper >
52
101
</ Grid >
53
102
< Grid size = { 6 } >
54
103
< Paper sx = { { padding : "20px" } } >
55
104
< Typography variant = "h6" > Systems with an approved threat model (Total)</ Typography >
56
105
< LineChart
57
- xAxis = { [ { data : [ 1 , 2 , 3 , 5 , 8 , 10 ] } ] }
106
+ xAxis = { [ dateAxis ] }
58
107
series = { [
59
108
{
60
- data : [ 2 , 5.5 , 2 , 8.5 , 1.5 , 5 ] ,
109
+ data : [ 2 , 5.5 , 2 , 8 , 1.5 , 5 ] ,
110
+ } ,
111
+ {
112
+ data : [ 8 , 9 , 8 , 8 , 10 , 10 ] , label : 'Total Systems' ,
61
113
} ,
62
114
] }
63
115
width = { 700 }
@@ -74,7 +126,8 @@ export function StatsPage() {
74
126
series = { [ { data : [ 4 , 3 , 5 ] } , { data : [ 1 , 6 , 3 ] } , { data : [ 2 , 5 , 6 ] } ] }
75
127
width = { 500 }
76
128
height = { 300 }
77
- />
129
+ grid = { { horizontal : true } }
130
+ />
78
131
</ Paper >
79
132
</ Grid >
80
133
< Grid size = { 6 } >
0 commit comments