UNPKG

react-mapfilter

Version:

A React Component for viewing and filtering GeoJSON

179 lines (143 loc) 5.38 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _styles = require('@material-ui/core/styles'); var _Chip = require('@material-ui/core/Chip'); var _Chip2 = _interopRequireDefault(_Chip); var _Select = require('./Select'); var _Select2 = _interopRequireDefault(_Select); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var styleSheet = { row: { display: 'flex', flexWrap: 'wrap', marginTop: -3 }, chip: { margin: '3px 3px 0 0', height: 30 }, select: { minWidth: 220 }, highlight: { backgroundColor: '#ff9696' } }; var MultiSelect = function (_Component) { (0, _inherits3.default)(MultiSelect, _Component); function MultiSelect() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, MultiSelect); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = MultiSelect.__proto__ || (0, _getPrototypeOf2.default)(MultiSelect)).call.apply(_ref, [this].concat(args))), _this), _this.state = { selectValue: '', suggestions: _this.props.suggestions.filter(function (s) { return _this.props.value.indexOf(s) === -1; }) }, _this.handleSelectChange = function (e, d) { _this.setState({ selectValue: d.newValue }); }, _this.handleKeyDown = function (e) { if (_this.justAdded || e.keyCode !== 13) { _this.justAdded = false; return; } var newValue = _this.state.selectValue; var index = _this.props.value.indexOf(newValue); if (index > -1) { _this.highlightChip(index); _this.setState({ selectValue: '' }); } else { _this.handleSuggestionSelected(e, { suggestionValue: newValue }); } }, _this.handleSuggestionSelected = function (e, d) { var newValue = _this.props.value.concat(d.suggestionValue); _this.justAdded = true; _this.setState({ selectValue: '' }); _this.props.onChange(e, { newValue: newValue, type: 'add' }); }, _this.handleRequestDelete = function (i) { return function (e) { var value = _this.props.value; var newValue = value.slice(0, i).concat(value.slice(i + 1)); _this.props.onChange(e, { newValue: newValue, type: 'delete' }); }; }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(MultiSelect, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { if (nextProps.value !== this.props.value) { var suggestions = nextProps.suggestions.filter(function (s) { return nextProps.value.indexOf(s) === -1; }); this.setState({ suggestions: suggestions }); } } }, { key: 'highlightChip', value: function highlightChip(i) { var _this2 = this; this.setState({ highlight: i }); setTimeout(function () { return _this2.setState({ highlight: null }); }, 500); } }, { key: 'render', value: function render() { var _this3 = this; var _props = this.props, classes = _props.classes, value = _props.value; return _react2.default.createElement( 'div', { className: classes.row }, value.map(function (d, i) { return _react2.default.createElement(_Chip2.default, { label: d, key: i, onRequestDelete: _this3.handleRequestDelete(i), className: classes.chip + (_this3.state.highlight === i ? ' ' + classes.highlight : '') }); }), _react2.default.createElement(_Select2.default, { value: this.state.selectValue, suggestions: this.state.suggestions, onChange: this.handleSelectChange, onKeyDown: this.handleKeyDown, onSuggestionSelected: this.handleSuggestionSelected, className: classes.select }) ); } }]); return MultiSelect; }(_react.Component); MultiSelect.propTypes = { classes: _propTypes2.default.object.isRequired, className: _propTypes2.default.string, value: _propTypes2.default.array }; MultiSelect.defaultProps = { value: [] }; exports.default = (0, _styles.withStyles)(styleSheet)(MultiSelect); //# sourceMappingURL=MultiSelect.js.map