Skip to content
Snippets Groups Projects
Profile.js 3.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • Ludvig Damberg's avatar
    Ludvig Damberg committed
    import React from 'react'
    import { useEffect, useState } from 'react';
    import axios from 'axios';
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    import { useNavigate, Link } from 'react-router-dom';
    
    import styles from '../styles/profile.module.css'
    
    import Post from '../components/Post'
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    import ProfilePosts from '../components/ProfilePosts'
    import Loading from '../components/Loading';
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    import { FaArrowLeft } from 'react-icons/fa';
    import buttons from '../styles/buttons.module.css'
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    import jwt_decode from 'jwt-decode';
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    const Profile = () => {
    
      const [profileData, setProfileData] = useState()
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const [loading, setLoading] = useState(true);
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const [error, setError] = useState(null);
      const [isLoggedIn, setIsLoggedIn] = useState(false);
      const navigate = useNavigate();
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const [posts, setPosts] = useState()
      let upvotes = 0
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const loadPosts = async () => {
    
        const token = localStorage.getItem('token');
        const decodedToken = jwt_decode(token);
        const author = decodedToken.userId;
    
        console.log(decodedToken.userId)
    
        await axios.get('http://localhost:5000/profilePosts', { headers: { author: `${author}` } },
        )
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
          .then((res) => {
            setPosts(res.data);
    
          }).catch(err => console.log(err))
        setTimeout(() => {
          setLoading(false)
        }, 1000)
    
      }
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const checkLoggedIn = async () => {
    
    
        const token = localStorage.getItem('token');
        if (!token) {
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
          logout()
    
          return;
        }
        const response = await axios.get('http://localhost:5000/profile', {
          headers: { Authorization: `Bearer ${token}` },
        }).then((res) => {
          setIsLoggedIn(true);
        }).catch(err => {
          localStorage.removeItem("token")
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
          logout()
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      }
    
      const fetchProfile = async () => {
    
    
    
        const token = localStorage.getItem('token');
    
        axios.get('http://localhost:5000/profile', {
          headers: {
            Authorization: `Bearer ${token}`
          }
        }).then((res) => {
          setProfileData(res.data);
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
        }).catch(err => console.log(err))
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      }
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const logout = () => {
        localStorage.removeItem("token")
        setIsLoggedIn(false)
        navigate('/')
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      }
    
      useEffect(() => {
        checkLoggedIn()
        fetchProfile()
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
        loadPosts()
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      }, [])
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      const count_upvotes = () => {
    
        posts.map((post) => {
          upvotes += post.upvotes.length
          console.log(upvotes)
        })
    
      }
    
    
    
      if (loading === true) {
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
          <Loading />
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
        )
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      } else if (loading === false) {
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
       count_upvotes()
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
        return (
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
            <div className={styles.header}>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
              <h1>Profile Page</h1>
    
    
              <div className={styles.text_container}>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                <Link style={{ textDecoration: 'none' }} to='/feed'>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                  <div className={buttons.button}>discover</div>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                </Link>
    
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
                <Link style={{ textDecoration: 'none' }} to='/'>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                  <div className={buttons.button}>home</div>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                </Link>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                <div className={buttons.button} onClick={logout}>log out</div>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
            <div className={buttons.arrow}><Link to='/'><FaArrowLeft /> Home</Link></div>
    
            <div className={styles.profile}>
              <img className={styles.picture} src={`http://localhost:5000/uploads/${profileData.photo}`} />
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
              <div className={styles.info_container}>
                <div className={styles.info_slot}>
                  <div> <h1>{posts.length}</h1></div>
                  <div> <h3>Posts</h3></div>
                </div>
                <div className={styles.info_slot}>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                  <div> <h1>{upvotes}</h1></div>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
                  <div> <h3>Upvotes</h3></div>
                </div>
              </div>
            </div>
            <div className={styles.profile2}>
    
              <h2>{profileData.username}</h2>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
              <p>{profileData.email}</p>
    
            </div>
            <div>
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
            </div>
            <div className={styles.your}> <h1>Your posts</h1></div>
            <ProfilePosts />
    
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
      }
    
    Ludvig Damberg's avatar
    Ludvig Damberg committed
    
    }
    
    export default Profile