import React, { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; 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 { usePezkuwi } from '@/contexts/PezkuwiContext'; 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('welati') || roleLower.includes('citizen')) { return ; } if (roleLower.includes('serok') || roleLower.includes('leader') || roleLower.includes('chief')) { return ; } if (roleLower.includes('axa') || roleLower.includes('hekem') || roleLower.includes('elder') || roleLower.includes('wise')) { return ; } return ; }; // Color scheme for different roles const getRoleBadgeColor = (role: string) => { const roleLower = role.toLowerCase(); if (roleLower.includes('welati') || roleLower.includes('citizen')) { return 'bg-cyan-500/10 text-cyan-500 border-cyan-500/30'; } if (roleLower.includes('serok') || roleLower.includes('leader') || roleLower.includes('chief')) { return 'bg-yellow-500/10 text-yellow-500 border-yellow-500/30'; } if (roleLower.includes('axa') || roleLower.includes('hekem') || 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 { t } = useTranslation(); const { api, isApiReady, selectedAccount } = usePezkuwi(); 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) { if (import.meta.env.DEV) console.error('Error fetching Tikis:', err); setError('Failed to load NFTs'); } finally { setLoading(false); } }; fetchTikis(); }, [api, isApiReady, selectedAccount]); if (loading) { return ( {t('nftList.title')} {t('nftList.description')} ); } if (error) { return ( {t('nftList.title')} {t('nftList.description')} {t('nftList.error')} ); } if (tikis.length === 0) { return ( {t('nftList.title')} {t('nftList.description')} {t('nftList.empty')} {t('nftList.emptyHelp')} ); } return ( {t('nftList.title')} {t('nftList.descriptionCount', { count: tikis.length })} {tikis.map((tiki, index) => ( {/* Icon */} {getTikiIcon(tiki.role)} {/* Info */} {t('nftList.cardTitle', { id: tiki.id })} {tiki.role} {/* Metadata if available */} {tiki.metadata && typeof tiki.metadata === 'object' && ( {Object.entries(tiki.metadata).map(([key, value]) => ( {key}:{' '} {String(value)} ))} )} ))} ); };
{t('nftList.error')}
{t('nftList.empty')}
{t('nftList.emptyHelp')}