diff --git a/js/src/forum/PaginatedListStates/extendDiscussionState.tsx b/js/src/forum/PaginatedListStates/extendDiscussionState.tsx new file mode 100644 index 0000000..da1d7cc --- /dev/null +++ b/js/src/forum/PaginatedListStates/extendDiscussionState.tsx @@ -0,0 +1,30 @@ +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 params = this.requestParams(); + params.page = { + offset: this.pageSize * (page - 1), + ...params.page, + }; + + 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 + const models = app.store.pushPayload(results); + + return models; + }); +} diff --git a/js/src/forum/index.ts b/js/src/forum/index.ts index 10bb984..5db405e 100644 --- a/js/src/forum/index.ts +++ b/js/src/forum/index.ts @@ -6,6 +6,7 @@ import { extend } from 'flarum/common/extend'; import ItemList from 'flarum/common/utils/ItemList'; import DiscussionsSearchSource from './SearchSources/DiscussionsSearchSource'; +import extendDiscussionState from './PaginatedListStates/extendDiscussionState'; app.initializers.add('blomstra-search', () => { extend(Search.prototype, 'sourceItems', function (this: Search, items: ItemList) { @@ -16,4 +17,6 @@ app.initializers.add('blomstra-search', () => { // console.log(items); }); + + extendDiscussionState(); });