UNPKG

@maxlkatze/cms

Version:

A git based Nuxt Module CMS - zero effort, zero cost

67 lines (66 loc) 1.97 kB
import { ref } from "vue"; import { useRouter } from "vue-router"; export const useRouteFinder = () => { const router = useRouter(); const routes = ref([]); const isLoading = ref(false); const loadRoutes = () => { try { const routerRoutes = router.options.routes; const filteredRouterRoutes = routerRoutes.filter((route) => { const routeName = route.name?.toString() || ""; return !routeName.startsWith("katze-cms"); }); routes.value = filteredRouterRoutes.map((route) => ({ name: route.name?.toString() || route.path, path: route.path, slug: route.path.split("/").filter(Boolean).pop() || (route.name?.toString() || "").toLowerCase(), component: route.component })); } catch (err) { console.error("Failed to load routes:", err); } finally { isLoading.value = false; } return routes.value; }; const findRouteBySlug = (slug) => { if (routes.value.length === 0) { loadRoutes(); } return routes.value.find((route) => route.slug === slug); }; const findRouteByPath = (path) => { if (routes.value.length === 0) { loadRoutes(); } return routes.value.find((route) => route.path === path); }; const getRoute = (pathOrSlug) => { if (routes.value.length === 0) { loadRoutes(); } let route = routes.value.find((route2) => route2.path === pathOrSlug); if (!route) { route = routes.value.find((route2) => route2.slug === pathOrSlug); } return route; }; const searchRoutes = (query) => { if (!query) return routes.value; const searchQuery = query.toLowerCase(); return routes.value.filter( (route) => route.name.toLowerCase().includes(searchQuery) || route.path.toLowerCase().includes(searchQuery) ); }; loadRoutes(); return { routes, isLoading, loadRoutes, findRouteBySlug, findRouteByPath, getRoute, searchRoutes }; };