UNPKG

@ozen-ui/kit

Version:

React component library

45 lines (44 loc) 1.66 kB
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 }; }