Skip to content

Commit 69239e6

Browse files
Merge pull request #1099 from ionicprotocol/development
reset button
2 parents f4d3f71 + a80f8f8 commit 69239e6

2 files changed

Lines changed: 73 additions & 1 deletion

File tree

packages/ui/components/veion/MyVeionTable.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import type {
1313
import TokenPair from '@ui/components/TokenPair';
1414
import { pools } from '@ui/constants';
1515
import { useVeIONContext } from '@ui/context/VeIonContext';
16+
import { useVeIONVote } from '@ui/hooks/veion/useVeIONVote';
1617
import type { MyVeionData } from '@ui/types/veION';
1718

1819
import ExtendVeion from './ExtendVeion';
@@ -32,8 +33,10 @@ function MyVeionTable() {
3233
const router = useRouter();
3334
const {
3435
setSelectedManagePosition,
35-
locks: { myLocks, isLoading }
36+
locks: { myLocks, isLoading },
37+
currentChain
3638
} = useVeIONContext();
39+
const { handleReset, isResetting } = useVeIONVote(currentChain);
3740

3841
const hasLockExpired = (lockExpiryDate: string, isPermanent: boolean) => {
3942
if (isPermanent) return false;
@@ -134,6 +137,17 @@ function MyVeionTable() {
134137
data.lockExpires.isPermanent
135138
);
136139

140+
const handleResetClick = async () => {
141+
try {
142+
await switchChain({
143+
chainId: data.chainId
144+
});
145+
await handleReset(data.id);
146+
} catch (error) {
147+
console.error('Reset failed:', error);
148+
}
149+
};
150+
137151
return (
138152
<div className="flex gap-2 w-full">
139153
{/* {isExpired ? (
@@ -178,6 +192,14 @@ function MyVeionTable() {
178192
bg="bg-white/10"
179193
className="bg-accent"
180194
/>
195+
<ActionButton
196+
half
197+
action={handleResetClick}
198+
label={isResetting ? 'Resetting...' : 'Reset'}
199+
bg="bg-white/10"
200+
className="bg-red-500 hover:bg-red-600 text-white"
201+
disabled={isResetting}
202+
/>
181203
</>
182204
{/* )} */}
183205
</div>

packages/ui/hooks/veion/useVeIONVote.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ interface VoteParams {
2222

2323
interface VoteState {
2424
isVoting: boolean;
25+
isResetting: boolean;
2526
error: string | null;
2627
pendingVotes: Map<
2728
string,
@@ -55,6 +56,7 @@ export function useVeIONVote(chain: number) {
5556

5657
const [state, setState] = useState<VoteState>({
5758
isVoting: false,
59+
isResetting: false,
5860
error: null,
5961
pendingVotes: new Map()
6062
});
@@ -160,12 +162,60 @@ export function useVeIONVote(chain: number) {
160162
}
161163
}
162164

165+
const handleReset = async (tokenId: number) => {
166+
if (!isConnected || !address) {
167+
throw new Error('Wallet not connected');
168+
}
169+
170+
if (!voterContract || !publicClient || !walletClient) {
171+
throw new Error('Contract not initialized');
172+
}
173+
174+
try {
175+
// Validate chain
176+
const isSwitched = await handleSwitchOriginChain(chain, chainId);
177+
if (!isSwitched) throw new Error('Failed to switch chain');
178+
179+
setState((prev) => ({ ...prev, isResetting: true }));
180+
181+
await write(getContractConfig('reset', [tokenId]), {
182+
successMessage: 'Successfully reset votes',
183+
errorMessage: 'Failed to reset votes, last voted this epoch'
184+
});
185+
186+
// Refetch data after successful reset
187+
await Promise.all([
188+
votingPeriod.refetch?.(),
189+
selectedPoolRows.refetch?.()
190+
]);
191+
192+
setState((prev) => ({
193+
...prev,
194+
isResetting: false,
195+
pendingVotes: new Map()
196+
}));
197+
198+
return true;
199+
} catch (error) {
200+
console.error('Vote reset failed:', error);
201+
setState((prev) => ({
202+
...prev,
203+
error:
204+
error instanceof Error ? error.message : 'Unknown error occurred',
205+
isResetting: false
206+
}));
207+
return false;
208+
}
209+
};
210+
163211
return {
164212
handleVote,
213+
handleReset,
165214
simulateVote,
166215
resetState: () =>
167216
setState({
168217
isVoting: false,
218+
isResetting: false,
169219
error: null,
170220
pendingVotes: new Map()
171221
}),

0 commit comments

Comments
 (0)