From c6b88bc4065292cf9c570f45e0424ac7f28e8df0 Mon Sep 17 00:00:00 2001 From: Pawel Fras Date: Thu, 10 Oct 2024 14:07:52 +0200 Subject: [PATCH] chore: Upgrade to Angular 18 - Handle new return type of guards - replaced `Observable with combined `Observable` from @angular/router for more, see: https://github.com/angular/angular/pull/45023 --- .../base/core/guards/cart-validation.guard.ts | 4 ++-- .../guards/checkout-b2b-auth.guard.ts | 4 ++-- .../guards/checkout-b2b-steps-set.guard.ts | 16 ++++++------- .../components/guards/cart-not-empty.guard.ts | 4 ++-- .../components/guards/checkout-auth.guard.ts | 4 ++-- .../guards/checkout-steps-set.guard.ts | 23 +++++++++---------- .../base/components/guards/checkout.guard.ts | 4 ++-- .../guards/not-checkout-auth.guard.ts | 4 ++-- .../cancellations/order-cancellation.guard.ts | 4 ++-- .../amend-order/returns/order-return.guard.ts | 4 ++-- .../guards/order-confirmation.guard.ts | 4 ++-- ...roduct-multi-dimensional-selector.guard.ts | 10 ++++---- .../guards/product-variants.guard.ts | 6 ++--- .../components/cart-guard/quote-cart.guard.ts | 4 ++-- .../components/gigya-raas/gigya-raas.guard.ts | 4 ++-- .../opps-login-required.guard.ts | 4 ++-- .../checkout-service-order-steps-set.guard.ts | 10 ++++---- .../guards/cancel-service-order.guard.ts | 6 ++--- .../components/guards/service-order.guard.ts | 4 ++-- .../src/auth/user-auth/guards/auth.guard.ts | 4 ++-- .../auth/user-auth/guards/not-auth.guard.ts | 4 ++-- .../protected-routes.guard.ts | 4 ++-- .../user/login-route/login.guard.ts | 4 ++-- .../user/logout/logout.guard.ts | 4 ++-- .../before-cms-page-guard.service.spec.ts | 4 ++-- .../guards/before-cms-page-guard.service.ts | 4 ++-- .../guards/cms-page-guard.service.ts | 6 ++--- .../cms-structure/guards/cms-page.guard.ts | 4 ++-- .../services/cms-guards.service.ts | 16 ++++++++----- .../services/cms-routes-impl.service.ts | 6 ++--- .../cms-structure/services/guards-composer.ts | 17 ++++++++++---- 31 files changed, 101 insertions(+), 99 deletions(-) diff --git a/feature-libs/cart/base/core/guards/cart-validation.guard.ts b/feature-libs/cart/base/core/guards/cart-validation.guard.ts index 388e4abefb0..e1efec60a7e 100644 --- a/feature-libs/cart/base/core/guards/cart-validation.guard.ts +++ b/feature-libs/cart/base/core/guards/cart-validation.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { ActiveCartFacade, CartValidationFacade, @@ -37,7 +37,7 @@ export class CartValidationGuard { protected GLOBAL_MESSAGE_TIMEOUT = 10000; - canActivate(): Observable { + canActivate(): Observable { return !this.cartConfigService.isCartValidationEnabled() ? of(true) : this.cartValidationService.validateCart().pipe( diff --git a/feature-libs/checkout/b2b/components/guards/checkout-b2b-auth.guard.ts b/feature-libs/checkout/b2b/components/guards/checkout-b2b-auth.guard.ts index b78e51b2fb2..c868d1e9883 100644 --- a/feature-libs/checkout/b2b/components/guards/checkout-b2b-auth.guard.ts +++ b/feature-libs/checkout/b2b/components/guards/checkout-b2b-auth.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router, UrlTree } from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { CheckoutAuthGuard, @@ -48,7 +48,7 @@ export class CheckoutB2BAuthGuard extends CheckoutAuthGuard { ); } - canActivate(): Observable { + canActivate(): Observable { return combineLatest([ this.authService.isUserLoggedIn(), this.activeCartFacade.isGuestCart(), diff --git a/feature-libs/checkout/b2b/components/guards/checkout-b2b-steps-set.guard.ts b/feature-libs/checkout/b2b/components/guards/checkout-b2b-steps-set.guard.ts index fbe6458a862..35f9236b1b2 100644 --- a/feature-libs/checkout/b2b/components/guards/checkout-b2b-steps-set.guard.ts +++ b/feature-libs/checkout/b2b/components/guards/checkout-b2b-steps-set.guard.ts @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Injectable, inject, isDevMode } from '@angular/core'; -import { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router'; +import { inject, Injectable, isDevMode } from '@angular/core'; +import { ActivatedRouteSnapshot, GuardResult, Router } from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { CheckoutCostCenterFacade, @@ -23,7 +23,7 @@ import { CheckoutStepType, } from '@spartacus/checkout/base/root'; import { LoggerService, RoutingConfigService } from '@spartacus/core'; -import { Observable, combineLatest, of } from 'rxjs'; +import { combineLatest, Observable, of } from 'rxjs'; import { filter, map, switchMap, take, tap } from 'rxjs/operators'; @Injectable({ @@ -54,7 +54,7 @@ export class CheckoutB2BStepsSetGuard extends CheckoutStepsSetGuard { ); } - canActivate(route: ActivatedRouteSnapshot): Observable { + canActivate(route: ActivatedRouteSnapshot): Observable { let currentIndex = -1; const currentRouteUrl = '/' + route.url.join('/'); @@ -99,7 +99,7 @@ export class CheckoutB2BStepsSetGuard extends CheckoutStepsSetGuard { protected isB2BStepSet( step: CheckoutStep, isAccountPayment: boolean - ): Observable { + ): Observable { if (step && !step.disabled) { switch (step.type[0]) { case CheckoutStepType.PAYMENT_TYPE: { @@ -122,9 +122,7 @@ export class CheckoutB2BStepsSetGuard extends CheckoutStepsSetGuard { return of(true); } - protected isPaymentTypeSet( - step: CheckoutStep - ): Observable { + protected isPaymentTypeSet(step: CheckoutStep): Observable { return this.checkoutPaymentTypeFacade.getSelectedPaymentTypeState().pipe( filter((state) => !state.loading), map((state) => state.data), @@ -141,7 +139,7 @@ export class CheckoutB2BStepsSetGuard extends CheckoutStepsSetGuard { protected isDeliveryAddressAndCostCenterSet( step: CheckoutStep, isAccountPayment: boolean - ): Observable { + ): Observable { return combineLatest([ this.checkoutDeliveryAddressFacade.getDeliveryAddressState().pipe( filter((state) => !state.loading), diff --git a/feature-libs/checkout/base/components/guards/cart-not-empty.guard.ts b/feature-libs/checkout/base/components/guards/cart-not-empty.guard.ts index bbef91a0478..ccf4efd7dba 100644 --- a/feature-libs/checkout/base/components/guards/cart-not-empty.guard.ts +++ b/feature-libs/checkout/base/components/guards/cart-not-empty.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { ActiveCartFacade, Cart } from '@spartacus/cart/base/root'; import { SemanticPathService } from '@spartacus/core'; import { Observable } from 'rxjs'; @@ -21,7 +21,7 @@ export class CartNotEmptyGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { return this.activeCartFacade.takeActive().pipe( map((cart) => { if (this.isEmpty(cart)) { diff --git a/feature-libs/checkout/base/components/guards/checkout-auth.guard.ts b/feature-libs/checkout/base/components/guards/checkout-auth.guard.ts index af6eb271abd..7c96a68d15c 100644 --- a/feature-libs/checkout/base/components/guards/checkout-auth.guard.ts +++ b/feature-libs/checkout/base/components/guards/checkout-auth.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router, UrlTree } from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { AuthRedirectService, @@ -29,7 +29,7 @@ export class CheckoutAuthGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { return combineLatest([ this.authService.isUserLoggedIn(), this.activeCartFacade.isGuestCart(), diff --git a/feature-libs/checkout/base/components/guards/checkout-steps-set.guard.ts b/feature-libs/checkout/base/components/guards/checkout-steps-set.guard.ts index fe31eee7540..31b30ca3942 100644 --- a/feature-libs/checkout/base/components/guards/checkout-steps-set.guard.ts +++ b/feature-libs/checkout/base/components/guards/checkout-steps-set.guard.ts @@ -5,7 +5,12 @@ */ import { inject, Injectable, isDevMode, OnDestroy } from '@angular/core'; -import { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router'; +import { + ActivatedRouteSnapshot, + GuardResult, + Router, + UrlTree, +} from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { CheckoutDeliveryAddressFacade, @@ -65,7 +70,7 @@ export class CheckoutStepsSetGuard implements OnDestroy { }); } - canActivate(route: ActivatedRouteSnapshot): Observable { + canActivate(route: ActivatedRouteSnapshot): Observable { let currentIndex = -1; const currentRouteUrl = '/' + route.url.join('/'); @@ -98,7 +103,7 @@ export class CheckoutStepsSetGuard implements OnDestroy { ); } - protected isStepSet(step: CheckoutStep): Observable { + protected isStepSet(step: CheckoutStep): Observable { if (step && !step.disabled) { switch (step.type[0]) { case CheckoutStepType.DELIVERY_ADDRESS: { @@ -126,9 +131,7 @@ export class CheckoutStepsSetGuard implements OnDestroy { return of(true); } - protected isDeliveryAddress( - step: CheckoutStep - ): Observable { + protected isDeliveryAddress(step: CheckoutStep): Observable { return this.checkoutDeliveryAddressFacade.getDeliveryAddressState().pipe( filter((state) => !state.loading), map((state) => state.data), @@ -142,9 +145,7 @@ export class CheckoutStepsSetGuard implements OnDestroy { ); } - protected isDeliveryModeSet( - step: CheckoutStep - ): Observable { + protected isDeliveryModeSet(step: CheckoutStep): Observable { return this.checkoutDeliveryModesFacade.getSelectedDeliveryModeState().pipe( filter((state) => !state.loading), map((state) => state.data), @@ -152,9 +153,7 @@ export class CheckoutStepsSetGuard implements OnDestroy { ); } - protected isPaymentDetailsSet( - step: CheckoutStep - ): Observable { + protected isPaymentDetailsSet(step: CheckoutStep): Observable { return this.checkoutPaymentFacade.getPaymentDetailsState().pipe( filter((state) => !state.loading), map((state) => state.data), diff --git a/feature-libs/checkout/base/components/guards/checkout.guard.ts b/feature-libs/checkout/base/components/guards/checkout.guard.ts index e334ae28213..a494e9e1610 100644 --- a/feature-libs/checkout/base/components/guards/checkout.guard.ts +++ b/feature-libs/checkout/base/components/guards/checkout.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router, UrlTree } from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { CheckoutStepType } from '@spartacus/checkout/base/root'; import { RoutingConfigService } from '@spartacus/core'; @@ -38,7 +38,7 @@ export class CheckoutGuard { protected checkoutStepService: CheckoutStepService ) {} - canActivate(): Observable { + canActivate(): Observable { const expressCheckout$ = this.expressCheckoutService .trySetDefaultCheckoutDetails() .pipe( diff --git a/feature-libs/checkout/base/components/guards/not-checkout-auth.guard.ts b/feature-libs/checkout/base/components/guards/not-checkout-auth.guard.ts index 0192ae98598..31503b7679b 100644 --- a/feature-libs/checkout/base/components/guards/not-checkout-auth.guard.ts +++ b/feature-libs/checkout/base/components/guards/not-checkout-auth.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { AuthService, @@ -26,7 +26,7 @@ export class NotCheckoutAuthGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { return this.authService.isUserLoggedIn().pipe( map((isLoggedIn) => { if (isLoggedIn) { diff --git a/feature-libs/order/components/amend-order/cancellations/order-cancellation.guard.ts b/feature-libs/order/components/amend-order/cancellations/order-cancellation.guard.ts index 44c9c55a45e..7eeb2a93fcd 100644 --- a/feature-libs/order/components/amend-order/cancellations/order-cancellation.guard.ts +++ b/feature-libs/order/components/amend-order/cancellations/order-cancellation.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { SemanticPathService } from '@spartacus/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -21,7 +21,7 @@ export class OrderCancellationGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { return this.orderAmendService.getForm().pipe( map((form) => { if (!form.valid) { diff --git a/feature-libs/order/components/amend-order/returns/order-return.guard.ts b/feature-libs/order/components/amend-order/returns/order-return.guard.ts index 4ab37ed0892..a5fcfef5778 100644 --- a/feature-libs/order/components/amend-order/returns/order-return.guard.ts +++ b/feature-libs/order/components/amend-order/returns/order-return.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { SemanticPathService } from '@spartacus/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -21,7 +21,7 @@ export class OrderReturnGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { return this.orderAmendService.getForm().pipe( map((form) => { if (!form.valid) { diff --git a/feature-libs/order/components/guards/order-confirmation.guard.ts b/feature-libs/order/components/guards/order-confirmation.guard.ts index 87fd021f010..951c5238b8c 100644 --- a/feature-libs/order/components/guards/order-confirmation.guard.ts +++ b/feature-libs/order/components/guards/order-confirmation.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { SemanticPathService } from '@spartacus/core'; import { OrderFacade } from '@spartacus/order/root'; import { Observable } from 'rxjs'; @@ -21,7 +21,7 @@ export class OrderConfirmationGuard { protected semanticPathService: SemanticPathService ) {} - canActivate(): Observable { + canActivate(): Observable { return this.orderFacade.getOrderDetails().pipe( map((orderDetails) => { if (orderDetails && Object.keys(orderDetails).length !== 0) { diff --git a/feature-libs/product-multi-dimensional/selector/components/guards/product-multi-dimensional-selector.guard.ts b/feature-libs/product-multi-dimensional/selector/components/guards/product-multi-dimensional-selector.guard.ts index 25d92f03e15..21a89b8f037 100644 --- a/feature-libs/product-multi-dimensional/selector/components/guards/product-multi-dimensional-selector.guard.ts +++ b/feature-libs/product-multi-dimensional/selector/components/guards/product-multi-dimensional-selector.guard.ts @@ -5,7 +5,7 @@ */ import { inject, Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router'; +import { ActivatedRouteSnapshot, GuardResult, Router } from '@angular/router'; import { isNotUndefined, Product, @@ -36,9 +36,7 @@ export class ProductMultiDimensionalSelectorGuard { inject(SemanticPathService); protected router: Router = inject(Router); - canActivate( - activatedRoute: ActivatedRouteSnapshot - ): Observable { + canActivate(activatedRoute: ActivatedRouteSnapshot): Observable { const productCode = activatedRoute.params?.productCode; if (!productCode) { return of(false); @@ -64,7 +62,7 @@ export class ProductMultiDimensionalSelectorGuard { * Finds a valid product code from variant options and returns a URL tree for redirection. * * @param {Product} product - The product with variant options. - * @returns {Observable} - An observable that resolves to a `UrlTree` for + * @returns {Observable} - An observable that resolves to a `UrlTree` for * redirection if a valid product code is found, or `false` if no valid code is available. * * @description @@ -74,7 +72,7 @@ export class ProductMultiDimensionalSelectorGuard { */ protected findValidProductCodeAndReturnUrlTree( product: Product - ): Observable { + ): Observable { const validVariantCode = this.getValidVariantCode(product); const fallbackProductCode = this.getFallbackProductCode(product); diff --git a/feature-libs/product/variants/components/guards/product-variants.guard.ts b/feature-libs/product/variants/components/guards/product-variants.guard.ts index 0a1af899e82..ad716de5947 100644 --- a/feature-libs/product/variants/components/guards/product-variants.guard.ts +++ b/feature-libs/product/variants/components/guards/product-variants.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router'; +import { ActivatedRouteSnapshot, GuardResult, Router } from '@angular/router'; import { isNotUndefined, Product, @@ -29,9 +29,7 @@ export class ProductVariantsGuard { protected semanticPathService: SemanticPathService, protected router: Router ) {} - canActivate( - activatedRoute: ActivatedRouteSnapshot - ): Observable { + canActivate(activatedRoute: ActivatedRouteSnapshot): Observable { const productCode = activatedRoute.params?.productCode; if (!productCode) { return of(true); diff --git a/feature-libs/quote/components/cart-guard/quote-cart.guard.ts b/feature-libs/quote/components/cart-guard/quote-cart.guard.ts index fb898ce75d5..9034ac7bdf4 100644 --- a/feature-libs/quote/components/cart-guard/quote-cart.guard.ts +++ b/feature-libs/quote/components/cart-guard/quote-cart.guard.ts @@ -5,7 +5,7 @@ */ import { inject, Injectable } from '@angular/core'; -import { CanActivate, Router, UrlTree } from '@angular/router'; +import { CanActivate, GuardResult, Router } from '@angular/router'; import { RouterState, @@ -31,7 +31,7 @@ export class QuoteCartGuard implements CanActivate { protected router = inject(Router); protected semanticPathService = inject(SemanticPathService); - canActivate(): Observable { + canActivate(): Observable { return combineLatest([ this.quoteCartService.isQuoteCartActive(), this.quoteCartService.getQuoteId(), diff --git a/integration-libs/cdc/components/gigya-raas/gigya-raas.guard.ts b/integration-libs/cdc/components/gigya-raas/gigya-raas.guard.ts index 0f8e0aa9d49..6fb458fd644 100644 --- a/integration-libs/cdc/components/gigya-raas/gigya-raas.guard.ts +++ b/integration-libs/cdc/components/gigya-raas/gigya-raas.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable, inject } from '@angular/core'; -import { CanActivate, UrlTree } from '@angular/router'; +import { CanActivate, GuardResult } from '@angular/router'; import { GigyaRaasComponentData } from '@spartacus/cdc/core'; import { AuthGuard, @@ -26,7 +26,7 @@ export class GigyaRaasGuard implements CanActivate { protected authGuard = inject(AuthGuard); protected notAuthGuard = inject(NotAuthGuard); - canActivate(): Observable { + canActivate(): Observable { return this.getComponentData().pipe( switchMap((componentData) => { if (Object.keys(componentData).length === 0) { diff --git a/integration-libs/opps/root/login-required/opps-login-required.guard.ts b/integration-libs/opps/root/login-required/opps-login-required.guard.ts index 2c5ce447839..bd30e720e34 100644 --- a/integration-libs/opps/root/login-required/opps-login-required.guard.ts +++ b/integration-libs/opps/root/login-required/opps-login-required.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable, inject, isDevMode } from '@angular/core'; -import { RouterStateSnapshot, UrlTree, Router } from '@angular/router'; +import { GuardResult, Router, RouterStateSnapshot } from '@angular/router'; import { AuthRedirectService, AuthService, @@ -29,7 +29,7 @@ export class OppsLoginRequiredGuard { canActivate( route: CmsActivatedRouteSnapshot, _state: RouterStateSnapshot - ): Observable { + ): Observable { const navigation = this.router.getCurrentNavigation(); return this.authService.isUserLoggedIn().pipe( take(1), diff --git a/integration-libs/s4-service/checkout/components/guards/checkout-service-order-steps-set.guard.ts b/integration-libs/s4-service/checkout/components/guards/checkout-service-order-steps-set.guard.ts index 09221b3930c..7f52404e083 100644 --- a/integration-libs/s4-service/checkout/components/guards/checkout-service-order-steps-set.guard.ts +++ b/integration-libs/s4-service/checkout/components/guards/checkout-service-order-steps-set.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable, inject } from '@angular/core'; -import { ActivatedRouteSnapshot, UrlTree } from '@angular/router'; +import { ActivatedRouteSnapshot, GuardResult } from '@angular/router'; import { ActiveCartFacade } from '@spartacus/cart/base/root'; import { CheckoutB2BStepsSetGuard } from '@spartacus/checkout/b2b/components'; import { CheckoutStep, CheckoutStepType } from '@spartacus/checkout/base/root'; @@ -23,7 +23,7 @@ export class CheckoutServiceOrderStepsSetGuard extends CheckoutB2BStepsSetGuard protected activeCartFacade = inject(ActiveCartFacade); protected config = inject(S4ServiceDeliveryModeConfig); - canActivate(route: ActivatedRouteSnapshot): Observable { + canActivate(route: ActivatedRouteSnapshot): Observable { return combineLatest( this.checkoutServiceDetailsFacade.hasServiceItems(), this.checkoutServiceDetailsFacade.hasNonServiceItems() @@ -42,9 +42,7 @@ export class CheckoutServiceOrderStepsSetGuard extends CheckoutB2BStepsSetGuard ); } - protected isServiceDetailsSet( - step: CheckoutStep - ): Observable { + protected isServiceDetailsSet(step: CheckoutStep): Observable { return this.checkoutServiceDetailsFacade .getSelectedServiceDetailsState() .pipe( @@ -80,7 +78,7 @@ export class CheckoutServiceOrderStepsSetGuard extends CheckoutB2BStepsSetGuard protected override isB2BStepSet( step: CheckoutStep, isAccountPayment: boolean - ): Observable { + ): Observable { if (step && !step.disabled) { switch (step.type[0]) { case CheckoutStepType.PAYMENT_TYPE: diff --git a/integration-libs/s4-service/order/components/guards/cancel-service-order.guard.ts b/integration-libs/s4-service/order/components/guards/cancel-service-order.guard.ts index 7a71f8cf6d1..b3e30962ad3 100644 --- a/integration-libs/s4-service/order/components/guards/cancel-service-order.guard.ts +++ b/integration-libs/s4-service/order/components/guards/cancel-service-order.guard.ts @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Injectable, inject } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { inject, Injectable } from '@angular/core'; +import { GuardResult, Router } from '@angular/router'; import { SemanticPathService } from '@spartacus/core'; import { OrderDetailsService } from '@spartacus/order/components'; import { map, Observable } from 'rxjs'; @@ -18,7 +18,7 @@ export class CancelServiceOrderGuard { protected router = inject(Router); protected semanticPathService = inject(SemanticPathService); - canActivate(): Observable { + canActivate(): Observable { return this.orderDetailsService.getOrderDetails().pipe( map((orderDetails) => { if ( diff --git a/integration-libs/s4-service/order/components/guards/service-order.guard.ts b/integration-libs/s4-service/order/components/guards/service-order.guard.ts index 16473260033..e47f4bf0111 100644 --- a/integration-libs/s4-service/order/components/guards/service-order.guard.ts +++ b/integration-libs/s4-service/order/components/guards/service-order.guard.ts @@ -5,7 +5,7 @@ */ import { inject, Injectable } from '@angular/core'; -import { UrlTree } from '@angular/router'; +import { GuardResult } from '@angular/router'; import { GlobalMessageService, GlobalMessageType } from '@spartacus/core'; import { OrderDetailsService } from '@spartacus/order/components'; import { map, Observable } from 'rxjs'; @@ -17,7 +17,7 @@ export class ServiceOrderGuard { protected orderDetailsService = inject(OrderDetailsService); protected globalMessageService = inject(GlobalMessageService); - canActivate(): Observable { + canActivate(): Observable { return this.orderDetailsService.getOrderDetails().pipe( map((orderDetails) => { if (orderDetails && orderDetails.serviceReschedulable) { diff --git a/projects/core/src/auth/user-auth/guards/auth.guard.ts b/projects/core/src/auth/user-auth/guards/auth.guard.ts index 0baa427829d..ff08a003801 100644 --- a/projects/core/src/auth/user-auth/guards/auth.guard.ts +++ b/projects/core/src/auth/user-auth/guards/auth.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { SemanticPathService } from '../../../routing/configurable-routes/url-translation/semantic-path.service'; @@ -27,7 +27,7 @@ export class AuthGuard { protected semanticPathService: SemanticPathService ) {} - canActivate(): Observable { + canActivate(): Observable { return this.authService.isUserLoggedIn().pipe( map((isLoggedIn) => { if (!isLoggedIn) { diff --git a/projects/core/src/auth/user-auth/guards/not-auth.guard.ts b/projects/core/src/auth/user-auth/guards/not-auth.guard.ts index af10e6c4517..40f799f98e4 100644 --- a/projects/core/src/auth/user-auth/guards/not-auth.guard.ts +++ b/projects/core/src/auth/user-auth/guards/not-auth.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { SemanticPathService } from '../../../routing/configurable-routes/url-translation/semantic-path.service'; @@ -25,7 +25,7 @@ export class NotAuthGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { // redirect, if user is already logged in: return this.authService.isUserLoggedIn().pipe( map((isLoggedIn) => { diff --git a/projects/core/src/routing/protected-routes/protected-routes.guard.ts b/projects/core/src/routing/protected-routes/protected-routes.guard.ts index 6e3c28f65a0..b92d840c52d 100644 --- a/projects/core/src/routing/protected-routes/protected-routes.guard.ts +++ b/projects/core/src/routing/protected-routes/protected-routes.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, UrlTree } from '@angular/router'; +import { ActivatedRouteSnapshot, GuardResult } from '@angular/router'; import { Observable, of } from 'rxjs'; import { AuthGuard } from '../../auth/user-auth/guards/auth.guard'; import { ProtectedRoutesService } from './protected-routes.service'; @@ -20,7 +20,7 @@ export class ProtectedRoutesGuard { /** * When the anticipated url is protected, it switches to the AuthGuard. Otherwise emits true. */ - canActivate(route: ActivatedRouteSnapshot): Observable { + canActivate(route: ActivatedRouteSnapshot): Observable { let urlSegments: string[] = route.url.map((seg) => seg.path); // For the root path `/` ActivatedRoute contains an empty array of segments: diff --git a/projects/storefrontlib/cms-components/user/login-route/login.guard.ts b/projects/storefrontlib/cms-components/user/login-route/login.guard.ts index 926b31c63b7..c0fbf68cd87 100644 --- a/projects/storefrontlib/cms-components/user/login-route/login.guard.ts +++ b/projects/storefrontlib/cms-components/user/login-route/login.guard.ts @@ -7,8 +7,8 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, + GuardResult, RouterStateSnapshot, - UrlTree, } from '@angular/router'; import { AuthConfigService, AuthService, OAuthFlow } from '@spartacus/core'; import { EMPTY, Observable, of } from 'rxjs'; @@ -34,7 +34,7 @@ export class LoginGuard { canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { return this.authService.isUserLoggedIn().pipe( take(1), switchMap((isUserLoggedIn) => { diff --git a/projects/storefrontlib/cms-components/user/logout/logout.guard.ts b/projects/storefrontlib/cms-components/user/logout/logout.guard.ts index d65ef78ed0b..24a5512baf6 100644 --- a/projects/storefrontlib/cms-components/user/logout/logout.guard.ts +++ b/projects/storefrontlib/cms-components/user/logout/logout.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; +import { GuardResult, Router, UrlTree } from '@angular/router'; import { AuthService, CmsService, @@ -35,7 +35,7 @@ export class LogoutGuard { protected router: Router ) {} - canActivate(): Observable { + canActivate(): Observable { /** * First we want to complete logout process before redirecting to logout page * We want to avoid errors like `token is no longer valid` diff --git a/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.spec.ts b/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.spec.ts index e6ce7e4357f..906bf1efca2 100644 --- a/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.spec.ts +++ b/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.spec.ts @@ -1,5 +1,5 @@ import { TestBed } from '@angular/core/testing'; -import { RouterStateSnapshot, UrlTree } from '@angular/router'; +import { GuardResult, RouterStateSnapshot } from '@angular/router'; import { CmsActivatedRouteSnapshot } from '@spartacus/core'; import { Observable, of } from 'rxjs'; import { CanActivate, GuardsComposer } from '../services/guards-composer'; @@ -10,7 +10,7 @@ class MockGuardsComposer implements Partial { _guards: CanActivate[], _route: CmsActivatedRouteSnapshot, _state: RouterStateSnapshot - ): Observable { + ): Observable { return of(true); } } diff --git a/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.ts b/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.ts index abe6ca9b3d7..df65d6d1aa5 100644 --- a/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.ts +++ b/projects/storefrontlib/cms-structure/guards/before-cms-page-guard.service.ts @@ -5,7 +5,7 @@ */ import { Injectable, inject } from '@angular/core'; -import { RouterStateSnapshot, UrlTree } from '@angular/router'; +import { GuardResult, RouterStateSnapshot } from '@angular/router'; import { CmsActivatedRouteSnapshot } from '@spartacus/core'; import { Observable } from 'rxjs'; import { GuardsComposer } from '../services/guards-composer'; @@ -27,7 +27,7 @@ export class BeforeCmsPageGuardService { canActivate( route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { return this.guardsComposer.canActivate(this.guards, route, state); } } diff --git a/projects/storefrontlib/cms-structure/guards/cms-page-guard.service.ts b/projects/storefrontlib/cms-structure/guards/cms-page-guard.service.ts index bf72a5c89c0..c8b9fcc8a19 100644 --- a/projects/storefrontlib/cms-structure/guards/cms-page-guard.service.ts +++ b/projects/storefrontlib/cms-structure/guards/cms-page-guard.service.ts @@ -5,7 +5,7 @@ */ import { Injectable } from '@angular/core'; -import { RouterStateSnapshot, UrlTree } from '@angular/router'; +import { GuardResult, RouterStateSnapshot } from '@angular/router'; import { CmsActivatedRouteSnapshot, CmsService, @@ -67,7 +67,7 @@ export class CmsPageGuardService { pageData: Page, route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { return this.cmsService.getPageComponentTypes(pageContext).pipe( take(1), switchMap((componentTypes) => @@ -108,7 +108,7 @@ export class CmsPageGuardService { pageContext: PageContext, route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { const notFoundLabel = this.semanticPathService.get('notFound'); if (!notFoundLabel) { return of(false); diff --git a/projects/storefrontlib/cms-structure/guards/cms-page.guard.ts b/projects/storefrontlib/cms-structure/guards/cms-page.guard.ts index 1f9920b5441..94e9d22497c 100644 --- a/projects/storefrontlib/cms-structure/guards/cms-page.guard.ts +++ b/projects/storefrontlib/cms-structure/guards/cms-page.guard.ts @@ -5,7 +5,7 @@ */ import { Injectable, inject } from '@angular/core'; -import { RouterStateSnapshot, UrlTree } from '@angular/router'; +import { GuardResult, RouterStateSnapshot } from '@angular/router'; import { CmsActivatedRouteSnapshot, CmsService, @@ -51,7 +51,7 @@ export class CmsPageGuard { canActivate( route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { return this.beforeCmsPageGuardService.canActivate(route, state).pipe( switchMap((canActivate) => canActivate === true diff --git a/projects/storefrontlib/cms-structure/services/cms-guards.service.ts b/projects/storefrontlib/cms-structure/services/cms-guards.service.ts index c9787105971..d88232dccf8 100644 --- a/projects/storefrontlib/cms-structure/services/cms-guards.service.ts +++ b/projects/storefrontlib/cms-structure/services/cms-guards.service.ts @@ -5,7 +5,11 @@ */ import { inject, Injectable } from '@angular/core'; -import { CanActivateFn, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { + CanActivateFn, + GuardResult, + RouterStateSnapshot, +} from '@angular/router'; import { CmsActivatedRouteSnapshot, FeatureConfigService, @@ -40,7 +44,7 @@ export class CmsGuardsService { componentTypes: string[], route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { const guards = this.cmsComponentsService.getGuards(componentTypes); if ( @@ -56,12 +60,12 @@ export class CmsGuardsService { // When the FeatureToggle 'cmsGuardsServiceUseGuardsComposer' is disabled, // use the old approach: if (guards.length) { - const canActivateObservables = guards.map((guard) => + const canActivateObservabless = guards.map((guard) => this.canActivateGuard(guard, route, state) ); - return concat(...canActivateObservables).pipe( - skipWhile((canActivate: boolean | UrlTree) => canActivate === true), + return concat(...canActivateObservabless).pipe( + skipWhile((canActivate: GuardResult) => canActivate === true), endWith(true), first() ); @@ -85,7 +89,7 @@ export class CmsGuardsService { guardClass: any, route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { const guard = getLastValueSync( this.unifiedInjector.get<{ canActivate: CanActivateFn; diff --git a/projects/storefrontlib/cms-structure/services/cms-routes-impl.service.ts b/projects/storefrontlib/cms-structure/services/cms-routes-impl.service.ts index a7d04695ac6..e771e0a78bb 100644 --- a/projects/storefrontlib/cms-structure/services/cms-routes-impl.service.ts +++ b/projects/storefrontlib/cms-structure/services/cms-routes-impl.service.ts @@ -7,10 +7,10 @@ import { Injectable, Type } from '@angular/core'; import { ActivatedRouteSnapshot, + GuardResult, Route, Router, RouterStateSnapshot, - UrlTree, } from '@angular/router'; import { CmsComponentChildRoutesConfig, @@ -160,11 +160,11 @@ export class CmsRoutesImplService { ): ( route: ActivatedRouteSnapshot, state: RouterStateSnapshot - ) => Observable { + ) => Observable { return ( route: ActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable => { + ): Observable => { return this.cmsGuardsService.canActivateGuard(guardClass, route, state); }; } diff --git a/projects/storefrontlib/cms-structure/services/guards-composer.ts b/projects/storefrontlib/cms-structure/services/guards-composer.ts index 3aa352594e5..c1ea16455c5 100644 --- a/projects/storefrontlib/cms-structure/services/guards-composer.ts +++ b/projects/storefrontlib/cms-structure/services/guards-composer.ts @@ -5,24 +5,31 @@ */ import { Injectable } from '@angular/core'; -import { CanActivateFn, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { + CanActivateFn, + GuardResult, + RouterStateSnapshot, +} from '@angular/router'; import { CmsActivatedRouteSnapshot, wrapIntoObservable } from '@spartacus/core'; import { Observable, concat, endWith, first, of, skipWhile } from 'rxjs'; /** * Replacement for the Angular's deprecated type `CanActivate`. */ +//TODO: discuss moving this to `@spartacus/core` export type CanActivate = { canActivate: CanActivateFn }; /** * Observable that emits a boolean or an UrlTree. */ -export type CanActivateObservable = Observable; +//TODO: discuss moving this to `@spartacus/core` +export type CanActivateObservable = Observable; /** * Utility service for running multiple guards and composing their results * into a single result observable. */ +//TODO: discuss moving this to `@spartacus/core` @Injectable({ providedIn: 'root' }) export class GuardsComposer { /** @@ -36,7 +43,7 @@ export class GuardsComposer { guards: CanActivate[], route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { if (guards.length) { const canActivateObservables = guards.map((guard) => this.canActivateGuard(guard, route, state) @@ -56,7 +63,7 @@ export class GuardsComposer { guard: CanActivate, route: CmsActivatedRouteSnapshot, state: RouterStateSnapshot - ): Observable { + ): Observable { if (this.isCanActivate(guard)) { return wrapIntoObservable(guard.canActivate(route, state)).pipe(first()); } else { @@ -75,7 +82,7 @@ export class GuardsComposer { canActivateObservables: CanActivateObservable[] ): CanActivateObservable { return concat(...canActivateObservables).pipe( - skipWhile((canActivate: boolean | UrlTree) => canActivate === true), + skipWhile((canActivate: GuardResult) => canActivate === true), endWith(true), first() );