bee-complex-grid
Version:
Complex Grid for React
371 lines (296 loc) • 11.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || 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; };
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _classnames = require("classnames");
var _classnames2 = _interopRequireDefault(_classnames);
var _beeTable = require("bee-table");
var _beeTable2 = _interopRequireDefault(_beeTable);
var _newMultiSelect = require("bee-table/build/lib/newMultiSelect");
var _newMultiSelect2 = _interopRequireDefault(_newMultiSelect);
var _filterColumn = require("bee-table/build/lib/filterColumn");
var _filterColumn2 = _interopRequireDefault(_filterColumn);
var _dragColumn = require("bee-table/build/lib/dragColumn");
var _dragColumn2 = _interopRequireDefault(_dragColumn);
var _sort = require("bee-table/build/lib/sort");
var _sort2 = _interopRequireDefault(_sort);
var _beeIcon = require("bee-icon");
var _beeIcon2 = _interopRequireDefault(_beeIcon);
var _beeCheckbox = require("bee-checkbox");
var _beeCheckbox2 = _interopRequireDefault(_beeCheckbox);
var _beePopover = require("bee-popover");
var _beePopover2 = _interopRequireDefault(_beePopover);
var _beePagination = require("bee-pagination");
var _beePagination2 = _interopRequireDefault(_beePagination);
var _beeMenus = require("bee-menus");
var _beeMenus2 = _interopRequireDefault(_beeMenus);
var _beeDropdown = require("bee-dropdown");
var _beeDropdown2 = _interopRequireDefault(_beeDropdown);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
// import sum from "bee-table/build/lib/sum";
var propTypes = {
showHeaderMenu: _propTypes2["default"].bool
};
var defaultProps = {
scroll: {
y: true
},
bordered: true,
multiSelect: { type: "checkbox" },
showHeaderMenu: false
};
var Item = _beeMenus2["default"].Item;
// const ComplexTable = filterColumn(
// dragColumn(multiSelect(sum(sort(Table, Icon)), Checkbox)),
// Popover
// );
var ComplexTable = (0, _filterColumn2["default"])((0, _dragColumn2["default"])((0, _newMultiSelect2["default"])((0, _sort2["default"])(_beeTable2["default"], _beeIcon2["default"]), _beeCheckbox2["default"])), _beePopover2["default"]);
var Grid = function (_Component) {
_inherits(Grid, _Component);
function Grid(props) {
_classCallCheck(this, Grid);
var _this = _possibleConstructorReturn(this, _Component.call(this, props));
_initialiseProps.call(_this);
var _props$paginationObj = props.paginationObj,
paginationObj = _props$paginationObj === undefined ? {} : _props$paginationObj,
_props$sort = props.sort,
sort = _props$sort === undefined ? {} : _props$sort;
_this.state = {
activePage: paginationObj.activePage ? paginationObj.activePage : 1,
total: paginationObj.total ? paginationObj.total : 1,
pageItems: paginationObj.items ? paginationObj.items : 1,
columns: props.columns
};
sort.originSortFun = sort.originSortFun ? sort.originSortFun : sort.sortFun;
sort.sortFun = _this.sortFun;
_this.sort = sort;
return _this;
}
Grid.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
if (nextProps.paginationObj) {
this.setState({
activePage: nextProps.paginationObj.activePage ? nextProps.paginationObj.activePage : 1,
total: nextProps.paginationObj.total ? nextProps.paginationObj.total : 1,
pageItems: nextProps.paginationObj.items ? nextProps.paginationObj.items : 1
});
}
if (nextProps.columns && nextProps.columns !== this.state.columns) {
this.setState({
columns: nextProps.columns
});
}
};
/**
* 点击分页
*/
/**
* 设置相关固定Cols
*/
/**
* 设置隐藏显示Cols
*/
/**
* 渲染表头下拉菜单(过滤、隐藏)
* @param {Array} columns 表格列数组
*/
Grid.prototype.renderColumnsDropdown = function renderColumnsDropdown(columns) {
var _this2 = this;
var icon = "uf-arrow-down";
return columns.map(function (originColumn, index) {
var column = _extends({}, originColumn);
var menuInfo = [],
fixTitle = "锁定",
showTitle = "隐藏";
if (originColumn.fixed) {
fixTitle = "解锁";
}
//显示的列showTitle应该都是隐藏
// if(originColumn.hasOwnProperty('ifshow') && originColumn.ifshow == false){
// showTitle = '显示';
// }
menuInfo.push({
info: fixTitle,
key: "fix",
fieldKey: originColumn.key,
index: 0
});
//非固定列添加是否显示菜单item
if (!originColumn.fixed) {
menuInfo.push({
info: showTitle,
key: "show",
fieldKey: originColumn.key,
index: 1
});
}
var menu = _react2["default"].createElement(
_beeMenus2["default"],
{ onSelect: _this2.onMenuSelect, selectedKeys: [] },
menuInfo.map(function (da) {
return _react2["default"].createElement(
Item,
{ key: da.key, index: da.index, data: da },
da.info
);
})
);
column.title = _react2["default"].createElement(
"span",
{ className: "title-con drop-menu" },
column.title,
_react2["default"].createElement(
_beeDropdown2["default"],
{ trigger: ["click"], overlay: menu, animation: "slide-up" },
_react2["default"].createElement(_beeIcon2["default"], { type: icon })
)
);
return column;
});
};
/**
* 表头menu和表格整体过滤时有冲突,因此添加了回调函数
*/
/**
* 后端获取数据
*/
Grid.prototype.render = function render() {
var props = this.props;
var _props$sort2 = props.sort,
sort = _props$sort2 === undefined ? {} : _props$sort2;
//默认固定表头
// let scroll = Object.assign({y:true},props.scroll);
var columns = this.state.columns;
//是否显示表头菜单
if (props.showHeaderMenu) {
columns = this.renderColumnsDropdown(columns);
}
return _react2["default"].createElement(
"div",
{ className: (0, _classnames2["default"])("u-grid", props.className) },
_react2["default"].createElement(ComplexTable, _extends({}, props, {
columns: columns,
afterFilter: this.afterFilter,
sort: this.sort
})),
_react2["default"].createElement(_beePagination2["default"], {
first: true,
last: true,
prev: true,
next: true,
maxButtons: 5,
boundaryLinks: true,
activePage: this.state.activePage,
onSelect: this.handleSelectPage,
showJump: true,
items: this.state.pageItems,
total: this.state.total
})
);
};
return Grid;
}(_react.Component);
var _initialiseProps = function _initialiseProps() {
var _this3 = this;
this.handleSelectPage = function (eventKey) {
var _props$paginationObj2 = _this3.props.paginationObj,
paginationObj = _props$paginationObj2 === undefined ? {} : _props$paginationObj2;
_this3.setState({
activePage: eventKey
});
paginationObj.freshData && paginationObj.freshData(eventKey);
};
this.optFixCols = function (columns, key) {
var fixedLeftCols = [];
var fixedRightCols = [];
var nonColums = [];
columns.find(function (da) {
if (da.key == key) {
da.fixed ? delete da.fixed : da.fixed = "left";
}
if (da.fixed == "left") {
fixedLeftCols.push(da);
} else if (da.fixed == "right") {
fixedRightCols.push(da);
} else {
nonColums.push(da);
}
});
columns = [].concat(fixedLeftCols, nonColums, fixedRightCols);
return columns;
};
this.optShowCols = function (columns, key) {
columns.forEach(function (item, index) {
if (item.key == key) {
item.ifshow = false;
return;
}
});
return columns;
};
this.onMenuSelect = function (_ref) {
var key = _ref.key,
item = _ref.item;
var columns = _this3.state.columns;
var fieldKey = item.props.data.fieldKey;
if (key == "fix") {
columns = _this3.optFixCols(columns, fieldKey);
} else {
columns = _this3.optShowCols(columns, fieldKey);
}
_this3.setState({
columns: columns
});
};
this.afterFilter = function (optData, columns) {
var originColumns = _this3.state.columns;
originColumns.find(function (da) {
if (da.key == optData.key) {
da.ifshow = optData.ifshow;
}
});
_this3.setState({
columns: originColumns
});
if (typeof _this3.props.afterFilter == "function") {
_this3.props.afterFilter(optData, originColumns);
}
};
this.sortFun = function (sortParam) {
// console.info(sortParam);
//解析sortParam,方便column查找
var sortObj = {};
sortParam.forEach(function (item) {
sortObj[item.field] = item;
});
var originColumns = _this3.state.columns;
originColumns.forEach(function (da) {
//保存返回的column状态,没有则终止order状态
if (sortObj[da.dataIndex]) {
da = _extends(da, sortObj[da.dataIndex]);
} else {
da.order = 'flatscend';
da.orderNum = '';
}
});
_this3.setState({
columns: originColumns
});
//将参数传递给后端排序
if (typeof _this3.sort.originSortFun == "function") {
_this3.sort.originSortFun(sortParam);
}
};
};
Grid.propTypes = propTypes;
Grid.defaultProps = defaultProps;
exports["default"] = Grid;
module.exports = exports["default"];