Files
webMontime/src/utils/auth-redirect.ts
T
2026-06-14 17:28:19 +03:30

43 lines
1.2 KiB
TypeScript

import type { LocationQuery } from 'vue-router';
export function sanitizeRedirectPath(value: unknown): string | null {
if (typeof value !== 'string' || !value.startsWith('/') || value.startsWith('//')) {
return null;
}
return value;
}
export function redirectFromQuery(query: LocationQuery, fallback = '/app'): string {
return sanitizeRedirectPath(query.redirect) ?? fallback;
}
export function loginRouteWithRedirect(redirectPath: string) {
return {
name: 'login' as const,
query: { redirect: redirectPath },
};
}
export function businessBookingPath(businessId: string, hash?: string) {
const normalizedHash = hash?.replace(/^#/, '');
const base = `/app/businesses/${businessId}`;
return normalizedHash ? `${base}#${normalizedHash}` : base;
}
export function bookingDestination(
businessId: string,
isLoggedIn: boolean,
hash?: string,
) {
if (!isLoggedIn) {
return loginRouteWithRedirect(businessBookingPath(businessId, hash));
}
const normalizedHash = hash?.replace(/^#/, '');
return {
name: 'app-business-detail' as const,
params: { id: businessId },
...(normalizedHash ? { hash: normalizedHash } : {}),
};
}