import React, { useState } from "react" import { Avatar, Divider, Flex, Heading, HStack, IconButton, Text, VStack, chakra, Menu, MenuButton, MenuList, MenuItem, Box } from "@chakra-ui/react" import { Comment } from "src/types/comments" import Card from "components/card" import { getUserName } from "utils/user" import moment from 'moment' import { MarkdownRender } from "components/markdown-editor/render" import HeartLike from "components/posts/heart-like" import { FaRegEdit, FaRegFlag, FaRegTrashAlt, FaReply, FaTrash } from "react-icons/fa" import { User } from "src/types/session" import CommentEditor from "./editor" import { requestApi } from "utils/axios/request" import Link from "next/link" interface Props { user: User comment: Comment parent: Comment onChange: any } export const Reply = (props: Props) => { const { comment, user,onChange,parent} = props const [editorVisible, setEditorVisible] = useState(false) const [replyVisible,setReplyVisible] = useState(false) const [reply,setReply] = useState('') const submitReply = async (md) => { await requestApi.post('/story/comment',{targetID: parent.id, md: md}) setReplyVisible(false); onChange() } const changeReply = async (md) => { await requestApi.post('/story/comment',{...comment, md}) setEditorVisible(false) onChange() } const deleteReply = async id => { await requestApi.delete(`/comment/${id}`) onChange() } const likeReply = async (id) => { await requestApi.post(`/story/like/${id}`) onChange() } const replyToReply = () => { if (comment.creator.nickname === "") { setReply(`@${comment.creator.username}`) } else { setReply(`@[${comment.creator.nickname}](/${comment.creator.username})`) } setReplyVisible(!replyVisible) } return ( <>{ editorVisible ? (user && {setEditorVisible(false);changeReply(md)}} onCancel={() => setEditorVisible(false)} menu={false} />) : {getUserName(comment.creator)} {moment(comment.created).fromNow()} likeReply(comment.id)} /> {user && } onClick={replyToReply} fontSize="18px" />} } _hover={null} _active={null} /> {user && setEditorVisible(true)}>Edit} {user && deleteReply(comment.id)}>Delete} Report {replyVisible && {submitReply(md)}} onCancel={() => setReplyVisible(false)} menu={false}/> } } ) } export default Reply