import React, { useEffect, useMemo, useState } from 'react'; import { Modal, ModalOverlay, ModalContent, ModalBody, Center, Spinner } from '@chakra-ui/react'; import { ArrowLeft, Download, Gauge } from '@phosphor-icons/react'; import { CSVLink } from 'react-csv'; import { useTranslation } from 'react-i18next'; import ConfirmIgnoreCommand from '../ConfirmIgnoreCommand'; import WifiScanForm from './Form'; import WifiScanResultDisplay from './ResultDisplay'; import { CloseButton } from 'components/Buttons/CloseButton'; import { ResponsiveButton } from 'components/Buttons/ResponsiveButton'; import { ModalHeader } from 'components/Containers/Modal/ModalHeader'; import { dateForFilename } from 'helpers/dateFormatting'; import { useWifiScanDevice } from 'hooks/Network/Devices'; import useCommandModal from 'hooks/useCommandModal'; import { useFormRef } from 'hooks/useFormRef'; import { DeviceScanResult, WifiScanCommand } from 'models/Device'; import { ModalProps } from 'models/Modal'; export type WifiScanModalProps = { modalProps: ModalProps; serialNumber: string; }; export const WifiScanModal = ({ modalProps: { isOpen, onClose }, serialNumber }: WifiScanModalProps) => { const { t } = useTranslation(); const { form, formRef } = useFormRef(); const [csvData, setCsvData] = useState(undefined); const { data: scanResult, mutateAsync: scan, isLoading, reset } = useWifiScanDevice({ serialNumber }); const { isConfirmOpen, closeConfirm, closeModal, closeCancelAndForm } = useCommandModal({ isLoading, onModalClose: onClose, }); const submit = (data: WifiScanCommand) => { scan(data); }; const body = useMemo(() => { if (isLoading) return (
); if (scanResult) { return ; } return {}, onClose }} submit={submit} formRef={formRef} />; }, [scanResult, isLoading, formRef]); const resetData = () => { reset(); setCsvData(undefined); }; useEffect(() => { if (isOpen) resetData(); }, [isOpen]); return ( {csvData ? ( // @ts-ignore } isCompact label={t('common.download')} onClick={() => {}} /> ) : ( } isCompact label={t('common.download')} onClick={() => {}} /> )} {scanResult !== undefined ? ( } label={t('common.back')} onClick={resetData} isLoading={isLoading} ml={2} /> ) : ( } label={t('commands.scan')} onClick={form.submitForm} isLoading={isLoading} ml={2} /> )} } /> {body} {}, onClose: closeConfirm }} confirm={closeCancelAndForm} cancel={closeConfirm} /> ); };