import React from 'react';
import { View, Text, Pressable } from 'react-native';
import { Image } from 'expo-image';
import Svg, { Path } from 'react-native-svg';
import type { ASA as ASAType, ComponentSize } from '../types/algorand';
import { formatNumber, formatAssetAmount, formatRelativeTime } from '../utils/format';
import { CopyButton } from '../ui/CopyButton';
import { SizeContainer } from '../ui/SizeContainer';
function ShieldIcon({ size = 16, color = '#60a5fa' }: { size?: number; color?: string }) {
return (
);
}
function LockIcon({ size = 16, color = '#fb923c' }: { size?: number; color?: string }) {
return (
);
}
function UnlockIcon({ size = 16, color = '#a1a1aa' }: { size?: number; color?: string }) {
return (
);
}
function CalendarIcon({ size = 12, color = '#71717a' }: { size?: number; color?: string }) {
return (
);
}
interface ASAProps {
data: ASAType;
showDetails?: boolean;
compact?: boolean;
size?: ComponentSize;
className?: string;
imageUrl?: string;
}
export function ASAComponent({
data: asset,
showDetails = false,
compact = false,
size = 'full',
className,
imageUrl,
}: ASAProps) {
const isNFT = asset.total === 1 && asset.decimals === 0;
if (compact) {
return (
{imageUrl && (
)}
{asset.verified && }
{asset.unitName}
{asset.price !== undefined && (
${asset.price}
)}
);
}
const isFullscreen = size === 'fullscreen';
return (
{/* NFT Image */}
{isNFT && imageUrl && (
NFT
{asset.verified && (
)}
)}
{/* Regular Asset Header */}
{!isNFT && (
{imageUrl && (
)}
{asset.name}
{asset.verified && }
{asset.defaultFrozen && }
{asset.unitName} - #{asset.id}
)}
{/* NFT Title */}
{isNFT && (
{asset.name}
{asset.unitName} - #{asset.id}
)}
{/* Stats */}
{asset.price !== undefined && (
${formatNumber(asset.price)}
Price (USD)
)}
{formatAssetAmount(asset.total, asset.decimals)}
Supply
{asset.decimals}
Decimals
{/* Details */}
{showDetails && (
Asset Details
Default Frozen
{asset.defaultFrozen ? (
<>
Yes
>
) : (
<>
No
>
)}
Creator
{asset.creator.slice(0, 8)}...
{asset.url && (
URL
{asset.url}
)}
)}
{/* Created Date */}
Created {formatRelativeTime(asset.createdAt)}
);
}