UNPKG

@shopgate/pwa-tracking

Version:

Tracking library for the Shopgate Connect PWA.

10 lines 1.7 kB
import'rxjs/add/operator/switchMap';import'rxjs/add/observable/of';import{Observable}from'rxjs/Observable';import{RECEIVE_PAGE_CONFIG}from'@shopgate/engage/core/constants';import{main$,routeDidEnter$,pwaDidAppear$}from'@shopgate/engage/core/streams';import{getIsAppWebViewVisible}from'@shopgate/engage/core/selectors';import{PAGE_PATTERN}from'@shopgate/engage/page/constants';import{getPageConfigById}from'@shopgate/engage/page/selectors';/** * Emits when a "page" was entered. */var pageDidEnter$=routeDidEnter$.filter(function(_ref){var action=_ref.action;return action.route.pattern===PAGE_PATTERN;});/** * Emits when the page route comes active again after a legacy page was active. */var pageRouteReappeared$=pwaDidAppear$.filter(function(_ref2){var action=_ref2.action;return action.route.pattern===PAGE_PATTERN;});var pageConfigReceived$=main$.filter(function(_ref3){var action=_ref3.action;return action.type===RECEIVE_PAGE_CONFIG;});/** * Emits when a "page" was opened, and its config is available. */export var pageIsReady$=pageDidEnter$// Do not track while PWA webview is in the background .filter(function(_ref4){var getState=_ref4.getState;return getIsAppWebViewVisible(getState());}).switchMap(function(data){var action=data.action,getState=data.getState;var pageId=action.route.params.pageId;// Check if the page config for the current route is already available within Redux. var pageConfig=getPageConfigById(getState(),{pageId:pageId});if(!pageConfig||pageConfig.isFetching){// Wait for incoming page data if it's not available yet. return pageConfigReceived$.first().switchMap(function(){return Observable.of(data);});}return Observable.of(data);}).merge(pageRouteReappeared$);