Skip to content

Commit 1eb467f

Browse files
Merge pull request #196 from OS2iot/feature/44457_hide_menu
Feature/44457 hide menu
2 parents fbef96a + 82d83c2 commit 1eb467f

File tree

10 files changed

+109
-18
lines changed

10 files changed

+109
-18
lines changed

src/app/app.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div *ngIf="isLoggedIn">
2-
<app-navbar></app-navbar>
2+
<app-navbar (navToggle)="onNavToggle($event)"></app-navbar>
33
</div>
4-
<div id="content">
4+
<div id="content" [class.nav-visible]="isNavVisible">
55
<div id="mainBody">
66
<router-outlet></router-outlet>
77
</div>

src/app/app.component.scss

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
#content {
55
@media (min-width: $screen-md-min) {
6-
padding-left: $navWidth;
6+
padding-left: 0;
7+
transition: padding-left 0.3s ease-in-out;
8+
&.nav-visible {
9+
padding-left: $navWidth;
10+
}
711
}
812
}

src/app/app.component.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import { LoggedInService } from "@shared/services/loggedin.service";
99
export class AppComponent {
1010
title = "OS2IoT-frontend";
1111
isLoggedIn = true;
12+
isNavVisible = true;
13+
14+
onNavToggle(isVisible: boolean) {
15+
this.isNavVisible = isVisible;
16+
}
1217

1318
constructor(private loggedInService: LoggedInService) {
1419
loggedInService.changeEmitted?.subscribe(change => {

src/app/navbar/navbar.component.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<nav
2+
class="navbar-container navbar navbar-expand-md navbar-light d-md-flex align-items-md-start flex-md-column p-3"
23
aria-expanded="false"
3-
class="navbar navbar-expand-md navbar-light d-md-flex align-items-md-start flex-md-column p-3"
4+
[class.nav-visible]="isVisible"
45
>
56
<img [src]="imagePath" alt="OS2IoT-logo" class="img-logo"/>
67

@@ -139,3 +140,7 @@
139140
</div>
140141
</ng-template>
141142
</nav>
143+
144+
<div [class.nav-visible-button]="isVisible" class="toggle-button" (click)="toggleNavbar()">
145+
<mat-icon class="icon-arrow-nav rotate" svgIcon="nav-arrow"></mat-icon>
146+
</div>

src/app/navbar/navbar.component.scss

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,60 @@ button:focus,
115115
}
116116
}
117117
}
118+
119+
.toggle-button {
120+
top: 50%;
121+
position: absolute;
122+
width: 18px;
123+
height: 40px;
124+
left: 0px;
125+
display: flex;
126+
align-items: center;
127+
justify-content: center;
128+
background-color: $color-neutral-200;
129+
padding: 0 2px 0 0;
130+
border-radius: 0 5px 5px 0;
131+
transition: left 0.3s ease-in-out, border-radius 0.3s ease-in-out;
132+
133+
&:hover {
134+
background-color: $color-link-active-bg;
135+
}
136+
137+
&:hover .icon-arrow-nav {
138+
color: $white;
139+
}
140+
141+
&.nav-visible-button {
142+
border-radius: 5px 0 0 5px;
143+
left: 248px;
144+
padding: 0 0 0 2px;
145+
.icon-arrow-nav {
146+
transform: rotate(0deg);
147+
}
148+
}
149+
}
150+
151+
.icon-arrow-nav {
152+
color: $default-color;
153+
height: 40px;
154+
width: 10px;
155+
transform: rotate(180deg);
156+
}
157+
158+
@media (max-width: 768px) {
159+
.icon-arrow-nav,
160+
.toggle-button,
161+
.show-button,
162+
.hide-button {
163+
display: none;
164+
}
165+
}
166+
167+
.navbar-container {
168+
transform: translateX(-100%);
169+
transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;
170+
171+
&.nav-visible {
172+
transform: translateX(0);
173+
}
174+
}

src/app/navbar/navbar.component.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import { Component, OnInit } from "@angular/core";
1+
import { Component, EventEmitter, OnInit, Output } from "@angular/core";
2+
import { MatIconRegistry } from "@angular/material/icon";
3+
import { DomSanitizer } from "@angular/platform-browser";
24
import { Router } from "@angular/router";
35
import { Organisation } from "@app/admin/organisation/organisation.model";
46
import { PermissionType } from "@app/admin/permission/permission.model";
@@ -28,6 +30,8 @@ export class NavbarComponent implements OnInit {
2830
isCollapsed = false;
2931
user: User;
3032

33+
isVisible = true;
34+
3135
userInfo: CurrentUserInfoResponse;
3236
faSignInAlt = faSignInAlt;
3337
imagePath = "../../assets/images/os2iot.png ";
@@ -39,11 +43,21 @@ export class NavbarComponent implements OnInit {
3943
private sharedVariableService: SharedVariableService,
4044
private loggedInService: LoggedInService,
4145
private meService: MeService,
42-
private route: Router
46+
private route: Router,
47+
private matIconRegistry: MatIconRegistry,
48+
private domSanitizer: DomSanitizer
4349
) {
50+
this.matIconRegistry.addSvgIcon(
51+
"nav-arrow",
52+
this.domSanitizer.bypassSecurityTrustResourceUrl("assets/images/arrows-up-to-line.svg"),
53+
{}
54+
);
55+
4456
translate.use("da");
4557
}
4658

59+
@Output() navToggle = new EventEmitter<boolean>();
60+
4761
isLoggedIn() {
4862
return this.authService.isLoggedIn();
4963
}
@@ -56,6 +70,7 @@ export class NavbarComponent implements OnInit {
5670
this.getAllowedOrganizations();
5771
this.organisations.sort((a, b) => a.name.localeCompare(b.name, "en", { numeric: true }));
5872
this.selected = this.sharedVariableService.getSelectedOrganisationId();
73+
this.navToggle.emit(this.isVisible);
5974
}
6075

6176
getAllowedOrganizations() {
@@ -87,6 +102,11 @@ export class NavbarComponent implements OnInit {
87102
}
88103
}
89104

105+
public toggleNavbar() {
106+
this.isVisible = !this.isVisible;
107+
this.navToggle.emit(this.isVisible);
108+
}
109+
90110
setSelectedOrganisation(value: number) {
91111
this.sharedVariableService.setSelectedOrganisationId(value);
92112
}

src/app/navbar/navbar.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { NavbarComponent } from "./navbar.component";
88
import { SharedModule } from "../shared/shared.module";
99

1010
// Services
11+
import { MatIconModule } from "@angular/material/icon";
1112
import { RouterModule } from "@angular/router";
1213
import { FontAwesomeModule } from "@fortawesome/angular-fontawesome";
1314
import { TranslateModule } from "@ngx-translate/core";
@@ -27,6 +28,7 @@ import { GlobalAdminComponent } from "./global-admin/global-admin.component";
2728
NGMaterialModule,
2829
InlineSVGModule,
2930
NgOptimizedImage,
31+
MatIconModule,
3032
],
3133
exports: [NavbarComponent],
3234
providers: [RestService, NavbarComponent],

src/app/shared/shared-variable/shared-variable.service.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import { Injectable } from "@angular/core";
22
import { Organisation, OrganisationGetMinimalResponse } from "@app/admin/organisation/organisation.model";
33
import { OrganisationService } from "@app/admin/organisation/organisation.service";
4-
import { PermissionType } from "@app/admin/permission/permission.model";
5-
import { UserMinimal, UserMinimalResponse } from "@app/admin/users/user-minimal.model";
6-
import { UserMinimalService } from "@app/admin/users/user-minimal.service";
74
import { AuthService, CurrentUserInfoResponse } from "@auth/auth.service";
85
import { BehaviorSubject, Observable } from "rxjs";
96
import { tap } from "rxjs/operators";
@@ -12,17 +9,13 @@ import { tap } from "rxjs/operators";
129
providedIn: "root",
1310
})
1411
export class SharedVariableService {
15-
constructor(
16-
private authService: AuthService,
17-
private organisationService: OrganisationService,
18-
private userMinimalService: UserMinimalService
19-
) {
20-
this.routerInfo = new BehaviorSubject<number>(0);
21-
}
2212
private selectedOrganisationId: number;
2313
private routerInfo: BehaviorSubject<number>;
2414
private organizationInfo: Organisation[];
25-
private userMinimalList: UserMinimal[];
15+
16+
constructor(private authService: AuthService, private organisationService: OrganisationService) {
17+
this.routerInfo = new BehaviorSubject<number>(0);
18+
}
2619

2720
getValue(): Observable<number> {
2821
return this.routerInfo.asObservable();
Lines changed: 5 additions & 0 deletions
Loading

src/assets/scss/setup/_variables.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,5 +391,5 @@ $warning-color: #fde047;
391391
$default-color: #525252;
392392
$default-neutral-color: #d4d4d4;
393393
$default-icon-color: #404040;
394-
394+
$color-neutral-200: #e5e5e5;
395395
$selector-font-color: #737373;

0 commit comments

Comments
 (0)