From 1d46b3132ae2b73590a4d2c5b0a0c44c3d984204 Mon Sep 17 00:00:00 2001 From: jojopirker Date: Thu, 5 Jan 2023 18:54:38 +0100 Subject: [PATCH] hacky solution for a bug https://dev.to/wh1zk1d/swr-dynamic-routes-in-next-js-3cbl --- website/src/pages/messages/[id]/index.tsx | 64 ++++++++++++++--------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/website/src/pages/messages/[id]/index.tsx b/website/src/pages/messages/[id]/index.tsx index 8816fcba..0b712801 100644 --- a/website/src/pages/messages/[id]/index.tsx +++ b/website/src/pages/messages/[id]/index.tsx @@ -1,4 +1,4 @@ -import { Box, Container, Flex, HStack, useColorModeValue } from "@chakra-ui/react"; +import { Box, Container, Text, HStack, useColorModeValue } from "@chakra-ui/react"; import Head from "next/head"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; @@ -13,31 +13,36 @@ const MessageDetail = () => { const bg = useColorModeValue("white", colors.dark.bg); const router = useRouter() const { id } = router.query + + /** State arrays of messages */ const [message, setMessage] = useState(null); - const [parent, setParent]= useState(null); + const [parent, setParent] = useState(null); const [children, setChildren] = useState(null); - const { isLoading } = useSWRImmutable(`/api/messages/${id}`, fetcher, { + /** Fetching functions */ + const { isLoading } = useSWRImmutable(id ? `/api/messages/${id}` : null, fetcher, { onSuccess: (data) => { setMessage(data); }, + onError: (err, key, config) => { + setMessage(null); + }, }); - - const { isLoading: isLoadingChildren } = useSWRImmutable(`/api/messages/${id}/children`, fetcher, { + const { isLoading: isLoadingChildren } = useSWRImmutable(id ? `/api/messages/${id}/children` : null, fetcher, { onSuccess: (data) => { setChildren(data); }, + onError: (err, key, config) => { + setChildren(null); + }, }); - - const { isLoading: isLoadingParent } = useSWRImmutable(`/api/messages/${id}/parent`, fetcher, { - + const { isLoading: isLoadingParent } = useSWRImmutable(id ? `/api/messages/${id}/parent` : null, fetcher, { onSuccess: (data) => { - console.log(data); setParent(data); }, onError: (err, key, config) => { - console.log(parent); - } + setParent(null); + }, }); if (isLoading || isLoadingChildren || isLoadingParent) { @@ -52,27 +57,38 @@ const MessageDetail = () => { />
- - {parent && - + + {parent && + <> + Parent + + } {message && - + <> + Message + + } - - {children && Array.isArray(children) && - - {children.map((item, idx) => - - - + + {children && Array.isArray(children) && + <> + Children + + {children.map((item, idx) => + + + + + )} - - } + + + }
}