UNPKG

@rusinov/react-big-calendar

Version:
261 lines (215 loc) 8.88 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _class = _interopRequireDefault(require("dom-helpers/class")); var _width = _interopRequireDefault(require("dom-helpers/query/width")); var _scrollbarSize = _interopRequireDefault(require("dom-helpers/util/scrollbarSize")); var _dates = _interopRequireDefault(require("./utils/dates")); var _constants = require("./utils/constants"); var _eventLevels = require("./utils/eventLevels"); var _selection = require("./utils/selection"); var Agenda = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(Agenda, _React$Component); function Agenda() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; _this.renderDay = function (day, events, dayKey) { var _this$props = _this.props, selected = _this$props.selected, getters = _this$props.getters, accessors = _this$props.accessors, localizer = _this$props.localizer, _this$props$component = _this$props.components, Event = _this$props$component.event, AgendaDate = _this$props$component.date; events = events.filter(function (e) { return (0, _eventLevels.inRange)(e, _dates.default.startOf(day, 'day'), _dates.default.endOf(day, 'day'), accessors); }); return events.map(function (event, idx) { var title = accessors.title(event); var end = accessors.end(event); var start = accessors.start(event); var userProps = getters.eventProp(event, start, end, (0, _selection.isSelected)(event, selected)); var dateLabel = idx === 0 && localizer.format(day, 'agendaDateFormat'); var first = idx === 0 ? _react.default.createElement("td", { rowSpan: events.length, className: "rbc-agenda-date-cell" }, AgendaDate ? _react.default.createElement(AgendaDate, { day: day, label: dateLabel }) : dateLabel) : false; return _react.default.createElement("tr", { key: dayKey + '_' + idx, className: userProps.className, style: userProps.style }, first, _react.default.createElement("td", { className: "rbc-agenda-time-cell" }, _this.timeRangeLabel(day, event)), _react.default.createElement("td", { className: "rbc-agenda-event-cell" }, Event ? _react.default.createElement(Event, { event: event, title: title }) : title)); }, []); }; _this.timeRangeLabel = function (day, event) { var _this$props2 = _this.props, accessors = _this$props2.accessors, localizer = _this$props2.localizer, components = _this$props2.components; var labelClass = '', TimeComponent = components.time, label = localizer.messages.allDay; var end = accessors.end(event); var start = accessors.start(event); if (!accessors.allDay(event)) { if (_dates.default.eq(start, end, 'day')) { label = localizer.format({ start: start, end: end }, 'agendaTimeRangeFormat'); } else if (_dates.default.eq(day, start, 'day')) { label = localizer.format(start, 'agendaTimeFormat'); } else if (_dates.default.eq(day, end, 'day')) { label = localizer.format(end, 'agendaTimeFormat'); } } if (_dates.default.gt(day, start, 'day')) labelClass = 'rbc-continues-prior'; if (_dates.default.lt(day, end, 'day')) labelClass += ' rbc-continues-after'; return _react.default.createElement("span", { className: labelClass.trim() }, TimeComponent ? _react.default.createElement(TimeComponent, { event: event, day: day, label: label }) : label); }; _this._adjustHeader = function () { if (!_this.refs.tbody) return; var header = _this.refs.header; var firstRow = _this.refs.tbody.firstChild; if (!firstRow) return; var isOverflowing = _this.refs.content.scrollHeight > _this.refs.content.clientHeight; var widths = _this._widths || []; _this._widths = [(0, _width.default)(firstRow.children[0]), (0, _width.default)(firstRow.children[1])]; if (widths[0] !== _this._widths[0] || widths[1] !== _this._widths[1]) { _this.refs.dateCol.style.width = _this._widths[0] + 'px'; _this.refs.timeCol.style.width = _this._widths[1] + 'px'; } if (isOverflowing) { _class.default.addClass(header, 'rbc-header-overflowing'); header.style.marginRight = (0, _scrollbarSize.default)() + 'px'; } else { _class.default.removeClass(header, 'rbc-header-overflowing'); } }; return _this; } var _proto = Agenda.prototype; _proto.componentDidMount = function componentDidMount() { this._adjustHeader(); }; _proto.componentDidUpdate = function componentDidUpdate() { this._adjustHeader(); }; _proto.render = function render() { var _this2 = this; var _this$props3 = this.props, length = _this$props3.length, date = _this$props3.date, events = _this$props3.events, accessors = _this$props3.accessors, localizer = _this$props3.localizer; var messages = localizer.messages; var end = _dates.default.add(date, length, 'day'); var range = _dates.default.range(date, end, 'day'); events = events.filter(function (event) { return (0, _eventLevels.inRange)(event, date, end, accessors); }); events.sort(function (a, b) { return +accessors.start(a) - +accessors.start(b); }); return _react.default.createElement("div", { className: "rbc-agenda-view" }, events.length !== 0 ? _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("table", { ref: "header", className: "rbc-agenda-table" }, _react.default.createElement("thead", null, _react.default.createElement("tr", null, _react.default.createElement("th", { className: "rbc-header", ref: "dateCol" }, messages.date), _react.default.createElement("th", { className: "rbc-header", ref: "timeCol" }, messages.time), _react.default.createElement("th", { className: "rbc-header" }, messages.event)))), _react.default.createElement("div", { className: "rbc-agenda-content", ref: "content" }, _react.default.createElement("table", { className: "rbc-agenda-table" }, _react.default.createElement("tbody", { ref: "tbody" }, range.map(function (day, idx) { return _this2.renderDay(day, events, idx); }))))) : _react.default.createElement("span", { className: "rbc-agenda-empty" }, messages.noEventsInRange)); }; return Agenda; }(_react.default.Component); Agenda.propTypes = { events: _propTypes.default.array, date: _propTypes.default.instanceOf(Date), length: _propTypes.default.number.isRequired, selected: _propTypes.default.object, accessors: _propTypes.default.object.isRequired, components: _propTypes.default.object.isRequired, getters: _propTypes.default.object.isRequired, localizer: _propTypes.default.object.isRequired }; Agenda.defaultProps = { length: 30 }; Agenda.range = function (start, _ref) { var _ref$length = _ref.length, length = _ref$length === void 0 ? Agenda.defaultProps.length : _ref$length; var end = _dates.default.add(start, length, 'day'); return { start: start, end: end }; }; Agenda.navigate = function (date, action, _ref2) { var _ref2$length = _ref2.length, length = _ref2$length === void 0 ? Agenda.defaultProps.length : _ref2$length; switch (action) { case _constants.navigate.PREVIOUS: return _dates.default.add(date, -length, 'day'); case _constants.navigate.NEXT: return _dates.default.add(date, length, 'day'); default: return date; } }; Agenda.title = function (start, _ref3) { var _ref3$length = _ref3.length, length = _ref3$length === void 0 ? Agenda.defaultProps.length : _ref3$length, localizer = _ref3.localizer; var end = _dates.default.add(start, length, 'day'); return localizer.format({ start: start, end: end }, 'agendaHeaderFormat'); }; var _default = Agenda; exports.default = _default; module.exports = exports["default"];