Skip to content

Commit

Permalink
sidebar navigation revamp
Browse files Browse the repository at this point in the history
  • Loading branch information
avzz-19 committed Jan 2, 2024
1 parent 178f65b commit 1e900c8
Show file tree
Hide file tree
Showing 21 changed files with 573 additions and 119 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
<AkAppbar
local-class='navbar-root'
@justifyContent='space-between'
@position='fixed'
@elevation={{true}}
...attributes
data-test-organizationDashboardHeader
>
<AkStack @alignItems='center' @spacing='1.5'>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
.navbar-root {
width: calc(100% - 250px);
margin-left: 250px;
padding: 0.65em 1em;
background-color: var(--organization-dashboard-header-background-color);
color: var(--organization-dashboard-header-text-color);
max-height: 4em;

.navbar-btn {
color: var(--organization-dashboard-header-text-color);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export interface HomePageOrganizationDashboardHeaderSignature {
logoutAction: () => void;
user: UserModel;
};
Element: HTMLElement;
}

export default class HomePageOrganizationDashboardHeaderComponent extends Component<HomePageOrganizationDashboardHeaderSignature> {
Expand Down
12 changes: 11 additions & 1 deletion app/components/home-page/organization-dashboard/index.hbs
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
<div local-class='organization-dashboard-root'>
<div
local-class='organization-dashboard-root {{if
this.isSidebarCollapsed
"expanded"
"collapsed"
}}'
>
<HomePage::OrganizationDashboard::Header
local-class='dashboard-header'
@user={{@user}}
@logoutAction={{@logoutAction}}
/>

<HomePage::OrganizationDashboard::SideNav
local-class='dashboard-sidenav'
@isSecurityEnabled={{@isSecurityEnabled}}
@isCollapsed={{this.isSidebarCollapsed}}
@toggleSidebar={{this.toggleSidebar}}
/>

<main local-class='dashboard-main'>
Expand Down
36 changes: 28 additions & 8 deletions app/components/home-page/organization-dashboard/index.scss
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
.organization-dashboard-root {
width: 100%;
display: grid;
grid-template-areas:
"sidenav topnav"
"sidenav main";
height: 100vh;
grid-template-rows: 4em auto;

&.expanded, &.collapsed {
transition: grid-template-columns 0.2s ease-in-out;
}

&.collapsed {
grid-template-columns: 56px auto;
}

&.expanded {
grid-template-columns: 250px auto;
}

.dashboard-main {
width: calc(100% - 250px);
min-height: 100vh;
margin-left: 250px;
grid-area: main;
max-height: 100vh;
padding: 0.5em;
box-sizing: border-box;
overflow-y: auto;
}

.dashboard-header {
grid-area: topnav;
}

&::before {
content: '';
display: block;
height: 56px;
}
.dashboard-sidenav {
grid-area: sidenav;
}
}
30 changes: 29 additions & 1 deletion app/components/home-page/organization-dashboard/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';

import UserModel from 'irene/models/user';
import { removeCrispListeners, scaleCrispChatbox } from 'irene/utils/chat';

export interface HomePageOrganizationDashboardSignature {
Args: {
Expand All @@ -14,7 +18,31 @@ export interface HomePageOrganizationDashboardSignature {
};
}

export default class HomePageOrganizationDashboardComponent extends Component<HomePageOrganizationDashboardSignature> {}
export default class HomePageOrganizationDashboardComponent extends Component<HomePageOrganizationDashboardSignature> {
@tracked isSidebarCollapsed = false;
@service('browser/window') declare window: Window;

constructor(
owner: unknown,
args: HomePageOrganizationDashboardSignature['Args']
) {
super(owner, args);

if (this.window.$crisp) {
this.window.$crisp.on('session:loaded', scaleCrispChatbox);
}
}

willDestroy() {
super.willDestroy();
removeCrispListeners();
}

@action
toggleSidebar() {
this.isSidebarCollapsed = !this.isSidebarCollapsed;
}
}

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
Expand Down
190 changes: 120 additions & 70 deletions app/components/home-page/organization-dashboard/side-nav/index.hbs
Original file line number Diff line number Diff line change
@@ -1,85 +1,135 @@
<aside local-class='side-menu-root'>
<div local-class='app-logo'>
<ImgLogo />
</div>
<aside
local-class='side-menu-root {{if @isCollapsed "expanded" "collapsed"}}'
...attributes
>
{{#if @isCollapsed}}
<div local-class='app-logo'>
<ImgLogo />
</div>

<AkList class='mt-2' as |akl|>
{{else}}
<div local-class='favicon-logo'>
<img src={{this.whitelabel.favicon}} alt={{this.whitelabel.name}} />
</div>
{{/if}}

<AkList local-class='side-menu-list' as |akl|>
{{#each this.menuItems as |it|}}
<akl.listItem
@link={{true}}
@route={{it.route}}
@query={{it.query}}
@currentWhen={{it.currentWhen}}
@activeLinkClass={{this.classes.menuItemLinkActive}}
data-test-side-menu-item
data-test-side-menu='{{it.label}}'
@linkClass={{this.classes.menuItemLink}}
as |li|
>
<li.leftIcon>
<AkIcon
local-class='menu-item-icon'
data-test-side-menu-item-icon
@iconName={{it.icon}}
/>
</li.leftIcon>
{{#unless it.component}}
<akl.listItem
@noGutters={{true}}
@link={{true}}
@route={{it.route}}
@query={{it.query}}
@currentWhen={{it.currentWhen}}
@activeLinkClass={{this.classes.menuItemLinkActive}}
data-test-side-menu-item
data-test-side-menu='{{it.label}}'
@linkClass={{this.classes.menuItemLink}}
as |li|
>
<AkTooltip
@disabled={{@isCollapsed}}
@color='dark'
@placement='right'
@arrow={{true}}
@title={{it.label}}
local-class='ak-tooltip'
>
<li.leftIcon>
{{#if it.icon}}
<AkIcon
local-class='menu-item-icon'
data-test-side-menu-item-icon
@iconName={{it.icon}}
/>
{{/if}}
</li.leftIcon>

<li.text
data-test-side-menu-item-text
@primaryText={{it.label}}
@primaryTextClass={{this.classes.menuItemText}}
/>
{{#if @isCollapsed}}
<li.text
data-test-side-menu-item-text
@primaryText={{it.label}}
@primaryTextClass={{this.classes.menuItemText}}
/>
{{/if}}

{{#if it.hasBadge}}
<AkStack @alignItems='center' @justifyContent='center'>
<AkChip
data-test-side-menu-item-badge
local-class='menu-item-badge'
@variant='filled'
@size='small'
@label={{it.badgeLabel}}
{{#if (and it.hasBadge @isCollapsed)}}
<AkStack @alignItems='center' @justifyContent='center'>
<AkChip
data-test-side-menu-item-badge
local-class='menu-item-badge'
@variant='filled'
@size='small'
@label={{it.badgeLabel}}
/>
</AkStack>
{{/if}}
</AkTooltip>
</akl.listItem>

{{else}}

Check failure on line 71 in app/components/home-page/organization-dashboard/side-nav/index.hbs

View workflow job for this annotation

GitHub Actions / test

Using an {{else}} block with {{unless}} should be avoided.
<akl.listItem
@noGutters={{true}}
data-test-side-menu-item
data-test-side-menu='{{it.label}}'
>
{{#let (component it.component) as |Component|}}
<Component
@isCollapsed={{@isCollapsed}}
@classes={{this.classes}}
/>
</AkStack>
{{/if}}
</akl.listItem>
{{/let}}
</akl.listItem>
{{/unless}}
{{/each}}
</AkList>

{{#if @isSecurityEnabled}}
<akl.listItem @noGutters={{true}} data-test-side-menu-item as |li|>
<a
class={{this.classes.menuItemLink}}
href='/security/projects'
target='_blank'
rel='noopener noreferrer'
<AkList local-class='lower-menu' as |akl|>
{{#each this.lowerMenuItems as |lmi|}}
<akl.listItem
@noGutters={{true}}
class={{this.classes.menuItemLink}}
local-class='{{lmi.menuItemLinkClass}}'
{{on 'click' lmi.onClick}}
as |li|
>
<AkTooltip
@color='dark'
@placement='right'
@arrow={{true}}
@title={{lmi.title}}
@disabled={{@isCollapsed}}
local-class='ak-tooltip'
>
<li.leftIcon>
<AkIcon
local-class='menu-item-icon'
data-test-side-menu-item-icon
@iconName='security'
/>
</li.leftIcon>
{{#if lmi.enablePendo}}
<div
id={{if lmi.enablePendo 'ak-pendo-version-container'}}
local-class='menu-item-icon'
/>

<li.text
data-test-side-menu-item-text
@primaryText={{t 'securityDashboard'}}
@primaryTextClass={{this.classes.menuItemText}}
/>
{{else if lmi.icon}}
<AkIcon
@iconName={{lmi.icon}}
local-class='menu-item-icon {{lmi.iconClass}}'
/>
{{/if}}
</li.leftIcon>

<li.rightIcon>
<AkIcon local-class='menu-item-icon' @iconName='open-in-new' />
</li.rightIcon>
</a>
{{#if @isCollapsed}}
<li.text
@primaryText={{lmi.title}}
@primaryTextClass={{lmi.textClass}}
/>
{{/if}}
</AkTooltip>
</akl.listItem>
{{/if}}

{{#if lmi.divider}}
<AkDivider local-class='lower-menu-divider' />
{{/if}}
{{/each}}
</AkList>

<div
id={{if this.enablePendo 'ak-pendo-version-container'}}
local-class='product-version
{{if this.enablePendo "pendo-version-padding"}}'
>
{{t 'version'}}
{{this.productVersion}}
</div>
</aside>
Loading

0 comments on commit 1e900c8

Please sign in to comment.