commit
59a8a1c3d9
|
@ -27,9 +27,6 @@ export class CoreSearchGlobalSearchResultsSource extends CorePaginatedItemsManag
|
||||||
|
|
||||||
private query: string;
|
private query: string;
|
||||||
private filters: CoreSearchGlobalSearchFilters;
|
private filters: CoreSearchGlobalSearchFilters;
|
||||||
private pagesLoaded = 0;
|
|
||||||
private totalResults?: number;
|
|
||||||
private topResultsIds?: number[];
|
|
||||||
|
|
||||||
constructor(query: string, filters: CoreSearchGlobalSearchFilters) {
|
constructor(query: string, filters: CoreSearchGlobalSearchFilters) {
|
||||||
super();
|
super();
|
||||||
|
@ -87,65 +84,13 @@ export class CoreSearchGlobalSearchResultsSource extends CorePaginatedItemsManag
|
||||||
this.setDirty(true);
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
getPagesLoaded(): number {
|
|
||||||
return this.pagesLoaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get total results with the given filter.
|
|
||||||
*
|
|
||||||
* @returns Total results.
|
|
||||||
*/
|
|
||||||
getTotalResults(): number | null {
|
|
||||||
return this.totalResults ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async reload(): Promise<void> {
|
|
||||||
this.pagesLoaded = 0;
|
|
||||||
|
|
||||||
await super.reload();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset collection data.
|
|
||||||
*/
|
|
||||||
reset(): void {
|
|
||||||
this.pagesLoaded = 0;
|
|
||||||
delete this.totalResults;
|
|
||||||
delete this.topResultsIds;
|
|
||||||
|
|
||||||
super.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
protected async loadPageItems(page: number): Promise<{ items: CoreSearchGlobalSearchResult[]; hasMoreItems: boolean }> {
|
protected async loadPageItems(page: number): Promise<{ items: CoreSearchGlobalSearchResult[]; hasMoreItems: boolean }> {
|
||||||
this.pagesLoaded++;
|
|
||||||
|
|
||||||
const results: CoreSearchGlobalSearchResult[] = [];
|
|
||||||
|
|
||||||
if (page === 0) {
|
|
||||||
const topResults = await CoreSearchGlobalSearch.getTopResults(this.query, this.filters);
|
|
||||||
|
|
||||||
results.push(...topResults);
|
|
||||||
|
|
||||||
this.topResultsIds = topResults.map(result => result.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageResults = await CoreSearchGlobalSearch.getResults(this.query, this.filters, page);
|
const pageResults = await CoreSearchGlobalSearch.getResults(this.query, this.filters, page);
|
||||||
|
|
||||||
this.totalResults = pageResults.total;
|
return { items: pageResults.results, hasMoreItems: pageResults.canLoadMore };
|
||||||
|
|
||||||
results.push(...pageResults.results.filter(result => !this.topResultsIds?.includes(result.id)));
|
|
||||||
|
|
||||||
return { items: results, hasMoreItems: pageResults.canLoadMore };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -144,30 +144,6 @@ export class CoreSearchGlobalSearchService {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get top results.
|
|
||||||
*
|
|
||||||
* @param query Search query.
|
|
||||||
* @param filters Search filters.
|
|
||||||
* @returns Top search results.
|
|
||||||
*/
|
|
||||||
async getTopResults(query: string, filters: CoreSearchGlobalSearchFilters): Promise<CoreSearchGlobalSearchResult[]> {
|
|
||||||
if (this.filtersYieldEmptyResults(filters)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
const site = CoreSites.getRequiredCurrentSite();
|
|
||||||
const params: CoreSearchGetTopResultsWSParams = {
|
|
||||||
query,
|
|
||||||
filters: await this.prepareAdvancedWSFilters(filters),
|
|
||||||
};
|
|
||||||
const preSets = CoreSites.getReadingStrategyPreSets(CoreSitesReadingStrategy.PREFER_NETWORK);
|
|
||||||
|
|
||||||
const { results } = await site.read<CoreSearchGetTopResultsWSResponse>('core_search_get_top_results', params, preSets);
|
|
||||||
|
|
||||||
return await Promise.all((results ?? []).map(result => this.formatWSResult(result)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get available search areas.
|
* Get available search areas.
|
||||||
*
|
*
|
||||||
|
@ -358,14 +334,6 @@ type CoreSearchViewResultsWSParams = {
|
||||||
page?: number; // Results page number starting from 0, defaults to the first page.
|
page?: number; // Results page number starting from 0, defaults to the first page.
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Params of core_search_get_top_results WS.
|
|
||||||
*/
|
|
||||||
type CoreSearchGetTopResultsWSParams = {
|
|
||||||
query: string; // The search query.
|
|
||||||
filters?: CoreSearchAdvancedWSFilters; // Filters to apply.
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search result returned in WS.
|
* Search result returned in WS.
|
||||||
*/
|
*/
|
||||||
|
@ -444,10 +412,3 @@ type CoreSearchViewResultsWSResponse = {
|
||||||
status: boolean; // Status: true if success.
|
status: boolean; // Status: true if success.
|
||||||
warnings?: CoreWSExternalWarning[];
|
warnings?: CoreWSExternalWarning[];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Data returned by core_search_get_top_results WS.
|
|
||||||
*/
|
|
||||||
type CoreSearchGetTopResultsWSResponse = {
|
|
||||||
results?: CoreSearchWSResult[];
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in New Issue