From 20f6fdbb79bf86ffbc9b7a1c0c2bb52bc5c18049 Mon Sep 17 00:00:00 2001 From: Joseph Chalabi <100090645+chalabi2@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:20:48 -0700 Subject: [PATCH] feat: add pagination to token factory list (#94) --- components/factory/components/MyDenoms.tsx | 102 ++++++++++++++++++--- components/groups/components/myGroups.tsx | 4 +- pages/admins.tsx | 2 +- pages/bank.tsx | 2 +- pages/factory/index.tsx | 2 +- pages/groups/index.tsx | 2 +- 6 files changed, 92 insertions(+), 22 deletions(-) diff --git a/components/factory/components/MyDenoms.tsx b/components/factory/components/MyDenoms.tsx index 4aade520..7b974dd0 100644 --- a/components/factory/components/MyDenoms.tsx +++ b/components/factory/components/MyDenoms.tsx @@ -13,6 +13,8 @@ import { ExtendedMetadataSDKType, shiftDigits } from '@/utils'; import { MultiMintModal } from '@/components/factory/modals'; import { MultiBurnModal } from '../modals/multiMfxBurnModal'; import { usePoaGetAdmin } from '@/hooks'; +import useIsMobile from '@/hooks/useIsMobile'; + export default function MyDenoms({ denoms, isLoading, @@ -25,12 +27,27 @@ export default function MyDenoms({ address: string; }) { const [searchQuery, setSearchQuery] = useState(''); + const [currentPage, setCurrentPage] = useState(1); + const isMobile = useIsMobile(); + + const pageSize = isMobile ? 6 : 8; + const router = useRouter(); const [selectedDenom, setSelectedDenom] = useState(null); const [modalType, setModalType] = useState< 'mint' | 'burn' | 'multimint' | 'multiburn' | 'update' | null >(null); + const filteredDenoms = useMemo(() => { + return denoms.filter(denom => denom?.display.toLowerCase().includes(searchQuery.toLowerCase())); + }, [denoms, searchQuery]); + + const totalPages = Math.ceil(filteredDenoms.length / pageSize); + const paginatedDenoms = filteredDenoms.slice( + (currentPage - 1) * pageSize, + currentPage * pageSize + ); + const handleDenomSelect = (denom: ExtendedMetadataSDKType) => { if (!modalType) { // Only show denom info if no other modal is active @@ -107,10 +124,6 @@ export default function MyDenoms({ }); }; - const filteredDenoms = useMemo(() => { - return denoms.filter(denom => denom?.display.toLowerCase().includes(searchQuery.toLowerCase())); - }, [denoms, searchQuery]); - return (
@@ -149,13 +162,13 @@ export default function MyDenoms({ Token Name - Total Supply + Total Supply Actions {isLoading - ? Array(10) + ? Array(isMobile ? 6 : 8) .fill(0) .map((_, index) => ( @@ -207,7 +220,7 @@ export default function MyDenoms({ )) - : filteredDenoms.map(denom => ( + : paginatedDenoms.map(denom => ( + {totalPages > 1 && ( +
e.stopPropagation()} + role="navigation" + aria-label="Pagination" + > + + + {[...Array(totalPages)].map((_, index) => { + const pageNum = index + 1; + if ( + pageNum === 1 || + pageNum === totalPages || + (pageNum >= currentPage - 1 && pageNum <= currentPage + 1) + ) { + return ( + + ); + } else if (pageNum === currentPage - 2 || pageNum === currentPage + 2) { + return ( + + ); + } + return null; + })} + + +
+ )}
@@ -237,12 +314,7 @@ export default function MyDenoms({
- + {truncateString(denom?.name ?? 'No name provided', 20)} - -
+ +
{formatAmount(totalSupply)} {truncateString(denom?.display ?? 'No ticker provided', 10).toUpperCase()} diff --git a/components/groups/components/myGroups.tsx b/components/groups/components/myGroups.tsx index 6c9ae5da..98e9f09e 100644 --- a/components/groups/components/myGroups.tsx +++ b/components/groups/components/myGroups.tsx @@ -146,7 +146,7 @@ export function YourGroups({ {isLoading - ? Array(8) + ? Array(isMobile ? 6 : 8) .fill(0) .map((_, index) => ( @@ -325,8 +325,6 @@ export function YourGroups({ /> ))} - - {/* Add pagination controls */}
); } diff --git a/pages/admins.tsx b/pages/admins.tsx index bca86fa4..e3b4521b 100644 --- a/pages/admins.tsx +++ b/pages/admins.tsx @@ -24,7 +24,7 @@ export default function Admins() { const isMember = group?.members?.some(member => member?.member?.address === address); console.log(group, groupByAdmin, isMember); return ( -
+
Admins - Alberto diff --git a/pages/bank.tsx b/pages/bank.tsx index edd9c30f..a0074f9e 100644 --- a/pages/bank.tsx +++ b/pages/bank.tsx @@ -124,7 +124,7 @@ export default function Bank() { -
+
{!isWalletConnected ? ( +
Factory - Alberto diff --git a/pages/groups/index.tsx b/pages/groups/index.tsx index a19d6e2e..482d569a 100644 --- a/pages/groups/index.tsx +++ b/pages/groups/index.tsx @@ -26,7 +26,7 @@ export default function Groups() { const isError = isGroupByMemberError || isProposalsError; return ( -
+
Groups - Alberto