Feature/request type access all requests #22

Merged
gorbenko.pavel merged 3 commits from feature/request-type-access-all-requests into main 2026-09-25 11:48:10 +00:00
Showing only changes of commit 1360959e26 - Show all commits
@@ -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 };
}
// Свои заявки с конкретным статусом ЗАЯВКИ (не строки маршрута) — «Доработка»