choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
140 lines (122 loc) • 4.18 kB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
import _inherits from "@babel/runtime/helpers/inherits";
import _createSuper from "@babel/runtime/helpers/createSuper";
import React, { Component } from 'react';
import Button from '../button/Button';
import SelectTrigger from '../rc-components/select/SelectTrigger';
import { Item as MenuItem } from '../rc-components/menu';
import { UNSELECTABLE_ATTRIBUTE, UNSELECTABLE_STYLE } from '../rc-components/select/util';
import { getColumnKey } from './util';
import { Size } from '../_util/enum';
import ConfigContext from '../config-provider/ConfigContext';
var ColumnFilter = /*#__PURE__*/function (_Component) {
_inherits(ColumnFilter, _Component);
var _super = _createSuper(ColumnFilter);
function ColumnFilter() {
var _this;
_classCallCheck(this, ColumnFilter);
_this = _super.apply(this, arguments);
_this.state = {
open: false
};
_this.onMenuSelect = function (item) {
item.item.props.value.hidden = false;
_this.fireChange(item);
};
_this.onMenuDeselect = function (item) {
item.item.props.value.hidden = true;
_this.fireChange(item);
};
_this.onDropdownVisibleChange = function (open) {
var _assertThisInitialize = _assertThisInitialized(_this),
state = _assertThisInitialize.state;
if (state.open !== open) {
_this.setState({
open: open
});
}
};
return _this;
}
_createClass(ColumnFilter, [{
key: "render",
value: function render() {
var _this$props = this.props,
prefixCls = _this$props.prefixCls,
getPopupContainer = _this$props.getPopupContainer;
var open = this.state.open;
var getPrefixCls = this.context.getPrefixCls;
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-columns-chooser")
}, /*#__PURE__*/React.createElement(SelectTrigger, {
prefixCls: getPrefixCls('select'),
showAction: ['click'],
options: this.getOptions(),
value: this.getVisibleColumns(),
getPopupContainer: getPopupContainer,
multiple: true,
onDropdownVisibleChange: this.onDropdownVisibleChange,
onMenuSelect: this.onMenuSelect,
onMenuDeselect: this.onMenuDeselect,
visible: open,
popupPlacement: "bottomRight",
dropdownMatchSelectWidth: false,
dropdownStyle: {
minWidth: 187
}
}, /*#__PURE__*/React.createElement(Button, {
shape: "circle",
icon: "view_column",
size: Size.small
})));
}
}, {
key: "fireChange",
value: function fireChange(item) {
var onColumnFilterChange = this.props.onColumnFilterChange;
if (onColumnFilterChange) {
onColumnFilterChange(item);
}
}
}, {
key: "getOptions",
value: function getOptions() {
var columns = this.props.columns;
var options = [];
(columns || []).forEach(function (column, i) {
var title = column.title,
notDisplay = column.notDisplay,
disableClick = column.disableClick;
if (title && !notDisplay) {
options.push( /*#__PURE__*/React.createElement(MenuItem, {
disabled: disableClick,
style: UNSELECTABLE_STYLE,
attribute: UNSELECTABLE_ATTRIBUTE,
value: column,
key: getColumnKey(column, i)
}, title));
}
});
return options;
}
}, {
key: "getVisibleColumns",
value: function getVisibleColumns() {
var columns = this.props.columns;
return (columns || []).filter(function (column) {
return !column.hidden;
});
}
}], [{
key: "contextType",
get: function get() {
return ConfigContext;
}
}]);
return ColumnFilter;
}(Component);
export { ColumnFilter as default };
ColumnFilter.displayName = 'ColumnFilter';
//# sourceMappingURL=ColumnFilter.js.map