imbric-theme 0.2.8 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- package/.storybook/preview.js +0 -1
- package/index.js +0 -2
- package/layout/Sidebar/Sidebar.css +90 -0
- package/layout/Sidebar/Sidebar.js +103 -247
- package/layout/Sidebar/Sidebar.module.css +357 -0
- package/layout/Sidebar/Sidebar.stories.js +2 -58
- package/layout/Sidebar/constants.js +182 -50
- package/layout/Sidebar/index.js +2 -1
- package/molecules/ItemMenu/ItemMenu.js +121 -0
- package/molecules/ItemMenu/ItemMenu.module.css +378 -0
- package/molecules/ItemMenu/ItemMenu.stories.js +40 -0
- package/molecules/ItemMenu/constants.js +33 -0
- package/molecules/ItemMenu/index.js +3 -0
- package/package.json +2 -3
- package/styles/sidebar.css +0 -751
package/.storybook/preview.js
CHANGED
package/index.js
CHANGED
@@ -3,8 +3,6 @@ export { default as CenteredContent } from './layout/CenteredContent'
|
|
3
3
|
export { default as Container } from './layout/Container'
|
4
4
|
export { default as FullHeightContent } from './layout/FullHeightContent'
|
5
5
|
export { default as Spacer } from './layout/Spacer'
|
6
|
-
export { default as Navbar } from './layout/Navbar'
|
7
|
-
export { default as Sidebar } from './layout/Sidebar'
|
8
6
|
|
9
7
|
// Atoms
|
10
8
|
export { default as Avatar } from './atoms/Avatar'
|
@@ -0,0 +1,90 @@
|
|
1
|
+
.is-home {
|
2
|
+
display: none;
|
3
|
+
}
|
4
|
+
|
5
|
+
#header {
|
6
|
+
position: absolute;
|
7
|
+
width: 220px;
|
8
|
+
}
|
9
|
+
|
10
|
+
#header .pro-sidebar {
|
11
|
+
height: 100vh;
|
12
|
+
}
|
13
|
+
|
14
|
+
#header .closemenu {
|
15
|
+
color: var(--color-primary);
|
16
|
+
position: absolute;
|
17
|
+
right: -7px;
|
18
|
+
z-index: 9999;
|
19
|
+
line-height: 20px;
|
20
|
+
border-radius: 50%;
|
21
|
+
font-weight: bold;
|
22
|
+
font-size: 22px;
|
23
|
+
top: 8px;
|
24
|
+
cursor: pointer;
|
25
|
+
}
|
26
|
+
|
27
|
+
#header .pro-sidebar {
|
28
|
+
width: 100%;
|
29
|
+
min-width: 100%;
|
30
|
+
}
|
31
|
+
|
32
|
+
#header .pro-sidebar.collapsed {
|
33
|
+
width: 80px;
|
34
|
+
min-width: 80px;
|
35
|
+
}
|
36
|
+
|
37
|
+
#header .pro-sidebar-inner {
|
38
|
+
background-color: var(--color-base-white);
|
39
|
+
box-shadow: 0.5px 0.866px 2px 0px rgba(0, 0, 0, 0.15);
|
40
|
+
}
|
41
|
+
|
42
|
+
#header .pro-sub-menu > .pro-inner-list-item {
|
43
|
+
position: relative;
|
44
|
+
background-color: var(--color-brand-hint-of-red);
|
45
|
+
padding-left: 44px;
|
46
|
+
padding-bottom: 4px;
|
47
|
+
padding-top: 4px;
|
48
|
+
}
|
49
|
+
|
50
|
+
#header .pro-sidebar-inner .pro-sidebar-layout::-webkit-scrollbar {
|
51
|
+
display: none;
|
52
|
+
}
|
53
|
+
|
54
|
+
#header .pro-sidebar-inner .pro-sidebar-layout .logotext {
|
55
|
+
padding: 8px 20px;
|
56
|
+
}
|
57
|
+
|
58
|
+
#header .pro-sidebar-inner .pro-sidebar-layout ul {
|
59
|
+
padding: 0 5px;
|
60
|
+
}
|
61
|
+
|
62
|
+
#header .pro-sidebar-inner .pro-sidebar-layout ul .pro-inner-item {
|
63
|
+
color: var(--color-font-highlight);
|
64
|
+
margin: 6px 0px;
|
65
|
+
/* font-weight: bold; */
|
66
|
+
}
|
67
|
+
|
68
|
+
#header .pro-sidebar-inner .pro-sidebar-layout ul .pro-inner-item .pro-icon-wrapper {
|
69
|
+
background-color: var(--color-brand-eastern-blue);
|
70
|
+
/* color: var(--color-font-highlight);
|
71
|
+
border-radius: 3px; */
|
72
|
+
}
|
73
|
+
|
74
|
+
#header .pro-sidebar-inner .pro-sidebar-layout ul .pro-inner-item .pro-icon-wrapper .pro-item-content {
|
75
|
+
color: var(--color-font-highlight);
|
76
|
+
}
|
77
|
+
|
78
|
+
#header .pro-sidebar-inner .pro-sidebar-layout .active {
|
79
|
+
background-image: linear-gradient(0deg, #fece00 0%, #ffe172 100%);
|
80
|
+
}
|
81
|
+
|
82
|
+
#header .logo {
|
83
|
+
padding: 20px;
|
84
|
+
}
|
85
|
+
|
86
|
+
@media only screen and (max-width: 720px) {
|
87
|
+
html {
|
88
|
+
overflow: hidden;
|
89
|
+
}
|
90
|
+
}
|
@@ -2,18 +2,18 @@ import React, { ReactNode, useRef, useState, useEffect } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
3
3
|
import withStyles from '../../hocs/withStyles'
|
4
4
|
|
5
|
-
import { subItems } from './constants'
|
5
|
+
import { subItems, options } from './constants'
|
6
6
|
|
7
7
|
//import react pro sidebar components
|
8
|
-
import {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
} from "react-pro-sidebar"
|
8
|
+
// import {
|
9
|
+
// ProSidebar,
|
10
|
+
// Menu,
|
11
|
+
// MenuItem,
|
12
|
+
// SubMenu,
|
13
|
+
// SidebarHeader,
|
14
|
+
// SidebarFooter,
|
15
|
+
// SidebarContent,
|
16
|
+
// } from "react-pro-sidebar"
|
17
17
|
|
18
18
|
import styles from './Sidebar.module.css'
|
19
19
|
//import sidebar css from react-pro-sidebar module and our custom css
|
@@ -22,8 +22,52 @@ import styles from './Sidebar.module.css'
|
|
22
22
|
import Picture from '../../atoms/Picture'
|
23
23
|
import Icon from '../../atoms/Icon'
|
24
24
|
import Divider from '../../atoms/Divider'
|
25
|
-
|
26
|
-
|
25
|
+
import ItemMenu from '../../molecules/ItemMenu/ItemMenu'
|
26
|
+
|
27
|
+
const items = [
|
28
|
+
{
|
29
|
+
href: '/',
|
30
|
+
icon: 'home',
|
31
|
+
title: 'Dashboard'
|
32
|
+
},
|
33
|
+
{
|
34
|
+
href: '/customers',
|
35
|
+
icon: 'home',
|
36
|
+
title: 'Customers'
|
37
|
+
},
|
38
|
+
{
|
39
|
+
href: '/products',
|
40
|
+
icon: 'home',
|
41
|
+
title: 'Products'
|
42
|
+
},
|
43
|
+
{
|
44
|
+
href: '/account',
|
45
|
+
icon: 'home',
|
46
|
+
title: 'Account'
|
47
|
+
},
|
48
|
+
{
|
49
|
+
href: '/settings',
|
50
|
+
icon: 'home',
|
51
|
+
title: 'Settings'
|
52
|
+
},
|
53
|
+
{
|
54
|
+
href: '/login',
|
55
|
+
icon: 'home',
|
56
|
+
title: 'Login'
|
57
|
+
},
|
58
|
+
{
|
59
|
+
href: '/register',
|
60
|
+
icon: 'home',
|
61
|
+
title: 'Register'
|
62
|
+
},
|
63
|
+
{
|
64
|
+
href: '/404',
|
65
|
+
icon: 'home',
|
66
|
+
title: 'Error'
|
67
|
+
}
|
68
|
+
];
|
69
|
+
|
70
|
+
export const Sidebar = ({ getStyles }) => {
|
27
71
|
|
28
72
|
//create initial menuCollapse state using useState hook
|
29
73
|
const [menuCollapse, setMenuCollapse] = useState(false)
|
@@ -36,260 +80,72 @@ export const Sidebar = ({ getStyles, options }) => {
|
|
36
80
|
|
37
81
|
return (
|
38
82
|
<>
|
39
|
-
<div
|
40
|
-
|
41
|
-
|
42
|
-
<SidebarHeader>
|
43
|
-
<div className="logotext">
|
44
|
-
{/* small and big change using menucollapse state */}
|
45
|
-
{/* <p>{menuCollapse ? "Logo" : "Big Logo"}</p> */}
|
46
|
-
{menuCollapse ? <Picture src="/static/logotipoS.svg" width={30}></Picture> : <Picture src="/static/logotipo.svg" width={120}></Picture>}
|
47
|
-
</div>
|
48
|
-
<div className="closemenu" onClick={menuIconClick}>
|
49
|
-
{/* changing menu collapse icon on click */}
|
50
|
-
{menuCollapse ? (
|
51
|
-
|
52
|
-
<Icon
|
53
|
-
name="angleRight"
|
54
|
-
onClick={function noRefCheck() { }}
|
55
|
-
/>
|
56
|
-
|
57
|
-
) : (
|
58
|
-
<Icon
|
59
|
-
name="angleLeft"
|
60
|
-
onClick={function noRefCheck() { }}
|
61
|
-
/>
|
62
|
-
)}
|
63
|
-
</div>
|
64
|
-
</SidebarHeader>
|
65
|
-
<SidebarContent>
|
66
|
-
<Menu iconShape="circle">
|
67
|
-
|
68
|
-
{/* {options.forEach(itemMenu => {
|
69
|
-
console.log(itemMenu); //This does ifre
|
83
|
+
<div className={getStyles('header', {
|
84
|
+
'collapsed': menuCollapse,
|
85
|
+
})}>
|
70
86
|
|
71
|
-
|
87
|
+
<div className={getStyles('pro-sidebar')}>
|
72
88
|
|
73
|
-
|
74
|
-
<MenuItem
|
75
|
-
title={'Home'}
|
76
|
-
icon={(<Icon color="inverted" name="home" onClick={function noRefCheck() { }} size="md" />)}
|
77
|
-
href={'/'}
|
78
|
-
>
|
79
|
-
Home
|
80
|
-
</MenuItem>
|
81
|
-
: null
|
82
|
-
}
|
89
|
+
<div className={getStyles('pro-sidebar-inner')}>
|
83
90
|
|
84
|
-
|
91
|
+
<div className={getStyles('pro-sidebar-layout')}>
|
85
92
|
|
86
|
-
{
|
87
|
-
<SubMenu
|
88
|
-
title={'Activity'}
|
89
|
-
icon={(<Icon color="inverted" name="activity" onClick={function noRefCheck() { }} size="md" />)}
|
90
|
-
onOpenChange={(open) => {
|
93
|
+
<div className={getStyles('pro-sidebar-header')}>
|
91
94
|
|
92
|
-
|
95
|
+
<div className={getStyles('logotext')}>
|
96
|
+
{/* small and big change using menucollapse state */}
|
97
|
+
{menuCollapse ? <Picture src="/static/logotipoS.svg" width={30}></Picture> : <Picture src="/static/logotipo.svg" width={120}></Picture>}
|
98
|
+
</div>
|
99
|
+
<div className={getStyles('closemenu')} onClick={menuIconClick}>
|
100
|
+
{/* changing menu collapse icon on click */}
|
101
|
+
{menuCollapse ? (
|
93
102
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
href={item.href}
|
99
|
-
title={item.title}
|
100
|
-
>
|
101
|
-
{item.title}
|
102
|
-
</MenuItem>
|
103
|
-
))}
|
104
|
-
</SubMenu>
|
105
|
-
: null
|
106
|
-
}
|
103
|
+
<Icon
|
104
|
+
name="angleRight"
|
105
|
+
onClick={function noRefCheck() { }}
|
106
|
+
/>
|
107
107
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
108
|
+
) : (
|
109
|
+
<Icon
|
110
|
+
name="angleLeft"
|
111
|
+
onClick={function noRefCheck() { }}
|
112
|
+
/>
|
113
|
+
)}
|
114
|
+
</div>
|
113
115
|
|
114
|
-
|
115
|
-
>
|
116
|
-
{subItems.subItemsStaff.map((item) => (
|
117
|
-
<MenuItem
|
118
|
-
key={item.title}
|
119
|
-
href={item.href}
|
120
|
-
title={item.title}
|
121
|
-
>
|
122
|
-
{item.title}
|
123
|
-
</MenuItem>
|
124
|
-
))}
|
125
|
-
</SubMenu>
|
126
|
-
: null
|
127
|
-
}
|
116
|
+
</div>
|
128
117
|
|
129
|
-
{
|
130
|
-
<MenuItem
|
131
|
-
title={'Services'}
|
132
|
-
icon={(<Icon color="inverted" name="travelPrograms" onClick={function noRefCheck() { }} size="lg" />)}
|
133
|
-
href={'/services'}
|
134
|
-
>
|
135
|
-
Services
|
136
|
-
</MenuItem>
|
137
|
-
: null
|
138
|
-
}
|
139
|
-
{options.isBilling.view ?
|
140
|
-
<MenuItem
|
141
|
-
title={'Billing'}
|
142
|
-
icon={(<Icon color="inverted" name="billing" onClick={function noRefCheck() { }} size="md" />)}
|
143
|
-
href={'/billing'}
|
144
|
-
>
|
145
|
-
Billing
|
146
|
-
</MenuItem>
|
147
|
-
: null
|
148
|
-
}
|
118
|
+
<div className={getStyles('pro-sidebar-content')}>
|
149
119
|
|
150
|
-
|
151
|
-
<SubMenu
|
152
|
-
title={'Setting'}
|
153
|
-
icon={(<Icon color="inverted" name="setting" onClick={function noRefCheck() { }} size="md" />)}
|
154
|
-
>
|
155
|
-
{subItems.subItemsSetting.map((item) => (
|
156
|
-
<MenuItem
|
157
|
-
key={item.title}
|
158
|
-
href={item.href}
|
159
|
-
title={item.title}
|
160
|
-
>
|
161
|
-
{item.title}
|
162
|
-
</MenuItem>
|
163
|
-
))}
|
164
|
-
</SubMenu>
|
165
|
-
: null
|
166
|
-
}
|
120
|
+
<nav className={getStyles('pro-menu', 'inner-submenu-arrows')}>
|
167
121
|
|
168
|
-
|
122
|
+
<ul>
|
169
123
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
124
|
+
{options.itemsMenu.map((item) => (
|
125
|
+
item.view ?
|
126
|
+
<ItemMenu
|
127
|
+
icon={item.icon}
|
128
|
+
subMenu={item.submenu}
|
129
|
+
itemSubmenu={item.submenu}
|
130
|
+
>
|
131
|
+
{item.text}
|
132
|
+
</ItemMenu>
|
133
|
+
: null
|
134
|
+
|
135
|
+
))}
|
180
136
|
|
181
|
-
|
137
|
+
</ul>
|
182
138
|
|
183
|
-
|
184
|
-
<MenuItem
|
185
|
-
title={'dashboards'}
|
186
|
-
icon={(<Icon color="inverted" name="dashboardsUwa" onClick={function noRefCheck() { }} size="md" />)}
|
187
|
-
href={'/dashboards'}
|
188
|
-
>
|
189
|
-
Dashboards
|
190
|
-
</MenuItem>
|
191
|
-
: null
|
192
|
-
}
|
139
|
+
</nav>
|
193
140
|
|
194
|
-
|
195
|
-
<MenuItem
|
196
|
-
title={'projects'}
|
197
|
-
icon={(<Icon color="inverted" name="projectsUwa" onClick={function noRefCheck() { }} size="md" />)}
|
198
|
-
href={'/projects'}
|
199
|
-
>
|
200
|
-
Projects
|
201
|
-
</MenuItem>
|
202
|
-
: null
|
203
|
-
}
|
141
|
+
</div>
|
204
142
|
|
205
|
-
|
206
|
-
<SubMenu
|
207
|
-
title={'Permissions'}
|
208
|
-
icon={(<Icon color="inverted" name="permissions" onClick={function noRefCheck() { }} size="md" />)}
|
209
|
-
>
|
210
|
-
{subItems.subItemsPermissions.map((item) => (
|
211
|
-
<MenuItem
|
212
|
-
key={item.title}
|
213
|
-
href={item.href}
|
214
|
-
title={item.title}
|
215
|
-
>
|
216
|
-
{item.title}
|
217
|
-
</MenuItem>
|
218
|
-
))}
|
219
|
-
</SubMenu>
|
220
|
-
: null
|
221
|
-
}
|
222
|
-
|
223
|
-
{options.isAnalytics.view ?
|
224
|
-
<SubMenu
|
225
|
-
title={'Analytics'}
|
226
|
-
icon={(<Icon color="inverted" name="analytics" onClick={function noRefCheck() { }} size="md" />)}
|
227
|
-
>
|
228
|
-
{subItems.subItemsAnalytics.map((item) => (
|
229
|
-
<MenuItem
|
230
|
-
key={item.title}
|
231
|
-
href={item.href}
|
232
|
-
title={item.title}
|
233
|
-
>
|
234
|
-
{item.title}
|
235
|
-
</MenuItem>
|
236
|
-
))}
|
237
|
-
</SubMenu>
|
238
|
-
: null
|
239
|
-
}
|
240
|
-
|
241
|
-
<Divider color="highlight" />
|
242
|
-
|
243
|
-
{options.isLegal.view ?
|
244
|
-
<SubMenu
|
245
|
-
title={'Legal'}
|
246
|
-
icon={(<Icon color="inverted" name="legal" onClick={function noRefCheck() { }} size="md" />)}
|
247
|
-
>
|
248
|
-
{subItems.subItemsLegal.map((item) => (
|
249
|
-
<MenuItem
|
250
|
-
key={item.title}
|
251
|
-
href={item.href}
|
252
|
-
title={item.title}
|
253
|
-
>
|
254
|
-
{item.title}
|
255
|
-
</MenuItem>
|
256
|
-
))}
|
257
|
-
</SubMenu>
|
258
|
-
: null
|
259
|
-
}
|
260
|
-
|
261
|
-
{options.isUserGuide.view ?
|
262
|
-
<MenuItem
|
263
|
-
title={'UserGuide'}
|
264
|
-
icon={(<Icon color="inverted" name="info" onClick={function noRefCheck() { }} size="md" />)}
|
265
|
-
href={'/userGuide'}
|
266
|
-
>
|
267
|
-
User Guide
|
268
|
-
</MenuItem>
|
269
|
-
: null
|
270
|
-
}
|
143
|
+
</div>
|
271
144
|
|
272
|
-
|
145
|
+
</div>
|
273
146
|
|
274
|
-
|
275
|
-
<MenuItem
|
276
|
-
title={'my-profile'}
|
277
|
-
icon={(<Icon color="inverted" name="profile" onClick={function noRefCheck() { }} size="md" />)}
|
278
|
-
href={'/my-profile'}
|
279
|
-
>
|
280
|
-
My profile
|
281
|
-
</MenuItem>
|
282
|
-
: null
|
283
|
-
}
|
147
|
+
</div>
|
284
148
|
|
285
|
-
</Menu>
|
286
|
-
</SidebarContent>
|
287
|
-
<SidebarFooter>
|
288
|
-
<Menu iconShape="circle">
|
289
|
-
<MenuItem icon={(<Icon color="inverted" name="logout" onClick={function noRefCheck() { }} size="md" />)}>Logout</MenuItem>
|
290
|
-
</Menu>
|
291
|
-
</SidebarFooter>
|
292
|
-
</ProSidebar>
|
293
149
|
</div>
|
294
150
|
</>
|
295
151
|
)
|