instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
164 lines (136 loc) • 5.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.get_proposal_shifts = undefined;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _base = require('selectors/base');
var _missions = require('selectors/missions');
var _fields = require('selectors/fields');
var _moment = require('common/moment');
var _moment2 = _interopRequireDefault(_moment);
var _utilities = require('common/utilities');
var _shifts = require('common/shifts');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var get_raw_shifts = function get_raw_shifts(state) {
return state.shifts.shifts;
};
var get_raw_shift_events = function get_raw_shift_events(state) {
return state.shifts.events;
};
var add_start_end = function add_start_end(_ref) {
var events = _ref.events,
shift = (0, _objectWithoutProperties3.default)(_ref, ['events']);
var min = void 0,
max = void 0;
events.forEach(function (_ref2) {
var start = _ref2.start,
end = _ref2.end;
if (!min || min.isAfter(start)) {
min = (0, _moment2.default)(start);
}
if (!max || max.isBefore(end)) {
max = (0, _moment2.default)(end);
}
});
return (0, _extends3.default)({}, shift, {
events: events,
start: min,
end: max,
update_events: function update_events(events) {
(0, _shifts.action_update_shift_events)(shift, events);
}
});
};
var get_events_by_shift = (0, _base.tolerant_selector)([get_raw_shift_events], function (events) {
return (0, _utilities.split_array)((0, _utilities.array_from_hash)(events).filter(function (_ref3) {
var deleted_at = _ref3.deleted_at;
return !deleted_at;
}), (0, _utilities.property_getter)('calenderable_id'));
});
var get_shifts = (0, _base.tolerant_selector)([get_raw_shifts, get_events_by_shift, _fields.get_fields_by_shift], function (shifts, events_by_shift, fields_by_shift) {
return (0, _utilities.map_hash)(shifts, function (shift) {
return add_start_end((0, _extends3.default)({}, shift, {
events: events_by_shift[shift.id] || [],
fields: (0, _utilities.array_from_hash)(fields_by_shift[shift.id]) || []
}));
});
});
var get_splitted_shifts = (0, _base.tolerant_selector)([get_shifts], function (shifts) {
return (0, _utilities.map_hash)((0, _utilities.split_array)((0, _utilities.array_from_hash)(shifts), (0, _utilities.property_getter)('proposal_id')), function (shifts) {
return (0, _utilities.split_array)(shifts, (0, _utilities.property_getter)('event_id'));
});
});
var get_proposal_shifts = (0, _utilities.make_memoized)(function (proposal_id, mission_id) {
return (0, _base.tolerant_selector)([_missions.get_mission_proposals, get_splitted_shifts, _fields.get_shifts_fields], function (missions, splitted_shifts, shifts_fields) {
var _ref4 = missions[mission_id] || {},
events = _ref4.events,
create_shift = _ref4.create_shift;
return (events || []).sort((0, _utilities.compare)(function (_ref5) {
var start = _ref5.start;
return (0, _moment2.default)(start).valueOf();
})).map(function (_ref6) {
var start = _ref6.start,
end = _ref6.end,
id = _ref6.id;
var _ref7 = (splitted_shifts[proposal_id] || {})[id] || [],
_ref8 = (0, _slicedToArray3.default)(_ref7, 1),
shift = _ref8[0];
var get_shift = function get_shift() {
return new _promise2.default(function (resolve, reject) {
if (shift) {
resolve(shift);
} else {
(0, _shifts.action_create_shift)(proposal_id, id).then(resolve, reject);
}
});
};
var fields = void 0;
if (shift) {
fields = shift.fields;
} else {
fields = shifts_fields.map(function (_ref9) {
var select_value = _ref9.select_value,
update_comment = _ref9.update_comment,
_fetch_value = _ref9.fetch_value,
field = (0, _objectWithoutProperties3.default)(_ref9, ['select_value', 'update_comment', 'fetch_value']);
return (0, _extends3.default)({}, field, {
on_select_value: function on_select_value(value_id) {
return get_shift().then(function (shift) {
return select_value(shift.id, value_id);
});
},
on_submit_comment: function on_submit_comment(comment) {
return get_shift().then(function (shift) {
return update_comment(shift.id, comment);
});
},
fetch_value: function fetch_value() {
return get_shift().then(function (shift) {
return _fetch_value(shift.id);
});
}
});
});
}
return (0, _extends3.default)({}, shift || {}, {
theoretic: { start: start, end: end },
real: shift,
fields: fields,
update_events: function update_events(events) {
get_shift().then(function (shift) {
return (0, _shifts.action_update_shift_events)(shift, events);
});
}
});
});
});
});
exports.get_proposal_shifts = get_proposal_shifts;