import type { TabElementProps } from "../../Dialog/NewDeviceDialog.tsx"; import { Button } from "@components/UI/Button.tsx"; import { Mono } from "@components/generic/Mono.tsx"; import { useAppStore } from "@core/stores/appStore.ts"; import { useDeviceStore } from "@core/stores/deviceStore.ts"; import { subscribeAll } from "@core/subscriptions.ts"; import { randId } from "@core/utils/randId.ts"; import { MeshDevice } from "@meshtastic/core"; import { TransportWebSerial } from "@meshtastic/transport-web-serial"; import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useMessageStore } from "../../../core/stores/messageStore/index.ts"; export const Serial = ( { closeDialog }: TabElementProps, ) => { const [connectionInProgress, setConnectionInProgress] = useState(false); const [serialPorts, setSerialPorts] = useState([]); const { addDevice } = useDeviceStore(); const messageStore = useMessageStore(); const { setSelectedDevice } = useAppStore(); const { t } = useTranslation(); const updateSerialPortList = useCallback(async () => { setSerialPorts(await navigator?.serial.getPorts()); }, []); navigator?.serial?.addEventListener("connect", () => { updateSerialPortList(); }); navigator?.serial?.addEventListener("disconnect", () => { updateSerialPortList(); }); useEffect(() => { updateSerialPortList(); }, [updateSerialPortList]); const onConnect = async (port: SerialPort) => { const id = randId(); const device = addDevice(id); setSelectedDevice(id); const transport = await TransportWebSerial.createFromPort(port); const connection = new MeshDevice(transport, id); connection.configure(); device.addConnection(connection); subscribeAll(device, connection, messageStore); closeDialog(); }; return (
{serialPorts.map((port, index) => { const { usbProductId, usbVendorId } = port.getInfo(); const vendor = usbVendorId ?? t("unknown.shortName"); const product = usbProductId ?? t("unknown.shortName"); return ( ); })} {serialPorts.length === 0 && ( {t("newDeviceDialog.serialConnection.noDevicesPaired")} )}
); };