UNPKG

2.4 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9
10var _react = _interopRequireDefault(require("react"));
11
12var _propTypes = _interopRequireDefault(require("prop-types"));
13
14var _utils = require("@material-ui/utils");
15
16var useEnhancedEffect = typeof window !== 'undefined' && process.env.NODE_ENV !== 'test' ? _react.default.useLayoutEffect : _react.default.useEffect;
17/**
18 * NoSsr purposely removes components from the subject of Server Side Rendering (SSR).
19 *
20 * This component can be useful in a variety of situations:
21 * - Escape hatch for broken dependencies not supporting SSR.
22 * - Improve the time-to-first paint on the client by only rendering above the fold.
23 * - Reduce the rendering time on the server.
24 * - Under too heavy server load, you can turn on service degradation.
25 */
26
27function NoSsr(props) {
28 var children = props.children,
29 _props$defer = props.defer,
30 defer = _props$defer === void 0 ? false : _props$defer,
31 _props$fallback = props.fallback,
32 fallback = _props$fallback === void 0 ? null : _props$fallback;
33
34 var _React$useState = _react.default.useState(false),
35 mountedState = _React$useState[0],
36 setMountedState = _React$useState[1];
37
38 useEnhancedEffect(function () {
39 if (!defer) {
40 setMountedState(true);
41 }
42 }, [defer]);
43
44 _react.default.useEffect(function () {
45 if (defer) {
46 setMountedState(true);
47 }
48 }, [defer]); // We need the Fragment here to force react-docgen to recognise NoSsr as a component.
49
50
51 return _react.default.createElement(_react.default.Fragment, null, mountedState ? children : fallback);
52}
53
54process.env.NODE_ENV !== "production" ? NoSsr.propTypes = {
55 /**
56 * You can wrap a node.
57 */
58 children: _propTypes.default.node.isRequired,
59
60 /**
61 * If `true`, the component will not only prevent server-side rendering.
62 * It will also defer the rendering of the children into a different screen frame.
63 */
64 defer: _propTypes.default.bool,
65
66 /**
67 * The fallback content to display.
68 */
69 fallback: _propTypes.default.node
70} : void 0;
71
72if (process.env.NODE_ENV !== 'production') {
73 // eslint-disable-next-line
74 NoSsr['propTypes' + ''] = (0, _utils.exactProp)(NoSsr.propTypes);
75}
76
77var _default = NoSsr;
78exports.default = _default;
\No newline at end of file