From 31a8abe0780b8d366f16ae09b7efb15ef1efba95 Mon Sep 17 00:00:00 2001 From: mart1n <20109376+mart1n-xyz@users.noreply.github.com> Date: Tue, 21 Jan 2025 12:56:04 +0100 Subject: [PATCH] unstaking --- src/lib/components/UnstakeButton.svelte | 26 ++ src/lib/components/UnstakingModal.svelte | 321 +++++++++++++++++++++++ src/routes/+page.svelte | 36 +++ src/routes/manage/+page.svelte | 135 ++++++++-- src/routes/stake/+page.svelte | 39 ++- 5 files changed, 529 insertions(+), 28 deletions(-) create mode 100644 src/lib/components/UnstakeButton.svelte create mode 100644 src/lib/components/UnstakingModal.svelte diff --git a/src/lib/components/UnstakeButton.svelte b/src/lib/components/UnstakeButton.svelte new file mode 100644 index 0000000..f34d197 --- /dev/null +++ b/src/lib/components/UnstakeButton.svelte @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/src/lib/components/UnstakingModal.svelte b/src/lib/components/UnstakingModal.svelte new file mode 100644 index 0000000..5484fbe --- /dev/null +++ b/src/lib/components/UnstakingModal.svelte @@ -0,0 +1,321 @@ + + +{#if isOpen} + +{/if} \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index aa9a549..8181760 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -19,6 +19,12 @@ goto('/stake'); } + function handleStakeClick(vault: Address) { + if (!isLocked(vault)) { + goto('/stake?stakeVault=' + vault); + } + } + function shortenAddress(address: string): string { return `${address.slice(0, 6)}...${address.slice(-4)}`; } @@ -175,6 +181,7 @@ SNT Staked MPs Remaining Lock + @@ -223,6 +230,20 @@ {formatRemainingLock(vault)} {/if} + + {#if !isLocked(vault)} + + {:else} +
+ {/if} + {/each} @@ -287,6 +308,21 @@ +
+ {#if !isLocked(vault)} + + {:else} +
+ {/if} +
{/each} diff --git a/src/routes/manage/+page.svelte b/src/routes/manage/+page.svelte index 9fb3902..9618f4d 100644 --- a/src/routes/manage/+page.svelte +++ b/src/routes/manage/+page.svelte @@ -1,6 +1,12 @@
@@ -103,9 +129,17 @@ {:else} - - - + {/if} #{i + 1}
@@ -143,13 +177,33 @@ {/if} - +
+ + {#if !isLocked(vault)} + + {:else} +
+ {/if} +
{/each} @@ -170,9 +224,17 @@ {:else} - - - + {/if}

Vault #{i + 1}

@@ -222,13 +284,33 @@
- +
+ + {#if !isLocked(vault)} + + {:else} +
+ {/if} +
@@ -243,4 +325,11 @@ {/if} - \ No newline at end of file + + + \ No newline at end of file diff --git a/src/routes/stake/+page.svelte b/src/routes/stake/+page.svelte index e989350..25ce40f 100644 --- a/src/routes/stake/+page.svelte +++ b/src/routes/stake/+page.svelte @@ -4,6 +4,7 @@ import TransactionModal from '$lib/components/TransactionModal.svelte'; import StakingModal from '$lib/components/StakingModal.svelte'; import LockingModal from '$lib/components/LockingModal.svelte'; + import { page } from '$app/stores'; let amount = ''; let selectedVaultId = ''; @@ -45,8 +46,32 @@ }); } + // Handle vault parameter in URL + $: if ($page.url.searchParams.get('vault')) { + const vaultFromUrl = $page.url.searchParams.get('vault') as Address; + if ($userVaults.includes(vaultFromUrl) && !isLocked(vaultFromUrl) && $vaultAccounts[vaultFromUrl]?.stakedBalance && $vaultAccounts[vaultFromUrl].stakedBalance > 0n) { + selectedLockVaultId = vaultFromUrl; + // Scroll to the lock form + setTimeout(() => { + document.getElementById('lockForm')?.scrollIntoView({ behavior: 'smooth' }); + }, 100); + } + } + + // Handle stakeVault parameter in URL + $: if ($page.url.searchParams.get('stakeVault')) { + const vaultFromUrl = $page.url.searchParams.get('stakeVault') as Address; + if ($userVaults.includes(vaultFromUrl) && !isLocked(vaultFromUrl)) { + selectedVaultId = vaultFromUrl; + // Scroll to the stake form + setTimeout(() => { + document.getElementById('stakeForm')?.scrollIntoView({ behavior: 'smooth' }); + }, 100); + } + } + // Helper function to check if vault is locked - function isVaultLocked(vault: Address): boolean { + function isLocked(vault: Address): boolean { const account = $vaultAccounts[vault]; if (!account?.lockUntil) return false; return account.lockUntil > currentBlockTimestamp; @@ -321,6 +346,7 @@

{ await handleStake(); @@ -341,9 +367,11 @@ > {#each $userVaults as vault, i} - + {#if !isLocked(vault)} + + {/if} {/each} @@ -402,6 +430,7 @@ {#if $userVaults.some(vault => $vaultAccounts[vault] && $vaultAccounts[vault].stakedBalance > 0n)} @@ -420,7 +449,7 @@ > {#each $userVaults as vault, i} - {#if $vaultAccounts[vault] && $vaultAccounts[vault].stakedBalance > 0n && !isVaultLocked(vault)} + {#if $vaultAccounts[vault] && $vaultAccounts[vault].stakedBalance > 0n && !isLocked(vault)}