Last active
September 20, 2020 14:24
-
-
Save dmorosinotto/66fbcd573ce565d7e8ea6202af1fa1c4 to your computer and use it in GitHub Desktop.
RouterHelpers.ts - some utils function to extract information about Angular current route navigation (ActivatedRoute)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { ActivatedRoute, ActivatedRouteSnapshot, ParamMap} from "@angular/router"; | |
//SERIALIZE paramMap -> string THIS UTILS SORT KEYS TO ENSURE THAT THE OUTPUT string WILL BE COMPARABLE EVEN IF par ORDER CHANGE | |
//A SIMPLIFIED VERSION CAN return JSON.stringify(params) BUT THE SERIALIZE ORDER OF KEYS -> JSON IS NOT PREDICTABLE / COMPARABLE | |
export function paramMapToString(params: ParamMap, sep: string="\n"): string { | |
if (!params) return ""; | |
const sortedKeys = params.keys.sort(); | |
return sortedKeys.map( key => { | |
let val = params.getAll(key); | |
if (!val || !val.length) return ""; | |
return `${key}=${val}`; | |
}).join(sep); | |
} | |
//EXTRACT FULL URL PATH TO THE CURRENT route (ActivatedRoute / ActivatedRouteSnapshot) | |
export const routeFullUrl = (route: ActivatedRoute) => | |
rsnapshotFullUrl(route.snapshot); | |
export const rsnapshotFullUrl = (routesnap: ActivatedRouteSnapshot) => | |
"/" + routesnap.pathFromRoot | |
.map((parts) => | |
parts.url.map((segment) => segment.toString()).join("/") | |
) //SEE CODE: https://github.com/angular/angular/blob/10.1.2/packages/router/src/router_state.ts#L360 | |
.filter(url => url) //COMMENT THIS LINE IF YOU WANT TO KEEP INTERMEDIATE EMPTY ROUTE MATCH { path: '' } --> YOU'LL GET '//' IN THE OUTPUT | |
.join("/"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment