You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ra...@apache.org on 2022/03/22 17:58:00 UTC

[trafficcontrol] branch master updated: Fix parameters/:id/profile table (#6682)

This is an automated email from the ASF dual-hosted git repository.

rawlin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c8f78d  Fix parameters/:id/profile table (#6682)
8c8f78d is described below

commit 8c8f78d5f271a807e58567239b214c94a29d733c
Author: Steve Hamrick <sh...@users.noreply.github.com>
AuthorDate: Tue Mar 22 11:57:50 2022 -0600

    Fix parameters/:id/profile table (#6682)
---
 .../TableParameterProfilesController.js            | 321 ++++++++++++++++-----
 1 file changed, 242 insertions(+), 79 deletions(-)

diff --git a/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js b/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
index 1d775bf..06c5f8e 100644
--- a/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
+++ b/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
@@ -17,113 +17,278 @@
  * under the License.
  */
 
-var TableParameterProfilesController = function(parameter, profiles, $controller, $scope, $state, $uibModal, locationUtils, deliveryServiceService, profileParameterService, serverService) {
-
-	// extends the TableProfilesController to inherit common methods
-	angular.extend(this, $controller('TableProfilesController', { profiles: profiles, $scope: $scope }));
-
+const TableParameterProfilesController = function (parameter, profiles, $controller, $scope, $state, $uibModal, $window, locationUtils, deliveryServiceService, profileParameterService, serverService, profileService, messageModel, fileUtils) {
+	const deleteProfile = function (profile) {
+		profileService.deleteProfile(profile.id)
+			.then(function (result) {
+				messageModel.setMessages(result.alerts, false);
+				$scope.refresh();
+			});
+	};
 	let parameterProfilesTable;
 
-	var removeProfile = function(profileId) {
+	const removeProfile = function (profileId) {
 		profileParameterService.unlinkProfileParameter(profileId, parameter.id)
 			.then(
-				function() {
+				function () {
 					$scope.refresh();
 				}
 			);
 	};
 
+	$scope.profiles = profiles;
 	$scope.parameter = parameter;
 
+	$scope.editProfile = function (id) {
+		locationUtils.navigateToPath('/profiles/' + id);
+	};
+
+	$scope.createProfile = function () {
+		locationUtils.navigateToPath('/profiles/new');
+	};
+
+	$scope.importProfile = function () {
+		const params = {
+			title: 'Import Profile',
+			message: "Drop Profile Here"
+		};
+		const modalInstance = $uibModal.open({
+			templateUrl: 'common/modules/dialog/import/dialog.import.tpl.html',
+			controller: 'DialogImportController',
+			size: 'lg',
+			resolve: {
+				params: function () {
+					return params;
+				}
+			}
+		});
+		modalInstance.result.then(function (importJSON) {
+			profileService.importProfile(importJSON);
+		}, function () {
+			// do nothing
+		});
+	};
+
+	$scope.compareProfiles = function () {
+		const params = {
+			title: 'Compare Profiles',
+			message: 'Please select 2 profiles to compare',
+			labelFunction: function (item) {
+				return item['name'] + ' (' + item['type'] + ')'
+			}
+		};
+		const modalInstance = $uibModal.open({
+			templateUrl: 'common/modules/dialog/compare/dialog.compare.tpl.html',
+			controller: 'DialogCompareController',
+			size: 'md',
+			resolve: {
+				params: function () {
+					return params;
+				},
+				collection: function (profileService) {
+					return profileService.getProfiles({orderby: 'name'});
+				}
+			}
+		});
+		modalInstance.result.then(function (profiles) {
+			$location.path($location.path() + '/' + profiles[0].id + '/' + profiles[1].id + '/compare/diff');
+		}, function () {
+			// do nothing
+		});
+	};
+
+	$scope.refresh = function () {
+		$state.reload(); // reloads all the resolves for the view
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	const confirmDelete = function (profile) {
+		const params = {
+			title: 'Delete Profile: ' + profile.name,
+			key: profile.name
+		};
+		const modalInstance = $uibModal.open({
+			templateUrl: 'common/modules/dialog/delete/dialog.delete.tpl.html',
+			controller: 'DialogDeleteController',
+			size: 'md',
+			resolve: {
+				params: function () {
+					return params;
+				}
+			}
+		});
+		modalInstance.result.then(function () {
+			deleteProfile(profile);
+		}, function () {
+			// do nothing
+		});
+	};
+
+
+	const cloneProfile = function (profile) {
+		const params = {
+			title: 'Clone Profile',
+			message: "You're about to clone the " + profile.name + " profile. Your clone will have the same attributes and parameter assignments as the " + profile.name + " profile.<br><br>Please enter a name for your cloned profile."
+		};
+		const modalInstance = $uibModal.open({
+			templateUrl: 'common/modules/dialog/input/dialog.input.tpl.html',
+			controller: 'DialogInputController',
+			size: 'md',
+			resolve: {
+				params: function () {
+					return params;
+				}
+			}
+		});
+		modalInstance.result.then(function (clonedProfileName) {
+			profileService.cloneProfile(profile.name, clonedProfileName);
+		}, function () {
+			// do nothing
+		});
+	};
+
+	const exportProfile = function (profile) {
+		profileService.exportProfile(profile.id).then(
+			function (result) {
+				fileUtils.exportJSON(result, profile.name, 'traffic_ops');
+			}
+		);
+
+	};
+
 	// adds some items to the base profiles context menu
-	$scope.contextMenuItems.splice(2, 0,
+	$scope.contextMenuItems = [
+		{
+			text: 'Open in New Tab',
+			click: function ($itemScope) {
+				$window.open('/#!/profiles/' + $itemScope.p.id, '_blank');
+			}
+		},
+		null, // Divider
 		{
 			text: 'Unlink Profile from Parameter',
-			hasBottomDivider: function() {
+			hasBottomDivider: function () {
 				return true;
 			},
 			click: function ($itemScope) {
 				$scope.confirmRemoveProfile($itemScope.p);
 			}
-		}
-	);
+		},
+		{
+			text: 'Edit',
+			click: function ($itemScope) {
+				$scope.editProfile($itemScope.p.id);
+			}
+		},
+		{
+			text: 'Delete',
+			click: function ($itemScope) {
+				confirmDelete($itemScope.p);
+			}
+		},
+		null, // Divider
+		{
+			text: 'Clone Profile',
+			click: function ($itemScope) {
+				cloneProfile($itemScope.p);
+			}
+		},
+		{
+			text: 'Export Profile',
+			click: function ($itemScope) {
+				exportProfile($itemScope.p);
+			}
+		},
+		null, // Divider
+		{
+			text: 'Manage Parameters',
+			click: function ($itemScope) {
+				locationUtils.navigateToPath('/profiles/' + $itemScope.p.id + '/parameters');
+			}
+		},
+		{
+			text: 'Manage Servers',
+			click: function ($itemScope) {
+				locationUtils.navigateToPath('/profiles/' + $itemScope.p.id + '/servers');
+			}
+		},
+	];
 
-	$scope.confirmRemoveProfile = function(profile, $event) {
+	$scope.confirmRemoveProfile = function (profile, $event) {
 		if ($event) {
 			$event.stopPropagation();
 		}
-		if (profile.type == 'DS_PROFILE') { // if this is a ds profile, then it is used by delivery service(s) so we'll fetch the ds count...
-			deliveryServiceService.getDeliveryServices({ profile: profile.id }).
-				then(function(result) {
-					var params = {
-						title: 'Remove Parameter from Profile?',
-						message: 'The ' + profile.name + ' profile is used by ' + result.length + ' delivery service(s). Are you sure you want to remove the ' + parameter.name + ' parameter from this profile?'
-					};
-					var modalInstance = $uibModal.open({
-						templateUrl: 'common/modules/dialog/confirm/dialog.confirm.tpl.html',
-						controller: 'DialogConfirmController',
-						size: 'md',
-						resolve: {
-							params: function () {
-								return params;
-							}
+		if (profile.type === 'DS_PROFILE') { // if this is a ds profile, then it is used by delivery service(s) so we'll fetch the ds count...
+			deliveryServiceService.getDeliveryServices({profile: profile.id}).then(function (result) {
+				const params = {
+					title: 'Remove Parameter from Profile?',
+					message: 'The ' + profile.name + ' profile is used by ' + result.length + ' delivery service(s). Are you sure you want to remove the ' + parameter.name + ' parameter from this profile?'
+				};
+				const modalInstance = $uibModal.open({
+					templateUrl: 'common/modules/dialog/confirm/dialog.confirm.tpl.html',
+					controller: 'DialogConfirmController',
+					size: 'md',
+					resolve: {
+						params: function () {
+							return params;
 						}
-					});
-					modalInstance.result.then(function() {
-						removeProfile(profile.id);
-					}, function () {
-						// do nothing
-					});
+					}
 				});
+				modalInstance.result.then(function () {
+					removeProfile(profile.id);
+				}, function () {
+					// do nothing
+				});
+			});
 		} else { // otherwise the profile is used by servers so we'll fetch the server count...
-			serverService.getServers({ profileId: profile.id }).
-				then(function(result) {
-					var params = {
-						title: 'Remove Parameter from Profile?',
-						message: 'The ' + profile.name + ' profile is used by ' + result.length + ' server(s). Are you sure you want to remove the ' + parameter.name + ' parameter from this profile?'
-					};
-					var modalInstance = $uibModal.open({
-						templateUrl: 'common/modules/dialog/confirm/dialog.confirm.tpl.html',
-						controller: 'DialogConfirmController',
-						size: 'md',
-						resolve: {
-							params: function () {
-								return params;
-							}
+			serverService.getServers({profileId: profile.id}).then(function (result) {
+				const params = {
+					title: 'Remove Parameter from Profile?',
+					message: 'The ' + profile.name + ' profile is used by ' + result.length + ' server(s). Are you sure you want to remove the ' + parameter.name + ' parameter from this profile?'
+				};
+				const modalInstance = $uibModal.open({
+					templateUrl: 'common/modules/dialog/confirm/dialog.confirm.tpl.html',
+					controller: 'DialogConfirmController',
+					size: 'md',
+					resolve: {
+						params: function () {
+							return params;
 						}
-					});
-					modalInstance.result.then(function() {
-						removeProfile(profile.id);
-					}, function () {
-						// do nothing
-					});
+					}
+				});
+				modalInstance.result.then(function () {
+					removeProfile(profile.id);
+				}, function () {
+					// do nothing
 				});
+			});
 		}
 	};
 
-	$scope.selectProfiles = function() {
-		var modalInstance = $uibModal.open({
+	$scope.selectProfiles = function () {
+		const modalInstance = $uibModal.open({
 			templateUrl: 'common/modules/table/parameterProfiles/table.paramProfilesUnassigned.tpl.html',
 			controller: 'TableParamProfilesUnassignedController',
 			size: 'lg',
 			resolve: {
-				parameter: function() {
+				parameter: function () {
 					return parameter;
 				},
-				allProfiles: function(profileService) {
-					return profileService.getProfiles({ orderby: 'name' });
+				allProfiles: function (profileService) {
+					return profileService.getProfiles({orderby: 'name'});
 				},
-				assignedProfiles: function() {
+				assignedProfiles: function () {
 					return profiles;
 				}
 			}
 		});
-		modalInstance.result.then(function(selectedProfileIds) {
-			var params = {
+		modalInstance.result.then(function (selectedProfileIds) {
+			const params = {
 				title: 'Assign profiles to ' + parameter.name,
 				message: 'Are you sure you want to modify the profiles assigned to ' + parameter.name + '?'
 			};
-			var modalInstance = $uibModal.open({
+			const modalInstance = $uibModal.open({
 				templateUrl: 'common/modules/dialog/confirm/dialog.confirm.tpl.html',
 				controller: 'DialogConfirmController',
 				size: 'md',
@@ -133,10 +298,10 @@ var TableParameterProfilesController = function(parameter, profiles, $controller
 					}
 				}
 			});
-			modalInstance.result.then(function() {
+			modalInstance.result.then(function () {
 				profileParameterService.linkParamProfiles(parameter.id, selectedProfileIds)
 					.then(
-						function() {
+						function () {
 							$scope.refresh(); // refresh the parameter profiles table
 						}
 					);
@@ -148,17 +313,15 @@ var TableParameterProfilesController = function(parameter, profiles, $controller
 		});
 	};
 
-	$scope.toggleVisibility = function(colName) {
+	$scope.toggleVisibility = function (colName) {
 		const col = parameterProfilesTable.column(colName + ':name');
 		col.visible(!col.visible());
 		parameterProfilesTable.rows().invalidate().draw();
 	};
 
-	$scope.columnFilterFn = function(column) {
-		if (column.name === 'Action') {
-			return false;
-		}
-		return true;
+	$scope.columnFilterFn = function (column) {
+		return column.name !== 'Action';
+
 	};
 
 	angular.element(document).ready(function () {
@@ -166,18 +329,18 @@ var TableParameterProfilesController = function(parameter, profiles, $controller
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
 			"iDisplayLength": 25,
 			"columnDefs": [
-				{ 'orderable': false, 'targets': 5 }
+				{'orderable': false, 'targets': 5}
 			],
 			"aaSorting": [],
 			"columns": [
-				{ "name": "Name", "visible": true, "searchable": true },
-				{ "name": "Type", "visible": true, "searchable": true },
-				{ "name": "Routing Disabled", "visible": true, "searchable": true },
-				{ "name": "Description", "visible": true, "searchable": true },
-				{ "name": "CDN", "visible": true, "searchable": true },
-				{ "name": "Action", "visible": true, "searchable": false }
+				{"name": "Name", "visible": true, "searchable": true},
+				{"name": "Type", "visible": true, "searchable": true},
+				{"name": "Routing Disabled", "visible": true, "searchable": true},
+				{"name": "Description", "visible": true, "searchable": true},
+				{"name": "CDN", "visible": true, "searchable": true},
+				{"name": "Action", "visible": true, "searchable": false}
 			],
-			"initComplete": function(settings, json) {
+			"initComplete": function (settings, json) {
 				try {
 					// need to create the show/hide column checkboxes and bind to the current visibility
 					$scope.columns = JSON.parse(localStorage.getItem('DataTables_parameterProfilesTable_/')).columns;
@@ -190,5 +353,5 @@ var TableParameterProfilesController = function(parameter, profiles, $controller
 
 };
 
-TableParameterProfilesController.$inject = ['parameter', 'profiles', '$controller', '$scope', '$state', '$uibModal', 'locationUtils', 'deliveryServiceService', 'profileParameterService', 'serverService'];
+TableParameterProfilesController.$inject = ['parameter', 'profiles', '$controller', '$scope', '$state', '$uibModal', '$window', 'locationUtils', 'deliveryServiceService', 'profileParameterService', 'serverService', 'profileService', 'messageModel', 'fileUtils'];
 module.exports = TableParameterProfilesController;