qm-ui
Version:
千米公有云管理端UI基础组件库
334 lines (266 loc) • 11.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _checkbox = require('antd/lib/checkbox');
var _checkbox2 = _interopRequireDefault(_checkbox);
var _message2 = require('antd/lib/message');
var _message3 = _interopRequireDefault(_message2);
var _dropdown = require('antd/lib/dropdown');
var _dropdown2 = _interopRequireDefault(_dropdown);
var _button = require('antd/lib/button');
var _button2 = _interopRequireDefault(_button);
var _icon = require('antd/lib/icon');
var _icon2 = _interopRequireDefault(_icon);
var _menu = require('antd/lib/menu');
var _menu2 = _interopRequireDefault(_menu);
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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _dec, _class, _class2, _temp, _initialiseProps, _dec2, _dec3, _class3, _class4, _temp2; /**
* @author gcy[of1518]
* @date 16/10/11
*
* @description ColumnManage基于AntDesign的实现
*
*
* columns:props
* type: true || false || undefined || disabled
*
*/
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactDom = require('react-dom');
var _update = require('react/lib/update');
var _update2 = _interopRequireDefault(_update);
var _reactDnd = require('react-dnd');
var _reactDndHtml5Backend = require('react-dnd-html5-backend');
var _reactDndHtml5Backend2 = _interopRequireDefault(_reactDndHtml5Backend);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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) : subClass.__proto__ = superClass; }
var noop = function noop() {
return undefined;
};
var ColumnsManagerUI = (_dec = (0, _reactDnd.DragDropContext)(_reactDndHtml5Backend2.default), _dec(_class = (_temp = _class2 = function (_Component) {
_inherits(ColumnsManagerUI, _Component);
function ColumnsManagerUI(props) {
_classCallCheck(this, ColumnsManagerUI);
var _this = _possibleConstructorReturn(this, (ColumnsManagerUI.__proto__ || Object.getPrototypeOf(ColumnsManagerUI)).call(this, props));
_initialiseProps.call(_this);
var _ref = props || {},
columns = _ref.columns;
columns = columns.map(function (v, k) {
v.id = k;
return v;
});
_this.state = {
columns: columns,
visible: false
};
return _this;
}
_createClass(ColumnsManagerUI, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
var _ref2 = nextProps || {},
columns = _ref2.columns;
columns = columns.map(function (v, k) {
v.id = k;
return v;
});
this.setState({
columns: columns
});
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var self = this;
var _state = this.state,
columns = _state.columns,
visible = _state.visible;
var columnNode = _react2.default.createElement(
_menu2.default,
{ className: 'colunms-dropdown' },
columns.map(function (column, i) {
return _react2.default.createElement(ColumnItem, {
key: column.id,
index: i,
id: column.id,
column: column,
moveColumn: self.moveColumn,
endDrag: self.endDrag,
onColumnChecked: _this2.onColumnChecked
});
})
);
return _react2.default.createElement(
'div',
{ id: '_col_m' },
_react2.default.createElement(
_dropdown2.default,
{ overlay: columnNode },
_react2.default.createElement(
_button2.default,
{ type: 'ghost', className: 'ant-dropdown-link' },
'\u66F4\u6539\u5217\u5C55\u793A',
_react2.default.createElement(_icon2.default, { type: 'down' })
)
)
);
}
/**
* end drag
*/
/**
* darging
*/
/**
* 列显示操作
*/
}]);
return ColumnsManagerUI;
}(_react.Component), _class2.defaultProps = {
//proteced
__hash: '',
columns: [], //列对象集合
onChange: noop,
//private
storageKey: '', //持久化key
storageType: '', //持久化方式 localStorage || sessionStorage || cookie
sortable: true, //是否支持排序
closeLimit: 1 //关闭列限制 number | boolean
}, _initialiseProps = function _initialiseProps() {
var _this3 = this;
this.endDrag = function () {
var onChange = _this3.props.onChange;
var columns = _this3.state.columns;
columns = columns.map(function (v) {
delete v.id;
return v;
});
onChange(columns);
};
this.moveColumn = function (dragIndex, hoverIndex) {
var columns = _this3.state.columns;
var dragCol = columns[dragIndex];
_this3.setState((0, _update2.default)(_this3.state, {
columns: {
$splice: [[dragIndex, 1], [hoverIndex, 0, dragCol]]
}
}));
};
this.onColumnChecked = function (index, checked) {
var _props = _this3.props,
onChange = _props.onChange,
closeLimit = _props.closeLimit;
var columns = _this3.state.columns;
var i = closeLimit;
columns.forEach(function (v) {
if (v && v.show == false) {
i++;
}
});
if (!checked && i >= columns.length) {
_message3.default.warn('\u987D\u76AE\uFF01\u5F53\u524D\u8868\u683C\u81F3\u5C11\u5C55\u793A' + closeLimit + '\u5217\u54E6\uFF01');
} else {
columns[index].show = checked ? undefined : false;
onChange(columns);
}
};
}, _temp)) || _class);
exports.default = ColumnsManagerUI;
var style = {
borderBottom: '1px dashed #f5f5f5',
padding: '8px 10px',
cursor: 'move'
};
var colSource = {
beginDrag: function beginDrag(props) {
return {
id: props.id,
index: props.index
};
},
endDrag: function endDrag(props, monitor) {
props.endDrag();
}
};
var colTarget = {
hover: function hover(props, monitor, component) {
var dragIndex = monitor.getItem().index;
var hoverIndex = props.index;
if (dragIndex === hoverIndex) {
return;
}
var hoverBoundingRect = (0, _reactDom.findDOMNode)(component).getBoundingClientRect();
var hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
var clientOffset = monitor.getClientOffset();
var hoverClientY = clientOffset.y - hoverBoundingRect.top;
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
return;
}
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
return;
}
props.moveColumn(dragIndex, hoverIndex);
monitor.getItem().index = hoverIndex;
}
};
var ColumnItem = (_dec2 = (0, _reactDnd.DropTarget)('table_manager', colTarget, function (connect) {
return {
connectDropTarget: connect.dropTarget()
};
}), _dec3 = (0, _reactDnd.DragSource)('table_manager', colSource, function (connect, monitor) {
return {
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
};
}), _dec2(_class3 = _dec3(_class3 = (_temp2 = _class4 = function (_Component2) {
_inherits(ColumnItem, _Component2);
function ColumnItem() {
_classCallCheck(this, ColumnItem);
return _possibleConstructorReturn(this, (ColumnItem.__proto__ || Object.getPrototypeOf(ColumnItem)).apply(this, arguments));
}
_createClass(ColumnItem, [{
key: 'render',
value: function render() {
var _props2 = this.props,
index = _props2.index,
column = _props2.column,
isDragging = _props2.isDragging,
connectDragSource = _props2.connectDragSource,
connectDropTarget = _props2.connectDropTarget,
onColumnChecked = _props2.onColumnChecked;
var opacity = isDragging ? 0 : 1;
return connectDragSource(connectDropTarget(_react2.default.createElement(
'div',
{ style: _extends({}, style, { opacity: opacity }) },
_react2.default.createElement(
_checkbox2.default,
{
checked: column.show == true || column.show == undefined ? true : false,
onChange: function onChange(e) {
return onColumnChecked(index, e.target.checked);
} },
column.title || '-'
)
)));
}
}]);
return ColumnItem;
}(_react.Component), _class4.propTypes = {
connectDragSource: _propTypes2.default.func.isRequired,
connectDropTarget: _propTypes2.default.func.isRequired,
index: _propTypes2.default.number.isRequired,
isDragging: _propTypes2.default.bool.isRequired,
id: _propTypes2.default.any.isRequired,
column: _propTypes2.default.object.isRequired,
moveColumn: _propTypes2.default.func.isRequired,
onColumnChecked: _propTypes2.default.func.isRequired
}, _temp2)) || _class3) || _class3);