Skip to content

Commit f7e4dcd

Browse files
committed
Implement Users List Acionts
1 parent 0a4228e commit f7e4dcd

File tree

4 files changed

+148
-1
lines changed

4 files changed

+148
-1
lines changed

src/Administration/Users/UsersList/UsersList.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import BasePageContainer from '@/_common/BasePageContainer'
2323
import BasePageToolbar from '@/_common/BasePageToolbar'
2424
import { BaseTablePagination } from '@/_common/BaseTable'
2525

26+
import UsersListAction from './UsersListActions'
2627
import UsersListTableItems from './UsersListTableItems'
2728

2829
const UsersList = ({ match }) => {
@@ -123,7 +124,10 @@ const UsersList = ({ match }) => {
123124

124125
return (
125126
<BasePageContainer>
126-
<BasePageToolbar title={'Users Adminstration'}></BasePageToolbar>
127+
<BasePageToolbar
128+
title={'Users Adminstration'}
129+
actionsComponent={UsersListAction}
130+
></BasePageToolbar>
127131
<Grid container spacing={3}>
128132
<Grid item xs={12}>
129133
{status === 'error' && (
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import clsx from 'clsx'
2+
import React, { useContext, useState } from 'react'
3+
4+
import { fade, makeStyles, Button, Tooltip, InputBase } from '@material-ui/core'
5+
6+
import {
7+
MoreVert as IconMore,
8+
Tune as IconFilter,
9+
// ArrowDropDown as IconDropDown,
10+
Add as IconNew,
11+
Search as IconSearch,
12+
} from '@material-ui/icons'
13+
14+
// import usersListContext from './usersListContext'
15+
16+
const DashboardActions = () => {
17+
const classes = useStyles()
18+
const [search, setSearch] = useState('')
19+
// const { filter } = useContext(usersListContext)
20+
21+
const handleChangeSearchInput = event => {
22+
setSearch(event.target.value)
23+
}
24+
25+
return (
26+
<div className={classes.root}>
27+
<div className={classes.search}>
28+
<div className={classes.searchIcon}>
29+
<IconSearch />
30+
</div>
31+
<InputBase
32+
placeholder="Search…"
33+
classes={{
34+
root: classes.searchInputRoot,
35+
input: clsx(
36+
classes.searchInputInput,
37+
search && classes.searchInputInputActive,
38+
),
39+
}}
40+
inputProps={{ 'aria-label': 'search' }}
41+
onChange={handleChangeSearchInput}
42+
/>
43+
</div>
44+
<Tooltip title="Create new">
45+
<Button color="secondary">
46+
<IconNew className={classes.iconNew} />
47+
New
48+
</Button>
49+
</Tooltip>
50+
<Tooltip title="Filter">
51+
<Button color="secondary">
52+
<IconFilter />
53+
</Button>
54+
</Tooltip>
55+
<Tooltip title="More actions">
56+
<Button color="secondary">
57+
<IconMore />
58+
</Button>
59+
</Tooltip>
60+
</div>
61+
)
62+
}
63+
64+
const useStyles = makeStyles(theme => ({
65+
root: {
66+
color: theme.palette.secondary.main,
67+
},
68+
iconNew: {
69+
marginRight: 5,
70+
},
71+
search: {
72+
position: 'relative',
73+
display: 'inline-block',
74+
borderRadius: theme.shape.borderRadius,
75+
backgroundColor: fade(theme.palette.common.white, 0),
76+
'&:hover': {
77+
// backgroundColor: fade(theme.palette.common.white, 0.5),
78+
backgroundColor: 'rgba(140, 209, 54, 0.04)',
79+
},
80+
marginLeft: 0,
81+
width: '100%',
82+
[theme.breakpoints.up('sm')]: {
83+
marginLeft: theme.spacing(1),
84+
width: 'auto',
85+
},
86+
},
87+
searchIcon: {
88+
padding: theme.spacing(0, 2),
89+
height: '100%',
90+
position: 'absolute',
91+
pointerEvents: 'none',
92+
display: 'flex',
93+
alignItems: 'center',
94+
justifyContent: 'center',
95+
},
96+
searchInputRoot: {
97+
color: 'inherit',
98+
},
99+
searchInputInput: {
100+
padding: theme.spacing(1, 1, 1, 0),
101+
// vertical padding + font size from searchIcon
102+
paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,
103+
transition: theme.transitions.create('width'),
104+
width: '100%',
105+
[theme.breakpoints.up('sm')]: {
106+
width: '12ch',
107+
'&:focus, &.active': {
108+
width: '20ch',
109+
},
110+
},
111+
},
112+
}))
113+
114+
export default DashboardActions
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from 'react'
2+
import moment, { Moment } from 'moment'
3+
4+
// The default context, which is used when there is no provider
5+
// (might be used for components testing)
6+
export const usersListContextDefault = {
7+
filter: {
8+
dateFrom: moment()
9+
.subtract(14, 'day')
10+
.startOf('day'),
11+
dateTo: moment().startOf('day'),
12+
},
13+
}
14+
15+
export const usersListContext = React.createContext(usersListContextDefault)
16+
17+
export const dashboardProvider = usersListContext.Provider
18+
export const dashboardConsumer = usersListContext.Consumer
19+
20+
export default usersListContext

src/_common/BasePageToolbar/BasePageToolbar.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react'
2+
import PropTypes from 'prop-types'
23
import clsx from 'clsx'
34

45
import { makeStyles, createStyles } from '@material-ui/core/styles'
@@ -64,4 +65,12 @@ const useStyles = makeStyles(theme =>
6465
}),
6566
)
6667

68+
BasePageToolbar.propTypes = {
69+
classes: PropTypes.object,
70+
title: PropTypes.elementType,
71+
titleComponent: PropTypes.elementType,
72+
actions: PropTypes.element,
73+
actionsComponent: PropTypes.elementType,
74+
}
75+
6776
export default BasePageToolbar

0 commit comments

Comments
 (0)