UNPKG

@beisen/ethos

Version:

beisencloud pc react components

201 lines (154 loc) 4.56 kB
'use strict'; var React = require('react'); var ReactDOM = require('react-dom'); var assign = require('object-assign'); var ReactMenu = require('react-menus'); function stopPropagation(event) { // event.stopPropagation() // wuzhe----ie10兼容 if (event.stopPropagation) { // this code is for Mozilla and Opera event.stopPropagation(); } else if (window.event) { // this code is for IE window.event.cancelBubble = true; } } function emptyFn() {} var FILTER_FIELDS = {}; module.exports = { getColumnFilterFieldFactory: function getColumnFilterFieldFactory(column) { var type = column.type || 'string'; return FILTER_FIELDS[type] || React.DOM.input; }, getFilterField: function getFilterField(props) { var column = props.column; var filterValue = this.filterValues ? this.filterValues[column.name] : ''; var fieldProps = { autoFocus: true, defaultValue: filterValue, column: column, onChange: this.onFilterChange.bind(this, column), onKeyUp: this.onFilterKeyUp.bind(this, column) }; var fieldFactory = column.renderFilterField || this.props.renderFilterField; var field; if (fieldFactory) { field = fieldFactory(fieldProps); } if (field === undefined) { field = this.getColumnFilterFieldFactory(column)(fieldProps); } return field; }, onFilterKeyUp: function onFilterKeyUp(column, event) { if (event.key == 'Enter') { this.onFilterClick(column, event); } }, onFilterChange: function onFilterChange(column, eventOrValue) { var value = eventOrValue; if (eventOrValue && eventOrValue.target) { value = eventOrValue.target.value; } this.filterValues = this.filterValues || {}; this.filterValues[column.name] = value; if (this.props.liveFilter) { this.filterBy(column, value); } }, filterBy: function filterBy(column, value, event) { ; (this.props.onFilter || emptyFn)(column, value, this.filterValues, event); }, onFilterClick: function onFilterClick(column, event) { this.showMenu(null); var value = this.filterValues ? this.filterValues[column.name] : ''; this.filterBy(column, value, event); }, onFilterClear: function onFilterClear(column) { this.showMenu(null); if (this.filterValues) { this.filterValues[column.name] = ''; } this.filterBy(column, ''); (this.props.onClearFilter || emptyFn).apply(null, arguments); }, getFilterButtons: function getFilterButtons(props) { var column = props.column; var factory = column.renderFilterButtons || this.props.renderFilterButtons; var result; if (factory) { result = factory(props); } if (result !== undefined) { return result; } var doFilter = this.onFilterClick.bind(this, column); var doClear = this.onFilterClear.bind(this, column); return React.createElement( 'div', { style: { textAlign: 'center' } }, React.createElement( 'button', { onClick: doFilter }, 'Filter' ), React.createElement( 'button', { onClick: doClear, style: { marginLeft: 5 } }, 'Clear' ) ); }, filterMenuFactory: function filterMenuFactory(props) { var overStyle = { background: 'white', color: 'auto' }; var column = props.column; var field = this.getFilterField(props); var buttons = this.getFilterButtons({ column: column }); var children = [field, buttons].map(function (x, index) { return React.createElement( ReactMenu.Item, { key: index }, React.createElement( ReactMenu.Item.Cell, null, x ) ); }); props.itemOverStyle = props.itemOverStyle || overStyle; props.itemActiveStyle = props.itemActiveStyle || overStyle; props.onClick = props.onClick || stopPropagation; var factory = this.props.filterMenuFactory; var result; if (factory) { result = factory(props); if (result !== undefined) { return result; } } props.onMount = this.onFilterMenuMount; return React.createElement( ReactMenu, props, children ); }, onFilterMenuMount: function onFilterMenuMount(menu) { var dom = ReactDOM.findDOMNode(menu); if (dom) { var input = dom.querySelector('input'); if (input) { setTimeout(function () { input.focus(); }, 10); } } } };