MutateObserver.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  8. var _react = _interopRequireDefault(require("react"));
  9. var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
  10. var _ref = require("rc-util/lib/ref");
  11. var _findDOMNode = _interopRequireDefault(require("rc-util/lib/Dom/findDOMNode"));
  12. var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent"));
  13. var _wrapper = _interopRequireDefault(require("./wrapper"));
  14. var _useMutateObserver = _interopRequireDefault(require("./useMutateObserver"));
  15. var MutateObserver = function MutateObserver(props) {
  16. var children = props.children,
  17. options = props.options,
  18. _props$onMutate = props.onMutate,
  19. onMutate = _props$onMutate === void 0 ? function () {} : _props$onMutate;
  20. var callback = (0, _useEvent.default)(onMutate);
  21. var wrapperRef = _react.default.useRef(null);
  22. var elementRef = _react.default.useRef(null);
  23. var canRef = /*#__PURE__*/_react.default.isValidElement(children) && (0, _ref.supportRef)(children);
  24. var mergedRef = (0, _ref.useComposeRef)(elementRef, canRef ? children.ref : null);
  25. var _React$useState = _react.default.useState(null),
  26. _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
  27. target = _React$useState2[0],
  28. setTarget = _React$useState2[1];
  29. (0, _useMutateObserver.default)(target, callback, options);
  30. // =========================== Effect ===========================
  31. // Bind target
  32. (0, _useLayoutEffect.default)(function () {
  33. setTarget((0, _findDOMNode.default)(elementRef.current) || (0, _findDOMNode.default)(wrapperRef.current));
  34. });
  35. // =========================== Render ===========================
  36. if (!children) {
  37. if (process.env.NODE_ENV !== 'production') {
  38. console.error('MutationObserver need children props');
  39. }
  40. return null;
  41. }
  42. return /*#__PURE__*/_react.default.createElement(_wrapper.default, {
  43. ref: wrapperRef
  44. }, canRef ? /*#__PURE__*/_react.default.cloneElement(children, {
  45. ref: mergedRef
  46. }) : children);
  47. };
  48. var _default = MutateObserver;
  49. exports.default = _default;