aboutsummaryrefslogtreecommitdiff
path: root/modern/src/settings/CommandPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'modern/src/settings/CommandPage.js')
-rw-r--r--modern/src/settings/CommandPage.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/modern/src/settings/CommandPage.js b/modern/src/settings/CommandPage.js
new file mode 100644
index 00000000..8a7f5b94
--- /dev/null
+++ b/modern/src/settings/CommandPage.js
@@ -0,0 +1,85 @@
+import React, { useEffect, useState } from 'react';
+import {
+ Accordion, AccordionSummary, AccordionDetails, makeStyles, Typography, TextField, FormControlLabel, Checkbox,
+} from '@material-ui/core';
+import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
+import EditItemView from '../EditItemView';
+import { useTranslation } from '../LocalizationProvider';
+import SelectField from '../form/SelectField';
+import { prefixString } from '../common/stringUtils';
+import useCommandAttributes from '../attributes/useCommandAttributes';
+
+const useStyles = makeStyles(() => ({
+ details: {
+ flexDirection: 'column',
+ },
+}));
+
+const CommandPage = () => {
+ const classes = useStyles();
+ const t = useTranslation();
+
+ const availableAttributes = useCommandAttributes(t);
+
+ const [item, setItem] = useState();
+ const [attributes, setAttributes] = useState([]);
+
+ useEffect(() => {
+ if (item && item.type) {
+ setAttributes(availableAttributes[item.type] || []);
+ }
+ }, [availableAttributes, item]);
+
+ return (
+ <EditItemView endpoint="commands" item={item} setItem={setItem}>
+ {item && (
+ <Accordion defaultExpanded>
+ <AccordionSummary expandIcon={<ExpandMoreIcon />}>
+ <Typography variant="subtitle1">
+ {t('sharedRequired')}
+ </Typography>
+ </AccordionSummary>
+ <AccordionDetails className={classes.details}>
+ <TextField
+ margin="normal"
+ value={item.description || ''}
+ onChange={(event) => setItem({ ...item, description: event.target.value })}
+ label={t('sharedDescription')}
+ variant="filled"
+ />
+ <SelectField
+ margin="normal"
+ value={item.type || 'custom'}
+ emptyValue={null}
+ onChange={(e) => setItem({ ...item, type: e.target.value, attributes: {} })}
+ endpoint="/api/commands/types"
+ keyGetter={(it) => it.type}
+ titleGetter={(it) => t(prefixString('command', it.type))}
+ label={t('sharedType')}
+ variant="filled"
+ />
+ {attributes.map((attribute) => (
+ <TextField
+ margin="normal"
+ value={item.attributes[attribute.key]}
+ onChange={(e) => {
+ const updateItem = { ...item, attributes: { ...item.attributes } };
+ updateItem.attributes[attribute.key] = e.target.value;
+ setItem(updateItem);
+ }}
+ label={attribute.name}
+ variant="filled"
+ />
+ ))}
+ <FormControlLabel
+ control={<Checkbox checked={item.textChannel} onChange={(event) => setItem({ ...item, textChannel: event.target.checked })} />}
+ label={t('commandSendSms')}
+ />
+ </AccordionDetails>
+ </Accordion>
+ )}
+ </EditItemView>
+ );
+};
+
+export default CommandPage;