diff --git a/addons/rose/addon/styles/rose/components/table/_table.scss b/addons/rose/addon/styles/rose/components/table/_table.scss
index ba63d37aa..956ab5faa 100644
--- a/addons/rose/addon/styles/rose/components/table/_table.scss
+++ b/addons/rose/addon/styles/rose/components/table/_table.scss
@@ -34,4 +34,8 @@
padding: sizing.rems(l) sizing.rems(s);
}
}
+
+ [class*="rose-button"] {
+ margin-bottom: 0;
+ }
}
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 ed7c699f0..48bbb5cc0 100644
--- a/ui/core/app/routes/scopes/scope/projects/project/sessions.js
+++ b/ui/core/app/routes/scopes/scope/projects/project/sessions.js
@@ -1,8 +1,15 @@
import Route from '@ember/routing/route';
+import { inject as service } from '@ember/service';
+import { action } from '@ember/object';
import { all, hash } from 'rsvp';
export default class ScopesScopeProjectsProjectSessionsRoute extends Route {
+ // =services
+
+ @service intl;
+ @service notify;
+
// =methods
/**
@@ -22,4 +29,19 @@ export default class ScopesScopeProjectsProjectSessionsRoute extends Route {
);
}
+ /**
+ * Cancels the specified session and notifies user of success or error.
+ * @param {SessionModel}
+ */
+ @action
+ async cancelSession(session) {
+ try {
+ await session.cancelSession();
+ this.notify.success(this.intl.t('notify.session-canceled'));
+ } catch (error) {
+ // TODO: replace with translated strings
+ this.notify.error(error.message, { closeAfter: null });
+ }
+ }
+
}
diff --git a/ui/core/app/templates/scopes/scope/groups/group/members.hbs b/ui/core/app/templates/scopes/scope/groups/group/members.hbs
index fb562164b..24a6e13d9 100644
--- a/ui/core/app/templates/scopes/scope/groups/group/members.hbs
+++ b/ui/core/app/templates/scopes/scope/groups/group/members.hbs
@@ -7,7 +7,7 @@
{{t 'form.label.name'}}
{{t 'form.label.id'}}
- {{t "form.label.actions"}}
+ {{t "titles.actions"}}
diff --git a/ui/core/app/templates/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.hbs b/ui/core/app/templates/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.hbs
index 437140df4..b0ef4a625 100644
--- a/ui/core/app/templates/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.hbs
+++ b/ui/core/app/templates/scopes/scope/projects/project/host-catalogs/host-catalog/host-sets/host-set/hosts.hbs
@@ -6,7 +6,7 @@
{{t "form.label.name"}}
{{t "form.label.type"}}
{{t "form.label.id"}}
- {{t "form.label.actions"}}
+ {{t "titles.actions"}}
diff --git a/ui/core/app/templates/scopes/scope/projects/project/sessions/index.hbs b/ui/core/app/templates/scopes/scope/projects/project/sessions/index.hbs
index abbbbdfac..83e480e5e 100644
--- a/ui/core/app/templates/scopes/scope/projects/project/sessions/index.hbs
+++ b/ui/core/app/templates/scopes/scope/projects/project/sessions/index.hbs
@@ -19,6 +19,7 @@
{{t "resources.user"}}
{{t "resources.target"}}
{{t "form.label.started"}}
+ {{t "titles.actions"}}
@@ -34,6 +35,11 @@
{{format-date-iso-human sessionAggregate.session.created_time}}
+
+
+ {{t "actions.cancel"}}
+
+
{{/each}}
diff --git a/ui/core/app/templates/scopes/scope/projects/project/targets/target/host-sets.hbs b/ui/core/app/templates/scopes/scope/projects/project/targets/target/host-sets.hbs
index 40f12df7f..583a8df55 100644
--- a/ui/core/app/templates/scopes/scope/projects/project/targets/target/host-sets.hbs
+++ b/ui/core/app/templates/scopes/scope/projects/project/targets/target/host-sets.hbs
@@ -8,7 +8,7 @@
{{t "form.label.name"}}
{{t "form.label.type"}}
{{t "form.label.id"}}
- {{t "form.label.actions"}}
+ {{t "titles.actions"}}
diff --git a/ui/core/app/templates/scopes/scope/roles/role/principals.hbs b/ui/core/app/templates/scopes/scope/roles/role/principals.hbs
index b364b136f..160c91c7b 100644
--- a/ui/core/app/templates/scopes/scope/roles/role/principals.hbs
+++ b/ui/core/app/templates/scopes/scope/roles/role/principals.hbs
@@ -8,7 +8,7 @@
{{t 'form.label.name'}}
{{t 'form.label.type'}}
{{t 'form.label.id'}}
- {{t "form.label.actions"}}
+ {{t "titles.actions"}}
diff --git a/ui/core/mirage/config.js b/ui/core/mirage/config.js
index 844211c61..fa23ee0e4 100644
--- a/ui/core/mirage/config.js
+++ b/ui/core/mirage/config.js
@@ -299,4 +299,18 @@ export default function() {
return sessions.where(session => session.scopeId === scope_id);
});
this.get('/sessions/:id');
+ this.post('/sessions/:idMethod', function ({ sessions }, { params: { idMethod } }) {
+ const attrs = this.normalizedRequestAttrs();
+ const id = idMethod.split(':')[0];
+ const method = idMethod.split(':')[1];
+ const session = sessions.find(id);
+ const updatedAttrs = {
+ version: attrs.version
+ };
+ if (method === 'cancel') {
+ updatedAttrs.status = 'canceled';
+ }
+ return session.update(updatedAttrs);
+ });
+
}
diff --git a/ui/core/translations/en-us.yaml b/ui/core/translations/en-us.yaml
index 2d13fa33e..7fb4748de 100644
--- a/ui/core/translations/en-us.yaml
+++ b/ui/core/translations/en-us.yaml
@@ -117,6 +117,7 @@ titles:
account: Account
accounts-welcome: Welcome to Accounts
no-sessions: No Active Sessions
+ actions: Actions
descriptions:
host-catalogs: Overview of collections of hosts and host sets.
empty-set: There are no items to display yet. You may be able to add items or try back later.
@@ -180,3 +181,4 @@ notify:
create-success: Created succesfully.
save-success: Saved succesfully.
delete-success: Deleted successfully.
+ session-canceled: Session canceled.