feat: add user owned comment editing and deleting

This commit is contained in:
Kentai Radiquum 2024-08-10 18:28:54 +05:00
parent 6f4e6e2fa6
commit 5b3fc6de4d
Signed by: Radiquum
GPG key ID: 858E8EE696525EED
3 changed files with 144 additions and 7 deletions

View file

@ -0,0 +1,101 @@
import { Button, Modal, ToggleSwitch, Label, Textarea } from "flowbite-react";
import { useState } from "react";
import { ENDPOINTS } from "#/api/config";
export const CommentsEditModal = (props: {
isOpen: boolean;
setIsOpen: any;
parentComment?: any;
token: string;
setShouldRender?: any;
setCommentSend?: any;
}) => {
const [message, setMessage] = useState(props.parentComment.message);
const [isSpoiler, setIsSpoiler] = useState(props.parentComment.isSpoiler);
const [isSending, setIsSending] = useState(false);
function _sendComment(e) {
e.preventDefault();
const re = /\n/gi;
const data = {
message: message.replace(re, "\r\n").trim(),
spoiler: isSpoiler,
};
async function _send() {
const res = await fetch(
`${ENDPOINTS.release.info}/comment/edit/${props.parentComment.id}?token=${props.token}`,
{
method: "POST",
body: JSON.stringify(data),
}
);
if (props.setShouldRender && props.setCommentSend) {
props.setShouldRender(true);
props.setCommentSend(true);
}
props.setIsOpen(false);
setIsSending(false);
}
if (props.token && message.trim() != "") {
setIsSending(true);
_send();
}
}
return (
<Modal
dismissible
show={props.isOpen}
onClose={() => props.setIsOpen(false)}
>
<Modal.Header>
<p className="text-lg font-bold text-gray-900 lg:text-2xl dark:text-white">
Редактировать комментарий
</p>
</Modal.Header>
<Modal.Body>
<form className="flex flex-col gap-4" onSubmit={(e) => _sendComment(e)}>
<div>
<div className="block mb-2 sr-only">
<Label htmlFor="comment" value="Редактировать ваш комментарий." />
</div>
<Textarea
id="comment"
value={message}
onChange={(e) => setMessage(e.target.value)}
placeholder="Редактировать комментарий..."
required={true}
rows={4}
/>
</div>
<div className="flex flex-wrap items-center justify-between gap-2">
<div className="flex items-center gap-2">
<ToggleSwitch
color="blue"
theme={{
toggle: {
checked: {
color: {
blue: "border-blue-700 bg-blue-700",
},
},
},
}}
checked={isSpoiler}
onChange={() => setIsSpoiler(!isSpoiler)}
label="Спойлер"
/>
</div>
<Button type="submit" color={"blue"} disabled={isSending}>
Изменить
</Button>
</div>
</form>
</Modal.Body>
</Modal>
);
};