@@ -5,7 +5,7 @@ import { Button } from '@status-im/status-network/components'
55import { createColumnHelper } from '@tanstack/react-table'
66import { formatUnits } from 'viem'
77
8- import { SNT_TOKEN } from '~constants/index'
8+ import { EXTEND_LOCK_PERIOD , SNT_TOKEN } from '~constants/index'
99import { type StakingVault } from '~hooks/useStakingVaults'
1010import { shortenAddress } from '~utils/address'
1111import { formatSNT } from '~utils/currency'
@@ -29,9 +29,16 @@ interface TableColumnsProps {
2929}
3030
3131// Calculate total staked across all vaults
32- const calculateTotalStaked = ( vaults : StakingVault [ ] ) : bigint => {
32+ const calculateTotalStaked = (
33+ vaults : StakingVault [ ] ,
34+ emergencyMode : boolean
35+ ) : bigint => {
3336 return vaults . reduce (
34- ( acc , vault ) => acc + ( vault . data ?. stakedBalance || 0n ) ,
37+ ( acc , vault ) =>
38+ acc +
39+ ( emergencyMode
40+ ? vault . data ?. depositedBalance || 0n
41+ : vault . data ?. stakedBalance || 0n ) ,
3542 BigInt ( 0 )
3643 )
3744}
@@ -90,7 +97,10 @@ export const createVaultTableColumns = ({
9097 chainId,
9198} : TableColumnsProps ) => {
9299 // Calculate totals and current time once per column creation
93- const totalStaked = calculateTotalStaked ( vaults )
100+ const totalStaked = calculateTotalStaked (
101+ vaults ,
102+ Boolean ( emergencyModeEnabled )
103+ )
94104 const totalKarma = calculateTotalKarma ( vaults )
95105 const currentTimestamp = getCurrentTimestamp ( )
96106 const columnHelper = createColumnHelper < StakingVault > ( )
@@ -131,12 +141,15 @@ export const createVaultTableColumns = ({
131141 } ,
132142 } ) ,
133143 columnHelper . accessor ( 'data.stakedBalance' , {
134- header : 'Staked' ,
144+ header : emergencyModeEnabled ? 'Vault balance' : 'Staked' ,
135145 cell : ( { row } ) => {
146+ const balance = emergencyModeEnabled
147+ ? row . original . data ?. depositedBalance
148+ : row . original . data ?. stakedBalance
136149 return (
137150 < div className = "flex items-center gap-1" >
138151 < span className = "text-13 font-medium text-neutral-100" >
139- { formatSNT ( row . original . data ?. stakedBalance || 0n ) }
152+ { formatSNT ( balance || 0n ) }
140153 < span className = "ml-0.5 text-neutral-50" > SNT</ span >
141154 </ span >
142155 </ div >
@@ -290,86 +303,83 @@ export const createVaultTableColumns = ({
290303 : false
291304
292305 return (
293- < div className = "flex items-end justify-end gap-2" >
294- { isLocked ? (
295- < div className = "flex items-center gap-2" >
296- { ! emergencyModeEnabled && (
297- < WithdrawVaultModal
298- open = { isWithdrawModalOpen }
299- onOpenChange = { open =>
300- setOpenModalVaultId ( open ? withdrawModalId : null )
301- }
302- onClose = { ( ) => setOpenModalVaultId ( null ) }
303- vaultAddress = { row . original . address }
304- >
305- < Button
306- variant = "danger"
307- size = "32"
308- disabled = { ! isConnected }
309- className = "min-w-fit bg-danger-50 text-13 text-white-100 hover:bg-danger-60"
310- >
311- < AlertIcon className = "shrink-0" />
312- < span className = "hidden whitespace-nowrap xl:inline" >
313- Withdraw funds
314- </ span >
315- < span className = "whitespace-nowrap xl:hidden" >
316- Withdraw
317- </ span >
318- </ Button >
319- </ WithdrawVaultModal >
320- ) }
321- < LockVaultModal
322- open = { isLockModalOpen }
323- onOpenChange = { open =>
324- setOpenModalVaultId ( open ? lockModalId : null )
325- }
326- vaultAddress = { row . original . address }
327- title = "Extend lock time"
328- initialYears = "2"
329- initialDays = "732"
330- description = "Extending lock time increasing Karma boost"
331- actions = { [ ...EXTEND_LOCK_ACTIONS ] }
332- onClose = { ( ) => setOpenModalVaultId ( null ) }
333- infoMessage = { LOCK_INFO_MESSAGE }
334- >
335- < Button
336- variant = "primary"
337- size = "32"
338- disabled = { ! isConnected }
339- className = "min-w-fit text-13"
340- >
341- < TimeIcon className = "shrink-0" />
342- < span className = "hidden whitespace-nowrap xl:inline" >
343- Extend lock time
344- </ span >
345- < span className = "whitespace-nowrap xl:hidden" > Extend</ span >
346- </ Button >
347- </ LockVaultModal >
348- </ div >
349- ) : (
350- < LockVaultModal
351- open = { isLockModalOpen }
306+ < div className = "flex items-end justify-end gap-2 lg:gap-4" >
307+ { emergencyModeEnabled ? (
308+ < WithdrawVaultModal
309+ open = { isWithdrawModalOpen }
352310 onOpenChange = { open =>
353- setOpenModalVaultId ( open ? lockModalId : null )
311+ setOpenModalVaultId ( open ? withdrawModalId : null )
354312 }
355- vaultAddress = { row . original . address }
356- title = "Do you want to lock the vault?"
357- description = "Lock this vault to receive more Karma"
358- actions = { [ ...LOCK_VAULT_ACTIONS ] }
359313 onClose = { ( ) => setOpenModalVaultId ( null ) }
360- infoMessage = { LOCK_INFO_MESSAGE }
361- onValidate = { validateLockTime }
314+ vaultAddress = { row . original . address }
315+ amountWei = { row . original . data ?. depositedBalance || 0n }
362316 >
363317 < Button
364- variant = "primary"
365- size = "32"
366- disabled = { ! isConnected }
367- className = "min-w-fit text-13"
318+ variant = "danger"
319+ size = "24"
320+ iconBefore = { < AlertIcon /> }
321+ disabled = {
322+ ! row . original . data ?. depositedBalance ||
323+ row . original . data . depositedBalance === 0n
324+ }
368325 >
369- < LockedIcon fill = "white" className = "shrink-0" />
370- < span className = "whitespace-nowrap" > Lock</ span >
326+ Withdraw funds
371327 </ Button >
372- </ LockVaultModal >
328+ </ WithdrawVaultModal >
329+ ) : (
330+ < >
331+ { isLocked ? (
332+ < div className = "flex items-center gap-2" >
333+ < LockVaultModal
334+ open = { isLockModalOpen }
335+ onOpenChange = { open =>
336+ setOpenModalVaultId ( open ? lockModalId : null )
337+ }
338+ vaultAddress = { row . original . address }
339+ title = "Extend lock time"
340+ initialYears = { EXTEND_LOCK_PERIOD . INITIAL_YEARS }
341+ initialDays = { EXTEND_LOCK_PERIOD . INITIAL_DAYS }
342+ description = "Extending lock time increasing Karma boost"
343+ actions = { [ ...EXTEND_LOCK_ACTIONS ] }
344+ onClose = { ( ) => setOpenModalVaultId ( null ) }
345+ infoMessage = { LOCK_INFO_MESSAGE }
346+ >
347+ < Button
348+ variant = "primary"
349+ size = "24"
350+ disabled = { ! isConnected }
351+ >
352+ < TimeIcon className = "shrink-0" />
353+ < span className = "hidden whitespace-nowrap xl:inline" >
354+ Extend lock time
355+ </ span >
356+ < span className = "whitespace-nowrap xl:hidden" >
357+ Extend
358+ </ span >
359+ </ Button >
360+ </ LockVaultModal >
361+ </ div >
362+ ) : (
363+ < LockVaultModal
364+ open = { isLockModalOpen }
365+ onOpenChange = { open =>
366+ setOpenModalVaultId ( open ? lockModalId : null )
367+ }
368+ vaultAddress = { row . original . address }
369+ title = "Do you want to lock the vault?"
370+ description = "Lock this vault to receive more Karma"
371+ actions = { [ ...LOCK_VAULT_ACTIONS ] }
372+ onClose = { ( ) => setOpenModalVaultId ( null ) }
373+ infoMessage = { LOCK_INFO_MESSAGE }
374+ onValidate = { validateLockTime }
375+ >
376+ < Button variant = "primary" size = "24" disabled = { ! isConnected } >
377+ < LockedIcon fill = "white" className = "shrink-0" />
378+ < span className = "whitespace-nowrap" > Lock</ span >
379+ </ Button >
380+ </ LockVaultModal >
381+ ) }
382+ </ >
373383 ) }
374384 < DropdownMenu . Root
375385 onOpenChange = { open => setOpenDropdownId ( open ? dropdownId : null ) }
0 commit comments