feat: interact to redirect to new site page for unregistered address

This commit is contained in:
DIYgod 2022-08-07 16:52:22 +01:00
parent 9eab1beadc
commit b12f22d67d
No known key found for this signature in database
GPG Key ID: D159328F47A80DCA
3 changed files with 52 additions and 3 deletions

View File

@ -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({
<span className="align-middle">
&copy;{" "}
<UniLink
href={`https://blog.${OUR_DOMAIN}`}
href={getSiteLink({
subdomain: "blog",
})}
className="hover:text-indigo-500"
>
{APP_NAME}

View File

@ -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
? {

View File

@ -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<boolean>(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