Browse Source

Make Unsupported Connection Links Clickable (#55)

* Initial commit

* Required disabled message for TabType

* Fixed build failure due to required types

* Revert setting changes
pull/66/head
Adam McQuilkin 4 years ago
committed by GitHub
parent
commit
81216a5d0d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      .vscode/settings.json
  2. 9
      src/components/NewDevice.tsx
  3. 33
      src/components/layout/page/TabbedContent.tsx

2
.vscode/settings.json

@ -3,4 +3,4 @@
"editor.quickSuggestions": { "editor.quickSuggestions": {
"strings": true "strings": true
} }
} }

9
src/components/NewDevice.tsx

@ -14,22 +14,23 @@ export const NewDevice = () => {
icon: <FiBluetooth className="h-4" />, icon: <FiBluetooth className="h-4" />,
element: BLE, element: BLE,
disabled: !navigator.bluetooth, disabled: !navigator.bluetooth,
disabledMessage: disabledMessage: "Web Bluetooth is currently only supported by Chromium-based browsers",
"WebBluetooth is currently only supported by Chromium based browsers: https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API#browser_compatibility", disabledLink: "https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API#browser_compatibility"
}, },
{ {
name: "HTTP", name: "HTTP",
icon: <FiWifi className="h-4" />, icon: <FiWifi className="h-4" />,
element: HTTP, element: HTTP,
disabled: false, disabled: false,
disabledMessage: "Unsuported connection method"
}, },
{ {
name: "Serial", name: "Serial",
icon: <FiTerminal className="h-4" />, icon: <FiTerminal className="h-4" />,
element: Serial, element: Serial,
disabled: !navigator.serial, disabled: !navigator.serial,
disabledMessage: disabledMessage: "Web Serial is currently only supported by Chromium-based browsers",
"WebSerial is currently only supported by Chromium based browsers: https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API#browser_compatibility", disabledLink: "https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API#browser_compatibility"
}, },
]); ]);

33
src/components/layout/page/TabbedContent.tsx

@ -10,6 +10,7 @@ export interface TabType {
element: () => JSX.Element; element: () => JSX.Element;
disabled?: boolean; disabled?: boolean;
disabledMessage?: string; disabledMessage?: string;
disabledLink?: string;
} }
export interface TabbedContentProps { export interface TabbedContentProps {
@ -28,11 +29,10 @@ export const TabbedContent = ({
<Tab key={index}> <Tab key={index}>
{({ selected }) => ( {({ selected }) => (
<div <div
className={`flex h-10 cursor-pointer gap-3 rounded-md px-3 text-sm font-medium ${ className={`flex h-10 cursor-pointer gap-3 rounded-md px-3 text-sm font-medium ${selected
selected ? "bg-gray-100 text-gray-700"
? "bg-gray-100 text-gray-700" : "text-gray-500 hover:text-gray-700"
: "text-gray-500 hover:text-gray-700" }
}
`} `}
> >
{entry.icon && ( {entry.icon && (
@ -55,7 +55,28 @@ export const TabbedContent = ({
{!entry.disabled ? ( {!entry.disabled ? (
<entry.element /> <entry.element />
) : ( ) : (
<Mono>{entry.disabledMessage}</Mono> <div>
<Mono>
{entry.disabledMessage || "This tab is disabled"}.
{' '}
{entry.disabledLink && (
<>
Click
{' '}
<a
className="underline"
target="_blank"
rel="noreferrer"
href={entry.disabledLink}
>
here
</a>
{' '}
for more information.
</>
)}
</Mono>
</div>
)} )}
</Tab.Panel> </Tab.Panel>
))} ))}

Loading…
Cancel
Save