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 templateUrl: '../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');