You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

29 lines
852 B

import { useMemo } from 'react';
export type BrowserFeature = 'Web Bluetooth' | 'Web Serial' | 'Secure Context';
interface BrowserSupport {
supported: BrowserFeature[];
unsupported: BrowserFeature[];
}
export function useBrowserFeatureDetection(): BrowserSupport {
const support = useMemo(() => {
const features: [BrowserFeature, boolean][] = [
['Web Bluetooth', !!navigator.bluetooth],
['Web Serial', !!navigator.serial],
['Secure Context', window.location.protocol === 'https:' || window.location.hostname === 'localhost']
];
return features.reduce<BrowserSupport>(
(acc, [feature, isSupported]) => {
const list = isSupported ? acc.supported : acc.unsupported;
list.push(feature);
return acc;
},
{ supported: [], unsupported: [] }
);
}, []);
return support;
}