Merge pull request #9 from blomstra/im/fix-search-override

fix: override search not fired correctly
This commit is contained in:
Daniël Klabbers 2022-11-18 10:38:47 +01:00 committed by GitHub
commit 09fb4e8b7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 24 deletions

View File

@ -25,7 +25,7 @@ Enable the extension inside the admin area and configure the settings.
Enable the extension in your admin area. Now to seed your existing discussions use the following command: Enable the extension in your admin area. Now to seed your existing discussions use the following command:
``` ```
php flarum blomstra:search:build php flarum blomstra:search:index
``` ```
All mutations to discussions are automatically added and removed from the elasticsearch index. All mutations to discussions are automatically added and removed from the elasticsearch index.

View File

@ -8,8 +8,8 @@ export default function extendDiscussionState() {
override(DiscussionListState.prototype, 'loadPage', async function (this: DiscussionListState, original, page: number = 1) { override(DiscussionListState.prototype, 'loadPage', async function (this: DiscussionListState, original, page: number = 1) {
const preloaded = app.data.apiDocument || null; const preloaded = app.data.apiDocument || null;
// If existing payload is given or no search is made, fallback on native page. // If existing payload is given fallback on native page.
if (preloaded || !this.requestParams()?.filter?.q) return original.call(this, page); if (preloaded) return original.call(this, page);
const params = this.requestParams(); const params = this.requestParams();
params.page = { params.page = {

View File

@ -44,7 +44,7 @@ export default class DiscussionsSearchSource implements SearchSource {
this.results.set(query, models); this.results.set(query, models);
} }
view(query: string): Mithril.Children { view(query: string): Array<Mithril.Vnode> {
query = query.toLowerCase(); query = query.toLowerCase();
// Get results from map // Get results from map
@ -54,7 +54,7 @@ export default class DiscussionsSearchSource implements SearchSource {
const mostRelevantPost = discussion.mostRelevantPost(); const mostRelevantPost = discussion.mostRelevantPost();
return ( return (
<li className="DiscussionSearchResult" data-index={`${this.type}${discussion.id()}`} key={`${this.type}${discussion.id()}`}> <li className="DiscussionSearchResult" data-index={`${this.type}${discussion.id()}`}>
<Link href={app.route.discussion(discussion, mostRelevantPost && mostRelevantPost.number())}> <Link href={app.route.discussion(discussion, mostRelevantPost && mostRelevantPost.number())}>
<div className="DiscussionSearchResult-title">{highlight(discussion.title(), query)}</div> <div className="DiscussionSearchResult-title">{highlight(discussion.title(), query)}</div>
{!!mostRelevantPost && <div className="DiscussionSearchResult-excerpt">{highlight(mostRelevantPost.contentPlain(), query, 100)}</div>} {!!mostRelevantPost && <div className="DiscussionSearchResult-excerpt">{highlight(mostRelevantPost.contentPlain(), query, 100)}</div>}
@ -63,16 +63,14 @@ export default class DiscussionsSearchSource implements SearchSource {
); );
}); });
return ( return [
<> <li className="Dropdown-header">{app.translator.trans('core.forum.search.discussions_heading')}</li>,
<li className="Dropdown-header">{app.translator.trans('core.forum.search.discussions_heading')}</li>
<li> <li>
<LinkButton icon="fas fa-search" href={app.route('index', { q: query })}> <LinkButton icon="fas fa-search" href={app.route('index', { q: query })}>
{app.translator.trans('core.forum.search.all_discussions_button', { query })} {app.translator.trans('core.forum.search.all_discussions_button', { query })}
</LinkButton> </LinkButton>
</li> </li>,
{results} ...results,
</> ];
);
} }
} }

View File

@ -1,6 +1,6 @@
import app from 'flarum/forum/app'; import app from 'flarum/forum/app';
import Search from 'flarum/forum/components/Search'; import Search, { SearchAttrs, SearchSource } from 'flarum/forum/components/Search';
import { extend } from 'flarum/common/extend'; import { extend } from 'flarum/common/extend';
import ItemList from 'flarum/common/utils/ItemList'; import ItemList from 'flarum/common/utils/ItemList';
@ -9,12 +9,15 @@ import DiscussionsSearchSource from './SearchSources/DiscussionsSearchSource';
import extendDiscussionState from './PaginatedListStates/extendDiscussionState'; import extendDiscussionState from './PaginatedListStates/extendDiscussionState';
app.initializers.add('blomstra-search', () => { app.initializers.add('blomstra-search', () => {
extend(Search.prototype, 'sourceItems', function (this: Search, items: ItemList) { extend(Search.prototype, 'sourceItems', function (this: Search<SearchAttrs>, items: ItemList<SearchSource>) {
// items.remove('users'); items.setContent('discussions', new DiscussionsSearchSource());
items.remove('discussions');
items.add('discussions', new DiscussionsSearchSource());
}); });
extendDiscussionState();
}); });
app.initializers.add(
'blomstra-search-early',
() => {
extendDiscussionState();
},
999999
);