1- import React , { useCallback , useMemo } from "react" ;
1+ import React , { useCallback , useEffect , useMemo } from "react" ;
22
33import { useParams } from "react-router-dom" ;
44import { useAccount , usePublicClient } from "wagmi" ;
@@ -36,17 +36,14 @@ const Container = styled.div`
3636 flex-direction: column;
3737` ;
3838
39- const ErrorLabel = styled . label `
40- color: ${ ( { theme } ) => theme . error } ;
41- ` ;
42-
4339interface IActionButton {
4440 isSending : boolean ;
4541 parsedAmount : bigint ;
4642 action : ActionType ;
4743 setIsSending : ( arg0 : boolean ) => void ;
4844 setAmount : ( arg0 : string ) => void ;
4945 setIsPopupOpen : ( arg0 : boolean ) => void ;
46+ setErrorMsg : ( msg : string ) => void ;
5047}
5148
5249const StakeWithdrawButton : React . FC < IActionButton > = ( {
@@ -55,6 +52,7 @@ const StakeWithdrawButton: React.FC<IActionButton> = ({
5552 isSending,
5653 setIsSending,
5754 setIsPopupOpen,
55+ setErrorMsg,
5856} ) => {
5957 const { id } = useParams ( ) ;
6058 const { address } = useAccount ( ) ;
@@ -104,9 +102,11 @@ const StakeWithdrawButton: React.FC<IActionButton> = ({
104102 } ,
105103 args : [ klerosCoreAddress [ DEFAULT_CHAIN ] , BigInt ( targetStake ?? 0 ) - BigInt ( allowance ?? 0 ) ] ,
106104 } ) ;
105+
107106 const { writeContractAsync : increaseAllowance } = useWritePnkIncreaseAllowance ( ) ;
107+
108108 const handleAllowance = useCallback ( ( ) => {
109- if ( increaseAllowanceConfig ) {
109+ if ( increaseAllowanceConfig && publicClient ) {
110110 setIsSending ( true ) ;
111111 wrapWithToast ( async ( ) => await increaseAllowance ( increaseAllowanceConfig . request ) , publicClient ) . finally ( ( ) => {
112112 setIsSending ( false ) ;
@@ -116,13 +116,15 @@ const StakeWithdrawButton: React.FC<IActionButton> = ({
116116
117117 const { data : setStakeConfig , error : setStakeError } = useSimulateKlerosCoreSetStake ( {
118118 query : {
119- enabled : ! isUndefined ( targetStake ) && ! isUndefined ( id ) && ! isAllowance && parsedAmount !== 0n ,
119+ enabled :
120+ ! isUndefined ( targetStake ) && ! isUndefined ( id ) && ! isAllowance && parsedAmount !== 0n && targetStake >= 0n ,
120121 } ,
121122 args : [ BigInt ( id ?? 0 ) , targetStake ] ,
122123 } ) ;
123124 const { writeContractAsync : setStake } = useWriteKlerosCoreSetStake ( ) ;
125+
124126 const handleStake = useCallback ( ( ) => {
125- if ( setStakeConfig ) {
127+ if ( setStakeConfig && publicClient ) {
126128 setIsSending ( true ) ;
127129 wrapWithToast ( async ( ) => await setStake ( setStakeConfig . request ) , publicClient )
128130 . then ( ( res ) => res . status && setIsPopupOpen ( true ) )
@@ -135,7 +137,7 @@ const StakeWithdrawButton: React.FC<IActionButton> = ({
135137 const buttonProps = {
136138 [ ActionType . allowance ] : {
137139 text : "Allow PNK" ,
138- checkDisabled : ( ) => ! balance || targetStake ! > balance ,
140+ checkDisabled : ( ) => ! balance || targetStake > balance ,
139141 onClick : handleAllowance ,
140142 } ,
141143 [ ActionType . stake ] : {
@@ -150,6 +152,12 @@ const StakeWithdrawButton: React.FC<IActionButton> = ({
150152 } ,
151153 } ;
152154
155+ useEffect ( ( ) => {
156+ if ( setStakeError ) {
157+ setErrorMsg ( setStakeError ?. shortMessage ?? setStakeError . message ) ;
158+ }
159+ } , [ setStakeError ] ) ;
160+
153161 const { text, checkDisabled, onClick } = buttonProps [ isAllowance ? ActionType . allowance : action ] ;
154162 return (
155163 < EnsureChain >
@@ -168,7 +176,6 @@ const StakeWithdrawButton: React.FC<IActionButton> = ({
168176 }
169177 onClick = { onClick }
170178 />
171- { setStakeError && < ErrorLabel > { setStakeError . message } </ ErrorLabel > }
172179 </ Container >
173180 </ EnsureChain >
174181 ) ;
0 commit comments