@rusinov/react-big-calendar
Version:
134 lines (103 loc) • 3.94 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
var _EventRowMixin = _interopRequireDefault(require("./EventRowMixin"));
var _eventLevels = require("./utils/eventLevels");
var _range = _interopRequireDefault(require("lodash/range"));
var isSegmentInSlot = function isSegmentInSlot(seg, slot) {
return seg.left <= slot && seg.right >= slot;
};
var eventsInSlot = function eventsInSlot(segments, slot) {
return segments.filter(function (seg) {
return isSegmentInSlot(seg, slot);
}).length;
};
var EventEndingRow =
/*#__PURE__*/
function (_React$Component) {
(0, _inheritsLoose2.default)(EventEndingRow, _React$Component);
function EventEndingRow() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = EventEndingRow.prototype;
_proto.render = function render() {
var _this$props = this.props,
segments = _this$props.segments,
slots = _this$props.slotMetrics.slots;
var rowSegments = (0, _eventLevels.eventLevels)(segments).levels[0];
var current = 1,
lastEnd = 1,
row = [];
while (current <= slots) {
var key = '_lvl_' + current;
var _ref = rowSegments.filter(function (seg) {
return isSegmentInSlot(seg, current);
})[0] || {},
event = _ref.event,
left = _ref.left,
right = _ref.right,
span = _ref.span; //eslint-disable-line
if (!event) {
current++;
continue;
}
var gap = Math.max(0, left - lastEnd);
if (this.canRenderSlotEvent(left, span)) {
var content = _EventRowMixin.default.renderEvent(this.props, event);
if (gap) {
row.push(_EventRowMixin.default.renderSpan(slots, gap, key + '_gap'));
}
row.push(_EventRowMixin.default.renderSpan(slots, span, key, content));
lastEnd = current = right + 1;
} else {
if (gap) {
row.push(_EventRowMixin.default.renderSpan(slots, gap, key + '_gap'));
}
row.push(_EventRowMixin.default.renderSpan(slots, 1, key, this.renderShowMore(segments, current)));
lastEnd = current = current + 1;
}
}
return _react.default.createElement("div", {
className: "rbc-row"
}, row);
};
_proto.canRenderSlotEvent = function canRenderSlotEvent(slot, span) {
var segments = this.props.segments;
return (0, _range.default)(slot, slot + span).every(function (s) {
var count = eventsInSlot(segments, s);
return count === 1;
});
};
_proto.renderShowMore = function renderShowMore(segments, slot) {
var _this = this;
var localizer = this.props.localizer;
var count = eventsInSlot(segments, slot);
return count ? _react.default.createElement("a", {
key: 'sm_' + slot,
href: "#",
className: 'rbc-show-more',
onClick: function onClick(e) {
return _this.showMore(slot, e);
}
}, localizer.messages.showMore(count)) : false;
};
_proto.showMore = function showMore(slot, e) {
e.preventDefault();
this.props.onShowMore(slot);
};
return EventEndingRow;
}(_react.default.Component);
EventEndingRow.propTypes = (0, _extends2.default)({
segments: _propTypes.default.array,
slots: _propTypes.default.number,
onShowMore: _propTypes.default.func
}, _EventRowMixin.default.propTypes);
EventEndingRow.defaultProps = (0, _extends2.default)({}, _EventRowMixin.default.defaultProps);
var _default = EventEndingRow;
exports.default = _default;
module.exports = exports["default"];
;