@@ -3,11 +3,13 @@ import { useState } from 'react';
3
3
import { useSelector } from 'react-redux' ;
4
4
import LabelIcon from '@material-ui/icons/Label' ;
5
5
import { makeStyles } from '@material-ui/core/styles' ;
6
+ import classnames from 'classnames' ;
6
7
import {
7
8
useTranslate ,
8
9
DashboardMenuItem ,
9
10
MenuItemLink ,
10
11
MenuProps ,
12
+ ReduxState ,
11
13
} from 'react-admin' ;
12
14
13
15
import visitors from '../visitors' ;
@@ -28,6 +30,7 @@ const Menu = ({ dense = false }: MenuProps) => {
28
30
menuCustomers : true ,
29
31
} ) ;
30
32
const translate = useTranslate ( ) ;
33
+ const open = useSelector ( ( state : ReduxState ) => state . admin . ui . sidebarOpen ) ;
31
34
useSelector ( ( state : AppState ) => state . theme ) ; // force rerender on theme change
32
35
const classes = useStyles ( ) ;
33
36
@@ -36,7 +39,12 @@ const Menu = ({ dense = false }: MenuProps) => {
36
39
} ;
37
40
38
41
return (
39
- < div className = { classes . root } >
42
+ < div
43
+ className = { classnames ( classes . root , {
44
+ [ classes . open ] : open ,
45
+ [ classes . closed ] : ! open ,
46
+ } ) }
47
+ >
40
48
{ ' ' }
41
49
< DashboardMenuItem />
42
50
< SubMenu
@@ -47,15 +55,21 @@ const Menu = ({ dense = false }: MenuProps) => {
47
55
dense = { dense }
48
56
>
49
57
< MenuItemLink
50
- to = { `/commands` }
58
+ to = { {
59
+ pathname : '/commands' ,
60
+ state : { _scrollToTop : true } ,
61
+ } }
51
62
primaryText = { translate ( `resources.commands.name` , {
52
63
smart_count : 2 ,
53
64
} ) }
54
65
leftIcon = { < orders . icon /> }
55
66
dense = { dense }
56
67
/>
57
68
< MenuItemLink
58
- to = { `/invoices` }
69
+ to = { {
70
+ pathname : '/invoices' ,
71
+ state : { _scrollToTop : true } ,
72
+ } }
59
73
primaryText = { translate ( `resources.invoices.name` , {
60
74
smart_count : 2 ,
61
75
} ) }
@@ -71,15 +85,21 @@ const Menu = ({ dense = false }: MenuProps) => {
71
85
dense = { dense }
72
86
>
73
87
< MenuItemLink
74
- to = { `/products` }
88
+ to = { {
89
+ pathname : '/products' ,
90
+ state : { _scrollToTop : true } ,
91
+ } }
75
92
primaryText = { translate ( `resources.products.name` , {
76
93
smart_count : 2 ,
77
94
} ) }
78
95
leftIcon = { < products . icon /> }
79
96
dense = { dense }
80
97
/>
81
98
< MenuItemLink
82
- to = { `/categories` }
99
+ to = { {
100
+ pathname : '/categories' ,
101
+ state : { _scrollToTop : true } ,
102
+ } }
83
103
primaryText = { translate ( `resources.categories.name` , {
84
104
smart_count : 2 ,
85
105
} ) }
@@ -95,15 +115,21 @@ const Menu = ({ dense = false }: MenuProps) => {
95
115
dense = { dense }
96
116
>
97
117
< MenuItemLink
98
- to = { `/customers` }
118
+ to = { {
119
+ pathname : '/customers' ,
120
+ state : { _scrollToTop : true } ,
121
+ } }
99
122
primaryText = { translate ( `resources.customers.name` , {
100
123
smart_count : 2 ,
101
124
} ) }
102
125
leftIcon = { < visitors . icon /> }
103
126
dense = { dense }
104
127
/>
105
128
< MenuItemLink
106
- to = { `/segments` }
129
+ to = { {
130
+ pathname : '/segments' ,
131
+ state : { _scrollToTop : true } ,
132
+ } }
107
133
primaryText = { translate ( `resources.segments.name` , {
108
134
smart_count : 2 ,
109
135
} ) }
@@ -112,7 +138,10 @@ const Menu = ({ dense = false }: MenuProps) => {
112
138
/>
113
139
</ SubMenu >
114
140
< MenuItemLink
115
- to = { `/reviews` }
141
+ to = { {
142
+ pathname : '/reviews' ,
143
+ state : { _scrollToTop : true } ,
144
+ } }
116
145
primaryText = { translate ( `resources.reviews.name` , {
117
146
smart_count : 2 ,
118
147
} ) }
@@ -126,6 +155,16 @@ const Menu = ({ dense = false }: MenuProps) => {
126
155
const useStyles = makeStyles ( theme => ( {
127
156
root : {
128
157
marginTop : theme . spacing ( 1 ) ,
158
+ transition : theme . transitions . create ( 'width' , {
159
+ easing : theme . transitions . easing . sharp ,
160
+ duration : theme . transitions . duration . leavingScreen ,
161
+ } ) ,
162
+ } ,
163
+ open : {
164
+ width : 200 ,
165
+ } ,
166
+ closed : {
167
+ width : 55 ,
129
168
} ,
130
169
} ) ) ;
131
170
0 commit comments