diff --git a/src/webparts/requestPortal/features/myRequests/myRequests.service.ts b/src/webparts/requestPortal/features/myRequests/myRequests.service.ts index e28178c..74ee956 100644 --- a/src/webparts/requestPortal/features/myRequests/myRequests.service.ts +++ b/src/webparts/requestPortal/features/myRequests/myRequests.service.ts @@ -1381,6 +1381,14 @@ export async function searchOwnRequests( // searchOwnRequests — без фильтра по автору, и только ОДИН тип (раздел уже // показывает конкретный выбранный тип, а не все связанные разом). Только // Search, без REST-подстраховки на свежесть — как и у searchOwnRequests. +// +// Весь найденный срез целиком (fetchAllSearchRows), а не постранично через +// Search RowLimit/StartRow: totalRows там был бы сырым счётчиком индекса ДО +// дедупа по (тип, Id) (см. hitsToEntries — TrimDuplicates:false намеренно, и +// индекс может вернуть один и тот же элемент несколькими хитами), и на +// странице оказывалось МЕНЬШЕ строк, чем показывал счётчик над таблицей. +// Тип здесь только один — набор в разумных пределах, дедуп и сортировка идут +// по всему сразу, страница нарезается уже в памяти. export async function getAllRequestsForType( context: WebPartContext, type: IRequestType, @@ -1393,23 +1401,15 @@ export async function getAllRequestsForType( if (text) clauses.push(text); const kql = clauses.join(' AND '); - const results = await traced('Search: все заявки типа', () => - sp.search({ - Querytext: kql, - RowLimit: PAGE_SIZE, - StartRow: (page - 1) * PAGE_SIZE, - SelectProperties: OWN_SELECT_PROPERTIES, - TrimDuplicates: false, - SortList: [{ Property: 'Created', Direction: 1 }], - }) + const hits = await traced('Search: все заявки типа', () => + fetchAllSearchRows(sp, kql, OWN_SELECT_PROPERTIES, 'Все заявки типа', [{ Property: 'Created', Direction: 1 }]) ); - const totalRows = results.TotalRows || 0; // kind: 'other' — заявка не обязательно текущего пользователя, открывается // только на просмотр (см. IMyRequest.kind, openRequest в RequestPortal.tsx). - const rows = hitsToEntries(results, [type]).map((e) => toMyRequestFromSearch(e, 'other')); + const rows = hitsToEntries({ PrimarySearchResults: hits }, [type]).map((e) => toMyRequestFromSearch(e, 'other')); - return { rows, totalRows }; + return { rows: rows.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE), totalRows: rows.length }; } // Свои заявки с конкретным статусом ЗАЯВКИ (не строки маршрута) — «Доработка»