import type React from "react"; import { useState } from "react"; import { Heading, majorScale, Pane, Paragraph, SideSheet, Tab, Tablist, } from "evergreen-ui"; import type { IconType } from "react-icons"; import { FiBluetooth, FiTerminal, FiWifi } from "react-icons/fi"; import { BLE } from "../connect/BLE.js"; import { HTTP } from "../connect/HTTP.js"; import { Serial } from "../connect/Serial.js"; export interface NewDeviceProps { open: boolean; onClose: () => void; } export interface CloseProps { close: () => void; } export type connType = "http" | "ble" | "serial"; export interface Tab { name: connType; icon: IconType; displayName: string; element: ({ close }: CloseProps) => JSX.Element; disabled?: boolean; } export const NewDevice = ({ open, onClose }: NewDeviceProps) => { const [selectedConnType, setSelectedConnType] = useState("ble"); const tabs: Tab[] = [ { name: "ble", icon: FiBluetooth, displayName: "BLE", element: BLE, disabled: !navigator.bluetooth, }, { name: "http", icon: FiWifi, displayName: "HTTP", element: HTTP, }, { name: "serial", icon: FiTerminal, displayName: "Serial", element: Serial, disabled: !navigator.serial, }, ]; return ( Connect new device Optional description or sub title {tabs.map((TabData, index) => ( setSelectedConnType(TabData.name)} disabled={TabData.disabled} > <> {TabData.displayName} ))} {tabs.map((TabData, index) => ( {!TabData.disabled && } ))} ); };