mirror of
https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend
synced 2025-12-28 22:42:11 +01:00
#4752 Performance in der WA verbessert -> Details Seite
This commit is contained in:
@@ -46,7 +46,9 @@ export class PickupShelfOutDetailsComponent extends PickupShelfDetailsBaseCompon
|
|||||||
|
|
||||||
order$ = this.store.order$;
|
order$ = this.store.order$;
|
||||||
|
|
||||||
groupedItems$: Observable<Array<{ type: string; items: DBHOrderItemListItemDTO[] }>> = this.store.orderItems$.pipe(
|
orderItems$ = this.store.orderItems$;
|
||||||
|
|
||||||
|
groupedItems$: Observable<Array<{ type: string; items: DBHOrderItemListItemDTO[] }>> = this.orderItems$.pipe(
|
||||||
map((items) => {
|
map((items) => {
|
||||||
const groups: Array<{ type: string; items: DBHOrderItemListItemDTO[] }> = [];
|
const groups: Array<{ type: string; items: DBHOrderItemListItemDTO[] }> = [];
|
||||||
|
|
||||||
@@ -66,10 +68,12 @@ export class PickupShelfOutDetailsComponent extends PickupShelfDetailsBaseCompon
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
fetching$ = this.store.fetchingOrder$;
|
fetchingOrder$ = this.store.fetchingOrder$;
|
||||||
fetchingItems$ = this.store.fetchingOrderItems$;
|
fetchingItems$ = this.store.fetchingOrderItems$;
|
||||||
|
|
||||||
viewFetching$ = combineLatest([this.fetching$, this.fetchingItems$]).pipe(map(([fetching, fetchingItems]) => fetching || fetchingItems));
|
viewFetching$ = combineLatest([this.orderItems$, this.fetchingItems$]).pipe(
|
||||||
|
map(([orderItems, fetchingItems]) => orderItems?.length === 0 && fetchingItems)
|
||||||
|
);
|
||||||
|
|
||||||
selectedCompartmentInfo = this.store.selectedCompartmentInfo;
|
selectedCompartmentInfo = this.store.selectedCompartmentInfo;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { PickupShelfIOService, PickupShelfOutService } from '@domain/pickup-shel
|
|||||||
import { GetNameForBreadcrumbData, GetPathForBreadcrumbData, PickupShelfBaseComponent } from '../pickup-shelf-base.component';
|
import { GetNameForBreadcrumbData, GetPathForBreadcrumbData, PickupShelfBaseComponent } from '../pickup-shelf-base.component';
|
||||||
import { NavigationRoute, PickUpShelfOutNavigationService } from '@shared/services';
|
import { NavigationRoute, PickUpShelfOutNavigationService } from '@shared/services';
|
||||||
import { AsyncPipe } from '@angular/common';
|
import { AsyncPipe } from '@angular/common';
|
||||||
import { DBHOrderItemListItemDTO, ListResponseArgsOfDBHOrderItemListItemDTO } from '@swagger/oms';
|
import { DBHOrderItemListItemDTO } from '@swagger/oms';
|
||||||
import { Observable, of } from 'rxjs';
|
import { Observable, of } from 'rxjs';
|
||||||
import { take } from 'rxjs/operators';
|
import { take } from 'rxjs/operators';
|
||||||
import { provideActionHandlers } from '@core/command';
|
import { provideActionHandlers } from '@core/command';
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
<div class="flex flex-row font-bold">
|
<div class="flex flex-row font-bold">
|
||||||
<shared-skeleton-loader class="w-32" *ngIf="fetchingOrder$ | async; else orderSourceTmpl"></shared-skeleton-loader>
|
<shared-skeleton-loader class="w-32" *ngIf="fetchingOrder$ | async; else orderSourceTmpl"></shared-skeleton-loader>
|
||||||
<ng-template #orderSourceTmpl>
|
<ng-template #orderSourceTmpl>
|
||||||
{{ order?.features?.orderSource }}
|
{{ order()?.features?.orderSource }}
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { PickupShelfProcessingStatusPipe } from '../pipes/processing-status.pipe
|
|||||||
import { UiDatepickerModule } from '@ui/datepicker';
|
import { UiDatepickerModule } from '@ui/datepicker';
|
||||||
import { PickUpShelfDetailsHeaderNavMenuComponent } from '../pickup-shelf-details-header-nav-menu/pickup-shelf-details-header-nav-menu.component';
|
import { PickUpShelfDetailsHeaderNavMenuComponent } from '../pickup-shelf-details-header-nav-menu/pickup-shelf-details-header-nav-menu.component';
|
||||||
import { SkeletonLoaderComponent } from '@shared/components/loader';
|
import { SkeletonLoaderComponent } from '@shared/components/loader';
|
||||||
|
import { toSignal } from '@angular/core/rxjs-interop';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'page-pickup-shelf-details-header',
|
selector: 'page-pickup-shelf-details-header',
|
||||||
@@ -54,13 +55,9 @@ export class PickUpShelfDetailsHeaderComponent {
|
|||||||
|
|
||||||
fetchingOrder$ = this._store.fetchingOrder$;
|
fetchingOrder$ = this._store.fetchingOrder$;
|
||||||
|
|
||||||
get order$(): Observable<OrderDTO> {
|
order$ = this._store.order$;
|
||||||
return this._store.order$;
|
|
||||||
}
|
|
||||||
|
|
||||||
get order(): OrderDTO {
|
order = toSignal(this.order$);
|
||||||
return this._store.order;
|
|
||||||
}
|
|
||||||
|
|
||||||
findLatestPreferredPickUpDate$: Observable<Date> = this.order$.pipe(
|
findLatestPreferredPickUpDate$: Observable<Date> = this.order$.pipe(
|
||||||
withLatestFrom(this._store.selectedOrderItemIds$),
|
withLatestFrom(this._store.selectedOrderItemIds$),
|
||||||
@@ -90,7 +87,7 @@ export class PickUpShelfDetailsHeaderComponent {
|
|||||||
processId?: number;
|
processId?: number;
|
||||||
|
|
||||||
get isKulturpass() {
|
get isKulturpass() {
|
||||||
return this.order?.features?.orderSource === 'KulturPass';
|
return this.order()?.features?.orderSource === 'KulturPass';
|
||||||
}
|
}
|
||||||
|
|
||||||
minDateDatepicker = this.dateAdapter.addCalendarDays(this.dateAdapter.today(), -1);
|
minDateDatepicker = this.dateAdapter.addCalendarDays(this.dateAdapter.today(), -1);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ComponentStore, tapResponse } from '@ngrx/component-store';
|
import { ComponentStore, tapResponse } from '@ngrx/component-store';
|
||||||
import { PickupShelfDetailsState } from './pickup-shelf-details.state';
|
import { PickupShelfDetailsState } from './pickup-shelf-details.state';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable, combineLatest } from 'rxjs';
|
||||||
import {
|
import {
|
||||||
DBHOrderItemListItemDTO,
|
DBHOrderItemListItemDTO,
|
||||||
EntityDTOContainerOfOrderItemSubsetDTO,
|
EntityDTOContainerOfOrderItemSubsetDTO,
|
||||||
@@ -18,7 +18,7 @@ import {
|
|||||||
} from '@swagger/oms';
|
} from '@swagger/oms';
|
||||||
import { PickupShelfIOService, PickupShelfService } from '@domain/pickup-shelf';
|
import { PickupShelfIOService, PickupShelfService } from '@domain/pickup-shelf';
|
||||||
import { Injectable, inject } from '@angular/core';
|
import { Injectable, inject } from '@angular/core';
|
||||||
import { delayWhen, filter, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
|
import { delayWhen, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
|
||||||
import { UiModalService } from '@ui/modal';
|
import { UiModalService } from '@ui/modal';
|
||||||
import { CrmCustomerService } from '@domain/crm';
|
import { CrmCustomerService } from '@domain/crm';
|
||||||
import * as Selectors from './pickup-shelf-details.selectors';
|
import * as Selectors from './pickup-shelf-details.selectors';
|
||||||
@@ -56,10 +56,20 @@ export class PickupShelfDetailsStore extends ComponentStore<PickupShelfDetailsSt
|
|||||||
return this.get(Selectors.selectFetchingOrder);
|
return this.get(Selectors.selectFetchingOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
orderItems$ = this.select(Selectors.selectOrderItems);
|
// orderItems$ = this.select(Selectors.selectOrderItems);
|
||||||
|
|
||||||
|
// get orderItems() {
|
||||||
|
// return this.get(Selectors.selectOrderItems);
|
||||||
|
// }
|
||||||
|
|
||||||
|
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)));
|
||||||
|
|
||||||
get orderItems() {
|
get orderItems() {
|
||||||
return this.get(Selectors.selectOrderItems);
|
const orderItems = this.get(Selectors.selectOrderItems);
|
||||||
|
return orderItems?.length ? orderItems : this.get((s) => this._listStore.itemsForPreview(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchingOrderItems$ = this.select(Selectors.selectFetchingOrderItems);
|
fetchingOrderItems$ = this.select(Selectors.selectFetchingOrderItems);
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
import { Filter } from '@shared/components/filter';
|
import { Filter } from '@shared/components/filter';
|
||||||
import { PickupShelfState } from './pickup-shelf.state';
|
import { PickupShelfState } from './pickup-shelf.state';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash';
|
||||||
|
import { PickupShelfDetailsState } from './pickup-shelf-details.state';
|
||||||
|
import {
|
||||||
|
selectDisplayedCompartmentCode,
|
||||||
|
selectDisplayedCompartmentInfo,
|
||||||
|
selectDisplayedOrderItemProcessingStatus,
|
||||||
|
selectOrder,
|
||||||
|
} from './pickup-shelf-details.selectors';
|
||||||
|
|
||||||
export function selectProcessId(state: PickupShelfState) {
|
export function selectProcessId(state: PickupShelfState) {
|
||||||
return state.processId;
|
return state.processId;
|
||||||
@@ -64,3 +71,27 @@ export function selectListHits(state: PickupShelfState) {
|
|||||||
export function selectSelectedListItems(state: PickupShelfState) {
|
export function selectSelectedListItems(state: PickupShelfState) {
|
||||||
return state.selectedListItems ?? [];
|
return state.selectedListItems ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const selectItemsForPreview = (detailsState: PickupShelfDetailsState) => (state: PickupShelfState) => {
|
||||||
|
const orderId = selectOrder(detailsState)?.id;
|
||||||
|
|
||||||
|
let items = state.list.filter((item) => item.orderId === orderId);
|
||||||
|
|
||||||
|
const processingStatus = selectDisplayedOrderItemProcessingStatus(detailsState);
|
||||||
|
if (processingStatus) {
|
||||||
|
items = items?.filter((oi) => oi.processingStatus === processingStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
const compartmentCode = selectDisplayedCompartmentCode(detailsState);
|
||||||
|
if (compartmentCode) {
|
||||||
|
items = items?.filter((oi) => oi.compartmentCode === compartmentCode);
|
||||||
|
|
||||||
|
const compartmentInfo = selectDisplayedCompartmentInfo(detailsState);
|
||||||
|
|
||||||
|
if (compartmentInfo) {
|
||||||
|
items = items?.filter((oi) => oi.compartmentInfo === compartmentInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return items;
|
||||||
|
};
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import * as Selectors from './pickup-shelf.selectors';
|
|||||||
import { Observable, Subject, combineLatest } from 'rxjs';
|
import { Observable, Subject, combineLatest } from 'rxjs';
|
||||||
import { CacheService } from '@core/cache';
|
import { CacheService } from '@core/cache';
|
||||||
import { Filter } from '@shared/components/filter';
|
import { Filter } from '@shared/components/filter';
|
||||||
|
import { PickupShelfDetailsState } from './pickup-shelf-details.state';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PickupShelfStore extends ComponentStore<PickupShelfState> implements OnStoreInit {
|
export class PickupShelfStore extends ComponentStore<PickupShelfState> implements OnStoreInit {
|
||||||
@@ -104,6 +105,10 @@ export class PickupShelfStore extends ComponentStore<PickupShelfState> implement
|
|||||||
return this.get(Selectors.selectSelectedListItems);
|
return this.get(Selectors.selectSelectedListItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemsForPreview$ = (state: PickupShelfDetailsState) => this.select(Selectors.selectItemsForPreview(state));
|
||||||
|
|
||||||
|
itemsForPreview = (state: PickupShelfDetailsState) => this.get(Selectors.selectItemsForPreview(state));
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nicht entfernen sonst wird der Store nicht initialisiert
|
// Nicht entfernen sonst wird der Store nicht initialisiert
|
||||||
super({});
|
super({});
|
||||||
|
|||||||
Reference in New Issue
Block a user