1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = useVisibleRange;
|
7 |
|
8 | var _react = require("react");
|
9 |
|
10 | var DEFAULT_SIZE = {
|
11 | width: 0,
|
12 | height: 0,
|
13 | left: 0,
|
14 | top: 0,
|
15 | right: 0
|
16 | };
|
17 |
|
18 | function useVisibleRange(tabOffsets, containerSize, tabContentNodeSize, addNodeSize, _ref) {
|
19 | var tabs = _ref.tabs,
|
20 | tabPosition = _ref.tabPosition,
|
21 | rtl = _ref.rtl;
|
22 | var unit;
|
23 | var position;
|
24 | var transformSize;
|
25 |
|
26 | if (['top', 'bottom'].includes(tabPosition)) {
|
27 | unit = 'width';
|
28 | position = rtl ? 'right' : 'left';
|
29 | transformSize = Math.abs(containerSize.left);
|
30 | } else {
|
31 | unit = 'height';
|
32 | position = 'top';
|
33 | transformSize = -containerSize.top;
|
34 | }
|
35 |
|
36 | var basicSize = containerSize[unit];
|
37 | var tabContentSize = tabContentNodeSize[unit];
|
38 | var addSize = addNodeSize[unit];
|
39 | var mergedBasicSize = basicSize;
|
40 |
|
41 | if (tabContentSize + addSize > basicSize) {
|
42 | mergedBasicSize = basicSize - addSize;
|
43 | }
|
44 |
|
45 | return (0, _react.useMemo)(function () {
|
46 | if (!tabs.length) {
|
47 | return [0, 0];
|
48 | }
|
49 |
|
50 | var len = tabs.length;
|
51 | var endIndex = len;
|
52 |
|
53 | for (var i = 0; i < len; i += 1) {
|
54 | var offset = tabOffsets.get(tabs[i].key) || DEFAULT_SIZE;
|
55 |
|
56 | if (offset[position] + offset[unit] > transformSize + mergedBasicSize) {
|
57 | endIndex = i - 1;
|
58 | break;
|
59 | }
|
60 | }
|
61 |
|
62 | var startIndex = 0;
|
63 |
|
64 | for (var _i = len - 1; _i >= 0; _i -= 1) {
|
65 | var _offset = tabOffsets.get(tabs[_i].key) || DEFAULT_SIZE;
|
66 |
|
67 | if (_offset[position] < transformSize) {
|
68 | startIndex = _i + 1;
|
69 | break;
|
70 | }
|
71 | }
|
72 |
|
73 | return [startIndex, endIndex];
|
74 | }, [tabOffsets, transformSize, mergedBasicSize, tabPosition, tabs.map(function (tab) {
|
75 | return tab.key;
|
76 | }).join('_'), rtl]);
|
77 | } |
\ | No newline at end of file |