@tangential/core
Version:
Core types and support code for Tangential
91 lines • 10.8 kB
JavaScript
export class NgRouteUtil {
static fullPath(route) {
let pathAry = [];
route.pathFromRoot
.map(routeSegment => routeSegment.snapshot)
.map(routeSnap => {
return routeSnap;
})
.map(routeSnap => routeSnap.url)
.filter(segments => segments && segments.length > 0)
.forEach(segments => segments.forEach(segment => pathAry.push(segment.toString())));
let path = pathAry.join('/');
if (path && path.endsWith('/')) {
path = path.substring(0, path.length - 1);
}
return path;
}
static primaryLeaf(router) {
let c = router.routerState.root;
while (c.firstChild) {
c = c.firstChild;
}
return c;
}
static findDescendantByComponentKey(router, componentTypeKey) {
let c = router.routerState.root;
do {
if (c.component && c.component['Key'] == componentTypeKey) {
break;
}
c = c.firstChild;
} while (c);
return c;
}
/**
* Breadth first search of route to find the descendant where 'parent.children[x].component['Key'] === componentTypeKey'
* This requires that the Component have the static field 'Key' declared and set to a value.
* @param route
* @param componentTypeKey
* @returns {Route | null}
*/
static findDescendantRouteByComponentKey(route, componentTypeKey) {
let result = null;
if (route.children) {
for (let i = 0; i < route.children.length; i++) {
let child = route.children[i];
if (child.component && child.component['Key'] === componentTypeKey) {
result = child;
break;
}
}
if (!result) {
for (let i = 0; i < route.children.length; i++) {
result = NgRouteUtil.findDescendantRouteByComponentKey(route.children[i], componentTypeKey);
if (result) {
break;
}
}
}
}
return result;
}
/**
* Breadth first search of route to find the descendant where 'parent.children[x].path === path'
* @param route
* @param path
* @returns {Route | null}
*/
static findDescendantRouteByPath(route, path) {
let result = null;
if (route.children) {
for (let i = 0; i < route.children.length; i++) {
let child = route.children[i];
if (child.path === path) {
result = child;
break;
}
}
if (!result) {
for (let i = 0; i < route.children.length; i++) {
result = NgRouteUtil.findDescendantRouteByPath(route.children[i], path);
if (result) {
break;
}
}
}
}
return result;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcm91dGUtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdlbnRpYWwvY29yZS9zcmMvbGliL3JvdXRpbmcvbmctcm91dGUtdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQU8sV0FBVztJQUV0QixNQUFNLENBQUMsUUFBUSxDQUFDLEtBQXFCO1FBQ25DLElBQUksT0FBTyxHQUFZLEVBQUUsQ0FBQTtRQUN6QixLQUFLLENBQUMsWUFBWTthQUNmLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7YUFDMUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2YsT0FBTyxTQUFTLENBQUE7UUFDbEIsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQzthQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJGLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFNUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUMxQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU0s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QUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIFJvdXRlLFxuICBSb3V0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuXG5leHBvcnQgY2xhc3MgTmdSb3V0ZVV0aWwge1xuXG4gIHN0YXRpYyBmdWxsUGF0aChyb3V0ZTogQWN0aXZhdGVkUm91dGUpOnN0cmluZyB7XG4gICAgbGV0IHBhdGhBcnk6c3RyaW5nW10gPSBbXVxuICAgIHJvdXRlLnBhdGhGcm9tUm9vdFxuICAgICAgLm1hcChyb3V0ZVNlZ21lbnQgPT4gcm91dGVTZWdtZW50LnNuYXBzaG90KVxuICAgICAgLm1hcChyb3V0ZVNuYXAgPT4ge1xuICAgICAgICByZXR1cm4gcm91dGVTbmFwXG4gICAgICB9KVxuICAgICAgLm1hcChyb3V0ZVNuYXAgPT4gcm91dGVTbmFwLnVybClcbiAgICAgIC5maWx0ZXIoc2VnbWVudHMgPT4gc2VnbWVudHMgJiYgc2VnbWVudHMubGVuZ3RoID4gMClcbiAgICAgIC5mb3JFYWNoKHNlZ21lbnRzID0+IHNlZ21lbnRzLmZvckVhY2goc2VnbWVudCA9PiBwYXRoQXJ5LnB1c2goc2VnbWVudC50b1N0cmluZygpKSkpXG5cbiAgICBsZXQgcGF0aCA9IHBhdGhBcnkuam9pbignLycpXG5cbiAgICBpZiAocGF0aCAmJiBwYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpXG4gICAgfVxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBzdGF0aWMgcHJpbWFyeUxlYWYocm91dGVyOiBSb3V0ZXIpOiBBY3RpdmF0ZWRSb3V0ZSB7XG4gICAgbGV0IGMgPSByb3V0ZXIucm91dGVyU3RhdGUucm9vdFxuICAgIHdoaWxlIChjLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGMgPSBjLmZpcnN0Q2hpbGRcbiAgICB9XG4gICAgcmV0dXJuIGNcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVzY2VuZGFudEJ5Q29tcG9uZW50S2V5KHJvdXRlcjogUm91dGVyLCBjb21wb25lbnRUeXBlS2V5OiBzdHJpbmcpOiAoQWN0aXZhdGVkUm91dGUgfCBudWxsICkge1xuICAgIGxldCBjOkFjdGl2YXRlZFJvdXRlIHwgbnVsbCAgPSByb3V0ZXIucm91dGVyU3RhdGUucm9vdFxuICAgIGRvIHtcbiAgICAgIGlmIChjLmNvbXBvbmVudCAmJiAoYy5jb21wb25lbnQgYXMgYW55KVsnS2V5J10gPT0gY29tcG9uZW50VHlwZUtleSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgYyA9IGMuZmlyc3RDaGlsZFxuICAgIH0gd2hpbGUgKGMpXG4gICAgcmV0dXJuIGNcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEJyZWFkdGggZmlyc3Qgc2VhcmNoIG9mIHJvdXRlIHRvIGZpbmQgdGhlIGRlc2NlbmRhbnQgd2hlcmUgJ3BhcmVudC5jaGlsZHJlblt4XS5jb21wb25lbnRbJ0tleSddID09PSBjb21wb25lbnRUeXBlS2V5J1xuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIENvbXBvbmVudCBoYXZlIHRoZSBzdGF0aWMgZmllbGQgJ0tleScgZGVjbGFyZWQgYW5kIHNldCB0byBhIHZhbHVlLlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHBhcmFtIGNvbXBvbmVudFR5cGVLZXlcbiAgICogQHJldHVybnMge1JvdXRlIHwgbnVsbH1cbiAgICovXG4gIHN0YXRpYyBmaW5kRGVzY2VuZGFudFJvdXRlQnlDb21wb25lbnRLZXkocm91dGU6IFJvdXRlLCBjb21wb25lbnRUeXBlS2V5OiBzdHJpbmcpOiAoUm91dGUgfCBudWxsICkge1xuICAgIGxldCByZXN1bHQgPSBudWxsXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZCA9IHJvdXRlLmNoaWxkcmVuW2ldXG4gICAgICAgIGlmIChjaGlsZC5jb21wb25lbnQgJiYgKGNoaWxkLmNvbXBvbmVudCBhcyBhbnkpWydLZXknXSA9PT0gY29tcG9uZW50VHlwZUtleSkge1xuICAgICAgICAgIHJlc3VsdCA9IGNoaWxkXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlc3VsdCA9IE5nUm91dGVVdGlsLmZpbmREZXNjZW5kYW50Um91dGVCeUNvbXBvbmVudEtleShyb3V0ZS5jaGlsZHJlbltpXSwgY29tcG9uZW50VHlwZUtleSlcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQnJlYWR0aCBmaXJzdCBzZWFyY2ggb2Ygcm91dGUgdG8gZmluZCB0aGUgZGVzY2VuZGFudCB3aGVyZSAncGFyZW50LmNoaWxkcmVuW3hdLnBhdGggPT09IHBhdGgnXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcGFyYW0gcGF0aFxuICAgKiBAcmV0dXJucyB7Um91dGUgfCBudWxsfVxuICAgKi9cbiAgc3RhdGljIGZpbmREZXNjZW5kYW50Um91dGVCeVBhdGgocm91dGU6IFJvdXRlLCBwYXRoOiBzdHJpbmcpOiAoUm91dGUgfCBudWxsICkge1xuICAgIGxldCByZXN1bHQgPSBudWxsXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZCA9IHJvdXRlLmNoaWxkcmVuW2ldXG4gICAgICAgIGlmIChjaGlsZC5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgcmVzdWx0ID0gY2hpbGRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0ID0gTmdSb3V0ZVV0aWwuZmluZERlc2NlbmRhbnRSb3V0ZUJ5UGF0aChyb3V0ZS5jaGlsZHJlbltpXSwgcGF0aClcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxufVxuIl19