UNPKG

3.67 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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
12var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
14var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
16var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
18var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
20var _react = _interopRequireDefault(require("react"));
21
22var _reactDom = _interopRequireDefault(require("react-dom"));
23
24var _propTypes = _interopRequireDefault(require("prop-types"));
25
26var _utils = require("@material-ui/utils");
27
28var _setRef = _interopRequireDefault(require("../utils/setRef"));
29
30/**
31 * ⚠️⚠️⚠️
32 * If you want the DOM element of a Material-UI component check out
33 * [FAQ: How can I access the DOM element?](/getting-started/faq/#how-can-i-access-the-dom-element)
34 * first.
35 *
36 * This component uses `findDOMNode` which is deprecated in React.StrictMode.
37 *
38 * Helper component to allow attaching a ref to a
39 * wrapped element to access the underlying DOM element.
40 *
41 * It's highly inspired by https://github.com/facebook/react/issues/11401#issuecomment-340543801.
42 * For example:
43 * ```jsx
44 * import React from 'react';
45 * import RootRef from '@material-ui/core/RootRef';
46 *
47 * function MyComponent() {
48 * const domRef = React.useRef();
49 *
50 * React.useEffect(() => {
51 * console.log(domRef.current); // DOM node
52 * }, []);
53 *
54 * return (
55 * <RootRef rootRef={domRef}>
56 * <SomeChildComponent />
57 * </RootRef>
58 * );
59 * }
60 * ```
61 */
62var RootRef =
63/*#__PURE__*/
64function (_React$Component) {
65 (0, _inherits2.default)(RootRef, _React$Component);
66
67 function RootRef() {
68 (0, _classCallCheck2.default)(this, RootRef);
69 return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(RootRef).apply(this, arguments));
70 }
71
72 (0, _createClass2.default)(RootRef, [{
73 key: "componentDidMount",
74 value: function componentDidMount() {
75 this.ref = _reactDom.default.findDOMNode(this);
76 (0, _setRef.default)(this.props.rootRef, this.ref);
77 }
78 }, {
79 key: "componentDidUpdate",
80 value: function componentDidUpdate(prevProps) {
81 var ref = _reactDom.default.findDOMNode(this);
82
83 if (prevProps.rootRef !== this.props.rootRef || this.ref !== ref) {
84 if (prevProps.rootRef !== this.props.rootRef) {
85 (0, _setRef.default)(prevProps.rootRef, null);
86 }
87
88 this.ref = ref;
89 (0, _setRef.default)(this.props.rootRef, this.ref);
90 }
91 }
92 }, {
93 key: "componentWillUnmount",
94 value: function componentWillUnmount() {
95 this.ref = null;
96 (0, _setRef.default)(this.props.rootRef, null);
97 }
98 }, {
99 key: "render",
100 value: function render() {
101 return this.props.children;
102 }
103 }]);
104 return RootRef;
105}(_react.default.Component);
106
107process.env.NODE_ENV !== "production" ? RootRef.propTypes = {
108 /**
109 * The wrapped element.
110 */
111 children: _propTypes.default.element.isRequired,
112
113 /**
114 * A ref that points to the first DOM node of the wrapped element.
115 */
116 rootRef: _utils.refType.isRequired
117} : void 0;
118
119if (process.env.NODE_ENV !== 'production') {
120 process.env.NODE_ENV !== "production" ? RootRef.propTypes = (0, _utils.exactProp)(RootRef.propTypes) : void 0;
121}
122
123var _default = RootRef;
124exports.default = _default;
\No newline at end of file