Исправить расхождение счётчика и строк в «Все заявки»
Tests / frontend-test (pull_request) Successful in 1m22s
Tests / frontend-test (pull_request) Successful in 1m22s
getAllRequestsForType брал totalRows из сырого ответа Search (RowLimit/ StartRow), а строки — из hitsToEntries, который дедуплицирует хиты по (тип, Id): TrimDuplicates:false намеренно допускает, что индекс отдаст один и тот же элемент несколько раз. Счётчик над таблицей поэтому мог быть больше числа видимых строк. Теперь берём весь срез разом (fetchAllSearchRows), дедуп и оба числа считаются по одному и тому же набору. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
|
||||
// Свои заявки с конкретным статусом ЗАЯВКИ (не строки маршрута) — «Доработка»
|
||||
|
||||
Reference in New Issue
Block a user