import React, { useState } from 'react'
import type { TradeOffer } from '../../types'
import { useInventoryContext } from '../../context/InventoryContext'
import { useScale } from '../../context/ScaleContext'
import { ItemCanvas } from '../ItemCanvas'
import { Tooltip } from '../Tooltip'
interface TradeRowProps {
trade: TradeOffer
index: number
selected: boolean
onSelect(): void
}
function TradeRow({ trade, index, selected, onSelect }: TradeRowProps) {
const { scale } = useScale()
const { sendAction } = useInventoryContext()
const [hoveredItem, setHoveredItem] = useState<'in1' | 'in2' | 'out' | null>(null)
const slotSize = 16 * scale
const handleClick = () => {
onSelect()
sendAction({ type: 'trade', tradeIndex: index })
}
return (
{/* Input 1 */}
setHoveredItem('in1')}
onMouseLeave={() => setHoveredItem(null)}
>
{hoveredItem === 'in1' && (
)}
{/* Input 2 */}
{trade.inputItem2 && (
setHoveredItem('in2')}
onMouseLeave={() => setHoveredItem(null)}
>
{hoveredItem === 'in2' && (
)}
)}
{/* Arrow */}
→
{/* Output */}
setHoveredItem('out')}
onMouseLeave={() => setHoveredItem(null)}
>
{hoveredItem === 'out' && (
)}
{/* Uses */}
= trade.maxUses ? '#ff5555' : '#aaaaaa',
whiteSpace: 'nowrap',
}}
>
{trade.uses}/{trade.maxUses}
)
}
export function VillagerTradeList() {
const { windowState } = useInventoryContext()
const { scale } = useScale()
const [selectedIndex, setSelectedIndex] = useState(0)
const villagerState = windowState as (typeof windowState & {
trades?: TradeOffer[]
}) | null
const trades = villagerState?.trades ?? []
if (trades.length === 0) return null
return (
{trades.map((trade, i) => (
setSelectedIndex(i)}
/>
))}
)
}