diff --git a/.changeset/quick-guests-make.md b/.changeset/quick-guests-make.md new file mode 100644 index 00000000..9b4f7334 --- /dev/null +++ b/.changeset/quick-guests-make.md @@ -0,0 +1,5 @@ +--- +"@stakekit/widget": patch +--- + +feat(earn-page): enhance footer button registration logic and improve yield initialization checks diff --git a/packages/widget/src/pages/details/earn-page/state/earn-page-context.tsx b/packages/widget/src/pages/details/earn-page/state/earn-page-context.tsx index d018e711..c2309233 100644 --- a/packages/widget/src/pages/details/earn-page/state/earn-page-context.tsx +++ b/packages/widget/src/pages/details/earn-page/state/earn-page-context.tsx @@ -104,6 +104,9 @@ export const EarnPageContextProvider = ({ children }: PropsWithChildren) => { (y) => y.title, "" ); + + const initYieldRes = useInitYield({ selectedToken }); + const estimatedRewards = useEstimatedRewards({ selectedStake, selectedValidators, @@ -553,48 +556,9 @@ export const EarnPageContextProvider = ({ children }: PropsWithChildren) => { [selectedStake, selectedToken] ); - useRegisterFooterButton( - useMemo( - () => - isConnected && !isLedgerLiveAccountPlaceholder - ? { - disabled: buttonDisabled, - isLoading: isFetching, - onClick: () => onClickRef.current(), - label: buttonCTAText, - } - : externalProviders - ? null - : { - disabled: appLoading, - isLoading: appLoading, - label: t( - isLedgerLiveAccountPlaceholder - ? "init.ledger_add_account" - : "init.connect_wallet" - ), - onClick: () => connectClickRef.current(), - }, - [ - appLoading, - buttonCTAText, - buttonDisabled, - connectClickRef, - isConnected, - isLedgerLiveAccountPlaceholder, - onClickRef, - externalProviders, - isFetching, - t, - ] - ) - ); - const selectTokenIsLoading = tokenBalancesScanLoading || defaultTokensIsLoading; - const initYieldRes = useInitYield({ selectedToken }); - const selectYieldIsLoading = (selectedStakeId.isNothing() && !hasNotYieldsForToken) || initYieldRes.isLoading || @@ -614,6 +578,46 @@ export const EarnPageContextProvider = ({ children }: PropsWithChildren) => { initYieldRes.isLoading || yieldOpportunityLoading; + useRegisterFooterButton( + useMemo( + () => + hasNotYieldsForToken + ? null + : isConnected && !isLedgerLiveAccountPlaceholder + ? { + disabled: buttonDisabled, + isLoading: !buttonCTAText || isFetching, + onClick: () => onClickRef.current(), + label: buttonCTAText, + } + : externalProviders + ? null + : { + disabled: appLoading, + isLoading: appLoading, + label: t( + isLedgerLiveAccountPlaceholder + ? "init.ledger_add_account" + : "init.connect_wallet" + ), + onClick: () => connectClickRef.current(), + }, + [ + appLoading, + buttonCTAText, + buttonDisabled, + connectClickRef, + isConnected, + isLedgerLiveAccountPlaceholder, + onClickRef, + externalProviders, + isFetching, + t, + hasNotYieldsForToken, + ] + ) + ); + const { referralCheck } = useSettings(); const value = { diff --git a/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx b/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx index 7ecda169..3bc92e5d 100644 --- a/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx +++ b/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx @@ -247,6 +247,7 @@ export const EarnPageStateProvider = ({ children }: PropsWithChildren) => { !initYieldRes.isLoading && !initYieldRes.data && initToken.isJust() && + selectedToken.isJust() && initYield.isNothing() && selectedStakeId.isNothing();