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 };