| import { useState } from "react"; |
|
|
| export default function CardForm({ onSubmit }) { |
| const [v, setV] = useState({ |
| credit_score: 720, |
| annual_income: 70000, |
| carry_balance: false, |
| travel_abroad: false, |
| no_annual_fee: true, |
| balance_transfer: false, |
| rewards_pref: "cashback", |
| spend_groceries: 300, |
| spend_dining: 250, |
| spend_gas: 120, |
| spend_travel: 80, |
| spend_online: 200, |
| top_k: 10, |
| }); |
|
|
| function set(name, value) { |
| setV((p) => ({ ...p, [name]: value })); |
| } |
|
|
| return ( |
| <form className="form" onSubmit={(e) => { e.preventDefault(); onSubmit(v); }}> |
| <div className="cardHeader"> |
| <h2>Credit Cards</h2> |
| </div> |
| |
| <div className="grid2"> |
| <div className="field"> |
| <label>Credit score</label> |
| <input |
| type="range" |
| min="300" |
| max="850" |
| value={v.credit_score} |
| onChange={(e) => set("credit_score", Number(e.target.value))} |
| /> |
| <div className="muted small">{v.credit_score}</div> |
| </div> |
| |
| <div className="field"> |
| <label>Annual income</label> |
| <input |
| type="number" |
| value={v.annual_income} |
| onChange={(e) => set("annual_income", Number(e.target.value))} |
| /> |
| </div> |
| |
| <div className="field"> |
| <label>Rewards</label> |
| <select value={v.rewards_pref} onChange={(e) => set("rewards_pref", e.target.value)}> |
| <option value="cashback">Cashback</option> |
| <option value="travel">Travel</option> |
| <option value="points">Points</option> |
| <option value="none">No preference</option> |
| </select> |
| </div> |
| |
| <div className="field"> |
| <label>Top results</label> |
| <input type="number" value={v.top_k} min="1" max="50" onChange={(e) => set("top_k", Number(e.target.value))} /> |
| </div> |
| </div> |
| |
| <div className="grid2"> |
| <div className="field"> |
| <label><input type="checkbox" checked={v.carry_balance} onChange={(e) => set("carry_balance", e.target.checked)} /> I carry a balance</label> |
| </div> |
| <div className="field"> |
| <label><input type="checkbox" checked={v.travel_abroad} onChange={(e) => set("travel_abroad", e.target.checked)} /> I travel abroad</label> |
| </div> |
| <div className="field"> |
| <label><input type="checkbox" checked={v.no_annual_fee} onChange={(e) => set("no_annual_fee", e.target.checked)} /> Prefer no annual fee</label> |
| </div> |
| <div className="field"> |
| <label><input type="checkbox" checked={v.balance_transfer} onChange={(e) => set("balance_transfer", e.target.checked)} /> Need balance transfer</label> |
| </div> |
| </div> |
| |
| <div className="grid2"> |
| <div className="field"> |
| <label>Groceries ($/mo)</label> |
| <input type="number" value={v.spend_groceries} onChange={(e) => set("spend_groceries", Number(e.target.value))} /> |
| </div> |
| <div className="field"> |
| <label>Dining ($/mo)</label> |
| <input type="number" value={v.spend_dining} onChange={(e) => set("spend_dining", Number(e.target.value))} /> |
| </div> |
| <div className="field"> |
| <label>Gas ($/mo)</label> |
| <input type="number" value={v.spend_gas} onChange={(e) => set("spend_gas", Number(e.target.value))} /> |
| </div> |
| <div className="field"> |
| <label>Travel ($/mo)</label> |
| <input type="number" value={v.spend_travel} onChange={(e) => set("spend_travel", Number(e.target.value))} /> |
| </div> |
| <div className="field"> |
| <label>Online ($/mo)</label> |
| <input type="number" value={v.spend_online} onChange={(e) => set("spend_online", Number(e.target.value))} /> |
| </div> |
| </div> |
| |
| <button className="primary" type="submit">Show cards</button> |
| </form> |
| ); |
| } |
|
|