mirror of
https://github.com/ansible/awx.git
synced 2026-05-12 11:57:37 -02:30
Changes copy behavior to reload list rather than navigate to edit form. Shows toast message on successful copy.
This commit is contained in:
@@ -22,7 +22,8 @@ function ListTemplatesController(
|
|||||||
strings,
|
strings,
|
||||||
Wait,
|
Wait,
|
||||||
qs,
|
qs,
|
||||||
GetBasePath
|
GetBasePath,
|
||||||
|
ngToast
|
||||||
) {
|
) {
|
||||||
const vm = this || {};
|
const vm = this || {};
|
||||||
const [jobTemplate, workflowTemplate] = resolvedModels;
|
const [jobTemplate, workflowTemplate] = resolvedModels;
|
||||||
@@ -201,9 +202,21 @@ function ListTemplatesController(
|
|||||||
jobTemplate
|
jobTemplate
|
||||||
.create('get', template.id)
|
.create('get', template.id)
|
||||||
.then(model => model.copy())
|
.then(model => model.copy())
|
||||||
.then(({ id }) => {
|
.then((copiedJT) => {
|
||||||
const params = { job_template_id: id };
|
ngToast.success({
|
||||||
$state.go('templates.editJobTemplate', params, { reload: true });
|
content: `
|
||||||
|
<div class="Toast-wrapper">
|
||||||
|
<div class="Toast-icon">
|
||||||
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${strings.get('SUCCESSFUL_CREATION', copiedJT.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
})
|
})
|
||||||
.catch(createErrorHandler('copy job template', 'POST'))
|
.catch(createErrorHandler('copy job template', 'POST'))
|
||||||
.finally(() => Wait('stop'));
|
.finally(() => Wait('stop'));
|
||||||
@@ -219,9 +232,21 @@ function ListTemplatesController(
|
|||||||
$('#prompt-modal').modal('hide');
|
$('#prompt-modal').modal('hide');
|
||||||
Wait('start');
|
Wait('start');
|
||||||
model.copy()
|
model.copy()
|
||||||
.then(({ id }) => {
|
.then((copiedWFJT) => {
|
||||||
const params = { workflow_job_template_id: id };
|
ngToast.success({
|
||||||
$state.go('templates.editWorkflowJobTemplate', params, { reload: true });
|
content: `
|
||||||
|
<div class="Toast-wrapper">
|
||||||
|
<div class="Toast-icon">
|
||||||
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${strings.get('SUCCESSFUL_CREATION', copiedWFJT.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
})
|
})
|
||||||
.catch(createErrorHandler('copy workflow', 'POST'))
|
.catch(createErrorHandler('copy workflow', 'POST'))
|
||||||
.finally(() => Wait('stop'));
|
.finally(() => Wait('stop'));
|
||||||
@@ -360,7 +385,8 @@ ListTemplatesController.$inject = [
|
|||||||
'TemplatesStrings',
|
'TemplatesStrings',
|
||||||
'Wait',
|
'Wait',
|
||||||
'QuerySet',
|
'QuerySet',
|
||||||
'GetBasePath'
|
'GetBasePath',
|
||||||
|
'ngToast'
|
||||||
];
|
];
|
||||||
|
|
||||||
export default ListTemplatesController;
|
export default ListTemplatesController;
|
||||||
|
|||||||
@@ -2349,3 +2349,14 @@ body {
|
|||||||
margin-top: .3em;
|
margin-top: .3em;
|
||||||
margin-bottom: .3em;
|
margin-bottom: .3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Toast-wrapper {
|
||||||
|
display: flex;
|
||||||
|
max-width: 250px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Toast-icon {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ function BaseStringService (namespace) {
|
|||||||
this.COPY = t.s('COPY');
|
this.COPY = t.s('COPY');
|
||||||
this.YES = t.s('YES');
|
this.YES = t.s('YES');
|
||||||
this.CLOSE = t.s('CLOSE');
|
this.CLOSE = t.s('CLOSE');
|
||||||
|
this.SUCCESSFUL_CREATION = resource => t.s('{{ resource }} successfully created', { resource });
|
||||||
|
|
||||||
this.deleteResource = {
|
this.deleteResource = {
|
||||||
HEADER: t.s('Delete'),
|
HEADER: t.s('Delete'),
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
export default ['$scope', 'Rest', 'CredentialList', 'Prompt', 'ProcessErrors', 'GetBasePath',
|
export default ['$scope', 'Rest', 'CredentialList', 'Prompt', 'ProcessErrors', 'GetBasePath',
|
||||||
'Wait', '$state', '$filter', 'rbacUiControlService', 'Dataset', 'credentialType', 'i18n',
|
'Wait', '$state', '$filter', 'rbacUiControlService', 'Dataset', 'credentialType', 'i18n',
|
||||||
'CredentialModel', 'CredentialsStrings',
|
'CredentialModel', 'CredentialsStrings', 'ngToast',
|
||||||
function($scope, Rest, CredentialList, Prompt,
|
function($scope, Rest, CredentialList, Prompt,
|
||||||
ProcessErrors, GetBasePath, Wait, $state, $filter, rbacUiControlService, Dataset,
|
ProcessErrors, GetBasePath, Wait, $state, $filter, rbacUiControlService, Dataset,
|
||||||
credentialType, i18n, Credential, CredentialsStrings) {
|
credentialType, i18n, Credential, CredentialsStrings, ngToast) {
|
||||||
|
|
||||||
const credential = new Credential();
|
const credential = new Credential();
|
||||||
|
|
||||||
@@ -93,9 +93,21 @@ export default ['$scope', 'Rest', 'CredentialList', 'Prompt', 'ProcessErrors', '
|
|||||||
Wait('start');
|
Wait('start');
|
||||||
new Credential('get', credential.id)
|
new Credential('get', credential.id)
|
||||||
.then(model => model.copy())
|
.then(model => model.copy())
|
||||||
.then(({ id }) => {
|
.then((copiedCred) => {
|
||||||
const params = { credential_id: id };
|
ngToast.success({
|
||||||
$state.go('credentials.edit', params, { reload: true });
|
content: `
|
||||||
|
<div class="Toast-wrapper">
|
||||||
|
<div class="Toast-icon">
|
||||||
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${CredentialsStrings.get('SUCCESSFUL_CREATION', copiedCred.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
})
|
})
|
||||||
.catch(({ data, status }) => {
|
.catch(({ data, status }) => {
|
||||||
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
function InventoriesList($scope,
|
function InventoriesList($scope,
|
||||||
$filter, Rest, InventoryList, Prompt,
|
$filter, Rest, InventoryList, Prompt,
|
||||||
ProcessErrors, GetBasePath, Wait, $state,
|
ProcessErrors, GetBasePath, Wait, $state,
|
||||||
Dataset, canAdd, i18n, Inventory, InventoryHostsStrings) {
|
Dataset, canAdd, i18n, Inventory, InventoryHostsStrings,
|
||||||
|
ngToast) {
|
||||||
|
|
||||||
let inventory = new Inventory();
|
let inventory = new Inventory();
|
||||||
|
|
||||||
@@ -82,7 +83,22 @@ function InventoriesList($scope,
|
|||||||
Wait('start');
|
Wait('start');
|
||||||
new Inventory('get', inventory.id)
|
new Inventory('get', inventory.id)
|
||||||
.then(model => model.copy())
|
.then(model => model.copy())
|
||||||
.then(copy => $scope.editInventory(copy, true))
|
.then(copiedInv => {
|
||||||
|
ngToast.success({
|
||||||
|
content: `
|
||||||
|
<div class="Toast-wrapper">
|
||||||
|
<div class="Toast-icon">
|
||||||
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${InventoryHostsStrings.get('SUCCESSFUL_CREATION', copiedInv.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
|
})
|
||||||
.catch(({ data, status }) => {
|
.catch(({ data, status }) => {
|
||||||
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
||||||
ProcessErrors($scope, data, status, null, params);
|
ProcessErrors($scope, data, status, null, params);
|
||||||
@@ -182,5 +198,5 @@ export default ['$scope',
|
|||||||
'$filter', 'Rest', 'InventoryList', 'Prompt',
|
'$filter', 'Rest', 'InventoryList', 'Prompt',
|
||||||
'ProcessErrors', 'GetBasePath', 'Wait',
|
'ProcessErrors', 'GetBasePath', 'Wait',
|
||||||
'$state', 'Dataset', 'canAdd', 'i18n', 'InventoryModel',
|
'$state', 'Dataset', 'canAdd', 'i18n', 'InventoryModel',
|
||||||
'InventoryHostsStrings', InventoriesList
|
'InventoryHostsStrings', 'ngToast', InventoriesList
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -7,12 +7,12 @@
|
|||||||
export default ['$rootScope', '$scope', 'Wait', 'InventoryScriptsList',
|
export default ['$rootScope', '$scope', 'Wait', 'InventoryScriptsList',
|
||||||
'GetBasePath', 'Rest', 'ProcessErrors', 'Prompt', '$state', '$filter',
|
'GetBasePath', 'Rest', 'ProcessErrors', 'Prompt', '$state', '$filter',
|
||||||
'Dataset', 'rbacUiControlService', 'InventoryScriptModel', 'InventoryScriptsStrings',
|
'Dataset', 'rbacUiControlService', 'InventoryScriptModel', 'InventoryScriptsStrings',
|
||||||
'i18n',
|
'i18n', 'ngToast',
|
||||||
function(
|
function(
|
||||||
$rootScope, $scope, Wait, InventoryScriptsList,
|
$rootScope, $scope, Wait, InventoryScriptsList,
|
||||||
GetBasePath, Rest, ProcessErrors, Prompt, $state, $filter,
|
GetBasePath, Rest, ProcessErrors, Prompt, $state, $filter,
|
||||||
Dataset, rbacUiControlService, InventoryScript, InventoryScriptsStrings,
|
Dataset, rbacUiControlService, InventoryScript, InventoryScriptsStrings,
|
||||||
i18n
|
i18n, ngToast
|
||||||
) {
|
) {
|
||||||
let inventoryScript = new InventoryScript();
|
let inventoryScript = new InventoryScript();
|
||||||
var defaultUrl = GetBasePath('inventory_scripts'),
|
var defaultUrl = GetBasePath('inventory_scripts'),
|
||||||
@@ -51,9 +51,21 @@ export default ['$rootScope', '$scope', 'Wait', 'InventoryScriptsList',
|
|||||||
Wait('start');
|
Wait('start');
|
||||||
new InventoryScript('get', inventoryScript.id)
|
new InventoryScript('get', inventoryScript.id)
|
||||||
.then(model => model.copy())
|
.then(model => model.copy())
|
||||||
.then(({ id }) => {
|
.then((copiedInvScript) => {
|
||||||
const params = { inventory_script_id: id };
|
ngToast.success({
|
||||||
$state.go('inventoryScripts.edit', params, { reload: true });
|
content: `
|
||||||
|
<div class="Toast-wrapper">
|
||||||
|
<div class="Toast-icon">
|
||||||
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${InventoryScriptsStrings.get('SUCCESSFUL_CREATION', copiedInvScript.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
})
|
})
|
||||||
.catch(({ data, status }) => {
|
.catch(({ data, status }) => {
|
||||||
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
||||||
|
|||||||
@@ -7,12 +7,12 @@
|
|||||||
export default ['$scope', 'Wait', 'NotificationTemplatesList',
|
export default ['$scope', 'Wait', 'NotificationTemplatesList',
|
||||||
'GetBasePath', 'Rest', 'ProcessErrors', 'Prompt', '$state',
|
'GetBasePath', 'Rest', 'ProcessErrors', 'Prompt', '$state',
|
||||||
'ngToast', '$filter', 'Dataset', 'rbacUiControlService',
|
'ngToast', '$filter', 'Dataset', 'rbacUiControlService',
|
||||||
'i18n', 'NotificationTemplate',
|
'i18n', 'NotificationTemplate', 'AppStrings',
|
||||||
function(
|
function(
|
||||||
$scope, Wait, NotificationTemplatesList,
|
$scope, Wait, NotificationTemplatesList,
|
||||||
GetBasePath, Rest, ProcessErrors, Prompt, $state,
|
GetBasePath, Rest, ProcessErrors, Prompt, $state,
|
||||||
ngToast, $filter, Dataset, rbacUiControlService,
|
ngToast, $filter, Dataset, rbacUiControlService,
|
||||||
i18n, NotificationTemplate) {
|
i18n, NotificationTemplate, AppStrings) {
|
||||||
|
|
||||||
var defaultUrl = GetBasePath('notification_templates'),
|
var defaultUrl = GetBasePath('notification_templates'),
|
||||||
list = NotificationTemplatesList;
|
list = NotificationTemplatesList;
|
||||||
@@ -92,12 +92,21 @@
|
|||||||
Wait('start');
|
Wait('start');
|
||||||
new NotificationTemplate('get', notificationTemplate.id)
|
new NotificationTemplate('get', notificationTemplate.id)
|
||||||
.then(model => model.copy())
|
.then(model => model.copy())
|
||||||
.then(({ id }) => {
|
.then((copiedNotification) => {
|
||||||
const params = {
|
ngToast.success({
|
||||||
notification_template_id: id,
|
content: `
|
||||||
notification_template: this.notification_templates
|
<div class="Toast-wrapper">
|
||||||
};
|
<div class="Toast-icon">
|
||||||
$state.go('notifications.edit', params, { reload: true });
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${AppStrings.get('SUCCESSFUL_CREATION', copiedNotification.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
})
|
})
|
||||||
.catch(({ data, status }) => {
|
.catch(({ data, status }) => {
|
||||||
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ export default ['$scope', '$rootScope', '$log', 'Rest', 'Alert',
|
|||||||
'ProjectList', 'Prompt', 'ProcessErrors', 'GetBasePath', 'ProjectUpdate',
|
'ProjectList', 'Prompt', 'ProcessErrors', 'GetBasePath', 'ProjectUpdate',
|
||||||
'Wait', 'Empty', 'Find', 'GetProjectIcon', 'GetProjectToolTip', '$filter',
|
'Wait', 'Empty', 'Find', 'GetProjectIcon', 'GetProjectToolTip', '$filter',
|
||||||
'$state', 'rbacUiControlService', 'Dataset', 'i18n', 'QuerySet', 'ProjectModel',
|
'$state', 'rbacUiControlService', 'Dataset', 'i18n', 'QuerySet', 'ProjectModel',
|
||||||
'ProjectsStrings',
|
'ProjectsStrings', 'ngToast',
|
||||||
function($scope, $rootScope, $log, Rest, Alert, ProjectList,
|
function($scope, $rootScope, $log, Rest, Alert, ProjectList,
|
||||||
Prompt, ProcessErrors, GetBasePath, ProjectUpdate, Wait, Empty, Find,
|
Prompt, ProcessErrors, GetBasePath, ProjectUpdate, Wait, Empty, Find,
|
||||||
GetProjectIcon, GetProjectToolTip, $filter, $state, rbacUiControlService,
|
GetProjectIcon, GetProjectToolTip, $filter, $state, rbacUiControlService,
|
||||||
Dataset, i18n, qs, Project, ProjectsStrings) {
|
Dataset, i18n, qs, Project, ProjectsStrings, ngToast) {
|
||||||
|
|
||||||
let project = new Project();
|
let project = new Project();
|
||||||
|
|
||||||
@@ -156,9 +156,21 @@ export default ['$scope', '$rootScope', '$log', 'Rest', 'Alert',
|
|||||||
Wait('start');
|
Wait('start');
|
||||||
new Project('get', project.id)
|
new Project('get', project.id)
|
||||||
.then(model => model.copy())
|
.then(model => model.copy())
|
||||||
.then(({ id }) => {
|
.then((copiedProj) => {
|
||||||
const params = { project_id: id };
|
ngToast.success({
|
||||||
$state.go('projects.edit', params, { reload: true });
|
content: `
|
||||||
|
<div class="Toast-wrapper">
|
||||||
|
<div class="Toast-icon">
|
||||||
|
<i class="fa fa-check-circle Toast-successIcon"></i>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
${ProjectsStrings.get('SUCCESSFUL_CREATION', copiedProj.name)}
|
||||||
|
</div>
|
||||||
|
</div>`,
|
||||||
|
dismissButton: false,
|
||||||
|
dismissOnTimeout: true
|
||||||
|
});
|
||||||
|
$state.go('.', null, { reload: true });
|
||||||
})
|
})
|
||||||
.catch(({ data, status }) => {
|
.catch(({ data, status }) => {
|
||||||
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` };
|
||||||
|
|||||||
Reference in New Issue
Block a user