drip-table
Version:
A tiny and powerful enterprise-class solution for building tables.
1,135 lines (925 loc) • 104 kB
JavaScript
var _excluded = ["children", "additionalProps"];
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (_e2) { function e(_x) { return _e2.apply(this, arguments); } e.toString = function () { return _e2.toString(); }; return e; }(function (e) { throw e; }), f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function (_e3) { function e(_x2) { return _e3.apply(this, arguments); } e.toString = function () { return _e3.toString(); }; return e; }(function (e) { didErr = true; err = e; }), f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/*
* This file is part of the drip-table project.
* @link : https://drip-table.jd.com/
* @author : Emil Zhai (root@derzh.com)
* @modifier : Emil Zhai (root@derzh.com)
* @copyright: Copyright (c) 2021 JD Network Technology Co., Ltd.
*/
import "./index.less";
import classNames from 'classnames';
import forEach from 'lodash/forEach';
import ResizeObserver from 'rc-resize-observer';
import RcTable from 'rc-table';
import React from 'react';
import { areEqual, VariableSizeGrid } from 'react-window';
import * as childrenLike from "../../utils/children-like";
import { parseCSS, parseReactCSS, setElementCSS, stringifyCSS } from "../../utils/dom";
import { encodeJSON } from "../../utils/json";
import { indexValue as _indexValue, parseNumber, setValue } from "../../utils/operator";
import DripTableBuiltInComponents from "../../components/cell-components";
import { preventEvent } from "../../components/cell-components/utils";
import Checkbox from "../../components/react-components/checkbox";
import Pagination from "../../components/react-components/pagination";
import RichText from "../../components/react-components/rich-text";
import SlotRender from "../../components/react-components/slot-render";
import Tooltip from "../../components/react-components/tooltip";
import { useTableContext } from "../../hooks";
import DripTableWrapper from "../../wrapper";
import HeaderCell from "./components/header-cell";
import { finalizeColumnTitle, finalizeColumnWidth } from "./utils";
var prefixCls = 'jfe-drip-table-layout-table';
/**
* 表格参数默认值,用于覆盖父表参数值防止透传到子表
*/
var DEFAULT_SUBTABLE_PROPS = {
total: void 0,
defaultExpandAllRows: void 0,
defaultExpandedRowKeys: void 0
};
var updateCellElementStyle = function updateCellElementStyle(el, hoverColumnKey, hoverRowKey) {
var _el$dataset$style;
var columnKey = el.dataset.columnKey || '';
var rowKey = el.dataset.rowKey || ''; // 保留非 Schema 生成样式
var keepStyle = Object.fromEntries(Object.entries(_objectSpread(_objectSpread({}, parseCSS(el.getAttribute('style') || '')), Object.fromEntries(Object.entries(parseCSS((_el$dataset$style = el.dataset.style) !== null && _el$dataset$style !== void 0 ? _el$dataset$style : '')).map(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
k = _ref2[0],
_ = _ref2[1];
return [k, ''];
})))).filter(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
_ = _ref4[0],
v = _ref4[1];
return v;
})); // 列基础样式
var style = parseCSS(el.dataset.basicStyle || ''); // 列 hover 样式
if (columnKey) {
var _el$dataset$columnHov;
var columnHoverStyle = parseCSS(el.dataset.columnHoverStyle || '');
var columnHoverClasses = ((_el$dataset$columnHov = el.dataset.columnHoverClass) !== null && _el$dataset$columnHov !== void 0 ? _el$dataset$columnHov : '').split(' ').map(function (s) {
return s.trim();
}).filter(Boolean);
if (hoverColumnKey === columnKey) {
if (columnHoverStyle) {
Object.assign(style, columnHoverStyle);
}
columnHoverClasses.forEach(function (c) {
return el.classList.add(c);
});
} else {
columnHoverClasses.forEach(function (c) {
return el.classList.remove(c);
});
}
} // 行 hover 样式
if (rowKey) {
var _el$dataset$rowHoverC;
var rowHoverStyle = parseCSS(el.dataset.rowHoverStyle || '');
var rowHoverClasses = ((_el$dataset$rowHoverC = el.dataset.rowHoverClass) !== null && _el$dataset$rowHoverC !== void 0 ? _el$dataset$rowHoverC : '').split(' ').map(function (s) {
return s.trim();
}).filter(Boolean);
if (hoverRowKey === rowKey) {
if (rowHoverStyle) {
Object.assign(style, rowHoverStyle);
}
rowHoverClasses.forEach(function (c) {
return el.classList.add(c);
});
} else {
rowHoverClasses.forEach(function (c) {
return el.classList.remove(c);
});
}
} // 单元格 hover 样式
if (columnKey && rowKey) {
var hoverStyle = parseCSS(el.dataset.hoverStyle || '');
if (hoverStyle && hoverColumnKey === columnKey && hoverRowKey === rowKey) {
Object.assign(style, hoverStyle);
}
} // 设置样式、保存复原状态样式
el.removeAttribute('style');
setElementCSS(el, keepStyle);
setElementCSS(el, style);
el.dataset.style = stringifyCSS(Object.fromEntries(Object.entries(style).map(function (_ref5) {
var _ref6 = _slicedToArray(_ref5, 2),
k = _ref6[0],
_ = _ref6[1];
return [k, el.style[k]];
})));
};
var onCellMouseEnter = function onCellMouseEnter(e) {
var currentTarget = e.currentTarget;
if (currentTarget instanceof HTMLElement) {
var tableUUID = currentTarget.dataset.tableUuid;
var hoverColumnKey = currentTarget.dataset.columnKey;
var hoverRowKey = currentTarget.dataset.rowKey;
if (tableUUID && hoverColumnKey && hoverRowKey) {
forEach(document.querySelectorAll("td[data-table-uuid=".concat(encodeJSON(tableUUID), "],div[data-table-uuid=").concat(encodeJSON(tableUUID), "]")), function (el) {
if (el instanceof HTMLElement) {
updateCellElementStyle(el, hoverColumnKey, hoverRowKey);
}
});
}
}
};
var onCellMouseLeave = function onCellMouseLeave(e) {
var currentTarget = e.currentTarget;
if (currentTarget instanceof HTMLElement) {
var tableUUID = currentTarget.dataset.tableUuid;
if (tableUUID) {
forEach(document.querySelectorAll("td[data-table-uuid=".concat(encodeJSON(tableUUID), "],div[data-table-uuid=").concat(encodeJSON(tableUUID), "]")), function (el) {
if (el instanceof HTMLElement) {
updateCellElementStyle(el, void 0, void 0);
}
});
}
}
};
var hookColumRender = function hookColumRender(column, columnSchema, columnIndex, tableInfo, rcTableInfo, extraProps) {
var _useTableContext = useTableContext(),
safeExecute = _useTableContext.safeEvaluate,
sorter = _useTableContext.state.sorter;
var render = column.render;
column.render = function (d, row, index) {
var _rcTableInfo$cellConf, _rcTableInfo$cellConf2, _rcTableInfo$cellConf3;
if (rcTableInfo.cellConfigConflictIDs[(_rcTableInfo$cellConf = (_rcTableInfo$cellConf2 = rcTableInfo.cellConfigs[index]) === null || _rcTableInfo$cellConf2 === void 0 ? void 0 : (_rcTableInfo$cellConf3 = _rcTableInfo$cellConf2[columnIndex]) === null || _rcTableInfo$cellConf3 === void 0 ? void 0 : _rcTableInfo$cellConf3.spanGroupID) !== null && _rcTableInfo$cellConf !== void 0 ? _rcTableInfo$cellConf : '']) {
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-row-slot__error")
}, "Cell Span Conflict");
}
return /*#__PURE__*/React.createElement(React.Fragment, null, render === null || render === void 0 ? void 0 : render(d, row, index), columnSchema && ('sorter' in columnSchema || columnSchema.style || columnSchema.hoverStyle || columnSchema.rowHoverStyle || columnSchema.columnHoverStyle) ? /*#__PURE__*/React.createElement("div", {
style: {
display: 'none'
},
ref: function ref(el) {
var tdEl = el === null || el === void 0 ? void 0 : el.parentElement;
if (tdEl) {
var _context = {
props: {
record: row.record,
recordIndex: row.index,
ext: extraProps.ext
}
};
var parseStyleSchema = function parseStyleSchema(style) {
return parseCSS(typeof style === 'string' ? safeExecute(style, _context) : style);
};
tdEl.dataset.tableUuid = tableInfo.uuid;
tdEl.dataset.columnKey = columnSchema.key;
tdEl.dataset.rowKey = row.key;
tdEl.dataset.basicStyle = stringifyCSS(Object.assign({
'text-align': columnSchema.align,
background: (sorter === null || sorter === void 0 ? void 0 : sorter.key) === columnSchema.key ? 'var(--drip-table-column-sorted-background-color, inherit)' : void 0
}, parseStyleSchema(columnSchema.style)));
tdEl.dataset.hoverStyle = stringifyCSS(parseStyleSchema(columnSchema.hoverStyle));
tdEl.dataset.rowHoverStyle = stringifyCSS(parseStyleSchema(columnSchema.rowHoverStyle));
tdEl.dataset.columnHoverStyle = stringifyCSS(parseStyleSchema(columnSchema.columnHoverStyle));
tdEl.addEventListener('mouseenter', onCellMouseEnter);
tdEl.addEventListener('mouseleave', onCellMouseLeave);
updateCellElementStyle(tdEl, void 0, void 0);
}
}
}) : null);
};
column.onCell = function (row, index) {
var _rcTableInfo$cellConf4, _rcTableInfo$cellConf5, _rcTableInfo$cellConf6, _rcTableInfo$cellConf7, _rcTableInfo$cellConf8;
if (index === void 0 || rcTableInfo.cellConfigConflictIDs[(_rcTableInfo$cellConf4 = (_rcTableInfo$cellConf5 = rcTableInfo.cellConfigs[index]) === null || _rcTableInfo$cellConf5 === void 0 ? void 0 : (_rcTableInfo$cellConf6 = _rcTableInfo$cellConf5[columnIndex]) === null || _rcTableInfo$cellConf6 === void 0 ? void 0 : _rcTableInfo$cellConf6.spanGroupID) !== null && _rcTableInfo$cellConf4 !== void 0 ? _rcTableInfo$cellConf4 : '']) {
return {};
}
return ((_rcTableInfo$cellConf7 = rcTableInfo.cellConfigs[index]) === null || _rcTableInfo$cellConf7 === void 0 ? void 0 : (_rcTableInfo$cellConf8 = _rcTableInfo$cellConf7[columnIndex]) === null || _rcTableInfo$cellConf8 === void 0 ? void 0 : _rcTableInfo$cellConf8.data) || {};
};
return column;
};
function hookSchemaEventRaiser(schema, schemaFunctionPreprocessor, props) {
if (Array.isArray(schema)) {
return schema.map(function (v) {
return schemaFunctionPreprocessor(v, props);
});
}
if (schema && _typeof(schema) === 'object') {
return Object.fromEntries(Object.entries(schema).map(function (_ref7) {
var _ref8 = _slicedToArray(_ref7, 2),
k = _ref8[0],
v = _ref8[1];
return [k, typeof v === 'function' ? schemaFunctionPreprocessor(v, props) : hookSchemaEventRaiser(v, schemaFunctionPreprocessor, props)];
}));
}
return schema;
}
/**
* 根据列 Schema,生成表格单元格渲染函数
* @param tableInfo 表格信息
* @param columnSchema 表格列 Schema
* @param extraProps 一些额外的参数
* @returns 表格单元格渲染函数
*/
export var columnRenderGenerator = function columnRenderGenerator(tableInfo, columnSchema, extraProps) {
if ('component' in columnSchema) {
var BuiltInComponent = extraProps.defaultComponentLib ? null : DripTableBuiltInComponents[columnSchema.component];
var _onChange = function onChange(record, index, value) {
var _extraProps$onDataSou;
var ds = _toConsumableArray(tableInfo.dataSource);
var rec = _objectSpread({}, record);
setValue(rec, columnSchema.dataIndex, value);
ds[index] = rec;
(_extraProps$onDataSou = extraProps.onDataSourceChange) === null || _extraProps$onDataSou === void 0 ? void 0 : _extraProps$onDataSou.call(extraProps, ds, tableInfo);
};
var generatePropsTranslator = function generatePropsTranslator(translatorSchema) {
if (translatorSchema === void 0) {
return function (v, c) {
return v;
};
}
if (typeof translatorSchema === 'string') {
try {
var translate = extraProps.createEvaluator(translatorSchema, ['props']);
return function (v, c) {
try {
return translate === null || translate === void 0 ? void 0 : translate(c);
} catch (_unused) {}
return void 0;
};
} catch (_unused2) {}
}
return function () {
return translatorSchema;
};
};
var dataTranslator = generatePropsTranslator(columnSchema.dataTranslation);
var hiddenTranslator = generatePropsTranslator(columnSchema.hidden);
var disableTranslator = generatePropsTranslator(columnSchema.disable);
var editableTranslator = generatePropsTranslator(columnSchema.editable);
if (BuiltInComponent) {
return function BuiltInComponentIns(_, row) {
var rawValue = _indexValue(row.record, columnSchema.dataIndex, columnSchema.defaultValue);
var record = row.record;
var recordIndex = row.index;
var ext = extraProps.ext;
var value = dataTranslator(rawValue, {
value: rawValue,
record: record,
recordIndex: recordIndex,
ext: ext
});
var translatorContext = {
value: value,
record: record,
recordIndex: recordIndex,
ext: ext
};
if (hiddenTranslator(false, translatorContext)) {
return null;
}
var finalColumnSchema = extraProps.schemaFunctionPreprocessor ? hookSchemaEventRaiser(columnSchema, extraProps.schemaFunctionPreprocessor, {
value: value,
record: record,
recordIndex: recordIndex,
ext: ext
}) : columnSchema;
return /*#__PURE__*/React.createElement(BuiltInComponent, {
data: record,
record: record,
recordIndex: recordIndex,
value: value,
indexValue: function indexValue(dataIndex, defaultValue) {
var v = _indexValue(row.record, dataIndex, defaultValue !== null && defaultValue !== void 0 ? defaultValue : columnSchema.defaultValue);
return dataTranslator(v, {
value: v,
record: record,
recordIndex: recordIndex,
ext: ext
});
},
renderSchema: function renderSchema(sc, r, ri) {
var render = columnRenderGenerator(tableInfo, sc, extraProps);
return render(null, {
type: 'body',
key: sc.key,
index: ri,
record: r
}, 0);
},
createEvaluator: extraProps.createEvaluator,
evaluate: extraProps.evaluate,
safeEvaluate: extraProps.safeEvaluate,
finalizeString: extraProps.finalizeString,
preview: extraProps.preview,
disable: Boolean(disableTranslator(false, translatorContext)),
editable: Boolean(editableTranslator(tableInfo.schema.editable, translatorContext)),
onChange: function onChange(v) {
return _onChange(record, recordIndex, v);
},
schema: finalColumnSchema,
ext: extraProps.ext,
components: extraProps.components,
icons: extraProps.icons,
fireEvent: function fireEvent(event) {
var _extraProps$onEvent;
return (_extraProps$onEvent = extraProps.onEvent) === null || _extraProps$onEvent === void 0 ? void 0 : _extraProps$onEvent.call(extraProps, _objectSpread({
record: record,
recordIndex: recordIndex
}, event), tableInfo);
}
});
};
}
var _columnSchema$compone = columnSchema.component.split('::'),
_columnSchema$compone2 = _slicedToArray(_columnSchema$compone, 2),
libName = _columnSchema$compone2[0],
componentName = _columnSchema$compone2[1];
if (!componentName && extraProps.defaultComponentLib) {
componentName = libName;
libName = extraProps.defaultComponentLib;
}
if (libName && componentName) {
var _extraProps$component, _extraProps$component2;
var ExtraComponent = (_extraProps$component = extraProps.components) === null || _extraProps$component === void 0 ? void 0 : (_extraProps$component2 = _extraProps$component[libName]) === null || _extraProps$component2 === void 0 ? void 0 : _extraProps$component2[componentName];
if (ExtraComponent) {
return function ExtraComponentIns(_, row) {
var rawValue = _indexValue(row.record, columnSchema.dataIndex, columnSchema.defaultValue);
var record = row.record;
var recordIndex = row.index;
var ext = extraProps.ext;
var value = dataTranslator(rawValue, {
value: rawValue,
record: record,
recordIndex: recordIndex,
ext: ext
});
var translatorContext = {
value: value,
record: record,
recordIndex: recordIndex,
ext: ext
};
if (hiddenTranslator(false, translatorContext)) {
return null;
}
var finalColumnSchema = extraProps.schemaFunctionPreprocessor ? hookSchemaEventRaiser(columnSchema, extraProps.schemaFunctionPreprocessor, {
value: value,
record: record,
recordIndex: recordIndex,
ext: ext
}) : columnSchema;
return /*#__PURE__*/React.createElement(ExtraComponent, {
data: record,
record: record,
recordIndex: recordIndex,
value: value,
indexValue: function indexValue(dataIndex, defaultValue) {
var v = _indexValue(row.record, dataIndex, defaultValue !== null && defaultValue !== void 0 ? defaultValue : columnSchema.defaultValue);
return dataTranslator(v, {
value: v,
record: record,
recordIndex: recordIndex,
ext: ext
});
},
renderSchema: function renderSchema(sc, r, ri) {
var render = columnRenderGenerator(tableInfo, sc, extraProps);
return render(null, {
type: 'body',
key: sc.key,
index: ri,
record: r
}, 0);
},
createEvaluator: extraProps.createEvaluator,
evaluate: extraProps.evaluate,
safeEvaluate: extraProps.safeEvaluate,
finalizeString: extraProps.finalizeString,
preview: extraProps.preview,
disable: Boolean(disableTranslator(false, translatorContext)),
editable: Boolean(editableTranslator(tableInfo.schema.editable, translatorContext)),
onChange: function onChange(v) {
return _onChange(record, recordIndex, v);
},
schema: finalColumnSchema,
ext: extraProps.ext,
components: extraProps.components,
icons: extraProps.icons,
fireEvent: function fireEvent(event) {
var _extraProps$onEvent2;
return (_extraProps$onEvent2 = extraProps.onEvent) === null || _extraProps$onEvent2 === void 0 ? void 0 : _extraProps$onEvent2.call(extraProps, _objectSpread({
record: record,
recordIndex: recordIndex
}, event), tableInfo);
}
});
};
}
}
}
return function UnknownComponentIns() {
var _extraProps$unknownCo;
return (_extraProps$unknownCo = extraProps.unknownComponent) !== null && _extraProps$unknownCo !== void 0 ? _extraProps$unknownCo : /*#__PURE__*/React.createElement("div", {
className: "ajv-error"
}, "Unknown column component: ".concat(columnSchema.component));
};
};
/**
* 根据列 Schema,生成表格列配置
* @param tableInfo 表格信息
* @param columnSchema 表格列 Schema
* @param extraProps 一些额外的参数
* @returns 表格列配置
*/
export var columnGenerator = function columnGenerator(tableInfo, columnSchema, extraProps) {
var _classNames;
var width = String(columnSchema.width).trim();
if (/^[0-9]+$/ig.test(width)) {
width += 'px';
}
var columnTitle = finalizeColumnTitle(columnSchema);
var onTitleRef = function onTitleRef(el) {
var style = _typeof(columnSchema.title) === 'object' && columnSchema.title.style;
if (!style) {
return;
}
var thEl = el;
while (thEl && thEl.tagName !== 'TH') {
var _thEl;
thEl = (_thEl = thEl) === null || _thEl === void 0 ? void 0 : _thEl.parentElement;
}
if (!thEl) {
return;
}
setElementCSS(thEl, style);
};
var titleStyle = _typeof(columnSchema.title) === 'object' && _typeof(columnSchema.title.body) === 'object' && columnSchema.title.body.style ? parseReactCSS(columnSchema.title.body.style) : void 0;
var column = {
key: columnSchema.key,
width: width,
className: classNames((_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-cell--top"), columnSchema.verticalAlign === 'top'), _defineProperty(_classNames, "".concat(prefixCls, "-cell--middle"), columnSchema.verticalAlign === 'middle'), _defineProperty(_classNames, "".concat(prefixCls, "-cell--bottom"), columnSchema.verticalAlign === 'bottom'), _defineProperty(_classNames, "".concat(prefixCls, "-cell--stretch"), columnSchema.verticalAlign === 'stretch'), _classNames)),
align: columnSchema.align,
title: columnSchema.description ? /*#__PURE__*/React.createElement("div", {
ref: onTitleRef
}, /*#__PURE__*/React.createElement("span", {
style: {
marginRight: '6px'
}
}, /*#__PURE__*/React.createElement(RichText, {
className: "".concat(prefixCls, "-column-title"),
style: titleStyle,
html: columnTitle
})), /*#__PURE__*/React.createElement(Tooltip, {
placement: "top",
title: /*#__PURE__*/React.createElement("div", {
onClick: preventEvent
}, /*#__PURE__*/React.createElement(RichText, {
html: columnSchema.description
}))
}, /*#__PURE__*/React.createElement("span", {
role: "img",
"aria-label": "question-circle",
className: "".concat(prefixCls, "-column-title__question-icon")
}, /*#__PURE__*/React.createElement("svg", {
viewBox: "64 64 896 896",
focusable: "false",
"data-icon": "question-circle",
width: "1em",
height: "1em",
fill: "currentColor",
"aria-hidden": "true"
}, /*#__PURE__*/React.createElement("path", {
d: "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"
}), /*#__PURE__*/React.createElement("path", {
d: "M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"
}))))) : /*#__PURE__*/React.createElement(RichText, {
onRef: onTitleRef,
style: titleStyle,
html: columnTitle
}),
dataIndex: columnSchema.dataIndex,
fixed: columnSchema.fixed,
render: columnRenderGenerator(tableInfo, columnSchema, extraProps),
onHeaderCell: function onHeaderCell() {
return {
additionalProps: {
columnSchema: columnSchema
}
};
}
};
return column;
};
var VirtualCell = /*#__PURE__*/React.memo(function (_ref9) {
var _classNames2, _column$render;
var data = _ref9.data,
columnIndex = _ref9.columnIndex,
rowIndex = _ref9.rowIndex,
vcStyle = _ref9.style;
var _useTableContext2 = useTableContext(),
safeExecute = _useTableContext2.safeEvaluate;
var tableUUID = data.tableUUID,
columns = data.columns,
columnsBaseSchema = data.columnsBaseSchema,
dataSource = data.dataSource,
rowKey = data.rowKey,
selectedRowKeys = data.selectedRowKeys,
ext = data.ext;
var columnBaseSchema = childrenLike.findRecursive(columnsBaseSchema, function (_, i) {
return i === columnIndex;
});
var column = childrenLike.findRecursive(columns, function (_, i) {
return i === columnIndex;
});
var row = dataSource[rowIndex];
var recKey = row.record[rowKey];
var selected = selectedRowKeys.includes(recKey);
var context = {
props: {
record: row.record,
recordIndex: row.index,
ext: ext
}
};
var parseStyleSchema = function parseStyleSchema(style) {
return parseCSS(typeof style === 'string' ? safeExecute(style, context) : style);
};
var styleText = stringifyCSS(Object.assign({
'text-align': columnBaseSchema.align
}, Object.fromEntries(Object.entries(vcStyle).map(function (_ref10) {
var _ref11 = _slicedToArray(_ref10, 2),
k = _ref11[0],
v = _ref11[1];
if (typeof v === 'number' && (k === 'top' || k === 'right' || k === 'bottom' || k === 'left' || k === 'width' || k === 'height')) {
return [k, "".concat(v, "px")];
}
return [k, v];
})), parseStyleSchema(columnBaseSchema.style)));
return /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(prefixCls, "-virtual-cell"), (_classNames2 = {}, _defineProperty(_classNames2, "".concat(prefixCls, "-virtual-cell--top"), (columnBaseSchema === null || columnBaseSchema === void 0 ? void 0 : columnBaseSchema.verticalAlign) === 'top'), _defineProperty(_classNames2, "".concat(prefixCls, "-virtual-cell--middle"), (columnBaseSchema === null || columnBaseSchema === void 0 ? void 0 : columnBaseSchema.verticalAlign) === 'middle'), _defineProperty(_classNames2, "".concat(prefixCls, "-virtual-cell--bottom"), (columnBaseSchema === null || columnBaseSchema === void 0 ? void 0 : columnBaseSchema.verticalAlign) === 'bottom'), _defineProperty(_classNames2, "".concat(prefixCls, "-virtual-cell--stretch"), (columnBaseSchema === null || columnBaseSchema === void 0 ? void 0 : columnBaseSchema.verticalAlign) === 'stretch'), _defineProperty(_classNames2, "".concat(prefixCls, "--row-selected"), selected), _classNames2)),
style: parseReactCSS(styleText),
"data-table-uuid": tableUUID,
"data-row-key": row.key,
"data-column-key": columnBaseSchema.key,
"data-basic-style": styleText,
"data-hover-style": stringifyCSS(parseStyleSchema(columnBaseSchema.hoverStyle)),
"data-row-hover-style": stringifyCSS(parseStyleSchema(columnBaseSchema.rowHoverStyle)),
"data-column-hover-style": stringifyCSS(parseStyleSchema(columnBaseSchema.columnHoverStyle)),
"data-row-hover-class": classNames("".concat(prefixCls, "--row-hover"), _defineProperty({}, "".concat(prefixCls, "--row-selected-hover"), selected)),
onMouseEnter: React.useCallback(function (e) {
return onCellMouseEnter(e);
}, []),
onMouseLeave: React.useCallback(function (e) {
return onCellMouseLeave(e);
}, [])
}, (_column$render = column.render) === null || _column$render === void 0 ? void 0 : _column$render.call(column, void 0, row, rowIndex));
}, areEqual);
/**
* 单元格配置
*/
/**
* 设置单元格配置矩阵中指定单元格的属性
* @param rcTableInfo 单元格配置矩阵
* @param rowIndex 设置的单元格行下标
* @param columnIndex 设置的单元格列下标
* @param config 想要设置的单元格属性
*/
var setCellConfig = function setCellConfig(rcTableInfo, rowIndex, columnIndex, config) {
var _ref12, _config$data$rowSpan, _ref13, _config$data$colSpan;
// 初始化单元格配置
if (!rcTableInfo.cellConfigs[rowIndex]) {
rcTableInfo.cellConfigs[rowIndex] = {};
}
if (!rcTableInfo.cellConfigs[rowIndex][columnIndex]) {
rcTableInfo.cellConfigs[rowIndex][columnIndex] = {
data: {}
};
}
var cellConfig = rcTableInfo.cellConfigs[rowIndex][columnIndex]; // 标准化参数
var rowSpan = (_ref12 = (_config$data$rowSpan = config.data.rowSpan) !== null && _config$data$rowSpan !== void 0 ? _config$data$rowSpan : cellConfig.data.rowSpan) !== null && _ref12 !== void 0 ? _ref12 : 1;
var colSpan = (_ref13 = (_config$data$colSpan = config.data.colSpan) !== null && _config$data$colSpan !== void 0 ? _config$data$colSpan : cellConfig.data.colSpan) !== null && _ref13 !== void 0 ? _ref13 : 1;
var primary = rowSpan !== 0 && colSpan !== 0; // 合并单元格冲突
if (cellConfig.spanGroupID && cellConfig.spanGroupID !== config.spanGroupID) {
if (config.spanGroupID) {
rcTableInfo.cellConfigConflictIDs[config.spanGroupID] = true;
}
rcTableInfo.cellConfigConflictIDs[cellConfig.spanGroupID] = true;
}
cellConfig.data.className = config.data.className;
cellConfig.data.rowSpan = rowSpan;
cellConfig.data.colSpan = colSpan;
cellConfig.spanType = config.spanType;
cellConfig.spanGroupID = config.spanGroupID;
cellConfig.spanPrimary = primary;
cellConfig.spanStartRowIndex = primary ? rowIndex : config.spanStartRowIndex;
cellConfig.spanStartColumnIndex = primary ? columnIndex : config.spanStartColumnIndex;
cellConfig.spanEndRowIndex = primary ? rowIndex + rowSpan - 1 : config.spanEndRowIndex;
cellConfig.spanEndColumnIndex = primary ? columnIndex + colSpan - 1 : config.spanEndColumnIndex; // 清空被合并单元格
if (primary) {
for (var r = rowIndex; r < rowIndex + rowSpan; r++) {
for (var c = columnIndex; c < columnIndex + colSpan; c++) {
if (r === rowIndex && c === columnIndex) {
continue;
}
setCellConfig(rcTableInfo, r, c, {
data: {
className: config.data.className,
rowSpan: 0,
colSpan: 0
},
spanType: config.spanType,
spanGroupID: config.spanGroupID,
spanStartRowIndex: rowIndex,
spanStartColumnIndex: columnIndex,
spanEndRowIndex: rowIndex + rowSpan - 1,
spanEndColumnIndex: columnIndex + colSpan - 1
});
}
}
}
};
/**
* 向单元格配置矩阵中插入一行
* @param rcTableInfo 单元格配置矩阵
* @param targetRowIndex 插入的单元格行下标
*/
var insertCellConfigRow = function insertCellConfigRow(rcTableInfo, targetRowIndex) {
// 执行插入:调整稀疏矩阵元素下标
for (var _rowIndex = rcTableInfo.maxRowIndex; _rowIndex >= 0; _rowIndex--) {
var cellConfigRow = rcTableInfo.cellConfigs[_rowIndex];
if (!cellConfigRow) {
if (_rowIndex >= targetRowIndex) {
delete rcTableInfo.cellConfigs[_rowIndex + 1];
}
continue;
}
for (var _columnIndex = 0; _columnIndex <= rcTableInfo.maxColumnIndex; _columnIndex++) {
var config = cellConfigRow[_columnIndex];
if (!config) {
continue;
}
if (config.spanStartRowIndex !== void 0 && config.spanStartRowIndex >= targetRowIndex) {
if (config.spanPrimary && config.data.rowSpan !== void 0) {
config.data.rowSpan -= 1;
}
config.spanStartRowIndex += 1;
}
if (config.spanEndRowIndex !== void 0 && config.spanEndRowIndex >= targetRowIndex) {
if (config.spanPrimary && config.data.rowSpan !== void 0) {
config.data.rowSpan += 1;
}
config.spanEndRowIndex += 1;
}
}
if (_rowIndex >= targetRowIndex) {
rcTableInfo.cellConfigs[_rowIndex + 1] = cellConfigRow;
}
}
delete rcTableInfo.cellConfigs[targetRowIndex];
rcTableInfo.maxRowIndex += 1; // 完成插入:纵向调整合并单元格
var hasSet = {};
for (var _columnIndex2 = 0; _columnIndex2 <= rcTableInfo.maxColumnIndex; _columnIndex2++) {
var _rcTableInfo$cellConf9, _rcTableInfo$cellConf10;
var configT = (_rcTableInfo$cellConf9 = rcTableInfo.cellConfigs[targetRowIndex - 1]) === null || _rcTableInfo$cellConf9 === void 0 ? void 0 : _rcTableInfo$cellConf9[_columnIndex2];
var configB = (_rcTableInfo$cellConf10 = rcTableInfo.cellConfigs[targetRowIndex + 1]) === null || _rcTableInfo$cellConf10 === void 0 ? void 0 : _rcTableInfo$cellConf10[_columnIndex2];
if (configT && configB && configT.spanGroupID === configB.spanGroupID && configT.spanStartRowIndex !== void 0 && configT.spanStartColumnIndex !== void 0) {
var _rcTableInfo$cellConf11;
var spanConfig = (_rcTableInfo$cellConf11 = rcTableInfo.cellConfigs[configT.spanStartRowIndex]) === null || _rcTableInfo$cellConf11 === void 0 ? void 0 : _rcTableInfo$cellConf11[configT.spanStartColumnIndex];
if (spanConfig && spanConfig.spanStartRowIndex !== void 0 && spanConfig.spanEndRowIndex !== void 0 && spanConfig.spanStartColumnIndex !== void 0 && spanConfig.spanEndColumnIndex !== void 0) {
var _hasSet$spanConfig$sp;
// 过滤重复的合并单元格优化性能
if (((_hasSet$spanConfig$sp = hasSet[spanConfig.spanStartRowIndex]) === null || _hasSet$spanConfig$sp === void 0 ? void 0 : _hasSet$spanConfig$sp[spanConfig.spanStartColumnIndex]) === spanConfig.spanGroupID) {
continue;
}
if (!hasSet[spanConfig.spanStartRowIndex]) {
hasSet[spanConfig.spanStartRowIndex] = {};
}
hasSet[spanConfig.spanStartRowIndex][spanConfig.spanStartColumnIndex] = spanConfig.spanGroupID; // 设置合并单元格
setCellConfig(rcTableInfo, spanConfig.spanStartRowIndex, spanConfig.spanStartColumnIndex, _objectSpread(_objectSpread({}, spanConfig), {}, {
data: _objectSpread(_objectSpread({}, spanConfig.data), {}, {
rowSpan: spanConfig.spanEndRowIndex - spanConfig.spanStartRowIndex + 1,
colSpan: spanConfig.spanEndColumnIndex - spanConfig.spanStartColumnIndex + 1
})
}));
continue;
}
}
}
};
/**
* 向单元格配置矩阵中插入一列
* @param rcTableInfo 单元格配置矩阵
* @param targetColumnIndex 插入的单元格列下标
*/
var insertCellConfigColumn = function insertCellConfigColumn(rcTableInfo, targetColumnIndex) {
// 执行插入:调整稀疏矩阵元素下标
for (var _rowIndex2 = 0; _rowIndex2 <= rcTableInfo.maxRowIndex; _rowIndex2++) {
var cellConfigRow = rcTableInfo.cellConfigs[_rowIndex2];
if (!cellConfigRow) {
continue;
}
for (var _columnIndex3 = rcTableInfo.maxColumnIndex; _columnIndex3 >= 0; _columnIndex3--) {
var config = cellConfigRow[_columnIndex3];
if (!config) {
if (_columnIndex3 >= targetColumnIndex) {
delete cellConfigRow[_columnIndex3 + 1];
}
continue;
}
if (config.spanStartColumnIndex !== void 0 && config.spanStartColumnIndex >= targetColumnIndex) {
if (config.spanPrimary && config.data.colSpan !== void 0) {
config.data.colSpan -= 1;
}
config.spanStartColumnIndex += 1;
}
if (config.spanEndColumnIndex !== void 0 && config.spanEndColumnIndex >= targetColumnIndex) {
if (config.spanPrimary && config.data.colSpan !== void 0) {
config.data.colSpan += 1;
}
config.spanEndColumnIndex += 1;
}
if (_columnIndex3 >= targetColumnIndex) {
cellConfigRow[_columnIndex3 + 1] = config;
}
}
delete cellConfigRow[targetColumnIndex];
}
rcTableInfo.maxColumnIndex += 1; // 完成插入:横向调整合并单元格
var hasSet = {};
for (var _rowIndex3 = 0; _rowIndex3 <= rcTableInfo.maxRowIndex; _rowIndex3++) {
var _rcTableInfo$cellConf12, _rcTableInfo$cellConf13;
var configL = (_rcTableInfo$cellConf12 = rcTableInfo.cellConfigs[_rowIndex3]) === null || _rcTableInfo$cellConf12 === void 0 ? void 0 : _rcTableInfo$cellConf12[targetColumnIndex - 1];
var configR = (_rcTableInfo$cellConf13 = rcTableInfo.cellConfigs[_rowIndex3]) === null || _rcTableInfo$cellConf13 === void 0 ? void 0 : _rcTableInfo$cellConf13[targetColumnIndex + 1];
if ((configL === null || configL === void 0 ? void 0 : configL.spanType) === 'row' && configL.spanStartRowIndex !== void 0 && configL.spanStartColumnIndex !== void 0) {
var _rcTableInfo$cellConf14;
var spanConfig = (_rcTableInfo$cellConf14 = rcTableInfo.cellConfigs[configL.spanStartRowIndex]) === null || _rcTableInfo$cellConf14 === void 0 ? void 0 : _rcTableInfo$cellConf14[configL.spanStartColumnIndex];
if (spanConfig) {
var _hasSet$_rowIndex;
// 过滤重复的合并单元格优化性能
if (((_hasSet$_rowIndex = hasSet[_rowIndex3]) === null || _hasSet$_rowIndex === void 0 ? void 0 : _hasSet$_rowIndex[0]) === spanConfig.spanGroupID) {
continue;
}
if (!hasSet[_rowIndex3]) {
hasSet[_rowIndex3] = {};
}
hasSet[_rowIndex3][0] = spanConfig.spanGroupID; // 设置合并单元格
setCellConfig(rcTableInfo, _rowIndex3, 0, _objectSpread(_objectSpread({}, spanConfig), {}, {
data: _objectSpread(_objectSpread({}, spanConfig.data), {}, {
colSpan: rcTableInfo.maxColumnIndex + 1
})
}));
continue;
}
}
if ((configR === null || configR === void 0 ? void 0 : configR.spanType) === 'row' && configR.spanStartRowIndex !== void 0 && configR.spanStartColumnIndex !== void 0) {
var _rcTableInfo$cellConf15;
var _spanConfig = (_rcTableInfo$cellConf15 = rcTableInfo.cellConfigs[configR.spanStartRowIndex]) === null || _rcTableInfo$cellConf15 === void 0 ? void 0 : _rcTableInfo$cellConf15[configR.spanStartColumnIndex];
if (_spanConfig) {
var _hasSet$_rowIndex2;
// 过滤重复的合并单元格优化性能
if (((_hasSet$_rowIndex2 = hasSet[_rowIndex3]) === null || _hasSet$_rowIndex2 === void 0 ? void 0 : _hasSet$_rowIndex2[0]) === _spanConfig.spanGroupID) {
continue;
}
if (!hasSet[_rowIndex3]) {
hasSet[_rowIndex3] = {};
}
hasSet[_rowIndex3][0] = _spanConfig.spanGroupID; // 设置合并单元格
setCellConfig(rcTableInfo, _rowIndex3, 0, _objectSpread(_objectSpread({}, _spanConfig), {}, {
data: _objectSpread(_objectSpread({}, _spanConfig.data), {}, {
colSpan: rcTableInfo.maxColumnIndex + 1
})
}));
continue;
}
}
if (configL && configR && configL.spanGroupID === configR.spanGroupID && configL.spanStartRowIndex !== void 0 && configL.spanStartColumnIndex !== void 0) {
var _rcTableInfo$cellConf16;
var _spanConfig2 = (_rcTableInfo$cellConf16 = rcTableInfo.cellConfigs[configL.spanStartRowIndex]) === null || _rcTableInfo$cellConf16 === void 0 ? void 0 : _rcTableInfo$cellConf16[configL.spanStartColumnIndex];
if (_spanConfig2 && _spanConfig2.spanStartRowIndex !== void 0 && _spanConfig2.spanEndRowIndex !== void 0 && _spanConfig2.spanStartColumnIndex !== void 0 && _spanConfig2.spanEndColumnIndex !== void 0) {
var _hasSet$_spanConfig2$;
// 过滤重复的合并单元格优化性能
if (((_hasSet$_spanConfig2$ = hasSet[_spanConfig2.spanStartRowIndex]) === null || _hasSet$_spanConfig2$ === void 0 ? void 0 : _hasSet$_spanConfig2$[_spanConfig2.spanStartColumnIndex]) === _spanConfig2.spanGroupID) {
continue;
}
if (!hasSet[_spanConfig2.spanStartRowIndex]) {
hasSet[_spanConfig2.spanStartRowIndex] = {};
}
hasSet[_spanConfig2.spanStartRowIndex][_spanConfig2.spanStartColumnIndex] = _spanConfig2.spanGroupID; // 设置合并单元格
setCellConfig(rcTableInfo, _spanConfig2.spanStartRowIndex, _spanConfig2.spanStartColumnIndex, _objectSpread(_objectSpread({}, _spanConfig2), {}, {
data: _objectSpread(_objectSpread({}, _spanConfig2.data), {}, {
rowSpan: _spanConfig2.spanEndRowIndex - _spanConfig2.spanStartRowIndex + 1,
colSpan: _spanConfig2.spanEndColumnIndex - _spanConfig2.spanStartColumnIndex + 1
})
}));
continue;
}
}
}
};
/**
* 从单元格配置矩阵中删除一列
* @param rcTableInfo 单元格配置矩阵
* @param targetColumnIndex 删除的单元格列下标
*/
var removeCellConfigColumn = function removeCellConfigColumn(rcTableInfo, targetColumnIndex) {
// 执行删除:调整稀疏矩阵元素下标
for (var _rowIndex4 = 0; _rowIndex4 <= rcTableInfo.maxRowIndex; _rowIndex4++) {
var cellConfigRow = rcTableInfo.cellConfigs[_rowIndex4];
if (!cellConfigRow) {
continue;
}
for (var _columnIndex4 = 0; _columnIndex4 <= rcTableInfo.maxColumnIndex; _columnIndex4++) {
var config = cellConfigRow[_columnIndex4];
if (!config) {
if (_columnIndex4 > targetColumnIndex) {
delete cellConfigRow[_columnIndex4 - 1];
}
continue;
}
if (config.spanStartColumnIndex !== void 0 && config.spanStartColumnIndex > targetColumnIndex) {
if (config.spanPrimary && config.data.colSpan !== void 0) {
config.data.colSpan += 1;
}
config.spanStartColumnIndex -= 1;
}
if (config.spanEndColumnIndex !== void 0 && config.spanEndColumnIndex >= targetColumnIndex) {
if (config.spanPrimary && config.data.colSpan !== void 0) {
config.data.colSpan -= 1;
}
config.spanEndColumnIndex -= 1;
}
if (_columnIndex4 > targetColumnIndex) {
cellConfigRow[_columnIndex4 - 1] = config;
}
}
delete cellConfigRow[rcTableInfo.maxColumnIndex];
}
rcTableInfo.maxColumnIndex -= 1; // 完成插入:调整合并单元格
var hasSet = {};
for (var _rowIndex5 = 0; _rowIndex5 <= rcTableInfo.maxRowIndex; _rowIndex5++) {
var _rcTableInfo$cellConf17;
var _config = (_rcTableInfo$cellConf17 = rcTableInfo.cellConfigs[_rowIndex5]) === null || _rcTableInfo$cellConf17 === void 0 ? void 0 : _rcTableInfo$cellConf17[targetColumnIndex];
if (_config && _config.spanStartRowIndex !== void 0 && _config.spanStartColumnIndex !== void 0) {
var _rcTableInfo$cellConf18;
var spanConfig = (_rcTableInfo$cellConf18 = rcTableInfo.cellConfigs[_config.spanStartRowIndex]) === null || _rcTableInfo$cellConf18 === void 0 ? void 0 : _rcTableInfo$cellConf18[_config.spanStartColumnIndex];
if (spanConfig && spanConfig.spanStartRowIndex !== void 0 && spanConfig.spanEndRowIndex !== void 0 && spanConfig.spanStartColumnIndex !== void 0 && spanConfig.spanEndColumnIndex !== void 0) {
var _hasSet$spanConfig$sp2;
// 过滤重复的合并单元格优化性能
if (((_hasSet$spanConfig$sp2 = hasSet[spanConfig.spanStartRowIndex]) === null || _hasSet$spanConfig$sp2 === void 0 ? void 0 : _hasSet$spanConfig$sp2[spanConfig.spanStartColumnIndex]) === spanConfig.spanGroupID) {
continue;
}
if (!hasSet[spanConfig.spanStartRowIndex]) {
hasSet[spanConfig.spanStartRowIndex] = {};
}
hasSet[spanConfig.spanStartRowIndex][spanConfig.spanStartColumnIndex] = spanConfig.spanGroupID; // 设置合并单元格
setCellConfig(rcTableInfo, spanConfig.spanStartRowIndex, spanConfig.spanStartColumnIndex, _objectSpread(_objectSpread({}, spanConfig), {}, {
data: _objectSpread(_objectSpread({}, spanConfig.data), {}, {
rowSpan: spanConfig.spanEndRowIndex - spanConfig.spanStartRowIndex + 1,
colSpan: spanConfig.spanEndColumnIndex - spanConfig.spanStartColumnIndex + 1
})
}));
}
}
}
};
function RcHeaderCell(_ref14) {
var children = _ref14.children,
additionalProps = _ref14.additionalProps,
wrapperProps = _objectWithoutProperties(_ref14, _excluded);
return /*#__PURE__*/React.createElement(HeaderCell, {
wrapperProps: wrapperProps,
additionalProps: additionalProps
}, children);
}
function TableLayout(props) {
var _tableProps$schema$ro, _tableInfo$schema, _tableProps$renderPag, _tableInfo$schema$pag4, _tableInfo$schema$pag5, _tableInfo$schema$pag6, _tableInfo$schema$pag7, _tableInfo$schema$pag8, _tableInfo$schema$pag9, _tableInfo$schema$pag10, _tableInfo$schema$pag11, _tableInfo$schema$pag12, _tableInfo$schema$pag13, _tableInfo$schema$pag14, _tableInfo$schema$pag15, _tableInfo$schema$pag16, _tableInfo$schema$pag17, _tableInfo$schema$pag18, _tableInfo$schema$pag19, _tableInfo$schema$scr2, _classNames5, _tableProps$sticky, _tableProps$schema$pa;
var _useTableContext3 = useTableContext(),
tableProps = _useTableContext3.props,
tableInfo = _useTableContext3.info,
tableState = _useTableContext3.state,
setTableState = _useTableContext3.setState,
createEvaluator = _useTableContext3.createEvaluator,
evaluate = _useTableContext3.evaluate,
safeEvaluate = _useTableContext3.safeEvaluate,
finalizeString = _useTableContext3.finalizeString;
var tableUUID = tableInfo.uuid;
var rowKey = (_tableProps$schema$ro = tableProps.schema.rowKey) !== null && _tableProps$schema$ro !== void 0 ? _tableProps$schema$ro : '$$row-key$$';
var _React$useState = React.useState(0),
_React$useState2 = _slicedToArray(_React$useState, 2),
rcTableWidth = _React$useState2[0],
setRcTableWidth = _React$useState2[1];
var _React$useState3 = React.useState(-1),
_React$useState4 = _slicedToArray(_React$useState3, 2),
dragInIndex = _React$useState4[0],
setDragInIndex = _React$us