import { unixToDate } from "#/api/utils"; import { useEffect, useState } from "react"; import { ENDPOINTS } from "#/api/config"; import { Button } from "flowbite-react"; import Link from "next/link"; export const CommentsComment = (props: { profile: { login: string; avatar: string; id: number }; comment: { id: number; timestamp: number; message: string; reply_count: number; likes_count: number; vote: number; }; isSubComment?: boolean; token: string | null; }) => { const [replies, setReplies] = useState([]); const [likes, setLikes] = useState(props.comment.likes_count); const [vote, setVote] = useState(props.comment.vote); useEffect(() => { async function _fetchReplies() { let url = `${ENDPOINTS.release.info}/comment/replies/${props.comment.id}/0?sort=2`; if (props.token) { url += `&token=${props.token}`; } await fetch(url) .then((res) => res.json()) .then((data) => { setReplies(data.content); }); } if (!props.isSubComment && props.comment.reply_count > 0) { _fetchReplies(); } }, []); async function _sendVote(action: number) { if (props.token) { let url = `${ENDPOINTS.release.info}/comment/vote/${props.comment.id}/${action}?token=${props.token}`; fetch(url); } } // TODO: make it readable function _updateVote(action: string) { if (action === "like" && vote == 0) { setVote(2); setLikes(likes + 1); _sendVote(2); } else if (action === "dislike" && vote == 0) { setVote(1); setLikes(likes - 1); _sendVote(1); } else if (action === "like" && vote == 1) { setVote(2); setLikes(likes + 2); _sendVote(2); } else if (action === "dislike" && vote == 2) { setVote(1); setLikes(likes - 2); _sendVote(1); } else { _sendVote(vote); setVote(0); if (action === "dislike" && vote == 1) { setLikes(likes + 1); } else if (action === "like" && vote == 2) { setLikes(likes - 1); } } } return (

{props.comment.message}

{props.token && ( )}

0 ? "text-green-500 dark:text-green-400" : likes < 0 ? "text-red-500 dark:text-red-400" : "text-gray-500 dark:text-gray-400" }`} > {likes}

{props.token && ( )}
{replies.length > 0 && replies.map((comment: any) => ( ))}
); };