amis-rpc-design/node_modules/rc-tabs/es/hooks/useOffsets.js
2023-10-07 19:42:30 +08:00

36 lines
1.1 KiB
JavaScript

import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import { useMemo } from 'react';
var DEFAULT_SIZE = {
width: 0,
height: 0,
left: 0,
top: 0
};
export default function useOffsets(tabs, tabSizes, holderScrollWidth) {
return useMemo(function () {
var _tabs$;
var map = new Map();
var lastOffset = tabSizes.get((_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.key) || DEFAULT_SIZE;
var rightOffset = lastOffset.left + lastOffset.width;
for (var i = 0; i < tabs.length; i += 1) {
var key = tabs[i].key;
var data = tabSizes.get(key);
// Reuse last one when not exist yet
if (!data) {
var _tabs;
data = tabSizes.get((_tabs = tabs[i - 1]) === null || _tabs === void 0 ? void 0 : _tabs.key) || DEFAULT_SIZE;
}
var entity = map.get(key) || _objectSpread({}, data);
// Right
entity.right = rightOffset - entity.left - entity.width;
// Update entity
map.set(key, entity);
}
return map;
}, [tabs.map(function (tab) {
return tab.key;
}).join('_'), tabSizes, holderScrollWidth]);
}