-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-/**\r
- * Created by nnaffar on 12/20/15.\r
- */\r
-'use strict';\r
-(function () {\r
- class WidgetDetailsModalCtrl {\r
- constructor($scope, $log, applicationsService, widgetsService, errorMessageByCode,\r
- ECOMP_URL_REGEX, $window, userProfileService, $cookies, $rootScope) {\r
-\r
- let newWidgetModel = {\r
- name: null,\r
- appId: null,\r
- appName: null,\r
- width: 360,\r
- height: 300,\r
- url: null\r
- };\r
-\r
- let getAvailableApps = () => {\r
- applicationsService.getAppsForSuperAdminAndAccountAdmin().then(apps => {\r
- this.availableApps=[];\r
- for(var i=0;i<apps.length;i++) {\r
- if (!apps[i].restrictedApp) {\r
- $log.debug('WidgetDetailsModalCtrl::getAvailableApps: pushing {id: ', apps[i].id, 'name: ', apps[i].name,\r
- 'restrictedApp: ', apps[i].restrictedApp, '}');\r
- this.availableApps.push({\r
- id: apps[i].id,\r
- name: apps[i].name,\r
- restrictedApp: apps[i].restrictedApp\r
- });\r
- }\r
- }\r
- \r
- if (this.isEditMode) {\r
- this.selectedApp = _.find(apps, {id: this.widget.appId});\r
- if(!this.selectedApp){\r
- //workaround to display validation errors for apps dropdown in case selectedApp isn't valid\r
- $scope.widgetForm.app.$dirty = true;\r
- }\r
- } else {\r
- this.selectedApp = null;\r
- }\r
- //init appId & appName with selectedApp\r
- this.updateSelectedApp();\r
- }).catch(err => {\r
- confirmBoxService.showInformation('There was a problem retrieving the Widgets. ' +\r
- 'Please try again later.').then(isConfirmed => {});\r
- $log.error('WidgetDetailsModalCtrl::getAvailableApps error: '+ err);\r
- });\r
- };\r
- /**/\r
-\r
- let init = () => {\r
- this.isSaving = false;\r
- if ($scope.ngDialogData && $scope.ngDialogData.widget) {\r
- $log.debug('WidgetDetailsModalCtrl::getAvailableApps: Edit widget mode for', $scope.ngDialogData.widget);\r
- this.isEditMode = true;\r
- this.widget = _.clone($scope.ngDialogData.widget);\r
- } else {\r
- $log.debug('WidgetDetailsModalCtrl::init: New app mode');\r
- this.isEditMode = false;\r
- this.widget = _.clone(newWidgetModel);\r
- }\r
- getAvailableApps();\r
- };\r
-\r
- this.ECOMP_URL_REGEX = ECOMP_URL_REGEX;\r
-\r
- //This part handles conflict errors (409)\r
- this.conflictMessages = {};\r
- this.scrollApi = {};\r
- let handleConflictErrors = err => {\r
- if(!err.data){\r
- return;\r
- }\r
- if(!err.data.length){ //support objects\r
- err.data = [err.data]\r
- }\r
- _.forEach(err.data, item => {\r
- _.forEach(item.fields, field => {\r
- //set conflict message\r
- this.conflictMessages[field.name] = errorMessageByCode[item.errorCode];\r
- //set field as invalid\r
- $scope.widgetForm[field.name].$setValidity('conflict', false);\r
- //set watch once to clear error after user correction\r
- watchOnce[field.name]();\r
- });\r
- });\r
- this.scrollApi.scrollTop();\r
- };\r
-\r
- let resetConflict = fieldName => {\r
- delete this.conflictMessages[fieldName];\r
- if($scope.widgetForm[fieldName]){\r
- $scope.widgetForm[fieldName].$setValidity('conflict', true);\r
- }\r
- };\r
-\r
- let watchOnce = {\r
- name: () => {\r
- let unregisterName = $scope.$watchGroup(['widgetDetails.selectedApp','widgetDetails.widget.name'], (newVal, oldVal) => {\r
- if(newVal.toLowerCase() !== oldVal.toLowerCase()){\r
- resetConflict('name');\r
- unregisterName();\r
- }\r
- });\r
- },\r
- url: () => {\r
- let unregisterUrl = $scope.$watch('widgetDetails.widget.url', (newVal, oldVal) => {\r
- if(newVal.toLowerCase() !== oldVal.toLowerCase()) {\r
- resetConflict('url');\r
- unregisterUrl();\r
- }\r
- });\r
- }\r
- };\r
- //***************************\r
-\r
- this.updateSelectedApp = () => {\r
- if (!this.selectedApp) {\r
- return;\r
- }\r
- this.widget.appId = this.selectedApp.id;\r
- this.widget.appName = this.selectedApp.name;\r
- };\r
-\r
- let emptyCookies = () => {\r
- userProfileService.getUserProfile()\r
- .then(profile=> {\r
- $scope.orgUserId = profile.orgUserId;\r
- if ($cookies.getObject($scope.orgUserId + '_widget') != undefined && $cookies.getObject($scope.orgUserId + '_widget') != null) {\r
- $cookies.remove($scope.orgUserId + '_widget');\r
- }\r
- }).catch(err => {\r
- $log.error('WidgetDetailsModalCtrl::emptyCookies: There was a problem emptying the cookies! No user error presented though.');\r
- });\r
- };\r
-\r
- this.saveChanges = () => {\r
- if($scope.widgetForm.$invalid){\r
- return;\r
- }\r
- this.isSaving = true;\r
- if(this.isEditMode){\r
- widgetsService.updateWidget(this.widget.id, this.widget)\r
- .then(() => {\r
- $log.debug('WidgetDetailsModalCtrl::saveChanges: Widget update succeeded!');\r
- $scope.closeThisDialog(true);\r
- emptyCookies();\r
- }).catch(err => {\r
- if(err.status === 409){//Conflict\r
- handleConflictErrors(err);\r
- } else {\r
- confirmBoxService.showInformation('There was a problem saving the Widget. ' +\r
- 'Please try again later. Error Status: ' + err.status).then(isConfirmed => {});\r
- }\r
- $log.error('WidgetDetailsModalCtrl::saveChanges error: ', err);\r
- }).finally(()=>{\r
- this.isSaving = false;\r
- // for bug in IE 11\r
- var objOffsetVersion = objAgent.indexOf("MSIE");\r
- if (objOffsetVersion != -1) {\r
- $log.debug('WidgetDetailsModalCtrl::saveChanges: Browser is IE, forcing Refresh');\r
- $window.location.reload(); // for bug in IE 11\r
- }\r
- // for bug in IE 11\r
- });\r
- } else {\r
- widgetsService.createWidget(this.widget)\r
- .then(() => {\r
- $log.debug('WidgetDetailsModalCtrl::createWidget: Widget creation succeeded!');\r
- $scope.closeThisDialog(true);\r
- emptyCookies();\r
- $rootScope.noWidgets = false;\r
- }).catch(err => {\r
- if(err.status === 409){//Conflict\r
- handleConflictErrors(err);\r
- } else {\r
- confirmBoxService.showInformation('There was a problem creating the Widget. ' +\r
- 'Please try again later. Error Status: ' + err.status).then(isConfirmed => {});\r
- }\r
- $log.error('WidgetDetailsModalCtrl::createWidget error: ',err);\r
- }).finally(()=>{\r
- this.isSaving = false;\r
- // for bug in IE 11\r
- var objOffsetVersion = objAgent.indexOf("MSIE");\r
- if (objOffsetVersion != -1) {\r
- $log.debug('WidgetDetailsModalCtrl::createWidget: Browser is IE, forcing Refresh');\r
- $window.location.reload(); // for bug in IE 11\r
- }\r
- // for bug in IE 11\r
- });\r
- }\r
- };\r
-\r
- init();\r
-\r
- $scope.$on('$stateChangeStart', e => {\r
- //Disable navigation when modal is opened\r
- e.preventDefault();\r
- });\r
- }\r
- }\r
- WidgetDetailsModalCtrl.$inject = ['$scope', '$log', 'applicationsService', 'widgetsService', 'errorMessageByCode',\r
- 'ECOMP_URL_REGEX', '$window','userProfileService','$cookies', '$rootScope'];\r
- angular.module('ecompApp').controller('WidgetDetailsModalCtrl', WidgetDetailsModalCtrl);\r
-})();\r
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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 nnaffar on 12/20/15.
+ */
+'use strict';
+(function () {
+ class WidgetDetailsModalCtrl {
+ constructor($scope, $log, applicationsService, widgetsService, errorMessageByCode,
+ ECOMP_URL_REGEX, $window, userProfileService, $cookies, $rootScope) {
+
+ let newWidgetModel = {
+ name: null,
+ appId: null,
+ appName: null,
+ width: 360,
+ height: 300,
+ url: null
+ };
+
+ let getAvailableApps = () => {
+ applicationsService.getAppsForSuperAdminAndAccountAdmin().then(apps => {
+ this.availableApps=[];
+ for(var i=0;i<apps.length;i++) {
+ if (!apps[i].restrictedApp) {
+ $log.debug('WidgetDetailsModalCtrl::getAvailableApps: pushing {id: ', apps[i].id, 'name: ', apps[i].name,
+ 'restrictedApp: ', apps[i].restrictedApp, '}');
+ this.availableApps.push({
+ id: apps[i].id,
+ name: apps[i].name,
+ restrictedApp: apps[i].restrictedApp
+ });
+ }
+ }
+
+ if (this.isEditMode) {
+ this.selectedApp = _.find(apps, {id: this.widget.appId});
+ if(!this.selectedApp){
+ //workaround to display validation errors for apps dropdown in case selectedApp isn't valid
+ $scope.widgetForm.app.$dirty = true;
+ }
+ } else {
+ this.selectedApp = null;
+ }
+ //init appId & appName with selectedApp
+ this.updateSelectedApp();
+ }).catch(err => {
+ confirmBoxService.showInformation('There was a problem retrieving the Widgets. ' +
+ 'Please try again later.').then(isConfirmed => {});
+ $log.error('WidgetDetailsModalCtrl::getAvailableApps error: '+ err);
+ });
+ };
+ /**/
+
+ let init = () => {
+ this.isSaving = false;
+ if ($scope.ngDialogData && $scope.ngDialogData.widget) {
+ $log.debug('WidgetDetailsModalCtrl::getAvailableApps: Edit widget mode for', $scope.ngDialogData.widget);
+ this.isEditMode = true;
+ this.widget = _.clone($scope.ngDialogData.widget);
+ } else {
+ $log.debug('WidgetDetailsModalCtrl::init: New app mode');
+ this.isEditMode = false;
+ this.widget = _.clone(newWidgetModel);
+ }
+ getAvailableApps();
+ };
+
+ this.ECOMP_URL_REGEX = ECOMP_URL_REGEX;
+
+ //This part handles conflict errors (409)
+ this.conflictMessages = {};
+ this.scrollApi = {};
+ let handleConflictErrors = err => {
+ if(!err.data){
+ return;
+ }
+ if(!err.data.length){ //support objects
+ err.data = [err.data]
+ }
+ _.forEach(err.data, item => {
+ _.forEach(item.fields, field => {
+ //set conflict message
+ this.conflictMessages[field.name] = errorMessageByCode[item.errorCode];
+ //set field as invalid
+ $scope.widgetForm[field.name].$setValidity('conflict', false);
+ //set watch once to clear error after user correction
+ watchOnce[field.name]();
+ });
+ });
+ this.scrollApi.scrollTop();
+ };
+
+ let resetConflict = fieldName => {
+ delete this.conflictMessages[fieldName];
+ if($scope.widgetForm[fieldName]){
+ $scope.widgetForm[fieldName].$setValidity('conflict', true);
+ }
+ };
+
+ let watchOnce = {
+ name: () => {
+ let unregisterName = $scope.$watchGroup(['widgetDetails.selectedApp','widgetDetails.widget.name'], (newVal, oldVal) => {
+ if(newVal.toLowerCase() !== oldVal.toLowerCase()){
+ resetConflict('name');
+ unregisterName();
+ }
+ });
+ },
+ url: () => {
+ let unregisterUrl = $scope.$watch('widgetDetails.widget.url', (newVal, oldVal) => {
+ if(newVal.toLowerCase() !== oldVal.toLowerCase()) {
+ resetConflict('url');
+ unregisterUrl();
+ }
+ });
+ }
+ };
+ //***************************
+
+ this.updateSelectedApp = () => {
+ if (!this.selectedApp) {
+ return;
+ }
+ this.widget.appId = this.selectedApp.id;
+ this.widget.appName = this.selectedApp.name;
+ };
+
+ let emptyCookies = () => {
+ userProfileService.getUserProfile()
+ .then(profile=> {
+ $scope.orgUserId = profile.orgUserId;
+ if ($cookies.getObject($scope.orgUserId + '_widget') != undefined && $cookies.getObject($scope.orgUserId + '_widget') != null) {
+ $cookies.remove($scope.orgUserId + '_widget');
+ }
+ }).catch(err => {
+ $log.error('WidgetDetailsModalCtrl::emptyCookies: There was a problem emptying the cookies! No user error presented though.');
+ });
+ };
+
+ this.saveChanges = () => {
+ if($scope.widgetForm.$invalid){
+ return;
+ }
+ this.isSaving = true;
+ if(this.isEditMode){
+ widgetsService.updateWidget(this.widget.id, this.widget)
+ .then(() => {
+ $log.debug('WidgetDetailsModalCtrl::saveChanges: Widget update succeeded!');
+ $scope.closeThisDialog(true);
+ emptyCookies();
+ }).catch(err => {
+ if(err.status === 409){//Conflict
+ handleConflictErrors(err);
+ } else {
+ confirmBoxService.showInformation('There was a problem saving the Widget. ' +
+ 'Please try again later. Error Status: ' + err.status).then(isConfirmed => {});
+ }
+ $log.error('WidgetDetailsModalCtrl::saveChanges error: ', err);
+ }).finally(()=>{
+ this.isSaving = false;
+ // for bug in IE 11
+ var objOffsetVersion = objAgent.indexOf("MSIE");
+ if (objOffsetVersion != -1) {
+ $log.debug('WidgetDetailsModalCtrl::saveChanges: Browser is IE, forcing Refresh');
+ $window.location.reload(); // for bug in IE 11
+ }
+ // for bug in IE 11
+ });
+ } else {
+ widgetsService.createWidget(this.widget)
+ .then(() => {
+ $log.debug('WidgetDetailsModalCtrl::createWidget: Widget creation succeeded!');
+ $scope.closeThisDialog(true);
+ emptyCookies();
+ $rootScope.noWidgets = false;
+ }).catch(err => {
+ if(err.status === 409){//Conflict
+ handleConflictErrors(err);
+ } else {
+ confirmBoxService.showInformation('There was a problem creating the Widget. ' +
+ 'Please try again later. Error Status: ' + err.status).then(isConfirmed => {});
+ }
+ $log.error('WidgetDetailsModalCtrl::createWidget error: ',err);
+ }).finally(()=>{
+ this.isSaving = false;
+ // for bug in IE 11
+ var objOffsetVersion = objAgent.indexOf("MSIE");
+ if (objOffsetVersion != -1) {
+ $log.debug('WidgetDetailsModalCtrl::createWidget: Browser is IE, forcing Refresh');
+ $window.location.reload(); // for bug in IE 11
+ }
+ // for bug in IE 11
+ });
+ }
+ };
+
+ init();
+
+ $scope.$on('$stateChangeStart', e => {
+ //Disable navigation when modal is opened
+ e.preventDefault();
+ });
+ }
+ }
+ WidgetDetailsModalCtrl.$inject = ['$scope', '$log', 'applicationsService', 'widgetsService', 'errorMessageByCode',
+ 'ECOMP_URL_REGEX', '$window','userProfileService','$cookies', '$rootScope'];
+ angular.module('ecompApp').controller('WidgetDetailsModalCtrl', WidgetDetailsModalCtrl);
+})();