UNPKG

ngx-link-preview

Version:

The Open Graph link preview component for Angular 6+

54 lines 5.43 kB
import { BehaviorSubject } from 'rxjs'; export class NgxLinkPreviewLoadingManager { constructor() { /** The loading stack, holding an item for each */ this.loadingStack = []; /** Observable to retrieve if has pending jobs */ this.hasPendingJobs$ = new BehaviorSubject(false); } /** * Add task to stack */ addTask(name) { name = this.getTaskName(name); this.loadingStack.push(name); this.emitHasPendingJobs(); } /** * Remove task from stack */ removeTask(name) { name = this.getTaskName(name); if (this.loadingStack.length) { const taskIndex = this.loadingStack.indexOf(name); if (taskIndex !== -1) { this.loadingStack.splice(taskIndex, 1); } else { console.error(`[NgxLinkPreviewLoadingManager] Task [${name}] not found and can't be removed.`); } } else { console.error('[NgxLinkPreviewLoadingManager] No pending task available for remove'); } this.emitHasPendingJobs(); } /** * Get task name */ getTaskName(name) { return name ? name : 'UNKNOWN_TASK'; } /** * Emit if has loading jobs */ emitHasPendingJobs() { if (this.loadingStack.length) { this.hasPendingJobs$.next(true); } else { this.hasPendingJobs$.next(false); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWxpbmstcHJldmlldy1sb2FkaW5nLm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGluay1wcmV2aWV3L3NyYy9saWIvc2VydmljZXMvbmd4LWxpbmstcHJldmlldy1sb2FkaW5nLm1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxNQUFNLE9BQU8sNEJBQTRCO0lBT3RDO1FBTkEsa0RBQWtEO1FBQzFDLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGlEQUFpRDtRQUMxQyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJDLENBQUM7SUFFaEI7O09BRUc7SUFDSSxPQUFPLENBQUMsSUFBYTtRQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsSUFBYTtRQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekM7aUJBQU07Z0JBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsSUFBSSxtQ0FBbUMsQ0FBQyxDQUFDO2FBQ2pHO1NBQ0g7YUFBTTtZQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUN2RjtRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxJQUFZO1FBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0I7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7SUFDSixDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIE5neExpbmtQcmV2aWV3TG9hZGluZ01hbmFnZXIge1xuICAgLyoqIFRoZSBsb2FkaW5nIHN0YWNrLCBob2xkaW5nIGFuIGl0ZW0gZm9yIGVhY2ggKi9cbiAgIHByaXZhdGUgbG9hZGluZ1N0YWNrOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAvKiogT2JzZXJ2YWJsZSB0byByZXRyaWV2ZSBpZiBoYXMgcGVuZGluZyBqb2JzICovXG4gICBwdWJsaWMgaGFzUGVuZGluZ0pvYnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgLyoqXG4gICAgKiBBZGQgdGFzayB0byBzdGFja1xuICAgICovXG4gICBwdWJsaWMgYWRkVGFzayhuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICBuYW1lID0gdGhpcy5nZXRUYXNrTmFtZShuYW1lKTtcbiAgICAgIHRoaXMubG9hZGluZ1N0YWNrLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLmVtaXRIYXNQZW5kaW5nSm9icygpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIFJlbW92ZSB0YXNrIGZyb20gc3RhY2tcbiAgICAqL1xuICAgcHVibGljIHJlbW92ZVRhc2sobmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgICAgbmFtZSA9IHRoaXMuZ2V0VGFza05hbWUobmFtZSk7XG4gICAgICBpZiAodGhpcy5sb2FkaW5nU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICBjb25zdCB0YXNrSW5kZXggPSB0aGlzLmxvYWRpbmdTdGFjay5pbmRleE9mKG5hbWUpO1xuICAgICAgICAgaWYgKHRhc2tJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YWNrLnNwbGljZSh0YXNrSW5kZXgsIDEpO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtOZ3hMaW5rUHJldmlld0xvYWRpbmdNYW5hZ2VyXSBUYXNrIFske25hbWV9XSBub3QgZm91bmQgYW5kIGNhbid0IGJlIHJlbW92ZWQuYCk7XG4gICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgY29uc29sZS5lcnJvcignW05neExpbmtQcmV2aWV3TG9hZGluZ01hbmFnZXJdIE5vIHBlbmRpbmcgdGFzayBhdmFpbGFibGUgZm9yIHJlbW92ZScpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0SGFzUGVuZGluZ0pvYnMoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBHZXQgdGFzayBuYW1lXG4gICAgKi9cbiAgIHByaXZhdGUgZ2V0VGFza05hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBuYW1lID8gbmFtZSA6ICdVTktOT1dOX1RBU0snO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEVtaXQgaWYgaGFzIGxvYWRpbmcgam9ic1xuICAgICovXG4gICBwcml2YXRlIGVtaXRIYXNQZW5kaW5nSm9icygpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmxvYWRpbmdTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgIHRoaXMuaGFzUGVuZGluZ0pvYnMkLm5leHQodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5oYXNQZW5kaW5nSm9icyQubmV4dChmYWxzZSk7XG4gICAgICB9XG4gICB9XG59XG4iXX0=