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