diff --git a/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx b/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx index 1b8bb95b..5eca122a 100644 --- a/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx +++ b/app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx @@ -2,6 +2,7 @@ import { ComponentType, useState } from 'react'; import Image from 'next/image'; +import GraphqlPagination from '@/app/[locale]/dashboard/components/GraphqlPagination/graphqlPagination'; import { graphql } from '@/gql'; import { TypeCollaborative } from '@/gql/generated/graphql'; import { useQuery } from '@tanstack/react-query'; @@ -85,6 +86,8 @@ const PublishedCollaboratives = graphql(` const CollaborativesListingClient = () => { const [searchTerm, setSearchTerm] = useState(''); const [sortBy, setSortBy] = useState('title_asc'); + const [currentPage, setCurrentPage] = useState(1); + const [pageSize, setPageSize] = useState(9); const { data: collaborativesData, @@ -141,6 +144,17 @@ const CollaborativesListingClient = () => { return 0; }); + const totalPages = Math.max( + 1, + Math.ceil(filteredAndSortedCollaboratives.length / pageSize) + ); + const safePage = Math.min(currentPage, totalPages); + const start = (safePage - 1) * pageSize; + const paginatedCollaboratives = filteredAndSortedCollaboratives.slice( + start, + start + pageSize + ); + const jsonLd = generateJsonLd({ '@context': 'https://schema.org', '@type': 'WebPage', @@ -224,9 +238,11 @@ const CollaborativesListingClient = () => { className={cn('w-full', Styles.Search)} onSubmit={(e) => { setSearchTerm(e); + setCurrentPage(1); }} onClear={() => { setSearchTerm(''); + setCurrentPage(1); }} name={'Start typing to search for any collaborative'} /> @@ -270,6 +286,7 @@ const CollaborativesListingClient = () => { ]} onChange={(e: any) => { setSortBy(e); + setCurrentPage(1); }} /> @@ -296,8 +313,18 @@ const CollaborativesListingClient = () => { <> {/* Collaboratives Grid */} {filteredAndSortedCollaboratives.length > 0 ? ( -