UNPKG

tui-calendar-react

Version:
249 lines (210 loc) 7.26 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var PropTypes = _interopDefault(require('prop-types')); var day = _interopDefault(require('dayjs')); var BaseCalendar = _interopDefault(require('tui-calendar')); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } var EVENT_TYPES = ['beforeCreateSchedule', 'afterRenderSchedule', 'beforeUpdateSchedule', 'beforeDeleteSchedule', 'clickSchedule', 'clickDayname']; function getTimeTemplate(schedule, isAllDay) { var html = []; var start = day(schedule.start.toUTCString()); if (!isAllDay) { html.push('<strong>' + start.format('HH:mm') + '</strong> '); } if (schedule.isPrivate) { html.push('<span class="calendar-font-icon ic-lock-b"></span>'); html.push(' Private'); } else { if (schedule.isReadOnly) { html.push('<span class="calendar-font-icon ic-readonly-b"></span>'); } else if (schedule.recurrenceRule) { html.push('<span class="calendar-font-icon ic-repeat-b"></span>'); } else if (schedule.attendees.length > 0) { html.push('<span class="calendar-font-icon ic-user-b"></span>'); } else if (schedule.location) { html.push('<span class="calendar-font-icon ic-location-b"></span>'); } html.push(' ' + schedule.title); } return html.join(''); } var TuiCalendar = /*#__PURE__*/ function (_PureComponent) { _inherits(TuiCalendar, _PureComponent); function TuiCalendar() { var _getPrototypeOf2; var _this; _classCallCheck(this, TuiCalendar); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(TuiCalendar)).call.apply(_getPrototypeOf2, [this].concat(args))); _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "calRef", React.createRef()); return _this; } _createClass(TuiCalendar, [{ key: "componentDidMount", value: function componentDidMount() { this.calendar = new BaseCalendar(this.calRef.current, Object.assign({ defaultView: 'month', taskView: true, useCreationPopup: true, useDetailPopup: true, timezones: [{ timezoneOffset: 420, displayLabel: 'GMT+08:00', tooltip: 'Hong Kong' }], template: { monthGridHeader: function monthGridHeader(model) { var date = new Date(model.date); var template = '<span class="tui-full-calendar-weekday-grid-date">' + date.getDate() + '</span>'; return template; }, milestone: function milestone(model) { return '<span class="calendar-font-icon ic-milestone-b"></span> <span style="background-color: ' + model.bgColor + '">' + model.title + '</span>'; }, allday: function allday(schedule) { return getTimeTemplate(schedule, true); }, time: function time(schedule) { return getTimeTemplate(schedule, false); } } }, this.props.options)); this.registerEvents(); this.renderCal(); } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this2 = this; // Unbind and rebind changed event listeners EVENT_TYPES.map(function (event) { if (_this2.props[event] !== prevProps[event]) { _this2.calendar.off(event); _this2.calendar.on(event, _this2.props[event]); } }); this.renderCal(); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.calendar.destroy(); } }, { key: "registerEvents", value: function registerEvents() { var _this3 = this; this.calendar.on(EVENT_TYPES.reduce(function (handlers, event) { return Object.assign({}, handlers, _defineProperty({}, event, _this3.props[event])); }, {})); } }, { key: "renderCal", value: function renderCal() { this.calendar.clear(); this.calendar.createSchedules(this.props.schedules); this.calendar.render(); } // fireMethod(method, ...args) { // return this.calendar[method](...args) // } }, { key: "render", value: function render() { return React__default.createElement("div", { ref: this.calRef, style: { height: 800 } }); } }]); return TuiCalendar; }(React.PureComponent); TuiCalendar.defaultProps = Object.assign({ schedules: [], options: {} }, EVENT_TYPES.reduce(function (acc, event) { return Object.assign({}, acc, _defineProperty({}, event, function () {})); }, {})); TuiCalendar.propTypes = Object.assign({ schedules: PropTypes.array, options: PropTypes.object }, EVENT_TYPES.reduce(function (acc, event) { return Object.assign({}, acc, _defineProperty({}, event, PropTypes.func)); }, {})); module.exports = TuiCalendar;