Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x | import { ViewportScroller } from '@angular/common';
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
import { ActivationStart, NavigationEnd, NavigationStart, Router } from '@angular/router';
import { Observable, combineLatest } from 'rxjs';
import { debounce, filter, map, takeUntil } from 'rxjs/operators';
import { ProductContextFacade } from 'ish-core/facades/product-context.facade';
import { ProductHelper } from 'ish-core/models/product/product.model';
@Component({
selector: 'ish-product-master-variations',
templateUrl: './product-master-variations.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
})
// eslint-disable-next-line rxjs-angular/prefer-takeuntil
export class ProductMasterVariationsComponent implements OnInit {
sku$: Observable<string>;
categoryId$: Observable<string>;
hasVariations$: Observable<boolean>;
constructor(private router: Router, private scroller: ViewportScroller, private context: ProductContextFacade) {}
ngOnInit() {
this.sku$ = this.context.select('product', 'sku');
this.categoryId$ = this.context.select('categoryId');
this.hasVariations$ = combineLatest([
this.context.select('product').pipe(map(product => ProductHelper.isMasterProduct(product))),
this.context.select('variations').pipe(map(variations => variations?.length > 0)),
]).pipe(map(([isMaster, hasVariations]) => isMaster && hasVariations));
this.router.events
.pipe(
// start when navigated
filter(event => event instanceof NavigationStart),
// remember current scroll position
map(() => this.scroller.getScrollPosition()),
// wait till navigation end
debounce(() => this.router.events.pipe(filter(event => event instanceof NavigationEnd))),
// take until routing away
takeUntil(this.router.events.pipe(filter(event => event instanceof ActivationStart)))
)
// eslint-disable-next-line rxjs-angular/prefer-takeuntil
.subscribe(position => {
this.scroller.scrollToPosition(position);
});
}
}
|