52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import {ref, type Ref} from 'vue'
|
|
import {isValidIso} from './dateFormat'
|
|
|
|
export function useCalendarView(viewMode: Ref<'days' | 'months'>) {
|
|
const today = new Date()
|
|
const currentMonth = ref(today.getMonth())
|
|
const currentYear = ref(today.getFullYear())
|
|
|
|
const goToPrev = () => {
|
|
if (viewMode.value === 'months') {
|
|
currentYear.value -= 1
|
|
return
|
|
}
|
|
if (currentMonth.value === 0) {
|
|
currentMonth.value = 11
|
|
currentYear.value -= 1
|
|
} else {
|
|
currentMonth.value -= 1
|
|
}
|
|
}
|
|
|
|
const goToNext = () => {
|
|
if (viewMode.value === 'months') {
|
|
currentYear.value += 1
|
|
return
|
|
}
|
|
if (currentMonth.value === 11) {
|
|
currentMonth.value = 0
|
|
currentYear.value += 1
|
|
} else {
|
|
currentMonth.value += 1
|
|
}
|
|
}
|
|
|
|
const selectMonth = (m: number) => {
|
|
currentMonth.value = m
|
|
}
|
|
|
|
const syncToIso = (iso: string | null) => {
|
|
if (iso && isValidIso(iso)) {
|
|
currentMonth.value = Number(iso.slice(5, 7)) - 1
|
|
currentYear.value = Number(iso.slice(0, 4))
|
|
} else {
|
|
const now = new Date()
|
|
currentMonth.value = now.getMonth()
|
|
currentYear.value = now.getFullYear()
|
|
}
|
|
}
|
|
|
|
return {currentMonth, currentYear, goToPrev, goToNext, selectMonth, syncToIso}
|
|
}
|