useOffsets.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import { useMemo } from 'react';
  3. var DEFAULT_SIZE = {
  4. width: 0,
  5. height: 0,
  6. left: 0,
  7. top: 0
  8. };
  9. export default function useOffsets(tabs, tabSizes, holderScrollWidth) {
  10. return useMemo(function () {
  11. var _tabs$;
  12. var map = new Map();
  13. var lastOffset = tabSizes.get((_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.key) || DEFAULT_SIZE;
  14. var rightOffset = lastOffset.left + lastOffset.width;
  15. for (var i = 0; i < tabs.length; i += 1) {
  16. var key = tabs[i].key;
  17. var data = tabSizes.get(key);
  18. // Reuse last one when not exist yet
  19. if (!data) {
  20. var _tabs;
  21. data = tabSizes.get((_tabs = tabs[i - 1]) === null || _tabs === void 0 ? void 0 : _tabs.key) || DEFAULT_SIZE;
  22. }
  23. var entity = map.get(key) || _objectSpread({}, data);
  24. // Right
  25. entity.right = rightOffset - entity.left - entity.width;
  26. // Update entity
  27. map.set(key, entity);
  28. }
  29. return map;
  30. }, [tabs.map(function (tab) {
  31. return tab.key;
  32. }).join('_'), tabSizes, holderScrollWidth]);
  33. }