Skip to content

Commit

Permalink
feat: enhance withdraw funds functionality with coming soon tooltip a…
Browse files Browse the repository at this point in the history
…nd button state management
  • Loading branch information
truemiller committed Jan 30, 2025
1 parent caeda33 commit dcb49ba
Showing 1 changed file with 29 additions and 25 deletions.
54 changes: 29 additions & 25 deletions frontend/components/YourWalletPage/WithdrawFunds.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ export const WithdrawFunds = () => {
currentStakingContractInfo: selectedStakingContractDetails,
});

const isComingSoon = useMemo(
() => agentsWithWithdrawalsComingSoon.includes(selectedAgentType),
[selectedAgentType],
);

const showModal = useCallback(() => {
setIsModalVisible(true);
}, []);
Expand Down Expand Up @@ -164,49 +169,48 @@ export const WithdrawFunds = () => {
handleCancel,
]);

const withdrawButton = useMemo(
const withdrawAllButton = useMemo(
() => (
<Button
onClick={showModal}
block
size="large"
disabled={!service || !isServiceStakedForMinimumDuration}
disabled={
!service || !isServiceStakedForMinimumDuration || isComingSoon
}
>
Withdraw all funds
</Button>
),
[service, isServiceStakedForMinimumDuration, showModal],
[showModal, service, isServiceStakedForMinimumDuration, isComingSoon],
);

const isComingSoon = useMemo(
() => agentsWithWithdrawalsComingSoon.includes(selectedAgentType),
[selectedAgentType],
);
const withdrawAllTooltip = useMemo(() => {
if (isComingSoon) {
return 'Available soon!';
}

// countdown to withdrawal
if (!isServiceStakedForMinimumDuration) {
return `${minDurationMessage} ${countdownDisplay}`;
}

return null;
}, [countdownDisplay, isComingSoon, isServiceStakedForMinimumDuration]);

const buttonText = useMemo(() => {
const modalButtonText = useMemo(() => {
if (isWithdrawalLoading) return 'Loading';
if (isComingSoon) return 'Coming soon';
return 'Proceed';
}, [isComingSoon, isWithdrawalLoading]);
}, [isWithdrawalLoading]);

const isWithdrawFundsEnabled = useFeatureFlag('withdraw-funds');
if (!isWithdrawFundsEnabled) return <FeatureNotEnabled />;

return (
<>
{isServiceStakedForMinimumDuration ? (
withdrawButton
) : (
<Tooltip
title={
<Text className="text-sm">
{minDurationMessage} {countdownDisplay}.
</Text>
}
>
{withdrawButton}
</Tooltip>
)}
<Tooltip title={<Text className="text-sm">{withdrawAllTooltip}</Text>}>
{withdrawAllButton}
</Tooltip>

{!isServiceRunning && <ServiceNotRunning />}

Expand Down Expand Up @@ -237,14 +241,14 @@ export const WithdrawFunds = () => {
<CompatibleMessage />

<Button
disabled={!withdrawAddress || isComingSoon}
disabled={!withdrawAddress}
loading={isWithdrawalLoading}
onClick={handleProceed}
block
type="primary"
className="text-base"
>
{buttonText}
{modalButtonText}
</Button>
</Flex>
</Modal>
Expand Down

0 comments on commit dcb49ba

Please sign in to comment.