import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import { useNavigate, useParams } from 'react-router-dom'; import dayjs from 'dayjs'; import { Accordion, AccordionSummary, AccordionDetails, Typography, Container, TextField, Button, } from '@mui/material'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import { useTranslation } from '../common/components/LocalizationProvider'; import PageLayout from '../common/components/PageLayout'; import SettingsMenu from './components/SettingsMenu'; import { useCatchCallback } from '../reactHelper'; import useSettingsStyles from './common/useSettingsStyles'; const SharePage = () => { const navigate = useNavigate(); const classes = useSettingsStyles(); const t = useTranslation(); const { id } = useParams(); const device = useSelector((state) => state.devices.items[id]); const [expiration, setExpiration] = useState(dayjs().add(1, 'week').locale('en').format('YYYY-MM-DD')); const [link, setLink] = useState(); const handleShare = useCatchCallback(async () => { const expirationTime = dayjs(expiration).toISOString(); const response = await fetch('/api/devices/share', { method: 'POST', body: new URLSearchParams(`deviceId=${id}&expiration=${expirationTime}`), }); if (response.ok) { const token = await response.text(); setLink(`${window.location.origin}?token=${token}`); } else { throw Error(await response.text()); } }, [id, expiration, setLink]); return ( } breadcrumbs={['deviceShare']}> }> {t('sharedRequired')} setExpiration(dayjs(e.target.value, 'YYYY-MM-DD').locale('en').format())} /> {t('reportShow')} setLink(e.target.value)} label={t('sharedLink')} InputProps={{ readOnly: true, }} /> navigate(-1)} > {t('sharedCancel')} navigator.clipboard?.writeText(link)} disabled={!link} > {t('sharedCopy')} ); }; export default SharePage;