UNPKG

@nutui/nutui-react

Version:

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

89 lines (88 loc) 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "useTableSticky", { enumerable: true, get: function() { return useTableSticky; } }); var _define_property = require("@swc/helpers/_/_define_property"); var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array"); var _react = require("react"); function useTableSticky(columns) { var rtl = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; var _useState = (0, _sliced_to_array._)((0, _react.useState)(false), 2), isSticky = _useState[0], setIsSticky = _useState[1]; var _useState1 = (0, _sliced_to_array._)((0, _react.useState)({}), 2), stickyColumnStyleMap = _useState1[0], setStickyColumnStyleMap = _useState1[1]; var _useState2 = (0, _sliced_to_array._)((0, _react.useState)({}), 2), stickyColumnClassMap = _useState2[0], setStickyColumnClassMap = _useState2[1]; var _useState3 = (0, _sliced_to_array._)((0, _react.useState)(0), 2), stickyLeftWidth = _useState3[0], setStickyLeftWidth = _useState3[1]; var _useState4 = (0, _sliced_to_array._)((0, _react.useState)(0), 2), stickyRightWidth = _useState4[0], setStickyRightWidth = _useState4[1]; (0, _react.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 = {}, (0, _define_property._)(_obj, dir, _stickyLeftWidth || 0), (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 = {}, (0, _define_property._)(_obj, dir, _stickyRightWidth || 0), (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 = (0, _react.useCallback)(function(key) { return stickyColumnStyleMap[key]; }, [ stickyColumnStyleMap ]); var getStickyClass = (0, _react.useCallback)(function(key) { return stickyColumnClassMap[key]; }, [ stickyColumnClassMap ]); return { isSticky: isSticky, stickyLeftWidth: stickyLeftWidth, stickyRightWidth: stickyRightWidth, getStickyClass: getStickyClass, getStickyStyle: getStickyStyle }; }