instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
163 lines (137 loc) • 6.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends7 = require('babel-runtime/helpers/extends');
var _extends8 = _interopRequireDefault(_extends7);
exports.missions = missions;
var _base = require('./base');
var _moment = require('common/moment');
var _moment2 = _interopRequireDefault(_moment);
var _utilities = require('common/utilities');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var initial_state = {
deals: {},
missions: {},
events: {},
idGenerator: 0,
users: {},
workplaces: {},
missions_loaded: false
};
var update_users_status = function update_users_status(state, mission_id, user_ids, status) {
var mission_users = (0, _extends8.default)({}, state.users[mission_id] || {}, (0, _utilities.create_hash)(user_ids, function () {
return status;
}));
return (0, _extends8.default)({}, state, {
users: (0, _extends8.default)({}, state.users, (0, _defineProperty3.default)({}, mission_id, mission_users))
});
};
var store_missions = function store_missions(state, missions) {
return (0, _extends8.default)({}, state, {
missions: missions.reduce(function (missions, mission) {
return (0, _extends8.default)({}, missions, (0, _defineProperty3.default)({}, mission.id, (0, _extends8.default)({}, mission)));
}, state.missions),
events: missions.reduce(function (events, mission) {
return (0, _extends8.default)({}, events, (0, _utilities.hash_with_key)(mission.events));
}, state.events),
users: missions.reduce(function (users, mission) {
return (0, _extends8.default)({}, users, (0, _defineProperty3.default)({}, mission.id, mission.users_status));
}, state.users),
missions_loaded: true
});
};
var update_mission = function update_mission(state, mission) {
var id = mission.id,
users_status = mission.users_status,
events = mission.events;
return (0, _base.update_item)((0, _base.store_items)(users_status ? (0, _extends8.default)({}, state, {
users: (0, _extends8.default)({}, state.users, (0, _defineProperty3.default)({}, id, users_status))
}) : state, "events", events), "missions", mission);
};
var store_deals = function store_deals(state, deals) {
return (0, _base.store_items)(store_missions(state, (0, _utilities.flatten_array)(deals.map(function (_ref) {
var template_mission = _ref.template_mission,
missions = _ref.missions;
return [template_mission].concat((0, _toConsumableArray3.default)(missions || [])).filter(Boolean);
}))), "deals", deals.map(sanitize_deal));
};
var sanitize_deal = function sanitize_deal(_ref2) {
var template_mission = _ref2.template_mission,
custom_field_ids = _ref2.custom_field_ids,
deal = (0, _objectWithoutProperties3.default)(_ref2, ['template_mission', 'custom_field_ids']);
deal = (0, _extends8.default)({}, deal);
if (template_mission) {
deal['template_mission_id'] = template_mission.id;
}
if (custom_field_ids) {
deal['custom_field_ids'] = Array.isArray(custom_field_ids) ? (0, _utilities.set_from_array)(custom_field_ids) : custom_field_ids;
}
return deal;
};
function remove_deal(state, id) {
return (0, _base.update_item)(state, "deals", { id: id, deleted_at: (0, _moment2.default)() });
}
function missions() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initial_state;
var action = arguments[1];
var events = void 0,
user_ids = void 0,
mission = void 0;
switch (action.type) {
case "store_missions":
return store_missions(state, action.missions);
case "update_mission":
return update_mission(state, action.mission);
case "update_missions":
return action.missions.reduce(update_mission, state);
case "store_mission_events":
return (0, _base.store_items)(state, "events", action.events);
case "replace_mission_events":
return (0, _base.store_items)((0, _base.filter_items)(state, "events", function (_ref3) {
var calenderable_id = _ref3.calenderable_id;
return calenderable_id != action.mission_id;
}), "events", action.events);
case "remove_mission":
return (0, _base.remove_item)(state, "missions", action.mission_id);
case "update_mission_event":
events = (0, _extends8.default)({}, state.events);
delete events[action.temp_id];
return (0, _extends8.default)({}, state, {
events: (0, _extends8.default)({}, events, (0, _defineProperty3.default)({}, action.mission_event.id, action.mission_event))
});
case "send_mission":
return update_users_status(state, action.mission_id, action.user_ids, "new");
case "assign_mission":
return update_users_status(state, action.mission_id, action.user_ids, "assigned");
case "unassign_mission":
return update_users_status(state, action.mission_id, action.user_ids, "accepted");
case "store_workplaces":
return (0, _base.store_items)(state, "workplaces", action.workplaces);
case "update_workplace":
return (0, _base.update_item)(state, "workplaces", action.workplace);
case "update_workplaces":
return (0, _base.update_items)(state, "workplaces", action.workplaces);
case "store_recruiters":
return store_deals(state, action.recruiters.map((0, _utilities.property_getter)('default_deal')));
case "store_deals":
case "update_deals":
return store_deals(state, action.deals);
case "update_deal":
return store_deals(state, [action.deal]);
case "remove_deal":
return remove_deal(state, action.deal_id);
case "remove_deals":
return action.deal_ids.reduce(function (state, deal_id) {
return remove_deal(state, deal_id);
}, state);
default:
return state;
}
}