"use client"; import { cn } from "@rallly/ui"; import { Badge } from "@rallly/ui/badge"; import { Button } from "@rallly/ui/button"; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from "@rallly/ui/card"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@rallly/ui/dropdown-menu"; import { Icon } from "@rallly/ui/icon"; import { Textarea } from "@rallly/ui/textarea"; import dayjs from "dayjs"; import { MessageSquareOffIcon, MoreHorizontalIcon, TrashIcon, } from "lucide-react"; import { useTranslation } from "next-i18next"; import * as React from "react"; import { Controller, useForm } from "react-hook-form"; import { useParticipants } from "@/components/participants-provider"; import { Trans } from "@/components/trans"; import { usePermissions } from "@/contexts/permissions"; import { usePoll } from "@/contexts/poll"; import { useRole } from "@/contexts/role"; import { usePostHog } from "@/utils/posthog"; import { trpc } from "@/utils/trpc/client"; import { requiredString } from "../../utils/form-validation"; import NameInput from "../name-input"; import TruncatedLinkify from "../poll/truncated-linkify"; import UserAvatar from "../poll/user-avatar"; import { useUser } from "../user-provider"; interface CommentForm { authorName: string; content: string; } function NewCommentForm({ onSubmit, onCancel, }: { onSubmit?: () => void; onCancel?: () => void; }) { const { t } = useTranslation(); const poll = usePoll(); const { user } = useUser(); const { participants } = useParticipants(); const authorName = React.useMemo(() => { if (user.isGuest) { const participant = participants.find((p) => p.userId === user.id); return participant?.name ?? ""; } else { return user.name; } }, [user, participants]); const pollId = poll.id; const posthog = usePostHog(); const queryClient = trpc.useUtils(); const addComment = trpc.polls.comments.add.useMutation({ onSuccess: () => { queryClient.polls.comments.invalidate(); posthog?.capture("created comment"); }, }); const session = useUser(); const { register, reset, control, handleSubmit, formState } = useForm({ defaultValues: { authorName, content: "", }, }); return (
{ await addComment.mutateAsync({ authorName, content, pollId }); reset({ authorName, content: "" }); onSubmit?.(); })} >