react-collection-helpers
Version:
React Collection Helpers Component
141 lines (108 loc) • 4.59 kB
JavaScript
;
exports.__esModule = 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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _Filter = require('../../components/Filter');
var _Filter2 = _interopRequireDefault(_Filter);
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-disable jsx-a11y/label-has-for */
if (!Array.prototype.includes) {
Object.defineProperty(Array.prototype, 'includes', {
value: function value(searchElement, fromIndex) {
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
var len = o.length >>> 0;
if (len === 0) {
return false;
}
var n = fromIndex | 0;
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
while (k < len) {
if (o[k] === searchElement) {
return true;
}
k++;
}
return false;
}
});
}
var FilterController = function (_Component) {
_inherits(FilterController, _Component);
function FilterController(props) {
_classCallCheck(this, FilterController);
var _this = _possibleConstructorReturn(this, _Component.call(this, props));
_this.state = {
filterBy: []
};
return _this;
}
FilterController.prototype.updateFilter = function updateFilter(key, val) {
this.setState({
filterBy: val ? [].concat(this.state.filterBy, [key]) : this.state.filterBy.filter(function (item) {
return item !== key;
})
});
};
FilterController.prototype.renderFilterControls = function renderFilterControls() {
var _this2 = this;
return this.props.filterControls.map(function (name) {
return _react2.default.createElement(
'label',
{ style: { paddingRight: 20, lineHeight: 2 } },
_react2.default.createElement('input', {
type: 'checkbox',
val: _this2.state.filterBy.includes(name),
onChange: function onChange(ev) {
return _this2.updateFilter(name, ev.target.checked);
}
}),
name
);
});
};
FilterController.prototype.render = function render() {
var _this3 = this;
var predicate = function predicate(item) {
return _this3.state.filterBy.every(function (filterKey) {
return item[filterKey] === true;
});
};
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h4',
null,
'Filter By'
),
_react2.default.createElement(
'div',
null,
this.renderFilterControls()
),
_react2.default.createElement(
_Filter2.default,
{ collection: this.props.collection, predicate: predicate },
function (item) {
return _react2.default.createElement(_this3.props.elementType, _extends({ key: item.id }, item));
}
)
);
};
return FilterController;
}(_react.Component);
FilterController.displayName = 'FilterController';
process.env.NODE_ENV !== "production" ? FilterController.propTypes = {
filterControls: _react.PropTypes.arrayOf(_react.PropTypes.string),
collection: _react.PropTypes.array,
elementType: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.func])
} : void 0;
FilterController.defaultProps = {};
exports.default = FilterController;
module.exports = exports['default'];