instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
201 lines (166 loc) • 6.54 kB
JavaScript
'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 _bind = require('classnames/bind');
var _bind2 = _interopRequireDefault(_bind);
var _md = require('react-icons/lib/md');
var _auto_bind = require('../common/auto_bind');
var _auto_bind2 = _interopRequireDefault(_auto_bind);
var _utilities = require('../common/utilities');
var _search_bar = require('./search_bar');
var _search_bar2 = _interopRequireDefault(_search_bar);
var _filter = require('./filter');
var _filter2 = _interopRequireDefault(_filter);
var _fields = require('../common/fields');
var _base = require('../selectors/base');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var cx = _bind2.default.bind(require('../styles/filterable_table.scss'));
var NonExclusiveFieldFilter = function (_Component) {
(0, _inherits3.default)(NonExclusiveFieldFilter, _Component);
function NonExclusiveFieldFilter(props) {
(0, _classCallCheck3.default)(this, NonExclusiveFieldFilter);
var _this = (0, _possibleConstructorReturn3.default)(this, (NonExclusiveFieldFilter.__proto__ || (0, _getPrototypeOf2.default)(NonExclusiveFieldFilter)).call(this, props));
_this.state = {
query: "",
results: []
};
(0, _auto_bind2.default)(_this);
return _this;
}
(0, _createClass3.default)(NonExclusiveFieldFilter, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(props) {
if (!props.search_enabled && !(0, _base.tolerant_equal)(props.values, this.props.results)) {
this.update_results(props);
}
}
}, {
key: 'update_results',
value: function update_results(props) {
if (!props) {
props = this.props;
}
this.setState({ results: props.values.map(function (value) {
return value.id;
}) });
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
this.mounted = true;
if (!this.props.search_enabled) {
this.update_results();
}
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.mounted = false;
}
}, {
key: 'on_query_change',
value: function on_query_change(query, results) {
if (this.mounted && this.props.search_enabled) {
this.setState({ query: query, results: results });
}
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
return _react2.default.createElement(
_filter2.default,
{
className: cx('filterable-table__filter', this.props.className),
active: !(0, _utilities.for_all)(this.props.values, function (value) {
return !value.selected && !value.locked;
}),
label: this.props.name
},
this.props.search_enabled ? _react2.default.createElement(_search_bar2.default, {
className: cx('filterable-table__filter-search-bar'),
ref: function ref(search_bar) {
return _this2.search_bar = search_bar;
},
extend: false,
make_fuse: _fields.new_values_fuse,
items: this.props.values,
default_results: this.props.values.map(function (value) {
return value.id;
}),
on_query_change: this.on_query_change
}) : null,
_react2.default.createElement(
'div',
{ className: cx('filterable-table__filter-values', { 'filterable-table__filter-values_long': this.state.results.length > 6 }) },
this.state.results.map(function (id) {
return (0, _utilities.find_in_array)(_this2.props.values, function (value) {
return value.id == id;
});
}).filter(Boolean).sort(function (a, b) {
return a.name.localeCompare(b.name);
}).map(function (value) {
return _react2.default.createElement(
'div',
{
key: value.id,
className: cx('filterable-table__filter-value', {
'filterable-table__filter-value_selected': value.selected,
'filterable-table__filter-value_locked': value.locked
}),
onClick: function onClick() {
if (!value.locked) {
_this2.props.toggle_filtered_value(value);
}
}
},
_react2.default.createElement(
'div',
{ className: cx('filterable-table__filter-value-name') },
value.icon ? _react2.default.createElement(
'div',
{ className: cx('filterable-table__filter-value__icon') },
value.icon
) : null,
value.name
),
_react2.default.createElement(
'div',
{ className: cx('filterable-table__filter-value-tick') },
value.locked ? _react2.default.createElement(_md.MdLock, null) : value.selected ? _react2.default.createElement(_md.MdCheck, null) : null
)
);
})
),
this.state.results.length == 0 ? _react2.default.createElement(
'div',
{ className: cx('filterable-table__filter-values-placeholder') },
'Aucune valeur'
) : null
);
}
}]);
return NonExclusiveFieldFilter;
}(_react.Component);
NonExclusiveFieldFilter.defaultProps = {
values: [],
name: "",
className: "",
editable: false,
search_enabled: true,
toggle_filtered_value: function toggle_filtered_value(value) {}
};
exports.default = NonExclusiveFieldFilter;