SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
1.4 KB · 33 lines tsx
Raw Blame History
1'use client';23import { useActionState } from 'react';4import { createTargetAction } from '@/lib/account/actions';5import { idle } from '@/lib/auth/state';6import { Field, FormMessage, Select, SubmitButton, TextInput } from '@/components/account/form';7import { AssetPicker } from '@/components/account/asset-picker';89export function TargetForm() {10  const [state, action] = useActionState(createTargetAction, idle);11  return (12    <form action={action} className="space-y-3" noValidate key={state.ok ? 'reset' : 'form'}>13      <FormMessage state={state} />14      <AssetPicker name="assetId" withVariant={false} error={state.fieldErrors?.assetId} />15      <div className="grid grid-cols-2 gap-3">16        <Field label="Direction" name="direction">17          <Select name="direction" defaultValue="below">18            <option value="below">Buy — RIV falls below</option>19            <option value="above">Sell — RIV rises above</option>20          </Select>21        </Field>22        <Field label="Target (USD)" name="targetUsd" error={state.fieldErrors?.targetUsd}>23          <TextInput name="targetUsd" type="number" min={0} step="0.01" required placeholder="2500" />24        </Field>25      </div>26      <Field label="Note (optional)" name="note">27        <TextInput name="note" maxLength={300} placeholder="Why this level?" />28      </Field>29      <SubmitButton pendingText="Saving…">Set target</SubmitButton>30    </form>31  );32}33