File

feature-libs/order/core/facade/order.service.ts

Index

Methods

Constructor

constructor(store: Store, processStateStore: Store>, userIdService: UserIdService, routingService: RoutingService)
Parameters :
Name Type Optional
store Store<StateWithOrder> No
processStateStore Store<StateWithProcess<void>> No
userIdService UserIdService No
routingService RoutingService No

Methods

cancelOrder
cancelOrder(orderCode: string, cancelRequestInput: CancellationRequestEntryInputList)
Parameters :
Name Type Optional
orderCode string No
cancelRequestInput CancellationRequestEntryInputList No
Returns : void
clearConsignmentTracking
clearConsignmentTracking()

Cleaning consignment tracking

Returns : void
clearOrderDetails
clearOrderDetails()

Clears order's details

Returns : void
clearOrderList
clearOrderList()

Cleaning order list

Returns : void
getCancelOrderLoading
getCancelOrderLoading()

Returns the cancel order loading flag

Returns : Observable<boolean>
getCancelOrderSuccess
getCancelOrderSuccess()

Returns the cancel order success flag

Returns : Observable<boolean>
getConsignmentTracking
getConsignmentTracking()

Returns a consignment tracking detail

Returns : Observable<ConsignmentTracking>
getOrderDetails
getOrderDetails()

Returns an order's detail

Returns : Observable<Order>
getOrderHistoryList
getOrderHistoryList(pageSize: number)

Returns order history list

Parameters :
Name Type Optional
pageSize number No
getOrderHistoryListLoaded
getOrderHistoryListLoaded()

Returns a loaded flag for order history list

Returns : Observable<boolean>
loadConsignmentTracking
loadConsignmentTracking(orderCode: string, consignmentCode: string)

Retrieves consignment tracking details

Parameters :
Name Type Optional Description
orderCode string No

an order code

consignmentCode string No

a consignment code

Returns : void
loadOrderDetails
loadOrderDetails(orderCode: string)

Retrieves order's details

Parameters :
Name Type Optional Description
orderCode string No

an order code

Returns : void
loadOrderList
loadOrderList(pageSize: number, currentPage?: number, sort?: string)

Retrieves an order list

Parameters :
Name Type Optional Description
pageSize number No

page size

currentPage number Yes

current page

sort string Yes

sort

Returns : void
resetCancelOrderProcessState
resetCancelOrderProcessState()

Resets the cancel order process flags

Returns : void
import { Injectable } from '@angular/core';
import { select, Store } from '@ngrx/store';
import {
  CancellationRequestEntryInputList,
  Order,
  OrderHistoryList,
  ProcessSelectors,
  RoutingService,
  StateWithProcess,
  UserIdService,
} from '@spartacus/core';
import { ConsignmentTracking, OrderFacade } from '@spartacus/order/root';
import { Observable } from 'rxjs';
import { map, take, tap } from 'rxjs/operators';
import { OrderActions } from '../store/actions/index';
import { CANCEL_ORDER_PROCESS_ID, StateWithOrder } from '../store/order-state';
import { OrderSelectors } from '../store/selectors/index';

@Injectable()
export class OrderService implements OrderFacade {
  constructor(
    protected store: Store<StateWithOrder>,
    protected processStateStore: Store<StateWithProcess<void>>,
    protected userIdService: UserIdService,
    protected routingService: RoutingService
  ) {}

  /**
   * Returns an order's detail
   */
  getOrderDetails(): Observable<Order> {
    return this.store.pipe(select(OrderSelectors.getOrderDetails));
  }

  /**
   * Retrieves order's details
   *
   * @param orderCode an order code
   */
  loadOrderDetails(orderCode: string): void {
    this.userIdService.takeUserId().subscribe((userId) => {
      this.store.dispatch(
        new OrderActions.LoadOrderDetails({
          userId,
          orderCode,
        })
      );
    });
  }

  /**
   * Clears order's details
   */
  clearOrderDetails(): void {
    this.store.dispatch(new OrderActions.ClearOrderDetails());
  }

  /**
   * Returns order history list
   */
  getOrderHistoryList(
    pageSize: number
  ): Observable<OrderHistoryList | undefined> {
    return this.store.pipe(
      select(OrderSelectors.getOrdersState),
      tap((orderListState) => {
        const attemptedLoad =
          orderListState.loading ||
          orderListState.success ||
          orderListState.error;
        if (!attemptedLoad) {
          this.loadOrderList(pageSize);
        }
      }),
      map((orderListState) => orderListState.value)
    );
  }

  /**
   * Returns a loaded flag for order history list
   */
  getOrderHistoryListLoaded(): Observable<boolean> {
    return this.store.pipe(select(OrderSelectors.getOrdersLoaded));
  }

  /**
   * Retrieves an order list
   * @param pageSize page size
   * @param currentPage current page
   * @param sort sort
   */
  loadOrderList(pageSize: number, currentPage?: number, sort?: string): void {
    this.userIdService.takeUserId(true).subscribe(
      (userId) => {
        let replenishmentOrderCode: string | undefined;

        this.routingService
          .getRouterState()
          .pipe(take(1))
          .subscribe((data) => {
            replenishmentOrderCode =
              data?.state?.params?.replenishmentOrderCode;
          })
          .unsubscribe();

        this.store.dispatch(
          new OrderActions.LoadUserOrders({
            userId,
            pageSize,
            currentPage,
            sort,
            replenishmentOrderCode,
          })
        );
      },
      () => {
        // TODO: for future releases, refactor this part to thrown errors
      }
    );
  }

  /**
   * Cleaning order list
   */
  clearOrderList(): void {
    this.store.dispatch(new OrderActions.ClearUserOrders());
  }

  /**
   *  Returns a consignment tracking detail
   */
  getConsignmentTracking(): Observable<ConsignmentTracking> {
    return this.store.pipe(select(OrderSelectors.getConsignmentTracking));
  }

  /**
   * Retrieves consignment tracking details
   * @param orderCode an order code
   * @param consignmentCode a consignment code
   */
  loadConsignmentTracking(orderCode: string, consignmentCode: string): void {
    this.userIdService.takeUserId().subscribe((userId) => {
      this.store.dispatch(
        new OrderActions.LoadConsignmentTracking({
          userId,
          orderCode,
          consignmentCode,
        })
      );
    });
  }

  /**
   * Cleaning consignment tracking
   */
  clearConsignmentTracking(): void {
    this.store.dispatch(new OrderActions.ClearConsignmentTracking());
  }

  /*
   * Cancel an order
   */
  cancelOrder(
    orderCode: string,
    cancelRequestInput: CancellationRequestEntryInputList
  ): void {
    this.userIdService.takeUserId().subscribe((userId) => {
      this.store.dispatch(
        new OrderActions.CancelOrder({
          userId,
          orderCode,
          cancelRequestInput,
        })
      );
    });
  }

  /**
   * Returns the cancel order loading flag
   */
  getCancelOrderLoading(): Observable<boolean> {
    return this.processStateStore.pipe(
      select(ProcessSelectors.getProcessLoadingFactory(CANCEL_ORDER_PROCESS_ID))
    );
  }

  /**
   * Returns the cancel order success flag
   */
  getCancelOrderSuccess(): Observable<boolean> {
    return this.processStateStore.pipe(
      select(ProcessSelectors.getProcessSuccessFactory(CANCEL_ORDER_PROCESS_ID))
    );
  }

  /**
   * Resets the cancel order process flags
   */
  resetCancelOrderProcessState(): void {
    return this.store.dispatch(new OrderActions.ResetCancelOrderProcess());
  }
}

result-matching ""

    No results matching ""