@@ -9,24 +9,30 @@ import {
99 VaultDetailCard ,
1010 type ColumnProps ,
1111} from "@babylonlabs-io/core-ui" ;
12- import { useState } from "react" ;
12+ import { useWalletConnect } from "@babylonlabs-io/wallet-connector" ;
13+ import { useMemo , useState } from "react" ;
1314
14- import { useBTCWallet , useETHWallet } from "../context/wallet" ;
15+ import { useBTCWallet , useETHWallet } from "../../../../context/wallet" ;
16+ import { getPeginState } from "../../../../models/peginStateMachine" ;
17+ import type { VaultActivity } from "../../../../types/activity" ;
18+ import type { Deposit } from "../../../../types/vault" ;
19+ import {
20+ useVaultRedeemState ,
21+ VaultRedeemStep ,
22+ } from "../../Redeem/state/VaultRedeemState" ;
23+ import { useVaultDeposits } from "../hooks/useVaultDeposits" ;
1524import {
1625 useVaultDepositState ,
1726 VaultDepositStep ,
1827} from "../state/VaultDepositState" ;
19- import {
20- useVaultRedeemState ,
21- VaultRedeemStep ,
22- } from "../state/VaultRedeemState" ;
23- import type { Deposit } from "../types/vault" ;
2428
25- // Hardcoded deposit data
26- // TODO: Replace with useVaultPositions when wallet providers are integrated
27- const HARDCODED_DEPOSITS : Deposit [ ] = [ ] ;
28-
29- function EmptyState ( { onDeposit } : { onDeposit : ( ) => void } ) {
29+ function EmptyState ( {
30+ onDeposit,
31+ isConnected,
32+ } : {
33+ onDeposit : ( ) => void ;
34+ isConnected : boolean ;
35+ } ) {
3036 return (
3137 < div className = "max-h-[500px] overflow-x-auto overflow-y-auto bg-primary-contrast" >
3238 < div className = "flex min-h-[200px] items-center justify-center p-6" >
@@ -37,7 +43,9 @@ function EmptyState({ onDeposit }: { onDeposit: () => void }) {
3743 Deposit BTC Trustlessly
3844 </ h4 >
3945 < p className = "text-sm text-accent-secondary" >
40- Your deposit will appear here once confirmed.
46+ { isConnected
47+ ? "Your deposit will appear here once confirmed."
48+ : "Connect your wallet to start depositing BTC." }
4149 </ p >
4250 </ div >
4351 < div className = "mt-6" >
@@ -46,9 +54,9 @@ function EmptyState({ onDeposit }: { onDeposit: () => void }) {
4654 size = "medium"
4755 rounded
4856 onClick = { onDeposit }
49- aria-label = "Add deposit"
57+ aria-label = { isConnected ? "Add deposit" : "Connect wallet" }
5058 >
51- Deposit
59+ { isConnected ? " Deposit" : "Connect Wallet" }
5260 </ Button >
5361 </ div >
5462 </ div >
@@ -60,18 +68,47 @@ function EmptyState({ onDeposit }: { onDeposit: () => void }) {
6068export function DepositOverview ( ) {
6169 const isMobile = useIsMobile ( ) ;
6270 const { connected : btcConnected } = useBTCWallet ( ) ;
63- const { connected : ethConnected } = useETHWallet ( ) ;
71+ const { connected : ethConnected , address : ethAddress } = useETHWallet ( ) ;
6472 const isConnected = btcConnected && ethConnected ;
73+ const { open : openWalletModal } = useWalletConnect ( ) ;
74+
75+ // Fetch real deposit data
76+ const { activities } = useVaultDeposits (
77+ ethAddress as `0x${string } ` | undefined ,
78+ ) ;
79+
80+ // Transform VaultActivity to Deposit format
81+ const deposits : Deposit [ ] = useMemo ( ( ) => {
82+ return activities . map ( ( activity : VaultActivity ) => {
83+ // Get state from state machine
84+ const state = getPeginState ( activity . contractStatus ?? 0 ) ;
85+
86+ return {
87+ id : activity . id ,
88+ amount : parseFloat ( activity . collateral . amount ) ,
89+ vaultProvider : {
90+ name : activity . providers [ 0 ] ?. name || "Unknown Provider" ,
91+ icon : activity . providers [ 0 ] ?. icon || "" ,
92+ } ,
93+ status : state . displayLabel as "Available" | "Pending" | "In Use" ,
94+ } ;
95+ } ) ;
96+ } , [ activities ] ) ;
6597
66- const deposits = HARDCODED_DEPOSITS ;
6798 const [ selectedDepositIds , setSelectedDepositIds ] = useState <
6899 Array < string | number >
69100 > ( [ ] ) ;
70101 const { goToStep : goToDepositStep } = useVaultDepositState ( ) ;
71102 const { goToStep : goToRedeemStep , setRedeemData } = useVaultRedeemState ( ) ;
72103
73104 const handleDeposit = ( ) => {
74- goToDepositStep ( VaultDepositStep . FORM ) ;
105+ if ( ! isConnected ) {
106+ // Open wallet connection modal
107+ openWalletModal ( ) ;
108+ } else {
109+ // Already connected, open deposit modal directly
110+ goToDepositStep ( VaultDepositStep . FORM ) ;
111+ }
75112 } ;
76113
77114 const handleRedeem = ( ) => {
@@ -83,7 +120,7 @@ export function DepositOverview() {
83120
84121 // Show empty state when not connected OR when connected but no data
85122 if ( ! isConnected || deposits . length === 0 ) {
86- return < EmptyState onDeposit = { handleDeposit } /> ;
123+ return < EmptyState onDeposit = { handleDeposit } isConnected = { isConnected } /> ;
87124 }
88125
89126 const columns : ColumnProps < Deposit > [ ] = [
@@ -143,9 +180,9 @@ export function DepositOverview() {
143180 size = "medium"
144181 rounded
145182 onClick = { handleDeposit }
146- aria-label = "Deposit BTC"
183+ aria-label = { isConnected ? "Deposit BTC" : "Connect wallet to deposit" }
147184 >
148- Deposit
185+ { isConnected ? " Deposit" : "Connect Wallet" }
149186 </ Button >
150187 < Button
151188 variant = "outlined"
0 commit comments