ngx-hotjar
Version:
A simple ng wrapper to load hotjar dependency by angular way
41 lines • 5.24 kB
JavaScript
import { __awaiter } from "tslib";
import { APP_BOOTSTRAP_LISTENER } from '@angular/core';
import { Router, NavigationEnd } from '@angular/router';
import { NgxHotjarService } from '../services/ngx-hotjar.service';
/**
* Provide a DI Configuration to attach Hotjar Trigger to Router Events at Angular Startup Cycle.
*/
export const NGX_HOTJAR_ROUTER_INITIALIZER_PROVIDER = {
provide: APP_BOOTSTRAP_LISTENER,
multi: true,
useFactory: HotjarRouterInitializer,
deps: [
NgxHotjarService
]
};
/**
* Attach a listener to `NavigationEnd` Router event. So, every time Router finish the page resolution it should call `NavigationEnd` event.
* We assume that NavigationEnd is the final page resolution and call Hotjar `stateChange` command.
*
* To avoid double binds, we also destroy the subscription when de Bootstrap Component is destroied. But, we don't know for sure
* that this strategy does not cause double bind on multiple bootstrap components.
*
* We are using de component's injector reference to resolve Router, sou I hope there is no problem w/ double bing.
*
* If you have this problem, I encourage not Use NgxHotjarRouterModule and atach the listener on AppComponent initialization.
*/
export function HotjarRouterInitializer(hjService) {
return (c) => __awaiter(this, void 0, void 0, function* () {
const router = c.injector.get(Router);
const subs = router
.events
.subscribe(event => {
if (event instanceof NavigationEnd) {
hjService.stateChange(event.urlAfterRedirects);
}
});
// Cleanup
c.onDestroy(() => subs.unsubscribe());
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90amFyLXJvdXRlci5pbml0aWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ob3RqYXIvc3JjL2xpYi9pbml0aWFsaXplcnMvaG90amFyLXJvdXRlci5pbml0aWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFZLHNCQUFzQixFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQWE7SUFDOUQsT0FBTyxFQUFFLHNCQUFzQjtJQUMvQixLQUFLLEVBQUUsSUFBSTtJQUNYLFVBQVUsRUFBRSx1QkFBdUI7SUFDbkMsSUFBSSxFQUFFO1FBQ0osZ0JBQWdCO0tBQ2pCO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFNBQTJCO0lBRTNCLE9BQU8sQ0FBTyxDQUFvQixFQUFFLEVBQUU7UUFDcEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTTthQUNoQixNQUFNO2FBQ04sU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDbEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUNoRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsVUFBVTtRQUNWLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFBLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIsIEFQUF9CT09UU1RSQVBfTElTVEVORVIsIENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE5neEhvdGphclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZ3gtaG90amFyLnNlcnZpY2UnO1xuXG4vKipcbiAqIFByb3ZpZGUgYSBESSBDb25maWd1cmF0aW9uIHRvIGF0dGFjaCBIb3RqYXIgVHJpZ2dlciB0byBSb3V0ZXIgRXZlbnRzIGF0IEFuZ3VsYXIgU3RhcnR1cCBDeWNsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE5HWF9IT1RKQVJfUk9VVEVSX0lOSVRJQUxJWkVSX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQVBQX0JPT1RTVFJBUF9MSVNURU5FUixcbiAgbXVsdGk6IHRydWUsXG4gIHVzZUZhY3Rvcnk6IEhvdGphclJvdXRlckluaXRpYWxpemVyLFxuICBkZXBzOiBbXG4gICAgTmd4SG90amFyU2VydmljZVxuICBdXG59O1xuXG4vKipcbiAqIEF0dGFjaCBhIGxpc3RlbmVyIHRvIGBOYXZpZ2F0aW9uRW5kYCBSb3V0ZXIgZXZlbnQuIFNvLCBldmVyeSB0aW1lIFJvdXRlciBmaW5pc2ggdGhlIHBhZ2UgcmVzb2x1dGlvbiBpdCBzaG91bGQgY2FsbCBgTmF2aWdhdGlvbkVuZGAgZXZlbnQuXG4gKiBXZSBhc3N1bWUgdGhhdCBOYXZpZ2F0aW9uRW5kIGlzIHRoZSBmaW5hbCBwYWdlIHJlc29sdXRpb24gYW5kIGNhbGwgSG90amFyIGBzdGF0ZUNoYW5nZWAgY29tbWFuZC5cbiAqXG4gKiBUbyBhdm9pZCBkb3VibGUgYmluZHMsIHdlIGFsc28gZGVzdHJveSB0aGUgc3Vic2NyaXB0aW9uIHdoZW4gZGUgQm9vdHN0cmFwIENvbXBvbmVudCBpcyBkZXN0cm9pZWQuIEJ1dCwgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZVxuICogdGhhdCB0aGlzIHN0cmF0ZWd5IGRvZXMgbm90IGNhdXNlIGRvdWJsZSBiaW5kIG9uIG11bHRpcGxlIGJvb3RzdHJhcCBjb21wb25lbnRzLlxuICpcbiAqIFdlIGFyZSB1c2luZyBkZSBjb21wb25lbnQncyBpbmplY3RvciByZWZlcmVuY2UgdG8gcmVzb2x2ZSBSb3V0ZXIsIHNvdSBJIGhvcGUgdGhlcmUgaXMgbm8gcHJvYmxlbSB3LyBkb3VibGUgYmluZy5cbiAqXG4gKiBJZiB5b3UgaGF2ZSB0aGlzIHByb2JsZW0sIEkgZW5jb3VyYWdlIG5vdCBVc2UgTmd4SG90amFyUm91dGVyTW9kdWxlIGFuZCBhdGFjaCB0aGUgbGlzdGVuZXIgb24gQXBwQ29tcG9uZW50IGluaXRpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSG90amFyUm91dGVySW5pdGlhbGl6ZXIoXG4gIGhqU2VydmljZTogTmd4SG90amFyU2VydmljZVxuKSB7XG4gIHJldHVybiBhc3luYyAoYzogQ29tcG9uZW50UmVmPGFueT4pID0+IHtcbiAgICBjb25zdCByb3V0ZXIgPSBjLmluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIGNvbnN0IHN1YnMgPSByb3V0ZXJcbiAgICAgIC5ldmVudHNcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgaGpTZXJ2aWNlLnN0YXRlQ2hhbmdlKGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgLy8gQ2xlYW51cFxuICAgIGMub25EZXN0cm95KCgpID0+IHN1YnMudW5zdWJzY3JpYmUoKSk7XG4gIH07XG59XG4iXX0=