UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

127 lines (123 loc) 5.78 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; var _excluded = ["children", "pref"]; import React, { useRef, useMemo, useEffect } from 'react'; import { useStore } from "./context"; import useForkRef from "../hooks/useForkRef"; import { omit } from 'lodash'; var useOptions = function useOptions(_ref) { var _sliceColumns$centerC4; var children = _ref.children, ref = _ref.ref, trRef = _ref.trRef; var _useStore = useStore(), state = _useStore.state, dispatch = _useStore.dispatch, instance = _useStore.instance; var virtualItems = instance.columnVirtual.virtualItems; var rowHeight = state.rowHeight, totalLen = state.totalLen; var sliceColumns = useMemo(function () { var _children$reduce; return children === null || children === void 0 ? void 0 : (_children$reduce = children.reduce) === null || _children$reduce === void 0 ? void 0 : _children$reduce.call(children, function (pre, cur) { var _cur$props, _cur$props2; if (typeof ((_cur$props = cur.props) === null || _cur$props === void 0 ? void 0 : _cur$props.fixLeft) === 'number') { pre.leftColumns.push(cur); return pre; } if (typeof ((_cur$props2 = cur.props) === null || _cur$props2 === void 0 ? void 0 : _cur$props2.fixRight) === 'number') { pre.rightColumns.push(cur); return pre; } pre.centerColumns.push(cur); return pre; }, { leftColumns: [], rightColumns: [], centerColumns: [] }); }, [children]); useEffect(function () { dispatch({ type: 'changeSliceColumns', sliceColumns: sliceColumns }); }, [sliceColumns]); // 非固定列长度 var centerColumnsLen = useMemo(function () { var _sliceColumns$centerC, _sliceColumns$centerC2; return (_sliceColumns$centerC = sliceColumns === null || sliceColumns === void 0 ? void 0 : (_sliceColumns$centerC2 = sliceColumns.centerColumns) === null || _sliceColumns$centerC2 === void 0 ? void 0 : _sliceColumns$centerC2.length) !== null && _sliceColumns$centerC !== void 0 ? _sliceColumns$centerC : 0; }, [sliceColumns]); useEffect(function () { if (state.columnsLen !== centerColumnsLen) { dispatch({ type: 'changeColumnsLen', columnsLen: centerColumnsLen !== null && centerColumnsLen !== void 0 ? centerColumnsLen : 0 }); } }, [centerColumnsLen, dispatch, state.columnsLen]); // 获取行的高度 useEffect(function () { var initHeight = function initHeight(tempRef) { var _tempRef$current; if (tempRef !== null && tempRef !== void 0 && (_tempRef$current = tempRef.current) !== null && _tempRef$current !== void 0 && _tempRef$current.offsetHeight && !rowHeight && totalLen) { var _tempRef$current$offs, _tempRef$current2; var tempRowHeight = (_tempRef$current$offs = tempRef === null || tempRef === void 0 ? void 0 : (_tempRef$current2 = tempRef.current) === null || _tempRef$current2 === void 0 ? void 0 : _tempRef$current2.offsetHeight) !== null && _tempRef$current$offs !== void 0 ? _tempRef$current$offs : 0; dispatch({ type: 'initHeight', rowHeight: tempRowHeight + 1 }); } }; initHeight(Object.prototype.hasOwnProperty.call(ref, 'current') ? ref : trRef); }, [trRef, dispatch, rowHeight, totalLen, ref]); // 横向单元格合并 var leftColSpan = useMemo(function () { var _virtualItems$; return (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.index; }, [virtualItems]); // 右侧隐藏数量 var rightColSpan = useMemo(function () { var _sliceColumns$centerC3; return (sliceColumns === null || sliceColumns === void 0 ? void 0 : (_sliceColumns$centerC3 = sliceColumns.centerColumns) === null || _sliceColumns$centerC3 === void 0 ? void 0 : _sliceColumns$centerC3.length) - (virtualItems === null || virtualItems === void 0 ? void 0 : virtualItems.length) - leftColSpan || 0; }, [sliceColumns === null || sliceColumns === void 0 ? void 0 : (_sliceColumns$centerC4 = sliceColumns.centerColumns) === null || _sliceColumns$centerC4 === void 0 ? void 0 : _sliceColumns$centerC4.length, virtualItems.length, leftColSpan]); return _objectSpread(_objectSpread({ virtualItems: virtualItems }, sliceColumns), {}, { leftColSpan: leftColSpan, rightColSpan: rightColSpan }); }; var VirtualRow = /*#__PURE__*/React.memo(function (_ref2, ref) { var children = _ref2.children, pref = _ref2.pref, resetProps = _objectWithoutProperties(_ref2, _excluded); var trRef = useRef(null); var clearProps = omit(resetProps, ['dataKey', 'pushAllForm']); var _useOptions = useOptions({ children: children, ref: ref, trRef: trRef }), virtualItems = _useOptions.virtualItems, leftColumns = _useOptions.leftColumns, centerColumns = _useOptions.centerColumns, rightColumns = _useOptions.rightColumns, leftColSpan = _useOptions.leftColSpan, rightColSpan = _useOptions.rightColSpan; return /*#__PURE__*/React.createElement("tr", _extends({}, clearProps, { ref: useForkRef(pref, trRef) }), leftColumns, !!leftColSpan && /*#__PURE__*/React.createElement("td", { key: "leftColSpan", colSpan: leftColSpan }), virtualItems.map(function (virtualCol) { return /*#__PURE__*/React.cloneElement(centerColumns[virtualCol.index], { ref: virtualCol.measureRef }); }), !!rightColSpan && /*#__PURE__*/React.createElement("td", { key: "rightColSpan", colSpan: rightColSpan }), rightColumns); }); export default VirtualRow;