instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
435 lines (365 loc) • 16.4 kB
JavaScript
;
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 }));
}