diff --git a/src/components/main/MainLayout.tsx b/src/components/main/MainLayout.tsx index 77ca0df7..eae01b84 100644 --- a/src/components/main/MainLayout.tsx +++ b/src/components/main/MainLayout.tsx @@ -10,6 +10,7 @@ import { useStore } from "~/lib/store" import { SEOHead } from "../common/SEOHead" import { UniLink } from "../ui/UniLink" import { ConnectButton } from "../common/ConnectButton" +import { getSiteLink } from "~/lib/helpers" export function MainLayout({ children, @@ -40,7 +41,9 @@ export function MainLayout({ ©{" "} {APP_NAME} diff --git a/src/components/site/PostFooter.tsx b/src/components/site/PostFooter.tsx index 12ec8d95..146699ec 100644 --- a/src/components/site/PostFooter.tsx +++ b/src/components/site/PostFooter.tsx @@ -10,10 +10,13 @@ import { useGetMints, useCheckMint, } from "~/queries/page" +import { useGetUserSites } from "~/queries/site" import { useAccount } from "wagmi" import { useConnectModal } from "@rainbow-me/rainbowkit" import { useState, useEffect } from "react" import { Button } from "../ui/Button" +import { useRouter } from "next/router" +import { SITE_URL } from "~/lib/env" export const PostFooter: React.FC<{ page?: Note @@ -26,11 +29,15 @@ export const PostFooter: React.FC<{ const { openConnectModal } = useConnectModal() const [likeProgress, setLikeProgress] = useState(false) const [mintProgress, setMintProgress] = useState(false) + const userSite = useGetUserSites(address) + const router = useRouter() const like = async () => { if (!address) { setLikeProgress(true) openConnectModal?.() + } else if (!userSite.data) { + router.push(`${SITE_URL}/dashboard/new-site`) } else if (page?.id) { if (isLike.data?.count) { // unlikePage.mutate({ @@ -51,6 +58,8 @@ export const PostFooter: React.FC<{ if (!address) { setMintProgress(true) openConnectModal?.() + } else if (!userSite.data) { + router.push(`${SITE_URL}/dashboard/new-site`) } else if (page?.id) { if (isMint.data?.count) { // TODO @@ -81,6 +90,9 @@ export const PostFooter: React.FC<{ useEffect(() => { if (mintProgress && address && isMint.isSuccess && page?.id) { + if (!userSite.data) { + router.push(`${SITE_URL}/dashboard/new-site`) + } if (!isMint.data.count) { mintPage.mutate({ address, @@ -90,6 +102,8 @@ export const PostFooter: React.FC<{ setMintProgress(false) } }, [ + userSite.data, + router, mintProgress, address, isMint.isSuccess, @@ -100,6 +114,9 @@ export const PostFooter: React.FC<{ useEffect(() => { if (likeProgress && address && isLike.isSuccess && page?.id) { + if (!userSite.data) { + router.push(`${SITE_URL}/dashboard/new-site`) + } if (!isLike.data.count) { likePage.mutate({ address, @@ -109,6 +126,8 @@ export const PostFooter: React.FC<{ setLikeProgress(false) } }, [ + userSite.data, + router, likeProgress, address, isLike.isSuccess, @@ -124,7 +143,12 @@ export const PostFooter: React.FC<{ className="flex items-center mr-10" isAutoWidth={true} onClick={like} - isLoading={likePage.isLoading || unlikePage.isLoading || likeProgress} + isLoading={ + userSite.isLoading || + likePage.isLoading || + unlikePage.isLoading || + likeProgress + } style={ isLike.isSuccess && isLike.data.count ? { diff --git a/src/components/site/SiteHeader.tsx b/src/components/site/SiteHeader.tsx index 82e90cb6..be986c1e 100644 --- a/src/components/site/SiteHeader.tsx +++ b/src/components/site/SiteHeader.tsx @@ -2,7 +2,7 @@ import clsx from "clsx" import { useRouter } from "next/router" import { logout } from "~/lib/auth.client" import { IS_PROD } from "~/lib/constants" -import { OUR_DOMAIN } from "~/lib/env" +import { SITE_URL } from "~/lib/env" import { useStore } from "~/lib/store" import { Viewer } from "~/lib/types" import { getUserContentsUrl } from "~/lib/user-contents" @@ -21,6 +21,7 @@ import { useGetSubscription, useSubscribeToSite, useUnsubscribeFromSite, + useGetUserSites, } from "~/queries/site" import { useConnectModal } from "@rainbow-me/rainbowkit" import { Menu } from "@headlessui/react" @@ -62,11 +63,15 @@ export const SiteHeader: React.FC<{ const unsubscribeFromSite = useUnsubscribeFromSite() const { openConnectModal } = useConnectModal() const [followProgress, setFollowProgress] = useState(false) + const userSite = useGetUserSites(address) + const router = useRouter() const handleClickSubscribe = async () => { if (!address) { setFollowProgress(true) openConnectModal?.() + } else if (!userSite.data) { + router.push(`${SITE_URL}/dashboard/new-site`) } else if (site?.username) { if (subscription.data) { unsubscribeFromSite.mutate({ @@ -89,6 +94,9 @@ export const SiteHeader: React.FC<{ useEffect(() => { if (followProgress && address && subscription.isSuccess && site?.username) { + if (!userSite.data) { + router.push(`${SITE_URL}/dashboard/new-site`) + } if (!subscription.data) { subscribeToSite.mutate({ userId: address, @@ -98,6 +106,8 @@ export const SiteHeader: React.FC<{ setFollowProgress(false) } }, [ + userSite.data, + router, followProgress, address, subscription.isSuccess, @@ -106,6 +116,17 @@ export const SiteHeader: React.FC<{ subscribeToSite, ]) + useEffect(() => { + if (subscribeToSite.isError || subscribeToSite.data?.code) { + toast.error( + "Failed to follow: " + + (subscribeToSite.data?.message || + (subscribeToSite.error as any)?.message), + ) + subscribeToSite.reset() + } + }, [subscribeToSite.isError, subscribeToSite.data?.code]) + const leftLinks: HeaderLinkType[] = [ { label: "Home", url: "/" }, ...(site?.navigation || []), @@ -176,6 +197,7 @@ export const SiteHeader: React.FC<{ onClick={handleClickSubscribe} className="space-x-1 align-middle" isLoading={ + userSite.isLoading || unsubscribeFromSite.isLoading || subscribeToSite.isLoading || subscription.isLoading