From 63a61234dd843245cfc92ecd478c574a44324f12 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Tue, 22 Sep 2020 15:41:02 -0400 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20move=20notifications?= =?UTF-8?q?=20to=20separate=20translation=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/core/app/routes/account/change-password.js | 2 +- ui/core/app/routes/scopes/scope/auth-methods.js | 4 ++-- .../scopes/scope/auth-methods/auth-method/accounts.js | 4 ++-- .../auth-method/accounts/account/set-password.js | 2 +- ui/core/app/routes/scopes/scope/groups.js | 4 ++-- ui/core/app/routes/scopes/scope/groups/group/add-members.js | 2 +- ui/core/app/routes/scopes/scope/groups/group/members.js | 2 +- ui/core/app/routes/scopes/scope/orgs.js | 2 +- ui/core/app/routes/scopes/scope/projects.js | 4 ++-- .../routes/scopes/scope/projects/project/host-catalogs.js | 4 ++-- .../project/host-catalogs/host-catalog/host-sets.js | 4 ++-- .../host-catalog/host-sets/host-set/add-hosts.js | 2 +- .../host-catalogs/host-catalog/host-sets/host-set/hosts.js | 2 +- .../projects/project/host-catalogs/host-catalog/hosts.js | 4 ++-- .../app/routes/scopes/scope/projects/project/sessions.js | 2 +- ui/core/app/routes/scopes/scope/projects/project/targets.js | 4 ++-- .../scope/projects/project/targets/target/add-host-sets.js | 2 +- .../scope/projects/project/targets/target/host-sets.js | 2 +- ui/core/app/routes/scopes/scope/roles.js | 4 ++-- .../app/routes/scopes/scope/roles/role/add-principals.js | 2 +- ui/core/app/routes/scopes/scope/roles/role/grants.js | 2 +- ui/core/app/routes/scopes/scope/roles/role/principals.js | 2 +- ui/core/app/routes/scopes/scope/users.js | 4 ++-- ui/core/translations/en-us.yaml | 5 ----- ui/core/translations/notifications/en-us.yaml | 6 ++++++ 25 files changed, 39 insertions(+), 38 deletions(-) create mode 100644 ui/core/translations/notifications/en-us.yaml diff --git a/ui/core/app/routes/account/change-password.js b/ui/core/app/routes/account/change-password.js index 858230e9c..f17ec6e84 100644 --- a/ui/core/app/routes/account/change-password.js +++ b/ui/core/app/routes/account/change-password.js @@ -42,7 +42,7 @@ export default class AccountChangePasswordRoute extends Route { // redirects may abort this initial transition, resulting in a // TransitionAborted error, which we do not want to show to the user. await this.replaceWith('index').catch(() => {}); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.save-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/auth-methods.js b/ui/core/app/routes/scopes/scope/auth-methods.js index c5190b637..149cec2ef 100644 --- a/ui/core/app/routes/scopes/scope/auth-methods.js +++ b/ui/core/app/routes/scopes/scope/auth-methods.js @@ -54,7 +54,7 @@ export default class ScopesScopeAuthMethodsRoute extends Route { ); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); } catch (error) { //TODO: replace with translated strings @@ -72,7 +72,7 @@ export default class ScopesScopeAuthMethodsRoute extends Route { await authMethod.destroyRecord(); await this.transitionTo('scopes.scope.auth-methods'); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); } catch (error) { //TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js index 0ecd6ebc4..e2846e829 100644 --- a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js +++ b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts.js @@ -54,7 +54,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route ); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); } catch (error) { // TODO: replace with translated strings @@ -72,7 +72,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route await account.destroyRecord(); await this.transitionTo('scopes.scope.auth-methods.auth-method.accounts'); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); } catch (error) { //TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js index a5461eacf..f650a1860 100644 --- a/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js +++ b/ui/core/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js @@ -39,7 +39,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRout await this.replaceWith( 'scopes.scope.auth-methods.auth-method.accounts.account.set-password' ); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.save-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/groups.js b/ui/core/app/routes/scopes/scope/groups.js index d51718c20..c221b3277 100644 --- a/ui/core/app/routes/scopes/scope/groups.js +++ b/ui/core/app/routes/scopes/scope/groups.js @@ -50,7 +50,7 @@ export default class ScopesScopeGroupsRoute extends Route { await group.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo('scopes.scope.groups.group', group); } catch (error) { @@ -68,7 +68,7 @@ export default class ScopesScopeGroupsRoute extends Route { try { await group.destroyRecord(); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo('scopes.scope.groups'); } catch (error) { //TODO: replace with translated strings diff --git a/ui/core/app/routes/scopes/scope/groups/group/add-members.js b/ui/core/app/routes/scopes/scope/groups/group/add-members.js index 1a9b8bc07..9cb5fc3e1 100644 --- a/ui/core/app/routes/scopes/scope/groups/group/add-members.js +++ b/ui/core/app/routes/scopes/scope/groups/group/add-members.js @@ -67,7 +67,7 @@ export default class ScopesScopeGroupsGroupAddMembersRoute extends Route { try { await group.addMembers(userIDs); await this.replaceWith('scopes.scope.groups.group.members'); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.add-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/groups/group/members.js b/ui/core/app/routes/scopes/scope/groups/group/members.js index 41b73ba9c..f51d8a0b9 100644 --- a/ui/core/app/routes/scopes/scope/groups/group/members.js +++ b/ui/core/app/routes/scopes/scope/groups/group/members.js @@ -40,7 +40,7 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route { try { await group.removeMember(member.id); await this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.remove-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/orgs.js b/ui/core/app/routes/scopes/scope/orgs.js index 7056c6f46..1e07d5f65 100644 --- a/ui/core/app/routes/scopes/scope/orgs.js +++ b/ui/core/app/routes/scopes/scope/orgs.js @@ -51,7 +51,7 @@ export default class ScopesScopeOrgsRoute extends Route { await org.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo('scopes.scope', org); } catch (error) { diff --git a/ui/core/app/routes/scopes/scope/projects.js b/ui/core/app/routes/scopes/scope/projects.js index 8d9ef9c00..31a9f4386 100644 --- a/ui/core/app/routes/scopes/scope/projects.js +++ b/ui/core/app/routes/scopes/scope/projects.js @@ -66,7 +66,7 @@ export default class ScopesScopeProjectsRoute extends Route { await project.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo('scopes.scope.projects.project', project); } catch (error) { @@ -84,7 +84,7 @@ export default class ScopesScopeProjectsRoute extends Route { try { await project.destroyRecord(); this.refresh(); - this.notify.success('notify.delete-success'); + this.notify.success('notifications.delete-success'); this.transitionTo('scopes.scope.projects'); } catch (error) { // TODO: replace with translated strings diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js index e4df664ef..9989ec112 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs.js @@ -44,7 +44,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route { await hostCatalog.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo( 'scopes.scope.projects.project.host-catalogs.host-catalog', @@ -65,7 +65,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsRoute extends Route { try { await project.destroyRecord(); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo('scopes.scope.projects.project.host-catalogs'); } catch (error) { // TODO: replace with translated strings diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js index 9f8617677..ddd865912 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets.js @@ -53,7 +53,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRo ); await this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); } catch (error) { // TODO: replace with translated strings @@ -69,7 +69,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsRo async delete(hostSet) { try { await hostSet.destroyRecord(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo( 'scopes.scope.projects.project.host-catalogs.host-catalog.host-sets' ); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js index 672c9ab58..33e9af6c2 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js @@ -93,7 +93,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHo await this.replaceWith( 'scopes.scope.projects.project.host-catalogs.host-catalog.host-sets.host-set.hosts' ); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.add-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js index a8724fdff..772d07357 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.js @@ -45,7 +45,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostSetsHo adapterOptions: { scopeID, hostCatalogID }, }); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.remove-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js index 8d9951af8..1bab7ab3a 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js +++ b/ui/core/app/routes/scopes/scope/projects/project/host-catalogs/host-catalog/hosts.js @@ -53,7 +53,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute ); await this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); } catch (error) { // TODO: replace with translated strings @@ -70,7 +70,7 @@ export default class ScopesScopeProjectsProjectHostCatalogsHostCatalogHostsRoute try { await host.destroyRecord(); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo( 'scopes.scope.projects.project.host-catalogs.host-catalog.hosts' ); diff --git a/ui/core/app/routes/scopes/scope/projects/project/sessions.js b/ui/core/app/routes/scopes/scope/projects/project/sessions.js index b41d76d7a..63b53d7db 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/sessions.js +++ b/ui/core/app/routes/scopes/scope/projects/project/sessions.js @@ -75,7 +75,7 @@ export default class ScopesScopeProjectsProjectSessionsRoute extends Route { async cancelSession(session) { try { await session.cancelSession(); - this.notify.success(this.intl.t('notify.session-canceled')); + this.notify.success(this.intl.t('notifications.canceled-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/projects/project/targets.js b/ui/core/app/routes/scopes/scope/projects/project/targets.js index 8b62762bf..d6f1c0a56 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/targets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/targets.js @@ -44,7 +44,7 @@ export default class ScopesScopeProjectsProjectTargetsRoute extends Route { await target.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo('scopes.scope.projects.project.targets.target', target); } catch (error) { @@ -62,7 +62,7 @@ export default class ScopesScopeProjectsProjectTargetsRoute extends Route { try { await target.destroyRecord(); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo('scopes.scope.projects.project.targets'); } catch (error) { // TODO: replace with translated strings diff --git a/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js b/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js index d5b31a9c2..cedda2034 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/targets/target/add-host-sets.js @@ -76,7 +76,7 @@ export default class ScopesScopeProjectsProjectTargetsTargetAddHostSetsRoute ext this.replaceWith( 'scopes.scope.projects.project.targets.target.host-sets' ); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.add-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js b/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js index e6e85ca01..c0678f8da 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js +++ b/ui/core/app/routes/scopes/scope/projects/project/targets/target/host-sets.js @@ -57,7 +57,7 @@ export default class ScopesScopeProjectsProjectTargetsTargetHostSetsRoute extend try { await target.removeHostSet(hostSet.id); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.remove-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/roles.js b/ui/core/app/routes/scopes/scope/roles.js index 00c4fc383..a3dd0bd66 100644 --- a/ui/core/app/routes/scopes/scope/roles.js +++ b/ui/core/app/routes/scopes/scope/roles.js @@ -50,7 +50,7 @@ export default class ScopesScopeRolesRoute extends Route { await role.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo('scopes.scope.roles.role', role); } catch (error) { @@ -68,7 +68,7 @@ export default class ScopesScopeRolesRoute extends Route { try { await role.destroyRecord(); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo('scopes.scope.roles'); } catch (error) { // TODO: replace with translated strings diff --git a/ui/core/app/routes/scopes/scope/roles/role/add-principals.js b/ui/core/app/routes/scopes/scope/roles/role/add-principals.js index 0bb2c0e5a..e5ff631ff 100644 --- a/ui/core/app/routes/scopes/scope/roles/role/add-principals.js +++ b/ui/core/app/routes/scopes/scope/roles/role/add-principals.js @@ -61,7 +61,7 @@ export default class ScopesScopeRolesRoleAddPrincipalsRoute extends Route { try { await role.addPrincipals(principalIDs); this.replaceWith('scopes.scope.roles.role.principals'); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.add-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/roles/role/grants.js b/ui/core/app/routes/scopes/scope/roles/role/grants.js index d53bf4919..ac73cf1ea 100644 --- a/ui/core/app/routes/scopes/scope/roles/role/grants.js +++ b/ui/core/app/routes/scopes/scope/roles/role/grants.js @@ -57,7 +57,7 @@ export default class ScopesScopeRolesRoleGrantsRoute extends Route { async save(role) { try { await role.saveGrants(); - this.notify.success(this.intl.t('notify.save-success')); + this.notify.success(this.intl.t('notifications.save-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/roles/role/principals.js b/ui/core/app/routes/scopes/scope/roles/role/principals.js index 3d5e55055..3337b3437 100644 --- a/ui/core/app/routes/scopes/scope/roles/role/principals.js +++ b/ui/core/app/routes/scopes/scope/roles/role/principals.js @@ -65,7 +65,7 @@ export default class ScopesScopeRolesRolePrincipalsRoute extends Route { const role = this.modelFor('scopes.scope.roles.role'); await role.removePrincipal(principal.id); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.remove-success')); } catch (error) { // TODO: replace with translated strings this.notify.error(error.message, { closeAfter: null }); diff --git a/ui/core/app/routes/scopes/scope/users.js b/ui/core/app/routes/scopes/scope/users.js index 3efffbde1..46847ddc3 100644 --- a/ui/core/app/routes/scopes/scope/users.js +++ b/ui/core/app/routes/scopes/scope/users.js @@ -51,7 +51,7 @@ export default class ScopesScopeUsersRoute extends Route { await user.save(); this.refresh(); this.notify.success( - this.intl.t(isNew ? 'notify.create-success' : 'notify.save-success') + this.intl.t(isNew ? 'notifications.create-success' : 'notifications.save-success') ); this.transitionTo('scopes.scope.users.user', user); } catch (error) { @@ -69,7 +69,7 @@ export default class ScopesScopeUsersRoute extends Route { try { await user.destroyRecord(); this.refresh(); - this.notify.success(this.intl.t('notify.delete-success')); + this.notify.success(this.intl.t('notifications.delete-success')); this.transitionTo('scopes.scope.users'); } catch (error) { // TODO: replace with translated strings diff --git a/ui/core/translations/en-us.yaml b/ui/core/translations/en-us.yaml index df04fe907..01d5cc7cd 100644 --- a/ui/core/translations/en-us.yaml +++ b/ui/core/translations/en-us.yaml @@ -191,8 +191,3 @@ form: new_password: New Password started: Started status: Status -notify: - create-success: Created succesfully. - save-success: Saved succesfully. - delete-success: Deleted successfully. - session-canceled: Session canceled. diff --git a/ui/core/translations/notifications/en-us.yaml b/ui/core/translations/notifications/en-us.yaml new file mode 100644 index 000000000..8c915ebe0 --- /dev/null +++ b/ui/core/translations/notifications/en-us.yaml @@ -0,0 +1,6 @@ +create-success: Created succesfully. +save-success: Saved succesfully. +delete-success: Deleted successfully. +add-success: Added successfully. +remove-success: Removed successfully. +canceled-success: Canceled successfully.