diff --git a/packages/fakeyou.com/src/v2/view/_common/comments/CommentList.tsx b/packages/fakeyou.com/src/v2/view/_common/comments/CommentList.tsx index 9d05e2f772..e2667b4cad 100644 --- a/packages/fakeyou.com/src/v2/view/_common/comments/CommentList.tsx +++ b/packages/fakeyou.com/src/v2/view/_common/comments/CommentList.tsx @@ -1,15 +1,10 @@ import React from "react"; import { formatDistance } from "date-fns"; -import { - DeleteComment, - DeleteCommentIsOk, -} from "@storyteller/components/src/api/comments/DeleteComment"; import { Comment, } from "@storyteller/components/src/api/comments/ListComments"; import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faTrash } from "@fortawesome/pro-light-svg-icons"; +import { SafeDeleteCommentButton } from "./SafeDeleteCommentButton"; const Fade = require("react-reveal/Fade"); @@ -29,13 +24,6 @@ interface Props { */ function CommentList(props: Props) { - const handleDeleteComment = async (commentToken: string) => { - let response = await DeleteComment(commentToken); - if (DeleteCommentIsOk(response)) { - props.loadComments(); // Refresh comments - } - }; - // NB: It's more convenient to show recent data first {.reverse()} var reversedComments = props.comments.slice(); @@ -61,11 +49,10 @@ function CommentList(props: Props) { if (canDelete) { maybeDeleteButton = ( <> - + ) } diff --git a/packages/fakeyou.com/src/v2/view/_common/comments/SafeDeleteCommentButton.tsx b/packages/fakeyou.com/src/v2/view/_common/comments/SafeDeleteCommentButton.tsx new file mode 100644 index 0000000000..f90e0ff3b4 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/_common/comments/SafeDeleteCommentButton.tsx @@ -0,0 +1,67 @@ +import React, { useState } from "react"; +import { DeleteComment, DeleteCommentIsOk } from "@storyteller/components/src/api/comments/DeleteComment"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faTrash, faTrashRestore } from "@fortawesome/free-solid-svg-icons"; +import { faTrashCheck } from "@fortawesome/pro-solid-svg-icons"; + +interface Props { + commentToken: string; + loadComments: () => void; +} + +/** + * This is part of a reusable component for putting comments on several + * different page types. + * + * See the documentation on the parent + */ +function SafeDeleteCommentButton(props: Props) { + const [readyToDelete, setReadyToDelete] = useState(false); + + const handleDeleteComment = async (commentToken: string) => { + let response = await DeleteComment(commentToken); + if (DeleteCommentIsOk(response)) { + props.loadComments(); // Refresh comments + } + }; + + let deleteButton = <>; + + // We ask the user to confirm the deletion. + // This makes it slightly safer and prevents accidental mis-clicks. + if (!readyToDelete) { + deleteButton = ( + <> + + + ) + } else { + deleteButton = ( + <> + + + + + ) + } + + return ( + <> + {deleteButton} + + ) +} + +export { SafeDeleteCommentButton };