Skip to content

Commit 98c18bc

Browse files
authored
[Docs Site] Update URL when filter updates on changelog (#20337)
* [Docs Site] Update URL when filter updates on changelog * Load filter value from search params * assert
1 parent 0bf9da0 commit 98c18bc

File tree

1 file changed

+45
-26
lines changed

1 file changed

+45
-26
lines changed

src/pages/changelog/index.astro

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,34 @@ const props = {
8787
"#changelogs-next-filter",
8888
);
8989

90-
filter?.addEventListener("change", () => {
90+
const button = document.querySelector<HTMLButtonElement>(
91+
"#changelogs-next-button",
92+
);
93+
94+
const url = new URL(window.location.href);
95+
96+
if (filter && url.searchParams.has("product")) {
97+
filter.value = url.searchParams.get("product")!;
98+
updateFilter();
99+
}
100+
101+
filter?.addEventListener("change", updateFilter);
102+
103+
button?.addEventListener("click", () => {
91104
const entries = [
92105
...document.querySelectorAll<HTMLElement>("[data-products]"),
93106
];
94107

95108
if (!entries) return;
96109

97-
const value = filter.value;
110+
const value = filter!.value;
98111

99-
const filtered = entries
112+
const hidden = entries
100113
.filter((e) => {
114+
if (e.style.display !== "none") {
115+
return false;
116+
}
117+
101118
if (value === "all") {
102119
return true;
103120
}
@@ -114,26 +131,14 @@ const props = {
114131

115132
return false;
116133
})
117-
.slice(0, 5);
118-
119-
for (const entry of entries) {
120-
const show = filtered.includes(entry);
134+
.slice(0, 10);
121135

122-
if (show) {
123-
entry.style.display = "";
124-
} else {
125-
entry.style.display = "none";
126-
}
127-
}
136+
hidden.forEach((e) => (e.style.display = ""));
128137

129138
hideButton();
130139
});
131140

132-
const button = document.querySelector<HTMLButtonElement>(
133-
"#changelogs-next-button",
134-
);
135-
136-
button?.addEventListener("click", () => {
141+
function updateFilter() {
137142
const entries = [
138143
...document.querySelectorAll<HTMLElement>("[data-products]"),
139144
];
@@ -142,12 +147,8 @@ const props = {
142147

143148
const value = filter!.value;
144149

145-
const hidden = entries
150+
const filtered = entries
146151
.filter((e) => {
147-
if (e.style.display !== "none") {
148-
return false;
149-
}
150-
151152
if (value === "all") {
152153
return true;
153154
}
@@ -164,12 +165,30 @@ const props = {
164165

165166
return false;
166167
})
167-
.slice(0, 10);
168+
.slice(0, 5);
168169

169-
hidden.forEach((e) => (e.style.display = ""));
170+
for (const entry of entries) {
171+
const show = filtered.includes(entry);
172+
173+
if (show) {
174+
entry.style.display = "";
175+
} else {
176+
entry.style.display = "none";
177+
}
178+
}
179+
180+
const url = new URL(window.location.href);
181+
182+
if (value === "all") {
183+
url.searchParams.delete("product");
184+
} else {
185+
url.searchParams.set("product", value);
186+
}
187+
188+
history.replaceState(null, "", url.href);
170189

171190
hideButton();
172-
});
191+
}
173192

174193
function hideButton() {
175194
const entries = [

0 commit comments

Comments
 (0)