Skip to content

Commit 911d1bc

Browse files
authored
Merge pull request #6522 from WoltLab/6.2-use-filter-when-reloading-rows
Apply filters when reloading a grid view row
2 parents 74cffb1 + 97c7e47 commit 911d1bc

File tree

10 files changed

+54
-6
lines changed

10 files changed

+54
-6
lines changed

ts/WoltLabSuite/Core/Api/GridViews/GetRow.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ type Response = {
1717
export async function getRow(
1818
gridViewClass: string,
1919
objectId: string | number,
20+
filters?: Map<string, string>,
2021
gridViewParameters?: Map<string, string>,
2122
): Promise<Response> {
2223
const url = new URL(`${window.WSC_RPC_API_URL}core/grid-views/row`);
2324
url.searchParams.set("gridView", gridViewClass);
2425
url.searchParams.set("objectID", objectId.toString());
26+
if (filters) {
27+
filters.forEach((value, key) => {
28+
url.searchParams.set(`filters[${key}]`, value);
29+
});
30+
}
2531
if (gridViewParameters) {
2632
gridViewParameters.forEach((value, key) => {
2733
if (Array.isArray(value)) {

ts/WoltLabSuite/Core/Api/ListViews/GetItem.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ type Response = {
1717
export async function getItem(
1818
listViewClass: string,
1919
objectId: string | number,
20+
filters?: Map<string, string>,
2021
listViewParameters?: Map<string, string>,
2122
): Promise<Response> {
2223
const url = new URL(`${window.WSC_RPC_API_URL}core/list-views/item`);
2324
url.searchParams.set("listView", listViewClass);
2425
url.searchParams.set("objectID", objectId.toString());
26+
if (filters) {
27+
filters.forEach((value, key) => {
28+
url.searchParams.set(`filters[${key}]`, value);
29+
});
30+
}
2531
if (listViewParameters) {
2632
listViewParameters.forEach((value, key) => {
2733
if (Array.isArray(value)) {

ts/WoltLabSuite/Core/Component/GridView.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,17 @@ export class GridView {
6767
}
6868

6969
async #refreshRow(row: HTMLElement): Promise<void> {
70-
const { template } = await getRow(this.#gridClassName, row.dataset.objectId!, this.#gridViewParameters);
70+
const { template } = await getRow(
71+
this.#gridClassName,
72+
row.dataset.objectId!,
73+
this.#state.getActiveFilters(),
74+
this.#gridViewParameters,
75+
);
7176

7277
row.replaceWith(DomUtil.createFragmentFromHtml(template));
7378
this.#state.refreshSelection();
7479
DomChangeListener.trigger();
80+
this.#checkEmptyTable();
7581
}
7682

7783
#initInteractions(): void {

ts/WoltLabSuite/Core/Component/ListView.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,16 @@ export class ListView {
7171
}
7272

7373
async #refreshItem(item: HTMLElement): Promise<void> {
74-
const { template } = await getItem(this.#viewClassName, item.dataset.objectId!, this.#listViewParameters);
74+
const { template } = await getItem(
75+
this.#viewClassName,
76+
item.dataset.objectId!,
77+
this.#state.getActiveFilters(),
78+
this.#listViewParameters,
79+
);
7580
item.replaceWith(createFragmentFromHtml(template));
7681
this.#state.refreshSelection();
7782
triggerDomChange();
83+
this.#checkEmptyList();
7884
}
7985

8086
#initInteractions(): void {

wcfsetup/install/files/js/WoltLabSuite/Core/Api/GridViews/GetRow.js

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

wcfsetup/install/files/js/WoltLabSuite/Core/Api/ListViews/GetItem.js

Lines changed: 6 additions & 1 deletion
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.js

Lines changed: 2 additions & 1 deletion
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/ListView.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wcfsetup/install/files/lib/system/endpoint/controller/core/gridViews/GetRow.class.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public function __invoke(ServerRequestInterface $request, array $variables): Res
4040
throw new PermissionDeniedException();
4141
}
4242

43+
if ($parameters->filters !== []) {
44+
$view->setActiveFilters($parameters->filters);
45+
}
46+
4347
$view->setObjectIDFilter($parameters->objectID);
4448

4549
return new JsonResponse([
@@ -55,6 +59,8 @@ public function __construct(
5559
/** @var non-empty-string */
5660
public readonly string $gridView,
5761
public readonly string|int $objectID,
62+
/** @var string[] */
63+
public readonly array $filters,
5864
/** @var array<string, string|string[]> */
5965
public readonly array $gridViewParameters,
6066
) {}

wcfsetup/install/files/lib/system/endpoint/controller/core/listViews/GetItem.class.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public function __invoke(ServerRequestInterface $request, array $variables): Res
4040
throw new PermissionDeniedException();
4141
}
4242

43+
if ($parameters->filters !== []) {
44+
$view->setActiveFilters($parameters->filters);
45+
}
46+
4347
$view->setObjectIDFilter($parameters->objectID);
4448

4549
return new JsonResponse([
@@ -55,6 +59,8 @@ public function __construct(
5559
/** @var non-empty-string */
5660
public readonly string $listView,
5761
public readonly string|int $objectID,
62+
/** @var string[] */
63+
public readonly array $filters,
5864
/** @var array<string, string|string[]> */
5965
public readonly array $listViewParameters,
6066
) {}

0 commit comments

Comments
 (0)