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