/*- * ============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 { 'use strict'; interface ICategoryManagementViewModelScope extends ng.IScope { SERVICE:string; RESOURCE:string; categoriesToShow: Array; serviceCategories: Array; resourceCategories: Array; selectedCategory: Sdc.Services.ICategoryResource; selectedSubCategory: Sdc.Services.ICategoryResource; modalInstance:ng.ui.bootstrap.IModalServiceInstance; isLoading:boolean; type:string; namePattern:RegExp; selectCategory(category:Sdc.Services.ICategoryResource) :void; selectSubCategory(subcategory:Sdc.Services.ICategoryResource) :void; selectType(type:string) :void; deleteCategory(category:Sdc.Services.ICategoryResource, subCategory:Sdc.Services.ICategoryResource) :void; createCategoryModal(parentCategory:Sdc.Services.ICategoryResource) :void; } export class CategoryManagementViewModel { static '$inject' = [ '$scope', 'sdcConfig', 'Sdc.Services.CacheService', '$templateCache', '$modal', '$filter', 'ValidationUtils', 'ModalsHandler' ]; constructor(private $scope:ICategoryManagementViewModelScope, private sdcConfig:Models.IAppConfigurtaion, private cacheService:Services.CacheService, private $templateCache:ng.ITemplateCacheService, private $modal:ng.ui.bootstrap.IModalService, private $filter:ng.IFilterService, private ValidationUtils: Sdc.Utils.ValidationUtils, private ModalsHandler: Utils.ModalsHandler ) { this.initScope(); this.$scope.selectType(Sdc.Utils.Constants.ComponentType.SERVICE.toLocaleLowerCase()); } private initScope = ():void => { let scope:ICategoryManagementViewModelScope = this.$scope; scope.SERVICE = Sdc.Utils.Constants.ComponentType.SERVICE.toLocaleLowerCase(); scope.RESOURCE = Sdc.Utils.Constants.ComponentType.RESOURCE.toLocaleLowerCase(); scope.namePattern = this.ValidationUtils.getValidationPattern('cssClasses'); scope.selectCategory = (category :Sdc.Services.ICategoryResource) => { if(scope.selectedCategory !== category) { scope.selectedSubCategory = null; } scope.selectedCategory = category; }; scope.selectSubCategory = (subcategory :Sdc.Services.ICategoryResource) => { scope.selectedSubCategory = subcategory; }; scope.selectType = (type:string):void => { if (scope.type !== type) { scope.selectedCategory = null; scope.selectedSubCategory = null; } scope.type = type; scope.categoriesToShow = scope[type + 'Categories']; }; scope.createCategoryModal = (parentCategory:Sdc.Services.ICategoryResource):void => { //can't create a sub category for service if(parentCategory && scope.type === Sdc.Utils.Constants.ComponentType.SERVICE.toLowerCase()) { return; } let type:string = scope.type; let onOk = (newCategory :Sdc.Services.ICategoryResource):void => { if(!parentCategory) { scope[type + 'Categories'].push(newCategory); }else{ if(!parentCategory.subcategories) { parentCategory.subcategories = []; } parentCategory.subcategories.push(newCategory); } }; let onCancel = ():void => { }; let modalOptions:ng.ui.bootstrap.IModalSettings = { template: this.$templateCache.get('/app/scripts/view-models/admin-dashboard/add-category-modal/add-category-modal-view.html'), controller: 'Sdc.ViewModels.AddCategoryModalViewModel', size: 'sdc-xsm', backdrop: 'static', scope: scope, resolve: { parentCategory: function () { return parentCategory; }, type: function () { return type; } } }; scope.modalInstance = this.$modal.open(modalOptions); scope.modalInstance.result.then(onOk, onCancel); }; scope.deleteCategory = (category: Sdc.Services.ICategoryResource, subCategory: Sdc.Services.ICategoryResource): void => { let onOk = ():void => { scope.isLoading = true; let type:string = scope.type; let onError = (response):void => { scope.isLoading = false; console.info('onFaild', response); }; let onSuccess = (response: any) :void => { let arr:Array; if(!subCategory) { arr = this.$scope[type + 'Categories']; arr.splice(arr.indexOf(category), 1); if(category === scope.selectedCategory) { scope.selectedCategory = null; scope.selectedSubCategory = null; } } else { arr = category.subcategories; arr.splice(arr.indexOf(subCategory), 1); } scope.isLoading = false; }; if(!subCategory) { category.$delete({ types: type+"s", categoryId: category.uniqueId } , onSuccess, onError); } else { category.$deleteSubCategory({ types: type+"s", categoryId: category.uniqueId, subCategoryId: subCategory.uniqueId, } , onSuccess, onError); } }; let modelType:string = subCategory ? 'sub category' : 'cssClasses'; let title:string = this.$filter('translate')("DELETE_CATEGORY_MODAL_HEADER", "{'modelType': '" + modelType +"' }"); let message:string = this.$filter('translate')("DELETE_CATEGORY_MODAL_CATEGORY_NAME", "{'modelType': '" + modelType +"' }"); this.ModalsHandler.openConfirmationModal(title, message, false, 'sdc-xsm').then(onOk); }; this.$scope.serviceCategories = this.cacheService.get('serviceCategories'); this.$scope.resourceCategories = this.cacheService.get('resourceCategories'); } } }