UNPKG

@shopgate/pwa-common

Version:

Common library for the Shopgate Connect PWA.

12 lines 1.44 kB
import{Observable}from'rxjs/Observable';import{Subject}from'rxjs/Subject';import{async as asyncScheduler}from'rxjs/scheduler/async';import'rxjs/add/observable/from';import'rxjs/add/observable/fromEvent';import'rxjs/add/operator/do';import'rxjs/add/operator/throttleTime';export var eventsSubject=new Subject();/** * Cold observable for View scroll events * @type {Observable} */export var viewScroll$=Observable.from(eventsSubject);/** * @param {HTMLElement} element . * @param {number} throttleTime . * @returns {Observable} */export var emitScrollEvents=function emitScrollEvents(element){var throttleTime=arguments.length>1&&arguments[1]!==undefined?arguments[1]:250;// In rare situation during unmounting a react dom ref might // be null due to the execution order of events in fiber nodes. if(!element){return undefined;}var previousScrollTop=0;var scroll$=Observable.fromEvent(element,'scroll').throttleTime(throttleTime,asyncScheduler,{leading:false,trailing:true}).map(function(event){var scrollTop=element.scrollY||element.scrollTop||0;return{event:event,scrollTop:scrollTop,previousScrollTop:previousScrollTop,scrolled:previousScrollTop!==scrollTop,scrollOut:previousScrollTop<scrollTop,scrollIn:previousScrollTop>=scrollTop};})["do"](function(event){// Remember scroll position for next event previousScrollTop=event.scrollTop;});// Copy all events to viewScroll$ stream scroll$.subscribe(viewScroll$);return scroll$;};