91 lines
2.2 KiB
TypeScript
91 lines
2.2 KiB
TypeScript
import { Injectable } from "@angular/core";
|
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export class BreadcrumbService { //todo maybe some memory management
|
|
|
|
private paramToStringDictionary: Record<string, string> = {};
|
|
private pathOverrideMap = new Map<string, string>();
|
|
|
|
private resolvedValues$ = new BehaviorSubject<Record<string, string>>({ ...this.paramToStringDictionary })
|
|
|
|
|
|
public addIdResolvedValue(param: string, value: string) {
|
|
if (!param) {
|
|
return;
|
|
}
|
|
if (this.paramToStringDictionary[param] === value) { // value already in dictionary
|
|
return;
|
|
}
|
|
|
|
this.paramToStringDictionary[param] = value;
|
|
|
|
this.resolvedValues$.next({ ...this.paramToStringDictionary })
|
|
}
|
|
|
|
|
|
public resolvedValues(): Observable<Record<string, string>> {
|
|
return this.resolvedValues$.asObservable();
|
|
}
|
|
|
|
public addPathOverride(pathOverride: PathOverride): void {
|
|
if (!pathOverride) {
|
|
return;
|
|
}
|
|
|
|
this.pathOverrideMap.set(pathOverride.target, pathOverride.redirectTo);
|
|
}
|
|
|
|
public getPathOverrideFor(pathString: string): string {
|
|
return this.pathOverrideMap.get(pathString);
|
|
}
|
|
|
|
public emptyPathOverrides(): void {
|
|
this.pathOverrideMap.clear();
|
|
}
|
|
|
|
|
|
|
|
|
|
public static readonly ROUTE_DATA_KEY: string = 'breadcrumb'; // TODO USE IT ELSEWHERE
|
|
|
|
// For the moment only to make data params typed
|
|
public static generateRouteDataConfiguration(params: BreadCrumbRouteData): Record<string, BreadCrumbRouteData> {
|
|
return {
|
|
[BreadcrumbService.ROUTE_DATA_KEY]: params
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
export interface BreadCrumbRouteData {
|
|
title?: string;
|
|
skipNavigation?: boolean;
|
|
hideNavigationItem?: boolean;
|
|
titleFactory?: (resolutions: BreadcrumbTitlePathResolutions) => { languageKey: string, translateParams?: Record<string, string> }
|
|
}
|
|
|
|
|
|
|
|
interface BreadcrumbTitlePathResolutions {
|
|
/**
|
|
* Resolved path params
|
|
*
|
|
* for example: somePath/:id => somepath/<guid>
|
|
*/
|
|
pathResolutions?: Record<string, string>;
|
|
/**
|
|
* Resolved values that we have registered into breadcrumb service
|
|
*
|
|
* for example: <guid \ languagkey variable> => John Doe
|
|
*/
|
|
valueResolutions?: Record<string, string>;
|
|
}
|
|
|
|
|
|
export interface PathOverride {
|
|
target: string;
|
|
redirectTo: string;
|
|
} |