Skip to content

Commit 46206ca

Browse files
committed
Add support for list view parameters
1 parent e6f2a06 commit 46206ca

File tree

7 files changed

+43
-20
lines changed

7 files changed

+43
-20
lines changed

com.woltlab.wcf/templates/shared_listView.tpl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,12 @@
8383
{$view->getPageNo()},
8484
'{unsafe:$view->getBaseUrl()|encodeJS}',
8585
'{unsafe:$view->getSortField()|encodeJS}',
86-
'{unsafe:$view->getSortOrder()|encodeJS}'
86+
'{unsafe:$view->getSortOrder()|encodeJS}',
87+
new Map([
88+
{foreach from=$view->getParameters() key='name' item='value'}
89+
['{unsafe:$name|encodeJS}', '{unsafe:$value|encodeJS}'],
90+
{/foreach}
91+
]),
8792
);
8893
});
8994
</script>

ts/WoltLabSuite/Core/Api/ListViews/GetItems.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export async function getItems(
3737
}
3838
if (listViewParameters) {
3939
listViewParameters.forEach((value, key) => {
40-
url.searchParams.set(`gridViewParameters[${key}]`, value);
40+
url.searchParams.set(`listViewParameters[${key}]`, value);
4141
});
4242
}
4343

ts/WoltLabSuite/Core/Component/ListView.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export class ListView {
1212
readonly #viewElement: HTMLElement;
1313
readonly #state: State;
1414
readonly #noItemsNotice: HTMLElement;
15+
#listViewParameters?: Map<string, string>;
1516

1617
constructor(
1718
viewId: string,
@@ -20,10 +21,12 @@ export class ListView {
2021
baseUrl: string = "",
2122
sortField = "",
2223
sortOrder = "ASC",
24+
listViewParameters?: Map<string, string>,
2325
) {
2426
this.#viewClassName = viewClassName;
2527
this.#viewElement = document.getElementById(`${viewId}_items`) as HTMLTableElement;
2628
this.#noItemsNotice = document.getElementById(`${viewId}_noItemsNotice`) as HTMLElement;
29+
this.#listViewParameters = listViewParameters;
2730

2831
this.#initInteractions();
2932
this.#state = this.#setupState(viewId, pageNo, baseUrl, sortField, sortOrder);
@@ -50,7 +53,7 @@ export class ListView {
5053
this.#state.getSortField(),
5154
this.#state.getSortOrder(),
5255
this.#state.getActiveFilters(),
53-
//this.#gridViewParameters,
56+
this.#listViewParameters,
5457
)
5558
).unwrap();
5659
setInnerHtml(this.#viewElement, response.template);
@@ -66,9 +69,7 @@ export class ListView {
6669
}
6770

6871
async #refreshItem(item: HTMLElement): Promise<void> {
69-
const response = (
70-
await getItem(this.#viewClassName, item.dataset.objectId! /*, this.#gridViewParameters*/)
71-
).unwrap();
72+
const response = (await getItem(this.#viewClassName, item.dataset.objectId!, this.#listViewParameters)).unwrap();
7273
item.replaceWith(createFragmentFromHtml(response.template));
7374
this.#state.refreshSelection();
7475
triggerDomChange();
@@ -107,11 +108,19 @@ export class ListView {
107108

108109
this.#viewElement.addEventListener("interaction:remove", (event) => {
109110
(event.target as HTMLElement).remove();
110-
// this.#checkEmptyTable();
111+
this.#checkEmptyList();
111112
});
112113

113114
this.#viewElement.addEventListener("interaction:reset-selection", () => {
114115
this.#state.resetSelection();
115116
});
116117
}
118+
119+
#checkEmptyList(): void {
120+
if (this.#viewElement.querySelectorAll(".listView__item").length > 0) {
121+
return;
122+
}
123+
124+
void this.#loadItems(StateChangeCause.Change);
125+
}
117126
}

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

Lines changed: 1 addition & 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: 12 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wcfsetup/install/files/lib/page/CategoryArticleListPage.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use wcf\system\exception\IllegalLinkException;
77
use wcf\system\exception\PermissionDeniedException;
88
use wcf\system\listView\user\ArticleListView;
9+
use wcf\system\listView\user\CategoryArticleListView;
910
use wcf\system\MetaTagHandler;
1011
use wcf\system\page\PageLocationManager;
1112
use wcf\system\WCF;
@@ -48,7 +49,7 @@ public function readParameters()
4849
#[\Override]
4950
protected function createListView(): ArticleListView
5051
{
51-
return new ArticleListView();
52+
return new CategoryArticleListView($this->category->categoryID);
5253
}
5354

5455
#[\Override]

wcfsetup/install/files/lib/system/listView/user/CategoryArticleListView.class.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88

99
class CategoryArticleListView extends ArticleListView
1010
{
11-
public function __construct(public readonly ArticleCategory $category)
11+
public function __construct(public readonly int $categoryID)
1212
{
1313
parent::__construct();
1414
}
1515

1616
#[\Override]
1717
protected function createObjectList(): CategoryArticleList
1818
{
19-
$list = new CategoryArticleList($this->category->categoryID, true);
19+
$list = new CategoryArticleList($this->categoryID, true);
2020
if ($list->sqlSelects !== '') {
2121
$list->sqlSelects .= ',';
2222
}
@@ -37,18 +37,18 @@ protected function createObjectList(): CategoryArticleList
3737
#[\Override]
3838
public function isAccessible(): bool
3939
{
40-
return parent::isAccessible() && $this->category->isAccessible();
40+
return parent::isAccessible() && ArticleCategory::getCategory($this->categoryID)->isAccessible();
4141
}
4242

4343
#[\Override]
44-
public function renderItems(): string
44+
protected function getAccessibleLabelGroups(): array
4545
{
46-
return WCF::getTPL()->render('wcf', 'articleListItems', ['view' => $this]);
46+
return ArticleCategory::getCategory($this->categoryID)->getLabelGroups('canViewLabel');
4747
}
4848

4949
#[\Override]
50-
protected function getAccessibleLabelGroups(): array
50+
public function getParameters(): array
5151
{
52-
return $this->category->getLabelGroups('canViewLabel');
52+
return ['categoryID' => $this->categoryID];
5353
}
5454
}

0 commit comments

Comments
 (0)