aboutsummaryrefslogtreecommitdiff
path: root/modern
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2020-09-20 23:13:11 -0700
committerAnton Tananaev <anton.tananaev@gmail.com>2020-09-20 23:13:11 -0700
commitb318cfd66ee2fa9918797fc0e0226a01983da746 (patch)
tree9224dc7290011285d6e8cb8829a12f5cb596575a /modern
parent9238895c99c30c442ce8dae41b61f898a79dd89b (diff)
downloadtrackermap-web-b318cfd66ee2fa9918797fc0e0226a01983da746.tar.gz
trackermap-web-b318cfd66ee2fa9918797fc0e0226a01983da746.tar.bz2
trackermap-web-b318cfd66ee2fa9918797fc0e0226a01983da746.zip
Implement users editing
Diffstat (limited to 'modern')
-rw-r--r--modern/src/DevicePage.js4
-rw-r--r--modern/src/DevicesList.js (renamed from modern/src/DeviceList.js)4
-rw-r--r--modern/src/MainPage.js4
-rw-r--r--modern/src/UserPage.js6
-rw-r--r--modern/src/admin/UsersPage.js114
5 files changed, 51 insertions, 81 deletions
diff --git a/modern/src/DevicePage.js b/modern/src/DevicePage.js
index 7c963b02..48c6afde 100644
--- a/modern/src/DevicePage.js
+++ b/modern/src/DevicePage.js
@@ -12,8 +12,8 @@ const DevicePage = () => {
const getItem = () => {
const updatedItem = item;
- updatedItem.name = name;
- updatedItem.uniqueId = uniqueId;
+ updatedItem.name = name || item.name;
+ updatedItem.uniqueId = uniqueId || item.uniqueId;
return updatedItem;
};
diff --git a/modern/src/DeviceList.js b/modern/src/DevicesList.js
index c9abce3c..28ead786 100644
--- a/modern/src/DeviceList.js
+++ b/modern/src/DevicesList.js
@@ -60,10 +60,10 @@ const DeviceView = ({ updateTimestamp, onMenuClick }) => {
);
}
-const DeviceList = () => {
+const DevicesList = () => {
return (
<EditCollectionView content={DeviceView} editPath="/device" endpoint="devices" />
);
}
-export default DeviceList;
+export default DevicesList;
diff --git a/modern/src/MainPage.js b/modern/src/MainPage.js
index b13a263e..3032f93e 100644
--- a/modern/src/MainPage.js
+++ b/modern/src/MainPage.js
@@ -4,7 +4,7 @@ import { isWidthUp, makeStyles, withWidth } from '@material-ui/core';
import Drawer from '@material-ui/core/Drawer';
import ContainerDimensions from 'react-container-dimensions';
import LinearProgress from '@material-ui/core/LinearProgress';
-import DeviceList from './DeviceList';
+import DevicesList from './DevicesList';
import MainMap from './MainMap';
import MainToobar from './MainToolbar';
@@ -49,7 +49,7 @@ const MainPage = ({ width }) => {
anchor={isWidthUp('sm', width) ? 'left' : 'bottom'}
variant='permanent'
classes={{ paper: classes.drawerPaper }}>
- <DeviceList />
+ <DevicesList />
</Drawer>
<div className={classes.mapContainer}>
<ContainerDimensions>
diff --git a/modern/src/UserPage.js b/modern/src/UserPage.js
index 4b58ba81..a05cacef 100644
--- a/modern/src/UserPage.js
+++ b/modern/src/UserPage.js
@@ -13,9 +13,9 @@ const UserPage = () => {
const getItem = () => {
const updatedItem = item;
- updatedItem.name = name;
- updatedItem.email = email;
- updatedItem.password = password;
+ updatedItem.name = name || item.name;
+ updatedItem.email = email || item.email;
+ updatedItem.password = password || item.password;
return updatedItem;
};
diff --git a/modern/src/admin/UsersPage.js b/modern/src/admin/UsersPage.js
index 85ee2488..529cdc64 100644
--- a/modern/src/admin/UsersPage.js
+++ b/modern/src/admin/UsersPage.js
@@ -1,12 +1,12 @@
import React, { useState } from 'react';
import MainToobar from '../MainToolbar';
import { useHistory } from 'react-router-dom';
-import { Fab, TableContainer, Table, TableRow, TableCell, TableHead, TableBody, makeStyles, IconButton, Menu, MenuItem } from '@material-ui/core';
-import AddIcon from '@material-ui/icons/Add';
+import { TableContainer, Table, TableRow, TableCell, TableHead, TableBody, makeStyles, IconButton } from '@material-ui/core';
import MoreVertIcon from '@material-ui/icons/MoreVert';
import t from '../common/localization';
import formatter from '../common/formatter';
import { useEffectAsync } from '../reactHelper';
+import EditCollectionView from '../EditCollectionView';
const useStyles = makeStyles(theme => ({
root: {
@@ -16,90 +16,60 @@ const useStyles = makeStyles(theme => ({
width: theme.spacing(1),
padding: theme.spacing(0, 1),
},
- fab: {
- position: 'absolute',
- bottom: theme.spacing(2),
- right: theme.spacing(2),
- },
}));
-const UsersPage = () => {
- const history = useHistory();
+const UsersView = ({ updateTimestamp, onMenuClick }) => {
const classes = useStyles();
- const [data, setData] = useState([]);
- const [menuItemId, setMenuItemId] = useState(null);
- const [menuAnchorEl, setMenuAnchorEl] = useState(null);
+
+ const [items, setItems] = useState([]);
useEffectAsync(async () => {
const response = await fetch('/api/users');
if (response.ok) {
- setData(await response.json());
+ setItems(await response.json());
}
- }, []);
-
- const handleMenuOpen = (event, itemId) => {
- setMenuItemId(itemId);
- setMenuAnchorEl(event.currentTarget);
- }
-
- const handleMenuClose = () => {
- setMenuItemId(null);
- setMenuAnchorEl(null);
- }
-
- const handleMenuEdit = () => {
- history.push(`/user/${menuItemId}`);
- handleMenuClose();
- }
+ }, [updateTimestamp]);
- const handleMenuRemove = () => {
- //setRemoveDialogOpen(true);
- handleMenuClose();
- }
+ return (
+ <TableContainer>
+ <Table>
+ <TableHead>
+ <TableRow>
+ <TableCell className={classes.columnAction} />
+ <TableCell>{t('sharedName')}</TableCell>
+ <TableCell>{t('userEmail')}</TableCell>
+ <TableCell>{t('userAdmin')}</TableCell>
+ <TableCell>{t('sharedDisabled')}</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ {items.map((item) => (
+ <TableRow key={item.id}>
+ <TableCell className={classes.columnAction} padding="none">
+ <IconButton onClick={(event) => onMenuClick(event.currentTarget, item.id)}>
+ <MoreVertIcon />
+ </IconButton>
+ </TableCell>
+ <TableCell>{formatter(item, 'name')}</TableCell>
+ <TableCell>{formatter(item, 'email')}</TableCell>
+ <TableCell>{formatter(item, 'administrator')}</TableCell>
+ <TableCell>{formatter(item, 'disabled')}</TableCell>
+ </TableRow>
+ ))}
+ </TableBody>
+ </Table>
+ </TableContainer>
+ );
+}
- const handleAdd = () => {
- history.push('/user');
- //handleMenuClose();
- }
+const UsersPage = () => {
+ const history = useHistory();
+ const classes = useStyles();
return (
<div className={classes.root}>
<MainToobar history={history} />
- <TableContainer>
- <Table>
- <TableHead>
- <TableRow>
- <TableCell className={classes.columnAction} />
- <TableCell>{t('sharedName')}</TableCell>
- <TableCell>{t('userEmail')}</TableCell>
- <TableCell>{t('userAdmin')}</TableCell>
- <TableCell>{t('sharedDisabled')}</TableCell>
- </TableRow>
- </TableHead>
- <TableBody>
- {data.map((item) => (
- <TableRow key={item.id}>
- <TableCell className={classes.columnAction} padding="none">
- <IconButton onClick={(event) => handleMenuOpen(event, item.id)}>
- <MoreVertIcon />
- </IconButton>
- </TableCell>
- <TableCell>{formatter(item, 'name')}</TableCell>
- <TableCell>{formatter(item, 'email')}</TableCell>
- <TableCell>{formatter(item, 'administrator')}</TableCell>
- <TableCell>{formatter(item, 'disabled')}</TableCell>
- </TableRow>
- ))}
- </TableBody>
- </Table>
- </TableContainer>
- <Fab size="medium" color="primary" className={classes.fab} onClick={handleAdd}>
- <AddIcon />
- </Fab>
- <Menu id="context-menu" anchorEl={menuAnchorEl} keepMounted open={Boolean(menuAnchorEl)} onClose={handleMenuClose}>
- <MenuItem onClick={handleMenuEdit}>{t('sharedEdit')}</MenuItem>
- <MenuItem onClick={handleMenuRemove}>{t('sharedRemove')}</MenuItem>
- </Menu>
+ <EditCollectionView content={UsersView} editPath="/user" endpoint="users" />
</div>
);
}