You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DateSlotMetrics.js 2.7 KiB

3 jaren geleden
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  4. exports.__esModule = true;
  5. exports.getSlotMetrics = getSlotMetrics;
  6. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  7. var _memoizeOne = _interopRequireDefault(require("memoize-one"));
  8. var dates = _interopRequireWildcard(require("./dates"));
  9. var _eventLevels2 = require("./eventLevels");
  10. var isSegmentInSlot = function isSegmentInSlot(seg, slot) {
  11. return seg.left <= slot && seg.right >= slot;
  12. };
  13. var isEqual = function isEqual(a, b) {
  14. return a.range === b.range && a.events === b.events;
  15. };
  16. function getSlotMetrics() {
  17. return (0, _memoizeOne.default)(function (options) {
  18. var range = options.range,
  19. events = options.events,
  20. maxRows = options.maxRows,
  21. minRows = options.minRows,
  22. accessors = options.accessors;
  23. var _endOfRange = (0, _eventLevels2.endOfRange)(range),
  24. first = _endOfRange.first,
  25. last = _endOfRange.last;
  26. var segments = events.map(function (evt) {
  27. return (0, _eventLevels2.eventSegments)(evt, range, accessors);
  28. });
  29. var _eventLevels = (0, _eventLevels2.eventLevels)(segments, Math.max(maxRows - 1, 1)),
  30. levels = _eventLevels.levels,
  31. extra = _eventLevels.extra;
  32. while (levels.length < minRows) {
  33. levels.push([]);
  34. }
  35. return {
  36. first: first,
  37. last: last,
  38. levels: levels,
  39. extra: extra,
  40. range: range,
  41. slots: range.length,
  42. clone: function clone(args) {
  43. var metrics = getSlotMetrics();
  44. return metrics((0, _extends2.default)({}, options, args));
  45. },
  46. getDateForSlot: function getDateForSlot(slotNumber) {
  47. return range[slotNumber];
  48. },
  49. getSlotForDate: function getSlotForDate(date) {
  50. return range.find(function (r) {
  51. return dates.eq(r, date, 'day');
  52. });
  53. },
  54. getEventsForSlot: function getEventsForSlot(slot) {
  55. return segments.filter(function (seg) {
  56. return isSegmentInSlot(seg, slot);
  57. }).map(function (seg) {
  58. return seg.event;
  59. });
  60. },
  61. continuesPrior: function continuesPrior(event) {
  62. return dates.lt(accessors.start(event), first, 'day');
  63. },
  64. continuesAfter: function continuesAfter(event) {
  65. var eventEnd = accessors.end(event);
  66. var singleDayDuration = dates.eq(accessors.start(event), eventEnd, 'minutes');
  67. return singleDayDuration ? dates.gte(eventEnd, last, 'minutes') : dates.gt(eventEnd, last, 'minutes');
  68. }
  69. };
  70. }, isEqual);
  71. }