import {Directive, ElementRef, Inject, Renderer2} from '
@angular/core';
import {fromEvent, Observable} from 'rxjs';
import {
distinctUntilChanged,
map,
startWith,
takeUntil,
} from 'rxjs/operators';
import {DestroyService} from './destroy.service';
import {WINDOW} from './window-token';
const THRESHOLD = 180;
@Directive({
selector: '[appScrolled]',
providers: [DestroyService]
})
export class ScrolledDirective {
constructor(
@Inject(DestroyService) destroy$: Observable<void>,
@Inject(WINDOW) windowRef: Window,
renderer: Renderer2,
{nativeElement}: ElementRef<HTMLElement>
) {
fromEvent(windowRef, 'scroll')
.pipe(
map(() => windowRef.scrollY),
// @ts-ignore
map(next => next > (document.getElementById('hero').getBoundingClientRect().top + pageYOffset + THRESHOLD)),
distinctUntilChanged(),
startWith(true),
takeUntil(destroy$)
).subscribe(scrolled => {
renderer.setAttribute(nativeElement, 'data-scrolled', String(scrolled));
});
}
}