diff --git a/awx/ui/client/src/notifications/notification-templates-list/list.controller.js b/awx/ui/client/src/notifications/notification-templates-list/list.controller.js index 3e64db1412..8e588d9671 100644 --- a/awx/ui/client/src/notifications/notification-templates-list/list.controller.js +++ b/awx/ui/client/src/notifications/notification-templates-list/list.controller.js @@ -7,12 +7,12 @@ export default ['$scope', 'Wait', 'NotificationTemplatesList', 'GetBasePath', 'Rest', 'ProcessErrors', 'Prompt', '$state', 'ngToast', '$filter', 'Dataset', 'rbacUiControlService', - 'i18n', 'NotificationTemplateModel', + 'i18n', 'NotificationTemplate', function( $scope, Wait, NotificationTemplatesList, GetBasePath, Rest, ProcessErrors, Prompt, $state, ngToast, $filter, Dataset, rbacUiControlService, - i18n) { + i18n, NotificationTemplate) { var defaultUrl = GetBasePath('notification_templates'), list = NotificationTemplatesList; @@ -31,7 +31,7 @@ $scope.list = list; $scope[`${list.iterator}_dataset`] = Dataset.data; $scope[list.name] = $scope[`${list.iterator}_dataset`].results; - } + } $scope.$on(`notification_template_options`, function(event, data){ $scope.options = data.data.actions.GET; @@ -88,6 +88,24 @@ notification_template.template_status_html = html; } + $scope.copyNotification = notificationTemplate => { + Wait('start'); + new NotificationTemplate('get', notificationTemplate.id) + .then(model => model.copy()) + .then(({ id }) => { + const params = { + notification_template_id: id, + notification_template: this.notification_templates + }; + $state.go('notifications.edit', params, { reload: true }); + }) + .catch(({ data, status }) => { + const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` }; + ProcessErrors($scope, data, status, null, params); + }) + .finally(() => Wait('stop')); + }; + $scope.testNotification = function() { var name = $filter('sanitize')(this.notification_template.name), pending_retries = 10; @@ -152,6 +170,7 @@ } }; + $scope.addNotification = function() { $state.go('notifications.add'); }; diff --git a/awx/ui/client/src/notifications/notificationTemplates.list.js b/awx/ui/client/src/notifications/notificationTemplates.list.js index fc0b3dd484..e50e7547ca 100644 --- a/awx/ui/client/src/notifications/notificationTemplates.list.js +++ b/awx/ui/client/src/notifications/notificationTemplates.list.js @@ -77,6 +77,15 @@ export default ['i18n', function(i18n){ dataPlacement: 'top', ngShow: 'notification_template.summary_fields.user_capabilities.edit' }, + copy: { + label: i18n._('Copy'), + ngClick: 'copyNotification(notification_template)', + "class": 'btn-danger btn-xs', + awToolTip: i18n._('Copy notification'), + dataPlacement: 'top', + // requires future api rbac changes + //ngShow: 'notification_template.summary_fields.user_capabilities.copy' + }, view: { ngClick: "editNotification(notification_template.id)", label: i18n._('View'),