'use client';
import { useAnalytics } from '@/core/analytics/hooks/useAnalytics';
import {
WalletEvent,
WalletOption,
WalletOptionType,
} from '@/core/analytics/types';
import { Skeleton } from '@/internal/components/Skeleton';
import { addSvgForeground } from '@/internal/svg/addForegroundSvg';
import { arrowUpRightSvg } from '@/internal/svg/arrowUpRightSvg';
import { toggleSvg } from '@/internal/svg/toggleSvg';
import { cn, pressable, text } from '@/styles/theme';
import { useOnchainKit } from '@/useOnchainKit';
import { useCallback } from 'react';
import { useWalletContext } from './WalletProvider';
import { RequestContext } from '@/core/network/constants';
import { usePortfolio } from '../hooks/usePortfolio';
import { useAccount } from 'wagmi';
type WalletAdvancedTransactionActionProps = {
icon: React.ReactNode;
label: string;
action: () => void;
classNames?: {
container?: string;
icon?: string;
label?: string;
};
};
type WalletAdvancedTransactionActionsProps = {
classNames?: {
container?: string;
leftAction?: WalletAdvancedTransactionActionProps['classNames'];
middleAction?: WalletAdvancedTransactionActionProps['classNames'];
rightAction?: WalletAdvancedTransactionActionProps['classNames'];
};
};
export function WalletAdvancedTransactionActions({
classNames,
}: WalletAdvancedTransactionActionsProps) {
const { setActiveFeature, animations } = useWalletContext();
const { address } = useAccount();
const { chain } = useOnchainKit();
const { projectId } = useOnchainKit();
const { sendAnalytics } = useAnalytics();
const { isFetching: isFetchingPortfolioData } = usePortfolio(
{ address },
RequestContext.Wallet,
);
const handleAnalyticsOptionSelected = useCallback(
(option: WalletOptionType) => {
sendAnalytics(WalletEvent.OptionSelected, {
option,
});
},
[sendAnalytics],
);
const handleBuy = useCallback(() => {
handleAnalyticsOptionSelected(WalletOption.Buy);
if (!projectId || !address || !chain?.name) {
return;
}
const url = new URL('https://pay.coinbase.com/buy/select-asset');
const params = new URLSearchParams({
appId: projectId,
destinationWallets: JSON.stringify([
{
address,
blockchains: [chain.name.toLowerCase()],
},
]),
defaultAsset: 'USDC',
defaultPaymentMethod: 'CRYPTO_ACCOUNT',
presetFiatAmount: '25',
});
window.open(
`${url}?${params}`,
'popup',
'width=400,height=600,scrollbars=yes',
);
}, [address, chain?.name, projectId, handleAnalyticsOptionSelected]);
const handleSend = useCallback(() => {
handleAnalyticsOptionSelected(WalletOption.Send);
setActiveFeature('send');
}, [handleAnalyticsOptionSelected, setActiveFeature]);
const handleSwap = useCallback(() => {
handleAnalyticsOptionSelected(WalletOption.Swap);
setActiveFeature('swap');
}, [setActiveFeature, handleAnalyticsOptionSelected]);
if (isFetchingPortfolioData) {
return