import { Button } from '@components/Buttons'; import Spinner from '@components/Spinner/Spinner'; import { Comment as CommentData } from '@ts/types/comments'; import { settings } from '@utils/config'; import { getFormattedDate } from '@utils/helpers/format'; import dynamic from 'next/dynamic'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; import Script from 'next/script'; import { useState } from 'react'; import { useIntl } from 'react-intl'; import { Comment as CommentSchema, WithContext } from 'schema-dts'; import styles from './Comment.module.scss'; const DynamicCommentForm = dynamic( () => import('@components/CommentForm/CommentForm'), { loading: () => , } ); 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 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 ( <>