Refactor customer number handling and add combined observable for customer number and selected order item changes

This commit is contained in:
Lorenz Hilpert
2024-11-27 11:43:49 +01:00
parent fa66d2389a
commit 98a9346c1a
2 changed files with 12 additions and 7 deletions

View File

@@ -10,7 +10,7 @@ import { UiSpinnerModule } from '@ui/spinner';
import { OnInitDirective } from '@shared/directives/element-lifecycle';
import { PickupShelfInNavigationService } from '@shared/services/navigation';
import { BehaviorSubject, asapScheduler, combineLatest } from 'rxjs';
import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';
import { distinctUntilChanged, filter, map, shareReplay, tap, throttleTime } from 'rxjs/operators';
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
import { DBHOrderItemListItemDTO, KeyValueDTOOfStringAndString } from '@swagger/oms';
import { UiErrorModalComponent, UiModalService } from '@ui/modal';
@@ -52,7 +52,7 @@ export class PickupShelfInDetailsComponent extends PickupShelfDetailsBaseCompone
order$ = this.store.order$;
$customerNumber = toSignal(this.store.customerNumber$);
$customerNumber = toSignal(this.store.customerNumber$.pipe(distinctUntilChanged()));
orderItems$ = this.store.orderItems$.pipe(shareReplay(1));
@@ -89,8 +89,6 @@ export class PickupShelfInDetailsComponent extends PickupShelfDetailsBaseCompone
displayedCompartmentInfo$ = this.store.compartmentInfo$;
$selectedOrderItem = toSignal(this.selectedItem$);
latestCompartmentInfos$ = this.store.latestCompartmentCodeAndInfoForOrder$;
latestDisplayedCompartmentInfos$ = this.latestCompartmentInfos$.pipe(
@@ -106,6 +104,14 @@ export class PickupShelfInDetailsComponent extends PickupShelfDetailsBaseCompone
map(([compartmentInfo, changeActionDisabled]) => !!compartmentInfo || changeActionDisabled),
);
customerNumberAndSelevtedOrderItemIdsChanges$ = combineLatest([this.store.customerNumber$, this.store.selectedOrderItem$]).pipe(
filter(([_, selectedOrderItem]) => !!selectedOrderItem),
distinctUntilChanged((a, b) => isEqual(a, b)),
map(([customerNumber, selectedOrderItem]) => ({ customerNumber, selectedOrderItem })),
);
$customerNumberAndSelevtedOrderItemIdsChanges = toSignal(this.customerNumberAndSelevtedOrderItemIdsChanges$);
constructor(
private _uiModal: UiModalService,
private _activatedRoute: ActivatedRoute,
@@ -113,8 +119,7 @@ export class PickupShelfInDetailsComponent extends PickupShelfDetailsBaseCompone
super();
effect(() => {
const customerNumber = this.$customerNumber();
this.$selectedOrderItem();
const { customerNumber } = this.$customerNumberAndSelevtedOrderItemIdsChanges();
if (customerNumber) {
untracked(() => {

View File

@@ -20,7 +20,7 @@ import {
} from '@swagger/oms';
import { PickupShelfIOService, PickupShelfService } from '@domain/pickup-shelf';
import { Injectable, inject } from '@angular/core';
import { delayWhen, distinctUntilChanged, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
import { distinctUntilChanged, filter, map, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';
import { UiModalService } from '@ui/modal';
import { CrmCustomerService } from '@domain/crm';
import * as Selectors from './pickup-shelf-details.selectors';