[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-FE-common / client / app / views / widgets / widget-details-dialog / widget-details.controller.js
index eb628b4..a7c2904 100644 (file)
-/*-\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
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+/**
+ * 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);
+})();