@ozen-ui/kit
Version:
React component library
45 lines (44 loc) • 1.66 kB
JavaScript
import { __read } from "tslib";
import { useState } from 'react';
import { isServer } from '../../constants/environment';
import { useIsomorphicEffect } from '../useIsomorphicEffect';
function getPlatform(userAgent) {
var iosPlatforms = /iphone|ipad|ipod/i.test(userAgent);
var windowsPlatforms = /windows/i.test(userAgent);
var macosPlatforms = /macintosh|macintel|macppc|mac68k/i.test(userAgent);
var linuxPlatforms = /linux/i.test(userAgent);
var androidPlatforms = /android/i.test(userAgent);
if (iosPlatforms) {
return 'ios';
}
if (macosPlatforms) {
return 'macos';
}
if (windowsPlatforms) {
return 'windows';
}
/** Android обязательно должен быть перед Linux т.к Android использует ядро Linux и определяется двумя ОС */
if (androidPlatforms) {
return 'android';
}
if (linuxPlatforms) {
return 'linux';
}
return 'undetermined';
}
function detectIsMobile(userAgent) {
return Boolean(userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i));
}
export function useDeviceDetect() {
var _a = __read(useState(false), 2), isMobile = _a[0], setIsMobile = _a[1];
var _b = __read(useState('undetermined'), 2), platform = _b[0], setPlatform = _b[1];
useIsomorphicEffect(function () {
if (isServer) {
return;
}
var userAgent = window.navigator.userAgent;
setPlatform(getPlatform(userAgent));
setIsMobile(detectIsMobile(userAgent));
}, []);
return { isMobile: isMobile, platform: platform };
}