From 572cbb57d56b0a832d16008487d3f00961913b80 Mon Sep 17 00:00:00 2001 From: DrMint Date: Sat, 2 Apr 2022 23:29:57 +0200 Subject: [PATCH] Pagination for videos --- src/components/PageSelector.tsx | 39 +++++++++++++++++++++++ src/pages/archives/videos/index.tsx | 48 +++++++++++++++++++++++++++-- 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/components/PageSelector.tsx diff --git a/src/components/PageSelector.tsx b/src/components/PageSelector.tsx new file mode 100644 index 0000000..15c43be --- /dev/null +++ b/src/components/PageSelector.tsx @@ -0,0 +1,39 @@ +import { Dispatch, SetStateAction } from "react"; +import Button from "./Button"; + +type Props = { + className?: string; + maxPage: number; + page: number; + setPage: Dispatch>; +}; + +export default function PageSelector(props: Props): JSX.Element { + const { page, setPage, maxPage } = props; + + return ( +
+ + + +
+ ); +} diff --git a/src/pages/archives/videos/index.tsx b/src/pages/archives/videos/index.tsx index 56f24e8..474b482 100644 --- a/src/pages/archives/videos/index.tsx +++ b/src/pages/archives/videos/index.tsx @@ -1,4 +1,5 @@ import AppLayout from "components/AppLayout"; +import PageSelector from "components/PageSelector"; import PanelHeader from "components/PanelComponents/PanelHeader"; import ReturnButton, { ReturnButtonType, @@ -12,6 +13,8 @@ import { GetVideosPreviewQuery } from "graphql/generated"; import { getReadySdk } from "graphql/sdk"; import { GetStaticPropsContext } from "next"; import { AppStaticProps, getAppStaticProps } from "queries/getAppStaticProps"; +import { prettyDate } from "queries/helpers"; +import { useState } from "react"; interface Props extends AppStaticProps { videos: Exclude["data"]; @@ -19,6 +22,29 @@ interface Props extends AppStaticProps { export default function Videos(props: Props): JSX.Element { const { langui, videos } = props; + + videos + .sort((a, b) => { + const dateA = a.attributes?.published_date + ? prettyDate(a.attributes.published_date) + : "9999"; + const dateB = b.attributes?.published_date + ? prettyDate(b.attributes.published_date) + : "9999"; + return dateA.localeCompare(dateB); + }) + .reverse(); + + const itemPerPage = 50; + const paginatedVideos: Props["videos"][] = []; + for (let index = 0; itemPerPage * index < videos.length; index += 1) { + paginatedVideos.push( + videos.slice(index * itemPerPage, (index + 1) * itemPerPage) + ); + } + + const [page, setPage] = useState(0); + const subPanel = ( + +
- {videos.map((video) => ( - <>{video.attributes && } + {paginatedVideos[page].map((video) => ( + <> + {video.attributes && ( + + )} + ))}
+ + ); return (