40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import app from 'flarum/forum/app';
|
|
|
|
import { override } from 'flarum/common/extend';
|
|
|
|
import DiscussionListState from 'flarum/forum/states/DiscussionListState';
|
|
|
|
export default function extendDiscussionState() {
|
|
override(DiscussionListState.prototype, 'loadPage', async function (this: DiscussionListState, original, page: number = 1) {
|
|
const preloaded = app.data.apiDocument || null;
|
|
|
|
// If existing payload is given or no search is made, fallback on native page.
|
|
if (preloaded || !this.requestParams()?.filter?.q) return original.call(this, page);
|
|
|
|
const params = this.requestParams();
|
|
params.page = {
|
|
offset: this.pageSize * (page - 1),
|
|
...params.page,
|
|
};
|
|
|
|
// Default to latest sort when searching without an explicit sort parameter.
|
|
// Matches the backend default and keeps the dropdown label in sync.
|
|
if (!params.sort) {
|
|
params.sort = '-lastPostedAt';
|
|
}
|
|
|
|
if (Array.isArray(params.include)) {
|
|
params.include = params.include.join(',');
|
|
}
|
|
|
|
// Construct API search URI
|
|
const url = `${app.forum.attribute('apiUrl')}/blomstra/search/${this.type}`;
|
|
|
|
// Make API GET request
|
|
const results = await app.request({ params, url, method: 'GET' });
|
|
|
|
// Parse API response into models and push to store
|
|
return app.store.pushPayload(results);
|
|
});
|
|
}
|