UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

177 lines (151 loc) 8.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends11 = require('babel-runtime/helpers/extends'); var _extends12 = _interopRequireDefault(_extends11); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); exports.fields = fields; var _base = require('./base'); var _utilities = require('../common/utilities'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var initial_state = { fields: {}, values: {} }; var sanitize_set = function sanitize_set(set) { return !set || Array.isArray(set) ? (0, _utilities.set_from_array)(set || []) : set; }; var sanitize_value = function sanitize_value(_ref) { var entity_ids = _ref.entity_ids, mission_ids = _ref.mission_ids, value = (0, _objectWithoutProperties3.default)(_ref, ['entity_ids', 'mission_ids']); return (0, _extends12.default)({}, (0, _utilities.map_hash)({ entity_ids: entity_ids, mission_ids: mission_ids }, sanitize_set), value); }; var sanitize_field = function sanitize_field(_ref2) { var values = _ref2.values, field = (0, _objectWithoutProperties3.default)(_ref2, ['values']); return (0, _extends12.default)({ values: (0, _utilities.set_from_array)(values.map((0, _utilities.property_getter)('id'))) }, field); }; var update_field = function update_field(state, _ref3) { var values = _ref3.values, field = (0, _objectWithoutProperties3.default)(_ref3, ['values']); return (0, _base.update_item)((0, _base.store_items)(state, "values", (values || []).map(sanitize_value)), "fields", field); }; var update_value = function update_value(state, _ref4) { var entity_ids = _ref4.entity_ids, mission_ids = _ref4.mission_ids, value = (0, _objectWithoutProperties3.default)(_ref4, ['entity_ids', 'mission_ids']); return (0, _base.update_item)(state, 'values', (0, _extends12.default)({}, value, (0, _utilities.map_hash)((0, _utilities.filter_hash)({ entity_ids: entity_ids, mission_ids: mission_ids }, Boolean), _utilities.set_from_array))); }; var add_items_value = function add_items_value(state, value_id, item_ids, for_missions) { var value = state.values[value_id]; var ids_key = for_missions ? 'mission_ids' : 'entity_ids'; return (0, _extends12.default)({}, state, { values: (0, _extends12.default)({}, state.values, (0, _defineProperty3.default)({}, value_id, (0, _extends12.default)({}, value, (0, _defineProperty3.default)({}, ids_key, (0, _extends12.default)({}, value[ids_key], (0, _utilities.set_from_array)(item_ids)))))) }); }; var make_update_clear_items_exclusive_value = function make_update_clear_items_exclusive_value() { return (0, _utilities.create_hash)(['clear', 'update'], function (verb) { return function (state, value_id, item_ids) { var _ref5 = state.values[value_id] || {}, field_id = _ref5.field_id; var _ref6 = state.fields[field_id] || {}, value_id_for = _ref6.value_id_for; return (0, _base.update_item)(state, "fields", { id: field_id, value_id_for: (0, _extends12.default)({}, value_id_for, (0, _utilities.create_hash)(item_ids, function () { return verb == 'clear' ? null : value_id; })) }); }; }); }; var _make_update_clear_it = make_update_clear_items_exclusive_value(), update_items_exclusive_value = _make_update_clear_it.update, clear_items_exclusive_value = _make_update_clear_it.clear; var remove_items_value = function remove_items_value(state, value_id, item_ids, for_missions) { var value = state.values[value_id]; var ids_key = for_missions ? 'mission_ids' : 'entity_ids'; return (0, _extends12.default)({}, state, { values: (0, _extends12.default)({}, state.values, (0, _defineProperty3.default)({}, value_id, (0, _extends12.default)({}, value, (0, _defineProperty3.default)({}, ids_key, (0, _utilities.set_difference)((0, _utilities.array_from_set)(value[ids_key]), (0, _utilities.set_from_array)(item_ids)))))) }); }; var update_items_comment = function update_items_comment(state, field_id, comments) { return (0, _base.update_item)(state, "fields", { id: field_id, comments: (0, _extends12.default)({}, (state.fields[field_id] || {}).comments || {}, comments) }); }; function fields() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initial_state; var action = arguments[1]; var fields = void 0, values = void 0, value = void 0, field = void 0; switch (action.type) { case "store_fields": return (0, _base.store_items)((0, _base.store_items)(state, "values", (0, _utilities.flatten_array)(action.fields.map((0, _utilities.property_getter)('values', []))).map(sanitize_value)), "fields", action.fields.map(sanitize_field)); case "update_field": return update_field(state, action.field); case "update_fields": return action.fields.reduce(update_field, state); case "remove_field": fields = (0, _extends12.default)({}, state.fields); delete fields[action.field_id]; values = (0, _extends12.default)({}, state.values); (0, _utilities.array_from_set)(state.fields[action.field_id].values).forEach(function (id) { delete values[id]; }); return (0, _extends12.default)({}, state, { fields: fields, values: values }); case "store_values": return (0, _extends12.default)({}, state, { values: action.values.reduce(function (values, value) { return (0, _extends12.default)({}, values, (0, _defineProperty3.default)({}, value.id, sanitize_value(value))); }, state.values), fields: action.values.reduce(function (fields, value) { return (0, _extends12.default)({}, fields, (0, _defineProperty3.default)({}, value.field_id, (0, _extends12.default)({}, state.fields[value.field_id], { values: (0, _extends12.default)({}, state.fields[value.field_id].values, (0, _defineProperty3.default)({}, value.id, true)) }))); }, state.fields) }); case "update_value": return update_value(state, action.value); case "update_values": return action.values.reduce(update_value, state); case "remove_value": values = (0, _extends12.default)({}, state.values); delete values[action.value_id]; field = state.fields[state.values[action.value_id].field_id]; return (0, _extends12.default)({}, state, { values: values, fields: (0, _extends12.default)({}, state.fields, (0, _defineProperty3.default)({}, field.id, (0, _extends12.default)({}, field, { values: (0, _extends12.default)({}, field.values, (0, _defineProperty3.default)({}, action.value_id, false)) }))) }); case "add_users_value": return add_items_value(state, action.value_id, action.user_ids); case "remove_users_value": return remove_items_value(state, action.value_id, action.user_ids); case "add_entity_value": return add_items_value(state, action.value_id, [action.entity_id], action.for_missions); case "update_exclusive_entity_value": return update_items_exclusive_value(state, action.value_id, [action.entity_id]); case "clear_exclusive_entity_value": return clear_items_exclusive_value(state, action.value_id, [action.entity_id]); case "remove_entity_value": return remove_items_value(state, action.value_id, [action.entity_id], action.for_missions); case "update_user_comments": return update_items_comment(state, action.field_id, action.user_comments); case "update_entity_comment": return update_items_comment(state, action.field_id, (0, _defineProperty3.default)({}, action.entity_id, action.comment)); default: return state; } }