@@ -24,9 +24,19 @@ import {
24
24
SELECT_ALL_USERS_ID ,
25
25
USER_MODES ,
26
26
} from '../../config/constants' ;
27
- import { DASHBOARD_MAIN_ID } from '../../config/selectors' ;
28
-
29
- const styles = theme => ( {
27
+ import {
28
+ DASHBOARD_BAR_CHART_ID ,
29
+ DASHBOARD_ACTION_EDITOR_ID ,
30
+ DASHBOARD_MAIN_ID ,
31
+ DASHBOARD_NO_ACTION_MESSAGE_ID ,
32
+ DASHBOARD_LINE_CHART_ID ,
33
+ DASHBOARD_PIE_CHART_ID ,
34
+ DASHBOARD_TOTAL_COUNT_ID ,
35
+ DASHBOARD_USER_FILTER_ID ,
36
+ DASHBOARD_SPACE_FILTER_ID ,
37
+ } from '../../config/selectors' ;
38
+
39
+ const styles = ( theme ) => ( {
30
40
dashboard : { padding : theme . spacing ( 3 ) } ,
31
41
dashboardGridItem : { height : '350px' } ,
32
42
drawerHeader : {
@@ -91,24 +101,25 @@ export class Dashboard extends Component {
91
101
dispatchGetDatabase ( ) ;
92
102
}
93
103
94
- handleSpaceChange = event => {
104
+ handleSpaceChange = ( event ) => {
95
105
this . setState ( { spaceId : event . target . value } ) ;
96
106
} ;
97
107
98
- handleUserChange = event => {
108
+ handleUserChange = ( event ) => {
99
109
this . setState ( { filteredUserId : event . target . value } ) ;
100
110
} ;
101
111
102
112
renderSpaceFilter = ( ) => {
103
113
const { database, t } = this . props ;
104
114
const { spaceId } = this . state ;
115
+ const { spaces = [ ] } = database ;
105
116
106
117
if ( ! database ) {
107
118
return < Loader /> ;
108
119
}
109
120
110
121
return (
111
- < FormControl variant = "outlined" fullWidth >
122
+ < FormControl id = { DASHBOARD_SPACE_FILTER_ID } variant = "outlined" fullWidth >
112
123
< InputLabel > { t ( 'Filter by Space' ) } </ InputLabel >
113
124
< Select
114
125
label = "Filter by Space"
@@ -118,7 +129,7 @@ export class Dashboard extends Component {
118
129
< MenuItem value = { SELECT_ALL_SPACES_ID } >
119
130
< em > { t ( 'All Spaces' ) } </ em >
120
131
</ MenuItem >
121
- { database . spaces . map ( space => (
132
+ { spaces . map ( ( space ) => (
122
133
< MenuItem value = { space . id } > { space . name } </ MenuItem >
123
134
) ) }
124
135
</ Select >
@@ -139,7 +150,7 @@ export class Dashboard extends Component {
139
150
}
140
151
141
152
return (
142
- < FormControl variant = "outlined" fullWidth >
153
+ < FormControl id = { DASHBOARD_USER_FILTER_ID } variant = "outlined" fullWidth >
143
154
< InputLabel > { t ( 'Filter by User' ) } </ InputLabel >
144
155
< Select
145
156
label = "Filter by User"
@@ -149,15 +160,15 @@ export class Dashboard extends Component {
149
160
< MenuItem value = { SELECT_ALL_USERS_ID } >
150
161
< em > { t ( 'All Users' ) } </ em >
151
162
</ MenuItem >
152
- { database . users . map ( user => (
163
+ { database . users . map ( ( user ) => (
153
164
< MenuItem value = { user . id } > { user . username } </ MenuItem >
154
165
) ) }
155
166
</ Select >
156
167
</ FormControl >
157
168
) ;
158
169
} ;
159
170
160
- renderActionWidgets = filteredActions => {
171
+ renderActionWidgets = ( filteredActions ) => {
161
172
const { database, classes } = this . props ;
162
173
163
174
return (
@@ -169,16 +180,29 @@ export class Dashboard extends Component {
169
180
alignItems = "center"
170
181
>
171
182
< Grid item xs = { 12 } sm = { 6 } className = { classes . dashboardGridItem } >
172
- < ActionBarChart spaces = { database . spaces } actions = { filteredActions } />
183
+ < ActionBarChart
184
+ id = { DASHBOARD_BAR_CHART_ID }
185
+ spaces = { database . spaces }
186
+ actions = { filteredActions }
187
+ />
173
188
</ Grid >
174
189
< Grid item xs = { 12 } sm = { 6 } className = { classes . dashboardGridItem } >
175
- < ActionLineChart actions = { filteredActions } />
190
+ < ActionLineChart
191
+ id = { DASHBOARD_LINE_CHART_ID }
192
+ actions = { filteredActions }
193
+ />
176
194
</ Grid >
177
195
< Grid item xs = { 12 } sm = { 6 } className = { classes . dashboardGridItem } >
178
- < ActionPieChart actions = { filteredActions } />
196
+ < ActionPieChart
197
+ id = { DASHBOARD_PIE_CHART_ID }
198
+ actions = { filteredActions }
199
+ />
179
200
</ Grid >
180
201
< Grid item xs = { 12 } sm = { 6 } className = { classes . dashboardGridItem } >
181
- < ActionTotalCount actions = { filteredActions } />
202
+ < ActionTotalCount
203
+ id = { DASHBOARD_TOTAL_COUNT_ID }
204
+ actions = { filteredActions }
205
+ />
182
206
</ Grid >
183
207
</ Grid >
184
208
) ;
@@ -188,15 +212,14 @@ export class Dashboard extends Component {
188
212
const { t, database, userMode, userId } = this . props ;
189
213
const { spaceId, filteredUserId } = this . state ;
190
214
191
- let filteredActions = database . actions ;
192
- const { users } = database ;
215
+ let filteredActions = database . actions || [ ] ;
216
+ const { users = [ ] } = database ;
193
217
const isStudent = userMode === USER_MODES . STUDENT ;
194
218
195
219
filteredActions = filteredActions . filter ( ( { user } ) => {
196
220
const isOwnAction = user === userId ;
197
221
const actionUser = users . find ( ( { id } ) => id === user ) ;
198
- const isAccessible =
199
- actionUser && actionUser . settings . actionAccessibility ;
222
+ const isAccessible = actionUser ?. settings ?. actionAccessibility ;
200
223
const filteredUserSelected = filteredUserId !== SELECT_ALL_USERS_ID ;
201
224
202
225
// filter action per user if userMode is student
@@ -222,10 +245,15 @@ export class Dashboard extends Component {
222
245
return filteredActions . length ? (
223
246
< >
224
247
{ this . renderActionWidgets ( filteredActions ) }
225
- < ActionEditor actions = { filteredActions } />
248
+ < ActionEditor
249
+ id = { DASHBOARD_ACTION_EDITOR_ID }
250
+ actions = { filteredActions }
251
+ />
226
252
</ >
227
253
) : (
228
- < Typography > { t ( 'No action has been recorded.' ) } </ Typography >
254
+ < Typography id = { DASHBOARD_NO_ACTION_MESSAGE_ID } >
255
+ { t ( 'No action has been recorded.' ) }
256
+ </ Typography >
229
257
) ;
230
258
} ;
231
259
0 commit comments