// post.tsx // Copyright (C) 2020 Dwayne Harris // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . import React, { FC } from 'react' import { useDispatch } from 'react-redux' import { Link } from 'react-router-dom' import moment from 'moment' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faClock, faReplyAll, faExclamationCircle } from '@fortawesome/free-solid-svg-icons' import { useTheme } from '../hooks' import { setEntities } from '../actions/entities' import { normalize } from '../utils/normalization' import { Post, EntityType } from '../types' import User from '../components/user' interface Props { post: Post } const PostComponent: FC = ({ post }) => { const theme = useTheme() const dispatch = useDispatch() const showCover = !!post.cover && !post.revealed const handleShowPost = () => { const posts = normalize([{ ...post, revealed: true, }], EntityType.Post) dispatch(setEntities(posts.entities)) } return (
{showCover &&
handleShowPost()}>{post.cover}
} {!showCover &&
{post.text &&

{post.text}

} {post.attachments && post.attachments.length > 0 &&
{post.attachments.map(attachment => (
{attachment.text &&

{attachment.text}

}
))}
}
}
{!!post.cover && post.cover.length > 0 &&
}
{post.replies}
{moment(post.created).format('MMMM Do, h:mm A')}
) } export default PostComponent