fix:передаю условия маршрута по компании в resolve и починил пагинацию /Project
Tests / frontend-test (push) Failing after 14s
Tests / frontend-test (push) Failing after 14s
This commit is contained in:
@@ -25,7 +25,16 @@ export interface IProject {
|
||||
deleted: boolean;
|
||||
}
|
||||
|
||||
/** Обёртка ответа /Project. */
|
||||
/**
|
||||
* Обёртка ответа /Project. Бэкенд игнорирует запрошенный pageSize и всегда
|
||||
* отдаёт свой собственный размер страницы (напр. 100) — поэтому для остановки
|
||||
* пагинации нужно сравнивать `page` с `totalPages` ИЗ ОТВЕТА, а не с тем, что
|
||||
* запросили сами (см. projects.service.ts).
|
||||
*/
|
||||
export interface IProjectListResponse {
|
||||
items: IProject[];
|
||||
page: number;
|
||||
pageSize: number;
|
||||
totalCount: number;
|
||||
totalPages: number;
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ import { IProject, IProjectListResponse } from './models/IProject';
|
||||
// ПАГИНИРОВАН, поэтому тянем ВСЕ страницы (иначе проекты за пределами первой
|
||||
// страницы не находятся в поиске пикера). Авторизация та же (AadHttpClient +
|
||||
// APPROVAL_API_CLIENT_ID, SSO текущего пользователя).
|
||||
const PAGE_SIZE = 500;
|
||||
const MAX_PAGES = 50; // страховка от бесконечного цикла (до 25 000 проектов)
|
||||
const PAGE_SIZE = 500; // бэкенд может отдать меньше (см. IProjectListResponse) — не влияет на остановку цикла
|
||||
const MAX_PAGES = 50; // страховка от бесконечного цикла, не привязана к PAGE_SIZE
|
||||
|
||||
async function fetchProjects(context: WebPartContext): Promise<IProject[]> {
|
||||
const client = await context.aadHttpClientFactory.getClient(APPROVAL_API_CLIENT_ID);
|
||||
@@ -24,8 +24,12 @@ async function fetchProjects(context: WebPartContext): Promise<IProject[]> {
|
||||
const body: IProjectListResponse = await response.json();
|
||||
const items = body.items ?? [];
|
||||
all.push(...items);
|
||||
// Последняя страница — вернулось меньше запрошенного размера.
|
||||
if (items.length < PAGE_SIZE) break;
|
||||
// Бэкенд игнорирует наш pageSize и отдаёт свой (напр. 100) — сравнивать
|
||||
// items.length с ЗАПРОШЕННЫМ PAGE_SIZE нельзя (он почти всегда больше
|
||||
// реального размера страницы, цикл остановился бы после первой же
|
||||
// страницы). Останавливаемся по totalPages ИЗ ОТВЕТА, а items.length===0 —
|
||||
// страховка на случай, если бэкенд когда-нибудь перестанет отдавать totalPages.
|
||||
if (items.length === 0 || (body.totalPages && page >= body.totalPages)) break;
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user