@universis/common
Version:
Universis - common directives and services
71 lines (70 loc) • 6.28 kB
JavaScript
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { uniqBy, slice } from 'lodash';
import { BehaviorSubject } from 'rxjs';
/**
* UserActivityService
*
* Handles the user activity tracking.
*
*/
export class UserActivityService {
constructor() {
this.maxItems = 10;
this.list = [];
this.userActivityEntries$ = new BehaviorSubject([]);
}
/**
*
* Adds a single item at the userActivity service.
*
* @param {UserActivityEntry} entry The entry to be written
*
*/
setItem(entry) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
if (!entry) {
throw new Error('Entry may not be null');
}
if (!entry.url) {
throw new Error('Entry URL may not be empty');
}
const snapshot = [...this.list];
snapshot.unshift(entry);
const filteredList = uniqBy(snapshot, ({ url }) => url);
const limitedList = slice(filteredList, 0, this.maxItems);
this.list = limitedList;
if (this.userActivityEntries$) {
this.userActivityEntries$.next(limitedList);
}
});
}
/**
*
* Get the list of the user activity.
*
* @returns {Array<UserActivityEntry>} The list of the entries
*
*/
getItems() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return this.list;
});
}
/**
*
* Get the list of the user activity as observable
*
*/
getItemsAsObservable() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return this.userActivityEntries$.asObservable();
});
}
}
UserActivityService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
UserActivityService.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hY3Rpdml0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9jb21tb24vIiwic291cmNlcyI6WyJzaGFyZWQvc2VydmljZXMvdXNlci1hY3Rpdml0eS91c2VyLWFjdGl2aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQWlCbkQ7Ozs7O0dBS0c7QUFHSCxNQUFNO0lBT0o7UUFKVSxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsU0FBSSxHQUE2QixFQUFFLENBQUM7UUFJNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDVSxPQUFPLENBQUMsS0FBd0I7O1lBRTNDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQzFDO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQy9DO1lBRUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXhCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7WUFFeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDN0M7UUFDSCxDQUFDO0tBQUE7SUFFRDs7Ozs7O09BTUc7SUFDVSxRQUFROztZQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNVLG9CQUFvQjs7WUFDL0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsQ0FBQztLQUFBOzs7WUEzREYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXFCeSwgc2xpY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICpcbiAqIEBpbnRlcmZhY2UgVXNlckFjdGl2aXR5RW50cnlcbiAqXG4gKiBVc2VyQWN0aXZpdHlFbnRyeSBpcyBhIHNpbmdsZSBlbnRyeSBhdCB0aGUgdXNlciBhY3Rpdml0eSBsaXN0XG4gKlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVXNlckFjdGl2aXR5RW50cnkge1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgZGF0ZUNyZWF0ZWQ6IERhdGU7XG59XG5cblxuLyoqXG4gKiBVc2VyQWN0aXZpdHlTZXJ2aWNlXG4gKlxuICogSGFuZGxlcyB0aGUgdXNlciBhY3Rpdml0eSB0cmFja2luZy5cbiAqXG4gKi9cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJBY3Rpdml0eVNlcnZpY2Uge1xuXG4gIHByb3RlY3RlZCB1c2VyQWN0aXZpdHlFbnRyaWVzJDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PFVzZXJBY3Rpdml0eUVudHJ5Pj47XG4gIHByb3RlY3RlZCBtYXhJdGVtcyA9IDEwO1xuICBwcm90ZWN0ZWQgbGlzdDogQXJyYXk8VXNlckFjdGl2aXR5RW50cnk+ID0gW107XG5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnVzZXJBY3Rpdml0eUVudHJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQWRkcyBhIHNpbmdsZSBpdGVtIGF0IHRoZSB1c2VyQWN0aXZpdHkgc2VydmljZS5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQWN0aXZpdHlFbnRyeX0gZW50cnkgVGhlIGVudHJ5IHRvIGJlIHdyaXR0ZW5cbiAgICpcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRJdGVtKGVudHJ5OiBVc2VyQWN0aXZpdHlFbnRyeSk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRyeSBtYXkgbm90IGJlIG51bGwnKTtcbiAgICB9XG5cbiAgICBpZiAoIWVudHJ5LnVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRyeSBVUkwgbWF5IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNuYXBzaG90ID0gWy4uLnRoaXMubGlzdF07XG4gICAgc25hcHNob3QudW5zaGlmdChlbnRyeSk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZExpc3QgPSB1bmlxQnkoc25hcHNob3QsICh7IHVybCB9KSA9PiB1cmwpO1xuICAgIGNvbnN0IGxpbWl0ZWRMaXN0ID0gc2xpY2UoZmlsdGVyZWRMaXN0LCAwLCB0aGlzLm1heEl0ZW1zKTtcbiAgICB0aGlzLmxpc3QgPSBsaW1pdGVkTGlzdDtcblxuICAgIGlmICh0aGlzLnVzZXJBY3Rpdml0eUVudHJpZXMkKSB7XG4gICAgICB0aGlzLnVzZXJBY3Rpdml0eUVudHJpZXMkLm5leHQobGltaXRlZExpc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgdGhlIHVzZXIgYWN0aXZpdHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheTxVc2VyQWN0aXZpdHlFbnRyeT59IFRoZSBsaXN0IG9mIHRoZSBlbnRyaWVzXG4gICAqXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SXRlbXMoKTogUHJvbWlzZTxBcnJheTxVc2VyQWN0aXZpdHlFbnRyeT4+IHtcbiAgICByZXR1cm4gdGhpcy5saXN0O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEdldCB0aGUgbGlzdCBvZiB0aGUgdXNlciBhY3Rpdml0eSBhcyBvYnNlcnZhYmxlXG4gICAqXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SXRlbXNBc09ic2VydmFibGUoKTogUHJvbWlzZTxPYnNlcnZhYmxlPEFycmF5PFVzZXJBY3Rpdml0eUVudHJ5Pj4+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyQWN0aXZpdHlFbnRyaWVzJC5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuIl19