import { Button } from '@components/Buttons'; import CommentForm from '@components/CommentForm/CommentForm'; import { Comment as CommentData } from '@ts/types/comments'; import { settings } from '@utils/config'; import { getFormattedDate } from '@utils/helpers/format'; import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useRef, useState } from 'react'; import { useIntl } from 'react-intl'; import { Comment as CommentSchema, WithContext } from 'schema-dts'; import styles from './Comment.module.scss'; const Comment = ({ articleId, comment, isNested = false, }: { articleId: number; comment: CommentData; isNested?: boolean; }) => { const intl = useIntl(); const router = useRouter(); const locale = router.locale ? router.locale : settings.locales.defaultLocale; const [shouldOpenForm, setShouldOpenForm] = useState(false); const firstFieldRef = useRef(null); useEffect(() => { firstFieldRef.current && firstFieldRef.current.focus(); }); const getCommentAuthor = () => { return comment.author.url ? ( {comment.author.name} ) : ( {comment.author.name} ); }; const getLocaleDate = () => { const date = getFormattedDate(comment.date, locale); const time = new Date(comment.date) .toLocaleTimeString(locale, { hour: 'numeric', minute: 'numeric', }) .replace(':', 'h'); return intl.formatMessage( { defaultMessage: '{date} at {time}', description: 'Comment: publication date', }, { date, time, } ); }; const getApprovedComment = () => { return ( <>
{comment.author.gravatarUrl && (
{comment.author.name}
)} {getCommentAuthor()}
{intl.formatMessage({ defaultMessage: 'Published on:', description: 'Comment: publication date label', })}
{!isNested && (
)}
{shouldOpenForm && ( )} {comment.replies.length > 0 && (
    {comment.replies.map((reply) => { return ( ); })}
)} ); }; const getCommentStatus = () => { return (

{intl.formatMessage({ defaultMessage: 'This comment is awaiting moderation.', description: 'Comment: awaiting moderation message', })}

); }; const schemaJsonLd: WithContext = { '@context': 'https://schema.org', '@id': `${settings.url}/#comment-${comment.commentId}`, '@type': 'Comment', parentItem: isNested ? { '@id': `${settings.url}/#comment-${comment.parentDatabaseId}` } : undefined, about: { '@type': 'Article', '@id': `${settings.url}/#article` }, author: { '@type': 'Person', name: comment.author.name, image: comment.author.gravatarUrl, url: comment.author.url, }, creator: { '@type': 'Person', name: comment.author.name, image: comment.author.gravatarUrl, url: comment.author.url, }, dateCreated: comment.date, datePublished: comment.date, text: comment.content, }; return ( <>
  • {comment.approved ? getApprovedComment() : getCommentStatus()}
  • ); }; export default Comment;