zkt24/z1/frontend/pages/post/[pid].tsx

56 lines
2.6 KiB
TypeScript
Raw Normal View History

2024-04-10 09:23:23 +00:00
import { useState, useEffect } from 'react';
import { useRouter } from 'next/router';
import Dashboard from '../../components/ui';
import CommentBox from '../../components/comment';
export default function Profile() {
const router = useRouter();
let pid = router.query.pid as string;
let [post, setPost] = useState({text: ""});
let [comments, setComments] = useState([]);
useEffect(() => {
if (!router.isReady) return;
let token = localStorage.getItem("Token");
let ps = async () => {
pid = router.query.pid as string;
setPost(await fetch(`http://127.0.0.1:3000/posts/${pid}`, { headers: { "Authorization": `Bearer ${token}` }, mode: "cors" }).then(r => r.json()));
setComments(await fetch(`http://127.0.0.1:3000/comments/${pid}`, { headers: { "Authorization": `Bearer ${token}` }, mode: "cors" }).then(r => r.json()));
}
ps().catch(console.error);
}, [router.isReady]);
let refreshComments = () => {
let token = localStorage.getItem("Token");
let ps = async () => {
setComments(await fetch(`http://127.0.0.1:3000/comments/${pid}`, { headers: { "Authorization": `Bearer ${token}` }, mode: "cors" }).then(r => r.json()));
}
ps().catch(console.error);
}
let newComment = async () => {
let token = localStorage.getItem("Token");
let y = document.getElementById("commentContent") as HTMLInputElement;
await fetch("http://127.0.0.1:3000/comment", { method: "POST", headers: { "Authorization": `Bearer ${token}`, "Content-Type": "application/json" }, mode: "cors", body: JSON.stringify({ "post_id": parseInt(pid), "content": y.value }) });
y.value = "";
refreshComments();
}
return (
<div>
<Dashboard />
<main className='flex flex-col place-items-center space-y-3'>
<h1 className='text-2xl text-white'>{post.text}</h1>
<textarea id="commentContent" className="textarea textarea-secondary text-xl" placeholder="New comment..."></textarea>
<button className="btn btn-outline btn-secondary w-20" onClick={newComment}>Comment</button>
<div className="divider"></div>
<div className='pt-10'>
{comments["Array"] != undefined ? comments["Array"].map(comment => {
return (
<CommentBox content={comment["Text"]} user={comment["Commenter"]} id={comment["PostId"]} />
);
}) : ""}
</div>
</main>
</div>
)
}