diff --git a/website/src/components/Messages/MessageWithChildren.tsx b/website/src/components/Messages/MessageWithChildren.tsx
new file mode 100644
index 00000000..f59017c7
--- /dev/null
+++ b/website/src/components/Messages/MessageWithChildren.tsx
@@ -0,0 +1,85 @@
+import { Box, CircularProgress, Flex, HStack, Text } from "@chakra-ui/react";
+import { useState } from "react";
+import useSWR from "swr";
+
+import fetcher from "src/lib/fetcher";
+import { MessageTableEntry } from "./MessageTableEntry";
+
+interface MessageWithChildrenProps {
+ id: string;
+ depth?: number;
+ maxDepth?: number;
+}
+
+export function MessageWithChildren(props: MessageWithChildrenProps) {
+ const { id, depth, maxDepth } = props;
+
+ const [message, setMessage] = useState(null);
+ const [children, setChildren] = useState(null);
+
+ const { isLoading } = useSWR(id ? `/api/messages/${id}` : null, fetcher, {
+ onSuccess: (data) => {
+ setMessage(data);
+ },
+ onError: (err, key, config) => {
+ setMessage(null);
+ },
+ });
+ const { isLoading: isLoadingChildren } = useSWR(id ? `/api/messages/${id}/children` : null, fetcher, {
+ onSuccess: (data) => {
+ setChildren(data);
+ },
+ onError: (err, key, config) => {
+ setChildren(null);
+ },
+ });
+
+ const renderRecursive = maxDepth && ((depth && (depth < maxDepth)) || !depth);
+
+ if (isLoading || isLoadingChildren) {
+ return ()
+ }
+
+ return (
+ <>
+ {message && (<>
+
+ {(depth === 0 || !depth) ? "Message" : depth === 1 ? "Children" : "Ancestor"}
+
+
+
+
+
+
+
+
+ >
+ )}
+ {children && Array.isArray(children) && children.length > 0 ?
+ renderRecursive ?
+
+ {children.map((item, idx) => (
+
+
+ ))}
+ :
+ (
+ <>
+
+ {(depth === 0 || !depth) ? "Children" : "Ancestor"}
+
+
+ {children.map((item, idx) => (
+
+
+
+
+
+ ))}
+
+ >
+ ) : <>>}
+ >);
+
+}
+
diff --git a/website/src/pages/messages/[id]/index.tsx b/website/src/pages/messages/[id]/index.tsx
index f1512d25..d455f256 100644
--- a/website/src/pages/messages/[id]/index.tsx
+++ b/website/src/pages/messages/[id]/index.tsx
@@ -1,42 +1,22 @@
-import { Box, Container, Text, HStack, useColorModeValue } from "@chakra-ui/react";
+import { Box, Container, Text, useColorModeValue } from "@chakra-ui/react";
import Head from "next/head";
import { useRouter } from "next/router";
-import { useEffect, useState } from "react";
-import useSWRImmutable from "swr/immutable";
+import { useState } from "react";
+import useSWR from "swr";
import fetcher from "src/lib/fetcher";
import { MessageTableEntry } from "src/components/Messages/MessageTableEntry";
-import { colors } from "styles/Theme/colors";
import { LoadingScreen } from "src/components/Loading/LoadingScreen";
+import { MessageWithChildren } from "src/components/Messages/MessageWithChildren";
const MessageDetail = () => {
- const bg = useColorModeValue("white", colors.dark.bg);
+ const mainBg = useColorModeValue("bg-slate-300", "bg-slate-900");
const router = useRouter();
const { id } = router.query;
- /** State arrays of messages */
- const [message, setMessage] = useState(null);
const [parent, setParent] = useState(null);
- const [children, setChildren] = useState(null);
- /** 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(id ? `/api/messages/${id}/children` : null, fetcher, {
- onSuccess: (data) => {
- setChildren(data);
- },
- onError: (err, key, config) => {
- setChildren(null);
- },
- });
- const { isLoading: isLoadingParent } = useSWRImmutable(id ? `/api/messages/${id}/parent` : null, fetcher, {
+ const { isLoading: isLoadingParent } = useSWR(id ? `/api/messages/${id}/parent` : null, fetcher, {
onSuccess: (data) => {
setParent(data);
},
@@ -45,7 +25,7 @@ const MessageDetail = () => {
},
});
- if (isLoading || isLoadingChildren || isLoadingParent) {
+ if (isLoadingParent) {
return ;
}
return (
@@ -57,45 +37,22 @@ const MessageDetail = () => {
content="Conversational AI for everyone. An open source project to create a chat enabled GPT LLM run by LAION and contributors around the world."
/>
-
-
+
+
{parent && (
<>
-
+
Parent
-
+
>
)}
- {message && (
- <>
-
- Message
-
-
-
-
- >
- )}
- {children && Array.isArray(children) && children.length > 0 && (
- <>
-
- Children
-
-
- {children.map((item, idx) => (
-
-
-
-
-
- ))}
-
- >
- )}
+
+
+
>
);