shineout
Version:
Shein 前端组件库
123 lines (97 loc) • 3.96 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _react = _interopRequireDefault(require("react"));
var _immer = _interopRequireDefault(require("immer"));
var _default = function _default(Table) {
return (
/*#__PURE__*/
function (_React$Component) {
(0, _inheritsLoose2.default)(_class, _React$Component);
function _class(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_this.handleResize = _this.handleResize.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.state = {
columns: props.columns,
delta: 0
};
return _this;
}
var _proto = _class.prototype;
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
var _this2 = this;
var prevColumns = prevProps.columns;
var _this$props = this.props,
columns = _this$props.columns,
onColumnResize = _this$props.onColumnResize;
if (prevColumns !== columns) {
if (prevColumns.length !== columns.length) {
// eslint-disable-next-line react/no-did-update-set-state
this.setState({
columns: columns
});
} else {
var widthed = onColumnResize ? columns : (0, _immer.default)(columns, function (draft) {
draft.forEach(function (column, index) {
column.width = _this2.state.columns[index].width;
});
}); // eslint-disable-next-line react/no-did-update-set-state
this.setState({
columns: widthed
});
}
}
};
_proto.getWidth = function getWidth() {
var width = this.props.width;
var columns = this.state.columns;
if (typeof width === 'number') {
var sum = columns.reduce(function (s, col) {
return s + (col.width || 0);
}, 0);
var w = width + this.state.delta;
return w > sum ? w : sum;
}
return width;
};
_proto.handleResize = function handleResize(index, width, colgroup) {
if (colgroup === undefined) return;
var onColumnResize = this.props.onColumnResize;
var changed = (0, _immer.default)(this.state, function (draft) {
var column = draft.columns[index]; // @ts-ignore
draft.delta += parseFloat(width - (column.width || colgroup[index] || 0));
colgroup[index] = width;
draft.columns.forEach(function (col, i) {
var w = colgroup[i];
if (w) col.width = w;
});
});
if (onColumnResize) {
onColumnResize(changed.columns);
return;
}
this.setState(changed);
};
_proto.render = function render() {
var columns = this.state.columns;
var _this$props2 = this.props,
onColumnResize = _this$props2.onColumnResize,
other = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["onColumnResize"]);
var width = this.getWidth();
return _react.default.createElement(Table, (0, _extends2.default)({}, other, {
width: width,
columns: columns,
onResize: this.handleResize
}));
};
return _class;
}(_react.default.Component)
);
};
exports.default = _default;