react-native-web-ui-components
Version:
[](https://github.com/CareLuLu/react-native-web-ui-components/issues/12) [](http
57 lines (53 loc) • 1.82 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { Provider as AmpProvider } from '../Amp';
import { Provider as ThemeProvider } from '../Theme';
import { Provider as HistoryProvider } from '../History';
import { ScreenContext, KeyboardContext, calculateScreen, calculateKeyboard } from '../Screen';
import { Helmet, style } from '../Helmet';
import baseCss from './style';
const throwHistoryError = () => {
throw new Error(`
UIProvider must receive \`history\` (see \`useHistory\` at https://github.com/ReactTraining/react-router). If you're not using \`react-router\` please provide equivalent navigation. For example:
\`\`\`
const navigation = {
location: { pathname: '' },
push: () => {},
replace: () => {},
};
\`\`\`
`);
};
const UIProvider = ({
amp,
theme,
children,
keyboard,
screen,
history
}) => /*#__PURE__*/React.createElement(HistoryProvider, {
value: history || throwHistoryError()
}, /*#__PURE__*/React.createElement(AmpProvider, {
value: amp
}, /*#__PURE__*/React.createElement(ThemeProvider, {
value: theme
}, /*#__PURE__*/React.createElement(KeyboardContext.Provider, {
value: keyboard
}, /*#__PURE__*/React.createElement(ScreenContext.Provider, {
value: screen
}, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Helmet, null, /*#__PURE__*/React.createElement("style", null, baseCss)), children))))));
UIProvider.propTypes = {
keyboard: PropTypes.number.isRequired,
screen: PropTypes.shape().isRequired,
amp: PropTypes.bool,
theme: PropTypes.shape(),
history: PropTypes.shape(),
children: PropTypes.node
};
UIProvider.defaultProps = {
amp: false,
theme: {},
history: null,
children: null
};
export default calculateKeyboard()(calculateScreen()(UIProvider));