* feat: 🎸 scope picker component (#2646) * feat: 🎸 scope picker component --------- Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com> Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com> * refactor: 💡 use hds side nav w/ hds frame instead of rose (#2688) * refactor: 💡 use hds side nav w/ hds frame instead of rose * test: 💍 clean up selectors * fix: 🐛 specificity of style override * refactor: 💡 use hds side nav list instead of target and portal * refactor: 💡 revert to using portal component & update scss * docs: ✏️ update comment * refactor: 💡 use custom class names for containers * refactor: 💡 pr feedback (use @hasSidebar arg) * refactor: 💡 fix onboarding page & fix settings title * refactor: 💡 remove unneeded template file (pr feedback) * test: 💍 fix tests due to merge conflicts * test: 💍 add missing test selector due to merge conflict * test: 💍 fix more broken tests due to merge conflicts * chore: 🤖 update yarn.lock & update hds version to 4.18.1 * chore: 🤖 fix e2e test cases due to side nav refactor (#2751) * chore: 🤖 fix e2e test cases due to side nav refactor * test: 💍 fix e2e test for desktop --------- Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com> Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
109 lines
2.2 KiB
JavaScript
109 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Controller from '@ember/controller';
|
|
import { service } from '@ember/service';
|
|
import { getOwner } from '@ember/application';
|
|
import { action } from '@ember/object';
|
|
|
|
const THEMES = [
|
|
{
|
|
label: 'system',
|
|
value: 'system-default-theme',
|
|
},
|
|
{
|
|
label: 'light',
|
|
value: 'light',
|
|
},
|
|
{
|
|
label: 'dark',
|
|
value: 'dark',
|
|
},
|
|
];
|
|
|
|
export default class ApplicationController extends Controller {
|
|
// =services
|
|
|
|
@service session;
|
|
@service features;
|
|
@service featureEdition;
|
|
@service flashMessages;
|
|
@service router;
|
|
|
|
/**
|
|
* Returns available themes
|
|
* @type {array}
|
|
*/
|
|
get themes() {
|
|
return THEMES;
|
|
}
|
|
|
|
get showSideNav() {
|
|
return (
|
|
this.router.currentRouteName.startsWith('scopes.scope') &&
|
|
this.session.isAuthenticated
|
|
);
|
|
}
|
|
|
|
// =actions
|
|
|
|
/**
|
|
* Delegates invalidation to the session service.
|
|
*/
|
|
@action
|
|
invalidateSession() {
|
|
this.session.invalidate();
|
|
}
|
|
|
|
/**
|
|
* Applies the specified color theme to the root ember element.
|
|
* @param {string} theme - "light", "dark", or nullish (system default)
|
|
*/
|
|
@action
|
|
toggleTheme(theme) {
|
|
const rootElementSelector = getOwner(this).rootElement;
|
|
const rootEl = getOwner(this)
|
|
.lookup('service:-document')
|
|
.querySelector(rootElementSelector);
|
|
this.session.set('data.theme', theme);
|
|
switch (theme) {
|
|
case 'light':
|
|
rootEl.classList.add('rose-theme-light');
|
|
rootEl.classList.remove('rose-theme-dark');
|
|
break;
|
|
case 'dark':
|
|
rootEl.classList.add('rose-theme-dark');
|
|
rootEl.classList.remove('rose-theme-light');
|
|
break;
|
|
default:
|
|
rootEl.classList.remove('rose-theme-dark');
|
|
rootEl.classList.remove('rose-theme-light');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Switches to specified edition.
|
|
* Options are oss, enterprise, and hcp.
|
|
* @param {string} edition
|
|
*/
|
|
@action
|
|
toggleEdition(edition) {
|
|
this.featureEdition.setEdition(edition);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string} feature
|
|
*/
|
|
@action
|
|
toggleFeature(feature) {
|
|
if (this.features.isEnabled(feature)) {
|
|
this.features.disable(feature);
|
|
} else {
|
|
this.features.enable(feature);
|
|
}
|
|
}
|
|
}
|