import React, {FC, useState} from 'react'; // Redux import {compose} from '@reduxjs/toolkit'; import {connect, useSelector} from 'react-redux'; import {firestoreConnect, WithFirestoreProps} from 'react-redux-firebase'; import {RootState} from '../../store'; import {selectProfile} from '../../store/firebase'; // Style import Header from '../../components/Header'; // Typing import Post from '../../models/Post'; import Collections from '../../constants/collections'; import PostsForm from './Form'; import PostsItem from './Item'; interface IProps extends WithFirestoreProps { posts: Post[]; } /** * A Dev's Posts list */ const Posts: FC = ({posts, firestore, firebase}) => { const [text, setText] = useState(''); const {avatarUrl, displayName} = useSelector(selectProfile); const id = firebase.auth().currentUser?.uid; const newPost = { userID: id, name: displayName, text, avatarUrl, likes: [] as string[], comments: [], }; const handleChange = (e: React.ChangeEvent) => setText(e.target.value); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); firestore .add(Collections.POSTS, newPost) .then(() => setText('')) .catch(err => console.error(err)); }; // const removeLike = (e: React.MouseEvent) => // new Error('Not implemented yet.'); const addLike = (postID: string) => ( e: React.MouseEvent, ) => { e.preventDefault(); const post = posts.find(p => p.id === postID); if (post && id && !post.likes.includes(id)) { firestore .update(`${Collections.POSTS}/${post.id}`, {likes: [...post.likes, id]}) .catch(err => console.error(err)); } }; return (

Say Something

{posts?.map((post: Post) => ( ))}
); }; export default compose( firestoreConnect(() => [Collections.POSTS]), // or { collection: 'users' } connect((state: RootState) => ({ posts: state.firestore.ordered.posts, })), )(Posts);