import { BeakerIcon, XCircleIcon } from "@heroicons/react/24/solid"; import { BANNER_IDS, PERMISSIONS } from "@hey/data/constants"; import { useAddPostNotInterestedMutation, useJoinGroupMutation } from "@hey/indexer"; import type { ApolloClientError } from "@hey/types/errors"; import { useCallback, useState } from "react"; import { toast } from "sonner"; import { Badge, Button, Card, H5 } from "@/components/Shared/UI"; import errorToast from "@/helpers/errorToast"; import useTransactionLifecycle from "@/hooks/useTransactionLifecycle"; import useWaitForTransactionToComplete from "@/hooks/useWaitForTransactionToComplete"; import { useAccountStore } from "@/store/persisted/useAccountStore"; import { useBetaStore } from "@/store/persisted/useBetaStore"; const BetaBanner = () => { const { currentAccount } = useAccountStore(); const { betaBannerDismissed, setBetaBannerDismissed } = useBetaStore(); const handleTransactionLifecycle = useTransactionLifecycle(); const waitForTransactionToComplete = useWaitForTransactionToComplete(); const [isSubmitting, setIsSubmitting] = useState(false); const onCompleted = async (hash: string) => { await waitForTransactionToComplete(hash); location.reload(); }; const onError = useCallback((error: ApolloClientError) => { errorToast(error); }, []); const [dismissBetaBanner, { loading }] = useAddPostNotInterestedMutation({ onCompleted: () => { toast.success("Dismissed"); setBetaBannerDismissed(true); }, onError, variables: { request: { post: BANNER_IDS.BETA } } }); const [joinGroup] = useJoinGroupMutation({ onCompleted: async ({ joinGroup }) => { if (joinGroup.__typename === "JoinGroupResponse") { return onCompleted(joinGroup.hash); } return await handleTransactionLifecycle({ onCompleted, onError, transactionData: joinGroup }); }, onError }); if (!currentAccount?.hasSubscribed) { return null; } if (currentAccount?.isBeta || betaBannerDismissed) { return null; } const handleDismissBetaBanner = async () => { return await dismissBetaBanner(); }; const handleJoinBeta = async () => { setIsSubmitting(true); return await joinGroup({ variables: { request: { group: PERMISSIONS.BETA } } }); }; return (
Join Hey Beta
Pro
Get your badge and access exclusive features.
); }; export default BetaBanner;