UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

461 lines (369 loc) 17.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.get_filters_and_deals = exports.get_initial_state = undefined; var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral'); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); 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 _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: baseline;\n'], ['\n display: flex;\n align-items: baseline;\n']), _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n font-size: 18px;\n margin-right: 6px;\n'], ['\n font-size: 18px;\n margin-right: 6px;\n']), _templateObject3 = (0, _taggedTemplateLiteral3.default)([''], ['']), _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n flex: 1;\n ', '\n display: flex;\n align-items: center;\n padding-right: 5px;\n'], ['\n flex: 1;\n ', '\n display: flex;\n align-items: center;\n padding-right: 5px;\n']), _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n flex: 1;\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n flex-direction: column;\n margin-left: 10px;\n height: 50px;\n'], ['\n flex: 1;\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n flex-direction: column;\n margin-left: 10px;\n height: 50px;\n']), _templateObject6 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n justify-content: space-between;\n'], ['\n display: flex;\n align-items: center;\n justify-content: space-between;\n']), _templateObject7 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n'], ['\n display: flex;\n align-items: center;\n']), _templateObject8 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n margin-left: 10px;\n'], ['\n display: flex;\n align-items: center;\n margin-left: 10px;\n']), _templateObject9 = (0, _taggedTemplateLiteral3.default)(['\n margin-left: 3px;\n font-size: 16px;\n'], ['\n margin-left: 3px;\n font-size: 16px;\n']); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _bind = require('classnames/bind'); var _bind2 = _interopRequireDefault(_bind); var _reactRedux = require('react-redux'); var _reactRouter = require('react-router'); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); var _md = require('react-icons/lib/md'); var _filterable_list = require('components/filterable_list/filterable_list'); var _filterable_list2 = _interopRequireDefault(_filterable_list); var _make_filter_maker_from_field = require('components/filterable_list/make_filter_maker_from_field'); var _button = require('components/utils/button'); var _button2 = _interopRequireDefault(_button); var _tag = require('components/utils/tag'); var _tag2 = _interopRequireDefault(_tag); var _mission_status = require('components/mission_status/mission_status'); var _mission_status2 = _interopRequireDefault(_mission_status); var _persistent_state = require('common/persistent_state'); var _persistent_state2 = _interopRequireDefault(_persistent_state); var _utilities = require('common/utilities'); var _auto_bind = require('common/auto_bind'); var _auto_bind2 = _interopRequireDefault(_auto_bind); var _request = require('common/request'); var _request2 = _interopRequireDefault(_request); var _store = require('common/store'); var _store2 = _interopRequireDefault(_store); var _moment = require('common/moment'); var _moment2 = _interopRequireDefault(_moment); var _missions = require('common/missions'); var _fields = require('common/fields'); var _styles = require('common/styles'); var _display = require('actions/display'); var _fields2 = require('selectors/fields'); var _missions2 = require('selectors/missions'); var _recruiters = require('selectors/recruiters'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var cx = _bind2.default.bind(require('styles/filterable_table.scss')); var get_initial_state = exports.get_initial_state = function get_initial_state(props) { return { exclusive_filters: { status: (0, _utilities.set_from_array)(['draft', 'sent', 'pending_assignement', 'pending_selection', 'assigned']), recruiter: (0, _utilities.set_from_array)(props.initially_selected_recruiters) }, order_by: function order_by(_ref) { var status = _ref.status; return (0, _missions.get_mission_status_elements)(status).priority; }, loading_export_missions: {}, ascending: true }; }; function _get_filters_and_deals(_ref2) { var deals = _ref2.deals, fields = _ref2.fields, workplaces = _ref2.workplaces, recruiters = _ref2.recruiters, state = _ref2.state, setState = _ref2.setState; var status_filter_maker = _filterable_list2.default.make_filter_maker_from_field({ id: 'status', name: 'Statut', category: 'exclusive', value_ids: ['draft', 'pending_selection', 'pending_assignement', 'sent', 'assigned'], get_value_props: function get_value_props(status) { var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _ref3 = (0, _missions.get_mission_status_elements)(status) || {}, name = _ref3.name, icon = _ref3.icon; return { id: status, name: _react2.default.createElement( _tag2.default, { icon: icon }, name ) }; }, get_item_values: function get_item_values(_ref4) { var status = _ref4.status; return [status]; } }); var initial_make_status_filter_props = status_filter_maker.make_filter_props; status_filter_maker.make_filter_props = function (args) { return (0, _extends3.default)({}, initial_make_status_filter_props(args), { onClick: (0, _make_filter_maker_from_field.get_filter_on_click)('status', args.setState, function (_ref5) { var status = _ref5.status; return (0, _missions.get_mission_status_elements)(status).priority; }) }); }; var workplace_filter_maker = _filterable_list2.default.make_filter_maker_from_field({ id: 'workplace', category: 'exclusive', name: 'Lieu de travail', value_ids: (0, _keys2.default)(workplaces), tolerant: true, get_value_props: function get_value_props(id) { return workplaces[id]; }, get_item_values: function get_item_values(_ref6) { var workplace_ids = _ref6.workplace_ids; return workplace_ids || []; } }); var recruiter_filter_maker = _filterable_list2.default.make_filter_maker_from_field({ id: 'recruiter', category: 'exclusive', name: 'Recruteur', value_ids: (0, _keys2.default)(recruiters), get_value_props: function get_value_props(id) { var recruiter = recruiters[id] || {}; return (0, _extends3.default)({}, recruiter, { name: recruiter.full_name }); }, get_item_values: function get_item_values(_ref7) { var recruiter = _ref7.recruiter; return [recruiter.id]; } }); var filter_makers = [status_filter_maker, workplace_filter_maker, recruiter_filter_maker].concat((0, _toConsumableArray3.default)([{ id: 'created_at', category: 'date', name: 'Date de création', get_item_value: (0, _utilities.property_getter)('created_at') }, { id: 'start', category: 'date', name: 'Date de début', get_item_value: (0, _utilities.property_getter)('start') }, { id: 'end', category: 'date', name: 'Date de fin', get_item_value: (0, _utilities.property_getter)('end') }].map(_filterable_list2.default.make_filter_maker_from_field)), (0, _toConsumableArray3.default)(fields.map(_filterable_list2.default.make_filter_maker_from_field).filter(Boolean))); return { filters: _filterable_list2.default.get_filters(filter_makers, deals, state, setState), deals: _filterable_list2.default.get_filtered_items(filter_makers, deals, state) }; } exports.get_filters_and_deals = _get_filters_and_deals; var DealsList = function (_Component) { (0, _inherits3.default)(DealsList, _Component); function DealsList(props) { (0, _classCallCheck3.default)(this, DealsList); var _this = (0, _possibleConstructorReturn3.default)(this, (DealsList.__proto__ || (0, _getPrototypeOf2.default)(DealsList)).call(this, props)); _this.state = _persistent_state2.default.get(props.persistent_state_key, (0, _extends3.default)({}, _filterable_list2.default.initial_state, get_initial_state(props))); (0, _auto_bind2.default)(_this); return _this; } (0, _createClass3.default)(DealsList, [{ key: 'componentWillUnmount', value: function componentWillUnmount() { _persistent_state2.default.store(this.props.persistent_state_key, this.state); } }, { key: 'set_state', value: function set_state(arg) { this.setState(arg); } }, { key: 'get_filters_and_deals', value: function get_filters_and_deals() { var _props = this.props, deals = _props.deals, fields = _props.fields, workplaces = _props.workplaces, recruiters = _props.recruiters; return _get_filters_and_deals({ deals: deals, fields: fields, workplaces: workplaces, recruiters: recruiters, state: this.state, setState: this.set_state }); } }, { key: 'get_statistics', value: function get_statistics(_ref8) { var users_count = _ref8.users_count, waiting_count = _ref8.waiting_count, accepted_count = _ref8.accepted_count, assigned_count = _ref8.assigned_count, empty_count = _ref8.empty_count, status = _ref8.status; var assigned = { count: assigned_count, icon: _react2.default.createElement(_md.MdDoneAll, null) }; switch (status) { case 'draft': return [{ count: users_count, icon: _react2.default.createElement(_md.MdEdit, null) }]; case 'pending_assignement': case 'sent': return [{ count: accepted_count, icon: _react2.default.createElement(_md.MdDone, null) }, { count: waiting_count, icon: "?" }, assigned]; case 'pending_selection': return [{ count: empty_count, icon: _react2.default.createElement(_md.MdSend, null) }, assigned]; case 'assigned': return [assigned]; default: } } }, { key: 'get_selected_count', value: function get_selected_count(selected_deal_ids) { return (0, _utilities.set_count)((0, _utilities.set_intersection)(selected_deal_ids, (0, _utilities.set_from_array)(this.props.deals.map((0, _utilities.property_getter)('id'))))); } }, { key: 'render_deal', value: function render_deal(_ref9) { var id = _ref9.id, workplace = _ref9.workplace, recruiter = _ref9.recruiter, created_at = _ref9.created_at, deal = (0, _objectWithoutProperties3.default)(_ref9, ['id', 'workplace', 'recruiter', 'created_at']); workplace = workplace || {}; return _react2.default.createElement( Deal, { onClick: function onClick() { return _reactRouter.browserHistory.push('/deals/' + id); } }, _react2.default.createElement(_mission_status2.default, (0, _extends3.default)({ simple: true }, deal)), _react2.default.createElement( Information, null, _react2.default.createElement( Top, null, _react2.default.createElement( Workplace, null, _react2.default.createElement( WorkplaceName, null, workplace.name ), _react2.default.createElement( WorkplaceAddress, null, workplace.address ) ), _react2.default.createElement( Statistics, null, this.get_statistics(deal).filter((0, _utilities.property_getter)('count')).map(function (_ref10, index) { var count = _ref10.count, icon = _ref10.icon; return _react2.default.createElement( Statistic, { key: index }, count, _react2.default.createElement( StatisticIcon, null, icon ) ); }) ) ), _react2.default.createElement( Bottom, null, _react2.default.createElement( Period, null, (0, _missions.mission_period)(deal) ), _react2.default.createElement( Creation, null, 'Cr\xE9\xE9e ', (0, _moment2.default)(created_at).calendar().toLowerCase(), ' par ', recruiter.full_name ) ) ) ); } }, { key: 'make_export_action', value: function make_export_action(_ref11) { var _this2 = this; var name = _ref11.name, id = _ref11.id; return function (_ref12) { var length = _ref12.length; return { onClick: function onClick(deal_ids, unselect_deals) { unselect_deals(); _this2.setState({ loading_export_missions: (0, _defineProperty3.default)({}, id, true) }); (0, _fields.action_export_field)(id, deal_ids).then(function () { return _this2.setState({ loading_export_missions: (0, _defineProperty3.default)({}, id, false) }); }); }, label: 'Exporter ' + name + ' pour les missions s\xE9lectionn\xE9es', loading: _this2.state.loading_export_missions[id], disabled: !length }; }; } }, { key: 'render', value: function render() { var export_fields = this.props.export_fields; var _get_filters_and_deal = this.get_filters_and_deals(), filters = _get_filters_and_deal.filters, deals = _get_filters_and_deal.deals; return _react2.default.createElement( _filterable_list2.default, { icon: _md.MdFlag, empty_text: "Aucune mission", filters: filters, secondary_actions: [function (_ref13) { var length = _ref13.length; return { onClick: _missions.action_cancel_drafts, label: 'Supprimer les brouillons sélectionnés', disabled: !length }; }].concat((0, _toConsumableArray3.default)(export_fields.map(this.make_export_action))), main_action: { icon: _md.MdAddCircle, onClick: _missions.action_create_deal, label: 'Nouvelle Mission', action: true }, render_item: this.render_deal, selectable: true, get_selected_count: this.get_selected_count }, deals ); } }]); return DealsList; }(_react.Component); exports.default = (0, _reactRedux.connect)(function (state) { return { workplaces: state.missions.workplaces, recruiters: (0, _recruiters.get_recruiters)(state), fields: (0, _fields2.get_missions_filter_fields)(state), export_fields: (0, _fields2.get_exports_fields)(state), agency_id: state.profile.agency.id, initially_selected_recruiters: (0, _missions2.get_initially_selected_recruiters)(state) }; })(DealsList); var Workplace = _styledComponents2.default.div(_templateObject); var WorkplaceName = _styledComponents2.default.div(_templateObject2); var WorkplaceAddress = _styledComponents2.default.div(_templateObject3); var Period = _styledComponents2.default.div(_templateObject3); var Creation = _styledComponents2.default.div(_templateObject3); var Deal = _styledComponents2.default.div(_templateObject4, function (_ref14) { var onClick = _ref14.onClick; return onClick ? _styles.link : ''; }); var Information = _styledComponents2.default.div(_templateObject5); var Top = _styledComponents2.default.div(_templateObject6); var Statistics = _styledComponents2.default.div(_templateObject7); var Statistic = _styledComponents2.default.div(_templateObject8); var StatisticIcon = _styledComponents2.default.div(_templateObject9); var Bottom = _styledComponents2.default.div(_templateObject6);