Skip to content

useInvalidRedirection

Este composable te permite establecer que paginas estan prohibidas a redireccionar al accionar un formulario

  • Pasas por argumento un array de strings con los nombres de las paginas a las que no quieres que redirija.
import { useRouter } from 'vue-router'
import pages from '@/config/i18n'
// Hook personalizado que guarda una redirección válida en localStorage, o una por defecto ('/')
// si se detecta que la redirección previa no es válida según ciertas claves de página.
export function useInvalidRedirection(keys: string[]) {
// Genera una lista de rutas consideradas inválidas a partir de las claves proporcionadas.
const invalidRedirections = keys
.flatMap((key) => {
// Busca la página correspondiente a la clave
const page = pages.pages?.[key]
if (!page) return [] // Si no existe, no se agregan rutas
// Devuelve el primer valor directamente (sin prefijo), y los demás con el subKey como prefijo.
return Object.entries(page).map(([subKey, value], index) =>
index === 0 ? value : `/${subKey}${value}`,
)
})
// Filtra para asegurarse de que solo se incluyan valores que sean cadenas válidas
.filter((route): route is string => Boolean(route))
// Obtiene el router para acceder al historial de navegación
const router = useRouter()
// Intenta obtener la ruta previa desde el estado del historial del navegador
const previousRoute = router?.options?.history?.state?.back?.toString()
// Recupera la redirección almacenada previamente en localStorage (si existe)
const storedRedirection = localStorage.getItem('redirection')
// Si existe una ruta previa
if (previousRoute) {
// Comprueba si esa ruta previa está dentro de las rutas consideradas inválidas
const isInvalid = invalidRedirections.some((route) => previousRoute.includes(route))
if (isInvalid) {
// Si la ruta es inválida y no hay redirección almacenada, se guarda '/' por defecto
if (!storedRedirection) localStorage.setItem('redirection', '/')
} else {
// Si la ruta es válida, se almacena como redirección válida
localStorage.setItem('redirection', previousRoute)
}
}
}
useInvalidRedirection(["registro", "iniciar-sesion"]);
//esto hara que no pueda redirigirse ahi y si lo intenta, te manda a home.