Skip to content
This repository was archived by the owner on Dec 18, 2024. It is now read-only.

Commit 48fef21

Browse files
committed
feat(nav): improve nav toggling
--- scss/include/_layout.scss | 18 ++++++++++--- src/app.html | 2 +- src/resources/side-nav/nav-state.js | 28 ++++++++++++++++++++ src/resources/side-nav/nav-toggler.js | 14 ++++++---- src/resources/side-nav/navigation.js | 38 ++++++++++++++++++---------- src/resources/side-nav/ui-state.js | 15 ----------- 6 files changed, 78 insertions(+), 37 deletions(-)
1 parent ecc022b commit 48fef21

File tree

6 files changed

+78
-37
lines changed

6 files changed

+78
-37
lines changed

scss/include/_layout.scss

+15-3
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ body {
99
display: flex;
1010
}
1111

12-
navigation {
12+
.navigation-pinned {
1313
flex: 1;
1414
min-width: 230px;
1515
max-width: 230px;
1616
z-index: 1020;
17+
display: none;
1718
}
1819

19-
.sidebar-nav-hidden {
20-
display: none;
20+
.show-navigation {
21+
display: block;
2122
}
2223

2324
navigation-side {
@@ -27,6 +28,17 @@ navigation-side {
2728
width: 230px;
2829
}
2930

31+
@media (max-width: 992px) {
32+
.show-navigation {
33+
display: block;
34+
position: absolute;
35+
}
36+
37+
.show-navigation navigation-side {
38+
background-color: #fff;
39+
}
40+
}
41+
3042
main {
3143
flex: 1;
3244
margin-top: 54px;

src/app.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<navigation-top router.bind="router"></navigation-top>
1111
</header>
1212

13-
<navigation class="sidebar-nav">
13+
<navigation class="sidebar-nav navigation-pinned show-navigation">
1414
<navigation-side></navigation-side>
1515
</navigation>
1616

src/resources/side-nav/nav-state.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const MAX_WIDTH_MOBILE_NAV = 992;
2+
3+
class NavState {
4+
navToggled = true;
5+
mobileNavToggled = false;
6+
mobileNav = false;
7+
8+
toggleNav() {
9+
this.navToggled = !this.navToggled;
10+
}
11+
12+
toggleMobileNav() {
13+
this.mobileNavToggled = !this.mobileNavToggled;
14+
}
15+
16+
setMobileNav(mobileNav) {
17+
this.mobileNav = mobileNav;
18+
}
19+
20+
isMobileNav() {
21+
return this.mobileNav;
22+
}
23+
}
24+
25+
export {
26+
MAX_WIDTH_MOBILE_NAV,
27+
NavState
28+
};

src/resources/side-nav/nav-toggler.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {customElement, inlineView} from 'aurelia-templating';
2-
import {UIState} from './ui-state';
2+
import {NavState, MAX_WIDTH_MOBILE_NAV} from './nav-state';
33

44
@customElement('nav-toggler')
55
@inlineView(`
@@ -10,13 +10,17 @@ import {UIState} from './ui-state';
1010
</template>
1111
`)
1212
export class NavToggler {
13-
static inject = [UIState];
13+
static inject = [NavState];
1414

15-
constructor(uiState) {
16-
this.uiState = uiState;
15+
constructor(navState) {
16+
this.navState = navState;
1717
}
1818

1919
toggleNav() {
20-
this.uiState.toggleNav();
20+
if (this.navState.isMobileNav() == false) {
21+
this.navState.toggleNav();
22+
} else {
23+
this.navState.toggleMobileNav();
24+
}
2125
}
2226
}

src/resources/side-nav/navigation.js

+25-13
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,42 @@
11
import {BindingEngine, customElement, noView, inject} from 'aurelia-framework';
2-
import {UIState} from './ui-state';
2+
import {NavState, MAX_WIDTH_MOBILE_NAV} from './nav-state';
33

44
@noView()
55
@customElement('navigation')
6-
@inject(BindingEngine, UIState, Element)
6+
@inject(BindingEngine, NavState, Element)
77
export class Navigation {
88
showNavigationEvent = () => {
9-
if (window.innerWidth < 1200) {
10-
this.uiState.hideNav();
9+
if (window.innerWidth < MAX_WIDTH_MOBILE_NAV) {
10+
this.navState.setMobileNav(true);
11+
this.element.classList.remove('navigation-pinned');
1112
} else {
12-
this.uiState.showNav();
13+
this.navState.setMobileNav(false);
14+
this.element.classList.add('navigation-pinned');
1315
}
1416
};
1517

16-
constructor(bindingEngine, uiState, element) {
17-
this.uiState = uiState;
18+
constructor(bindingEngine, navState, element) {
19+
this.navState = navState;
1820
this.element = element;
1921

20-
let subscription = bindingEngine.propertyObserver(this.uiState, 'navVisible').subscribe(this.navStateChanged.bind(this));
22+
bindingEngine.propertyObserver(this.navState, 'navToggled').subscribe(this.navStateChanged.bind(this));
23+
bindingEngine.propertyObserver(this.navState, 'mobileNavToggled').subscribe(this.mobileNavStateChanged.bind(this));
24+
this.showNavigationEvent();
2125
}
2226

23-
navStateChanged(newValue, oldValue) {
24-
if (this.uiState.navVisible) {
25-
this.element.classList.remove('sidebar-nav-hidden')
26-
} else {
27-
this.element.classList.add('sidebar-nav-hidden')
27+
navStateChanged() {
28+
if (this.navState.isMobileNav() === false && this.navState.navToggled === true) {
29+
this.element.classList.add('show-navigation');
30+
} else if (this.navState.isMobileNav() === false && this.navState.navToggled === false) {
31+
this.element.classList.remove('show-navigation');
32+
}
33+
}
34+
35+
mobileNavStateChanged() {
36+
if (this.navState.isMobileNav() === true && this.navState.mobileNavToggled === false) {
37+
this.element.classList.add('show-navigation');
38+
} else if (this.navState.isMobileNav() === true && this.navState.mobileNavToggled === false) {
39+
this.element.classList.remove('show-navigation')
2840
}
2941
}
3042

src/resources/side-nav/ui-state.js

-15
This file was deleted.

0 commit comments

Comments
 (0)