instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
149 lines (115 loc) • 6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.make_slots = exports.make_periods = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
exports.event_intersects = event_intersects;
exports.event_intersects_or_consecutive = event_intersects_or_consecutive;
exports.intersecting_periods_interval = intersecting_periods_interval;
exports.events_difference = events_difference;
exports.action_agency_edit_user_events = action_agency_edit_user_events;
var _moment = require('common/moment');
var _moment2 = _interopRequireDefault(_moment);
var _utilities = require('common/utilities');
var _missions = require('common/missions');
var _store = require('common/store');
var _store2 = _interopRequireDefault(_store);
var _display = require('actions/display');
var _agency_edit_user_calendar = require('components/input_calendar/agency_edit_user_calendar');
var _agency_edit_user_calendar2 = _interopRequireDefault(_agency_edit_user_calendar);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function event_intersects(event, date, duration, unit) {
return (0, _moment2.default)(event.start).isBefore((0, _moment2.default)(date).add(duration, unit)) && (0, _moment2.default)(event.end).isAfter(date);
}
function event_intersects_or_consecutive(event1, event2, unit) {
return !((0, _moment2.default)(event1.end).add(1, unit).isSameOrBefore(event2.start, unit) || (0, _moment2.default)(event2.end).add(1, unit).isSameOrBefore(event1.start, unit));
}
var make_period_from_event = function make_period_from_event(e) {
return { is_period: true, start: (0, _moment2.default)(e.start), end: (0, _moment2.default)(e.end), events: [e], full_days: e.full_days };
};
function intersecting_periods_interval(periods, start, end) {
var lower = (0, _utilities.find_optimum_in_sorted_array)(periods, function (period) {
return period.end.isAfter(start);
}) + 1;
var upper = periods.length - 1 - (0, _utilities.find_optimum_in_sorted_array)(periods.reverse(), function (period) {
return period.start.isBefore(end);
});
periods.reverse();
return { lower: lower, upper: upper };
}
var make_periods = exports.make_periods = function make_periods(events) {
var events_array = (0, _utilities.array_from_hash)(events);
if (events_array.length == 0) {
return [];
} else {
return events_array.slice(1).reduce(function (periods, e) {
var extended_start = (0, _moment2.default)(e.start).subtract(1, "minute");
var extended_end = (0, _moment2.default)(e.end).add(1, "minute");
var _intersecting_periods = intersecting_periods_interval(periods, extended_start, extended_end),
lower = _intersecting_periods.lower,
upper = _intersecting_periods.upper;
var merging_periods = periods.slice(lower, upper);
return [].concat((0, _toConsumableArray3.default)(periods.slice(0, lower)), [{
is_period: true,
start: merging_periods.length == 0 || merging_periods[0].start.isAfter(e.start) ? (0, _moment2.default)(e.start) : merging_periods[0].start,
end: merging_periods.length == 0 || merging_periods.slice(-1)[0].end.isBefore(e.end) ? (0, _moment2.default)(e.end) : merging_periods.slice(-1)[0].end,
full_days: e.full_days && (0, _utilities.for_all)(merging_periods, function (period) {
return period.full_days;
}),
events: [].concat((0, _toConsumableArray3.default)((0, _utilities.flatten_array)(merging_periods.map(function (period) {
return period.events;
}))), [e])
}], (0, _toConsumableArray3.default)(periods.slice(upper)));
}, [make_period_from_event(events_array[0])]);
}
};
var make_slots = function make_slots(periods) {
return (0, _utilities.flatten_array)(periods.map(function (_ref) {
var start = _ref.start,
end = _ref.end,
period = (0, _objectWithoutProperties3.default)(_ref, ['start', 'end']);
var current = (0, _moment2.default)(start).add(1, 'day').startOf('day'),
previous = start;
var periods = [];
while (current.isBefore(end)) {
periods.push((0, _extends3.default)({ start: previous, end: current }, period));
previous = current;
current = (0, _moment2.default)(current).add(1, 'day');
}
periods.push((0, _extends3.default)({ start: previous, end: end }, period));
return periods;
}));
};
exports.make_slots = make_slots;
function event_is_included_in_periods(event, periods) {
var _intersecting_periods2 = intersecting_periods_interval(periods, event.start, event.end),
lower = _intersecting_periods2.lower,
upper = _intersecting_periods2.upper;
return lower == upper - 1 && periods[lower] && periods[lower].start.isSameOrBefore(event.start) && periods[lower].end.isSameOrAfter(event.end);
}
function events_difference(old_events, new_events) {
var new_periods = make_periods(new_events);
var _split_array = (0, _utilities.split_array)(old_events, function (event) {
if (event_is_included_in_periods(event, new_periods)) {
return "keep";
} else {
return "remove";
}
}),
remove = _split_array.remove,
keep = _split_array.keep;
var old_periods = make_periods(keep);
return { remove: remove, add: new_events.filter(function (event) {
return !event_is_included_in_periods(event, old_periods);
}) };
}
function action_agency_edit_user_events(_ref2) {
var user_id = _ref2.id;
_store2.default.dispatch((0, _display.show_popover)(_agency_edit_user_calendar2.default, { user_id: user_id }));
}