"use client" import { useTranslations } from "next-intl" import { useEffect } from "react" import { toast } from "react-hot-toast" import { Button } from "~/components/ui/Button" import type { Variant } from "~/components/ui/Button" import { UniLink } from "~/components/ui/UniLink" import { SITE_URL } from "~/lib/env" import { ExpandedCharacter } from "~/lib/types" import { cn } from "~/lib/utils" import { useGetSubscription, useSubscribeToSite, useUnsubscribeFromSite, } from "~/queries/site" export const FollowingButton = ({ site, variant, className, size, loadingStatusChange, }: { site?: ExpandedCharacter variant?: Variant className?: string size?: "sm" | "xl" loadingStatusChange?: (status: boolean) => void }) => { const subscribeToSite = useSubscribeToSite() const unsubscribeFromSite = useUnsubscribeFromSite() const t = useTranslations() const handleClickSubscribe = () => { if (site?.characterId) { if (subscription.data) { unsubscribeFromSite.mutate({ characterId: site?.characterId, siteId: site?.handle, } as any) } else { subscribeToSite.mutate({ characterId: site?.characterId, siteId: site?.handle, } as any) } } } const subscription = useGetSubscription(site?.characterId) useEffect(() => { if (subscribeToSite.isError) { subscribeToSite.reset() } }, [subscribeToSite]) useEffect(() => { if (subscribeToSite.isSuccess) { subscribeToSite.reset() toast.success( {t.rich("Successfully followed", { link: (chunks) => ( {chunks} ), })} , { duration: 5000, }, ) } }, [subscribeToSite, t]) useEffect(() => { if (unsubscribeFromSite.isLoading || subscribeToSite.isLoading) { loadingStatusChange?.(true) } else { loadingStatusChange?.(false) } }, [ unsubscribeFromSite.isLoading, subscribeToSite.isLoading, loadingStatusChange, ]) const isLoading = subscription.data ? unsubscribeFromSite.isLoading || subscribeToSite.isLoading : unsubscribeFromSite.isLoading || subscribeToSite.isLoading || subscription.isLoading return ( ) }