There still exists an issue with one Adobe led library ; @international-dates don't seem to compile their sourcemaps correctly. I don't think this is something I can fix however, and it may require hacks and workarounds to solve from what I've gathered
74 lines
1.6 KiB
Vue
74 lines
1.6 KiB
Vue
<script lang="ts" setup>
|
|
import type { LeimDate } from '@/models/Date'
|
|
import { useCalendar } from '@/stores/CalendarStore'
|
|
import { useThrottleFn } from '@vueuse/core'
|
|
|
|
import DayTile from './DayTile.vue'
|
|
|
|
const { staticConfig, currentDate, decrementMonth, incrementMonth } = useCalendar()
|
|
|
|
const daysPerMonth = staticConfig.daysPerMonth
|
|
|
|
function getNextMonthDate(day: number): LeimDate {
|
|
let nextDay = day
|
|
let nextMonth = currentDate.currentMonth + 1
|
|
let nextYear = currentDate.currentYear
|
|
let nextPeriod = currentDate.currentPeriod
|
|
|
|
// If the new value would exceed the max number of month per year
|
|
if (nextMonth >= staticConfig.monthsPerYear) {
|
|
nextMonth = 0
|
|
// Increment the year
|
|
nextYear++
|
|
}
|
|
|
|
if (nextYear >= 0) {
|
|
nextPeriod = 'nante'
|
|
}
|
|
|
|
return {
|
|
day: nextDay,
|
|
month: nextMonth,
|
|
year: nextYear,
|
|
period: nextPeriod
|
|
}
|
|
}
|
|
|
|
function handleWheel(e: WheelEvent) {
|
|
const isMovingUp = e.deltaY < 0
|
|
if (isMovingUp) {
|
|
moveCalendarLeft()
|
|
} else {
|
|
moveCalendarRight()
|
|
}
|
|
}
|
|
|
|
const moveCalendarLeft = useThrottleFn(() => {
|
|
decrementMonth()
|
|
}, 100)
|
|
|
|
const moveCalendarRight = useThrottleFn(() => {
|
|
incrementMonth()
|
|
}, 100)
|
|
</script>
|
|
|
|
<template>
|
|
<div class="grid grid-cols-10" @wheel="handleWheel">
|
|
<DayTile
|
|
v-for="day in daysPerMonth"
|
|
:key="day"
|
|
:date="{
|
|
day: day,
|
|
month: currentDate.currentMonth,
|
|
year: currentDate.currentYear
|
|
}"
|
|
/>
|
|
<DayTile
|
|
v-for="nextMonthDay in 8"
|
|
:key="nextMonthDay"
|
|
faded
|
|
:date="getNextMonthDate(nextMonthDay)"
|
|
/>
|
|
</div>
|
|
</template>
|