'use client' import { useCallback, useState } from 'react' import type { SplitsConfig } from '@/lib/types' interface SplitsViewProps { config: SplitsConfig } const CHAIN_NAMES: Record = { 100: 'Gnosis', 10: 'Optimism', 1: 'Ethereum', } function truncateAddress(addr: string): string { return `${addr.slice(0, 6)}...${addr.slice(-4)}` } const BAR_COLORS = [ '#3b82f6', '#8b5cf6', '#ec4899', '#06b6d4', '#10b981', '#f59e0b', '#ef4444', '#6366f1', '#14b8a6', '#f97316', ] export default function SplitsView({ config }: SplitsViewProps) { const [copied, setCopied] = useState(false) const handleExport = useCallback(() => { const exportData = { type: '0xSplits', chainId: config.chainId, distributorFee: config.distributorFee, recipients: config.recipients.map((r) => ({ address: r.address, percentAllocation: r.percentage * 10000, // 0xSplits uses basis points (ppm) })), } navigator.clipboard.writeText(JSON.stringify(exportData, null, 2)).then(() => { setCopied(true) setTimeout(() => setCopied(false), 2000) }) }, [config]) const totalPct = config.recipients.reduce((s, r) => s + r.percentage, 0) const chainName = CHAIN_NAMES[config.chainId] || `Chain ${config.chainId}` return (
0xSplits Config {chainName}
Fee: {config.distributorFee}%
{/* Combined percentage bar */}
{config.recipients.map((r, i) => (
))}
{/* Recipient list */}
{config.recipients.map((r, i) => (
{r.label || truncateAddress(r.address)} {r.percentage}%
))}
{totalPct !== 100 && (

Total is {totalPct}% (should be 100%)

)}
) }