UNPKG

react-bootstrap-table2-filter

Version:
1,493 lines (1,262 loc) 216 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react")); else if(typeof define === 'function' && define.amd) define(["react"], factory); else if(typeof exports === 'object') exports["ReactBootstrapTable2Filter"] = factory(require("react")); else root["ReactBootstrapTable2Filter"] = factory(root["React"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_2__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 4); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var LIKE = exports.LIKE = 'LIKE'; var EQ = exports.EQ = '='; var NE = exports.NE = '!='; var GT = exports.GT = '>'; var GE = exports.GE = '>='; var LT = exports.LT = '<'; var LE = exports.LE = '<='; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var FILTER_TYPE = exports.FILTER_TYPE = { TEXT: 'TEXT', SELECT: 'SELECT', MULTISELECT: 'MULTISELECT', NUMBER: 'NUMBER', DATE: 'DATE' }; var FILTER_DELAY = exports.FILTER_DELAY = 500; /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_2__; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { /** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ if (false) { var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element')) || 0xeac7; var isValidElement = function(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; }; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = __webpack_require__(6)(); } /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.customFilter = exports.dateFilter = exports.numberFilter = exports.multiSelectFilter = exports.selectFilter = exports.textFilter = exports.Comparator = exports.FILTER_TYPES = undefined; var _text = __webpack_require__(5); var _text2 = _interopRequireDefault(_text); var _select = __webpack_require__(10); var _select2 = _interopRequireDefault(_select); var _multiselect = __webpack_require__(11); var _multiselect2 = _interopRequireDefault(_multiselect); var _number = __webpack_require__(12); var _number2 = _interopRequireDefault(_number); var _date = __webpack_require__(13); var _date2 = _interopRequireDefault(_date); var _context = __webpack_require__(14); var _context2 = _interopRequireDefault(_context); var _comparison = __webpack_require__(0); var Comparison = _interopRequireWildcard(_comparison); var _const = __webpack_require__(1); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = function () { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { createContext: _context2.default, options: options }; }; var FILTER_TYPES = exports.FILTER_TYPES = _const.FILTER_TYPE; var Comparator = exports.Comparator = Comparison; var textFilter = exports.textFilter = function textFilter() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { Filter: _text2.default, props: props }; }; var selectFilter = exports.selectFilter = function selectFilter() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { Filter: _select2.default, props: props }; }; var multiSelectFilter = exports.multiSelectFilter = function multiSelectFilter() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { Filter: _multiselect2.default, props: props }; }; var numberFilter = exports.numberFilter = function numberFilter() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { Filter: _number2.default, props: props }; }; var dateFilter = exports.dateFilter = function dateFilter() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { Filter: _date2.default, props: props }; }; var customFilter = exports.customFilter = function customFilter() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { props: props }; }; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; 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 _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 _react = __webpack_require__(2); var _react2 = _interopRequireDefault(_react); var _propTypes = __webpack_require__(3); var _comparison = __webpack_require__(0); var _const = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } 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; } /* eslint react/require-default-props: 0 */ /* eslint react/prop-types: 0 */ /* eslint no-return-assign: 0 */ /* eslint camelcase: 0 */ var TextFilter = function (_Component) { _inherits(TextFilter, _Component); function TextFilter(props) { _classCallCheck(this, TextFilter); var _this = _possibleConstructorReturn(this, (TextFilter.__proto__ || Object.getPrototypeOf(TextFilter)).call(this, props)); _this.filter = _this.filter.bind(_this); _this.handleClick = _this.handleClick.bind(_this); _this.timeout = null; function getDefaultValue() { if (props.filterState && typeof props.filterState.filterVal !== 'undefined') { return props.filterState.filterVal; } return props.defaultValue; } _this.state = { value: getDefaultValue() }; return _this; } _createClass(TextFilter, [{ key: 'componentDidMount', value: function componentDidMount() { var _this2 = this; var _props = this.props, onFilter = _props.onFilter, getFilter = _props.getFilter, column = _props.column; var defaultValue = this.input.value; if (defaultValue) { onFilter(this.props.column, _const.FILTER_TYPE.TEXT, true)(defaultValue); } // export onFilter function to allow users to access if (getFilter) { getFilter(function (filterVal) { _this2.setState(function () { return { value: filterVal }; }); onFilter(column, _const.FILTER_TYPE.TEXT)(filterVal); }); } } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this.cleanTimer(); } }, { key: 'UNSAFE_componentWillReceiveProps', value: function UNSAFE_componentWillReceiveProps(nextProps) { if (nextProps.defaultValue !== this.props.defaultValue) { this.applyFilter(nextProps.defaultValue); } } }, { key: 'filter', value: function filter(e) { var _this3 = this; e.stopPropagation(); this.cleanTimer(); var filterValue = e.target.value; this.setState(function () { return { value: filterValue }; }); this.timeout = setTimeout(function () { _this3.props.onFilter(_this3.props.column, _const.FILTER_TYPE.TEXT)(filterValue); }, this.props.delay); } }, { key: 'cleanTimer', value: function cleanTimer() { if (this.timeout) { clearTimeout(this.timeout); } } }, { key: 'cleanFiltered', value: function cleanFiltered() { var value = this.props.defaultValue; this.setState(function () { return { value: value }; }); this.props.onFilter(this.props.column, _const.FILTER_TYPE.TEXT)(value); } }, { key: 'applyFilter', value: function applyFilter(filterText) { this.setState(function () { return { value: filterText }; }); this.props.onFilter(this.props.column, _const.FILTER_TYPE.TEXT)(filterText); } }, { key: 'handleClick', value: function handleClick(e) { e.stopPropagation(); if (this.props.onClick) { this.props.onClick(e); } } }, { key: 'render', value: function render() { var _this4 = this; var _props2 = this.props, id = _props2.id, placeholder = _props2.placeholder, _props2$column = _props2.column, dataField = _props2$column.dataField, text = _props2$column.text, style = _props2.style, className = _props2.className, onFilter = _props2.onFilter, caseSensitive = _props2.caseSensitive, defaultValue = _props2.defaultValue, getFilter = _props2.getFilter, filterState = _props2.filterState, rest = _objectWithoutProperties(_props2, ['id', 'placeholder', 'column', 'style', 'className', 'onFilter', 'caseSensitive', 'defaultValue', 'getFilter', 'filterState']); var elmId = 'text-filter-column-' + dataField + (id ? '-' + id : ''); return _react2.default.createElement( 'label', { className: 'filter-label', htmlFor: elmId }, _react2.default.createElement( 'span', { className: 'sr-only' }, 'Filter by ', text ), _react2.default.createElement('input', _extends({}, rest, { ref: function ref(n) { return _this4.input = n; }, type: 'text', id: elmId, className: 'filter text-filter form-control ' + className, style: style, onChange: this.filter, onClick: this.handleClick, placeholder: placeholder || 'Enter ' + text + '...', value: this.state.value })) ); } }]); return TextFilter; }(_react.Component); TextFilter.propTypes = { onFilter: _propTypes.PropTypes.func.isRequired, column: _propTypes.PropTypes.object.isRequired, id: _propTypes.PropTypes.string, filterState: _propTypes.PropTypes.object, comparator: _propTypes.PropTypes.oneOf([_comparison.LIKE, _comparison.EQ]), defaultValue: _propTypes.PropTypes.string, delay: _propTypes.PropTypes.number, placeholder: _propTypes.PropTypes.string, style: _propTypes.PropTypes.object, className: _propTypes.PropTypes.string, caseSensitive: _propTypes.PropTypes.bool, getFilter: _propTypes.PropTypes.func }; TextFilter.defaultProps = { delay: _const.FILTER_DELAY, filterState: {}, defaultValue: '', caseSensitive: false, id: null }; exports.default = TextFilter; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var emptyFunction = __webpack_require__(7); var invariant = __webpack_require__(8); var ReactPropTypesSecret = __webpack_require__(9); module.exports = function() { function shim(props, propName, componentName, location, propFullName, secret) { if (secret === ReactPropTypesSecret) { // It is still safe when called from React. return; } invariant( false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); }; shim.isRequired = shim; function getShim() { return shim; }; // Important! // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. var ReactPropTypes = { array: shim, bool: shim, func: shim, number: shim, object: shim, string: shim, symbol: shim, any: shim, arrayOf: getShim, element: shim, instanceOf: getShim, node: shim, objectOf: getShim, oneOf: getShim, oneOfType: getShim, shape: getShim }; ReactPropTypes.checkPropTypes = emptyFunction; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * */ function makeEmptyFunction(arg) { return function () { return arg; }; } /** * This function accepts and discards inputs; it has no side effects. This is * primarily useful idiomatically for overridable function endpoints which * always need to be callable, since JS lacks a null-call idiom ala Cocoa. */ var emptyFunction = function emptyFunction() {}; emptyFunction.thatReturns = makeEmptyFunction; emptyFunction.thatReturnsFalse = makeEmptyFunction(false); emptyFunction.thatReturnsTrue = makeEmptyFunction(true); emptyFunction.thatReturnsNull = makeEmptyFunction(null); emptyFunction.thatReturnsThis = function () { return this; }; emptyFunction.thatReturnsArgument = function (arg) { return arg; }; module.exports = emptyFunction; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ /** * Use invariant() to assert state which your program assumes to be true. * * Provide sprintf-style format (only %s is supported) and arguments * to provide information about what broke and what you were * expecting. * * The invariant message will be stripped in production, but the invariant * will remain to ensure logic does not differ in production. */ var validateFormat = function validateFormat(format) {}; if (false) { validateFormat = function validateFormat(format) { if (format === undefined) { throw new Error('invariant requires an error message argument'); } }; } function invariant(condition, format, a, b, c, d, e, f) { validateFormat(format); if (!condition) { var error; if (format === undefined) { error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); } else { var args = [a, b, c, d, e, f]; var argIndex = 0; error = new Error(format.replace(/%s/g, function () { return args[argIndex++]; })); error.name = 'Invariant Violation'; } error.framesToPop = 1; // we don't care about invariant's own frame throw error; } } module.exports = invariant; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; 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 _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 _react = __webpack_require__(2); var _react2 = _interopRequireDefault(_react); var _propTypes = __webpack_require__(3); var _propTypes2 = _interopRequireDefault(_propTypes); var _comparison = __webpack_require__(0); var _const = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } 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; } /* eslint react/require-default-props: 0 */ /* eslint no-return-assign: 0 */ /* eslint react/no-unused-prop-types: 0 */ /* eslint class-methods-use-this: 0 */ function optionsEquals(currOpts, prevOpts) { if (Array.isArray(currOpts)) { if (currOpts.length === prevOpts.length) { for (var i = 0; i < currOpts.length; i += 1) { if (currOpts[i].value !== prevOpts[i].value || currOpts[i].label !== prevOpts[i].label) { return false; } } return true; } return false; } var keys = Object.keys(currOpts); for (var _i = 0; _i < keys.length; _i += 1) { if (currOpts[keys[_i]] !== prevOpts[keys[_i]]) { return false; } } return Object.keys(currOpts).length === Object.keys(prevOpts).length; } function getOptionValue(options, key) { if (Array.isArray(options)) { var result = options.filter(function (_ref) { var label = _ref.label; return label === key; }).map(function (_ref2) { var value = _ref2.value; return value; }); return result[0]; } return options[key]; } var SelectFilter = function (_Component) { _inherits(SelectFilter, _Component); function SelectFilter(props) { _classCallCheck(this, SelectFilter); var _this = _possibleConstructorReturn(this, (SelectFilter.__proto__ || Object.getPrototypeOf(SelectFilter)).call(this, props)); _this.filter = _this.filter.bind(_this); _this.options = _this.getOptions(props); var isSelected = getOptionValue(_this.options, _this.getDefaultValue()) !== undefined; _this.state = { isSelected: isSelected }; return _this; } _createClass(SelectFilter, [{ key: 'componentDidMount', value: function componentDidMount() { var _this2 = this; var _props = this.props, column = _props.column, onFilter = _props.onFilter, getFilter = _props.getFilter; var value = this.selectInput.value; if (value && value !== '') { onFilter(column, _const.FILTER_TYPE.SELECT, true)(value); } // export onFilter function to allow users to access if (getFilter) { getFilter(function (filterVal) { _this2.setState(function () { return { isSelected: filterVal !== '' }; }); _this2.selectInput.value = filterVal; onFilter(column, _const.FILTER_TYPE.SELECT)(filterVal); }); } } }, { key: 'componentDidUpdate', value: function componentDidUpdate(prevProps) { var needFilter = false; var _props2 = this.props, column = _props2.column, onFilter = _props2.onFilter, defaultValue = _props2.defaultValue; var nextOptions = this.getOptions(this.props); if (defaultValue !== prevProps.defaultValue) { needFilter = true; } else if (!optionsEquals(nextOptions, this.options)) { this.options = nextOptions; needFilter = true; } if (needFilter) { var value = this.selectInput.value; if (value) { onFilter(column, _const.FILTER_TYPE.SELECT)(value); } } } }, { key: 'getOptions', value: function getOptions(props) { return typeof props.options === 'function' ? props.options(props.column) : props.options; } }, { key: 'getDefaultValue', value: function getDefaultValue() { var _props3 = this.props, filterState = _props3.filterState, defaultValue = _props3.defaultValue; if (filterState && typeof filterState.filterVal !== 'undefined') { return filterState.filterVal; } return defaultValue; } }, { key: 'cleanFiltered', value: function cleanFiltered() { var value = this.props.defaultValue !== undefined ? this.props.defaultValue : ''; this.setState(function () { return { isSelected: value !== '' }; }); this.selectInput.value = value; this.props.onFilter(this.props.column, _const.FILTER_TYPE.SELECT)(value); } }, { key: 'applyFilter', value: function applyFilter(value) { this.selectInput.value = value; this.setState(function () { return { isSelected: value !== '' }; }); this.props.onFilter(this.props.column, _const.FILTER_TYPE.SELECT)(value); } }, { key: 'filter', value: function filter(e) { var value = e.target.value; this.setState(function () { return { isSelected: value !== '' }; }); this.props.onFilter(this.props.column, _const.FILTER_TYPE.SELECT)(value); } }, { key: 'renderOptions', value: function renderOptions() { var optionTags = []; var options = this.options; var _props4 = this.props, placeholder = _props4.placeholder, column = _props4.column, withoutEmptyOption = _props4.withoutEmptyOption; if (!withoutEmptyOption) { optionTags.push(_react2.default.createElement( 'option', { key: '-1', value: '' }, placeholder || 'Select ' + column.text + '...' )); } if (Array.isArray(options)) { options.forEach(function (_ref3) { var value = _ref3.value, label = _ref3.label; return optionTags.push(_react2.default.createElement( 'option', { key: value, value: value }, label )); }); } else { Object.keys(options).forEach(function (key) { return optionTags.push(_react2.default.createElement( 'option', { key: key, value: key }, options[key] )); }); } return optionTags; } }, { key: 'render', value: function render() { var _this3 = this; var _props5 = this.props, id = _props5.id, style = _props5.style, className = _props5.className, defaultValue = _props5.defaultValue, onFilter = _props5.onFilter, column = _props5.column, options = _props5.options, comparator = _props5.comparator, withoutEmptyOption = _props5.withoutEmptyOption, caseSensitive = _props5.caseSensitive, getFilter = _props5.getFilter, filterState = _props5.filterState, rest = _objectWithoutProperties(_props5, ['id', 'style', 'className', 'defaultValue', 'onFilter', 'column', 'options', 'comparator', 'withoutEmptyOption', 'caseSensitive', 'getFilter', 'filterState']); var selectClass = 'filter select-filter form-control ' + className + ' ' + (this.state.isSelected ? '' : 'placeholder-selected'); var elmId = 'select-filter-column-' + column.dataField + (id ? '-' + id : ''); return _react2.default.createElement( 'label', { className: 'filter-label', htmlFor: elmId }, _react2.default.createElement( 'span', { className: 'sr-only' }, 'Filter by ', column.text ), _react2.default.createElement( 'select', _extends({}, rest, { ref: function ref(n) { return _this3.selectInput = n; }, id: elmId, style: style, className: selectClass, onChange: this.filter, onClick: function onClick(e) { return e.stopPropagation(); }, defaultValue: this.getDefaultValue() || '' }), this.renderOptions() ) ); } }]); return SelectFilter; }(_react.Component); SelectFilter.propTypes = { onFilter: _propTypes2.default.func.isRequired, column: _propTypes2.default.object.isRequired, id: _propTypes2.default.string, filterState: _propTypes2.default.object, options: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.array]).isRequired, comparator: _propTypes2.default.oneOf([_comparison.LIKE, _comparison.EQ]), placeholder: _propTypes2.default.string, style: _propTypes2.default.object, className: _propTypes2.default.string, withoutEmptyOption: _propTypes2.default.bool, defaultValue: _propTypes2.default.any, caseSensitive: _propTypes2.default.bool, getFilter: _propTypes2.default.func }; SelectFilter.defaultProps = { defaultValue: '', filterState: {}, className: '', withoutEmptyOption: false, comparator: _comparison.EQ, caseSensitive: true, id: null }; exports.default = SelectFilter; /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; 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 _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 _react = __webpack_require__(2); var _react2 = _interopRequireDefault(_react); var _propTypes = __webpack_require__(3); var _propTypes2 = _interopRequireDefault(_propTypes); var _comparison = __webpack_require__(0); var _const = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } 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; } /* eslint react/require-default-props: 0 */ /* eslint no-return-assign: 0 */ /* eslint no-param-reassign: 0 */ /* eslint react/no-unused-prop-types: 0 */ function optionsEquals(currOpts, prevOpts) { var keys = Object.keys(currOpts); for (var i = 0; i < keys.length; i += 1) { if (currOpts[keys[i]] !== prevOpts[keys[i]]) { return false; } } return Object.keys(currOpts).length === Object.keys(prevOpts).length; } var getSelections = function getSelections(container) { if (container.selectedOptions) { return Array.from(container.selectedOptions).map(function (item) { return item.value; }); } var selections = []; var totalLen = container.options.length; for (var i = 0; i < totalLen; i += 1) { var option = container.options.item(i); if (option.selected) selections.push(option.value); } return selections; }; var MultiSelectFilter = function (_Component) { _inherits(MultiSelectFilter, _Component); function MultiSelectFilter(props) { _classCallCheck(this, MultiSelectFilter); var _this = _possibleConstructorReturn(this, (MultiSelectFilter.__proto__ || Object.getPrototypeOf(MultiSelectFilter)).call(this, props)); _this.filter = _this.filter.bind(_this); _this.applyFilter = _this.applyFilter.bind(_this); var isSelected = props.defaultValue.map(function (item) { return props.options[item]; }).length > 0; _this.state = { isSelected: isSelected }; return _this; } _createClass(MultiSelectFilter, [{ key: 'componentDidMount', value: function componentDidMount() { var _this2 = this; var getFilter = this.props.getFilter; var value = getSelections(this.selectInput); if (value && value.length > 0) { this.applyFilter(value); } // export onFilter function to allow users to access if (getFilter) { getFilter(function (filterVal) { _this2.selectInput.value = filterVal; _this2.applyFilter(filterVal); }); } } }, { key: 'componentDidUpdate', value: function componentDidUpdate(prevProps) { var needFilter = false; if (this.props.defaultValue !== prevProps.defaultValue) { needFilter = true; } else if (!optionsEquals(this.props.options, prevProps.options)) { needFilter = true; } if (needFilter) { this.applyFilter(getSelections(this.selectInput)); } } }, { key: 'getDefaultValue', value: function getDefaultValue() { var _props = this.props, filterState = _props.filterState, defaultValue = _props.defaultValue; if (filterState && typeof filterState.filterVal !== 'undefined') { return filterState.filterVal; } return defaultValue; } }, { key: 'getOptions', value: function getOptions() { var optionTags = []; var _props2 = this.props, options = _props2.options, placeholder = _props2.placeholder, column = _props2.column, withoutEmptyOption = _props2.withoutEmptyOption; if (!withoutEmptyOption) { optionTags.push(_react2.default.createElement( 'option', { key: '-1', value: '' }, placeholder || 'Select ' + column.text + '...' )); } Object.keys(options).forEach(function (key) { return optionTags.push(_react2.default.createElement( 'option', { key: key, value: key }, options[key] )); }); return optionTags; } }, { key: 'cleanFiltered', value: function cleanFiltered() { var value = this.props.defaultValue !== undefined ? this.props.defaultValue : []; this.selectInput.value = value; this.applyFilter(value); } }, { key: 'applyFilter', value: function applyFilter(value) { if (value.length === 1 && value[0] === '') { value = []; } this.setState(function () { return { isSelected: value.length > 0 }; }); this.props.onFilter(this.props.column, _const.FILTER_TYPE.MULTISELECT)(value); } }, { key: 'filter', value: function filter(e) { var value = getSelections(e.target); this.applyFilter(value); } }, { key: 'render', value: function render() { var _this3 = this; var _props3 = this.props, id = _props3.id, style = _props3.style, className = _props3.className, filterState = _props3.filterState, defaultValue = _props3.defaultValue, onFilter = _props3.onFilter, column = _props3.column, options = _props3.options, comparator = _props3.comparator, withoutEmptyOption = _props3.withoutEmptyOption, caseSensitive = _props3.caseSensitive, getFilter = _props3.getFilter, rest = _objectWithoutProperties(_props3, ['id', 'style', 'className', 'filterState', 'defaultValue', 'onFilter', 'column', 'options', 'comparator', 'withoutEmptyOption', 'caseSensitive', 'getFilter']); var selectClass = 'filter select-filter form-control ' + className + ' ' + (this.state.isSelected ? '' : 'placeholder-selected'); var elmId = 'multiselect-filter-column-' + column.dataField + (id ? '-' + id : ''); return _react2.default.createElement( 'label', { className: 'filter-label', htmlFor: elmId }, _react2.default.createElement( 'span', { className: 'sr-only' }, 'Filter by ', column.text ), _react2.default.createElement( 'select', _extends({}, rest, { ref: function ref(n) { return _this3.selectInput = n; }, id: elmId, style: style, multiple: true, className: selectClass, onChange: this.filter, onClick: function onClick(e) { return e.stopPropagation(); }, defaultValue: this.getDefaultValue() }), this.getOptions() ) ); } }]); return MultiSelectFilter; }(_react.Component); MultiSelectFilter.propTypes = { onFilter: _propTypes2.default.func.isRequired, column: _propTypes2.default.object.isRequired, options: _propTypes2.default.object.isRequired, id: _propTypes2.default.string, filterState: _propTypes2.default.object, comparator: _propTypes2.default.oneOf([_comparison.LIKE, _comparison.EQ]), placeholder: _propTypes2.default.string, style: _propTypes2.default.object, className: _propTypes2.default.string, withoutEmptyOption: _propTypes2.default.bool, defaultValue: _propTypes2.default.array, caseSensitive: _propTypes2.default.bool, getFilter: _propTypes2.default.func }; MultiSelectFilter.defaultProps = { defaultValue: [], filterState: {}, className: '', withoutEmptyOption: false, comparator: _comparison.EQ, caseSensitive: true, id: null }; exports.default = MultiSelectFilter; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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 _react = __webpack_require__(2); var _react2 = _interopRequireDefault(_react); var _propTypes = __webpack_require__(3); var _propTypes2 = _interopRequireDefault(_propTypes); var _comparison = __webpack_require__(0); var Comparator = _interopRequireWildcard(_comparison); var _const = __webpack_require__(1); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } 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; } /* eslint jsx-a11y/no-static-element-interactions: 0 */ /* eslint react/require-default-props: 0 */ /* eslint no-return-assign: 0 */ var legalComparators = [Comparator.EQ, Comparator.NE, Comparator.GT, Comparator.GE, Comparator.LT, Comparator.LE]; var NumberFilter = function (_Component) { _inherits(NumberFilter, _Component); function NumberFilter(props) { _classCallCheck(this, NumberFilter); var _this = _possibleConstructorReturn(this, (NumberFilter.__proto__ || Object.getPrototypeOf(NumberFilter)).call(this, props)); _this.comparators = props.comparators || legalComparators; _this.timeout = null; var isSelected = props.defaultValue !== undefined && props.defaultValue.number !== undefined; if (props.options && isSelected) { isSelected = props.options.indexOf(props.defaultValue.number) > -1; } _this.state = { isSelected: isSelected }; _this.onChangeNumber = _this.onChangeNumber.bind(_this); _this.onChangeNumberSet = _this.onChangeNumberSet.bind(_this); _this.onChangeComparator = _this.onChangeComparator.bind(_this); return _this; } _createClass(NumberFilter, [{ key: 'componentDidMount', value: function componentDidMount() { var _this2 = this; var _props = this.props, column = _props.column, onFilter = _props.onFilter, getFilter = _props.getFilter; var comparator = this.numberFilterComparator.value; var number = this.numberFilter.value; if (comparator && number) { onFilter(column, _const.FILTER_TYPE.NUMBER, true)({ number: number, comparator: comparator }); } // export onFilter function to allow users to access if (getFilter) { getFilter(function (filterVal) { _this2.setState(function () { return { isSelected: filterVal !== '' }; }); _this2.numberFilterComparator.value = filterVal.comparator; _this2.numberFilter.value = filterVal.number; onFilter(column, _const.FILTER_TYPE.NUMBER)({ number: filterVal.number, comparator: filterVal.comparator }); }); } } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { clearTimeout(this.timeout); } }, { key: 'onChangeNumber', value: function onChangeNumber(e) { var _props2 = this.props, delay = _props2.delay, column = _props2.column, onFilter = _props2.onFilter; var comparator = this.numberFilterComparator.value; if (comparator === '') { return; } if (this.timeout) { clearTimeout(this.timeout); } var filterValue = e.target.value; this.timeout = setTimeout(function () { onFilter(column, _const.FILTER_TYPE.NUMBER)({ number: filterValue, comparator: comparator }); }, delay); } }, { key: 'onChangeNumberSet', value: function onChangeNumberSet(e) { var _props3 = this.props, column = _props3.column, onFilter = _props3.onFilter; var comparator = this.numberFilterComparator.value; var value = e.target.value; this.setState(function () { return { isSelected: value !== '' }; }); // if (comparator === '') { // return; // } onFilter(column, _const.FILTER_TYPE.NUMBER)({ number: value, comparator: comparator }); } }, { key: 'onChangeComparator', value: function onChangeComparator(e) { var _props4 = this.props, column = _props4.column, onFilter = _props4.onFilter; var value = this.numberFilter.value; var comparator = e.target.value; // if (value === '') { // return; // } onFilter(column, _const.FILTER_TYPE.NUMBER)({ number: value, comparator: comparator }); } }, { key: 'getDefaultComparator', value: function getDefaultComparator() { var _props5 = this.props, defaultValue = _props5.defaultValue, filterState = _props5.filterState; if (filterState && filterState.filterVal) { return filterState.filterVal.comparator; } if (defaultValue && defaultValue.comparator) { return defaultValue.comparator; } return ''; } }, { key: 'getDefaultValue', value: function getDefaultValue() { var _props6 = this.props, defaultValue = _props6.defaultValue, filterState = _props6.filterState; if (filterState && filterState.filterVal) { return filterState.filterVal.number; } if (defaultValue && defaultValue.number) { return defaultValue.number; } return ''; } }, { key: 'getComparatorOptions', value: function getComparatorOptions() { var optionTags = []; var withoutEmptyComparatorOption = this.props.withoutEmptyComparatorOption; if (!withoutEmptyComparatorOption) { optionTags.push(_react2.default.createElement('option', { key: '-1' })); } for (var i = 0; i < this.comparators.length; i += 1) { optionTags.push(_react2.default.createElement( 'option', { key: i, value: this.comparators[i] }, this.comparators[i] )); } return optionTags; } }, { key: 'getNumberOptions', value: function getNumberOptions() { var optionTags = []; var _props7 = this.props, options = _props7.options, column = _props7.column, withoutEmptyNumberOption = _props7.withoutEmptyNumberOption; if (!withoutEmptyNumberOption) { optionTags.push(_react2.default.createElement( 'option', { key: '-1', value: '' }, this.props.placeholder || 'Select ' + column.text + '...' )); } for (var i = 0; i < options.length; i += 1) { optionTags.push(_react2.default.createElement( 'option', { key: i, value: options[i] }, options[i] )); } return optionTags; } }, { key: 'applyFilter', value: function applyFilter(filterObj) { var _props8 = this.props, column = _props8.column, onFilter = _props8.onFilter; var number = filterObj.number, comparator = filterObj.comparator; this.setState(function () { return { isSelected: number !== '' }; }); this.numberFilterComparator.value = comparator; this.numberFilter.value = number; onFilter(column, _const.FILTER_TYPE.