import * as React from 'react'; import { Alert, AlertIcon, Box, Button, Center, FormControl, FormLabel, Select, SimpleGrid, Spinner, Switch, } from '@chakra-ui/react'; import { ArrowLeft } from '@phosphor-icons/react'; import { useTranslation } from 'react-i18next'; import { Modal } from '../Modal'; import { useDownloadTrace, useTrace } from 'hooks/Network/Trace'; export type TraceModalProps = { serialNumber: string; modalProps: { isOpen: boolean; onClose: () => void; }; }; type FormValues = { type: 'duration' | 'packets'; network: 'up' | 'down'; waitForResponse: boolean; duration: string; packets: string; }; export const TraceModal = ({ serialNumber, modalProps }: TraceModalProps) => { const { t } = useTranslation(); const [form, setForm] = React.useState({ type: 'duration', network: 'up', waitForResponse: true, duration: '20', packets: '100', }); const traceDevice = useTrace({ serialNumber, alertOnCompletion: !form.waitForResponse }); const download = useDownloadTrace({ serialNumber, commandId: traceDevice.data?.data.UUID ?? '' }); const onFormChange = (e: React.ChangeEvent) => { setForm({ ...form, [e.target.name]: e.target.value, }); }; const onToggleChange = (e: { target: { name: string; checked: boolean; value: string; }; }) => { setForm({ ...form, [e.target.name]: e.target.checked, }); }; const onStart = () => { traceDevice.mutate({ serialNumber, type: form.type, network: form.network, waitForResponse: form.waitForResponse, // @ts-ignore duration: form.type === 'duration' ? parseInt(form.duration, 10) : undefined, packets: form.type === 'packets' ? parseInt(form.packets, 10) : undefined, }); if (!form.waitForResponse) { modalProps.onClose(); } }; const onDownload = () => { download.refetch(); }; return ( } onClick={traceDevice.reset}> {t('common.go_back')} ) : ( ) } > {traceDevice.isLoading && (
)} {traceDevice.data && (
)} {!traceDevice.isLoading && !traceDevice.data && !traceDevice.error && ( <>
{t('controller.devices.trace_description')}
{t('common.type')} {form.type === 'duration' ? ( {t('controller.trace.duration')} ) : ( {t('controller.trace.packets')} )} {t('controller.trace.network')} {t('controller.trace.wait')} )}
); };