From c7972446ee91b87fbe16d579d70e0b3693a05abb Mon Sep 17 00:00:00 2001 From: Kamil Niemczycki Date: Fri, 24 Jun 2022 02:16:51 +0200 Subject: [PATCH] finish with week? #VC --- .../js/Shared/Widgets/VacationCalendar.vue | 96 ++++++++++++++----- 1 file changed, 70 insertions(+), 26 deletions(-) diff --git a/resources/js/Shared/Widgets/VacationCalendar.vue b/resources/js/Shared/Widgets/VacationCalendar.vue index bf4062f..f5e9e44 100644 --- a/resources/js/Shared/Widgets/VacationCalendar.vue +++ b/resources/js/Shared/Widgets/VacationCalendar.vue @@ -2,7 +2,7 @@

- {{ calendarState.monthName }} {{ calendarState.isActualYear ? undefined : calendar.currents.year }} + {{ calendarState.monthName }} {{ !calendarState.isActualYear ? calendar.currents.year : undefined }}

@@ -22,7 +22,7 @@ type="button" class="hidden border-t border-b border-gray-300 bg-white px-3.5 text-sm font-medium text-gray-700 hover:bg-gray-50 hover:text-gray-900 focus:relative md:block" :class="{ 'rounded-l-md border border-r-0': !calendarState.isPrevious, 'rounded-r-md border border-l-0': !calendarState.isNext }" - @click="resetCalendar" + @click="goToToday" > Dziƛ @@ -116,7 +116,10 @@
-
+
findViewMode(calendar.viewMode.value)), }, monthName: computed(() => months[calendar.currents.month - 1]?.name), - isActualYear: computed(() => calendar.currents.year !== selectedYear), - isPrevious: computed(() => calendar.currents.month !== 1), - isNext: computed(() => calendar.currents.month !== 12), + isActualYear: computed(() => calendar.currents.year === DateTime.now().year), + isPrevious: computed(() => calendarState.viewMode.isMonth ? calendar.currents.month !== 1 : calendar.currents.week > 0), + isNext: computed(() => calendarState.viewMode.isMonth ? calendar.currents.month !== 12 : calendar.currents.week < DateTime.fromObject({ year: selectedYear, month: 12, day: 31 }).weekNumber), }) const customCalendar = { generateCalendar() { const date = DateTime.fromObject({ year: calendar.currents.year, - month: calendar.currents.month, + month: calendarState.viewMode.isMonth ? calendar.currents.month : 1, + day: 1, }) days.value = this.generateCalendarData(date) }, @@ -195,8 +199,13 @@ const customCalendar = { return [] }, generateWeekData(start) { - let days = [] - const startWeek = start.plus({ week: calendar.currents.weekPosition }) + let days = [], startWeek + if (calendar.currents.month === 1 && calendar.currents.week === 0) + startWeek = DateTime.fromObject({ year: calendar.currents.year, month: 1, day: 1 }).startOf('week') + else if (calendarState.isActualYear) + startWeek = DateTime.fromObject({ weekNumber: calendar.currents.week }) + else + startWeek = start.plus({ week: calendar.currents.week }) const endWeek = startWeek.endOf('week') for (let day = startWeek; day < endWeek; day = day.plus({ day: 1 })) { days.push(this.prepareDay(day)) @@ -229,44 +238,79 @@ customCalendar.generateCalendar() function toLast() { if (calendar.viewMode.value === 'week') - addWeeks(-1) + minusWeek() else addMonths(-1) } function toNext() { if (calendar.viewMode.value === 'week') { - addWeeks() + addWeek() } else addMonths() } -function resetCalendar() { - calendar.currents.year = selectedYear - calendar.currents.month = selectedYear === currentDate.year ? currentDate.month : 1 - calendar.currents.weekPosition = 1 +function resetCalendar(config = {}) { + const currentMonth = isUndefined(config.month) ? currentDate.month : config.month + const currentWeek = isUndefined(config.week) ? currentDate.week : config.week + + calendar.currents.year = isUndefined(config.year) ? selectedYear : config.month + calendar.currents.month = calendarState.isActualYear || !isUndefined(config.year) ? currentMonth : 1 + calendar.currents.week = calendarState.isActualYear || !isUndefined(config.year) ? currentWeek : 1 } -function addWeeks(howMany = 1) { - const date = DateTime.fromObject({ +function isUndefined(value) { + return value === undefined +} + +function addWeek(minus = false) { + const howMany = minus ? -1: 1 + let nextMonth, date = DateTime.fromObject({ year: calendar.currents.year, - month: calendar.currents.month, + month: 1, + day: 1, }) - const nextMonth = date.plus({ week: calendar.currents.weekPosition }).month - if (calendarState.viewMode.isWeek && nextMonth !== calendar.currents.month) { - calendar.currents.month = nextMonth - calendar.currents.weekPosition = 0 + + date = date.plus({ week: calendar.currents.week + howMany }) + + const startWeekDay = date.startOf('week'), endWeekDay = date.endOf('week') + nextMonth = howMany > 0 ? startWeekDay.month : endWeekDay.month + if (howMany < 0 && endWeekDay.day === endWeekDay.daysInMonth) { + console.log('pre', endWeekDay.day, endWeekDay.daysInMonth) + calendar.currents.week-- + } else if (howMany > 0 && startWeekDay.day === 1) { + console.log('next', endWeekDay.day, endWeekDay.daysInMonth) + calendar.currents.week++ + } else { + console.log('else', endWeekDay.day, endWeekDay.daysInMonth) + } + + if (nextMonth !== calendar.currents.month) { + calendar.currents.month = calendar.currents.week > 1 ? nextMonth : 1 + if (calendar.currents.week === 1) + calendar.currents.week = 0 return } - calendar.currents.weekPosition += howMany + calendar.currents.week += howMany +} + +function minusWeek() { + addWeek(true) } function addMonths(howMany = 1) { calendar.currents.month += howMany } +function goToToday() { + resetCalendar({ year: currentDate.year, months: currentDate.month, week: currentDate.week }) +} + function updateViewMode(type) { - resetCalendar() + if (type === 'month') + resetCalendar({ week: 1 }) + else + resetCalendar() calendar.viewMode.value = type }