air-lib
Version:
This is Air's angular component library
157 lines • 17.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { StatusOnYoutube } from './../entities/status-on-youtube';
import { Injectable } from '@angular/core';
import { SessionContext } from '../entities/session-context';
import { BannerMode } from '../entities/banner-mode.enum';
import { Avatar } from '../entities/avatar';
import { DomSanitizer } from '@angular/platform-browser';
import { StatusOnOurCms } from '../entities/status-on-our-cms';
import * as i0 from "@angular/core";
import * as i1 from "../entities/session-context";
import * as i2 from "@angular/platform-browser";
export class UtilityService {
/**
* @param {?} sessionContext
* @param {?} sanitizer
*/
constructor(sessionContext, sanitizer) {
this.sessionContext = sessionContext;
this.sanitizer = sanitizer;
this.mapping = new Map();
this.recursionLimit = 0;
/** @type {?} */
const apiCallTemplate = 'api/Profile/GetPhoto/';
this.mapping.set(BannerMode.Unknown, new Avatar('https://al32blob.blob.core.windows.net/images/ManagerAvatar.png', apiCallTemplate));
this.mapping.set(BannerMode.ManagerAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/ManagerAvatar.png', apiCallTemplate));
this.mapping.set(BannerMode.PartnerAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/PartnerAvatar.png', apiCallTemplate));
this.mapping.set(BannerMode.YouTubeChannelAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeChannelAvatar.png', apiCallTemplate));
this.mapping.set(BannerMode.YouTubeVideoAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeVideoAvatar.png', apiCallTemplate));
this.mapping.set(BannerMode.YouTubeChannelBanner, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeChannelBanner.png', apiCallTemplate));
this.mapping.set(BannerMode.YouTubeChannelAvatarBlockedOrDelete, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeChannelAvatarBlockedOrDelete.png', apiCallTemplate));
this.mapping.set(BannerMode.PaymentSystemLogo, new Avatar('https://al32blob.blob.core.windows.net/images/PaymentSystemLogo.png', apiCallTemplate));
}
/**
* @param {?} ourStatus
* @param {?} youtubeStatus
* @return {?}
*/
static getListClassesByChannelStatus(ourStatus, youtubeStatus) {
return `StatusOnOurCms-${StatusOnOurCms[ourStatus]} StatusOnYoutube-${StatusOnYoutube[youtubeStatus]}`.toLocaleLowerCase();
}
/**
* @param {?} bannerMode
* @return {?}
*/
getAvatarByMode(bannerMode) {
/** @type {?} */
const avatar = this.mapping.get(bannerMode);
if (avatar === undefined) {
throw new Error('Banner mode ' + bannerMode + ' does not exists.');
}
return avatar.defaultAvatar;
}
/**
* @param {?} bannerMode
* @param {?=} id
* @return {?}
*/
photoUrl(bannerMode, id = '') {
if (!id) {
return this.getAvatarByMode(bannerMode);
}
if (!this.mapping.has(bannerMode)) {
throw new Error('Unknown banner mode');
}
/** @type {?} */
const avatar = this.mapping.get(bannerMode);
if (avatar === undefined) {
throw new Error('Banner mode ' + bannerMode + ' does not exists.');
}
return this.sessionContext.apiServer + avatar.apiCall + id + '/mode/' + bannerMode;
}
/**
* @param {?} bannerMode
* @param {?=} id
* @return {?}
*/
getPhotoStyleUrl(bannerMode, id = '') {
/** @type {?} */
const uri = this.photoUrl(bannerMode, id);
/** @type {?} */
const url = 'url(' + uri + ')';
return this.sanitizer.bypassSecurityTrustStyle(url);
}
// depricated method, should be removed after partner area upgrading
/**
* @param {?} id
* @return {?}
*/
getPhotoUrl(id) {
return (!id) ? 'assets/img/default-avatar.png' : this.sessionContext.apiServer + 'api/Profile/GetPhoto/' + id;
}
/**
* @param {?} tree
* @param {?} action
* @return {?}
*/
traverseAndDo(tree, action) {
tree.forEach(node => {
if (node.childrens != null && node.childrens.length > 0) {
this.traverseAndDo(node.childrens, action);
}
else {
action.execute(node);
}
});
}
/**
* @param {?} tree
* @param {?} action
* @param {?} maxCount
* @return {?}
*/
traverseAndLimitedDo(tree, action, maxCount) {
tree.forEach(node => {
if (node.childrens != null && node.childrens.length > 0 && this.recursionLimit < maxCount) {
this.traverseAndLimitedDo(node.childrens, action, maxCount);
}
else {
this.recursionLimit++;
action.execute(node);
}
});
}
}
UtilityService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
UtilityService.ctorParameters = () => [
{ type: SessionContext },
{ type: DomSanitizer }
];
/** @nocollapse */ UtilityService.ngInjectableDef = i0.defineInjectable({ factory: function UtilityService_Factory() { return new UtilityService(i0.inject(i1.SessionContext), i0.inject(i2.DomSanitizer)); }, token: UtilityService, providedIn: "root" });
if (false) {
/** @type {?} */
UtilityService.prototype.mapping;
/**
* @type {?}
* @private
*/
UtilityService.prototype.recursionLimit;
/**
* @type {?}
* @private
*/
UtilityService.prototype.sessionContext;
/**
* @type {?}
* @private
*/
UtilityService.prototype.sanitizer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBYSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFRL0QsTUFBTTs7Ozs7SUFJSixZQUNVLGNBQThCLEVBQzlCLFNBQXVCO1FBRHZCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBTDFCLFlBQU8sR0FBNEIsSUFBSSxHQUFHLEVBQXNCLENBQUM7UUFFaEUsbUJBQWMsR0FBRyxDQUFDLENBQUM7O2NBTW5CLGVBQWUsR0FBRyx1QkFBdUI7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsVUFBVSxDQUFDLE9BQU8sRUFDbEIsSUFBSSxNQUFNLENBQUMsaUVBQWlFLEVBQUUsZUFBZSxDQUFDLENBQy9GLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDZCxVQUFVLENBQUMsYUFBYSxFQUN4QixJQUFJLE1BQU0sQ0FBQyxpRUFBaUUsRUFBRSxlQUFlLENBQUMsQ0FDL0YsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNkLFVBQVUsQ0FBQyxhQUFhLEVBQ3hCLElBQUks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cm9tICcuLy4uL2VudGl0aWVzL3N0YXR1cy1vbi15b3V0dWJlJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gJy4uL2VudGl0aWVzL3Nlc3Npb24tY29udGV4dCc7XHJcbmltcG9ydCB7IEJhbm5lck1vZGUgfSBmcm9tICcuLi9lbnRpdGllcy9iYW5uZXItbW9kZS5lbnVtJztcclxuaW1wb3J0IHsgQXZhdGFyIH0gZnJvbSAnLi4vZW50aXRpZXMvYXZhdGFyJztcclxuaW1wb3J0IHsgU2FmZVN0eWxlLCBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU3RhdHVzT25PdXJDbXMgfSBmcm9tICcuLi9lbnRpdGllcy9zdGF0dXMtb24tb3VyLWNtcyc7XHJcbmltcG9ydCB7IElDb21tYW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pY29tbWFuZCc7XHJcbmltcG9ydCB7IElUaWxlSW5mb05vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2l0aWxlLWluZm8tbm9kZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVXRpbGl0eVNlcnZpY2Uge1xyXG4gIHB1YmxpYyBtYXBwaW5nOiBNYXA8QmFubmVyTW9kZSwgQXZhdGFyPiA9IG5ldyBNYXA8QmFubmVyTW9kZSwgQXZhdGFyPigpO1xyXG5cclxuICBwcml2YXRlIHJlY3Vyc2lvbkxpbWl0ID0gMDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge1xyXG5cclxuICAgIGNvbnN0IGFwaUNhbGxUZW1wbGF0ZSA9ICdhcGkvUHJvZmlsZS9HZXRQaG90by8nO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5Vbmtub3duLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvTWFuYWdlckF2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5NYW5hZ2VyQXZhdGFyLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvTWFuYWdlckF2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5QYXJ0bmVyQXZhdGFyLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvUGFydG5lckF2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5Zb3VUdWJlQ2hhbm5lbEF2YXRhcixcclxuICAgICAgbmV3IEF2YXRhcignaHR0cHM6Ly9hbDMyYmxvYi5ibG9iLmNvcmUud2luZG93cy5uZXQvaW1hZ2VzL1lvdVR1YmVDaGFubmVsQXZhdGFyLnBuZycsIGFwaUNhbGxUZW1wbGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLm1hcHBpbmcuc2V0KFxyXG4gICAgICBCYW5uZXJNb2RlLllvdVR1YmVWaWRlb0F2YXRhcixcclxuICAgICAgbmV3IEF2YXRhcignaHR0cHM6Ly9hbDMyYmxvYi5ibG9iLmNvcmUud2luZG93cy5uZXQvaW1hZ2VzL1lvdVR1YmVWaWRlb0F2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5Zb3VUdWJlQ2hhbm5lbEJhbm5lcixcclxuICAgICAgbmV3IEF2YXRhcignaHR0cHM6Ly9hbDMyYmxvYi5ibG9iLmNvcmUud2luZG93cy5uZXQvaW1hZ2VzL1lvdVR1YmVDaGFubmVsQmFubmVyLnBuZycsIGFwaUNhbGxUZW1wbGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLm1hcHBpbmcuc2V0KFxyXG4gICAgICBCYW5uZXJNb2RlLllvdVR1YmVDaGFubmVsQXZhdGFyQmxvY2tlZE9yRGVsZXRlLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvWW91VHViZUNoYW5uZWxBdmF0YXJCbG9ja2VkT3JEZWxldGUucG5nJywgYXBpQ2FsbFRlbXBsYXRlKVxyXG4gICAgKTtcclxuICAgIHRoaXMubWFwcGluZy5zZXQoXHJcbiAgICAgIEJhbm5lck1vZGUuUGF5bWVudFN5c3RlbUxvZ28sXHJcbiAgICAgIG5ldyBBdmF0YXIoJ2h0dHBzOi8vYWwzMmJsb2IuYmxvYi5jb3JlLndpbmRvd3MubmV0L2ltYWdlcy9QYXltZW50U3lzdGVtTG9nby5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0TGlzdENsYXNzZXNCeUNoYW5uZWxTdGF0dXMob3VyU3RhdHVzOiBudW1iZXIsIHlvdXR1YmVTdGF0dXM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYFN0YXR1c09uT3VyQ21zLSR7U3RhdHVzT25PdXJDbXNbb3VyU3RhdHVzXX0gU3RhdHVzT25Zb3V0dWJlLSR7U3RhdHVzT25Zb3V0dWJlW3lvdXR1YmVTdGF0dXNdfWAudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBdmF0YXJCeU1vZGUoYmFubmVyTW9kZTogQmFubmVyTW9kZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhdmF0YXIgPSB0aGlzLm1hcHBpbmcuZ2V0KGJhbm5lck1vZGUpO1xyXG4gICAgaWYgKGF2YXRhciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmFubmVyIG1vZGUgJyArIGJhbm5lck1vZGUgKyAnIGRvZXMgbm90IGV4aXN0cy4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhdmF0YXIuZGVmYXVsdEF2YXRhcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwaG90b1VybChiYW5uZXJNb2RlOiBCYW5uZXJNb2RlLCBpZDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBdmF0YXJCeU1vZGUoYmFubmVyTW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hcHBpbmcuaGFzKGJhbm5lck1vZGUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBiYW5uZXIgbW9kZScpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXZhdGFyID0gdGhpcy5tYXBwaW5nLmdldChiYW5uZXJNb2RlKTtcclxuICAgIGlmIChhdmF0YXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhbm5lciBtb2RlICcgKyBiYW5uZXJNb2RlICsgJyBkb2VzIG5vdCBleGlzdHMuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29udGV4dC5hcGlTZXJ2ZXIgKyBhdmF0YXIuYXBpQ2FsbCArIGlkICsgJy9tb2RlLycgKyBiYW5uZXJNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBob3RvU3R5bGVVcmwoYmFubmVyTW9kZTogQmFubmVyTW9kZSwgaWQ6IHN0cmluZyA9ICcnKTogU2FmZVN0eWxlIHtcclxuICAgIGNvbnN0IHVyaSA9IHRoaXMucGhvdG9VcmwoYmFubmVyTW9kZSwgaWQpO1xyXG4gICAgY29uc3QgdXJsID0gJ3VybCgnICsgdXJpICsgJyknO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodXJsKTtcclxuICB9XHJcblxyXG4gIC8vIGRlcHJpY2F0ZWQgbWV0aG9kLCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBwYXJ0bmVyIGFyZWEgdXBncmFkaW5nXHJcbiAgcHVibGljIGdldFBob3RvVXJsKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoIWlkKSA/ICdhc3NldHMvaW1nL2RlZmF1bHQtYXZhdGFyLnBuZycgOiB0aGlzLnNlc3Npb25Db250ZXh0LmFwaVNlcnZlciArICdhcGkvUHJvZmlsZS9HZXRQaG90by8nICsgaWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyB0cmF2ZXJzZUFuZERvKHRyZWU6IEFycmF5PElUaWxlSW5mb05vZGU+LCBhY3Rpb246IElDb21tYW5kPElUaWxlSW5mb05vZGU+KSB7XHJcblxyXG4gICAgICB0cmVlLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbnMgIT0gbnVsbCAmJiBub2RlLmNoaWxkcmVucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmF2ZXJzZUFuZERvKG5vZGUuY2hpbGRyZW5zLCBhY3Rpb24pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhY3Rpb24uZXhlY3V0ZShub2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhdmVyc2VBbmRMaW1pdGVkRG8odHJlZTogQXJyYXk8SVRpbGVJbmZvTm9kZT4sIGFjdGlvbjogSUNvbW1hbmQ8SVRpbGVJbmZvTm9kZT4sIG1heENvdW50OiBudW1iZXIpIHtcclxuXHJcbiAgICB0cmVlLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW5zICE9IG51bGwgJiYgbm9kZS5jaGlsZHJlbnMubGVuZ3RoID4gMCAmJiB0aGlzLnJlY3Vyc2lvbkxpbWl0IDwgbWF4Q291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZUFuZExpbWl0ZWREbyhub2RlLmNoaWxkcmVucywgYWN0aW9uLCBtYXhDb3VudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25MaW1pdCsrO1xyXG4gICAgICAgICAgICBhY3Rpb24uZXhlY3V0ZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG59XHJcbiJdfQ==