useVisibleRange.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { useMemo } from 'react';
  2. var DEFAULT_SIZE = {
  3. width: 0,
  4. height: 0,
  5. left: 0,
  6. top: 0,
  7. right: 0
  8. };
  9. export default function useVisibleRange(tabOffsets, visibleTabContentValue, transform, tabContentSizeValue, addNodeSizeValue, operationNodeSizeValue, _ref) {
  10. var tabs = _ref.tabs,
  11. tabPosition = _ref.tabPosition,
  12. rtl = _ref.rtl;
  13. var charUnit;
  14. var position;
  15. var transformSize;
  16. if (['top', 'bottom'].includes(tabPosition)) {
  17. charUnit = 'width';
  18. position = rtl ? 'right' : 'left';
  19. transformSize = Math.abs(transform);
  20. } else {
  21. charUnit = 'height';
  22. position = 'top';
  23. transformSize = -transform;
  24. }
  25. return useMemo(function () {
  26. if (!tabs.length) {
  27. return [0, 0];
  28. }
  29. var len = tabs.length;
  30. var endIndex = len;
  31. for (var i = 0; i < len; i += 1) {
  32. var offset = tabOffsets.get(tabs[i].key) || DEFAULT_SIZE;
  33. if (Math.floor(offset[position] + offset[charUnit]) > Math.floor(transformSize + visibleTabContentValue)) {
  34. endIndex = i - 1;
  35. break;
  36. }
  37. }
  38. var startIndex = 0;
  39. for (var _i = len - 1; _i >= 0; _i -= 1) {
  40. var _offset = tabOffsets.get(tabs[_i].key) || DEFAULT_SIZE;
  41. if (_offset[position] < transformSize) {
  42. startIndex = _i + 1;
  43. break;
  44. }
  45. }
  46. return startIndex > endIndex ? [0, -1] : [startIndex, endIndex];
  47. }, [tabOffsets, visibleTabContentValue, tabContentSizeValue, addNodeSizeValue, operationNodeSizeValue, transformSize, tabPosition, tabs.map(function (tab) {
  48. return tab.key;
  49. }).join('_'), rtl]);
  50. }