UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

163 lines (137 loc) 6.29 kB
'use strict'; 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; } }