diff --git a/src/components/Dialog/NewDeviceDialog.tsx b/src/components/Dialog/NewDeviceDialog.tsx index e03668d7..e3330cbf 100644 --- a/src/components/Dialog/NewDeviceDialog.tsx +++ b/src/components/Dialog/NewDeviceDialog.tsx @@ -11,7 +11,7 @@ import { DialogHeader, DialogTitle, } from "@components/UI/Dialog.tsx"; -import { AlertCircle, } from "lucide-react"; +import { AlertCircle, InfoIcon, } from "lucide-react"; import { Tabs, TabsContent, @@ -29,9 +29,7 @@ export interface TabElementProps { export interface TabManifest { label: string; element: React.FC; - disabled: boolean; - disabledMessage: string; - disabledLink?: string; + isDisabled: boolean; } export interface NewDeviceProps { @@ -121,24 +119,21 @@ export const NewDeviceDialog = ({ { label: "HTTP", element: HTTP, - disabled: false, - disabledMessage: "Unsuported connection method", + isDisabled: false, }, { label: "Bluetooth", element: BLE, - disabled: + isDisabled: unsupported.includes("Web Bluetooth") || unsupported.includes("Secure Context"), - disabledMessage: "", }, { label: "Serial", element: Serial, - disabled: + isDisabled: unsupported.includes("Web Serial") || unsupported.includes("Secure Context"), - disabledMessage: "", }, ]; @@ -154,7 +149,6 @@ export const NewDeviceDialog = ({ {tab.label} @@ -162,16 +156,12 @@ export const NewDeviceDialog = ({ {tabs.map((tab) => ( - {tab.disabled ? ( -

- {tab.disabledMessage} -

- ) : ( +
+ {tab.isDisabled ? : null} onOpenChange(false)} /> - )} +
))} - diff --git a/src/components/PageComponents/Connect/Serial.tsx b/src/components/PageComponents/Connect/Serial.tsx index 38aab8fb..53c623cb 100644 --- a/src/components/PageComponents/Connect/Serial.tsx +++ b/src/components/PageComponents/Connect/Serial.tsx @@ -14,13 +14,13 @@ export const Serial = ({ closeDialog }: TabElementProps): JSX.Element => { const { setSelectedDevice } = useAppStore(); const updateSerialPortList = useCallback(async () => { - setSerialPorts(await navigator.serial.getPorts()); + setSerialPorts(await navigator?.serial.getPorts()); }, []); - navigator.serial.addEventListener("connect", () => { + navigator?.serial?.addEventListener("connect", () => { updateSerialPortList(); }); - navigator.serial.addEventListener("disconnect", () => { + navigator?.serial?.addEventListener("disconnect", () => { updateSerialPortList(); }); useEffect(() => { @@ -58,9 +58,8 @@ export const Serial = ({ closeDialog }: TabElementProps): JSX.Element => { await onConnect(port); }} > - {`# ${index} - ${usbVendorId ?? "UNK"} - ${ - usbProductId ?? "UNK" - }`} + {`# ${index} - ${usbVendorId ?? "UNK"} - ${usbProductId ?? "UNK" + }`} ); })} diff --git a/src/core/hooks/useBrowserFeatureDetection.ts b/src/core/hooks/useBrowserFeatureDetection.ts index 83a90a7a..a31b7b5a 100644 --- a/src/core/hooks/useBrowserFeatureDetection.ts +++ b/src/core/hooks/useBrowserFeatureDetection.ts @@ -10,8 +10,8 @@ interface BrowserSupport { export function useBrowserFeatureDetection(): BrowserSupport { const support = useMemo(() => { const features: [BrowserFeature, boolean][] = [ - ['Web Bluetooth', !!navigator.bluetooth], - ['Web Serial', !!navigator.serial], + ['Web Bluetooth', !!navigator?.bluetooth], + ['Web Serial', !!navigator?.serial], ['Secure Context', window.location.protocol === 'https:' || window.location.hostname === 'localhost'] ];