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