Skip to content

Commit 279ac1b

Browse files
authored
Merge pull request #126 from fleetbase/feature/mobile-sidebar-service-sync
Fix mobile navbar sidebar state sync
2 parents a692f70 + 743d6ba commit 279ac1b

4 files changed

Lines changed: 30 additions & 30 deletions

File tree

addon/components/layout/mobile-navbar.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{{#if (media "isMobile")}}
2-
<div class="next-mobile-navbar" {{did-insert this.setupMobileNavbar}} ...attributes>
2+
<div class="next-mobile-navbar" ...attributes>
33
<div role="menubar" class="next-mobile-navbar-tabs">
44
<div role="menu" class="scrollable-nav-items">
55
{{#each this.menuItems as |menuItem|}}

addon/components/layout/mobile-navbar.js

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,23 @@ import { action } from '@ember/object';
77
export default class LayoutMobileNavbarComponent extends Component {
88
@service router;
99
@service hostRouter;
10+
@service sidebar;
1011
@service abilities;
1112
@service universe;
12-
@tracked navbarNode;
13-
@tracked sidebarNode;
1413
@tracked extensions = [];
1514
@tracked menuItems = [];
15+
routeDidChangeHandler = null;
1616

1717
constructor(owner, { menuItems = [] }) {
1818
super(...arguments);
1919
this.extensions = getOwner(this).application.extensions ?? [];
2020
this.menuItems = this.mergeMenuItems(menuItems);
21+
this.routeDidChangeHandler = () => this.closeSidebar();
22+
this.getRouter().on('routeDidChange', this.routeDidChangeHandler);
23+
24+
if (typeof this.args.onSetup === 'function') {
25+
this.args.onSetup(this);
26+
}
2127
}
2228

2329
mergeMenuItems(menuItems = []) {
@@ -41,44 +47,37 @@ export default class LayoutMobileNavbarComponent extends Component {
4147
return visibleMenuItems;
4248
}
4349

44-
@action setupMobileNavbar(element) {
45-
this.navbarNode = element;
46-
this.sidebarNode = element.previousElementSibling.querySelector('nav.next-sidebar');
47-
48-
if (typeof this.args.onSetup === 'function') {
49-
this.onSetup(this);
50+
@action async routeTo(route) {
51+
try {
52+
await this.getRouter().transitionTo(route);
53+
this.closeSidebar();
54+
} catch (error) {
55+
void error;
5056
}
51-
52-
// when hostrouter transitions close sidebar automatically
53-
this.getRouter().on('routeDidChange', this.closeSidebar.bind(this));
54-
}
55-
56-
@action routeTo(route) {
57-
this.getRouter()
58-
.transitionTo(route)
59-
.then(() => {
60-
this.closeSidebar();
61-
});
6257
}
6358

6459
@action toggleSidebar() {
65-
if (this.isSidebarOpen()) {
66-
this.closeSidebar();
67-
} else {
68-
this.openSidebar();
69-
}
60+
this.sidebar.toggle();
7061
}
7162

7263
@action isSidebarOpen() {
73-
return this.sidebarNode?.classList?.contains('is-open');
64+
return this.sidebar.isVisible;
7465
}
7566

7667
@action closeSidebar() {
77-
this.sidebarNode?.classList?.remove('is-open');
68+
this.sidebar.hide();
7869
}
7970

8071
@action openSidebar() {
81-
this.sidebarNode?.classList?.add('is-open');
72+
this.sidebar.show();
73+
}
74+
75+
willDestroy() {
76+
super.willDestroy(...arguments);
77+
if (this.routeDidChangeHandler) {
78+
this.getRouter().off('routeDidChange', this.routeDidChangeHandler);
79+
this.routeDidChangeHandler = null;
80+
}
8281
}
8382

8483
getRouter() {

addon/styles/layout/mobile.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
@apply transition duration-500 ease-in-out;
1212
}
1313

14-
.next-sidebar.is-open {
14+
.next-sidebar:not(.sidebar-hidden, .sidebar-hide),
15+
.next-sidebar.sidebar-minimized {
1516
@apply opacity-100;
1617
transform: translateX(0px);
1718
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fleetbase/ember-ui",
3-
"version": "0.3.27",
3+
"version": "0.3.28",
44
"description": "Fleetbase UI provides all the interface components, helpers, services and utilities for building a Fleetbase extension into the Console.",
55
"keywords": [
66
"fleetbase-ui",

0 commit comments

Comments
 (0)