From 9c3dce7110b2329d1f99f98c5045f8aca1d160f0 Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Fri, 2 Oct 2020 19:06:29 -0400 Subject: [PATCH 1/2] feat: Sort sessions by status --- ui/core/app/routes/scopes/scope/projects/project/sessions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 c5f7c8004..4e1fa44a9 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/sessions.js +++ b/ui/core/app/routes/scopes/scope/projects/project/sessions.js @@ -3,6 +3,7 @@ import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { all, hash } from 'rsvp'; import { task, timeout } from 'ember-concurrency'; +import { A } from '@ember/array'; const POLL_TIMEOUT_SECONDS = 2.5; @@ -52,7 +53,7 @@ export default class ScopesScopeProjectsProjectSessionsRoute extends Route { ? this.store.findRecord('target', session.target_id) : null, })) - ); + ).then((model) => A(model).sortBy('session.status')); } /** From 6d6ed1b70be4dedc3b58977dd493967a75385cdb Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Sat, 3 Oct 2020 10:48:53 -0400 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=F0=9F=A4=96=20reduce=20unnecessar?= =?UTF-8?q?y=20calls=20and=20sort=20by=20time=20and=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scopes/scope/projects/project/sessions.js | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) 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 4e1fa44a9..d157fe3aa 100644 --- a/ui/core/app/routes/scopes/scope/projects/project/sessions.js +++ b/ui/core/app/routes/scopes/scope/projects/project/sessions.js @@ -43,17 +43,32 @@ export default class ScopesScopeProjectsProjectSessionsRoute extends Route { async model() { const { id: scope_id } = this.modelFor('scopes.scope.projects.project'); const sessions = await this.store.query('session', { scope_id }); - return all( + const sessionAggregates = await all( sessions.map(session => hash({ session, user: session.user_id - ? this.store.findRecord('user', session.user_id) + ? ( + this.store.peekRecord('user', session.user_id) || + this.store.findRecord('user', session.user_id) + ) : null, target: session.target_id - ? this.store.findRecord('target', session.target_id) + ? ( + this.store.peekRecord('target', session.target_id) || + this.store.findRecord('target', session.target_id) + ) : null, })) - ).then((model) => A(model).sortBy('session.status')); + ); + // Sort sessions by time created... + let sortedSessionAggregates = + A(sessionAggregates).sortBy('session.created_time').reverse(); + // Then move active sessions to the top... + sortedSessionAggregates = [ + ...sortedSessionAggregates.filter((aggregate) => aggregate.session.status === 'active'), + ...sortedSessionAggregates.filter((aggregate) => aggregate.session.status !== 'active'), + ]; + return sortedSessionAggregates; } /**