UNPKG

@daykeep/calendar-core

Version:

A full display calendar for multiple Vue.js frameworks

163 lines (160 loc) 4.74 kB
import DateTime from 'luxon/src/datetime' const debug = require('debug')('calendar:CalendarMonthInner') export default { data () { return { dayCellHeight: 5, dayCellHeightUnit: 'rem', workingDate: new Date(), weekArray: [], parsed: this.getDefaultParsed(), eventDetailEventObject: {}, eventClicked: false } }, computed: { calendarDaysAreClickable: function () { return (this.fullComponentRef && this.fullComponentRef.length > 0) } }, methods: { monthGetDateEvents: function (dateObject) { return this.dateGetEvents(dateObject) }, doUpdate: function () { this.mountSetDate() let payload = this.getWeekArrayDisplayDates(this.generateCalendarCellArray()) this.triggerDisplayChange( this.eventRef, payload ) }, getCalendarCellArray: function (monthNumber, yearNumber) { let currentDay = this.makeDT( DateTime.fromObject({ year: yearNumber, month: monthNumber, day: 1 }) ) let currentWeekOfYear = this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek) let weekArray = [] let currentWeekArray = [] let thisDayObject = {} for (let thisDateOfMonth = 1; thisDateOfMonth <= 31; thisDateOfMonth++) { currentDay = this.makeDT( DateTime.fromObject({ year: yearNumber, month: monthNumber, day: thisDateOfMonth }) ) if ( currentDay.year === yearNumber && currentDay.month === monthNumber ) { if ( this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek) !== currentWeekOfYear ) { weekArray.push(currentWeekArray) currentWeekOfYear = this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek) currentWeekArray = [] } thisDayObject = { dateObject: currentDay, year: currentDay.year, month: currentDay.month, date: currentDay.day, dayName: currentDay.toFormat('EEEE'), dayNumber: currentDay.weekday } currentWeekArray.push(thisDayObject) } } if (weekArray.length > 0) { weekArray.push(currentWeekArray) } return weekArray }, generateCalendarCellArray: function () { this.weekArray = this.getCalendarCellArray( this.makeDT(this.workingDate).month, this.makeDT(this.workingDate).year ) return this.weekArray }, handleNavMove: function (params) { this.moveTimePeriod(params) this.$emit( this.eventRef + ':navMovePeriod', // { // unitType: params.unitType, // amount: params.amount // } params ) let payload = this.getWeekArrayDisplayDates(this.generateCalendarCellArray()) payload['moveUnit'] = params.unitType payload['moveAmount'] = params.amount this.triggerDisplayChange( this.eventRef, payload ) }, getWeekArrayDisplayDates: function (weekArray) { // this takes a weekArray and figures out the values to send for a page display event let startDateObj = weekArray[0][0].dateObject const lastWeek = weekArray[weekArray.length - 1] let endDateObj = lastWeek[lastWeek.length - 1].dateObject return { startDate: startDateObj.toISODate(), endDate: endDateObj.toISODate(), numDays: Math.ceil(endDateObj.diff(startDateObj).as('days') + 1), viewType: this.$options.name } }, handleDayClick: function (dateObject) { // event item clicked; prevent "day" event if (this.eventClicked) { this.eventClicked = false return } if (this.fullComponentRef) { this.fullMoveToDay(dateObject) } this.handleNavMove({ absolute: dateObject }) this.triggerDayClick(dateObject, this.eventRef) }, handleCalendarEventClick: function () { this.eventClicked = true } }, mounted () { debug('Component mounted') this.doUpdate() this.handlePassedInEvents() this.$root.$on( this.eventRef + ':navMovePeriod', this.handleNavMove ) this.$root.$on( 'click-event-' + this.eventRef, this.handleEventDetailEvent ) this.$root.$on( 'update-event-' + this.eventRef, this.handleEventUpdate ) }, watch: { startDate: function () { this.handleStartChange() }, eventArray: function () { this.getPassedInEventArray() }, parsedEvents: function () { this.getPassedInParsedEvents() } } }