"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 (
)
}