feat(platform): add ability to override platform detection methods (#23915)

resolves #19737
This commit is contained in:
William Martin
2021-09-14 15:49:04 -04:00
committed by GitHub
parent 414f24685c
commit 45cabae04b
8 changed files with 45 additions and 10 deletions

View File

@ -1,3 +1,4 @@
import { config } from '../global/config';
export type Platforms = keyof typeof PLATFORMS_MAP;
@ -29,8 +30,13 @@ export const setupPlatforms = (win: any = window) => {
return platforms;
};
const detectPlatforms = (win: Window) =>
(Object.keys(PLATFORMS_MAP) as Platforms[]).filter(p => PLATFORMS_MAP[p](win));
const detectPlatforms = (win: Window) => {
const customPlatformMethods = config.get('platform');
return (Object.keys(PLATFORMS_MAP) as Platforms[]).filter(p => {
const customMethod = customPlatformMethods && customPlatformMethods[p];
return typeof customMethod === 'function' ? customMethod(win) : PLATFORMS_MAP[p](win);
});
}
const isMobileWeb = (win: Window): boolean =>
isMobile(win) && !isHybrid(win);
@ -117,6 +123,8 @@ export const testUserAgent = (win: Window, expr: RegExp) =>
const matchMedia = (win: Window, query: string): boolean =>
win.matchMedia && win.matchMedia(query).matches;
export type PlatformConfig = Partial<typeof PLATFORMS_MAP>;
const PLATFORMS_MAP = {
'ipad': isIpad,
'iphone': isIphone,