useStickyOffsets.js 941 B

12345678910111213141516171819202122232425262728293031
  1. import { useMemo } from 'react';
  2. /**
  3. * Get sticky column offset width
  4. */
  5. function useStickyOffsets(colWidths, flattenColumns, direction) {
  6. var stickyOffsets = useMemo(function () {
  7. var columnCount = flattenColumns.length;
  8. var getOffsets = function getOffsets(startIndex, endIndex, offset) {
  9. var offsets = [];
  10. var total = 0;
  11. for (var i = startIndex; i !== endIndex; i += offset) {
  12. offsets.push(total);
  13. if (flattenColumns[i].fixed) {
  14. total += colWidths[i] || 0;
  15. }
  16. }
  17. return offsets;
  18. };
  19. var startOffsets = getOffsets(0, columnCount, 1);
  20. var endOffsets = getOffsets(columnCount - 1, -1, -1).reverse();
  21. return direction === 'rtl' ? {
  22. left: endOffsets,
  23. right: startOffsets
  24. } : {
  25. left: startOffsets,
  26. right: endOffsets
  27. };
  28. }, [colWidths, flattenColumns, direction]);
  29. return stickyOffsets;
  30. }
  31. export default useStickyOffsets;