- {filtered.length === 0 ? (
-
- ) : (
- (() => {
- const totalPages = Math.max(1, Math.ceil(filtered.length / itemsPerPage));
- const safePage = Math.min(currentPage, totalPages);
- const paginated = filtered.slice((safePage - 1) * itemsPerPage, safePage * itemsPerPage);
- return (
- <>
- {paginated.map((doc) => (
-
-
-
-
{doc.title}
-
-
- Ingredient
- {doc.ingredient}
-
-
- Source
- {doc.source}
-
-
- Type
- {doc.type}
-
-
- Date
- {doc.date ?? "—"}
-
-
-
-
- {doc.pdf_url && (
-
- )}
-
-
- ))}
-
- {totalPages > 1 && (
-
-
- {(() => {
- const maxShow = 5;
- const pages: (number | string)[] = [];
- if (totalPages <= maxShow) {
- for (let p = 1; p <= totalPages; p++) pages.push(p);
- } else {
- if (currentPage <= 3) pages.push(1,2,3,4,'...', totalPages);
- else if (currentPage >= totalPages - 2) pages.push(1,'...', totalPages-3, totalPages-2, totalPages-1, totalPages);
- else pages.push(1,'...', currentPage-1, currentPage, currentPage+1,'...', totalPages);
- }
- return pages.map((p, idx) => p === '...' ? … : (
-
- ));
- })()}
-
-
- )}
- >
- );
- })()
- )}
-