import {User} from '@common/auth/user'; import {Comment} from '@common/comments/comment'; import React, {Fragment, useContext, useState} from 'react'; import {Checkbox} from '@common/ui/forms/toggle/checkbox'; import {UserAvatar} from '@common/ui/images/user-avatar'; import {FormattedRelativeTime} from '@common/i18n/formatted-relative-time'; import {queryClient} from '@common/http/query-client'; import {DeleteCommentsButton} from '@common/comments/comments-datatable-page/delete-comments-button'; import {Button} from '@common/ui/buttons/button'; import {Trans} from '@common/i18n/trans'; import {useUpdateComment} from '@common/comments/requests/use-update-comment'; import {TextField} from '@common/ui/forms/input-field/text-field/text-field'; import {SiteConfigContext} from '@common/core/settings/site-config-context'; import {Link} from 'react-router-dom'; import {LinkStyle} from '@common/ui/buttons/external-link'; import clsx from 'clsx'; import {RestoreCommentsButton} from '@common/comments/comments-datatable-page/restore-comments-button'; import {NormalizedModel} from '@common/datatable/filters/normalized-model'; interface Props { comment: Comment; isSelected: boolean; onToggle: () => void; } export function CommentDatatableItem({comment, isSelected, onToggle}: Props) { const [isEditing, setIsEditing] = useState(false); return (
{comment.commentable && ( )}
{isEditing ? ( { setIsEditing(false); if (isSaved) { queryClient.invalidateQueries({queryKey: ['comment']}); } }} /> ) : (
{comment.content}
{comment.deleted ? ( ) : ( )}
)}
); } interface CommentableHeaderProps { isSelected: boolean; onToggle: Props['onToggle']; commentable: NormalizedModel; } function CommentableHeader({ isSelected, onToggle, commentable, }: CommentableHeaderProps) { return (
onToggle()} />
{commentable.image && ( )}
{commentable.name}
({commentable.model_type})
); } interface CommentHeaderProps { comment: Comment; } function CommentHeader({comment}: CommentHeaderProps) { return (
{comment.user && ( )}
{comment.user && (
{}
)}
); } interface EditCommentFormProps { comment: Comment; onClose: (saved: boolean) => void; } function EditCommentForm({comment, onClose}: EditCommentFormProps) { const [content, setContent] = useState(comment.content); const updateComment = useUpdateComment(); return (
{ e.preventDefault(); updateComment.mutate( {commentId: comment.id, content}, {onSuccess: () => onClose(true)}, ); }} > setContent(e.target.value)} /> ); } interface UserDisplayNameProps { user: User; show: 'display_name' | 'email'; } function UserDisplayName({user, show}: UserDisplayNameProps) { const {auth} = useContext(SiteConfigContext); if (auth.getUserProfileLink) { return ( {user[show]} ); } return
{user[show]}
; }