Skip to content

Commit 76364a3

Browse files
now able to hide menu
1 parent 8228b23 commit 76364a3

File tree

10 files changed

+141
-8
lines changed

10 files changed

+141
-8
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: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
@import "src/assets/scss/setup/variables";
33

44
#content {
5+
transition: margin-left 0.3s ease;
6+
57
@media (min-width: $screen-md-min) {
6-
padding-left: $navWidth;
8+
padding-left: 0;
9+
10+
&.nav-visible {
11+
padding-left: $navWidth;
12+
}
713
}
814
}

src/app/app.component.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ export class AppComponent {
1010
title = "OS2IoT-frontend";
1111
isLoggedIn = true;
1212

13+
isNavVisible = false;
14+
15+
onNavToggle(isVisible: boolean) {
16+
this.isNavVisible = isVisible;
17+
}
18+
1319
constructor(private loggedInService: LoggedInService) {
1420
loggedInService.changeEmitted?.subscribe(change => {
1521
this.isLoggedIn = change;

src/app/navbar/navbar.component.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<nav
22
class="navbar navbar-expand-md navbar-light d-md-flex align-items-md-start flex-md-column p-3"
33
aria-expanded="false"
4+
*ngIf="isVisible"
5+
[@navAnimation]
46
>
57
<img class="img-logo" alt="OS2IoT-logo" [src]="imagePath" />
68

@@ -138,4 +140,13 @@
138140
</ul>
139141
</div>
140142
</ng-template>
143+
<div class="toggle-button hide-button" (click)="toggleNavbar()">
144+
<mat-icon class="icon-arrow-nav" svgIcon="nav-arrow"></mat-icon>
145+
</div>
141146
</nav>
147+
148+
@if(!isVisible){
149+
<div class="toggle-button show-button" (click)="toggleNavbar()">
150+
<mat-icon class="icon-arrow-nav rotate" svgIcon="nav-arrow"></mat-icon>
151+
</div>
152+
}

src/app/navbar/navbar.component.scss

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

src/app/navbar/navbar.component.ts

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { Component, OnInit } from "@angular/core";
1+
import { animate, state, style, transition, trigger } from "@angular/animations";
2+
import { Component, EventEmitter, OnInit, Output } from "@angular/core";
3+
import { MatIconRegistry } from "@angular/material/icon";
4+
import { DomSanitizer } from "@angular/platform-browser";
25
import { Router } from "@angular/router";
36
import { Organisation } from "@app/admin/organisation/organisation.model";
47
import { PermissionType } from "@app/admin/permission/permission.model";
@@ -17,6 +20,35 @@ import { UserResponse } from "./../admin/users/user.model";
1720
selector: "app-navbar",
1821
templateUrl: "./navbar.component.html",
1922
styleUrls: ["./navbar.component.scss"],
23+
animations: [
24+
trigger("navAnimation", [
25+
state(
26+
"void",
27+
style({
28+
transform: "translateX(-100%)",
29+
opacity: 0,
30+
})
31+
),
32+
transition(":enter", [
33+
animate(
34+
"0.3s ease-out",
35+
style({
36+
transform: "translateX(0)",
37+
opacity: 1,
38+
})
39+
),
40+
]),
41+
transition(":leave", [
42+
animate(
43+
"0.3s ease-in",
44+
style({
45+
transform: "translateX(-100%)",
46+
opacity: 0,
47+
})
48+
),
49+
]),
50+
]),
51+
],
2052
})
2153
export class NavbarComponent implements OnInit {
2254
public organisations: Organisation[];
@@ -30,6 +62,8 @@ export class NavbarComponent implements OnInit {
3062
isLoginMode = true;
3163
user: User;
3264

65+
isVisible = true;
66+
3367
userInfo: CurrentUserInfoResponse;
3468
faSignInAlt = faSignInAlt;
3569
imagePath = "../../assets/images/os2iot.png ";
@@ -41,11 +75,21 @@ export class NavbarComponent implements OnInit {
4175
private sharedVariableService: SharedVariableService,
4276
private loggedInService: LoggedInService,
4377
private meService: MeService,
44-
private route: Router
78+
private route: Router,
79+
private matIconRegistry: MatIconRegistry,
80+
private domSanitizer: DomSanitizer
4581
) {
82+
this.matIconRegistry.addSvgIcon(
83+
"nav-arrow",
84+
this.domSanitizer.bypassSecurityTrustResourceUrl("assets/images/arrows-up-to-line.svg"),
85+
{}
86+
);
87+
4688
translate.use("da");
4789
}
4890

91+
@Output() navToggle = new EventEmitter<boolean>();
92+
4993
onLogout() {
5094
this.authService.logout();
5195
this.router.navigateByUrl("auth");
@@ -90,6 +134,7 @@ export class NavbarComponent implements OnInit {
90134
this.getAllowedOrganizations();
91135
this.organisations.sort((a, b) => a.name.localeCompare(b.name, "en", { numeric: true }));
92136
this.selected = this.sharedVariableService.getSelectedOrganisationId();
137+
this.navToggle.emit(this.isVisible);
93138
}
94139

95140
getAllowedOrganizations() {
@@ -132,6 +177,11 @@ export class NavbarComponent implements OnInit {
132177
}
133178
}
134179

180+
public toggleNavbar() {
181+
this.isVisible = !this.isVisible;
182+
this.navToggle.emit(this.isVisible);
183+
}
184+
135185
setSelectedOrganisation(value: number) {
136186
this.sharedVariableService.setSelectedOrganisationId(value);
137187
}

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: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
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";
4+
import { UserMinimal } from "@app/admin/users/user-minimal.model";
65
import { UserMinimalService } from "@app/admin/users/user-minimal.service";
76
import { AuthService, CurrentUserInfoResponse } from "@auth/auth.service";
87
import { BehaviorSubject, Observable } from "rxjs";
@@ -68,6 +67,10 @@ export class SharedVariableService {
6867
return this.organizationInfo;
6968
}
7069

70+
getCurrentOrgRole(): string {
71+
return "ss";
72+
}
73+
7174
getUsername(): string {
7275
return this.getUserInfo()?.user?.name;
7376
}
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)