Browse Source

fix(admin-ui): Update variant pagination controls when filtering

Michael Bromley 3 years ago
parent
commit
0a4f330b08

+ 16 - 14
packages/admin-ui/src/lib/catalog/src/components/product-detail/product-detail.component.ts

@@ -10,7 +10,6 @@ import {
     createUpdatedTranslatable,
     createUpdatedTranslatable,
     CustomFieldConfig,
     CustomFieldConfig,
     DataService,
     DataService,
-    FacetValueFragment,
     findTranslation,
     findTranslation,
     getChannelCodeFromUserStatus,
     getChannelCodeFromUserStatus,
     GetProductWithVariants,
     GetProductWithVariants,
@@ -40,7 +39,6 @@ import { BehaviorSubject, combineLatest, concat, EMPTY, from, merge, Observable
 import {
 import {
     debounceTime,
     debounceTime,
     distinctUntilChanged,
     distinctUntilChanged,
-    filter,
     map,
     map,
     mergeMap,
     mergeMap,
     shareReplay,
     shareReplay,
@@ -52,7 +50,6 @@ import {
     take,
     take,
     takeUntil,
     takeUntil,
     tap,
     tap,
-    withLatestFrom,
 } from 'rxjs/operators';
 } from 'rxjs/operators';
 
 
 import { ProductDetailService } from '../../providers/product-detail/product-detail.service';
 import { ProductDetailService } from '../../providers/product-detail/product-detail.service';
@@ -164,24 +161,17 @@ export class ProductDetailComponent
     ngOnInit() {
     ngOnInit() {
         this.init();
         this.init();
         this.product$ = this.entity$;
         this.product$ = this.entity$;
-        this.totalItems$ = this.product$.pipe(map(product => product.variantList.totalItems));
-        this.paginationConfig$ = combineLatest(this.totalItems$, this.itemsPerPage$, this.currentPage$).pipe(
-            map(([totalItems, itemsPerPage, currentPage]) => ({
-                totalItems,
-                itemsPerPage,
-                currentPage,
-            })),
-        );
-        const variants$ = this.product$.pipe(map(product => product.variantList.items));
         const filterTerm$ = this.filterInput.valueChanges.pipe(
         const filterTerm$ = this.filterInput.valueChanges.pipe(
             startWith(''),
             startWith(''),
             debounceTime(200),
             debounceTime(200),
             shareReplay(),
             shareReplay(),
+            tap(() => this.currentPage$.next(1)),
         );
         );
         const initialVariants$ = this.product$.pipe(map(p => p.variantList.items));
         const initialVariants$ = this.product$.pipe(map(p => p.variantList.items));
-        const updatedVariants$ = combineLatest(filterTerm$, this.currentPage$, this.itemsPerPage$).pipe(
+        const variantsList$ = combineLatest(filterTerm$, this.currentPage$, this.itemsPerPage$).pipe(
             skipUntil(initialVariants$),
             skipUntil(initialVariants$),
             skip(1),
             skip(1),
+            debounceTime(100),
             switchMap(([term, currentPage, itemsPerPage]) => {
             switchMap(([term, currentPage, itemsPerPage]) => {
                 return this.dataService.product
                 return this.dataService.product
                     .getProductVariants(
                     .getProductVariants(
@@ -195,10 +185,11 @@ export class ProductDetailComponent
                         },
                         },
                         this.id,
                         this.id,
                     )
                     )
-                    .mapStream(({ productVariants }) => productVariants.items);
+                    .mapStream(({ productVariants }) => productVariants);
             }),
             }),
             shareReplay({ bufferSize: 1, refCount: true }),
             shareReplay({ bufferSize: 1, refCount: true }),
         );
         );
+        const updatedVariants$ = variantsList$.pipe(map(result => result.items));
         this.variants$ = merge(initialVariants$, updatedVariants$).pipe(
         this.variants$ = merge(initialVariants$, updatedVariants$).pipe(
             tap(variants => {
             tap(variants => {
                 for (const variant of variants) {
                 for (const variant of variants) {
@@ -206,6 +197,17 @@ export class ProductDetailComponent
                 }
                 }
             }),
             }),
         );
         );
+        this.totalItems$ = merge(
+            this.product$.pipe(map(product => product.variantList.totalItems)),
+            variantsList$.pipe(map(result => result.totalItems)),
+        );
+        this.paginationConfig$ = combineLatest(this.totalItems$, this.itemsPerPage$, this.currentPage$).pipe(
+            map(([totalItems, itemsPerPage, currentPage]) => ({
+                totalItems,
+                itemsPerPage,
+                currentPage,
+            })),
+        );
         this.taxCategories$ = this.productDetailService.getTaxCategories().pipe(takeUntil(this.destroy$));
         this.taxCategories$ = this.productDetailService.getTaxCategories().pipe(takeUntil(this.destroy$));
         this.activeTab$ = this.route.paramMap.pipe(map(qpm => qpm.get('tab') as any));
         this.activeTab$ = this.route.paramMap.pipe(map(qpm => qpm.get('tab') as any));