UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

79 lines (78 loc) 3.56 kB
import { _ as _define_property } from "@swc/helpers/_/_define_property"; import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array"; import { useCallback, useEffect, useState } from "react"; export function useTableSticky(columns) { var rtl = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; var _useState = _sliced_to_array(useState(false), 2), isSticky = _useState[0], setIsSticky = _useState[1]; var _useState1 = _sliced_to_array(useState({}), 2), stickyColumnStyleMap = _useState1[0], setStickyColumnStyleMap = _useState1[1]; var _useState2 = _sliced_to_array(useState({}), 2), stickyColumnClassMap = _useState2[0], setStickyColumnClassMap = _useState2[1]; var _useState3 = _sliced_to_array(useState(0), 2), stickyLeftWidth = _useState3[0], setStickyLeftWidth = _useState3[1]; var _useState4 = _sliced_to_array(useState(0), 2), stickyRightWidth = _useState4[0], setStickyRightWidth = _useState4[1]; useEffect(function() { var leftColumns = columns.filter(function(item) { return item.fixed === 'left'; }) || []; var rightColumns = columns.filter(function(item) { return item.fixed === 'right'; }) || []; var middleColumns = columns.filter(function(item) { return !item.fixed; }) || []; var _columnStyleMap = {}; var _columnClassMap = {}; var _stickyLeftWidth = 0; var _stickyRightWidth = 0; // 左侧固定列 leftColumns.forEach(function(curr, index) { var dir = rtl ? 'right' : 'left'; var _obj; _columnStyleMap[curr.key] = (_obj = {}, _define_property(_obj, dir, _stickyLeftWidth || 0), _define_property(_obj, "width", curr.width || 'auto'), _obj); _columnClassMap[curr.key] = { 'nut-table-fixed-left': true, 'nut-table-fixed-left-last': index === leftColumns.length - 1 }; _stickyLeftWidth += curr.width || 0; }); middleColumns.forEach(function(curr) { _columnStyleMap[curr.key] = { width: curr.width || 'auto' }; }); // 右侧列 for(var i = rightColumns.length - 1; i >= 0; i--){ var curr = rightColumns[i]; var dir = rtl ? 'left' : 'right'; var _obj; _columnStyleMap[curr.key] = (_obj = {}, _define_property(_obj, dir, _stickyRightWidth || 0), _define_property(_obj, "width", curr.width || 'auto'), _obj); _columnClassMap[curr.key] = { 'nut-table-fixed-right': true, 'nut-table-fixed-right-first': i === 0 }; _stickyRightWidth += curr.width || 0; } setIsSticky(leftColumns.length > 0 || rightColumns.length > 0); setStickyColumnStyleMap(_columnStyleMap); setStickyColumnClassMap(_columnClassMap); setStickyLeftWidth(_stickyLeftWidth); setStickyRightWidth(_stickyRightWidth); }, [ columns ]); var getStickyStyle = useCallback(function(key) { return stickyColumnStyleMap[key]; }, [ stickyColumnStyleMap ]); var getStickyClass = useCallback(function(key) { return stickyColumnClassMap[key]; }, [ stickyColumnClassMap ]); return { isSticky: isSticky, stickyLeftWidth: stickyLeftWidth, stickyRightWidth: stickyRightWidth, getStickyClass: getStickyClass, getStickyStyle: getStickyStyle }; }