react-event-calendar
Version:
React JS component that will display supplied event data within a calendar view of a given month.
7 lines • 13.1 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["React"],t):"object"==typeof exports?exports.ReactEventCalender=t(require("react")):e.ReactEventCalender=t(e.React)}(this,function(e){return function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={exports:{},id:a,loaded:!1};return e[a].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}(),u=n(1),l=a(u),f=n(2),p=n(3),d=(a(p),n(4)),c=a(d),y=n(5),h=a(y),v=n(6),b=a(v),D=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n._eventTargets={},n.state={today:n.getToday()},n.calendar=new f.Calendar({siblingMonths:!0}),n.getCalendarDays=n.getCalendarDays.bind(n),n.getDaysWithEvents=n.getDaysWithEvents.bind(n),n.getEventMeta=n.getEventMeta.bind(n),n.getToday=n.getToday.bind(n),n}return s(t,e),i(t,[{key:"getToday",value:function(){var e=new Date;return{day:e.getDate(),month:e.getMonth(),year:e.getFullYear()}}},{key:"getCalendarDays",value:function(){var e=this;return this.calendar.getCalendar(this.props.year,this.props.month).map(function(t){return t.eventSlots=Array(e.props.maxEventSlots).fill(!1),t})}},{key:"getEventMeta",value:function(e,t,n){var a=this.calendar.isDateSelected(t),r=this.calendar.isDateSelected(n),o=e[0],s=e[e.length-1],i={isVisibleInView:!1,visibleEventLength:e.length,firstVisibleDayIndex:a?f.Calendar.interval(o,t)-1:0};return a||r?i.isVisibleInView=!0:t.month<this.props.month&&n.month>this.props.month&&(i.isVisibleInView=!0),a&&r?i.visibleEventLength=f.Calendar.interval(t,n):!a&&r?i.visibleEventLength=f.Calendar.interval(o,n):a&&!r&&(i.visibleEventLength=f.Calendar.interval(t,s)),i}},{key:"getDaysWithEvents",value:function(){var e=this,t=this.getCalendarDays();return this.calendar.setStartDate(t[0]),this.calendar.setEndDate(t[t.length-1]),this.props.events.forEach(function(n){var a=e.getCalendarDayObject(n.start),r=e.getCalendarDayObject(n.end),o=e.getEventMeta(t,a,r);if(o.isVisibleInView)for(var s=o.visibleEventLength,i=t[o.firstVisibleDayIndex].eventSlots.indexOf(!1),u=0;s>u;){var l=Object.assign({},n);0===u&&(l.isFirstDay=!0),u===s-1&&(l.isLastDay=!0),l.isFirstDay&&l.isLastDay||(l.isBetweenDay=!0),t[o.firstVisibleDayIndex+u].eventSlots[i]=l,u++}}),t}},{key:"getCalendarDayObject",value:function(e){var t=e.split("-");return{year:t[0],month:t[1]-1,day:t[2]}}},{key:"getLastIndexOfEvent",value:function(e){var t=e.map(function(e,t){return e!==!1?t:!1}).filter(function(e){return e}).pop();return 3>t||void 0===t?2:t}},{key:"getSerializedDay",value:function(e){return[e.weekDay,e.day,e.month,e.year].join("")}},{key:"renderDaysOfTheWeek",value:function(){return this.props.daysOfTheWeek.map(function(e,t){return l["default"].createElement(b["default"],{key:"title_"+t,title:e})})}},{key:"renderEvents",value:function(e){var t=this,n=e.eventSlots.slice(0,this.getLastIndexOfEvent(e.eventSlots)+1);return n.map(function(n,a){return l["default"].createElement(h["default"],{key:"event_"+a+t.getSerializedDay(e),day:e,eventData:n,onClick:t.props.onEventClick,onMouseOut:t.props.onEventMouseOut,onMouseOver:t.props.onEventMouseOver,wrapTitle:t.props.wrapTitle})})}},{key:"renderCalendarDays",value:function(){var e=this;return this.getDaysWithEvents().map(function(t,n){var a=1===f.Calendar.interval(t,e.state.today),r=e.renderEvents(t);return l["default"].createElement(c["default"],{key:"day_"+e.getSerializedDay(t),day:t,events:r,isToday:a,onClick:e.props.onDayClick})})}},{key:"render",value:function(){return l["default"].createElement("div",{className:"flexContainer"},this.renderDaysOfTheWeek(),this.renderCalendarDays())}}]),t}(l["default"].Component);D.propTypes={daysOfTheWeek:l["default"].PropTypes.array,events:l["default"].PropTypes.array,maxEventSlots:l["default"].PropTypes.number,month:l["default"].PropTypes.number.isRequired,onEventClick:l["default"].PropTypes.func,onEventMouseOut:l["default"].PropTypes.func,onEventMouseOver:l["default"].PropTypes.func,onDayClick:l["default"].PropTypes.func,wrapTitle:l["default"].PropTypes.bool,year:l["default"].PropTypes.number.isRequired},D.defaultProps={daysOfTheWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],events:[],wrapTitle:!0,maxEventSlots:10},t["default"]=D},function(t,n){t.exports=e},function(e,t){function n(e){e=e||{},this.startDate=e.startDate,this.endDate=e.endDate,this.siblingMonths=e.siblingMonths,this.weekNumbers=e.weekNumbers,this.weekStart=e.weekStart,void 0===this.weekStart&&(this.weekStart=0),this.date=new Date(1986,9,14,0,0,0)}n.prototype.getCalendar=function(e,t){this.date.setUTCFullYear(e),this.date.setUTCMonth(t),this.date.setUTCDate(1),e=this.date.getUTCFullYear(),t=this.date.getUTCMonth();for(var a,r,o,s,i,u=[],l=this.date.getUTCDay(),f=-((7-this.weekStart+l)%7),p=n.daysInMonth(e,t),d=(p-f)%7,c=n.daysInMonth(e,t-1),y=f,h=p-y+(0!=d?7-d:0)+f,v=null;h>y;)r=y+1,a=((1>y?7+y:y)+l)%7,1>r||r>p?this.siblingMonths?(1>r?(s=t-1,i=e,0>s&&(s=11,i--),r=c+r):r>p&&(s=t+1,i=e,s>11&&(s=0,i++),r=y-p+1),o={day:r,weekDay:a,month:s,year:i,siblingMonth:!0}):o=!1:o={day:r,weekDay:a,month:t,year:e},o&&this.weekNumbers&&(null===v?v=n.calculateWeekNumber(o):1==a&&52==v?v=1:1==a&&v++,o.weekNumber=v),o&&this.startDate&&(o.selected=this.isDateSelected(o)),u.push(o),y++;return u},n.prototype.isDateSelected=function(e){return e.year==this.startDate.year&&e.month==this.startDate.month&&e.day==this.startDate.day?!0:this.endDate?e.year==this.startDate.year&&e.month==this.startDate.month&&e.day<this.startDate.day?!1:e.year==this.endDate.year&&e.month==this.endDate.month&&e.day>this.endDate.day?!1:e.year==this.startDate.year&&e.month<this.startDate.month?!1:e.year==this.endDate.year&&e.month>this.endDate.month?!1:e.year<this.startDate.year?!1:!(e.year>this.endDate.year):!1},n.prototype.setStartDate=function(e){this.startDate=e},n.prototype.setEndDate=function(e){this.endDate=e},n.prototype.setDate=n.prototype.setStartDate,n.diff=function(e,t){var n=new Date(1986,9,14,0,0,0),a=new Date(1986,9,14,0,0,0);return n.setUTCFullYear(e.year),n.setUTCMonth(e.month),n.setUTCDate(e.day),a.setUTCFullYear(t.year),a.setUTCMonth(t.month),a.setUTCDate(t.day),Math.ceil((n.getTime()-a.getTime())/864e5)},n.interval=function(e,t){return Math.abs(n.diff(e,t))+1},n.daysInMonth=function(e,t){return new Date(e,t+1,0).getDate()},n.isLeapYear=function(e){return e%4==0&&e%100!=0||e%400==0},n.calculateWeekNumber=function(e){var t=new Date(1986,9,14,0,0,0);t.setUTCFullYear(e.year),t.setUTCMonth(e.month),t.setUTCDate(e.day);var n=new Date(t.valueOf()),a=(t.getUTCDay()+6)%7;n.setUTCDate(n.getUTCDate()-a+3);var r=n.valueOf();return n.setUTCMonth(0,1),4!=n.getUTCDay()&&n.setUTCMonth(0,1+(4-n.getUTCDay()+7)%7),1+Math.ceil((r-n)/6048e5)},e.exports={Calendar:n}},function(e,t,n){var a,r;/*!
Copyright (c) 2016 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
!function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var a=arguments[t];if(a){var r=typeof a;if("string"===r||"number"===r)e.push(a);else if(Array.isArray(a))e.push(n.apply(null,a));else if("object"===r)for(var s in a)o.call(a,s)&&a[s]&&e.push(s)}}return e.join(" ")}var o={}.hasOwnProperty;"undefined"!=typeof e&&e.exports?e.exports=n:(a=[],r=function(){return n}.apply(t,a),!(void 0!==r&&(e.exports=r)))}()},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}(),u=n(1),l=a(u),f=n(3),p=a(f),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this.props,t=e.day,n=e.isToday,a=e.events,r=e.onClick,o=(0,p["default"])({flexColumn:!0,day:!0,inactive:t.siblingMonth,today:n});return l["default"].createElement("div",{onClick:r.bind(null,this,t),className:o},l["default"].createElement("div",{className:"inner-grid"},l["default"].createElement("div",{className:"date"},t.day),a))}}]),t}(l["default"].Component);t["default"]=d,d.propTypes={day:l["default"].PropTypes.object.isRequired,isToday:l["default"].PropTypes.bool,events:l["default"].PropTypes.array,onClick:l["default"].PropTypes.func},d.defaultProps={onClick:function(){}},t["default"]=d},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}(),l=n(1),f=a(l),p=n(3),d=a(p),c=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.sharedArguments=[null,n,n.props.eventData,n.props.day],n.handleClick=n.handleClick.bind(n),n}return i(t,e),u(t,[{key:"handleClick",value:function(e){var t;(t=this.props).onClick.apply(t,r(this.sharedArguments.slice(1))),e.stopPropagation()}},{key:"render",value:function(){var e,t;if(!this.props.eventData)return f["default"].createElement("div",{className:"event-slot"});var n=this.props.eventData.isFirstDay||0===this.props.day.weekDay&&this.props.wrapTitle,a=n?this.props.eventData.title:"",o=(0,d["default"])({"event-slot":!0,event:!0,"event-first-day":this.props.eventData.isFirstDay,"event-last-day":this.props.eventData.isLastDay,"event-has-label":n},this.props.eventData.eventClasses);return f["default"].createElement("div",{className:o,onClick:this.handleClick,onMouseOut:(e=this.props.onMouseOut).bind.apply(e,r(this.sharedArguments)),onMouseOver:(t=this.props.onMouseOver).bind.apply(t,r(this.sharedArguments))},f["default"].createElement("div",{className:"event-title"},a))}}]),t}(f["default"].Component);c.propTypes={day:f["default"].PropTypes.object.isRequired,eventData:f["default"].PropTypes.oneOfType([f["default"].PropTypes.object,f["default"].PropTypes.bool]),onClick:f["default"].PropTypes.func,onMouseOut:f["default"].PropTypes.func,onMouseOver:f["default"].PropTypes.func,wrapTitle:f["default"].PropTypes.bool},c.defaultProps={onClick:function(){},onMouseOut:function(){},onMouseOver:function(){}},t["default"]=c},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=a(r),s=function(e){var t=e.title;return o["default"].createElement("div",{className:"flexColumn"},t)};s.propTypes={title:o["default"].PropTypes.string.isRequired},t["default"]=s}])});
//# sourceMappingURL=react-event-calendar.min.js.map