Files
webMontime/src/composables/useLandingNav.ts
T
2026-06-12 20:16:14 +03:30

60 lines
1.8 KiB
TypeScript

import { computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useAuthStore } from '@/stores/auth';
import { loginRouteWithRedirect } from '@/utils/auth-redirect';
export type LandingNavItem = {
key: string;
label: string;
hash?: string;
path?: string;
requiresAuth?: boolean;
};
export function useLandingNav() {
const auth = useAuthStore();
const route = useRoute();
const router = useRouter();
const items: LandingNavItem[] = [
{ key: 'home', label: 'خانه', path: '/app' },
{ key: 'services', label: 'خدمات', hash: '#services' },
{ key: 'bookings', label: 'رزروها', path: '/app/bookings', requiresAuth: true },
{ key: 'club', label: 'باشگاه مشتریان', hash: '#club' },
{ key: 'about', label: 'درباره ما', hash: '#about' },
{ key: 'contact', label: 'تماس با ما', hash: '#contact' },
];
const navItems = computed(() => items);
function isActive(item: LandingNavItem): boolean {
if (item.path === '/app' && !item.hash) {
return route.path === '/app' && !route.hash;
}
if (item.hash) {
return route.path === '/app' && route.hash === item.hash;
}
return route.path === item.path;
}
function goTo(item: LandingNavItem) {
if (item.requiresAuth && !auth.isLoggedIn) {
void router.push(loginRouteWithRedirect(item.path ?? '/app/bookings'));
return;
}
if (item.path && item.hash) {
void router.push({ path: item.path, hash: item.hash.replace('#', '') });
return;
}
if (item.path) {
void router.push(item.path);
return;
}
if (item.hash) {
void router.push({ path: '/app', hash: item.hash.replace('#', '') });
}
}
return { navItems, isActive, goTo, auth, route, router };
}