Skip to content

Commit

Permalink
Merge pull request #433 from NIAEFEUP/fix/admin-pagination-show-corre…
Browse files Browse the repository at this point in the history
…ct-total-pages

fix: admin pagination show correct total pages
  • Loading branch information
tomaspalma authored Feb 5, 2025
2 parents 8f9b858 + 12ca47c commit aa95835
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 29 deletions.
5 changes: 4 additions & 1 deletion src/components/admin/AdminMainContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@ export const AdminMainContent = () => {
const [activeStates, setActiveStates] = useState<Array<AdminRequestState>>([]);

const [currPage, setCurrPage] = useState<number>(1);
const [totalPages, setTotalPages] = useState<number>(1);

return (
<AdminPaginationContext.Provider value={{
currPage,
setCurrPage
setCurrPage,
totalPages,
setTotalPages
}}>
<RequestFiltersContext.Provider value={{
activeCourse: activeCourse,
Expand Down
29 changes: 15 additions & 14 deletions src/components/admin/AdminPagination.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import { Pagination, PaginationContent, PaginationItem, PaginationLink } from ".
import AdminPaginationContext from "../../contexts/admin/AdminPaginationContext";

export const AdminPagination = () => {
const { currPage, setCurrPage } = useContext(AdminPaginationContext);
const { currPage, setCurrPage, totalPages } = useContext(AdminPaginationContext);

return <Pagination>
<PaginationContent>
{currPage > 1 && (
<PaginationItem>
<PaginationLink
href="#"
<PaginationLink
href="#"
onClick={() => setCurrPage(prev => prev - 1)}
className="hover:bg-black hover:text-white"
>
Expand All @@ -19,22 +19,23 @@ export const AdminPagination = () => {
</PaginationItem>
)}
<PaginationItem>
<PaginationLink
className="bg-black text-white hover:bg-white hover:text-black"
<PaginationLink
className="bg-black text-white hover:bg-white hover:text-black"
href="#"
>
{currPage}
</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink
href="#"
onClick={() => setCurrPage(prev => prev + 1)}
className="hover:bg-black hover:text-white"
>
{currPage + 1}
</PaginationLink>
</PaginationItem>
{currPage < totalPages && (
<PaginationItem>
<PaginationLink
href="#"
onClick={() => setCurrPage(prev => prev + 1)}
className="hover:bg-black hover:text-white"
>
{currPage + 1}
</PaginationLink>
</PaginationItem>)}
</PaginationContent>
</Pagination>
}
10 changes: 7 additions & 3 deletions src/components/admin/requests/MultipleStudentExchanges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ import { BarLoader } from "react-spinners";
import useMultipleStudentExchanges from "../../../hooks/admin/useMultipleStudentExchanges";
import { MultipleStudentExchangeCard } from "./cards/MultipleStudentExchangeCard";
import RequestFiltersContext from "../../../contexts/admin/RequestFiltersContext";
import { useContext } from "react";
import { useContext, useEffect } from "react";
import AdminPaginationContext from "../../../contexts/admin/AdminPaginationContext";

export const MultipleStudentExchanges = () => {
const filterContext = useContext(RequestFiltersContext);

const { currPage } = useContext(AdminPaginationContext);
const { exchanges, loading } = useMultipleStudentExchanges(filterContext, currPage);
const { currPage, setTotalPages } = useContext(AdminPaginationContext);
const { exchanges, totalPages, loading } = useMultipleStudentExchanges(filterContext, currPage);

useEffect(() => {
setTotalPages(totalPages)
}, [exchanges]);

return (
<>
Expand Down
10 changes: 7 additions & 3 deletions src/components/admin/requests/SingleStudentExchanges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@ import { BarLoader } from "react-spinners";
import useSingleStudentExchanges from "../../../hooks/admin/useSingleStudentExchanges";
import { SingleStudentExchangeCard } from "./cards/SingleStudentExchangeCard";
import RequestFiltersContext from "../../../contexts/admin/RequestFiltersContext";
import { useContext } from "react";
import { useContext, useEffect } from "react";
import AdminPaginationContext from "../../../contexts/admin/AdminPaginationContext";

export const SingleStudentExchanges = () => {
const filterContext = useContext(RequestFiltersContext);
const {currPage} = useContext(AdminPaginationContext);
const { exchanges, loading } = useSingleStudentExchanges(filterContext, currPage);
const { currPage, setTotalPages } = useContext(AdminPaginationContext);
const { exchanges, loading, totalPages } = useSingleStudentExchanges(filterContext, currPage);

useEffect(() => {
setTotalPages(totalPages)
}, [exchanges]);

return (
<>
Expand Down
10 changes: 7 additions & 3 deletions src/components/admin/requests/StudentEnrollments.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ import { BarLoader } from "react-spinners";
import useStudentEnrollments from "../../../hooks/admin/useStudentEnrollments";
import { StudentEnrollmentCard } from "./cards/StudentEnrollmentCard";
import RequestFiltersContext from "../../../contexts/admin/RequestFiltersContext";
import { useContext } from "react";
import { useContext, useEffect } from "react";
import AdminPaginationContext from "../../../contexts/admin/AdminPaginationContext";

export const StudentEnrollments = () => {
const filterContext = useContext(RequestFiltersContext);

const { currPage } = useContext(AdminPaginationContext);
const { enrollments, loading } = useStudentEnrollments(filterContext, currPage);
const { currPage, setTotalPages } = useContext(AdminPaginationContext);
const { enrollments, loading, totalPages } = useStudentEnrollments(filterContext, currPage);

useEffect(() => {
setTotalPages(totalPages)
}, [enrollments]);

return (
<>
Expand Down
8 changes: 6 additions & 2 deletions src/contexts/admin/AdminPaginationContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@ import { Context, Dispatch, createContext, SetStateAction } from "react";

export interface AdminPaginationContextContent {
currPage: number,
setCurrPage: Dispatch<SetStateAction<number>>
setCurrPage: Dispatch<SetStateAction<number>>,
totalPages: number,
setTotalPages: Dispatch<SetStateAction<number>>
}

const AdminPaginationContext: Context<AdminPaginationContextContent> = createContext({
currPage: 1,
setCurrPage: () => { }
setCurrPage: () => { },
totalPages: 0,
setTotalPages: () => { }
});

export default AdminPaginationContext;
4 changes: 3 additions & 1 deletion src/hooks/admin/useMultipleStudentExchanges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ export default (filterContext: RequestFiltersContextContent, pageIndex: number)
const { data, error, mutate } = useSWR(
buildUrlWithFilterParams(`${api.BACKEND_URL}/exchange/direct/?page=${pageIndex}`, filterContext), getExchanges
);
const exchanges = useMemo(() => data ? [].concat(...data) : null, [data]);
const exchanges = useMemo(() => data ? [].concat(...data["exchanges"]) : null, [data]);
const totalPages = useMemo(() => data ? data["total_pages"] : null, [data]);

return {
exchanges,
totalPages,
error,
loading: !data,
mutate,
Expand Down
4 changes: 3 additions & 1 deletion src/hooks/admin/useSingleStudentExchanges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@ export default (filterContext: RequestFiltersContextContent, pageIndex: number)
getExchanges
);

const exchanges = useMemo(() => data ? [].concat(...data) : null, [data]);
const exchanges = useMemo(() => data ? [].concat(...data["exchanges"]) : null, [data]);
const totalPages = useMemo(() => data ? data["total_pages"] : null, [data]);

return {
exchanges,
totalPages,
error,
loading: !data,
mutate,
Expand Down
4 changes: 3 additions & 1 deletion src/hooks/admin/useStudentEnrollments.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@ export default (filtersContext: RequestFiltersContextContent, pageIndex: number)
getEnrollments
);

const enrollments = useMemo(() => data ? [].concat(...data) : null, [data]);
const enrollments = useMemo(() => data ? [].concat(...data["enrollments"]) : null, [data]);
const totalPages = useMemo(() => data ? data["total_pages"] : null, [data]);

return {
enrollments,
totalPages,
error,
loading: !data,
mutate,
Expand Down

0 comments on commit aa95835

Please sign in to comment.