import type React from 'react'; import { useCallback, useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { FiArrowRightCircle } from 'react-icons/fi'; import { Button } from '@components/generic/button/Button'; import { IconButton } from '@components/generic/button/IconButton'; import { connection, setConnection } from '@core/connection'; import { connType, setConnectionParams } from '@core/slices/appSlice'; import { useAppDispatch } from '@hooks/useAppDispatch'; import { ISerialConnection } from '@meshtastic/meshtasticjs'; export interface SerialProps { connecting: boolean; } export const Serial = ({ connecting }: SerialProps): JSX.Element => { const [serialDevices, setSerialDevices] = useState([]); const dispatch = useAppDispatch(); const { handleSubmit } = useForm<{ device?: SerialPort; }>(); const updateSerialDeviceList = useCallback(async (): Promise => { const serial = new ISerialConnection(); const devices = await serial.getPorts(); setSerialDevices(devices); }, []); useEffect(() => { void updateSerialDeviceList(); }, [updateSerialDeviceList]); const onSubmit = handleSubmit(async () => { await setConnection(connType.SERIAL); }); return (
{serialDevices.length > 0 ? ( serialDevices.map((device, index) => (

Vendor: {device.getInfo().usbVendorId}

Device: {device.getInfo().usbProductId}

=> { dispatch( setConnectionParams({ type: connType.SERIAL, params: { port: device, }, }), ); await setConnection(connType.SERIAL); }} disabled={connecting} icon={} />
)) ) : (

No previously connected devices found

)}
); };