@ucloud-fe/react-components
Version:
UCloud react components
1,348 lines (1,069 loc) • 82.5 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "prefixCls", {
enumerable: true,
get: function get() {
return _style.prefixCls;
}
});
exports.default = exports.TableContext = exports.placeholderKey = exports.deprecatedLogForOnRowSelect = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _newArrowCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/newArrowCheck"));
var _extend2 = _interopRequireDefault(require("lodash/extend"));
var _findLastIndex2 = _interopRequireDefault(require("lodash/findLastIndex"));
var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
var _forEach2 = _interopRequireDefault(require("lodash/forEach"));
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
var _filter2 = _interopRequireDefault(require("lodash/filter"));
var _isString2 = _interopRequireDefault(require("lodash/isString"));
var _isNumber2 = _interopRequireDefault(require("lodash/isNumber"));
var _clone2 = _interopRequireDefault(require("lodash/clone"));
var _pick2 = _interopRequireDefault(require("lodash/pick"));
var _find2 = _interopRequireDefault(require("lodash/find"));
var _map2 = _interopRequireDefault(require("lodash/map"));
var _each2 = _interopRequireDefault(require("lodash/each"));
var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _createReactContext = _interopRequireDefault(require("create-react-context"));
var _rcTable = _interopRequireDefault(require("../../libs/rc-table"));
var _deprecatedLog = _interopRequireDefault(require("../../utils/deprecatedLog"));
var _warning = _interopRequireWildcard(require("../../utils/warning"));
var _Pagination = _interopRequireDefault(require("../../components/Pagination"));
var _Notice = _interopRequireDefault(require("../../components/Notice"));
var _Checkbox = _interopRequireDefault(require("../../components/Checkbox"));
var _SvgIcon = _interopRequireDefault(require("../../components/SvgIcon"));
var _Radio = _interopRequireDefault(require("../../components/Radio"));
var _Select = _interopRequireDefault(require("../../components/Select"));
var _Tooltip = _interopRequireDefault(require("../../components/Tooltip"));
var _localeConsumerDecorator = _interopRequireDefault(require("../../components/LocaleProvider/localeConsumerDecorator"));
var _ContainerContext = require("../../components/Popover/ContainerContext");
var _style = require("./style");
var _zh_CN = _interopRequireDefault(require("./locale/zh_CN"));
var _DragWrap = _interopRequireDefault(require("./DragWrap"));
var _TableRow = _interopRequireDefault(require("./TableRow"));
var _ResizableTH = _interopRequireDefault(require("./ResizableTH"));
var _excluded = ["options", "multiple", "onChange"],
_excluded2 = ["pagination", "dataSource", "columns", "rowSelection", "onRowSelect", "contextMenu", "emptyContent", "errorContent", "className", "style", "expandedRowRender", "expandIconAsCell", "expandIconColumnIndex", "defaultExpandAllRows", "title", "footer", "columnResizable", "locale", "hideExpandIcon", "onRow", "components", "onExpand", "zebraCrossing", "columnPlaceholder", "tableLayout", "scroll", "customStyle", "dragSorting"];
var _this = void 0,
_dec,
_class,
_class2,
_temp;
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var noop = function noop() {
(0, _newArrowCheck2.default)(this, _this);
}.bind(void 0);
var deprecatedLogForOnRowSelect = (0, _deprecatedLog.default)('Table onRowSelect', 'rowSelection.onChange');
exports.deprecatedLogForOnRowSelect = deprecatedLogForOnRowSelect;
var placeholderKey = 'table_column_width_placeholder';
exports.placeholderKey = placeholderKey;
var TableContext = (0, _createReactContext.default)();
exports.TableContext = TableContext;
var missingColumnKeyWarn = function missingColumnKeyWarn() {
(0, _newArrowCheck2.default)(this, _this);
return (0, _warning.default)('Table column need a unique key');
}.bind(void 0);
var dragSortingWarning = (0, _warning.onceWarning)("Can't use dragSorting with expandedRowRender or column.children");
var uid = 0;
var Table = (_dec = (0, _localeConsumerDecorator.default)({
defaultLocale: _zh_CN.default,
localeName: 'Table'
}), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
(0, _inherits2.default)(Table, _Component);
var _super = _createSuper(Table);
function Table(_props) {
var _this3 = this;
var _this2;
(0, _classCallCheck2.default)(this, Table);
_this2 = _super.call(this, _props);
_this2.check = function (props) {
var _this4 = this;
(0, _newArrowCheck2.default)(this, _this3);
var columns = props.columns;
(0, _each2.default)(columns, function (column) {
(0, _newArrowCheck2.default)(this, _this4);
if (column.key === undefined) missingColumnKeyWarn();
}.bind(this));
}.bind(this);
_this2.componentWillReceiveProps = function (nextProps) {
var _this5 = this;
(0, _newArrowCheck2.default)(this, _this3);
var rowSelection = nextProps.rowSelection;
var dataSource = _this2.props.dataSource;
if ((0, _isObject2.default)(rowSelection) && 'selectedRowKeys' in rowSelection) {
var selectedRowKeyMap = {};
(0, _each2.default)(rowSelection.selectedRowKeys, function (key) {
(0, _newArrowCheck2.default)(this, _this5);
return selectedRowKeyMap[key] = true;
}.bind(this));
_this2.setState({
selectedRowKeyMap: selectedRowKeyMap
});
}
if (JSON.stringify(dataSource) !== JSON.stringify(nextProps.dataSource)) {
_this2.initRenderRowSelectionDate(nextProps);
} // pick controlled filter value
_this2.setState({
filtersFromProps: _this2.calFiltersFromProps(nextProps)
});
if ('order' in nextProps) {
var order = _this2.getOrder(nextProps.order, nextProps.columns);
_this2.setState({
order: order
});
}
}.bind(this);
_this2.initRenderRowSelectionDate = function (props) {
var _this6 = this;
(0, _newArrowCheck2.default)(this, _this3);
var rowSelection = props.rowSelection,
nextDateSource = props.dataSource;
var dataSource = _this2.props.dataSource;
var data = nextDateSource || dataSource;
var _this2$state = _this2.state,
indeterminateSelectedRowKeyMap = _this2$state.indeterminateSelectedRowKeyMap,
selectedRowKeyMap = _this2$state.selectedRowKeyMap;
if (!data || !data.length || !(0, _isObject2.default)(rowSelection)) {
return;
}
var flatDataSourceKeys = _this2.flatDataSourceKeysForMap({
dataSource: data
});
_this2.setState({
flatDataSourceKeys: flatDataSourceKeys
}, function () {
var _this7 = this;
(0, _newArrowCheck2.default)(this, _this6);
if (rowSelection.resetSelected) {
_this2.onSelectedRowKeysChange({});
_this2.setState({
indeterminateSelectedRowKeyMap: {}
});
return;
}
if (rowSelection.multiple !== false && rowSelection.linkage && flatDataSourceKeys.length) {
var _Object$keys$reduce = Object.keys(selectedRowKeyMap).reduce(function (p, key) {
(0, _newArrowCheck2.default)(this, _this7);
var _this2$initLinkageRow = _this2.initLinkageRowSelectionMap(selectedRowKeyMap, true, key, flatDataSourceKeys, indeterminateSelectedRowKeyMap),
mergeMap = _this2$initLinkageRow.mergeMap,
indeterminate = _this2$initLinkageRow.indeterminate;
return {
finalMergeMap: _objectSpread(_objectSpread({}, p.finalMergeMap), mergeMap),
finalIndeterminate: _objectSpread(_objectSpread({}, p.finalIndeterminate), indeterminate)
};
}.bind(this), {
finalMergeMap: {},
finalIndeterminate: {}
}),
finalMergeMap = _Object$keys$reduce.finalMergeMap,
finalIndeterminate = _Object$keys$reduce.finalIndeterminate;
Object.keys(finalMergeMap).forEach(function (key) {
(0, _newArrowCheck2.default)(this, _this7);
selectedRowKeyMap[key] = finalMergeMap[key];
}.bind(this));
_this2.setState({
indeterminateSelectedRowKeyMap: _objectSpread({}, finalIndeterminate)
});
}
}.bind(this));
}.bind(this);
_this2.getOrder = function (order, columns) {
var _this8 = this;
(0, _newArrowCheck2.default)(this, _this3);
if (!order || !columns) return null;
var key = order.key,
state = order.state;
if (!key || !state) return null;
var column = (0, _find2.default)(columns, function (column) {
(0, _newArrowCheck2.default)(this, _this8);
return column.key === key;
}.bind(this));
if (!column) return null;
var columnOrder = column.order,
dataIndex = column.dataIndex;
if (!columnOrder) return null;
var handleOrder = columnOrder.handleOrder;
return {
key: key,
state: state,
dataIndex: dataIndex,
handleOrder: handleOrder
};
}.bind(this);
_this2.calFiltersFromProps = function (_ref2) {
var _this9 = this;
(0, _newArrowCheck2.default)(this, _this3);
var _ref2$columns = _ref2.columns,
columns = _ref2$columns === void 0 ? [] : _ref2$columns;
var filters = {}; // pick filter controlled value
columns.forEach(function (column, i) {
(0, _newArrowCheck2.default)(this, _this9);
var filter = column.filter;
var columnKey = _this2.getColumnKey(column, i);
if (!filter) return;
var filterValue;
if ('value' in filter) {
filterValue = filter.value;
filters[columnKey] = {
value: filterValue
};
}
}.bind(this));
return filters;
}.bind(this);
_this2.calDefaultFilters = function (_ref3) {
var _this10 = this;
(0, _newArrowCheck2.default)(this, _this3);
var _ref3$columns = _ref3.columns,
columns = _ref3$columns === void 0 ? [] : _ref3$columns;
var filters = {}; // pick filter controlled value
columns.forEach(function (column, i) {
(0, _newArrowCheck2.default)(this, _this10);
var filter = column.filter;
if (!filter) return;
var columnKey = _this2.getColumnKey(column, i);
var filterValue; // pick default value
if ('defaultValue' in filter) {
filterValue = filter.defaultValue;
filters[columnKey] = {
value: filterValue
};
}
}.bind(this));
return filters;
}.bind(this);
_this2.mergeFilters = function (stateFilters, propsFilters, columns) {
var _this11 = this;
(0, _newArrowCheck2.default)(this, _this3);
var filters = _objectSpread(_objectSpread({}, stateFilters), propsFilters);
(0, _each2.default)(filters, function (filter, key) {
var _this12 = this;
(0, _newArrowCheck2.default)(this, _this11);
var column = (0, _find2.default)(columns, function (column, i) {
(0, _newArrowCheck2.default)(this, _this12);
return _this2.getColumnKey(column, i) === key;
}.bind(this));
if (!column || filter.value == null || !column.filter || column.filter.multiple && !filter.value.length) {
delete filters[key];
} else {
filter.column = column;
}
}.bind(this));
return filters;
}.bind(this);
_this2.getExpandedRowKeys = function (dataSource, changedUnExpandedRowKeys) {
var _this13 = this;
(0, _newArrowCheck2.default)(this, _this3);
// 拍平数据
var flatDataSource = _this2.flatDataSource(dataSource);
var expandedRowKeys = [];
(0, _each2.default)(flatDataSource, function (item) {
(0, _newArrowCheck2.default)(this, _this13);
var key = item.key;
if (!changedUnExpandedRowKeys[key]) {
expandedRowKeys.push(key);
}
}.bind(this));
return expandedRowKeys;
}.bind(this);
_this2.deprecatedOnRowSelect = function (selectedRowKeys) {
(0, _newArrowCheck2.default)(this, _this3);
if ('onRowSelect' in _this2.props) {
deprecatedLogForOnRowSelect();
_this2.props.onRowSelect(selectedRowKeys);
}
}.bind(this);
_this2.onSelectedRowKeysChange = function (selectedRowKeyMap) {
var _this14 = this;
(0, _newArrowCheck2.default)(this, _this3);
var rowSelection = _this2.props.rowSelection;
var parentSelectedRowKeys = _this2.state.parentSelectedRowKeys;
if (!rowSelection) return;
var selectedRowKeys = [];
(0, _each2.default)(selectedRowKeyMap, function (selected, key) {
(0, _newArrowCheck2.default)(this, _this14);
selected && selectedRowKeys.push(key);
}.bind(this));
if ((0, _isObject2.default)(rowSelection)) {
if (rowSelection.onChange) {
rowSelection.onChange(selectedRowKeys);
}
if (!('selectedRowKeys' in rowSelection)) {
_this2.setState({
selectedRowKeyMap: selectedRowKeyMap
});
}
} else {
_this2.setState({
selectedRowKeyMap: selectedRowKeyMap
});
}
_this2.deprecatedOnRowSelect(selectedRowKeys);
}.bind(this);
_this2.onColumnConfigChange = function (config) {
(0, _newArrowCheck2.default)(this, _this3);
var onColumnConfigChange = _this2.props.onColumnConfigChange;
_this2.setState({
columnConfig: config
});
onColumnConfigChange(config);
}.bind(this);
_this2.handleSearch = function (v) {
(0, _newArrowCheck2.default)(this, _this3);
if (v !== _this2.state.searchValue) {
_this2.setState({
pagination: _objectSpread(_objectSpread({}, _this2.state.pagination), {}, {
current: 1
})
});
_this2.handleConditionChange({
searchValue: v
});
}
}.bind(this);
_this2.handleConditionChange = function (stateCondition) {
var _this15 = this;
var callbackCondition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
stateCondition = _objectSpread(_objectSpread({}, (0, _pick2.default)(_this2.state, ['order', 'filters', 'searchValue'])), stateCondition);
_this2.setState(_objectSpread({}, stateCondition));
var onConditionChange = _this2.props.onConditionChange;
var order = callbackCondition.order,
filters = callbackCondition.filters,
searchValue = callbackCondition.searchValue;
if (!('order' in callbackCondition)) {
order = stateCondition.order;
}
if (!('filters' in callbackCondition)) {
filters = stateCondition.filters;
}
if (!('searchValue' in callbackCondition)) {
searchValue = stateCondition.searchValue;
}
onConditionChange && onConditionChange({
order: order ? (0, _pick2.default)(order, ['key', 'state']) : null,
filters: (0, _map2.default)(filters, function (filter, key) {
(0, _newArrowCheck2.default)(this, _this15);
return {
key: key,
value: filter.value
};
}.bind(this)),
searchValue: searchValue
});
};
_this2.renderFilter = function (column) {
var _this16 = this;
var filterInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var index = arguments.length > 2 ? arguments[2] : undefined;
var filter = column.filter;
if (!filter) {
return null;
}
var columnKey = _this2.getColumnKey(column, index);
var options = filter.options,
multiple = filter.multiple,
_filter$onChange = filter.onChange,
onChange = _filter$onChange === void 0 ? function () {
(0, _newArrowCheck2.default)(this, _this16);
}.bind(this) : _filter$onChange,
rest = (0, _objectWithoutProperties2.default)(filter, _excluded);
var newOptions = (0, _map2.default)(options, function (option) {
(0, _newArrowCheck2.default)(this, _this16);
return (0, _isObject2.default)(option) ? option : {
value: option
};
}.bind(this));
var value = filterInfo.value;
var finalValue = value == null || multiple && !value.length ? null : value;
return /*#__PURE__*/_react.default.createElement(_Select.default, (0, _extends2.default)({
options: newOptions,
value: finalValue,
onChange: function (value) {
(0, _newArrowCheck2.default)(this, _this16);
_this2.handleFilter(columnKey, value == null || multiple && !value.length ? null : value);
onChange(value);
}.bind(this),
className: "".concat(_style.prefixCls, "-filter"),
renderSelector: function (content, active) {
(0, _newArrowCheck2.default)(this, _this16);
return /*#__PURE__*/_react.default.createElement(_style.FilterIcon, {
key: "icon",
type: "filter",
active: active,
disabled: rest.disabled
});
}.bind(this),
multiple: multiple
}, rest));
};
_this2.handleFilter = function (key, value) {
(0, _newArrowCheck2.default)(this, _this3);
var finalFilters = _this2.mergeFilters(_this2.state.filters, _objectSpread(_objectSpread({}, _this2.state.filtersFromProps), {}, (0, _defineProperty2.default)({}, key, {
value: value
})), _this2.props.columns);
_this2.setState({
pagination: _objectSpread(_objectSpread({}, _this2.state.pagination), {}, {
current: 1
})
});
_this2.handleConditionChange({
filters: finalFilters
});
}.bind(this);
_this2.clearFilter = function () {
(0, _newArrowCheck2.default)(this, _this3);
_this2.handleConditionChange({
filters: {},
searchValue: ''
}, {
filters: {}
});
}.bind(this);
_this2.renderOrder = function (order, key, dataIndex) {
var _this17 = this;
var state = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'none';
if (!order) {
return null;
}
var handleOrder = order.handleOrder;
return /*#__PURE__*/_react.default.createElement(_style.SortIcon, {
type: {
none: 'sort',
desc: 'line-arrow-down',
asc: 'line-arrow-up'
}[state],
onClick: function () {
(0, _newArrowCheck2.default)(this, _this17);
_this2.handleOrder(key, {
dataIndex: dataIndex,
handleOrder: handleOrder,
state: state
});
}.bind(this)
});
};
_this2.handleOrder = function (key, _ref4) {
(0, _newArrowCheck2.default)(this, _this3);
var dataIndex = _ref4.dataIndex,
handleOrder = _ref4.handleOrder,
state = _ref4.state;
var order = state === 'asc' ? null : {
key: key,
dataIndex: dataIndex,
handleOrder: handleOrder,
state: {
none: 'desc',
desc: 'asc'
}[state]
}; // controlled
if ('order' in _this2.props) {
_this2.handleConditionChange({}, {
order: order
});
} else {
_this2.handleConditionChange({
order: order
});
}
}.bind(this);
_this2.flatDataSource = function () {
var _this18 = this;
var dataSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var childrenName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'children';
var result = [];
var push = function push(record) {
(0, _newArrowCheck2.default)(this, _this18);
var index = result.length;
result.push({
record: record,
index: index,
key: _this2.getRowKey(record, index)
});
}.bind(this);
var _loop = function loop(array) {
var _this19 = this;
(0, _newArrowCheck2.default)(this, _this18);
array.forEach(function (record) {
(0, _newArrowCheck2.default)(this, _this19);
if (record && record[childrenName]) {
var newRecord = _objectSpread({}, record);
delete newRecord[childrenName];
push(newRecord);
if (record[childrenName].length > 0) {
_loop(record[childrenName]);
}
} else {
push(record);
}
}.bind(this));
}.bind(this);
_loop(dataSource);
return result;
};
_this2.getDataSource = function (filters) {
var _this20 = this;
(0, _newArrowCheck2.default)(this, _this3);
var _this2$props = _this2.props,
dataSource = _this2$props.dataSource,
handleSearch = _this2$props.handleSearch,
doNotHandleCondition = _this2$props.doNotHandleCondition;
var _this2$state2 = _this2.state,
order = _this2$state2.order,
searchValue = _this2$state2.searchValue;
var data = (0, _clone2.default)(dataSource);
var doFilter = function doFilter(dataSource, filter) {
var _this21 = this;
(0, _newArrowCheck2.default)(this, _this20);
var value = filter.value,
columnInfo = filter.column;
var dataIndex = columnInfo.dataIndex,
_columnInfo$filter = columnInfo.filter,
multiple = _columnInfo$filter.multiple,
_columnInfo$filter$ha = _columnInfo$filter.handleFilter,
handleFilter = _columnInfo$filter$ha === void 0 ? function (value, record, filterValue, multiple) {
(0, _newArrowCheck2.default)(this, _this21);
if (value == null) {
return false;
}
if ((0, _isNumber2.default)(value)) {
value = '' + value;
} else if (!(0, _isString2.default)(value)) {
return false;
}
if (!multiple) {
return value.indexOf(filterValue) >= 0;
} else {
for (var i = 0; i < filterValue.length; i++) {
var v = filterValue[i];
if (value.indexOf(v) >= 0) {
return true;
}
}
}
}.bind(this) : _columnInfo$filter$ha;
return (0, _filter2.default)(dataSource, function (record) {
(0, _newArrowCheck2.default)(this, _this21);
return handleFilter(record && record[dataIndex], record, value, multiple);
}.bind(this));
}.bind(this);
if (!doNotHandleCondition && !(0, _isEmpty2.default)(filters)) {
(0, _forEach2.default)(filters, function (filter, key) {
(0, _newArrowCheck2.default)(this, _this20);
return data = doFilter(data, filter, key);
}.bind(this));
}
var doSearch = function doSearch(dataSource, searchValue) {
var _this22 = this;
(0, _newArrowCheck2.default)(this, _this20);
return dataSource.filter(function (record) {
(0, _newArrowCheck2.default)(this, _this22);
return handleSearch(record, searchValue);
}.bind(this));
}.bind(this);
if (!doNotHandleCondition && searchValue && searchValue.trim()) {
data = doSearch(data, searchValue.trim());
}
var doOrder = function doOrder(dataSource, order) {
var _this23 = this;
(0, _newArrowCheck2.default)(this, _this20);
var dataIndex = order.dataIndex,
handleOrder = order.handleOrder,
state = order.state;
return dataSource.sort(handleOrder ? function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return handleOrder.apply(void 0, [state].concat(args));
} : {
desc: function desc(a, b) {
(0, _newArrowCheck2.default)(this, _this23);
return a[dataIndex] > b[dataIndex] ? -1 : a[dataIndex] < b[dataIndex] ? 1 : 0;
}.bind(this),
asc: function asc(a, b) {
(0, _newArrowCheck2.default)(this, _this23);
return a[dataIndex] < b[dataIndex] ? -1 : a[dataIndex] > b[dataIndex] ? 1 : 0;
}.bind(this)
}[state]);
}.bind(this);
if (!doNotHandleCondition && order) {
data = doOrder(data, order);
}
var total = data.length;
var pagination = _this2.getPagination();
if (!doNotHandleCondition && pagination !== null) {
var current = pagination.current,
pageSize = pagination.pageSize;
var from = (current - 1) * pageSize;
var to = from + pageSize;
data = data.slice(from, to);
}
return {
dataSource: data,
total: total
};
}.bind(this);
_this2.handleToggleCurrentPage = function (enableKeysOfCurrentPage, checked) {
var _this24 = this;
(0, _newArrowCheck2.default)(this, _this3);
var flatDataSourceKeys = _this2.state.flatDataSourceKeys;
var parentSelectedRowKeys = [];
if (checked) {
flatDataSourceKeys.forEach(function (item) {
(0, _newArrowCheck2.default)(this, _this24);
if (!item.parent) {
parentSelectedRowKeys.push(item.key);
}
}.bind(this));
}
var selectedRowKeyMap = _this2.state.selectedRowKeyMap;
var extendSelectedRowKeyMap = {};
(0, _each2.default)(enableKeysOfCurrentPage, function (key) {
(0, _newArrowCheck2.default)(this, _this24);
extendSelectedRowKeyMap[key] = checked;
}.bind(this));
_this2.setState({
indeterminateSelectedRowKeyMap: {},
parentSelectedRowKeys: parentSelectedRowKeys
}, function () {
(0, _newArrowCheck2.default)(this, _this24);
_this2.onSelectedRowKeysChange(_objectSpread(_objectSpread({}, selectedRowKeyMap), extendSelectedRowKeyMap));
}.bind(this));
}.bind(this);
_this2.handleSelectRecord = function (_ref5) {
var _this25 = this;
(0, _newArrowCheck2.default)(this, _this3);
var key = _ref5.key,
checked = _ref5.checked,
flatDataSourceKeys = _ref5.flatDataSourceKeys,
indeterminateSelectedRowKeyMap = _ref5.indeterminateSelectedRowKeyMap;
var rowSelection = _this2.props.rowSelection;
var selectedRowKeyMap = _this2.state.selectedRowKeyMap;
if (rowSelection.multiple === false) {
_this2.onSelectedRowKeysChange((0, _defineProperty2.default)({}, key, true));
} else {
var nowSelectedRowKeyMap = _objectSpread(_objectSpread({}, selectedRowKeyMap), {}, (0, _defineProperty2.default)({}, key, checked));
if (!rowSelection.linkage) {
_this2.onSelectedRowKeysChange(_objectSpread({}, nowSelectedRowKeyMap));
return;
}
var _this2$initLinkageRow2 = _this2.initLinkageRowSelectionMap(nowSelectedRowKeyMap, checked, key, flatDataSourceKeys, indeterminateSelectedRowKeyMap),
mergeMap = _this2$initLinkageRow2.mergeMap,
indeterminate = _this2$initLinkageRow2.indeterminate;
var truthyKeys = Object.keys(mergeMap).filter(function (key) {
(0, _newArrowCheck2.default)(this, _this25);
return Boolean(mergeMap[key]);
}.bind(this));
var parentSelectedRowKeys = truthyKeys.reduce(function (p, key) {
var _this26 = this;
(0, _newArrowCheck2.default)(this, _this25);
var record = flatDataSourceKeys.find(function (record) {
(0, _newArrowCheck2.default)(this, _this26);
return String(record.key) == String(key);
}.bind(this));
var parentKeys = p.filter(function (x) {
(0, _newArrowCheck2.default)(this, _this26);
return !record.childrenKeys.includes(x);
}.bind(this));
return parentKeys;
}.bind(this), (0, _toConsumableArray2.default)(truthyKeys));
_this2.setState({
indeterminateSelectedRowKeyMap: indeterminate,
parentSelectedRowKeys: parentSelectedRowKeys
}, function () {
(0, _newArrowCheck2.default)(this, _this25);
_this2.onSelectedRowKeysChange(_objectSpread({}, mergeMap));
}.bind(this));
}
}.bind(this);
_this2.getRowKey = function (record, index) {
(0, _newArrowCheck2.default)(this, _this3);
var rowKey = _this2.props.rowKey;
var key = typeof rowKey === 'function' ? rowKey(record, index) : record && record[rowKey];
return key === undefined ? index : key;
}.bind(this);
_this2.getColumnKey = function () {
var column = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var index = arguments.length > 1 ? arguments[1] : undefined;
var key = column.key;
return (key === undefined ? index : key) + '';
};
_this2.flatDataSourceKeysForMap = function (_ref6) {
var _this28 = this;
var dataSource = _ref6.dataSource;
var childrenName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'children';
var result = [];
var _self = (0, _assertThisInitialized2.default)(_this2);
function getKey(children) {
var _this27 = this;
return children.reduce(function (p, item) {
(0, _newArrowCheck2.default)(this, _this27);
var curIndex = _self.getRowKey(item, item.tableKey);
p = [].concat((0, _toConsumableArray2.default)(p), [curIndex]);
var childrenKeys = [];
if (item[childrenName]) {
childrenKeys = getKey(item[childrenName]);
}
return [].concat((0, _toConsumableArray2.default)(p), (0, _toConsumableArray2.default)(childrenKeys));
}.bind(this), []);
}
var push = function push(record, parent) {
(0, _newArrowCheck2.default)(this, _this28);
var index = result.length;
var children = record[childrenName] || [];
delete record[childrenName];
var data = {
record: record,
parent: parent,
index: index,
key: _this2.getRowKey(record, index),
childrenKeys: getKey(children)
};
result.push(data);
return data;
}.bind(this);
var _loop2 = function loop(array, parent) {
var _this29 = this;
(0, _newArrowCheck2.default)(this, _this28);
array.forEach(function (record) {
(0, _newArrowCheck2.default)(this, _this29);
if (record && record[childrenName]) {
var newRecord = _objectSpread({}, record);
var parentData = push(newRecord, parent);
if (record[childrenName].length > 0) {
_loop2(record[childrenName], parentData);
}
} else {
push(record, parent);
}
}.bind(this));
}.bind(this); // 递归函数,用于深度优先遍历并设置 key
function setTableKeys(data) {
var _this30 = this;
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
data.forEach(function (item) {
(0, _newArrowCheck2.default)(this, _this30);
item.tableKey = index++;
if (item[childrenName] && item[childrenName].length > 0) {
index = setTableKeys(item[childrenName], index);
}
}.bind(this));
return index;
}
var cloneDataSource = (0, _cloneDeep2.default)((0, _toConsumableArray2.default)(dataSource)).filter(function (item) {
(0, _newArrowCheck2.default)(this, _this28);
return !!item;
}.bind(this)); // 调用递归函数
setTableKeys(cloneDataSource);
_loop2(cloneDataSource, null);
return result;
};
_this2.getDragSorting = function () {
var _this31 = this;
(0, _newArrowCheck2.default)(this, _this3);
var _this2$props2 = _this2.props,
dragSorting = _this2$props2.dragSorting,
expandedRowRender = _this2$props2.expandedRowRender,
columns = _this2$props2.columns;
if (!dragSorting) return false; // 排序暂不支持有展开行配置的table
if (expandedRowRender || columns && columns.findIndex(function (column) {
(0, _newArrowCheck2.default)(this, _this31);
return !!column.children;
}.bind(this)) >= 0) {
dragSortingWarning();
return false;
}
return dragSorting;
}.bind(this);
_this2.getColumns = function (dataSourceOfCurrentPage, filters, indeterminateSelectedRowKeyMap) {
var _this32 = this;
(0, _newArrowCheck2.default)(this, _this3);
var _this2$props3 = _this2.props,
columns = _this2$props3.columns,
rowSelection = _this2$props3.rowSelection,
columnPlaceholder = _this2$props3.columnPlaceholder,
locale = _this2$props3.locale,
dataSource = _this2$props3.dataSource,
columnResizable = _this2$props3.columnResizable;
var _this2$state3 = _this2.state,
_this2$state3$order = _this2$state3.order,
currentOrder = _this2$state3$order === void 0 ? {} : _this2$state3$order,
selectedRowKeyMap = _this2$state3.selectedRowKeyMap,
columnConfig = _this2$state3.columnConfig;
var flatDataSourceKeys = _this2.flatDataSourceKeysForMap({
dataSource: dataSourceOfCurrentPage
});
var cloneColumns = columns.map(function (column, index) {
(0, _newArrowCheck2.default)(this, _this32);
return _objectSpread(_objectSpread({}, column), {}, {
index: index
});
}.bind(this));
var newColumns = cloneColumns.filter(function (column) {
(0, _newArrowCheck2.default)(this, _this32);
var key = column.key;
return !columnConfig[key] || !columnConfig[key].hidden;
}.bind(this));
var _generateColumnTitle = function generateColumnTitle(column) {
(0, _newArrowCheck2.default)(this, _this32);
var dataIndex = column.dataIndex,
title = column.title,
renderTitle = column.renderTitle,
order = column.order,
children = column.children,
index = column.index;
var columnKey = _this2.getColumnKey(column, index);
if (children) {
return _objectSpread(_objectSpread({}, column), {}, {
children: children.map(_generateColumnTitle)
});
} else {
return _objectSpread(_objectSpread({}, column), {}, {
title: /*#__PURE__*/_react.default.createElement("div", null, renderTitle ? renderTitle(title) : title, _this2.renderFilter(column, filters[columnKey], index), _this2.renderOrder(order, columnKey, dataIndex, currentOrder && currentOrder.key === columnKey ? currentOrder.state : 'none'))
});
}
}.bind(this);
newColumns = newColumns.map(_generateColumnTitle);
if (columnResizable) {
newColumns.forEach(function (column) {
(0, _newArrowCheck2.default)(this, _this32);
column.resizable = true;
}.bind(this));
}
if (rowSelection) {
var flatDataSourceOfCurrentPage = _this2.flatDataSource(dataSourceOfCurrentPage);
var enableDataSourceOfCurrentPage = flatDataSourceOfCurrentPage;
var flatDataSource = _this2.flatDataSource(dataSource);
var enableDataSource = flatDataSource;
var selectionDisabled = rowSelection.disabled;
var disableItems = rowSelection.getDisabledOfRow && _this2.initDisabledOfRow(flatDataSourceKeys);
var linkageFlag = rowSelection.multiple !== false && rowSelection.linkage ? true : false;
if (rowSelection.getDisabledOfRow) {
enableDataSourceOfCurrentPage = (0, _filter2.default)(flatDataSourceOfCurrentPage, function (item) {
(0, _newArrowCheck2.default)(this, _this32);
return linkageFlag ? !disableItems.includes(item.key) : !rowSelection.getDisabledOfRow(item.record);
}.bind(this));
enableDataSource = (0, _filter2.default)(flatDataSource, function (item) {
(0, _newArrowCheck2.default)(this, _this32);
return linkageFlag ? !disableItems.includes(item.key) : !rowSelection.getDisabledOfRow(item.record);
}.bind(this));
}
var selectedEnableDataSourceOfCurrentPage = (0, _filter2.default)(enableDataSourceOfCurrentPage, function (item) {
(0, _newArrowCheck2.default)(this, _this32);
return selectedRowKeyMap[item.key];
}.bind(this));
var selectedEnableDataSource = (0, _filter2.default)(enableDataSource, function (item) {
(0, _newArrowCheck2.default)(this, _this32);
return selectedRowKeyMap[item.key];
}.bind(this));
var selectedEnableDataSourceOfCurrentPageCount = selectedEnableDataSourceOfCurrentPage.length;
var isAllSelected = selectedEnableDataSourceOfCurrentPageCount === enableDataSourceOfCurrentPage.length && selectedEnableDataSourceOfCurrentPageCount > 0;
var selectedCount = (0, _filter2.default)(selectedRowKeyMap, function (v) {
(0, _newArrowCheck2.default)(this, _this32);
return v;
}.bind(this)).length;
var renderSelectedAllCheckbox = function renderSelectedAllCheckbox() {
var _this33 = this;
(0, _newArrowCheck2.default)(this, _this32);
return /*#__PURE__*/_react.default.createElement(_Checkbox.default, {
disabled: selectionDisabled,
onChange: function () {
var _this34 = this;
(0, _newArrowCheck2.default)(this, _this33);
var enableKeysOfCurrentPage = enableDataSourceOfCurrentPage.map(function (item) {
(0, _newArrowCheck2.default)(this, _this34);
return item.key;
}.bind(this));
_this2.handleToggleCurrentPage(enableKeysOfCurrentPage, !isAllSelected);
}.bind(this),
checked: isAllSelected,
indeterminate: !isAllSelected && selectedEnableDataSourceOfCurrentPageCount > 0
});
}.bind(this);
newColumns.unshift({
title: rowSelection.multiple === false ? null : rowSelection.selectedTip === false ? renderSelectedAllCheckbox() : /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
visible: selectedCount > 0,
getPopupContainer: _this2.getPopupContainer,
popup: /*#__PURE__*/_react.default.createElement("span", null, locale.selected, " ", selectedCount, ' ', /*#__PURE__*/_react.default.createElement(_style.CancelSelect, {
onClick: function () {
var _this35 = this;
(0, _newArrowCheck2.default)(this, _this32);
var enableKeys = selectedEnableDataSource.map(function (item) {
(0, _newArrowCheck2.default)(this, _this35);
return item.key;
}.bind(this));
_this2.handleToggleCurrentPage(enableKeys, false);
}.bind(this)
}, locale.cancelSelect)),
placement: rowSelection.selectedTip === 'bottom' ? 'bottomLeft' : 'topLeft',
align: {
offset: [-8, 0]
}
}, renderSelectedAllCheckbox()),
key: 'table_row_selection',
width: 32,
fixed: rowSelection.fixed,
onHeaderCell: function onHeaderCell() {
(0, _newArrowCheck2.default)(this, _this32);
return {
className: _style.selectIconHeaderCls
};
}.bind(this),
onCell: function onCell() {
(0, _newArrowCheck2.default)(this, _this32);
return {
className: _style.selectIconCellCls
};
}.bind(this),
render: function render(value, record, index) {
var _this36 = this;
(0, _newArrowCheck2.default)(this, _this32);
var rowKey = _this2.getRowKey(record, index);
var disabled = false;
if (selectionDisabled) {
disabled = true;
} else if (rowSelection.getDisabledOfRow) {
disabled = linkageFlag ? disableItems.includes(record.key) : rowSelection.getDisabledOfRow(record);
}
return rowSelection.multiple === false ? /*#__PURE__*/_react.default.createElement(_Radio.default, {
disabled: disabled,
onChange: function () {
(0, _newArrowCheck2.default)(this, _this36);
return _this2.handleSelectRecord({
key: rowKey
});
}.bind(this),
checked: !!selectedRowKeyMap[rowKey]
}) : /*#__PURE__*/_react.default.createElement(_Checkbox.default, {
disabled: disabled,
onChange: function () {
(0, _newArrowCheck2.default)(this, _this36);
return _this2.handleSelectRecord({
key: rowKey,
checked: !selectedRowKeyMap[rowKey],
flatDataSourceKeys: flatDataSourceKeys,
indeterminateSelectedRowKeyMap: indeterminateSelectedRowKeyMap
});
}.bind(this),
checked: !!selectedRowKeyMap[rowKey],
indeterminate: !!indeterminateSelectedRowKeyMap[String(rowKey)]
});
}.bind(this)
});
}
var dragSorting = _this2.getDragSorting();
if (dragSorting) {
newColumns.unshift({
title: null,
key: 'table_row_drag_sorting',
width: 40,
fixed: dragSorting === null || dragSorting === void 0 ? void 0 : dragSorting.fixed,
onHeaderCell: function onHeaderCell() {
(0, _newArrowCheck2.default)(this, _this32);
return {
className: _style.draggerHeaderCls
};
}.bind(this),
onCell: function onCell() {
(0, _newArrowCheck2.default)(this, _this32);
return {
className: _style.draggerCellCls
};
}.bind(this),
render: function render(value, record, index) {
(0, _newArrowCheck2.default)(this, _this32);
var rowKey = _this2.getRowKey(record, index);
return /*#__PURE__*/_react.default.createElement("span", {
"data-row-key": rowKey,
onMouseEnter: _this2.setDraggable,
onMouseLeave: _this2.unsetDraggable,
className: _style.draggerCls,
"data-testid": "draggable"
}, /*#__PURE__*/_react.default.createElement(_SvgIcon.default, {
type: "dragger",
size: "16px"
}));
}.bind(this)
});
}
if (columnPlaceholder) {
var lastUnFixedIndex = (0, _findLastIndex2.default)(newColumns, function (columnConfig) {
(0, _newArrowCheck2.default)(this, _this32);
return !columnConfig.fixed;
}.bind(this));
newColumns.splice(lastUnFixedIndex + 1, 0, {
title: '',
key: placeholderKey,
onHeaderCell: function onHeaderCell() {
(0, _newArrowCheck2.default)(this, _this32);
return {
className: _style.placeholderHeaderCls
};
}.bind(this),
onCell: function onCell() {
(0, _newArrowCheck2.default)(this, _this32);
return {
className: _style.placeholderCellCls
};
}.bind(this),
render: function render() {
(0, _newArrowCheck2.default)(this, _this32);
return null;
}.bind(this)
});
}
return newColumns;
}.bind(this);
_this2.getTableDom = function () {
(0, _newArrowCheck2.default)(this, _this3);
return document.querySelector("[data-table-id=\"".concat(_this2.tableId, "\"]"));
}.bind(this);
_this2.getContentDom = function () {
(0, _newArrowCheck2.default)(this, _this3);
return _this2.getTableDom().querySelector(".".concat(_style.contentCls));
}.bind(this);
_this2.getBodyDom = function () {
(0, _newArrowCheck2.default)(this, _this3);
return _this2.getTableDom().querySelector(".".concat(_style.bodyCls));
}.bind(this);
_this2.getRowDom = function (rowKey) {
(0, _newArrowCheck2.default)(this, _this3);
return _this2.getTableDom().querySelector("tr[data-row-key=\"".concat(rowKey, "\"]"));
}.bind(this);
_this2.getRowDomByIndex = function (rowIndex) {
(0, _newArrowCheck2.default)(this, _this3);
return _this2.getTableDom().querySelector("tr[data-row-index=\"".concat(rowIndex, "\"]"));
}.bind(this);
_this2.__dragEnterCounter = null;
_this2.initDrag = function (source) {
(0, _newArrowCheck2.default)(this, _this3);
_this2.__dragEnterCounter = 0;
_this2.unsetDragOver(source, source);
}.bind(this);
_this2.setDraggable = function (e) {
(0, _newArrowCheck2.default)(this, _this3);
var rowKey = e.currentTarget.dataset['rowKey'];
_this2.getRowDom(rowKey).setAttribute('draggable', true);
}.bind(this);
_this2.unsetDraggable = function (e) {
(0, _newArrowCheck2.default)(this, _this3);
var ro