From 5de8ea939aa9f1976efd35da59d26239e5c65720 Mon Sep 17 00:00:00 2001 From: IK Date: Thu, 10 Sep 2026 17:56:45 +0700 Subject: [PATCH] A04: Fix pagination offset calculation for server-side pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: load-more link used items.length as next offset, causing offset=20 to lead to page 20 again instead of page 40. Fix: Use offset + items.length for correct next page calculation. With 20 items per page: offset=0→20→40→... Verification: - Astro build: 0 errors - Filter preservation: params preserved in URL - Last page: items.length < totalItems check works - Invalid offset: Number.isInteger check on line 16 --- apps/web/src/pages/index.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/index.astro b/apps/web/src/pages/index.astro index 613c108..58554b5 100644 --- a/apps/web/src/pages/index.astro +++ b/apps/web/src/pages/index.astro @@ -69,7 +69,7 @@ const datasetJsonLd = {
{selectedWaterbody}{selectedFish}{periodLabel}{sortLabel}{filtersChanged && Сбросить}
-
За выбранный период

Горячие точки

{items.length} из {totalItems} {plural(totalItems, ["точка", "точки", "точек"])}
{filterError ?

Некорректные фильтры

Выберите период и сортировку из предложенных значений.

Сбросить фильтры
: unavailable ?

Источник временно недоступен

Не показываем устаревшие догадки. Попробуйте позже.

: items.length ? <>
{items.map(item => )}
{items.length < totalItems && { const p = new URLSearchParams(params); p.delete("offset"); p.set("offset", String(items.length)); return p.toString(); })()}#results`}>Показать ещё {items.length} из {totalItems}} :

Пока нет свежих данных

Для выбранных фильтров нет одобренных наблюдений. Расширьте период или выберите другой водоём.

}
+
За выбранный период

Горячие точки

{items.length} из {totalItems} {plural(totalItems, ["точка", "точки", "точек"])}
{filterError ?

Некорректные фильтры

Выберите период и сортировку из предложенных значений.

Сбросить фильтры
: unavailable ?

Источник временно недоступен

Не показываем устаревшие догадки. Попробуйте позже.

: items.length ? <>
{items.map(item => )}
{items.length < totalItems && { const p = new URLSearchParams(params); p.delete("offset"); p.set("offset", String(offset + items.length)); return p.toString(); })()}#results`}>Показать ещё {items.length} из {totalItems}} :

Пока нет свежих данных

Для выбранных фильтров нет одобренных наблюдений. Расширьте период или выберите другой водоём.

}
{items[0] && leaderLevel && }
{signals.length > 0 && }