import { useLocation, useSubmit, useNavigation } from "react-router"; import clsx from "clsx"; import { useTranslation } from "react-i18next"; import ApiKeyBadge from "~/components/core/users/ApiKeyBadge"; import UserAvatarBadge from "~/components/core/users/UserAvatarBadge"; import UserBadge from "~/components/core/users/UserBadge"; import ChatAltIcon from "~/components/ui/icons/ChatAltIcon"; import ThumbsUpEmptyIcon from "~/components/ui/icons/ThumbsUpEmptyIcon"; import ThumbsUpFilledIcon from "~/components/ui/icons/ThumbsUpFilledIcon"; import TrashEmptyIcon from "~/components/ui/icons/TrashEmptyIcon"; import { useAppOrAdminData } from "~/utils/data/useAppOrAdminData"; import { LogWithDetails } from "~/utils/db/logs.db.server"; import { appendCSRFToken } from "~/utils/csrf"; import { renderSanitizedMarkdown } from "~/utils/html-sanitizer"; import { useLocaleFormatters } from "~/locale/format"; interface Props { item: LogWithDetails; } export default function RowLogComment({ item }: Props) { const { t } = useTranslation(); const formatters = useLocaleFormatters(); const submit = useSubmit(); const { user } = useAppOrAdminData(); const navigation = useNavigation(); const location = useLocation(); const isAdding = navigation.state === "submitting" && navigation.formData?.get("action") === "comment-reaction"; const isDeleting = navigation.state === "submitting" && navigation.formData?.get("action") === "comment-delete"; function onReacted(reaction: string) { const form = new FormData(); appendCSRFToken(form); form.set("action", "comment-reaction"); form.set("comment-id", item.comment?.id ?? ""); form.set("reaction", reaction); submit(form, { method: "post", action: location.pathname + location.search, }); } function onDeleted() { const form = new FormData(); appendCSRFToken(form); form.set("action", "comment-delete"); form.set("comment-id", item.comment?.id ?? ""); submit(form, { method: "post", action: location.pathname + location.search, }); } function getReactions(reaction: string) { return item.comment?.reactions.filter((f) => f.reaction === reaction) ?? []; } function hasMyReaction(reaction: string) { return item.comment?.reactions.find((f) => f.createdByUserId === user?.id && f.reaction === reaction); } return ( <> {item.comment && ( <>
{item.user && } {item.apiKey && }
{item.comment.isDeleted ? (

{t("shared.commentDeleted")}

) : (
)}
{!item.comment.isDeleted && item.comment.createdByUserId === user?.id && ( )}
)} ); }