RSS Git Download  Clone
Raw Blame History 2kB 68 lines
import { Injectable, Inject } from '@angular/core';
import { Router } from '@angular/router';

/**
 * Centralized navigation service — replaces AngularJS UI-Router $state.go().
 *
 * Maps the old UI-Router state names to Angular Router paths:
 * - 'settings'              → /settings
 * - 'database.statistics'   → /database/statistics
 * - 'database.key'          → /database/key/:key
 *
 * Legacy 'main.*' names are supported for backward compatibility.
 */
@Injectable({ providedIn: 'root' })
export class NavigationService {

    constructor(@Inject(Router) private readonly router: Router) {}

    /**
     * Navigate using state name.
     */
    navigateTo(state: string, params?: any): void {
        switch (state) {
            case 'info':
                this.router.navigate(['/info']);
                break;
            case 'settings':
                this.router.navigate(['/settings']);
                break;
            case 'monitoring':
                this.router.navigate(['/monitoring']);
                break;
            case 'search':
                this.router.navigate(['/search']);
                break;
            case 'database.statistics':
            case 'main.statistics':
                this.router.navigate(['/database/statistics']);
                break;
            case 'database.key':
            case 'main.key':
                this.router.navigate(['/database/key', params?.key ?? '']);
                break;
            default:
                console.warn(`[NavigationService] Unknown state: ${state}`);
                this.router.navigate(['/settings']);
        }
    }

    /**
     * Get the current route URL.
     */
    get currentUrl(): string {
        return this.router.url;
    }

    /**
     * Get a route parameter (for key viewer).
     */
    getParam(name: string): string | null {
        const url = this.router.url;
        if (name === 'key' && url.startsWith('/database/key/')) {
            return decodeURIComponent(url.substring('/database/key/'.length));
        }
        return null;
    }
}