Skip to content

Commit 896d459

Browse files
committed
Delegate the filter handling to Filter
1 parent 3337b26 commit 896d459

File tree

4 files changed

+43
-29
lines changed

4 files changed

+43
-29
lines changed

ts/WoltLabSuite/Core/Component/GridView.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ export class GridView {
109109
parameters.push(parameter);
110110
}
111111

112-
this.#filter.getActiveFilters().forEach((value, key) => {
113-
parameters.push([`filters[${key}]`, value]);
114-
});
112+
for (const parameter of this.#filter.getQueryParameters()) {
113+
parameters.push(parameter);
114+
}
115115

116116
if (parameters.length > 0) {
117117
url.search += url.search !== "" ? "&" : "?";
@@ -145,21 +145,16 @@ export class GridView {
145145

146146
#handlePopState(): void {
147147
let pageNo = 1;
148-
this.#filter.resetFilters();
149148

150149
const url = new URL(window.location.href);
151150
url.searchParams.forEach((value, key) => {
152151
if (key === "pageNo") {
153152
pageNo = parseInt(value, 10);
154153
return;
155154
}
156-
157-
const matches = key.match(/^filters\[([a-z0-9_]+)\]$/i);
158-
if (matches) {
159-
this.#filter.setFilter(matches[1], value);
160-
}
161155
});
162156

157+
this.#filter.updateFromSearchParams(url.searchParams);
163158
this.#sorting.updateFromSearchParams(url.searchParams);
164159

165160
this.#switchPage(pageNo, false);

ts/WoltLabSuite/Core/Component/GridView/Filter.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,29 @@ export class Filter extends EventTarget {
1616
this.#setupEventListeners();
1717
}
1818

19-
resetFilters(): void {
20-
this.#filters.clear();
19+
getActiveFilters(): Map<string, string> {
20+
return new Map(this.#filters);
2121
}
2222

23-
setFilter(key: string, value: string): void {
24-
this.#filters.set(key, value);
23+
getQueryParameters(): [string, string][] {
24+
const parameters: [string, string][] = [];
25+
26+
for (const [key, value] of this.#filters.entries()) {
27+
parameters.push([`filters[${key}]`, value]);
28+
}
29+
30+
return parameters;
2531
}
2632

27-
getActiveFilters(): Map<string, string> {
28-
return new Map(this.#filters);
33+
updateFromSearchParams(params: URLSearchParams): void {
34+
this.#filters.clear();
35+
36+
params.forEach((value, key) => {
37+
const matches = key.match(/^filters\[([a-z0-9_]+)\]$/i);
38+
if (matches) {
39+
this.#filters.set(matches[1], value);
40+
}
41+
});
2942
}
3043

3144
setFilterLabels(labels: ArrayLike<string>): void {

wcfsetup/install/files/js/WoltLabSuite/Core/Component/GridView.js

Lines changed: 4 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wcfsetup/install/files/js/WoltLabSuite/Core/Component/GridView/Filter.js

Lines changed: 16 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)