React Sample MiniApp
This section showcases a sample React MiniApp:
// src/App.tsx
import { BasedMiniAppProvider, useMiniApp } from "@basedone/miniapp-sdk/react";
import "./App.css";
import { useCallback, useState } from "react";
function TradingBot() {
const { connected, connecting, userAddress, currentSymbol, placeOrder } =
useMiniApp();
const [size, setSize] = useState(0.001);
const [loading, setLoading] = useState(false);
const [result, setResult] = useState<string | null>(null);
const [error, setError] = useState<string | null>(null);
const handlePlaceOrder = useCallback(async () => {
setLoading(true);
try {
const result = await placeOrder?.({
symbol: currentSymbol,
side: "buy",
orderType: "market",
size: size,
});
console.log("miniapp order result", result);
if (result && result.success) {
setResult(JSON.stringify(result.data));
} else {
setError(result?.error ?? "Unknown error");
}
setLoading(false);
} catch (error) {
console.error("miniapp order error", error);
setError(error instanceof Error ? error.message : "Unknown error");
} finally {
setLoading(false);
}
}, [placeOrder, currentSymbol, size]);
if (!connected) {
return (
<div style={{ padding: "20px", textAlign: "center" }}>
<h2>🤖 Trading Bot</h2>
<p>Status: {connecting ? "Connecting..." : "Disconnected"}</p>
<div>Connecting to Based.One terminal...</div>
</div>
);
}
return (
<div style={{ padding: "20px", maxWidth: "800px", margin: "0 auto" }}>
<h1>🤖 Trading Bot</h1>
{/* Connection Status */}
<div
style={{
background: "#e8f5e8",
padding: "10px",
borderRadius: "5px",
marginBottom: "20px",
}}
>
✅ Connected to Based
<p>User Address: {userAddress}</p>
<p>Current Symbol: {currentSymbol}</p>
</div>
<input
type="number"
value={size}
onChange={(e) => setSize(Number(e.target.value))}
/>
<button onClick={handlePlaceOrder} disabled={loading}>
{loading ? "Placing Order..." : "Place Order"}
</button>
{result && <p>Result: {JSON.stringify(result)}</p>}
{error && <p>Error: {error}</p>}
</div>
);
}
function App() {
return (
<BasedMiniAppProvider
config={{
appId: "sample-app",
autoConnect: true,
name: "Sample App",
permissions: ["read_account", "place_orders"],
url: typeof window !== "undefined" ? window.location.origin : "",
debug: true,
}}
>
<div className="App">
<TradingBot />
</div>
</BasedMiniAppProvider>
);
}
export default App;
Last updated