ngx-link-preview
Version:
The Open Graph link preview component for Angular 6+
54 lines • 5.43 kB
JavaScript
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=