/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ /// module Sdc.ViewModels.Wizard { 'use strict'; export interface IIconsStepScope extends IWizardCreationStepScope{ icons : Array; component: Models.Components.Component; iconSprite: string; setComponentIcon(iconSrc:string): void; } export class IconsStepViewModel implements IWizardCreationStep { static '$inject' = [ '$scope', 'Sdc.Services.AvailableIconsService', 'ComponentFactory' ]; constructor(private $scope:IIconsStepScope, private availableIconsService:Services.AvailableIconsService, private ComponentFactory: Sdc.Utils.ComponentFactory) { this.$scope.registerChild(this); this.$scope.component = this.$scope.getComponent(); this.$scope.iconSprite = this.$scope.component.iconSprite; this.initScope(); this.initIcons(); if(this.$scope.component.isResource()) { this.initVendor(); } // In case there is one icons select it. if( this.$scope.icons.length == 1 && !this.$scope.component.isAlreadyCertified()){ this.$scope.setComponentIcon(this.$scope.icons[0]); } } private initIcons = ():void => { // For subcategories that where created by admin, there is no icons this.$scope.icons = new Array(); if (this.$scope.component.categories && this.$scope.component.categories.length > 0) { _.forEach(this.$scope.component.categories, (category:Models.IMainCategory):void => { if (category.icons) { this.$scope.icons = this.$scope.icons.concat(category.icons); } if (category.subcategories) { _.forEach(category.subcategories, (subcategory:Models.ISubCategory):void => { if (subcategory.icons) { this.$scope.icons = this.$scope.icons.concat(subcategory.icons); } }); } }); } if (this.$scope.component.isResource()) { let resourceType:string = this.$scope.component.getComponentSubType(); if (resourceType === 'VL') { this.$scope.icons = ['vl']; } if (resourceType === 'CP') { this.$scope.icons = ['cp']; } } if (this.$scope.icons.length === 0) { this.$scope.icons = this.availableIconsService.getIcons(this.$scope.component.componentType); } }; private initVendor = ():void => { let vendors:Array = this.availableIconsService.getIcons(this.$scope.component.componentType).slice(5, 19); let vendorName = this.$scope.component.vendorName.toLowerCase(); if ('at&t' === vendorName){ vendorName = 'att'; } if ('nokia' === vendorName){ vendorName = 'nokiasiemens'; } let vendor:string = _.find(vendors, (vendor:string)=>{ return vendor.replace(/[_]/g, '').toLowerCase() === vendorName; }); if(vendor && this.$scope.icons.indexOf(vendor)===-1) { this.$scope.icons.push(vendor); } }; private initScope():void { this.$scope.icons = []; if(this.$scope.component.icon === Utils.Constants.DEFAULT_ICON){ this.$scope.setValidState(false); } this.$scope.setComponentIcon = (iconSrc:string):void => { this.$scope.component.icon = iconSrc; this.$scope.setValidState(true); } } save(callback:Function):void { let onFailed = () => { callback(false); }; let onSuccess = (component:Models.Components.Component) => { this.$scope.component = component; this.$scope.setComponent(this.$scope.component); callback(true); }; try { this.$scope.component.updateComponent().then(onSuccess, onFailed); }catch(e){ callback(false); } } public back = (callback:Function):void => { this.save(callback); } } }