import React, { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Loader2, Award, Crown, Shield, Users } from 'lucide-react'; import { usePolkadot } from '@/contexts/PolkadotContext'; import { getUserTikis } from '@pezkuwi/lib/citizenship-workflow'; import type { TikiInfo } from '@pezkuwi/lib/citizenship-workflow'; // Icon map for different Tiki roles const getTikiIcon = (role: string) => { const roleLower = role.toLowerCase(); if (roleLower.includes('hemwelatî') || roleLower.includes('welati') || roleLower.includes('citizen')) { return ; } if (roleLower.includes('leader') || roleLower.includes('chief')) { return ; } if (roleLower.includes('elder') || roleLower.includes('wise')) { return ; } return ; }; // Color scheme for different roles const getRoleBadgeColor = (role: string) => { const roleLower = role.toLowerCase(); if (roleLower.includes('hemwelatî') || roleLower.includes('welati') || roleLower.includes('citizen')) { return 'bg-cyan-500/10 text-cyan-500 border-cyan-500/30'; } if (roleLower.includes('leader') || roleLower.includes('chief')) { return 'bg-yellow-500/10 text-yellow-500 border-yellow-500/30'; } if (roleLower.includes('elder') || roleLower.includes('wise')) { return 'bg-purple-500/10 text-purple-500 border-purple-500/30'; } return 'bg-green-500/10 text-green-500 border-green-500/30'; }; export const NftList: React.FC = () => { const { api, isApiReady, selectedAccount } = usePolkadot(); const [tikis, setTikis] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchTikis = async () => { if (!api || !isApiReady || !selectedAccount) { setLoading(false); return; } setLoading(true); setError(null); try { const userTikis = await getUserTikis(api, selectedAccount.address); setTikis(userTikis); } catch (err) { console.error('Error fetching Tikis:', err); setError('Failed to load NFTs'); } finally { setLoading(false); } }; fetchTikis(); }, [api, isApiReady, selectedAccount]); if (loading) { return ( Your NFTs (Tikis) Your Tiki collection ); } if (error) { return ( Your NFTs (Tikis) Your Tiki collection {error} ); } if (tikis.length === 0) { return ( Your NFTs (Tikis) Your Tiki collection No NFTs yet Complete your citizenship application to receive your Welati Tiki NFT ); } return ( Your NFTs (Tikiler) Your Tiki collection ({tikis.length} total) {tikis.map((tiki, index) => ( {/* Icon */} {getTikiIcon(tiki.role)} {/* Info */} Tiki #{tiki.id} {tiki.role === 'Hemwelatî' ? 'Welati' : tiki.role} {/* Metadata if available */} {tiki.metadata && typeof tiki.metadata === 'object' && ( {Object.entries(tiki.metadata).map(([key, value]) => ( {key}:{' '} {String(value)} ))} )} ))} ); };
{error}
No NFTs yet
Complete your citizenship application to receive your Welati Tiki NFT