UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

233 lines (191 loc) 7.49 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral'); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); 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 _templateObject = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n border-bottom: solid 2px ', ';\n'], ['\n display: flex;\n align-items: center;\n border-bottom: solid 2px ', ';\n']), _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n color: ', ';\n font-size: 20px;\n padding: 5px;\n flex-shrink: 0;\n'], ['\n color: ', ';\n font-size: 20px;\n padding: 5px;\n flex-shrink: 0;\n']), _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n flex: 1;\n'], ['\n ', '\n flex: 1;\n']); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _bind = require('classnames/bind'); var _bind2 = _interopRequireDefault(_bind); var _md = require('react-icons/lib/md'); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); var _base = require('selectors/base'); var _cancelable = require('common/cancelable'); var _styles = require('common/styles'); var _auto_bind = require('common/auto_bind'); var _auto_bind2 = _interopRequireDefault(_auto_bind); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var SearchBar = function (_Component) { (0, _inherits3.default)(SearchBar, _Component); function SearchBar(props) { (0, _classCallCheck3.default)(this, SearchBar); var _this = (0, _possibleConstructorReturn3.default)(this, (SearchBar.__proto__ || (0, _getPrototypeOf2.default)(SearchBar)).call(this, props)); _this.state = { query: "", results: [] }; (0, _auto_bind2.default)(_this); _this.fuse = _this.props.make_fuse(); return _this; } (0, _createClass3.default)(SearchBar, [{ key: 'set_items', value: function set_items(items) { this.fuse.set(items); } }, { key: 'set_query', value: function set_query() { var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; if (this.mounted) { this.set_should_verify_results(); this.setState(function (state) { return (0, _extends3.default)({}, state, { query: query }); }); } } }, { key: 'verify_results', value: function verify_results() { var query = this.state.query; var _props = this.props, default_results = _props.default_results, on_query_change = _props.on_query_change; var results = query == "" ? default_results : this.fuse.search(query); var results_changed = !(0, _base.tolerant_equal)(results, this.previous.results); if (!(0, _base.tolerant_equal)(query, this.previous.query) || results_changed) { if (results_changed) { this.setState({ results: results }); } on_query_change(query, results); } } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { if (this.should_verify_results) { this.verify_results(); this.should_verify_results = false; } } }, { key: 'componentDidMount', value: function componentDidMount() { this.mounted = true; this.set_items(this.props.items); this.previous = { query: '' }; this.verify_results(); } }, { key: 'set_should_verify_results', value: function set_should_verify_results() { this.previous = (0, _extends3.default)({}, this.state); this.should_verify_results = true; } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(props) { var _props2 = this.props, items = _props2.items, default_results = _props2.default_results; if (!(0, _base.tolerant_equal)(props.items, items)) { this.set_items(props.items); this.set_should_verify_results(); } if (!(0, _base.tolerant_equal)(props.default_results, default_results) && this.state.query == "") { this.set_should_verify_results(); } } }, { key: 'shouldComponentUpdate', value: function shouldComponentUpdate(props, state) { return state !== this.state || !(0, _base.tolerant_equal)(props.items, this.props.items) || !(0, _base.tolerant_equal)(props.default_results, this.props.default_results) || props.className !== this.props.className || props.placeholder !== this.props.placeholder; } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this.mounted = false; } }, { key: 'focus', value: function focus() { this.input.focus(); } }, { key: 'render', value: function render() { var _this2 = this; var className = this.props.className; return _react2.default.createElement( Container, { className: className }, _react2.default.createElement( Icon, null, _react2.default.createElement(_md.MdSearch, null) ), _react2.default.createElement(Input, { innerRef: function innerRef(input) { return _this2.input = input; }, type: 'text', placeholder: this.props.placeholder, value: this.state.query, onChange: function onChange(_ref) { var query = _ref.target.value; return _this2.set_query(query); }, onFocus: function onFocus(event) { if (_this2.state.query != "") { var _input = event.target; setTimeout(function () { return _input.select(); }, 100); } _this2.props.onFocus(); }, onBlur: this.props.onBlur }) ); } }]); return SearchBar; }(_react.Component); SearchBar.defaultProps = { on_query_change: function on_query_change() {}, simple: false, extend: true, placeholder: "Recherche", make_fuse: function make_fuse() { return null; }, items: [], default_results: [], onFocus: function onFocus() { return null; }, onBlur: function onBlur() { return null; } }; exports.default = SearchBar; var Container = _styledComponents2.default.div(_templateObject, (0, _styles.color)('black', 'pale')); var Icon = _styledComponents2.default.div(_templateObject2, (0, _styles.color)('black', 'bright')); var Input = _styledComponents2.default.input(_templateObject3, _styles.input);