import React, { useState } from 'react'; import { useHistory, useParams } from 'react-router-dom'; import { Accordion, AccordionSummary, AccordionDetails, makeStyles, Typography, Container, Button, FormControl, } from '@material-ui/core'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { useTranslation } from '../common/components/LocalizationProvider'; import BaseCommandView from './components/BaseCommandView'; import SelectField from '../common/components/SelectField'; import PageLayout from '../common/components/PageLayout'; import SettingsMenu from './components/SettingsMenu'; import { useCatch } from '../reactHelper'; const useStyles = makeStyles((theme) => ({ container: { marginTop: theme.spacing(2), }, buttons: { display: 'flex', justifyContent: 'space-evenly', '& > *': { flexBasis: '33%', }, }, details: { flexDirection: 'column', }, })); const CommandSendPage = () => { const history = useHistory(); const classes = useStyles(); const t = useTranslation(); const { deviceId } = useParams(); const [savedId, setSavedId] = useState(0); const [item, setItem] = useState({}); const handleSend = useCatch(async () => { let command; if (savedId) { const response = await fetch(`/api/commands/${savedId}`); if (response.ok) { command = await response.json(); } else { throw Error(await response.text()); } } else { command = item; } command.deviceId = parseInt(deviceId, 10); const response = await fetch('/api/commands/send', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(command), }); if (response.ok) { history.goBack(); } else { throw Error(await response.text()); } }); const validate = () => savedId || (item && item.type); return ( } breadcrumbs={['settingsTitle', 'deviceCommand']}> }> {t('sharedRequired')} setSavedId(e.target.value)} endpoint={`/api/commands/send?deviceId=${deviceId}`} titleGetter={(it) => it.description} label={t('sharedSavedCommand')} variant="filled" /> {!savedId && ( )}
); }; export default CommandSendPage;