UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

302 lines (261 loc) 10.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.user_full_name = exports.is_valid_email = exports.new_users_fuse = undefined; var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); exports.action_invite_users = action_invite_users; exports.make_user_status = make_user_status; exports.get_user_status = get_user_status; exports.make_user_statuses = make_user_statuses; exports.action_update_user = action_update_user; exports.action_toggle_blacklist_user = action_toggle_blacklist_user; exports.action_open_chat = action_open_chat; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _fuse = require('fuse.js'); var _fuse2 = _interopRequireDefault(_fuse); var _md = require('react-icons/lib/md'); var _instant_job = require('components/instant_job'); var _instant_job2 = _interopRequireDefault(_instant_job); var _blacklist = require('components/popovers/blacklist'); 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 _constants = require('common/constants'); var _utilities = require('common/utilities'); var _display = require('actions/display'); var _users = require('actions/users'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var new_users_fuse = exports.new_users_fuse = function new_users_fuse() { var fuses = ["first_name", "last_name", "email"].map(function (field) { return new _fuse2.default([], { keys: [field], include: ["score"], id: "id", threshold: 0.2 }); }); return { set: function set(users) { fuses.forEach(function (fuse) { return fuse.set(users); }); }, search: function search(query) { var querys = query.split(" ").filter(Boolean); var scores = {}; fuses.forEach(function (fuse) { return querys.forEach(function (query) { var results = fuse.search(query); var results_count = results.length; results.forEach(function (result) { var item = result.item; if (!scores[item]) { scores[item] = 0; } scores[item] += (1 - result.score) / results_count; }); }); }); var r = (0, _utilities.array_from_set)(scores).sort(function (a, b) { return scores[b] - scores[a]; }); return r; } }; }; var email_validation = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/; var is_valid_email = exports.is_valid_email = function is_valid_email(email) { return email_validation.test(email); }; function action_invite_users(users) { return _request2.default.asynchronous("users/import", { users: users }).then(function (categories) { var agency_name = _store2.default.getState().profile.agency.name; if (categories.already_existing.length > 0) { _store2.default.dispatch((0, _display.alert_info)((0, _utilities.human_plural)(categories.already_existing.length, "%% candidat était déjà présent dans notre base de donnée et a reçu votre invitation directement dans son application.", "%% candidats étaient déjà présents dans notre base de donnée et ont reçu votre invitation directement dans leur application."))); } if (categories.already_invited.length > 0) { _store2.default.dispatch((0, _display.alert_info)((0, _utilities.human_plural)(categories.already_invited.length, "%% candidat avait déjà été invité", "%% candidats avaient déjà été invités") + ' \xE0 rejoindre ' + agency_name + '.')); } if (categories.already_added.length > 0) { _store2.default.dispatch((0, _display.alert_info)((0, _utilities.human_plural)(categories.already_added.length, '%% candidat avait d\xE9j\xE0 rejoint ' + agency_name + '. Nous ne lui', '%% candidats avaient d\xE9j\xE0 rejoint ' + agency_name + '. Nous ne leur') + ' avons pas renvoy\xE9 de mail d\'invitation.')); } if (categories.newly_invited.length > 0) { _store2.default.dispatch((0, _display.alert_success)((0, _utilities.human_plural)(categories.newly_invited.length, "%% nouveau candidat a reçu", "%% nouveaux candidats ont reçu") + ' un mail d\'invitation \xE0 installer l\'application InstantJob.')); } ["already_added", "already_invited", "already_existing", "newly_invited"].map(function (group) { users = categories[group].map(function (user) { return (0, _extends3.default)({}, user, { active: true }); }); _store2.default.dispatch((0, _users.update_users)(users)); }); }); } function make_user_status(status) { var user_status = make_user_statuses()[status]; return { status: status, description: user_status.name, icon: user_status.icon }; } function get_user_status(user) { if (!user || (0, _utilities.empty_object)(user)) { return { status: 'nonexistent', description: '', icon: null }; } function get_status_name() { var blacklisted_at = user.blacklisted_at, invitation_accepted_at = user.invitation_accepted_at, app_name = user.app_name, active = user.active, invitation_rejected_at = user.invitation_rejected_at, invitation_sent_at = user.invitation_sent_at, temporary = user.temporary; if (blacklisted_at) { return 'blacklisted'; } if (invitation_accepted_at) { if (app_name) { if (active) { return 'active'; } else { return 'inactive'; } } else { return 'mail'; } } else { if (invitation_rejected_at) { return 'rejected'; } else { if (invitation_sent_at) { // return 'pending' return 'mail'; } else { if (temporary) { return; } else { return 'applied'; } } } } } return make_user_status(get_status_name()); } function make_user_statuses() { var custom_color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; var make_user_statuses_elements = (0, _utilities.make_memoized)(function (custom_color) { var make_color = function make_color(_ref) { var name = _ref.name, tone = _ref.tone; return (0, _constants.color)(custom_color || name, tone); }; var icon_colors = (0, _utilities.map_hash)({ active: { name: 'primary' }, mail: { name: 'primary', tone: 'light' }, pending: { name: 'attention' }, rejected: { name: 'important' }, inactive: { name: 'black', tone: 'light' }, blacklisted: { name: 'black' }, invited: { name: 'black' }, applied: { name: 'primary' }, new: { name: 'action' } }, make_color); var names = { active: 'Actif sur l\'application', mail: 'Connecté par mail', pending: 'Invitation en attente', rejected: 'Invitation refusée', inactive: 'Inactif', blacklisted: 'Blacklisté', invited: 'Invitation envoyée', applied: 'Candidat', new: 'Pas encore importé' }; var get_style_props = function get_style_props(status) { return { style: { color: icon_colors[status] } }; }; var icons = (0, _utilities.create_hash)((0, _keys2.default)(icon_colors), function (status) { var props = get_style_props(status); switch (status) { case 'active': return _react2.default.createElement( 'div', props, _react2.default.createElement(_instant_job2.default, null) ); case 'mail': return _react2.default.createElement(_md.MdEmail, props); case 'pending': return _react2.default.createElement( 'span', props, "?" ); case 'rejected': return _react2.default.createElement(_md.MdClear, props); case 'inactive': return _react2.default.createElement( 'div', props, _react2.default.createElement(_instant_job2.default, null) ); case 'blacklisted': return _react2.default.createElement(_md.MdThumbDown, props); case 'invited': return _react2.default.createElement(_md.MdGroup, props); case 'applied': return _react2.default.createElement( 'div', props, _react2.default.createElement(_instant_job2.default, null) ); case 'new': return null; } }); return (0, _utilities.create_hash)((0, _keys2.default)(names), function (status) { return { name: names[status], icon_color: icon_colors[status], icon: icons[status] }; }); }); return make_user_statuses_elements(custom_color); } var user_full_name = exports.user_full_name = function user_full_name(_ref2) { var first_name = _ref2.first_name, last_name = _ref2.last_name, email = _ref2.email; return ((first_name || "") + ' ' + (last_name || "")).trim() || email; }; function action_update_user(user) { _store2.default.dispatch((0, _users.update_user)(user)); _request2.default.put('users/' + user.id, { user: user }); } function action_toggle_blacklist_user(user) { var blacklisted_at = user.blacklisted_at, id = user.id; _store2.default.dispatch((0, _display.show_popover)(blacklisted_at ? _blacklist.Whitelist : _blacklist.Blacklist, { id: id, on_dismiss: function on_dismiss() { var action = blacklisted_at ? 'whitelist' : 'blacklist'; _request2.default.put('users/' + id + '/' + action); _store2.default.dispatch((0, _users.update_user)({ id: id, blacklisted_at: blacklisted_at ? null : (0, _moment2.default)() })); _store2.default.dispatch((0, _display.dismiss_popover)()); } }, blacklisted_at ? 'Re-intégrer' : 'Blacklister')); } function action_open_chat(_ref3) { var id = _ref3.id; _store2.default.dispatch((0, _users.set_current_recipient)(id)); }