diff --git a/addons/api/mirage/config.js b/addons/api/mirage/config.js index da0632da8..3ec44c437 100644 --- a/addons/api/mirage/config.js +++ b/addons/api/mirage/config.js @@ -26,16 +26,18 @@ export default function () { this.get( '/scopes', - ({ scopes }, { queryParams: { scope_id, recursive } }) => { + ({ scopes }, { queryParams: { scope_id, recursive, filter } }) => { + let resultSet; // Default parent scope is global if (!scope_id) scope_id = 'global'; if (recursive && scope_id === 'global') { - return scopes.all(); + resultSet = scopes.all(); } else { - return scopes.where((scope) => { + resultSet = scopes.where((scope) => { return scope.scope ? scope.scope.id === scope_id : false; }); } + return resultSet.filter(makeBooleanFilter(filter)); } ); this.post('/scopes', function ({ scopes }) { diff --git a/ui/desktop/app/routes/scopes/scope/projects.js b/ui/desktop/app/routes/scopes/scope/projects.js index 1f4387f70..1a92b91a8 100644 --- a/ui/desktop/app/routes/scopes/scope/projects.js +++ b/ui/desktop/app/routes/scopes/scope/projects.js @@ -19,6 +19,7 @@ export default class ScopesScopeProjectsRoute extends Route { // =services @service session; + @service resourceFilterStore; // =methods @@ -34,8 +35,12 @@ export default class ScopesScopeProjectsRoute extends Route { * @return {Promise{ScopeModel}} */ model() { - return this.store - .query('scope', { recursive: true, scope_id: 'global' }) - .filter(({ isProject }) => isProject); + const { id: scope_id } = this.modelFor('scopes.scope'); + const projects = this.resourceFilterStore.queryBy( + 'scope', + { type: 'project' }, + { recursive: true, scope_id } + ); + return projects; } } diff --git a/ui/desktop/app/routes/scopes/scope/projects/sessions.js b/ui/desktop/app/routes/scopes/scope/projects/sessions.js index 12618d741..506af23c0 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/sessions.js +++ b/ui/desktop/app/routes/scopes/scope/projects/sessions.js @@ -23,6 +23,12 @@ export default class ScopesScopeProjectsSessionsRoute extends Route { defaultValue: ['active','pending', 'canceling'] }) status; + @resourceFilter({ + allowed: (route) => route.modelFor('scopes.scope.projects'), + serialize: ({ id }) => id, + findBySerialized: ({ id }, value) => id === value + }) project; + /** * A simple Ember Concurrency-based polling task that refreshes the route * every POLL_TIMEOUT_SECONDS seconds. This is necessary to display changes @@ -53,14 +59,19 @@ export default class ScopesScopeProjectsSessionsRoute extends Route { /** * Loads all sessions under the current scope and encapsulates them into * an array of objects filtering to current user - * @return {Promise{[{session: SessionModel, target: TargetModel}]}} + * @return {Promise{SessionModel[]}} */ async model() { const { status } = this; const { id: scope_id } = this.modelFor('scopes.scope'); const { user_id } = this.session.data.authenticated; + const projects = this.project || []; await this.store.query('target', { recursive: true, scope_id }); - return await this.resourceFilterStore.queryBy('session', { user_id , status }, { + return await this.resourceFilterStore.queryBy('session', { + user_id, + status, + scope_id: projects.map(({ id }) => id) + }, { recursive: true, scope_id }); @@ -110,5 +121,6 @@ export default class ScopesScopeProjectsSessionsRoute extends Route { @action clearAllFilters() { this.status = []; + this.project = []; } } diff --git a/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs b/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs index 798489e7e..cd89ff073 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs @@ -14,7 +14,7 @@ (or @model (has-resource-filter-selections - 'scopes.scope.projects.sessions' 'type' + 'scopes.scope.projects.sessions' 'status' 'project' ) ) }} @@ -49,9 +49,36 @@ {{/with}} + {{#with + (resource-filter 'scopes.scope.projects.sessions' 'project') + as |filter| + }} + + + + + + + + {{/with}} + {{#if (has-resource-filter-selections - 'scopes.scope.projects.sessions' 'type' + 'scopes.scope.projects.sessions' 'status' 'project' ) }} {{else if (has-resource-filter-selections - 'scopes.scope.projects.sessions' 'type' + 'scopes.scope.projects.sessions' 'status' 'project' )}}