UNPKG

ant-design-vue

Version:

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

125 lines (124 loc) 4.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _ExpandedRow = _interopRequireDefault(require("./ExpandedRow")); var _valueUtil = require("../utils/valueUtil"); var _MeasureCell = _interopRequireDefault(require("./MeasureCell")); var _BodyRow = _interopRequireDefault(require("./BodyRow")); var _useFlattenRecords = _interopRequireDefault(require("../hooks/useFlattenRecords")); var _ResizeContext = require("../context/ResizeContext"); var _TableContext = require("../context/TableContext"); var _BodyContext = require("../context/BodyContext"); var _HoverContext = require("../context/HoverContext"); var _default = exports.default = (0, _vue.defineComponent)({ name: 'TableBody', props: ['data', 'getRowKey', 'measureColumnWidth', 'expandedKeys', 'customRow', 'rowExpandable', 'childrenColumnName'], setup(props, _ref) { let { slots } = _ref; const resizeContext = (0, _ResizeContext.useInjectResize)(); const tableContext = (0, _TableContext.useInjectTable)(); const bodyContext = (0, _BodyContext.useInjectBody)(); const flattenData = (0, _useFlattenRecords.default)((0, _vue.toRef)(props, 'data'), (0, _vue.toRef)(props, 'childrenColumnName'), (0, _vue.toRef)(props, 'expandedKeys'), (0, _vue.toRef)(props, 'getRowKey')); const startRow = (0, _vue.shallowRef)(-1); const endRow = (0, _vue.shallowRef)(-1); let timeoutId; (0, _HoverContext.useProvideHover)({ startRow, endRow, onHover: (start, end) => { clearTimeout(timeoutId); timeoutId = setTimeout(() => { startRow.value = start; endRow.value = end; }, 100); } }); return () => { var _a; const { data, getRowKey, measureColumnWidth, expandedKeys, customRow, rowExpandable, childrenColumnName } = props; const { onColumnResize } = resizeContext; const { prefixCls, getComponent } = tableContext; const { flattenColumns } = bodyContext; const WrapperComponent = getComponent(['body', 'wrapper'], 'tbody'); const trComponent = getComponent(['body', 'row'], 'tr'); const tdComponent = getComponent(['body', 'cell'], 'td'); let rows; if (data.length) { rows = flattenData.value.map((item, idx) => { const { record, indent, index: renderIndex } = item; const key = getRowKey(record, idx); return (0, _vue.createVNode)(_BodyRow.default, { "key": key, "rowKey": key, "record": record, "recordKey": key, "index": idx, "renderIndex": renderIndex, "rowComponent": trComponent, "cellComponent": tdComponent, "expandedKeys": expandedKeys, "customRow": customRow, "getRowKey": getRowKey, "rowExpandable": rowExpandable, "childrenColumnName": childrenColumnName, "indent": indent }, null); }); } else { rows = (0, _vue.createVNode)(_ExpandedRow.default, { "expanded": true, "class": `${prefixCls}-placeholder`, "prefixCls": prefixCls, "component": trComponent, "cellComponent": tdComponent, "colSpan": flattenColumns.length, "isEmpty": true }, { default: () => [(_a = slots.emptyNode) === null || _a === void 0 ? void 0 : _a.call(slots)] }); } const columnsKey = (0, _valueUtil.getColumnsKey)(flattenColumns); return (0, _vue.createVNode)(WrapperComponent, { "class": `${prefixCls}-tbody` }, { default: () => [measureColumnWidth && (0, _vue.createVNode)("tr", { "aria-hidden": "true", "class": `${prefixCls}-measure-row`, "style": { height: 0, fontSize: 0 } }, [columnsKey.map(columnKey => (0, _vue.createVNode)(_MeasureCell.default, { "key": columnKey, "columnKey": columnKey, "onColumnResize": onColumnResize }, null))]), rows] }); }; } });