|
|
@@ -21,7 +21,7 @@ function shouldShowFreeBadge(course: Course): boolean {
|
|
|
}
|
|
|
|
|
|
export function CoursesListClient({ active, initialCourses }: Props) {
|
|
|
- const pageSize = 10;
|
|
|
+ const pageSize = 9;
|
|
|
const [courses, setCourses] = useState(initialCourses);
|
|
|
const [loading, setLoading] = useState(true);
|
|
|
const [page, setPage] = useState(1);
|
|
|
@@ -51,8 +51,9 @@ export function CoursesListClient({ active, initialCourses }: Props) {
|
|
|
};
|
|
|
}, [active, page]);
|
|
|
|
|
|
+ const totalPages = Math.ceil(total / pageSize) || 1;
|
|
|
const canPrev = page > 1 && !loading;
|
|
|
- const canNext = !loading && page * pageSize < total;
|
|
|
+ const canNext = !loading && page < totalPages;
|
|
|
|
|
|
return (
|
|
|
<div>
|
|
|
@@ -153,7 +154,9 @@ export function CoursesListClient({ active, initialCourses }: Props) {
|
|
|
>
|
|
|
{t("videoPrevPage")}
|
|
|
</button>
|
|
|
- <span className="text-sm font-medium text-slate-500">{t("videoCurrentPage", { page })}</span>
|
|
|
+ <span className="text-sm font-medium text-slate-500">
|
|
|
+ {t("videoPageOfTotal", { page, totalPages })}
|
|
|
+ </span>
|
|
|
<button
|
|
|
type="button"
|
|
|
onClick={() => { if (canNext) { setLoading(true); setPage((p) => p + 1); } }}
|