You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.7 KiB
77 lines
1.7 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = useVisibleRange;
|
|
|
|
var _react = require("react");
|
|
|
|
var DEFAULT_SIZE = {
|
|
width: 0,
|
|
height: 0,
|
|
left: 0,
|
|
top: 0,
|
|
right: 0
|
|
};
|
|
|
|
function useVisibleRange(tabOffsets, containerSize, tabContentNodeSize, addNodeSize, _ref) {
|
|
var tabs = _ref.tabs,
|
|
tabPosition = _ref.tabPosition,
|
|
rtl = _ref.rtl;
|
|
var unit;
|
|
var position;
|
|
var transformSize;
|
|
|
|
if (['top', 'bottom'].includes(tabPosition)) {
|
|
unit = 'width';
|
|
position = rtl ? 'right' : 'left';
|
|
transformSize = Math.abs(containerSize.left);
|
|
} else {
|
|
unit = 'height';
|
|
position = 'top';
|
|
transformSize = -containerSize.top;
|
|
}
|
|
|
|
var basicSize = containerSize[unit];
|
|
var tabContentSize = tabContentNodeSize[unit];
|
|
var addSize = addNodeSize[unit];
|
|
var mergedBasicSize = basicSize;
|
|
|
|
if (tabContentSize + addSize > basicSize) {
|
|
mergedBasicSize = basicSize - addSize;
|
|
}
|
|
|
|
return (0, _react.useMemo)(function () {
|
|
if (!tabs.length) {
|
|
return [0, 0];
|
|
}
|
|
|
|
var len = tabs.length;
|
|
var endIndex = len;
|
|
|
|
for (var i = 0; i < len; i += 1) {
|
|
var offset = tabOffsets.get(tabs[i].key) || DEFAULT_SIZE;
|
|
|
|
if (offset[position] + offset[unit] > transformSize + mergedBasicSize) {
|
|
endIndex = i - 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
var startIndex = 0;
|
|
|
|
for (var _i = len - 1; _i >= 0; _i -= 1) {
|
|
var _offset = tabOffsets.get(tabs[_i].key) || DEFAULT_SIZE;
|
|
|
|
if (_offset[position] < transformSize) {
|
|
startIndex = _i + 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return [startIndex, endIndex];
|
|
}, [tabOffsets, transformSize, mergedBasicSize, tabPosition, tabs.map(function (tab) {
|
|
return tab.key;
|
|
}).join('_'), rtl]);
|
|
} |