у поиска нормальный роутинг
This commit is contained in:
@@ -973,11 +973,25 @@ export async function searchOwnAll(
|
||||
return entries.map((e) => byKey.get(`${e.type.id}-${e.id}`)).filter((r): r is IMyRequest => !!r);
|
||||
}
|
||||
|
||||
/**
|
||||
* ВЕСЬ результат поиска (без нарезки на страницы) — постраничность делает
|
||||
* вызывающая сторона.
|
||||
*
|
||||
* Именно так, а не «страницу за вызов»: набор всё равно собирается целиком
|
||||
* (двумя источниками + слияние + сортировка), и раньше 95% этой работы
|
||||
* выбрасывалось ради 20 строк — а при переходе на следующую страницу весь поиск
|
||||
* запускался заново. Теперь SearchView кеширует список по ЗАПРОСУ, и листание
|
||||
* страниц не стоит ни одного запроса.
|
||||
*
|
||||
* Автор здесь НЕ дочитывается: у строк 'approval' он требует отдельного запроса,
|
||||
* и делать его на весь набор (до KQL_ID_LIMIT) значило бы собирать $filter из
|
||||
* сотен Id — SharePoint такой длины URL не переварит. Автора дочитывает
|
||||
* вызывающая сторона для видимой страницы (hydratePendingAuthors).
|
||||
*/
|
||||
export async function searchMyRequests(
|
||||
context: WebPartContext,
|
||||
types: IRequestType[],
|
||||
query: string,
|
||||
page: number
|
||||
query: string
|
||||
): Promise<ISearchPage> {
|
||||
const q = query.trim();
|
||||
if (!q) return { rows: [], totalRows: 0 };
|
||||
@@ -995,17 +1009,7 @@ export async function searchMyRequests(
|
||||
const involvedOnly = involvedFiltered.filter((r) => !ownKeys.has(`${r.requestTypeId}-${r.id}`));
|
||||
|
||||
const merged = ownRows.concat(involvedOnly).sort((a, b) => b.created.localeCompare(a.created));
|
||||
const totalRows = merged.length;
|
||||
const pageRows = merged.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE);
|
||||
|
||||
// Автор нужен для 'approval'-строк текущей страницы — 'own' уже пришли с
|
||||
// автором (loadByIds сам дочитывает Author).
|
||||
const needAuthor = pageRows.filter((r) => r.kind === 'approval');
|
||||
if (needAuthor.length > 0) {
|
||||
await hydratePendingAuthors(context, involvedIdx.types, needAuthor);
|
||||
}
|
||||
|
||||
return { rows: pageRows, totalRows };
|
||||
return { rows: merged, totalRows: merged.length };
|
||||
}
|
||||
|
||||
function toMyRequest(
|
||||
|
||||
Reference in New Issue
Block a user