UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

149 lines (115 loc) 6 kB
'use strict'; 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 })); }