UNPKG

nativescript-angular

Version:

An Angular renderer that lets you build mobile apps with NativeScript.

124 lines 5.43 kB
Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var router_1 = require("@angular/router"); var ns_location_strategy_1 = require("./ns-location-strategy"); var platform_providers_1 = require("../platform-providers"); var trace_1 = require("../trace"); var page_router_outlet_1 = require("./page-router-outlet"); var RouterExtensions = /** @class */ (function () { function RouterExtensions(router, locationStrategy, frameService) { this.router = router; this.locationStrategy = locationStrategy; this.frameService = frameService; } RouterExtensions.prototype.navigate = function (commands, extras) { if (extras) { this.locationStrategy._setNavigationOptions(extras); } return this.router.navigate(commands, extras); }; RouterExtensions.prototype.navigateByUrl = function (url, options) { if (options) { this.locationStrategy._setNavigationOptions(options); } return this.router.navigateByUrl(url); }; RouterExtensions.prototype.back = function (backNavigationOptions) { if (backNavigationOptions) { this.backOutlets(backNavigationOptions); } else { this.locationStrategy.back(); } }; RouterExtensions.prototype.canGoBack = function (backNavigationOptions) { var _this = this; var canGoBack = true; if (backNavigationOptions) { var _a = this.findOutletsToBack(backNavigationOptions), outletsToBack = _a.outletsToBack, outlets = _a.outlets; if (outletsToBack.length !== outlets.length) { trace_1.routerError("No outlet found relative to activated route"); } else { outletsToBack.forEach(function (outletToBack) { if (!_this.locationStrategy.canGoBack(outletToBack)) { canGoBack = false; } }); } } else { canGoBack = this.locationStrategy.canGoBack(); } return canGoBack; }; RouterExtensions.prototype.backToPreviousPage = function () { this.frameService.getFrame().goBack(); }; RouterExtensions.prototype.canGoBackToPreviousPage = function () { return this.frameService.getFrame().canGoBack(); }; RouterExtensions.prototype.backOutlets = function (options) { var _this = this; var _a = this.findOutletsToBack(options), outletsToBack = _a.outletsToBack, outlets = _a.outlets; if (outletsToBack.length !== outlets.length) { trace_1.routerError("No outlet found relative to activated route"); } else { outletsToBack.forEach(function (outletToBack) { if (outletToBack.isPageNavigationBack) { trace_1.routerError("Attempted to call startGoBack while going back:"); } else { _this.locationStrategy.back(outletToBack); } }); } }; // tslint:disable-next-line:max-line-length RouterExtensions.prototype.findOutletsToBack = function (options) { var outletsToBack = []; var rootRoute = this.router.routerState.root; var outlets = options.outlets; var relativeRoute = options.relativeTo || rootRoute; var relativeRouteOutlet = this.findOutletByRoute(relativeRoute); var isNSEmptyOutlet = relativeRouteOutlet && relativeRouteOutlet.isNSEmptyOutlet; // Lazy named outlet has added 'primary' inner NSEmptyOutlet child. // Take parent route when `relativeTo` option points to the outer named outlet. if (isNSEmptyOutlet && relativeRoute.outlet !== "primary") { relativeRoute = relativeRoute.parent || relativeRoute; } var routesToMatch = outlets ? relativeRoute.children : [relativeRoute]; outlets = outlets || [relativeRoute.outlet]; var _loop_1 = function (index) { var currentRoute = routesToMatch[index]; if (outlets.some(function (currentOutlet) { return currentOutlet === currentRoute.outlet; })) { var outlet = this_1.findOutletByRoute(currentRoute); if (outlet) { outletsToBack.push(outlet); } } }; var this_1 = this; for (var index = 0; index < routesToMatch.length; index++) { _loop_1(index); } return { outletsToBack: outletsToBack, outlets: outlets }; }; RouterExtensions.prototype.findOutletByRoute = function (currentRoute) { var outlet; var currentRouteSnapshop = page_router_outlet_1.findTopActivatedRouteNodeForOutlet(currentRoute.snapshot); var outletKey = this.locationStrategy.getRouteFullPath(currentRouteSnapshop); outlet = this.locationStrategy.findOutlet(outletKey, currentRouteSnapshop); return outlet; }; RouterExtensions = __decorate([ core_1.Injectable(), __metadata("design:paramtypes", [router_1.Router, ns_location_strategy_1.NSLocationStrategy, platform_providers_1.FrameService]) ], RouterExtensions); return RouterExtensions; }()); exports.RouterExtensions = RouterExtensions; //# sourceMappingURL=router-extensions.js.map