/*- * ============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========================================================= */ /** * Created by obarda on 2/11/2016. */ /// module Sdc.Utils { export class ChangeLifecycleStateHandler { static '$inject' = [ 'sdcConfig', 'sdcMenu', 'ComponentFactory', '$templateCache', '$filter', '$modal', 'ModalsHandler' ]; constructor( private sdcConfig:Models.IAppConfigurtaion, private sdcMenu:Models.IAppMenu, private ComponentFactory: Sdc.Utils.ComponentFactory, private $templateCache:ng.ITemplateCacheService, private $filter:ng.IFilterService, private $modal:ng.ui.bootstrap.IModalService, private ModalsHandler: Utils.ModalsHandler ) { } changeLifecycleState = (component:Models.Components.Component, data:any, scope:any, onSuccessCallback?: Function, onErrorCallback?: Function):void => { let self = this; let getContacts = (component:Models.Components.Component):string =>{ let testers = this.sdcConfig.testers; let result:string = testers[component.componentType][component.categories[0].name]? testers[component.componentType][component.categories[0].name]: testers[component.componentType]['default']; return result; }; let onSuccess = (newComponent:Models.Components.Component):void => { //scope.isLoading = false; console.info(component.componentType.toLowerCase + ' change state ' , newComponent); if(onSuccessCallback) { onSuccessCallback(self.ComponentFactory.createComponent(newComponent)); } }; let onError = (error):void => { scope.isLoading = false; console.info('Failed to changeLifecycleState to ', data.url); if(onErrorCallback) { onErrorCallback(error); } }; let comment:Models.AsdcComment = new Models.AsdcComment(); if (data.alertModal) { // Show alert dialog if defined in menu.json //------------------------------------------------- let onOk = (confirmationText):void => { comment.userRemarks = confirmationText; scope.isLoading = true; component.changeLifecycleState(data.url, comment).then(onSuccess, onError); }; let onCancel = ():void => { console.info('Cancel pressed'); scope.isLoading = false; }; let modalTitle = this.sdcMenu.alertMessages[data.alertModal].title; let modalMessage = this.sdcMenu.alertMessages[data.alertModal].message.format([component.componentType.toLowerCase()]); this.ModalsHandler.openAlertModal(modalTitle, modalMessage).then(onOk, onCancel); } else if (data.confirmationModal) { // Show confirmation dialog if defined in menu.json //------------------------------------------------- let onOk = (confirmationText):void => { comment.userRemarks = confirmationText; scope.isLoading = true; component.changeLifecycleState(data.url, comment).then(onSuccess, onError); }; let onCancel = ():void => { console.info('Cancel pressed'); scope.isLoading = false; }; let modalTitle = this.sdcMenu.confirmationMessages[data.confirmationModal].title; let modalMessage = this.sdcMenu.confirmationMessages[data.confirmationModal].message.format([component.componentType.toLowerCase()]); let modalShowComment = this.sdcMenu.confirmationMessages[data.confirmationModal].showComment; this.ModalsHandler.openConfirmationModal(modalTitle, modalMessage, modalShowComment).then(onOk, onCancel); } else if (data.emailModal) { // Show email dialog if defined in menu.json //------------------------------------------------- let onOk = (resource):void => { if (resource){ onSuccess(resource); } else { onError("Error changing life cycle state"); } }; let onCancel = ():void => { scope.isLoading = false; }; let emailModel: ViewModels.IEmailModalModel = {}; emailModel.email = {}; emailModel.data = {}; emailModel.title = this.$filter('translate')("EMAIL_MODAL_TITLE"); emailModel.email.to = getContacts(component); emailModel.email.subject = this.$filter('translate')("EMAIL_MODAL_SUBJECT", "{'entityName': '" + this.$filter('resourceName')(component.name) + "','entityVersion': '" + component.version + "'}"); emailModel.email.message = ''; emailModel.data.component = component; emailModel.data.stateUrl = data.url; this.ModalsHandler.openEmailModal(emailModel).then(onOk, onCancel); } else { // Submit to server only (no modal is shown). scope.isLoading = true; component.changeLifecycleState(data.url, comment).then(onSuccess, onError); } } } }