Skip to content

Commit f0c236c

Browse files
author
tong.hau
committed
chore(mainnav): refactor code to use available sgds event to prevent creating redundant events
1 parent 3435178 commit f0c236c

File tree

3 files changed

+20
-23
lines changed

3 files changed

+20
-23
lines changed

src/components/Mainnav/sgds-mainnav-dropdown.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { html } from "lit";
22
import { consume } from "@lit/context";
33
import { property, query, queryAssignedElements, state } from "lit/decorators.js";
4+
import { SgdsMainnav } from "./sgds-mainnav";
45
import { classMap } from "lit/directives/class-map.js";
56
import genId from "../../utils/generateId";
67
import dropdownStyle from "../Dropdown/dropdown.css";
@@ -71,16 +72,20 @@ export class SgdsMainnavDropdown extends SgdsElement {
7172

7273
connectedCallback() {
7374
super.connectedCallback();
74-
document.addEventListener("close-dropdown-menu", () => {
75-
this._resetDropdownMenu();
76-
this._hideDropdownMenuItems();
75+
document.addEventListener("sgds-after-hide", (e: CustomEvent) => {
76+
const target = e.target as HTMLElement;
77+
const mainnav = target.closest("sgds-mainnav") as SgdsMainnav;
78+
if (mainnav) {
79+
this._resetDropdownMenu();
80+
this._hideDropdownMenuItems();
81+
}
7782
});
7883
}
7984

8085
disconnectedCallback() {
8186
super.disconnectedCallback();
8287
// Clean up the event listener when the element is removed from the DOM
83-
document.removeEventListener("close-dropdown-menu", () => {
88+
document.removeEventListener("sgds-after-hide", () => {
8489
this._resetDropdownMenu();
8590
this._hideDropdownMenuItems();
8691
});
@@ -120,8 +125,10 @@ export class SgdsMainnavDropdown extends SgdsElement {
120125
link.setAttribute("href", "javascript:void(0)");
121126
link.setAttribute("tabindex", "-1");
122127
} else {
123-
link.addEventListener("click", () => {
124-
this.emit("sgds-mainnav-close");
128+
link.addEventListener("click", (e: Event) => {
129+
const target = e.target as HTMLElement;
130+
const mainnav = target.closest("sgds-mainnav") as SgdsMainnav;
131+
mainnav.hide();
125132
});
126133
}
127134
});

src/components/Mainnav/sgds-mainnav-item.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { html } from "lit";
22
import { property } from "lit/decorators.js";
3+
import { SgdsMainnav } from "./sgds-mainnav";
34
import { watch } from "../../utils/watch";
45
import SgdsElement from "../../base/sgds-element";
56
import mainnavItemStyle from "./mainnav-item.css";
@@ -60,8 +61,10 @@ export class SgdsMainnavItem extends SgdsElement {
6061
return;
6162
}
6263

63-
anchor.addEventListener("click", () => {
64-
this.emit("sgds-mainnav-close");
64+
anchor.addEventListener("click", (e: Event) => {
65+
const target = e.target as HTMLElement;
66+
const mainnav = target.closest("sgds-mainnav") as SgdsMainnav;
67+
mainnav.hide();
6568
});
6669
}
6770
}

src/components/Mainnav/sgds-mainnav.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,14 @@ export class SgdsMainnav extends SgdsElement {
128128

129129
connectedCallback() {
130130
super.connectedCallback();
131+
131132
this.addEventListener("click", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));
132-
this.addEventListener("sgds-mainnav-close", () => {
133-
if (this.breakpointReached) {
134-
this.hide();
135-
}
136-
});
137133
}
138134

139135
disconnectedCallback() {
140136
super.disconnectedCallback();
141137

142138
this.removeEventListener("click", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));
143-
this.removeEventListener("sgds-mainnav-close", () => {
144-
if (this.breakpointReached) {
145-
this.hide();
146-
}
147-
});
148139
}
149140

150141
firstUpdated() {
@@ -174,8 +165,6 @@ export class SgdsMainnav extends SgdsElement {
174165
document.querySelector("body").style.overflow = "hidden";
175166
this.show();
176167
}
177-
178-
this.header.focus();
179168
}
180169

181170
private async _handleMobileNav() {
@@ -234,6 +223,7 @@ export class SgdsMainnav extends SgdsElement {
234223
// Show
235224
this._animateToShow();
236225
} else {
226+
this.header.focus();
237227
// Hide
238228
this._animateToHide();
239229
}
@@ -256,9 +246,6 @@ export class SgdsMainnav extends SgdsElement {
256246

257247
this.expanded = false;
258248
document.querySelector("body").style.removeProperty("overflow");
259-
setTimeout(() => {
260-
this.emit("close-dropdown-menu");
261-
}, 200);
262249

263250
return waitForEvent(this, "sgds-after-hide");
264251
}

0 commit comments

Comments
 (0)