react-bootstrap-table2-filter
Version:
it's a column filter addon for react-bootstrap-table2
1,493 lines (1,262 loc) • 216 kB
JavaScript
(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.