UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

464 lines (415 loc) 19.3 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.get_mission_fields_by_deal = exports.get_missions_recyclable_fields = exports.get_users_filter_fields = exports.get_missions_filter_fields = exports.get_deals_fields = exports.get_exports_fields = exports.get_workplaces_fields = exports.get_shifts_fields = exports.get_proposals_fields = exports.get_missions_fields = exports.get_users_fields = exports.get_users_fields_with_locked_values = exports.get_user_fields = exports.get_mission_fields = exports.get_fields_by_deal = exports.get_fields_by_workplace = exports.get_fields_by_value = exports.get_fields_by_mission = exports.get_fields_by_user = exports.get_fields_by_shift = exports.get_fields_by_proposal = exports.get_mission_values_by_mission = exports.get_fields = exports.get_values_by_field = exports.get_values = exports.get_proposal_ids = undefined; var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); 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 _base = require('selectors/base'); var _utilities = require('common/utilities'); var _fields = require('common/fields'); var _user_missions = require('./user_missions'); var _store = require('common/store'); var _store2 = _interopRequireDefault(_store); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var get_raw_fields = function get_raw_fields(state) { return state.fields.fields; }; var get_raw_values = function get_raw_values(state) { return state.fields.values; }; var get_raw_missions = function get_raw_missions(state) { return state.missions.missions; }; var get_raw_deals = function get_raw_deals(state) { return state.missions.deals; }; var get_raw_users = function get_raw_users(state) { return state.users.users; }; var get_raw_shifts = function get_raw_shifts(state) { return state.shifts.shifts; }; var get_proposal_ids = exports.get_proposal_ids = (0, _base.tolerant_selector)([get_raw_missions], function (missions) { return (0, _utilities.flatten_array)((0, _utilities.array_from_hash)(missions).map(function (_ref) { var assigned_proposals = _ref.assigned_proposals; return (assigned_proposals || []).map((0, _utilities.property_getter)('id')); })); }); var get_values = exports.get_values = (0, _base.tolerant_selector)([get_raw_values], function (values) { return (0, _utilities.map_hash)(values, function (value) { var field_id = value.field_id, id = value.id; return (0, _extends3.default)({}, value, { update: function update(new_value) { (0, _fields.action_update_value)((0, _extends3.default)({ id: id }, new_value)); }, remove: function remove() { (0, _fields.action_remove_value)(id); }, create_value_field: function create_value_field() { return (0, _fields.action_create_value_field)(field_id); }, show_associated_values: function show_associated_values() { (0, _fields.action_show_associated_values)(id); } }); }); }); var get_values_by_field = exports.get_values_by_field = (0, _base.tolerant_selector)([get_values, get_raw_fields], function (values, fields) { return (0, _utilities.split_hash)(values, (0, _utilities.property_getter)('field_id'), (0, _keys2.default)(fields)); }); var get_fields = exports.get_fields = (0, _base.tolerant_selector)([get_raw_fields, get_values_by_field], function (fields, values_by_field) { return (0, _utilities.array_from_hash)(fields).map(function (field) { var values = values_by_field[field.id]; return (0, _extends3.default)({}, field, { value_ids: (0, _keys2.default)(values), values: (0, _utilities.array_from_hash)(values), tolerant: true, get_value_props: function get_value_props(value_id) { return values[value_id]; }, get_item_values: function get_item_values(_ref2) { var id = _ref2.id; return [field.value_id_for[id]].filter(Boolean); }, update: function update(new_field) { return (0, _fields.action_update_field)((0, _extends3.default)({ id: field.id }, new_field)); }, remove: function remove() { return (0, _fields.action_remove_field)(field.id); }, view_template: function view_template(id) { return (0, _fields.action_view_entity_template)(id, field); }, create_value: function create_value(value_name) { return (0, _fields.action_create_value)(field.id, value_name); }, select_value: function select_value(entity_id, value_id, for_missions) { return (0, _fields.action_select_entity_value)(entity_id, value_id, for_missions); }, update_comment: function update_comment(entity_id, comment) { return (0, _fields.action_update_entity_comment)(entity_id, field.id, comment); }, fetch_value: function fetch_value(entity_id) { return (0, _fields.action_fetch_entity_computed_value)(entity_id, field.id); } }); }); }); function make_get_entity_ids(entity_type) { switch (entity_type) { case 'User': return function (state) { return (0, _keys2.default)(state.users.users); }; case 'Mission': return function (state) { return (0, _keys2.default)(state.missions.missions); }; case 'MissionProposal': return get_proposal_ids; case 'Shift': return function (state) { return (0, _keys2.default)(state.shifts.shifts); }; case 'Value': return function (state) { return (0, _keys2.default)(state.fields.values); }; case 'Workplace': return function (state) { return (0, _keys2.default)(state.missions.workplaces); }; case 'Deal': return function (state) { return (0, _keys2.default)(state.missions.deals); }; default: return function (state) { return []; }; } } var make_get_entity_values_by_entity = (0, _utilities.make_memoized)(function (entity_type) { if (entity_type == 'Mission') { return get_mission_values_by_mission; } return (0, _base.tolerant_selector)([get_raw_values, make_get_entity_ids(entity_type), get_raw_fields], function (values, entity_ids, fields) { return (0, _utilities.create_hash)(entity_ids, function (entity_id) { return (0, _keys2.default)(values).filter(function (value_id) { var _ref3 = values[value_id] || {}, field_id = _ref3.field_id, entity_ids = _ref3.entity_ids; var _ref4 = fields[field_id] || {}, for_entity = _ref4.for_entity, category = _ref4.category, value_id_for = _ref4.value_id_for; if (for_entity == entity_type) { switch (category) { case 'non_exclusive': return entity_ids[entity_id]; case 'exclusive': return value_id == value_id_for[entity_id]; default: return false; } } return false; }); }); }); }); var get_mission_values_by_mission = exports.get_mission_values_by_mission = (0, _base.tolerant_selector)([get_raw_values, get_raw_missions, get_raw_deals, get_raw_fields], function (values, missions, deals, fields) { return (0, _utilities.create_hash)((0, _keys2.default)(missions), function (mission_id) { var deal_id = missions[mission_id].deal_id; var _ref5 = deals[deal_id] || { custom_field_ids: {} }, custom_field_ids = _ref5.custom_field_ids, template_mission_id = _ref5.template_mission_id; var get_mission_id = (0, _utilities.make_memoized)(function (field_id) { return custom_field_ids[field_id] ? mission_id : template_mission_id; }); return (0, _keys2.default)(values).filter(function (value_id) { var _ref6 = values[value_id] || { mission_ids: {} }, mission_ids = _ref6.mission_ids, field_id = _ref6.field_id; var _ref7 = fields[field_id] || {}, for_entity = _ref7.for_entity, recycled = _ref7.recycled, category = _ref7.category, value_id_for = _ref7.value_id_for; if (for_entity == 'Mission' || recycled) { if (category == 'exclusive' && for_entity == 'Mission') { return value_id == value_id_for[get_mission_id(field_id)]; } else { return mission_ids[get_mission_id(field_id)]; } } return false; }); }); }); var make_fields_with_selected_values = function make_fields_with_selected_values(item_type, item_id, fields, values, selected_values) { var field_ids = fields.map((0, _utilities.property_getter)('id')); var selected_values_by_field = (0, _utilities.create_hash)(field_ids, function () { return []; }); selected_values.forEach(function (id) { var value = values[id]; if (selected_values_by_field[value.field_id]) { selected_values_by_field[value.field_id].push(value); } }); var for_missions = item_type == 'Mission'; return (0, _utilities.hash_with_key)(fields.map(function (field) { var value_id_for = field.value_id_for, id = field.id, recycled = field.recycled, files = field.files, select_value = field.select_value, update_comment = field.update_comment, _view_template = field.view_template, _fetch_value = field.fetch_value, comments = field.comments; var category = field.category; if (recycled && for_missions) { category = 'non_exclusive'; } var selected_value_id = (value_id_for || {})[item_id]; function is_empty() { switch (category) { case "non_exclusive": return (0, _utilities.empty_array)(selected_values_by_field[id]); case "comment": return !comments[item_id]; case "file": return !files[item_id]; case "exclusive": return !selected_value_id; } } return (0, _extends3.default)({}, field, { category: category, selected_values: selected_values_by_field[field.id], selected_value: values[selected_value_id], empty: is_empty(), comment: (comments || {})[item_id], file: (files || {})[item_id], selected: selected_value_id, allow_creating_values: !for_missions || !field.recycled, on_select_value: function on_select_value(value_id) { return select_value(item_id, value_id, for_missions); }, on_deselect_value: function on_deselect_value(value_id) { return (0, _fields.action_remove_entity_value)(item_id, value_id, for_missions); }, on_clear: function on_clear() { return (0, _fields.action_remove_entity_value)(item_id, selected_value_id); }, on_submit_comment: function on_submit_comment(comment) { return update_comment(item_id, comment); }, view_template: function view_template() { return _view_template(item_id); }, upload_file: function upload_file(file) { return (0, _fields.action_upload_entity_file)(item_id, id, file); }, fetch_value: function fetch_value() { return _fetch_value(item_id); }, user_id: item_type == 'User' && item_id }); })); }; var make_get_fields_by_entity = function make_get_fields_by_entity(entity_type) { function make_fields_filter(entity_id, values) { if (entity_type == 'Mission') { return function (_ref8) { var for_entity = _ref8.for_entity, recycled = _ref8.recycled; return recycled || for_entity == 'Mission'; }; } if (entity_type == 'Value') { var value = values[entity_id] || {}; return function (_ref9) { var for_entity = _ref9.for_entity, field_id = _ref9.field_id; return for_entity == 'Value' && value.field_id == field_id; }; } return function (_ref10) { var for_entity = _ref10.for_entity; return for_entity == entity_type; }; } return (0, _base.tolerant_selector)([get_fields, get_values, make_get_entity_ids(entity_type), make_get_entity_values_by_entity(entity_type)], function (fields, values, entity_ids, entity_values_by_entity) { return (0, _utilities.create_hash)(entity_ids, function (entity_id) { return make_fields_with_selected_values(entity_type, entity_id, fields.filter(make_fields_filter(entity_id, values)), values, entity_values_by_entity[entity_id]); }); }); }; var get_fields_by_proposal = exports.get_fields_by_proposal = make_get_fields_by_entity('MissionProposal'); var get_fields_by_shift = exports.get_fields_by_shift = make_get_fields_by_entity('Shift'); var get_fields_by_user = exports.get_fields_by_user = make_get_fields_by_entity('User'); var get_fields_by_mission = exports.get_fields_by_mission = make_get_fields_by_entity('Mission'); var get_fields_by_value = exports.get_fields_by_value = make_get_fields_by_entity('Value'); var get_fields_by_workplace = exports.get_fields_by_workplace = make_get_fields_by_entity('Workplace'); var get_fields_by_deal = exports.get_fields_by_deal = make_get_fields_by_entity('Deal'); var get_mission_fields = exports.get_mission_fields = (0, _utilities.make_memoized)(function (mission_id) { return (0, _base.tolerant_selector)([get_fields_by_mission], function (fields_by_mission) { return fields_by_mission[mission_id]; }); }); var get_user_fields = exports.get_user_fields = (0, _utilities.make_memoized)(function (user_id) { return (0, _base.tolerant_selector)([get_fields_by_user], function (fields_by_user) { return fields_by_user[user_id]; }); }); var get_users_fields_with_locked_values = (0, _utilities.make_memoized)(function (mission_id, status) { return (0, _base.tolerant_selector)([get_mission_values_by_mission, get_users_filter_fields], function (mission_values_by_mission, fields) { if (status == 'available') { var locked_value_ids = (0, _utilities.set_from_array)(mission_values_by_mission[mission_id] || []); return fields.map(function (_ref11) { var values = _ref11.values, field = (0, _objectWithoutProperties3.default)(_ref11, ['values']); return (0, _extends3.default)({}, field, { values: field.recycled ? values.map(function (value) { return (0, _extends3.default)({}, value, { locked: locked_value_ids[value.id] }); }) : values }); }); } else { return fields; } }); }); exports.get_users_fields_with_locked_values = get_users_fields_with_locked_values; var make_get_specific_fields = function make_get_specific_fields(entity_type) { var for_missions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return (0, _base.tolerant_selector)([get_fields], function (fields) { return fields.filter(function (_ref12) { var for_entity = _ref12.for_entity, recycled = _ref12.recycled; return for_entity == entity_type || for_missions && recycled; }).map(function (field) { if (field.recycled && for_missions) { return (0, _extends3.default)({}, field, { category: 'non_exclusive' }); } return field; }); }); }; var get_users_fields = exports.get_users_fields = make_get_specific_fields('User'); var get_missions_fields = exports.get_missions_fields = make_get_specific_fields('Mission', true); var get_proposals_fields = exports.get_proposals_fields = make_get_specific_fields('MissionProposal'); var get_shifts_fields = exports.get_shifts_fields = make_get_specific_fields('Shift'); var get_workplaces_fields = exports.get_workplaces_fields = make_get_specific_fields('Workplace'); var get_exports_fields = exports.get_exports_fields = make_get_specific_fields('Agency'); var get_deals_fields = exports.get_deals_fields = make_get_specific_fields('Deal'); var get_missions_filter_fields = exports.get_missions_filter_fields = (0, _base.tolerant_selector)([get_missions_fields], function (fields) { return fields.map(function (field) { return (0, _extends3.default)({}, field, { get_item_values: function get_item_values(_ref13) { var template_mission = _ref13.template_mission, custom_field_ids = _ref13.custom_field_ids, missions = _ref13.missions; if (custom_field_ids[field.id]) { return (0, _utilities.flatten_array)(missions.map(field.get_item_values)); } return field.get_item_values(template_mission); } }); }); }); var get_users_filter_fields = exports.get_users_filter_fields = (0, _base.tolerant_selector)([get_users_fields, get_missions_fields, _user_missions.get_user_assigned_mission_ids, get_fields_by_mission, get_raw_missions, get_raw_deals], function (users_fields, missions_fields, user_assigned_mission_ids, fields_by_mission, missions, deals) { return [].concat((0, _toConsumableArray3.default)(users_fields), (0, _toConsumableArray3.default)(missions_fields.map(function (field) { var category = field.category, recycled = field.recycled; if (category == 'exclusive' && !recycled) { return (0, _extends3.default)({}, field, { get_item_values: function get_item_values(_ref14) { var id = _ref14.id; var mission_ids = user_assigned_mission_ids[id] || []; return (0, _utilities.flatten_array)(mission_ids.map(function (mission_id) { var mission = missions[mission_id] || {}; var _ref15 = deals[mission.deal_id] || {}, custom_field_ids = _ref15.custom_field_ids, template_mission_id = _ref15.template_mission_id; if ((custom_field_ids || {})[field.id]) { return field.get_item_values(mission); } else { return field.get_item_values(missions[template_mission_id] || {}); } })); } }); } return null; }).filter(Boolean))); }); var get_missions_recyclable_fields = exports.get_missions_recyclable_fields = (0, _base.tolerant_selector)([get_raw_fields], function (fields) { return (0, _utilities.filter_hash)(fields, function (_ref16) { var for_entity = _ref16.for_entity, recycled = _ref16.recycled, category = _ref16.category; return for_entity == 'User' && !recycled && (category == 'non_exclusive' || category == 'exclusive'); }); }); var get_mission_fields_by_deal = exports.get_mission_fields_by_deal = (0, _base.tolerant_selector)([get_fields_by_mission, get_raw_deals], function (fields_by_mission, deals) { return (0, _utilities.map_hash)(deals, function (_ref17) { var template_mission_id = _ref17.template_mission_id; return (0, _utilities.array_from_hash)(fields_by_mission[template_mission_id]); }); });