Fixed URLs guards for calendar page

This commit is contained in:
Alexis
2024-05-06 16:56:29 +02:00
parent fe8966cd9a
commit 521b3530a3
8 changed files with 198 additions and 36 deletions

View File

@@ -1,20 +1,59 @@
<script lang="ts" setup>
import { storeToRefs } from 'pinia'
import { onMounted } from 'vue'
import { useCalendar } from '@/stores/CalendarStore'
import { useTitle } from '@vueuse/core'
import { titleTemplate } from './meta'
import { titleTemplate } from '@/utils/meta'
import Calendar from '@/components/calendar/Calendar.vue'
import Sidebar from '@/components/calendar/Sidebar.vue'
import CalendarSearch from '@/components/calendar/search/CalendarSearch.vue'
const { validateUrlParams } = useCalendar()
const { isAdvancedSearchOpen } = storeToRefs(useCalendar())
onMounted(() => validateUrlParams())
import { useRoute, useRouter } from 'vue-router'
import { isDigit, isInt, isSignedInt } from '@/utils/Regex'
import { onBeforeMount } from 'vue'
useTitle('Calendrier', titleTemplate)
const router = useRouter()
const route = useRoute()
const { defaultDate, selectedDate, jumpToDate } = useCalendar()
const { isAdvancedSearchOpen } = storeToRefs(useCalendar())
// Check whether all the params are good to go before rendering anything
onBeforeMount(() => {
let isInvalid: boolean = false
// If the user already has a selected date from session, jump to it
if (selectedDate) {
jumpToDate(selectedDate)
} else {
// Assign default values if no params exist in URL
if (!route.query.day || typeof route.query.day === 'object' || !isInt(route.query.day)) {
route.query.day = defaultDate.day.toString()
isInvalid = true
}
if (
!route.query.month ||
typeof route.query.month === 'object' ||
!isDigit(route.query.month)
) {
route.query.month = defaultDate.month.toString()
isInvalid = true
}
if (
!route.query.year ||
typeof route.query.year === 'object' ||
!isSignedInt(route.query.year)
) {
route.query.year = defaultDate.year.toString()
isInvalid = true
}
if (isInvalid) {
console.log('replaced')
router.replace({ query: route.query, replace: true })
}
}
})
</script>
<template>