Trading

Order Form

Buy/sell order entry with limit/market toggle, price and amount fields, and a computed total. Works controlled or uncontrolled and emits an onSubmit callback.

Preview

Fullscreen
Total USDT

Source

Copy this file to components/trading/order-form.tsx

tsx
'use client'

import * as React from 'react'
import { cn } from '@/lib/utils'

export type OrderSide = 'buy' | 'sell'
export type OrderType = 'limit' | 'market'

export interface OrderFormValues {
  side: OrderSide
  type: OrderType
  price: number
  amount: number
}

export interface OrderFormProps {
  symbol: string
  side?: OrderSide
  onSideChange?: (side: OrderSide) => void
  orderType?: OrderType
  onOrderTypeChange?: (type: OrderType) => void
  price?: number
  onPriceChange?: (price: number) => void
  amount?: number
  onAmountChange?: (amount: number) => void
  onSubmit?: (values: OrderFormValues) => void
  className?: string
}

// Works controlled (pass value + onChange) or uncontrolled (internal state).
// Buy/sell tabs, limit/market toggle, computed total, and local validation.

Props

PropType
symbol*string
side'buy' | 'sell'
onSideChange(side) => void
orderType'limit' | 'market'
onOrderTypeChange(type) => void
pricenumber
onPriceChange(price) => void
amountnumber
onAmountChange(amount) => void
onSubmit(values: OrderFormValues) => void
classNamestring