Collection.js 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import * as React from 'react';
  2. export var CollectionContext = /*#__PURE__*/React.createContext(null);
  3. /**
  4. * Collect all the resize event from children ResizeObserver
  5. */
  6. export function Collection(_ref) {
  7. var children = _ref.children,
  8. onBatchResize = _ref.onBatchResize;
  9. var resizeIdRef = React.useRef(0);
  10. var resizeInfosRef = React.useRef([]);
  11. var onCollectionResize = React.useContext(CollectionContext);
  12. var onResize = React.useCallback(function (size, element, data) {
  13. resizeIdRef.current += 1;
  14. var currentId = resizeIdRef.current;
  15. resizeInfosRef.current.push({
  16. size: size,
  17. element: element,
  18. data: data
  19. });
  20. Promise.resolve().then(function () {
  21. if (currentId === resizeIdRef.current) {
  22. onBatchResize === null || onBatchResize === void 0 || onBatchResize(resizeInfosRef.current);
  23. resizeInfosRef.current = [];
  24. }
  25. });
  26. // Continue bubbling if parent exist
  27. onCollectionResize === null || onCollectionResize === void 0 || onCollectionResize(size, element, data);
  28. }, [onBatchResize, onCollectionResize]);
  29. return /*#__PURE__*/React.createElement(CollectionContext.Provider, {
  30. value: onResize
  31. }, children);
  32. }