UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

435 lines (365 loc) 16.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.get_mission_status_elements = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); exports.mission_period = mission_period; exports.action_create_deal = action_create_deal; exports.action_update_mission = action_update_mission; exports.action_cancel_mission = action_cancel_mission; exports.action_cancel_deal = action_cancel_deal; exports.action_update_mission_events = action_update_mission_events; exports.place_from_workplace = place_from_workplace; exports.action_send_mission = action_send_mission; exports.action_assign_mission = action_assign_mission; exports.action_unassign_mission = action_unassign_mission; exports.action_duplicate_deal = action_duplicate_deal; exports.deal_has_custom_fields = deal_has_custom_fields; exports.action_add_mission = action_add_mission; exports.action_customize_deal_fields = action_customize_deal_fields; exports.action_export_users = action_export_users; exports.get_mission_proposal_status_elements = get_mission_proposal_status_elements; exports.action_cancel_drafts = action_cancel_drafts; exports.action_toggle_publish_mission = action_toggle_publish_mission; exports.action_notify_updated_mission = action_notify_updated_mission; exports.action_cancel_notify_updated_mission = action_cancel_notify_updated_mission; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _moment = require('common/moment'); var _moment2 = _interopRequireDefault(_moment); var _reactRouter = require('react-router'); var _md = require('react-icons/lib/md'); var _request = require('./request'); var _request2 = _interopRequireDefault(_request); var _store = require('./store'); var _store2 = _interopRequireDefault(_store); var _utilities = require('common/utilities'); var _styles = require('common/styles'); var _cancelable = require('common/cancelable'); var _missions = require('../actions/missions'); var _display = require('actions/display'); var _cancel_mission = require('components/popovers/cancel_mission'); var _cancel_mission2 = _interopRequireDefault(_cancel_mission); var _send_mission = require('components/popovers/send_mission'); var _send_mission2 = _interopRequireDefault(_send_mission); var _assign_mission = require('components/popovers/assign_mission'); var _assign_mission2 = _interopRequireDefault(_assign_mission); var _unassign_mission = require('components/popovers/unassign_mission'); var _unassign_mission2 = _interopRequireDefault(_unassign_mission); var _confirm_mission_update = require('components/popovers/confirm_mission_update'); var _confirm_mission_update2 = _interopRequireDefault(_confirm_mission_update); var _customize_deal_fields = require('components/popovers/customize_deal_fields'); var _customize_deal_fields2 = _interopRequireDefault(_customize_deal_fields); var _missions2 = require('selectors/missions'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function mission_period(mission) { if (mission.start) { var day_format = 'D MMM' + ((0, _moment2.default)().isSame(mission.start, 'year') ? '' : ' YYYY'); var hour_format = 'HH:mm'; var day_with_hour_format = (day_format + ' ' + (mission.full_days ? '' : hour_format)).trim(); if ((0, _moment2.default)(mission.start).isSame(mission.end, 'day')) { return '' + (0, _moment2.default)(mission.start).format(day_format) + (mission.full_days ? '' : ' : ' + (0, _moment2.default)(mission.start).format(hour_format) + ' \u25B8 ' + (0, _moment2.default)(mission.end).format(hour_format)); } else { return (0, _moment2.default)(mission.start).format(day_with_hour_format) + ' \u25B8 ' + (0, _moment2.default)(mission.end).format(day_with_hour_format); } } else { return ""; } } function action_create_deal() { _request2.default.post('recruiters/' + _store2.default.getState().profile.id + '/deals').then(function (deal) { _store2.default.dispatch((0, _missions.store_deals)([deal])); _reactRouter.browserHistory.push('/deals/' + deal.id); }); } function action_update_mission(_ref, mission) { var users_count = _ref.users_count, _ref$grouped_users_st = _ref.grouped_users_status, assigned = _ref$grouped_users_st.assigned, accepted = _ref$grouped_users_st.accepted, status = _ref.status; var action = function action() { _store2.default.dispatch((0, _missions.update_mission)(mission)); _request2.default.delayed_put('missions/' + mission.id, { mission: mission }); }; if (status != 'assigned' && mission.users_count && assigned.length >= mission.users_count && accepted.length) { _store2.default.dispatch((0, _display.show_popover)(_confirm_mission_update2.default, { on_confirm: action }, "Attention")); } else { action(); } } function action_cancel_mission(_ref2) { var id = _ref2.id, status = _ref2.status; function action() { _store2.default.dispatch((0, _missions.remove_mission)(id)); _request2.default.delete('missions/' + id); } if (status == 'draft') { action(); } else { _store2.default.dispatch((0, _display.show_popover)(_cancel_mission2.default, { on_click: function on_click() { action(); _store2.default.dispatch((0, _display.dismiss_popover)()); }, mission_status: status }, 'Annuler la prestation')); } } function action_cancel_deal(_ref3) { var id = _ref3.id, status = _ref3.status, missions = _ref3.missions; function action() { _store2.default.dispatch((0, _missions.remove_deal)(id)); _request2.default.delete('deals/' + id); _reactRouter.browserHistory.push("/deals"); } _store2.default.dispatch((0, _display.show_popover)(_cancel_mission2.default, { on_click: function on_click() { action(); _store2.default.dispatch((0, _display.dismiss_popover)()); }, mission_status: status }, 'Annuler la mission')); } function action_update_mission_events(mission_id, events) { return _request2.default.post('missions/' + mission_id + '/events', { events: events }).then(function (events) { return _store2.default.dispatch((0, _missions.replace_mission_events)(mission_id, events)); }); } function place_from_workplace(_ref4) { var latitude = _ref4.latitude, longitude = _ref4.longitude, name = _ref4.name, address = _ref4.address; return { location: { lat: latitude, lng: longitude }, label: name, address: address }; } function action_send_mission(mission, user_ids) { return new _promise2.default(function (resolve, reject) { _store2.default.dispatch((0, _display.show_popover)(_send_mission2.default, { mission_id: mission.id, on_confirm: function on_confirm() { _request2.default.put('missions/' + mission.id + '/send', { user_ids: user_ids }).then(function () { return _store2.default.dispatch((0, _display.alert_success)("La proposition de mission a bien été envoyée aux candidats que vous aviez sélectionnés.")); }); _store2.default.dispatch((0, _missions.send_mission)(mission.id, user_ids)); _store2.default.dispatch((0, _display.dismiss_popover)()); resolve(); } }, _store2.default.getState().profile.agency.name)); }); } function action_assign_mission(mission, user_ids) { var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'accepted'; return new _promise2.default(function (resolve, reject) { _store2.default.dispatch((0, _display.show_popover)(_assign_mission2.default, { status: status, mission: mission, on_confirm: function on_confirm() { _request2.default.put('missions/' + mission.id + '/assign', { user_ids: user_ids }).then(function () { var _get_missions$mission = (0, _missions2.get_missions)(_store2.default.getState())[mission.id], accepted = _get_missions$mission.grouped_users_status.accepted, status = _get_missions$mission.status; var has_users_with_status_not_retained = status == "assigned" && (0, _utilities.set_count)((0, _utilities.set_intersection)((0, _utilities.set_from_array)(mission.grouped_users_status.accepted), accepted)); _store2.default.dispatch((0, _display.alert_success)('La mission a bien \xE9t\xE9 valid\xE9e aupr\xE8s ' + (0, _utilities.human_plural)(user_ids.length, "du candidat que vous aviez sélectionné, et il a été prévenu par mail", "des candidats que vous aviez sélectionnés, et ils ont été prévenus par mail") + '.' + (has_users_with_status_not_retained ? " Les candidats qui s'étaient déclarés intéressés et que vous n'avez pas sélectionés ont reçu un message pour les prévenir." : ""))); }); _store2.default.dispatch((0, _missions.assign_mission)(mission.id, user_ids)); _store2.default.dispatch((0, _display.dismiss_popover)()); resolve(); } }, 'Valider la mission pour ce candidat')); }); } function action_unassign_mission(mission, user_ids) { return new _promise2.default(function (resolve, reject) { _store2.default.dispatch((0, _display.show_popover)(_unassign_mission2.default, { on_confirm: function on_confirm() { _request2.default.put('missions/' + mission.id + '/unassign', { user_ids: user_ids }).then(function () { return _store2.default.dispatch((0, _display.alert_success)('Nous avons envoy\xE9 un mail ' + (0, _utilities.human_plural)(user_ids.length, 'au candidat que vous aviez sélectionné pour lui dire que sa', 'aux candidats que vous aviez sélectionnés pour leur dire que leur') + ' mission est annul\xE9e.')); }); _store2.default.dispatch((0, _missions.unassign_mission)(mission.id, user_ids)); _store2.default.dispatch((0, _display.dismiss_popover)()); resolve(); } }, 'Annuler la mission pour ce candidat')); }); } function action_duplicate_deal(_ref5) { var id = _ref5.id; _reactRouter.browserHistory.push('/deals'); _request2.default.post('deals/' + id + '/duplicate').then(function (deal) { _reactRouter.browserHistory.push('/deals/' + deal.id); _store2.default.dispatch((0, _missions.store_deals)([deal])); }); } function deal_has_custom_fields(_ref6) { var has_custom_events = _ref6.has_custom_events, has_custom_workplace = _ref6.has_custom_workplace, custom_field_ids = _ref6.custom_field_ids; return has_custom_events || has_custom_workplace || !(0, _utilities.empty_set)(custom_field_ids); } function action_add_mission(deal) { function action() { _request2.default.post('deals/' + deal.id + '/missions').then(function (mission) { return _store2.default.dispatch((0, _missions.store_missions)([mission])); }); } if (!deal_has_custom_fields(deal)) { action_customize_deal_fields(deal).then(action); } else { action(); } } function action_customize_deal_fields(_ref7) { var id = _ref7.id; return new _promise2.default(function (resolve, reject) { _store2.default.dispatch((0, _display.show_popover)(_customize_deal_fields2.default, { deal_id: id, update: function update(deal) { _store2.default.dispatch((0, _missions.update_deal)((0, _extends3.default)({}, deal, { id: id }))); var has_custom_events = deal.has_custom_events, has_custom_workplace = deal.has_custom_workplace, custom_field_ids = deal.custom_field_ids; _request2.default.put('deals/' + id, { deal: { has_custom_events: has_custom_events, has_custom_workplace: has_custom_workplace, custom_field_ids: (0, _utilities.array_from_set)(custom_field_ids) } }); _store2.default.dispatch((0, _display.dismiss_popover)()); resolve(); } }, "Sélectionner les champs spécifiques à chaque prestation")); }); } function action_export_users(_ref8) { var id = _ref8.id; return _request2.default.asynchronous('deals/' + id + '/export_users').then(function (response) { (0, _utilities.download_file)(response.url, "mission"); }); } var get_mission_status_elements = exports.get_mission_status_elements = (0, _utilities.make_memoized)(function (status) { switch (status) { case 'draft': return { priority: 1, name: 'non proposée', color: (0, _styles.color)('black', 'pale'), icon: _react2.default.createElement(_md.MdEdit, null) }; case 'sent': return { priority: 4, name: 'en attente de réponse', color: (0, _styles.color)('primary', 'light'), icon: "?" }; case 'pending_assignement': return { priority: 3, name: 'en attente de validation', color: (0, _styles.color)('attention'), icon: _react2.default.createElement(_md.MdDone, null) }; case 'assigned': return { priority: 5, name: 'validée', color: (0, _styles.color)('primary'), icon: _react2.default.createElement(_md.MdDoneAll, null) }; case 'pending_selection': return { priority: 2, name: 'à proposer à nouveau', color: (0, _styles.color)('important'), icon: _react2.default.createElement(_md.MdSend, null) }; } }); function get_mission_proposal_status_elements(status) { switch (status) { case 'new': return { icon: "?", color: (0, _styles.color)('primary', 'light') }; case 'accepted': return { icon: _react2.default.createElement(_md.MdDone, null), color: (0, _styles.color)('attention') }; case 'rejected': return { icon: _react2.default.createElement(_md.MdClose, null), color: (0, _styles.color)('black', 'pale') }; case 'assigned': return { icon: _react2.default.createElement(_md.MdDoneAll, null), color: (0, _styles.color)('primary') }; default: return {}; } } function action_cancel_drafts(deal_ids) { var deals = (0, _missions2.get_deals)(_store2.default.getState()); deal_ids = deal_ids.filter(function (id) { return (deals[id] || {}).status == 'draft'; }); _request2.default.put('deals/cancel', { deal_ids: deal_ids }); _store2.default.dispatch((0, _missions.remove_deals)(deal_ids)); } function action_toggle_publish_mission(_ref9) { var id = _ref9.id, published = _ref9.published; _store2.default.dispatch((0, _missions.update_mission)({ id: id, published: !published })); if (published) { return _request2.default.put('missions/' + id + '/unpublish'); } else { return _request2.default.put('missions/' + id + '/publish'); } } function action_notify_updated_mission(mission_id) { var _get_mission_proposal = (0, _missions2.get_mission_proposals)(_store2.default.getState())[mission_id], id = _get_mission_proposal.id, notification_timeout = _get_mission_proposal.notification_timeout, sent = _get_mission_proposal.sent; if (!sent) { return; } if (notification_timeout) { notification_timeout.cancel(); } var will_send_notification_at = (0, _moment2.default)().add(1, 'minute'); _store2.default.dispatch((0, _missions.update_mission)({ id: id, notification_timeout: (0, _cancelable.cancelable_timeout)(function () { _request2.default.put('missions/' + id + '/notify_of_update'); _store2.default.dispatch((0, _missions.update_mission)({ id: id, notification_timeout: (0, _cancelable.cancelable_timeout)(function () { _store2.default.dispatch((0, _missions.update_mission)({ id: id, will_send_notification_at: false })); }, 2 * 1000) })); }, -(0, _moment2.default)().diff(will_send_notification_at)), will_send_notification_at: will_send_notification_at })); } function action_cancel_notify_updated_mission(_ref10) { var id = _ref10.id, notification_timeout = _ref10.notification_timeout; if (notification_timeout) { notification_timeout.cancel(); } _store2.default.dispatch((0, _missions.update_mission)({ id: id, will_send_notification_at: false })); }