UNPKG

@omostan/ngx-idle

Version:

A module for responding to idle users in Angular applications. this is a forked version of the original @ng-Idle

67 lines 11 kB
import { isPlatformServer } from '@angular/common'; import { Subscription, fromEvent, merge } from 'rxjs'; import { filter, throttleTime } from 'rxjs/operators'; import { InterruptArgs } from './interruptargs'; import { InterruptSource } from './interruptsource'; const defaultThrottleDelay = 500; /* * An interrupt source on an EventTarget object, such as a Window or HTMLElement. */ export class EventTargetInterruptSource extends InterruptSource { constructor(target, events, opts) { super(null, null); this.target = target; this.events = events; this.opts = opts; this.eventSubscription = new Subscription(); if (typeof this.opts === 'number') { this.opts = { throttleDelay: this.opts, passive: false }; } this.opts = this.opts || { passive: false, throttleDelay: defaultThrottleDelay }; if (this.opts.throttleDelay === undefined || this.opts.throttleDelay === null) { this.opts.throttleDelay = defaultThrottleDelay; } this.throttleDelay = this.opts.throttleDelay; this.passive = !!this.opts.passive; } initialize(options) { if (options?.platformId && isPlatformServer(options.platformId)) { return; } const eventTarget = typeof this.target === 'function' ? this.target() : this.target; const opts = this.passive ? { passive: true } : null; const fromEvents = this.events .split(' ') .map(eventName => fromEvent(eventTarget, eventName, opts)); this.eventSrc = merge(...fromEvents); this.eventSrc = this.eventSrc.pipe(filter(innerArgs => !this.filterEvent(innerArgs))); if (this.throttleDelay > 0) { this.eventSrc = this.eventSrc.pipe(throttleTime(this.throttleDelay)); } const handler = (innerArgs) => this.onInterrupt.emit(new InterruptArgs(this, innerArgs)); this.attachFn = () => (this.eventSubscription = this.eventSrc.subscribe(handler)); this.detachFn = () => this.eventSubscription.unsubscribe(); } /* * Checks to see if the event should be filtered. Always returns false unless overriden. * @param event - The original event object. * @return True if the event should be filtered (don't cause an interrupt); otherwise, false. */ filterEvent(event) { return false; } /** * Returns the current options being used. * @return The current option values. */ get options() { return { passive: this.passive, throttleDelay: this.throttleDelay }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnR0YXJnZXRpbnRlcnJ1cHRzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvZXZlbnR0YXJnZXRpbnRlcnJ1cHRzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFjLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWtCcEQsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsZUFBZTtJQU03RCxZQUNZLE1BQW1ELEVBQ25ELE1BQWMsRUFDaEIsSUFBMkM7UUFFbkQsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUpSLFdBQU0sR0FBTixNQUFNLENBQTZDO1FBQ25ELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBdUM7UUFQN0Msc0JBQWlCLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFXM0QsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDMUQ7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUk7WUFDdkIsT0FBTyxFQUFFLEtBQUs7WUFDZCxhQUFhLEVBQUUsb0JBQW9CO1NBQ3BDLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUM7U0FDaEQ7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBMEI7UUFDbkMsSUFBSSxPQUFPLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDcEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTTthQUMzQixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQWtCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDdEU7UUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQWMsRUFBRSxFQUFFLENBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQ25CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxXQUFXLENBQUMsS0FBVTtRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEV2ZW50VGFyZ2V0IH0gZnJvbSAnLi9ldmVudHRhcmdldCc7XHJcbmltcG9ydCB7IEludGVycnVwdEFyZ3MgfSBmcm9tICcuL2ludGVycnVwdGFyZ3MnO1xyXG5pbXBvcnQgeyBJbnRlcnJ1cHRPcHRpb25zIH0gZnJvbSAnLi9pbnRlcnJ1cHRvcHRpb25zJztcclxuaW1wb3J0IHsgSW50ZXJydXB0U291cmNlIH0gZnJvbSAnLi9pbnRlcnJ1cHRzb3VyY2UnO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIEV2ZW50VGFyZ2V0SW50ZXJydXB0U291cmNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VGFyZ2V0SW50ZXJydXB0T3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgdGhlIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgdGFyZ2V0LlxyXG4gICAqL1xyXG4gIHRocm90dGxlRGVsYXk/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycy5cclxuICAgKiBOb3RlOiB5b3UgbmVlZCB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgcGFzc2l2ZSBsaXN0ZW5lcnMsIGFuZCBvbmx5IHNldCB0aGlzIHRvIHRydWUgaWYgaXQgZG9lcy5cclxuICAgKi9cclxuICBwYXNzaXZlPzogYm9vbGVhbjtcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFRocm90dGxlRGVsYXkgPSA1MDA7XHJcblxyXG4vKlxyXG4gKiBBbiBpbnRlcnJ1cHQgc291cmNlIG9uIGFuIEV2ZW50VGFyZ2V0IG9iamVjdCwgc3VjaCBhcyBhIFdpbmRvdyBvciBIVE1MRWxlbWVudC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBFdmVudFRhcmdldEludGVycnVwdFNvdXJjZSBleHRlbmRzIEludGVycnVwdFNvdXJjZSB7XHJcbiAgcHJpdmF0ZSBldmVudFNyYzogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHByaXZhdGUgZXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBwcm90ZWN0ZWQgdGhyb3R0bGVEZWxheTogbnVtYmVyO1xyXG4gIHByb3RlY3RlZCBwYXNzaXZlOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB0YXJnZXQ6IEV2ZW50VGFyZ2V0PGFueT4gfCAoKCkgPT4gRXZlbnRUYXJnZXQ8YW55PiksXHJcbiAgICBwcm90ZWN0ZWQgZXZlbnRzOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIG9wdHM/OiBudW1iZXIgfCBFdmVudFRhcmdldEludGVycnVwdE9wdGlvbnNcclxuICApIHtcclxuICAgIHN1cGVyKG51bGwsIG51bGwpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aGlzLm9wdHMgPSB7IHRocm90dGxlRGVsYXk6IHRoaXMub3B0cywgcGFzc2l2ZTogZmFsc2UgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge1xyXG4gICAgICBwYXNzaXZlOiBmYWxzZSxcclxuICAgICAgdGhyb3R0bGVEZWxheTogZGVmYXVsdFRocm90dGxlRGVsYXlcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMub3B0cy50aHJvdHRsZURlbGF5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5vcHRzLnRocm90dGxlRGVsYXkgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5vcHRzLnRocm90dGxlRGVsYXkgPSBkZWZhdWx0VGhyb3R0bGVEZWxheTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRocm90dGxlRGVsYXkgPSB0aGlzLm9wdHMudGhyb3R0bGVEZWxheTtcclxuICAgIHRoaXMucGFzc2l2ZSA9ICEhdGhpcy5vcHRzLnBhc3NpdmU7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKG9wdGlvbnM/OiBJbnRlcnJ1cHRPcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucz8ucGxhdGZvcm1JZCAmJiBpc1BsYXRmb3JtU2VydmVyKG9wdGlvbnMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gdHlwZW9mIHRoaXMudGFyZ2V0ID09PSAnZnVuY3Rpb24nID8gdGhpcy50YXJnZXQoKSA6IHRoaXMudGFyZ2V0O1xyXG4gICAgY29uc3Qgb3B0cyA9IHRoaXMucGFzc2l2ZSA/IHsgcGFzc2l2ZTogdHJ1ZSB9IDogbnVsbDtcclxuICAgIGNvbnN0IGZyb21FdmVudHMgPSB0aGlzLmV2ZW50c1xyXG4gICAgICAuc3BsaXQoJyAnKVxyXG4gICAgICAubWFwKGV2ZW50TmFtZSA9PiBmcm9tRXZlbnQoZXZlbnRUYXJnZXQgYXMgYW55LCBldmVudE5hbWUsIG9wdHMpKTtcclxuICAgIHRoaXMuZXZlbnRTcmMgPSBtZXJnZSguLi5mcm9tRXZlbnRzKTtcclxuICAgIHRoaXMuZXZlbnRTcmMgPSB0aGlzLmV2ZW50U3JjLnBpcGUoXHJcbiAgICAgIGZpbHRlcihpbm5lckFyZ3MgPT4gIXRoaXMuZmlsdGVyRXZlbnQoaW5uZXJBcmdzKSlcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy50aHJvdHRsZURlbGF5ID4gMCkge1xyXG4gICAgICB0aGlzLmV2ZW50U3JjID0gdGhpcy5ldmVudFNyYy5waXBlKHRocm90dGxlVGltZSh0aGlzLnRocm90dGxlRGVsYXkpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoYW5kbGVyID0gKGlubmVyQXJnczogYW55KSA9PlxyXG4gICAgICB0aGlzLm9uSW50ZXJydXB0LmVtaXQobmV3IEludGVycnVwdEFyZ3ModGhpcywgaW5uZXJBcmdzKSk7XHJcblxyXG4gICAgdGhpcy5hdHRhY2hGbiA9ICgpID0+XHJcbiAgICAgICh0aGlzLmV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFNyYy5zdWJzY3JpYmUoaGFuZGxlcikpO1xyXG5cclxuICAgIHRoaXMuZGV0YWNoRm4gPSAoKSA9PiB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGV2ZW50IHNob3VsZCBiZSBmaWx0ZXJlZC4gQWx3YXlzIHJldHVybnMgZmFsc2UgdW5sZXNzIG92ZXJyaWRlbi5cclxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgb3JpZ2luYWwgZXZlbnQgb2JqZWN0LlxyXG4gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZXZlbnQgc2hvdWxkIGJlIGZpbHRlcmVkIChkb24ndCBjYXVzZSBhbiBpbnRlcnJ1cHQpOyBvdGhlcndpc2UsIGZhbHNlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJFdmVudChldmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG9wdGlvbnMgYmVpbmcgdXNlZC5cclxuICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IG9wdGlvbiB2YWx1ZXMuXHJcbiAgICovXHJcbiAgZ2V0IG9wdGlvbnMoKTogRXZlbnRUYXJnZXRJbnRlcnJ1cHRPcHRpb25zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhc3NpdmU6IHRoaXMucGFzc2l2ZSxcclxuICAgICAgdGhyb3R0bGVEZWxheTogdGhpcy50aHJvdHRsZURlbGF5XHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=