import { CheckCircleIcon } from "@heroicons/react/24/outline"; import { DEFAULT_COLLECT_TOKEN, PERMISSIONS, STATIC_IMAGES_URL, SUBSCRIPTION_AMOUNT, WRAPPED_NATIVE_TOKEN_SYMBOL } from "@hey/data/constants"; import { type AccountFragment, useBalancesBulkQuery, useJoinGroupMutation } from "@hey/indexer"; import type { ApolloClientError } from "@hey/types/errors"; import { useCallback, useState } from "react"; import SingleAccount from "@/components/Shared/Account/SingleAccount"; import TopUpButton from "@/components/Shared/Account/TopUp/Button"; import { Button, Image, Spinner, Tooltip } from "@/components/Shared/UI"; import errorToast from "@/helpers/errorToast"; import getTokenImage from "@/helpers/getTokenImage"; import useTransactionLifecycle from "@/hooks/useTransactionLifecycle"; import useWaitForTransactionToComplete from "@/hooks/useWaitForTransactionToComplete"; import { useAccountStore } from "@/store/persisted/useAccountStore"; const Subscribe = () => { const { currentAccount } = useAccountStore(); const [isSubmitting, setIsSubmitting] = useState(false); const handleTransactionLifecycle = useTransactionLifecycle(); const waitForTransactionToComplete = useWaitForTransactionToComplete(); const { data: balance, loading: balanceLoading } = useBalancesBulkQuery({ fetchPolicy: "no-cache", pollInterval: 3000, skip: !currentAccount?.address, variables: { request: { address: currentAccount?.address, tokens: [DEFAULT_COLLECT_TOKEN] } } }); const onCompleted = async (hash: string) => { await waitForTransactionToComplete(hash); location.reload(); }; const onError = useCallback((error: ApolloClientError) => { setIsSubmitting(false); errorToast(error); }, []); const tokenBalance = balance?.balancesBulk[0].__typename === "Erc20Amount" ? Number(balance.balancesBulk[0].value).toFixed(2) : 0; const canSubscribe = Number(tokenBalance) >= SUBSCRIPTION_AMOUNT; const [joinGroup] = useJoinGroupMutation({ onCompleted: async ({ joinGroup }) => { return await handleTransactionLifecycle({ onCompleted, onError, transactionData: joinGroup }); }, onError }); const handleSubscribe = async () => { setIsSubmitting(true); return await joinGroup({ variables: { request: { group: PERMISSIONS.SUBSCRIPTION } } }); }; const hasSubscribed = currentAccount?.hasSubscribed; return (
Pro
{hasSubscribed ? (
Thanks for being a valuable Hey Pro member!
) : ( <> Join Hey Pro for{" "} {SUBSCRIPTION_AMOUNT}{" "} {WRAPPED_NATIVE_TOKEN_SYMBOL} /year . )}
{hasSubscribed ? null : ( <>
Subscription Badge
Exclusive Hey features
Special NFT for early members
Contribute to Hey's growth
{balanceLoading ? ( ) : ( )}
One-time payment. Manual renewal required next year.
)}
); }; export default Subscribe;