у поиска нормальный роутинг

This commit is contained in:
gorbenko.pavel
2026-08-10 18:18:42 +05:00
parent 7ef0ee6245
commit 67c8657618
7 changed files with 365 additions and 115 deletions
@@ -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(