UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

175 lines (133 loc) 5.93 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _mobx = require("mobx"); var _mobxReactLite = require("mobx-react-lite"); var _reactBeautifulDnd = require("react-beautiful-dnd"); var _omit = _interopRequireDefault(require("lodash/omit")); var _UnitConvertor = require("../../../lib/_util/UnitConvertor"); var _spin = _interopRequireDefault(require("../spin")); var _TableContext = _interopRequireDefault(require("./TableContext")); var _transform = require("../_util/transform"); var _mergeProps = _interopRequireDefault(require("../_util/mergeProps")); var _utils = require("./utils"); var _Table = require("./Table"); var _hooks = require("./hooks"); function getRowHeight(tableStore, dataSet, draggableId) { var rowMetaData = tableStore.rowMetaData; if (rowMetaData) { var record = dataSet.find(function (r) { return String(r.key) === String(draggableId); }); if (record) { var metaData = rowMetaData.find(function (meta) { return meta.record === record; }); if (metaData) { return metaData.height; } } } return tableStore.virtualRowHeight; } var VirtualWrapper = function VirtualWrapper(props) { var children = props.children; var _useContext = (0, _react.useContext)(_TableContext["default"]), tableStore = _useContext.tableStore, prefixCls = _useContext.prefixCls, virtualSpin = _useContext.virtualSpin, spinProps = _useContext.spinProps, isTree = _useContext.isTree, rowDragRender = _useContext.rowDragRender, dataSet = _useContext.dataSet; var virtualTop = tableStore.virtualTop, virtualHeight = tableStore.virtualHeight, _tableStore$scrolling = tableStore.scrolling, scrolling = _tableStore$scrolling === void 0 ? false : _tableStore$scrolling; var _useState = (0, _react.useState)(virtualHeight), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), height = _useState2[0], setHeight = _useState2[1]; (0, _react.useEffect)((0, _mobx.action)(function () { if (virtualHeight !== height) { var lastScrollTop = tableStore.lastScrollTop, tableBodyWrap = tableStore.node.tableBodyWrap; if (lastScrollTop && tableBodyWrap) { var scrollTop = Math.max(0, virtualHeight - height + lastScrollTop); if (scrollTop === tableBodyWrap.scrollTop) { tableStore.setLastScrollTop(scrollTop); } else { tableBodyWrap.scrollTop = scrollTop; } } setHeight(virtualHeight); } }), [virtualHeight, height, tableStore]); (0, _react.useEffect)(function () { var lastScrollTop = tableStore.lastScrollTop, tableBodyWrap = tableStore.node.tableBodyWrap; if (lastScrollTop) { tableStore.setLastScrollTop(tableBodyWrap ? tableBodyWrap.scrollTop : 0); } }, [tableStore]); var getBody = function getBody(droppableProvided, droppableSnapshot) { var wrapperStyle = { height: (0, _UnitConvertor.pxToRem)(virtualHeight, true) }; var style = {}; if (scrolling) { wrapperStyle.pointerEvents = 'none'; } var dragRowHeight = droppableSnapshot && droppableSnapshot.draggingFromThisWith ? getRowHeight(tableStore, dataSet, droppableSnapshot.draggingFromThisWith) : undefined; var top = dragRowHeight ? virtualTop + dragRowHeight : virtualTop; if ((0, _utils.isStickySupport)() && tableStore.hasRowGroups) { wrapperStyle.paddingTop = (0, _UnitConvertor.pxToRem)(top, true); style.position = 'relative'; } else { style.transform = (0, _transform.toTransformValue)({ translateY: (0, _UnitConvertor.pxToRem)(top, true) }); } return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({ className: "".concat(prefixCls, "-tbody-wrapper"), style: wrapperStyle, ref: droppableProvided && droppableProvided.innerRef }, droppableProvided && droppableProvided.droppableProps), /*#__PURE__*/_react["default"].createElement("div", { style: style }, children(droppableSnapshot, dragRowHeight))); }; var renderClone = (0, _hooks.useRenderClone)(); var content = tableStore.rowDraggable ? /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Droppable, (0, _extends2["default"])({ droppableId: "table", key: "table", isCombineEnabled: isTree, mode: "virtual", renderClone: renderClone, getContainerForClone: function getContainerForClone() { return (0, _Table.instance)(tableStore.node.getClassName(), prefixCls).tbody; } }, rowDragRender && rowDragRender.droppableProps), getBody) : getBody(); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, content, virtualSpin && scrolling && /*#__PURE__*/_react["default"].createElement(_spin["default"], (0, _extends2["default"])({}, (0, _mergeProps["default"])((0, _omit["default"])(spinProps, ['dataSet']), { spinning: true, style: { position: 'absolute', top: '50%', left: '50%', marginTop: (0, _UnitConvertor.pxToRem)(tableStore.lastScrollTop, true), transform: (0, _transform.toTransformValue)({ translate: '-50% -50%' }) } })))); }; VirtualWrapper.displayName = 'VirtualWrapper'; var _default = (0, _mobxReactLite.observer)(VirtualWrapper); exports["default"] = _default; //# sourceMappingURL=VirtualWrapper.js.map