Merge branch 'feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf
This commit is contained in:
commit
60b963c573
@ -48,6 +48,14 @@ export function buildWindowRows(pages, pageCache, total) {
|
||||
return result;
|
||||
}
|
||||
|
||||
const NO_PAGES = Object.freeze(new Map());
|
||||
|
||||
// Страницы, которые можно показывать: только поколения, чьи данные уже пришли. После смены условий (поиск, фильтры,
|
||||
// «Обновить») поколение вырастает сразу, а первый ответ нового приходит позже: до него все строки окна — заглушки.
|
||||
export function getCurrentPages({ pages, dataGeneration, generation }) {
|
||||
return dataGeneration === generation ? pages : NO_PAGES;
|
||||
}
|
||||
|
||||
export function getVirtualizerPadding({ windowStart, windowEnd, total, rowHeight }) {
|
||||
return {
|
||||
paddingStart: windowStart * rowHeight,
|
||||
|
||||
@ -8,6 +8,7 @@ import {
|
||||
buildWindowRows,
|
||||
createSheetPagingState,
|
||||
facetsToMaps,
|
||||
getCurrentPages,
|
||||
getMissingPages,
|
||||
getPageCount,
|
||||
getSkeletonWidth,
|
||||
@ -328,3 +329,18 @@ test('первая страница при смене условий: запас
|
||||
assert.equal(shouldFetchFirstPageFallback({ candidate: 37, total: 22419 }), false);
|
||||
assert.equal(shouldFetchFirstPageFallback({ candidate: 75, total: 22419 }), true);
|
||||
});
|
||||
|
||||
test('смена поколения условий: пока нет ответа нового поколения, старые страницы не показываются (все строки окна — заглушки)', () => {
|
||||
const pages = new Map([[0, [{ data: 1 }]]]);
|
||||
assert.equal(getCurrentPages({ pages, dataGeneration: 3, generation: 3 }), pages);
|
||||
const stale = getCurrentPages({ pages, dataGeneration: 3, generation: 4 });
|
||||
assert.equal(stale.size, 0);
|
||||
const rows = buildWindowRows([0], stale, 3);
|
||||
assert.deepEqual(
|
||||
rows.map((r) => isPlaceholderRow(r)),
|
||||
[true, true, true],
|
||||
);
|
||||
});
|
||||
test('до первой загрузки (поколение 0) страниц нет и показывать нечего', () => {
|
||||
assert.equal(getCurrentPages({ pages: new Map(), dataGeneration: 0, generation: 0 }).size, 0);
|
||||
});
|
||||
|
||||
@ -11,6 +11,7 @@ import {
|
||||
buildWindowRows,
|
||||
createSheetPagingState,
|
||||
facetsToMaps,
|
||||
getCurrentPages,
|
||||
getMissingPages,
|
||||
getPageCount,
|
||||
getVirtualizerPadding,
|
||||
@ -300,8 +301,13 @@ export function useSvod2Pages({ sheet, year, orgIds, queryKey, search, columnFil
|
||||
const visiblePage = getVisiblePage({ scrollTop: scrollPage * PAGE_SIZE * rowHeight, rowHeight, total: sheetState.total });
|
||||
const windowPages = useMemo(() => getWindowPages(visiblePage, sheetState.total), [visiblePage, sheetState.total]);
|
||||
const windowRows = useMemo(
|
||||
() => buildWindowRows(windowPages, sheetState.pages, sheetState.total),
|
||||
[windowPages, sheetState.pages, sheetState.total],
|
||||
() =>
|
||||
buildWindowRows(
|
||||
windowPages,
|
||||
getCurrentPages({ pages: sheetState.pages, dataGeneration: sheetState.dataGeneration, generation: sheetState.generation }),
|
||||
sheetState.total,
|
||||
),
|
||||
[windowPages, sheetState.pages, sheetState.dataGeneration, sheetState.generation, sheetState.total],
|
||||
);
|
||||
const padding = useMemo(() => {
|
||||
if (!hasCurrentData) return NO_PADDING;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user