File
Methods
getOrderDetails
|
getOrderDetails()
|
|
Returns : Observable<Order>
|
orderCode$
|
Type : Observable<string>
|
|
orderLoad$
|
Type : Observable<literal type>
|
|
import { Injectable } from '@angular/core';
import { Order, RoutingService } from '@spartacus/core';
import { OrderFacade } from '@spartacus/order/root';
import { Observable } from 'rxjs';
import {
distinctUntilChanged,
map,
shareReplay,
switchMap,
tap,
} from 'rxjs/operators';
@Injectable({
providedIn: 'root',
})
export class OrderDetailsService {
orderCode$: Observable<string>;
orderLoad$: Observable<{}>;
constructor(
private userOrderService: OrderFacade,
private routingService: RoutingService
) {
this.orderCode$ = this.routingService.getRouterState().pipe(
map((routingData) => routingData.state.params.orderCode),
distinctUntilChanged()
);
this.orderLoad$ = this.orderCode$.pipe(
tap((orderCode) => {
if (orderCode) {
this.userOrderService.loadOrderDetails(orderCode);
} else {
this.userOrderService.clearOrderDetails();
}
}),
shareReplay({ bufferSize: 1, refCount: true })
);
}
getOrderDetails(): Observable<Order> {
return this.orderLoad$.pipe(
switchMap(() => this.userOrderService.getOrderDetails())
);
}
}