Enhance PickupShelfInDetailsComponent with signals for order items and optimize fetching logic

This commit is contained in:
Lorenz Hilpert
2024-11-19 16:27:18 +01:00
parent 4b10dd96d9
commit 8900a77d7a
2 changed files with 13 additions and 4 deletions

View File

@@ -1,4 +1,4 @@
import { Component, ChangeDetectionStrategy, inject, OnInit, AfterViewInit, ViewChild, effect } from '@angular/core';
import { Component, ChangeDetectionStrategy, inject, OnInit, AfterViewInit, ViewChild, effect, untracked } from '@angular/core';
import { PickupShelfDetailsBaseComponent } from '../../pickup-shelf-details-base.component';
import { AsyncPipe, NgFor, NgIf } from '@angular/common';
import { PickUpShelfDetailsHeaderComponent } from '../../shared/pickup-shelf-details-header/pickup-shelf-details-header.component';
@@ -56,6 +56,8 @@ export class PickupShelfInDetailsComponent extends PickupShelfDetailsBaseCompone
orderItems$ = this.store.orderItems$.pipe(shareReplay(1));
$orderItems = toSignal(this.orderItems$);
noOrderItemsFound$ = this.store.noOrderItemsFound$;
fetchingOrder$ = this.store.fetchingOrder$;
@@ -110,9 +112,12 @@ export class PickupShelfInDetailsComponent extends PickupShelfDetailsBaseCompone
effect(() => {
const customerNumber = this.$customerNumber();
this.$orderItems();
if (customerNumber) {
this.store.fetchCoverOrderItems(customerNumber);
untracked(() => {
this.store.fetchCoverOrderItems(customerNumber);
});
}
});
}

View File

@@ -19,7 +19,7 @@ import {
} from '@swagger/oms';
import { PickupShelfIOService, PickupShelfService } from '@domain/pickup-shelf';
import { Injectable, inject } from '@angular/core';
import { delayWhen, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
import { delayWhen, distinctUntilChanged, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
import { UiModalService } from '@ui/modal';
import { CrmCustomerService } from '@domain/crm';
import * as Selectors from './pickup-shelf-details.selectors';
@@ -28,6 +28,7 @@ import { CacheService } from '@core/cache';
import { RunCheckTrigger } from '../trigger';
import { DomainReceiptService } from '@domain/oms';
import { PickupShelfStore } from './pickup-shelf.store';
import { isEqual } from 'lodash';
@Injectable()
export class PickupShelfDetailsStore extends ComponentStore<PickupShelfDetailsState> {
@@ -66,7 +67,10 @@ export class PickupShelfDetailsStore extends ComponentStore<PickupShelfDetailsSt
orderItems$ = combineLatest([
this.select(Selectors.selectOrderItems),
this.select((s) => s).pipe(switchMap((s) => this._listStore.itemsForPreview$(s))),
]).pipe(map(([orderItems, itemsForPreview]) => (orderItems?.length ? orderItems : itemsForPreview)));
]).pipe(
map(([orderItems, itemsForPreview]) => (orderItems?.length ? orderItems : itemsForPreview)),
distinctUntilChanged(isEqual),
);
get orderItems() {
const orderItems = this.get(Selectors.selectOrderItems);