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 d3ca7e8
Show file tree
Hide file tree
Showing 21 changed files with 589 additions and 127 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
"collapsed"
"expanded"
}}'
>
<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;
}

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

&.collapsed {
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
181 changes: 109 additions & 72 deletions app/components/home-page/organization-dashboard/side-nav/index.hbs
Original file line number Diff line number Diff line change
@@ -1,85 +1,122 @@
<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>
{{else}}
<div local-class='favicon-logo'>
<img src={{this.whitelabel.favicon}} alt={{this.whitelabel.name}} />
</div>
{{/if}}

<AkList class='mt-2' as |akl|>
<AkList
local-class='side-menu-list {{if @isCollapsed "" "collapsed"}}'
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>
{{#if it.route}}
<AkTooltip
@disabled={{@isCollapsed}}
@color='dark'
@placement='right'
@arrow={{true}}
@title={{it.label}}
local-class='ak-tooltip'
>
<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>
{{#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}}
/>
</AkStack>
{{/if}}
</akl.listItem>
{{#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}}
</akl.listItem>
</AkTooltip>
{{else if it.component}}
{{#let (component it.component) as |Component|}}
<Component @isCollapsed={{@isCollapsed}} @classes={{this.classes}} />
{{/let}}
{{/if}}
{{/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|}}
<AkTooltip
@color='dark'
@placement='right'
@arrow={{true}}
@title={{lmi.title}}
@disabled={{@isCollapsed}}
local-class='ak-tooltip'
>
<akl.listItem
local-class='lower-menu-items {{lmi.additionalClass}}'
{{on 'click' lmi.onClick}}
as |li|
>
<li.leftIcon>
<AkIcon
local-class='menu-item-icon'
data-test-side-menu-item-icon
@iconName='security'
/>
{{#if lmi.enablePendo}}
<div
id={{if lmi.enablePendo 'ak-pendo-version-container'}}
local-class='lower-menu-item-icon'
/>
{{else if lmi.icon}}
<AkIcon
@iconName={{lmi.icon}}
local-class='lower-menu-item-icon {{lmi.iconClass}}'
/>
{{/if}}
</li.leftIcon>
{{#if @isCollapsed}}
<li.text
@primaryText={{lmi.title}}
@primaryTextClass={{lmi.textClass}}
/>
{{/if}}
</akl.listItem>
</AkTooltip>

<li.text
data-test-side-menu-item-text
@primaryText={{t 'securityDashboard'}}
@primaryTextClass={{this.classes.menuItemText}}
/>

<li.rightIcon>
<AkIcon local-class='menu-item-icon' @iconName='open-in-new' />
</li.rightIcon>
</a>
</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 d3ca7e8

Please sign in to comment.