Skip to content

Instantly share code, notes, and snippets.

@dmorosinotto
Last active September 20, 2020 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmorosinotto/66fbcd573ce565d7e8ea6202af1fa1c4 to your computer and use it in GitHub Desktop.
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)
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