import { Box, CircularProgress, Flex, HStack, StackDivider, StackProps, Text, TextProps } from "@chakra-ui/react";
import { boolean } from "boolean";
import { useState } from "react";
import { MessageTableEntry } from "src/components/Messages/MessageTableEntry";
import fetcher from "src/lib/fetcher";
import useSWR from "swr";
const MessageHeaderProps: TextProps = {
align: "center",
fontSize: "xl",
py: "2",
};
const MessageStackProps: StackProps = {
spacing: "2",
alignItems: "start",
justifyContent: "center",
divider: ,
};
interface MessageWithChildrenProps {
id: string;
depth?: number;
maxDepth?: number;
isOnlyChild?: boolean;
}
export function MessageWithChildren(props: MessageWithChildrenProps) {
const { id, depth, maxDepth, isOnlyChild = true } = 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: () => {
setMessage(null);
},
});
const { isLoading: isLoadingChildren } = useSWR(id ? `/api/messages/${id}/children` : null, fetcher, {
onSuccess: (data) => {
setChildren(data);
},
onError: () => {
setChildren(null);
},
});
const renderRecursive = maxDepth && ((depth && depth < maxDepth) || !depth);
const isFirst = depth === 0 || !depth;
const isFirstOrOnly = isFirst || boolean(isOnlyChild);
if (isLoading || isLoadingChildren) {
return ;
}
return (
<>
{message && (
<>
{isFirst ? "Message" : depth === 1 ? "Children" : "Ancestor"}
>
)}
{children && Array.isArray(children) && children.length > 0 ? (
renderRecursive ? (
{children.map((item, idx) => (
))}
) : (
<>
{isFirstOrOnly ? "Children" : "Ancestor"}
{children.map((item, idx) => (
))}
>
)
) : (
<>>
)}
>
);
}