2 import {ModalsHandler, ValidationUtils} from "app/utils";
 
   3 import {CacheService, ICategoryResource} from "app/services";
 
   4 import {IAppConfigurtaion} from "app/models";
 
   5 import {ComponentType} from "../../../utils/constants";
 
   7 interface ICategoryManagementViewModelScope extends ng.IScope {
 
  10     categoriesToShow:Array<ICategoryResource>;
 
  11     serviceCategories:Array<ICategoryResource>;
 
  12     resourceCategories:Array<ICategoryResource>;
 
  13     selectedCategory:ICategoryResource;
 
  14     selectedSubCategory:ICategoryResource;
 
  15     modalInstance:ng.ui.bootstrap.IModalServiceInstance;
 
  20     selectCategory(category:ICategoryResource):void;
 
  21     selectSubCategory(subcategory:ICategoryResource):void;
 
  22     selectType(type:string):void;
 
  23     deleteCategory(category:ICategoryResource, subCategory:ICategoryResource):void;
 
  24     createCategoryModal(parentCategory:ICategoryResource):void;
 
  27 export class CategoryManagementViewModel {
 
  31         'Sdc.Services.CacheService',
 
  38     constructor(private $scope:ICategoryManagementViewModelScope,
 
  39                 private sdcConfig:IAppConfigurtaion,
 
  40                 private cacheService:CacheService,
 
  41                 private $uibModal:ng.ui.bootstrap.IModalService,
 
  42                 private $filter:ng.IFilterService,
 
  43                 private ValidationUtils:ValidationUtils,
 
  44                 private ModalsHandler:ModalsHandler) {
 
  47         this.$scope.selectType(ComponentType.SERVICE.toLocaleLowerCase());
 
  51     private initScope = ():void => {
 
  52         let scope:ICategoryManagementViewModelScope = this.$scope;
 
  53         scope.SERVICE = ComponentType.SERVICE.toLocaleLowerCase();
 
  54         scope.RESOURCE = ComponentType.RESOURCE.toLocaleLowerCase();
 
  56         scope.namePattern = this.ValidationUtils.getValidationPattern('category');
 
  58         scope.selectCategory = (category:ICategoryResource) => {
 
  59             if (scope.selectedCategory !== category) {
 
  60                 scope.selectedSubCategory = null;
 
  62             scope.selectedCategory = category;
 
  64         scope.selectSubCategory = (subcategory:ICategoryResource) => {
 
  65             scope.selectedSubCategory = subcategory;
 
  67         scope.selectType = (type:string):void => {
 
  68             if (scope.type !== type) {
 
  69                 scope.selectedCategory = null;
 
  70                 scope.selectedSubCategory = null;
 
  74             scope.categoriesToShow = scope[type + 'Categories'];
 
  77         scope.createCategoryModal = (parentCategory:ICategoryResource):void => {
 
  78             //can't create a sub category for service
 
  79             if (parentCategory && scope.type === ComponentType.SERVICE.toLowerCase()) {
 
  83             let type:string = scope.type;
 
  85             let onOk = (newCategory:ICategoryResource):void => {
 
  86                 if (!parentCategory) {
 
  87                     scope[type + 'Categories'].push(newCategory);
 
  89                     if (!parentCategory.subcategories) {
 
  90                         parentCategory.subcategories = [];
 
  92                     parentCategory.subcategories.push(newCategory);
 
  96             let onCancel = ():void => {
 
 100             let modalOptions:ng.ui.bootstrap.IModalSettings = {
 
 101                 template: 'src/app/view-models/admin-dashboard/add-category-modal/add-category-modal-view.html',
 
 102                 controller: 'Sdc.ViewModels.AddCategoryModalViewModel',
 
 107                     parentCategory: function () {
 
 108                         return parentCategory;
 
 116             scope.modalInstance = this.$uibModal.open(modalOptions);
 
 117             scope.modalInstance.result.then(onOk, onCancel);
 
 121         scope.deleteCategory = (category:ICategoryResource, subCategory:ICategoryResource):void => {
 
 123             let onOk = ():void => {
 
 125                 scope.isLoading = true;
 
 126                 let type:string = scope.type;
 
 128                 let onError = (response):void => {
 
 129                     scope.isLoading = false;
 
 130                     console.info('onFaild', response);
 
 133                 let onSuccess = (response:any):void => {
 
 134                     let arr:Array<ICategoryResource>;
 
 137                         arr = this.$scope[type + 'Categories'];
 
 138                         arr.splice(arr.indexOf(category), 1);
 
 139                         if (category === scope.selectedCategory) {
 
 140                             scope.selectedCategory = null;
 
 141                             scope.selectedSubCategory = null;
 
 144                         arr = category.subcategories;
 
 145                         arr.splice(arr.indexOf(subCategory), 1);
 
 148                     scope.isLoading = false;
 
 154                             categoryId: category.uniqueId
 
 156                         , onSuccess, onError);
 
 158                     category.$deleteSubCategory({
 
 160                             categoryId: category.uniqueId,
 
 161                             subCategoryId: subCategory.uniqueId,
 
 163                         , onSuccess, onError);
 
 166             let modelType:string = subCategory ? 'sub category' : 'category';
 
 167             let title:string = this.$filter('translate')("DELETE_CATEGORY_MODAL_HEADER", "{'modelType': '" + modelType + "' }");
 
 168             let message:string = this.$filter('translate')("DELETE_CATEGORY_MODAL_CATEGORY_NAME", "{'modelType': '" + modelType + "' }");
 
 170             this.ModalsHandler.openConfirmationModal(title, message, false, 'sdc-xsm').then(onOk);
 
 173         this.$scope.serviceCategories = this.cacheService.get('serviceCategories');
 
 174         this.$scope.resourceCategories = this.cacheService.get('resourceCategories');