28705c8285
Release / release (push) Successful in 1m18s
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [ ] Pas de régression - [ ] TU/TI/TF rédigée - [ ] TU/TI/TF OK - [ ] CHANGELOG modifié --------- Co-authored-by: admin malio <malio@yuno.malio.fr> Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr> Co-authored-by: matthieu <matthieu@yuno.malio.fr> Reviewed-on: #84 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import {ref, watch, type Ref} from 'vue'
|
||
import {isValidIso} from './dateFormat'
|
||
|
||
export function useCalendarView(viewMode: Ref<'days' | 'months' | 'years'>) {
|
||
const today = new Date()
|
||
const currentMonth = ref(today.getMonth())
|
||
const currentYear = ref(today.getFullYear())
|
||
// Fenêtre de 12 ans calée pour que l'année courante tombe en 2e ligne / 2e
|
||
// colonne d'une grille 3 colonnes (index 4) → début = année courante − 4.
|
||
const yearPageStart = ref(today.getFullYear() - 4)
|
||
|
||
watch(viewMode, (mode) => {
|
||
if (mode === 'years') yearPageStart.value = currentYear.value - 4
|
||
})
|
||
|
||
const goToPrev = () => {
|
||
if (viewMode.value === 'years') {
|
||
yearPageStart.value -= 12
|
||
return
|
||
}
|
||
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 === 'years') {
|
||
yearPageStart.value += 12
|
||
return
|
||
}
|
||
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 selectYear = (y: number) => {
|
||
currentYear.value = y
|
||
}
|
||
|
||
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, yearPageStart, goToPrev, goToNext, selectMonth, selectYear, syncToIso}
|
||
}
|