diff --git a/addons/core/addon/services/scope.js b/addons/core/addon/services/scope.js
index fa17bee48..b6e089353 100644
--- a/addons/core/addon/services/scope.js
+++ b/addons/core/addon/services/scope.js
@@ -3,7 +3,7 @@ import { tracked } from '@glimmer/tracking';
/**
* This simple non-functional service is used to retain references to
- * the current active scope(s).
+ * lists of scopes (orgs and projects) and selected scopes (orgs and projects).
*/
export default class ScopeService extends Service {
// =attributes
@@ -13,8 +13,18 @@ export default class ScopeService extends Service {
*/
@tracked org;
+ /**
+ * @type {ScopeModel}
+ */
+ @tracked orgsList;
+
/**
* @type {ScopeModel}
*/
@tracked project;
+
+ /**
+ * @type {ScopeModel}
+ */
+ @tracked projectsList;
}
diff --git a/addons/core/tests/unit/services/scope-test.js b/addons/core/tests/unit/services/scope-test.js
index 596ddbfcd..02cf1bc2a 100644
--- a/addons/core/tests/unit/services/scope-test.js
+++ b/addons/core/tests/unit/services/scope-test.js
@@ -10,9 +10,21 @@ module('Unit | Service | scope', function (hooks) {
assert.ok(service.org, 'Service contains org scope');
});
+ test('it can contain orgs list scope', function (assert) {
+ let service = this.owner.lookup('service:scope');
+ service.orgsList = [];
+ assert.ok(service.orgsList, 'Service contains orgs list scope');
+ });
+
test('it can contain project scope', function (assert) {
let service = this.owner.lookup('service:scope');
service.project = {};
assert.ok(service.project, 'Service contains project scope');
});
+
+ test('it can contain projects list scope', function (assert) {
+ let service = this.owner.lookup('service:scope');
+ service.projectsList = [];
+ assert.ok(service.projectsList, 'Service contains projects list scope');
+ });
});
diff --git a/ui/admin/app/templates/scopes/scope/-header-nav.hbs b/ui/admin/app/components/header-nav/index.hbs
similarity index 53%
rename from ui/admin/app/templates/scopes/scope/-header-nav.hbs
rename to ui/admin/app/components/header-nav/index.hbs
index e8f094d34..15115363e 100644
--- a/ui/admin/app/templates/scopes/scope/-header-nav.hbs
+++ b/ui/admin/app/components/header-nav/index.hbs
@@ -1,7 +1,7 @@
{{/if}}
- {{#each this.scopes.orgs as |scope|}}
-
- {{scope.displayName}}
+ {{#each this.scope.orgsList as |org|}}
+
+ {{org.displayName}}
{{/each}}
-{{#if this.scopes.selectedProject}}
+{{#if this.scope.project}}
- {{#each this.scopes.projects as |scope|}}
-
- {{scope.displayName}}
+ {{#each this.scope.projectsList as |project|}}
+
+ {{project.displayName}}
{{/each}}
diff --git a/ui/admin/app/components/header-nav/index.js b/ui/admin/app/components/header-nav/index.js
new file mode 100644
index 000000000..407fd3d96
--- /dev/null
+++ b/ui/admin/app/components/header-nav/index.js
@@ -0,0 +1,9 @@
+import Component from '@glimmer/component';
+import { inject as service } from '@ember/service';
+
+export default class HeaderNavComponent extends Component {
+ // =services
+
+ @service session;
+ @service scope;
+}
diff --git a/ui/admin/app/routes/scopes/scope.js b/ui/admin/app/routes/scopes/scope.js
index 94b6afc71..c92df4829 100644
--- a/ui/admin/app/routes/scopes/scope.js
+++ b/ui/admin/app/routes/scopes/scope.js
@@ -68,6 +68,8 @@ export default class ScopesScopeRoute extends Route {
// Update the scope service with the current scope(s);
this.scope.org = selectedOrg;
this.scope.project = selectedProject;
+ this.scope.orgsList = orgs;
+ this.scope.projectsList = projects;
this.scopes = { orgs, projects, selectedOrg, selectedProject };
// Update the controller (if exists), since setupController is only
// called once the first time the route is activated. It is not called
@@ -94,20 +96,6 @@ export default class ScopesScopeRoute extends Route {
this.controller.setProperties({ scopes });
}
- /**
- * Renders the scope-specific header template.
- * @override
- * @param {object} controller
- * @param {object} model
- */
- renderTemplate() {
- super.renderTemplate(...arguments);
- this.render('scopes/scope/-header-nav', {
- into: 'application',
- outlet: 'header-nav',
- });
- }
-
// =actions
/**
diff --git a/ui/admin/app/templates/application.hbs b/ui/admin/app/templates/application.hbs
index 08ebd88cd..cf84aab72 100644
--- a/ui/admin/app/templates/application.hbs
+++ b/ui/admin/app/templates/application.hbs
@@ -8,9 +8,7 @@
{{#if this.session.isAuthenticated}}
-
- {{outlet 'header-nav'}}
-
+