-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBrowser.js
90 lines (79 loc) · 2.41 KB
/
Browser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import React from 'react';
import PropTypes from 'prop-types';
import browserCheck from './browser-check';
const getBrowsersArr = () => {
const browsers = [
{ name: 'mobile', isCurrentBrowser: browserCheck.isMobile() },
{ name: 'chrome', isCurrentBrowser: browserCheck.isChrome() },
{ name: 'firefox', isCurrentBrowser: browserCheck.isFirefox() },
{ name: 'safari', isCurrentBrowser: browserCheck.isSafari() },
{ name: 'opera', isCurrentBrowser: browserCheck.isOpera() },
{ name: 'ie', isCurrentBrowser: browserCheck.isIE() },
{ name: 'edge', isCurrentBrowser: browserCheck.isEdge() },
{ name: 'blink', isCurrentBrowser: browserCheck.isBlink() }
];
return browsers;
};
const shouldRenderForBrowser = (props, browsers) => {
const allBrowsers = browserCheck.allBrowsers;
let restrictedBrowsers = [];
let allowedBrowsers = [];
const only = props.only === true || typeof props.only === 'undefined';
const except = props.except === true;
if (except) {
allBrowsers.forEach((browser) => {
if (props[browser]) restrictedBrowsers.push(browser);
else allowedBrowsers.push(browser);
});
} else if (only) {
allBrowsers.forEach((browser) => {
if (props[browser]) allowedBrowsers.push(browser);
else restrictedBrowsers.push(browser);
});
} else {
// never goes here
allowedBrowsers = allBrowsers.slice();
}
const currentBrowser = browsers.find(
(browser) => browser.isCurrentBrowser === true
);
if (currentBrowser && restrictedBrowsers.includes(currentBrowser.name))
return false;
else if (currentBrowser && allowedBrowsers.includes(currentBrowser.name))
return true;
else return false;
};
const Browser = (props) => {
const { children } = props;
const browsers = getBrowsersArr();
const shouldRender = shouldRenderForBrowser(props, browsers);
if (shouldRender) {
return <div className="browser">{children}</div>;
} else {
return null;
}
};
Browser.propTypes = {
chrome: PropTypes.bool,
firefox: PropTypes.bool,
safari: PropTypes.bool,
opera: PropTypes.bool,
ie: PropTypes.bool,
edge: PropTypes.bool,
blink: PropTypes.bool,
mobile: PropTypes.bool,
except: PropTypes.bool,
only: PropTypes.bool,
children: PropTypes.node
};
Browser.defaultProps = {
chrome: false,
firefox: false,
safari: false,
opera: false,
ie: false,
edge: false,
mobile: false,
blink: false
};
export default Browser;