import React from 'react'; import PropTypes from 'prop-types'; import Helmet from 'react-helmet'; import differenceInMinutes from 'date-fns/difference_in_minutes'; import differenceInHours from 'date-fns/difference_in_hours'; import differenceInDays from 'date-fns/difference_in_calendar_days'; import format from 'date-fns/format'; const propTypes = { article: PropTypes.object }; const styles = ` .meta-wrapper { padding-top: 10px; } .meta-wrapper span, .meta-wrapper a { font-size: 16px; } .meta-item { margin-right: 20px; } `; function pluralise(singular, count) { return `${singular}${count === 1 ? '' : 's'}`; } function getTimeString(pubDate) { const now = new Date(Date.now()); const minuteDiff = differenceInMinutes(now, pubDate); console.log(typeof minuteDiff); if (minuteDiff < 60) { return `${minuteDiff} ${pluralise('minute', minuteDiff)} ago`; } const hourDiff = differenceInHours(now, pubDate); if (hourDiff < 24) { return `${hourDiff} ${pluralise('hour', hourDiff)} ago`; } const dayDiff = differenceInDays(now, pubDate); if (dayDiff < 8) { return `${dayDiff} ${pluralise('day', dayDiff)} ago`; } if (dayDiff < 365) { return format(pubDate, 'MMM D'); } return format(pubDate, 'MMM D YYYY'); } function ArticleMeta({ article: { viewCount, author, meta, firstPublishedDate } }) { return (
By {author.name} {getTimeString(firstPublishedDate)} {`${meta.readTime} minute read`} {viewCount >= 100 ? ( {`${viewCount} views`} ) : null}
); } ArticleMeta.displayName = 'ArticleMeta'; ArticleMeta.propTypes = propTypes; export default ArticleMeta;