instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
461 lines (369 loc) • 17.9 kB
JavaScript
'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);