Hooks and Headless Mode
Last updated
const { balance, isLoading, refetch } = useBalance();const { messages, isLoading, fetchMore, hasMore } = useAgentMessages();import { SurfProvider } from '@surf_liquid/surf-widget';
import { useVault, useDeposit, useWithdraw, useAgentMessages } from '@surf_liquid/surf-widget';
function MyCustomSavingsView() {
const { vault, isLoading } = useVault();
const { execute: deposit, step: depositStep } = useDeposit();
const { execute: withdraw } = useWithdraw();
const { messages } = useAgentMessages();
if (isLoading) return <p>Loading vault...</p>;
return (
<div>
<h2>Balance: ${vault.totalValueUSD}</h2>
<p>Earnings: ${vault.totalEarningsUSD}</p>
<p>APY: {vault.currentAPY}%</p>
<button onClick={() => deposit('100')}>Deposit 100 USDC</button>
<button onClick={() => withdraw('50')}>Withdraw 50 USDC</button>
<h3>Surf AI Activity</h3>
{messages.map(msg => (
<div key={msg.txHash}>
<span>{msg.description}</span>
<span>{msg.timestamp}</span>
</div>
))}
</div>
);
}
// Wrap with provider at app level
<SurfProvider client={client}>
<MyCustomSavingsView />
</SurfProvider>