UNPKG

2.06 kBJavaScriptView Raw
1'use strict';
2
3function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
5var slicedToArray = require('./slicedToArray-ef426d0f.js');
6var React = require('react');
7var React__default = _interopDefault(React);
8var index = require('./index-b0606964.js');
9var _extends = require('./extends-40571110.js');
10var objectWithoutProperties = require('./objectWithoutProperties-35db8ab0.js');
11
12var RootContext = React__default.createContext(null);
13
14function RootProvider(_ref) {
15 var children = _ref.children,
16 props = objectWithoutProperties._objectWithoutProperties(_ref, ["children"]);
17
18 var _useState = React.useState(null),
19 _useState2 = slicedToArray._slicedToArray(_useState, 2),
20 element = _useState2[0],
21 setElement = _useState2[1];
22
23 var handleRef = React.useCallback(function (element) {
24 if (element !== null) {
25 setElement(element);
26 }
27 }, []);
28 return /*#__PURE__*/React__default.createElement(RootContext.Provider, {
29 value: element
30 }, /*#__PURE__*/React__default.createElement("div", _extends._extends({
31 ref: handleRef
32 }, props),
33 /*
34 We don’t render the children tree until the element is present, at
35 the second rendering.
36 The reason why it is needed is because element references are
37 assigned after the first rendering, and we don’t want to let
38 `<Root />` consumers having to deal with the reference being `null`
39 at the first rendering.
40 This way, we can guarantee that if a consumer gets `null` rather
41 than the element, it’s because <Root.Provider /> has to be defined
42 at an upper level.
43 */
44 element ? children : null));
45}
46
47RootProvider.propTypes = {
48 children: index.PropTypes.node
49};
50
51function Root(props) {
52 return /*#__PURE__*/React__default.createElement(RootContext.Consumer, props);
53}
54
55Root.Provider = RootProvider;
56
57var useRoot = function useRoot() {
58 return React.useContext(RootContext);
59};
60
61exports.Root = Root;
62exports.useRoot = useRoot;
63//# sourceMappingURL=index-5aaa52c3.js.map