UNPKG

preact-arco-design

Version:

Arco Design React UI Library.

155 lines (131 loc) 5.61 kB
var __assign = this && this.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } } return t; }; return __assign.apply(this, arguments); }; var __rest = this && this.__rest || function (s, e) { var t = {}; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; } if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import React, { memo, useContext } from "preact/compat"; import get from 'lodash/get'; import pick from "../../_util/pick"; import { isObject, isString } from "../../_util/is"; import cs from "../../_util/classNames"; import useComponent from "../hooks/useComponent"; import { getOriginData } from "../utils"; import { ConfigContext } from "../../ConfigProvider"; function isInvalidRenderElement(element) { return element && !React.isValidElement(element) && isObject(element); } function Td(props) { var _a, _b; var components = props.components, InnerComponentTd = props.InnerComponentTd, column = props.column, columnIndex = props.columnIndex, prefixCls = props.prefixCls, stickyClassName = props.stickyClassName, stickyOffset = props.stickyOffset, currentSorter = props.currentSorter, virtualized = props.virtualized, record = props.record, trIndex = props.trIndex, level = props.level, placeholder = props.placeholder, indentSize = props.indentSize, renderExpandIcon = props.renderExpandIcon, rowKey = props.rowKey, recordHaveChildren = props.recordHaveChildren, haveTreeData = props.haveTreeData; var rtl = useContext(ConfigContext).rtl; var ComponentBodyCell = useComponent(components).ComponentBodyCell; var classNameTd = cs("".concat(prefixCls, "-td"), stickyClassName, (_a = {}, _a["".concat(prefixCls, "-col-sorted")] = currentSorter && currentSorter.direction && currentSorter.field === column.dataIndex, _a), column.className); var tdProps = {}; var rowSpan; var colSpan; var styleTd = {}; if (column.fixed === 'left') { styleTd[rtl ? 'right' : 'left'] = stickyOffset; } if (column.fixed === 'right') { styleTd[rtl ? 'left' : 'right'] = stickyOffset; } if (isObject(column.cellStyle)) { styleTd = __assign(__assign({}, styleTd), column.cellStyle); } if (isObject(column.bodyCellStyle)) { styleTd = __assign(__assign({}, styleTd), column.bodyCellStyle); } if (column.align) { styleTd.textAlign = column.align; } if (virtualized && column.width) { styleTd.width = column.width; styleTd.minWidth = column.width; styleTd.maxWidth = column.width; } var _c = column.onCell ? column.onCell(record, trIndex) : { onHandleSave: function onHandleSave() {} }, onHandleSave = _c.onHandleSave, cellProps = __rest(_c, ["onHandleSave"]); var renderElement = column.render && column.render(get(record, column.dataIndex), getOriginData(record), trIndex); if (isInvalidRenderElement(renderElement)) { tdProps = renderElement.props; rowSpan = tdProps.rowSpan; colSpan = tdProps.colSpan; renderElement = renderElement.children; } if (rowSpan === 0 || colSpan === 0) { return null; } var v = get(record, column.dataIndex); var cellChildren = column.render ? renderElement : v === undefined || typeof v === 'string' && v.trim() === '' || v === null ? column.placeholder === undefined ? placeholder : column.placeholder : v; var titleProps = column.ellipsis && typeof cellChildren === 'string' ? { title: cellChildren } : {}; var hasInlineExpandIcon = haveTreeData && column.$$isFirstColumn; var needRenderExpandIcon = hasInlineExpandIcon && recordHaveChildren; var paddingLeft = hasInlineExpandIcon && level > 0 ? indentSize * level : 0; if (hasInlineExpandIcon && !recordHaveChildren) { // expand icon width and margin-right paddingLeft += 16 + 4; } var content = React.createElement(React.Fragment, null, needRenderExpandIcon ? React.createElement("span", { className: "".concat(prefixCls, "-cell-expand-icon") }, renderExpandIcon(record, rowKey)) : null, isString(ComponentBodyCell) ? React.createElement(ComponentBodyCell, { className: "".concat(prefixCls, "-cell-wrap-value") }, cellChildren) : React.createElement(ComponentBodyCell, __assign({ rowData: record, className: "".concat(prefixCls, "-cell-wrap-value"), column: column, onHandleSave: onHandleSave }, cellProps), cellChildren)); return React.createElement(InnerComponentTd, __assign({ className: classNameTd, key: column.key || column.dataIndex || columnIndex, style: styleTd }, pick(cellProps, ['onClick', 'onDoubleClick', 'onContextMenu', 'onMouseOver', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseDown', 'onMouseUp']), tdProps), React.createElement("div", __assign({ className: cs("".concat(prefixCls, "-cell"), (_b = {}, _b["".concat(prefixCls, "-cell-text-ellipsis")] = column.ellipsis, _b)) }, titleProps), paddingLeft ? React.createElement("span", { className: "".concat(prefixCls, "-cell-indent"), style: { paddingLeft: paddingLeft } }) : null, content)); } export default memo(Td);