diff options
author | Anton Tananaev <anton@traccar.org> | 2022-04-20 18:11:16 -0700 |
---|---|---|
committer | Anton Tananaev <anton@traccar.org> | 2022-04-20 18:11:16 -0700 |
commit | f2bd440c7fdf8857a5704f214d96aba3345a14e7 (patch) | |
tree | 1b741f3d66fa7403ca81631b782617897045c841 /modern/src/settings/CommandsPage.js | |
parent | 60f74cdaa7f737eb4749e44333a7c7166dd6db6b (diff) | |
download | trackermap-web-f2bd440c7fdf8857a5704f214d96aba3345a14e7.tar.gz trackermap-web-f2bd440c7fdf8857a5704f214d96aba3345a14e7.tar.bz2 trackermap-web-f2bd440c7fdf8857a5704f214d96aba3345a14e7.zip |
Add saved commands
Diffstat (limited to 'modern/src/settings/CommandsPage.js')
-rw-r--r-- | modern/src/settings/CommandsPage.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/modern/src/settings/CommandsPage.js b/modern/src/settings/CommandsPage.js new file mode 100644 index 00000000..e8422467 --- /dev/null +++ b/modern/src/settings/CommandsPage.js @@ -0,0 +1,69 @@ +import React, { useState } from 'react'; +import { + TableContainer, Table, TableRow, TableCell, TableHead, TableBody, makeStyles, IconButton, +} from '@material-ui/core'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import { useEffectAsync } from '../reactHelper'; +import EditCollectionView from '../EditCollectionView'; +import OptionsLayout from './OptionsLayout'; +import { useTranslation } from '../LocalizationProvider'; +import { formatBoolean } from '../common/formatter'; +import { prefixString } from '../common/stringUtils'; + +const useStyles = makeStyles((theme) => ({ + columnAction: { + width: theme.spacing(1), + padding: theme.spacing(0, 1), + }, +})); + +const CommandsView = ({ updateTimestamp, onMenuClick }) => { + const classes = useStyles(); + const t = useTranslation(); + + const [items, setItems] = useState([]); + + useEffectAsync(async () => { + const response = await fetch('/api/commands'); + if (response.ok) { + setItems(await response.json()); + } + }, [updateTimestamp]); + + return ( + <TableContainer> + <Table> + <TableHead> + <TableRow> + <TableCell className={classes.columnAction} /> + <TableCell>{t('sharedDescription')}</TableCell> + <TableCell>{t('sharedType')}</TableCell> + <TableCell>{t('commandSendSms')}</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>{item.description}</TableCell> + <TableCell>{t(prefixString('command', item.type))}</TableCell> + <TableCell>{formatBoolean(item.textChannel, t)}</TableCell> + </TableRow> + ))} + </TableBody> + </Table> + </TableContainer> + ); +}; + +const CommandsPage = () => ( + <OptionsLayout> + <EditCollectionView content={CommandsView} editPath="/settings/command" endpoint="commands" /> + </OptionsLayout> +); + +export default CommandsPage; |