tdesign-react
Version:
TDesign Component for React
482 lines (478 loc) • 20.4 kB
JavaScript
/**
* tdesign v1.15.1
* (c) 2025 tdesign
* @license MIT
*/
import { _ as _defineProperty } from '../_chunks/dep-cb0a3966.js';
import React, { forwardRef, useRef, useImperativeHandle } from 'react';
import { get } from 'lodash-es';
import classNames from 'classnames';
import BaseTable from './BaseTable.js';
export { BASE_TABLE_ALL_EVENTS } from './BaseTable.js';
import useColumnController from './hooks/useColumnController.js';
import useRowExpand from './hooks/useRowExpand.js';
import useTableHeader, { renderTitle } from './hooks/useTableHeader.js';
import useRowSelect from './hooks/useRowSelect.js';
import useSorter from './hooks/useSorter.js';
import useFilter from './hooks/useFilter.js';
import useDragSort from './hooks/useDragSort.js';
import useAsyncLoading from './hooks/useAsyncLoading.js';
import useClassName from './hooks/useClassName.js';
import useStyle from './hooks/useStyle.js';
import EditableCell from './EditableCell.js';
import { useEditableRow } from './hooks/useEditableRow.js';
import { primaryTableDefaultProps } from './defaultProps.js';
import useDefaultProps from '../hooks/useDefaultProps.js';
import '../_chunks/dep-eca3a3de.js';
import '../_chunks/dep-48805ab8.js';
import '../_chunks/dep-026a4c6b.js';
import '../_chunks/dep-f53c91cd.js';
import '../_chunks/dep-b908e1fe.js';
import '../_chunks/dep-1630b9b4.js';
import '../_chunks/dep-87d110df.js';
import '../_chunks/dep-6b660ef0.js';
import '../affix/index.js';
import '../affix/Affix.js';
import '../hooks/useConfig.js';
import '../config-provider/ConfigContext.js';
import '../locale/zh_CN.js';
import '../_chunks/dep-e29214cb.js';
import 'dayjs';
import '../_chunks/dep-3c9ab31a.js';
import '../affix/defaultProps.js';
import '../_util/scroll.js';
import 'raf';
import '../_chunks/dep-3a09424a.js';
import '../_util/easing.js';
import '../affix/style/index.js';
import '../affix/type.js';
import '../hooks/useElementLazyRender.js';
import '../_chunks/dep-4450afc0.js';
import '../hooks/useVirtualScroll.js';
import '../loading/index.js';
import '../loading/Loading.js';
import '../common/Portal.js';
import 'react-dom';
import '../hooks/useLayoutEffect.js';
import '../loading/gradient.js';
import '../_chunks/dep-c48e2ca1.js';
import '../hooks/useDomRefCallback.js';
import '../loading/defaultProps.js';
import '../loading/plugin.js';
import '../_util/react-render.js';
import '../_chunks/dep-a74cc5e4.js';
import '../common/PluginContainer.js';
import '../config-provider/index.js';
import '../config-provider/ConfigProvider.js';
import '../config-provider/type.js';
import '../loading/style/index.js';
import '../loading/type.js';
import './TBody.js';
import './TR.js';
import './utils.js';
import './hooks/useFixed.js';
import '../_chunks/dep-a3bde62f.js';
import '../hooks/useDebounce.js';
import '../hooks/usePersistFn.js';
import '../hooks/usePrevious.js';
import '../_util/listener.js';
import './hooks/useLazyLoad.js';
import './hooks/useRowspanAndColspan.js';
import './Cell.js';
import './Ellipsis.js';
import '../tooltip/index.js';
import '../tooltip/Tooltip.js';
import '../popup/index.js';
import '../popup/Popup.js';
import 'react-transition-group';
import '../_util/ref.js';
import 'react-is';
import '../_util/isFragment.js';
import '../hooks/useAnimation.js';
import '../hooks/useAttach.js';
import '../hooks/useControlled.js';
import '../_util/noop.js';
import '../hooks/useMutationObserver.js';
import '../hooks/useLatest.js';
import '../hooks/usePopper.js';
import '@popperjs/core';
import 'react-fast-compare';
import '../hooks/useWindowSize.js';
import '../popup/defaultProps.js';
import '../popup/hooks/useTrigger.js';
import '../_util/composeRefs.js';
import '../popup/utils/transition.js';
import '../popup/PopupPlugin.js';
import '../popup/style/index.js';
import '../popup/type.js';
import '../tooltip/defaultProps.js';
import '../tooltip/TooltipLite.js';
import '../hooks/useSwitch.js';
import '../tooltip/style/index.js';
import '../tooltip/type.js';
import '../locale/LocalReceiver.js';
import './TFoot.js';
import './THead.js';
import './hooks/useAffix.js';
import './hooks/useColumnResize.js';
import './hooks/usePagination.js';
import '../pagination/index.js';
import '../pagination/Pagination.js';
import '../select/index.js';
import '../select/base/Select.js';
import '../_util/forwardRefWithStatics.js';
import 'hoist-non-react-statics';
import '../_util/helper.js';
import '../_util/parseTNode.js';
import '../common/FakeArrow.js';
import '../select-input/index.js';
import '../select-input/SelectInput.js';
import '../select-input/useSingle.js';
import '../input/index.js';
import '../input/Input.js';
import 'tdesign-icons-react';
import '../hooks/useGlobalIcon.js';
import '../input/InputGroup.js';
import '../input/defaultProps.js';
import '../input/useLengthLimit.js';
import '../input/style/index.js';
import '../input/type.js';
import '../select-input/useMultiple.js';
import '../tag-input/index.js';
import '../tag-input/TagInput.js';
import '../hooks/useDragSorter.js';
import '../hooks/useEventCallback.js';
import '../tag-input/defaultProps.js';
import '../tag-input/useHover.js';
import '../tag-input/useTagList.js';
import '../tag/index.js';
import '../tag/Tag.js';
import '../_chunks/dep-3c3d29db.js';
import '../tag/defaultProps.js';
import '../tag/CheckTag.js';
import '../_chunks/dep-55732ade.js';
import '../tag/CheckTagGroup.js';
import '../tag/style/index.js';
import '../tag/type.js';
import '../tag-input/useTagScroll.js';
import '../tag-input/style/index.js';
import '../tag-input/type.js';
import '../select-input/useOverlayInnerStyle.js';
import '../select-input/defaultProps.js';
import '../select-input/style/index.js';
import '../select-input/type.js';
import '../select/defaultProps.js';
import '../_chunks/dep-c7ed701c.js';
import '../select/base/OptionGroup.js';
import '../select/base/Option.js';
import '../hooks/useRipple.js';
import '../select/base/PopupContent.js';
import '../select/hooks/usePanelVirtualScroll.js';
import '../select/style/index.js';
import '../select/type.js';
import '../input-number/index.js';
import '../input-number/InputNumber.js';
import '../button/index.js';
import '../button/Button.js';
import '../button/defaultProps.js';
import '../button/style/index.js';
import '../button/type.js';
import '../input-number/useInputNumber.js';
import '../_chunks/dep-46c9e4f5.js';
import '../hooks/useCommonClassName.js';
import '../input-number/defaultProps.js';
import '../input-number/style/index.js';
import '../input-number/type.js';
import '../input-adornment/index.js';
import '../input-adornment/InputAdornment.js';
import '../input-adornment/style/index.js';
import '../input-adornment/type.js';
import '../pagination/hooks/useBoundaryJumper.js';
import '../pagination/hooks/usePrevNextJumper.js';
import '../pagination/hooks/usePageNumber.js';
import '../pagination/hooks/useTotal.js';
import '../pagination/validators.js';
import '../pagination/defaultProps.js';
import '../pagination/PaginationMini.js';
import '../pagination/style/index.js';
import '../pagination/type.js';
import './hooks/useMultiHeader.js';
import '../checkbox/index.js';
import '../_chunks/dep-0030a252.js';
import '../common/Check.js';
import '../checkbox/defaultProps.js';
import '../checkbox/style/index.js';
import '../checkbox/type.js';
import '../dialog/plugin.js';
import '../dialog/Dialog.js';
import '../hooks/useDeepEffect.js';
import '../hooks/useSetState.js';
import '../dialog/defaultProps.js';
import '../dialog/DialogCard.js';
import '../dialog/hooks/useDialogDrag.js';
import '../hooks/useMouseEvent.js';
import '../dialog/hooks/useDialogEsc.js';
import '../dialog/hooks/useDialogPosition.js';
import '../dialog/hooks/useLockStyle.js';
import '../dialog/utils.js';
import '../_chunks/dep-d1ed7cad.js';
import '../radio/index.js';
import '../_chunks/dep-b9f731c7.js';
import '../radio/defaultProps.js';
import '../radio/useKeyboard.js';
import '../radio/style/index.js';
import '../radio/type.js';
import './SorterButton.js';
import './FilterController.js';
import 'sortablejs';
import '../_chunks/dep-91b20286.js';
import '../form/formModel.js';
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var PrimaryTable = /*#__PURE__*/forwardRef(function (originalProps, ref) {
var props = useDefaultProps(originalProps, primaryTableDefaultProps);
var columns = props.columns,
columnController = props.columnController,
editableRowKeys = props.editableRowKeys,
style = props.style,
className = props.className;
var primaryTableRef = useRef(null);
var innerPagination = useRef(props.pagination);
var _useClassName = useClassName(),
classPrefix = _useClassName.classPrefix,
tableDraggableClasses = _useClassName.tableDraggableClasses,
tableBaseClass = _useClassName.tableBaseClass,
tableSelectedClasses = _useClassName.tableSelectedClasses,
tableSortClasses = _useClassName.tableSortClasses;
var _useStyle = useStyle(props),
sizeClassNames = _useStyle.sizeClassNames;
var _useColumnController = useColumnController(props, {
onColumnReduce: onColumnReduce
}),
tDisplayColumns = _useColumnController.tDisplayColumns,
renderColumnController = _useColumnController.renderColumnController;
var _useRowExpand = useRowExpand(props),
showExpandedRow = _useRowExpand.showExpandedRow,
showExpandIconColumn = _useRowExpand.showExpandIconColumn,
getExpandColumn = _useRowExpand.getExpandColumn,
renderExpandedRow = _useRowExpand.renderExpandedRow,
onInnerExpandRowClick = _useRowExpand.onInnerExpandRowClick,
getExpandedRowClass = _useRowExpand.getExpandedRowClass;
var _useSorter = useSorter(props),
renderSortIcon = _useSorter.renderSortIcon;
var _useRowSelect = useRowSelect(props, tableSelectedClasses),
selectedRowClassNames = _useRowSelect.selectedRowClassNames,
setCurrentPaginateData = _useRowSelect.setCurrentPaginateData,
formatToRowSelectColumn = _useRowSelect.formatToRowSelectColumn,
setTSelectedRowKeys = _useRowSelect.setTSelectedRowKeys,
onInnerSelectRowClick = _useRowSelect.onInnerSelectRowClick;
var _useFilter = useFilter(props, primaryTableRef),
hasEmptyCondition = _useFilter.hasEmptyCondition,
isTableOverflowHidden = _useFilter.isTableOverflowHidden,
renderFilterIcon = _useFilter.renderFilterIcon,
renderFirstFilterRow = _useFilter.renderFirstFilterRow;
var _useDragSort = useDragSort(props, {
primaryTableRef: primaryTableRef,
innerPagination: innerPagination
}),
isRowHandlerDraggable = _useDragSort.isRowHandlerDraggable,
isRowDraggable = _useDragSort.isRowDraggable,
isColDraggable = _useDragSort.isColDraggable,
setDragSortColumns = _useDragSort.setDragSortColumns;
var _useTableHeader = useTableHeader({
columns: props.columns
}),
renderTitleWidthIcon = _useTableHeader.renderTitleWidthIcon;
var _useAsyncLoading = useAsyncLoading(props),
renderAsyncLoading = _useAsyncLoading.renderAsyncLoading;
var primaryTableClasses = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, tableDraggableClasses.colDraggable, isColDraggable), tableDraggableClasses.rowHandlerDraggable, isRowHandlerDraggable), tableDraggableClasses.rowDraggable, isRowDraggable), tableBaseClass.overflowVisible, isTableOverflowHidden === false), tableBaseClass.tableRowEdit, editableRowKeys);
var _useEditableRow = useEditableRow(props),
errorListMap = _useEditableRow.errorListMap,
editableKeysMap = _useEditableRow.editableKeysMap,
validateRowData = _useEditableRow.validateRowData,
validateTableData = _useEditableRow.validateTableData,
onRuleChange = _useEditableRow.onRuleChange,
clearValidateData = _useEditableRow.clearValidateData;
var tRowClassNames = function () {
var tClassNames = [props.rowClassName, selectedRowClassNames, getExpandedRowClass];
return tClassNames.filter(function (v) {
return v;
});
}();
var tRowAttributes = function () {
var tAttributes = [props.rowAttributes];
if (isRowHandlerDraggable || isRowDraggable) {
tAttributes.push(function (_ref) {
var row = _ref.row;
return {
"data-id": get(row, props.rowKey || "id")
};
});
}
return tAttributes.filter(function (v) {
return v;
});
}();
useImperativeHandle(ref, function () {
return _objectSpread({
validateRowData: validateRowData,
validateTableData: validateTableData,
clearValidateData: clearValidateData
}, primaryTableRef.current);
});
function onColumnReduce(reduceKeys) {
if (props.resizable) {
primaryTableRef.current.updateTableWidthOnColumnChange(reduceKeys);
}
}
var _getColumns = function getColumns(columns2) {
var arr = [];
var _loop = function _loop() {
var _item$children, _item$edit, _item$children2, _item$children3;
var item = _objectSpread({}, columns2[i]);
var isDisplayColumn = ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) || (tDisplayColumns === null || tDisplayColumns === void 0 ? void 0 : tDisplayColumns.includes(item.colKey));
if (!isDisplayColumn && props.columnController && tDisplayColumns) return 1; // continue
item = formatToRowSelectColumn(item);
var sort = props.sort;
if (item.sorter && props.showSortColumnBgColor) {
var sorts = sort instanceof Array ? sort : [sort];
var sortedColumn = sorts.find(function (sort2) {
return sort2 && sort2.sortBy === item.colKey && sort2.descending !== void 0;
});
if (sortedColumn) {
item.className = item.className instanceof Array ? item.className.concat(tableSortClasses.sortColumn) : [item.className, tableSortClasses.sortColumn];
}
}
if (item.sorter || item.filter) {
var titleContent = renderTitle(item, i);
var _item = item,
ellipsisTitle = _item.ellipsisTitle;
item.title = function (p) {
var _primaryTableRef$curr;
var sortIcon = item.sorter ? renderSortIcon(p) : null;
var filterIcon = item.filter ? renderFilterIcon(p) : null;
var attach = (_primaryTableRef$curr = primaryTableRef.current) === null || _primaryTableRef$curr === void 0 ? void 0 : _primaryTableRef$curr.tableContentRef;
return renderTitleWidthIcon([titleContent, sortIcon, filterIcon], p.col, p.colIndex, ellipsisTitle, attach, {
classPrefix: classPrefix,
ellipsisOverlayClassName: props.size !== "medium" ? sizeClassNames[props.size] : ""
});
};
item.ellipsisTitle = false;
}
if ((_item$edit = item.edit) !== null && _item$edit !== void 0 && _item$edit.component) {
var oldCell = item.cell;
item.cell = function (p) {
var cellProps = _objectSpread(_objectSpread({}, p), {}, {
oldCell: oldCell,
tableBaseClass: tableBaseClass,
cellEmptyContent: props.cellEmptyContent,
onChange: props.onRowEdit,
onValidate: props.onRowValidate,
onRuleChange: onRuleChange
});
if (props.editableRowKeys) {
var rowValue = get(p.row, props.rowKey || "id");
cellProps.editable = editableKeysMap[rowValue] || false;
var key = [rowValue, p.col.colKey].join("__");
var errorList = errorListMap[key];
errorList && (cellProps.errors = errorList);
}
if (props.editableCellState) {
cellProps.readonly = !props.editableCellState(p);
}
return /* @__PURE__ */React.createElement(EditableCell, _objectSpread({}, cellProps));
};
}
if ((_item$children2 = item.children) !== null && _item$children2 !== void 0 && _item$children2.length) {
item.children = _getColumns(item.children);
}
if (!item.children || (_item$children3 = item.children) !== null && _item$children3 !== void 0 && _item$children3.length) {
arr.push(item);
}
};
for (var i = 0, len = columns2.length; i < len; i++) {
if (_loop()) continue;
}
return arr;
};
var tColumns = function () {
var cols = _getColumns(columns);
if (showExpandIconColumn) {
cols.unshift(getExpandColumn());
}
return cols;
}();
var onInnerPageChange = function onInnerPageChange(pageInfo, newData) {
var _props$onPageChange, _props$onChange;
innerPagination.current = _objectSpread(_objectSpread({}, innerPagination), pageInfo);
setCurrentPaginateData(newData);
(_props$onPageChange = props.onPageChange) === null || _props$onPageChange === void 0 || _props$onPageChange.call(props, pageInfo, newData);
var changeParams = [{
pagination: pageInfo
}, {
trigger: "pagination",
currentData: newData
}];
(_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call.apply(_props$onChange, [props].concat(changeParams));
if (!props.reserveSelectedRowOnPaginate) {
setTSelectedRowKeys([], {
selectedRowData: [],
type: "uncheck",
currentRowKey: "CLEAR_ON_PAGINATE"
});
}
};
var onInnerRowClick = function onInnerRowClick(params) {
if (props.expandOnRowClick) {
onInnerExpandRowClick(params);
}
if (props.selectOnRowClick) {
onInnerSelectRowClick(params);
}
};
function formatNode(api, renderInnerNode, condition, extra) {
if (!condition) return props[api];
var innerNode = renderInnerNode();
var propsNode = props[api];
if (innerNode && !propsNode) return innerNode;
if (propsNode && !innerNode) return propsNode;
if (innerNode && propsNode) {
return extra !== null && extra !== void 0 && extra.reverse ? /* @__PURE__ */React.createElement("div", null, innerNode, propsNode) : /* @__PURE__ */React.createElement("div", null, propsNode, innerNode);
}
return null;
}
var isColumnController = !!(columnController && Object.keys(columnController).length);
var placement = isColumnController ? columnController.placement || "top-right" : "";
var isBottomController = isColumnController && (placement === null || placement === void 0 ? void 0 : placement.indexOf("bottom")) !== -1;
var topContent = formatNode("topContent", renderColumnController, isColumnController && !isBottomController);
var bottomContent = formatNode("bottomContent", renderColumnController, isBottomController, {
reverse: true
});
var firstFullRow = formatNode("firstFullRow", renderFirstFilterRow, !hasEmptyCondition);
var lastFullRow = formatNode("lastFullRow", renderAsyncLoading, !!props.asyncLoading);
var baseTableProps = _objectSpread(_objectSpread({}, props), {}, {
rowClassName: tRowClassNames,
rowAttributes: tRowAttributes,
columns: tColumns,
topContent: topContent,
bottomContent: bottomContent,
firstFullRow: firstFullRow,
lastFullRow: lastFullRow,
thDraggable: ["col", "row-handler-col"].includes(props.dragSort),
onPageChange: onInnerPageChange,
renderExpandedRow: showExpandedRow ? renderExpandedRow : void 0
});
if (props.expandOnRowClick || props.selectOnRowClick) {
baseTableProps.onRowClick = onInnerRowClick;
}
return /* @__PURE__ */React.createElement(BaseTable, _objectSpread(_objectSpread({
ref: primaryTableRef
}, baseTableProps), {}, {
className: classNames(primaryTableClasses, className),
style: style,
onLeafColumnsChange: setDragSortColumns
}));
});
PrimaryTable.displayName = "PrimaryTable";
export { PrimaryTable as default };
//# sourceMappingURL=PrimaryTable.js.map