add link profil

master
Bastien OLLIER 2 years ago
parent 5de0542907
commit 4bf2a9250e

@ -13,20 +13,6 @@ export const getUser = (uid) => {
}; };
}; };
export const getNotif = (uid) => {
console.log("loadNotif3");
return (dispatch)=> {
return axios
.get(`${process.env.REACT_APP_API_URL}api/user/notif/${uid}`)
.then((res) => {
dispatch(setUserData(res.data))
})
.catch((err) => console.log(err));
};
};
export const uploadPicture = (data, id) => { export const uploadPicture = (data, id) => {
return (dispatch) => { return (dispatch) => {
return axios return axios

@ -19,7 +19,7 @@ const AjoutLien = () => {
dispatch(getPosts()); dispatch(getPosts());
cancelPost(); cancelPost();
setDisplayAdd(false); setDisplayAdd(false);
window.location.reload(); //window.location.reload();
}else { }else {
alert("Veuillez compléter tous les champs.") alert("Veuillez compléter tous les champs.")
} }

@ -0,0 +1,37 @@
import React, {useEffect,useState} from 'react';
import {useDispatch, useSelector} from "react-redux";
import {getPosts} from "../actions/post.actions";
import {getUserTemp} from "../actions/user.actions";
import {useParams} from "react-router-dom";
import {isEmpty} from "./Utils";
import FollowHandler from "./UserProfil/FollowHandler";
const MiniProfil = ({uid} ) => {
const [userData, setUserData] = useState(null);
useEffect(() => {
async function fetchData() {
const response = await fetch(`${process.env.REACT_APP_API_URL}api/user/${uid}`);
const data = await response.json();
setUserData(data);
}
fetchData();
}, [uid]);
if (!userData) {
return <p>Loading...</p>;
}
return (
<div className="ListReco">
<div className="UtiReco">
<img className="image" src={userData.picture}/>
<a href={`/Profil/${uid}`}>{userData.pseudo}</a>
</div>
</div>
);
};
export default MiniProfil;

@ -23,7 +23,7 @@ const Navbar = () => {
data.append('postedId', userData._id); data.append('postedId', userData._id);
data.append('message', description); data.append('message', description);
data.append('lien', lien); data.append('lien', lien);
console.log(data); //console.log("test",data);
putData(data); putData(data);
console.log(data); console.log(data);
cancelPost(); cancelPost();
@ -110,7 +110,7 @@ const Navbar = () => {
</NavLink> </NavLink>
</li> </li>
<li className="navbar-item"> <li className="navbar-item">
<NavLink to="/Profil" className="navbar-link"> <NavLink to="/Profil/63bea7b7b50d82de71f56184" className="navbar-link">
<i className="fas fa-user navbar-icon"></i> <i className="fas fa-user navbar-icon"></i>
<span className="navbar-title">Me</span> <span className="navbar-title">Me</span>
</NavLink> </NavLink>

@ -1,30 +1,30 @@
import React from 'react'; import React, {useEffect,useState} from 'react';
import {isEmpty} from "./Utils"; import {useDispatch, useSelector} from "react-redux";
import {getPosts} from "../actions/post.actions";
import {getUserTemp} from "../actions/user.actions";
import MiniProfil from "./MiniProfil";
const Notif = ({notification} ) => { const Notif = ({notification} ) => {
const messageNotif = (typeNotif) =>{ console.log('notification',notification)
if(typeNotif == 'like') {
const MessageNotif = (notification) =>{
if(notification.typeNotif == 'like') {
return "a like"; return "a like";
} }
return 'a commenter' else if(notification.typeNotif == 'commente') {
return "a commenter votre post";
}
return 'vous follow'
} }
return ( return (
<div className='conteneur_notif'> <div className='conteneur_notif' key={notification._id}>
<div className={'contenue_notif'}> <MiniProfil uid={notification.id_user}></MiniProfil>
<img id="PhotoProfile" alt="" src="lien" />
</div>
<div className={'contenue_notif'}> <div className={'contenue_notif'}>
<h6 id="NomProfile"> { MessageNotif(notification) }
{notification.typeNotif}
</h6>
</div> </div>
<div className={'contenue_notif'}>
{
messageNotif(notification.typeNotif)
}
</div> </div>
</div>
); );
}; };

@ -26,6 +26,10 @@ const NouveauDisplayPosts = () => {
return () => window.removeEventListener('scroll',loadMore); return () => window.removeEventListener('scroll',loadMore);
}, [loadPost,dispatch,count]) }, [loadPost,dispatch,count])
if (!loadPost) {
return <p>Loading...</p>;
}
return ( return (
<div> <div>
<ul> <ul>

@ -16,7 +16,7 @@ const index = () => {
<Route path="/Trends" element={<Trends/>} /> <Route path="/Trends" element={<Trends/>} />
<Route path="/Discover" element={<Discover/>} /> <Route path="/Discover" element={<Discover/>} />
{/* <Route path="*" element={<HomeNavigation/>} /> */} {/* <Route path="*" element={<HomeNavigation/>} /> */}
<Route path="/Profil" element={<Profil />} /> <Route path="/Profil/:uid" element={<Profil/>} />
<Route path="/Configuration" element={<Configuration/>}/> <Route path="/Configuration" element={<Configuration/>}/>
</Routes> </Routes>
</BrowserRouter> </BrowserRouter>

@ -1,16 +1,29 @@
import {React, useState} from 'react'; import React,{useEffect, useState} from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useParams } from 'react-router-dom'
import Navbar from '../components/Navbar'; import Navbar from '../components/Navbar';
import { dateParser } from '../components/Utils'; import {dateParser, isEmpty} from '../components/Utils';
import FollowHandler from '../components/UserProfil/FollowHandler'; import FollowHandler from '../components/UserProfil/FollowHandler';
import PostPersonnels from '../components/UserProfil/NavigationProfil/PostsPersonnels'; import PostPersonnels from '../components/UserProfil/NavigationProfil/PostsPersonnels';
import DossierPersonnels from '../components/UserProfil/NavigationProfil/DossiersPersonnels'; import DossierPersonnels from '../components/UserProfil/NavigationProfil/DossiersPersonnels';
import PostsLikes from '../components/UserProfil/NavigationProfil/PostsLikes'; import PostsLikes from '../components/UserProfil/NavigationProfil/PostsLikes';
import MiniProfil from "../components/MiniProfil";
const Profil = () => { const Profil = () => {
const userData = useSelector((state) => state.user.user); const { uid } = useParams();
const usersData = useSelector((state) => state.users.users); const [userData, setUserData] = useState(null);
const dispatch = useDispatch();
useEffect(() => {
async function fetchData() {
const response = await fetch(`${process.env.REACT_APP_API_URL}api/user/${uid}`);
const data = await response.json();
setUserData(data);
}
fetchData();
}, [uid]);
const [followingPopup, setFollowingPopup] = useState(false); const [followingPopup, setFollowingPopup] = useState(false);
const [followerPopup, setFollowerPopup] = useState(false); const [followerPopup, setFollowerPopup] = useState(false);
const [dossierPersonnels,setdossierPersonnels ] = useState(false); const [dossierPersonnels,setdossierPersonnels ] = useState(false);
@ -33,35 +46,37 @@ const Profil = () => {
} }
}; };
if (!userData) {
return <p>Loading...</p>;
}
return ( return (
<> <>
<Navbar /> <Navbar />
{/* <main> {/* <main>
<div id="bandeauProfil"> <div id="bandeauProfil">
<h1 className='affichage-date'>Compte créé le : {dateParser(userData.createdAt)}</h1> <h1 classNameName='affichage-date'>Compte créé le : {dateParser(userData.createdAt)}</h1>
<div id="image"> <div id="image">
<img id="PhotoProfile" alt="Profil" src={userData.picture}/> <img id="PhotoProfile" alt="Profil" src={userData.picture}/>
</div> </div>
<div id="blocName"> <div id="blocName">
<h1>{userData.pseudo}</h1> <h1>{userData.pseudo}</h1>
<h2 className="subdo">@{userData.pseudo}</h2> <h2 classNameName="subdo">@{userData.pseudo}</h2>
<div> <div>
<div id="blocAbonnement"> <div id="blocAbonnement">
<div onClick={() => setFollowingPopup(true)} className="bloc-aboonnements-abonner"> <div onClick={() => setFollowingPopup(true)} classNameName="bloc-aboonnements-abonner">
<div className="nombre">{userData.following.length}</div> <div classNameName="nombre">{userData.following.length}</div>
<div className="texteNombre">Abonnement</div> <div classNameName="texteNombre">Abonnement</div>
</div> </div>
<div onClick={() => setFollowerPopup(true)} className="bloc-aboonnements-abonner"> <div onClick={() => setFollowerPopup(true)} classNameName="bloc-aboonnements-abonner">
<div className="nombre">{userData.followers.length}</div> <div classNameName="nombre">{userData.followers.length}</div>
<div className="texteNombre">Abonnée</div> <div classNameName="texteNombre">Abonnée</div>
</div> </div>
{followingPopup && ( {followingPopup && (
<div className="popup-profil-container"> <div classNameName="popup-profil-container">
<div className="modal"> <div classNameName="modal">
<h3>Abonnements</h3> <h3>Abonnements</h3>
<span className="cross" onClick={() => setFollowingPopup(false)}> <span classNameName="cross" onClick={() => setFollowingPopup(false)}>
&#10005; &#10005;
</span> </span>
<ul> <ul>
@ -72,7 +87,7 @@ const Profil = () => {
<li key={user._id}> <li key={user._id}>
<img src={user.picture} alt="user-pic" /> <img src={user.picture} alt="user-pic" />
<h4>{user.pseudo}</h4> <h4>{user.pseudo}</h4>
<div className="follow-handler"> <div classNameName="follow-handler">
<FollowHandler idToFollow={user._id} type={'card'}/> <FollowHandler idToFollow={user._id} type={'card'}/>
</div> </div>
</li> </li>
@ -86,10 +101,10 @@ const Profil = () => {
</div> </div>
)} )}
{followerPopup && ( {followerPopup && (
<div className="popup-profil-container"> <div classNameName="popup-profil-container">
<div className="modal"> <div classNameName="modal">
<h3>Abonnés</h3> <h3>Abonnés</h3>
<span className="cross" onClick={() => setFollowerPopup(false)}> <span classNameName="cross" onClick={() => setFollowerPopup(false)}>
&#10005; &#10005;
</span> </span>
<ul> <ul>
@ -100,7 +115,7 @@ const Profil = () => {
<li key={user._id}> <li key={user._id}>
<img src={user.picture} alt="user-pic" /> <img src={user.picture} alt="user-pic" />
<h4>{user.pseudo}</h4> <h4>{user.pseudo}</h4>
<div className="follow-handler"> <div classNameName="follow-handler">
<FollowHandler idToFollow={user._id} type={'card'} /> <FollowHandler idToFollow={user._id} type={'card'} />
</div> </div>
</li> </li>
@ -123,24 +138,24 @@ const Profil = () => {
<main> <main>
<div> <div>
<div> <div>
<div class="imageProfil"> <div className="imageProfil">
<img class="image" src={userData.picture}/> <img className="image" src={userData.picture}/>
</div> </div>
<div class="divPseudo"> <div className="divPseudo">
<h3 class="pseudo">{userData.pseudo}</h3> <h3 className="pseudo">{userData.pseudo}</h3>
{/* <h3>suuu</h3> */} {/* <h3>suuu</h3> */}
</div> </div>
<div class="divSuivreFollowing"> <div className="divSuivreFollowing">
<a href="#" class="button" id="button">Suivre +</a> <a href="#" className="button" id="button">Suivre +</a>
</div> </div>
<div class="divSuivreFollowing"> <div className="divSuivreFollowing">
<div class="nbFollow" onClick={() => setFollowingPopup(true)}> <div className="nbFollow" onClick={() => setFollowingPopup(true)}>
<h4>{userData.following.length}</h4> <h4>{userData.following.length}</h4>
<h4 class="txtFollower">Abonnements</h4> <h4 className="txtFollower">Abonnements</h4>
</div> </div>
<div class="nbFollow" onClick={() => setFollowerPopup(true)}> <div className="nbFollow" onClick={() => setFollowerPopup(true)}>
<h4>{userData.followers.length}</h4> <h4>{userData.followers.length}</h4>
<h4 class="txtFollower">Abonnés</h4> <h4 className="txtFollower">Abonnés</h4>
</div> </div>
</div> </div>
{followingPopup && ( {followingPopup && (
@ -151,50 +166,42 @@ const Profil = () => {
&#10005; &#10005;
</span> </span>
<ul> <ul>
{usersData.map((user) => { {
for (let i = 0; i < userData.following.length; i++) { userData.following.map((follower, i) => {
if (user._id === userData.following[i]) {
return ( return (
<li key={user._id}> <li key={i}>
<img src={user.picture} alt="user-pic" /> <MiniProfil uid={follower}/>
<h4>{user.pseudo}</h4> <div classNameName="follow-handler">
<div className="follow-handler"> <FollowHandler idToFollow={uid} type={'card'}/>
<FollowHandler idToFollow={user._id} type={'card'}/>
</div> </div>
</li> </li>
); )
} })
} }
return null;
})}
</ul> </ul>
</div> </div>
</div> </div>
)} )}
{followerPopup && ( {followerPopup && (
<div className="popup-profil-container"> <div classNameName="popup-profil-container">
<div className="modal"> <div classNameName="modal">
<h3>Abonnés</h3> <h3>Abonnés</h3>
<span className="cross" onClick={() => setFollowerPopup(false)}> <span classNameName="cross" onClick={() => setFollowerPopup(false)}>
&#10005; &#10005;
</span> </span>
<ul> <ul>
{usersData.map((user) => { {
for (let i = 0; i < userData.followers.length; i++) { userData.followers.map((follower, i) => {
if (user._id === userData.followers[i]) {
return ( return (
<li key={user._id}> <li key={i}>
<img src={user.picture} alt="user-pic" /> <MiniProfil uid={follower}/>
<h4>{user.pseudo}</h4> <div classNameName="follow-handler">
<div className="follow-handler"> <FollowHandler idToFollow={uid} type={'card'}/>
<FollowHandler idToFollow={user._id} type={'card'} />
</div> </div>
</li> </li>
); )
} })
} }
return null;
})}
</ul> </ul>
</div> </div>
</div> </div>
@ -204,27 +211,27 @@ const Profil = () => {
</div> </div>
<div class="basDePage"> <div className="basDePage">
<div class="divMenu"> <div className="divMenu">
<div> <div>
<nav role="navigation" class="navProfil"> <nav role="navigation" className="navProfil">
<ul class="navItemsProfil"> <ul className="navItemsProfil">
<li class="navItemProfil"> <li className="navItemProfil">
<a class="navLinkProfil" id='DossierPersonnels' onClick={handleModals}><span>Dossier Personnel</span></a> <a className="navLinkProfil" id='DossierPersonnels' onClick={handleModals}><span>Dossier Personnel</span></a>
</li> </li>
<li class="navItemProfil"> <li className="navItemProfil">
<a class="navLinkProfil" id='PostsPersonnels' onClick={handleModals}><span>Posts</span></a> <a className="navLinkProfil" id='PostsPersonnels' onClick={handleModals}><span>Posts</span></a>
</li> </li>
<li class="navItemProfil"> <li className="navItemProfil">
<a class="navLinkProfil" id='PostLikes' onClick={handleModals}><span>Posts likés</span></a> <a className="navLinkProfil" id='PostLikes' onClick={handleModals}><span>Posts likés</span></a>
</li> </li>
</ul> </ul>
</nav> </nav>
</div> </div>
<div class="menuContent"> <div className="menuContent">
<div class="listContent"> <div className="listContent">
{dossierPersonnels &&<DossierPersonnels/>} {dossierPersonnels &&<DossierPersonnels/>}
{postPersonnels &&<PostPersonnels/>} {postPersonnels &&<PostPersonnels/>}
{postLikes &&<PostsLikes/>} {postLikes &&<PostsLikes/>}
@ -232,25 +239,25 @@ const Profil = () => {
</div> </div>
</div> </div>
<div class="recoDiv"> <div className="recoDiv">
<div class="reco"> <div className="reco">
<span>Vous pourriez suivre</span> <span>Vous pourriez suivre</span>
<hr/> <hr/>
<div class="ListReco"> <div className="ListReco">
<div class="UtiReco"> <div className="UtiReco">
<img class="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/> <img className="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<span>UtiT</span> <span>UtiT</span>
<a href="#" class="buttonReco" id="button">Suivre</a> <a href="#" className="buttonReco" id="button">Suivre</a>
</div> </div>
<div class="UtiReco"> <div className="UtiReco">
<img class="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/> <img className="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<span>UtiT</span> <span>UtiT</span>
<a href="#" class="buttonReco" id="button">Suivre</a> <a href="#" className="buttonReco" id="button">Suivre</a>
</div> </div>
<div class="UtiReco"> <div className="UtiReco">
<img class="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/> <img className="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<span>UtiT</span> <span>UtiT</span>
<a href="#" class="buttonReco" id="button">Suivre</a> <a href="#" className="buttonReco" id="button">Suivre</a>
</div> </div>
</div> </div>

@ -1,80 +1,36 @@
import React, {useEffect, useState} from 'react'; import React, {useState} from 'react';
import Navbar from '../components/Navbar'; import Navbar from '../components/Navbar';
import Notif from '../components/Notif'; import Notif from '../components/Notif';
import {useDispatch, useSelector} from "react-redux"; import {useSelector} from "react-redux";
import {getNotif, getUser} from '../actions/user.actions';
import {isEmpty} from "../components/Utils";
import axios from "axios";
import FollowHandler from "../components/UserProfil/FollowHandler";
import Post from "../components/Post/Post";
const Trends = () => { const Trends = () => {
console.log('test'); const [setLoadNotif] = useState(true);
const [loadNotif, setLoadNotif] = useState(true);
const [count , setCount] = useState(5);
const dispatch = useDispatch();
const userData = useSelector((state) => state.user.user); const userData = useSelector((state) => state.user.user);
const usersData = useSelector((state) => state.users.users);
const loadMore = () => { const loadMore = () => {
if (window.innerHeight + document.documentElement.scrollTop + 1 > document.scrollingElement.scrollHeight){ if (window.innerHeight + document.documentElement.scrollTop + 1 > document.scrollingElement.scrollHeight){
setLoadNotif(true); setLoadNotif(true);
} }
} }
console.log("idUser: ",userData._id);
console.log("userData",userData,userData.notif, userData.notif.length);
return (
<div id={'listeNotif'}>
<Navbar />
<h1>Notification</h1>
{ /*userData.notif.length ? userData.notif.filter(notif => notif._id === userData.notif._id).map((notif) => <Notif message="dfdf"/>)
: <h3>Aucune Notification</h3>*/
userData.notif != null && userData.notif.map((notif) => {
return <Notif notification={notif}/>
})
}
</div>
);
/*
return ( return (
<div id={'listeNotif'}> <div id={'listeNotif'}>
<Navbar /> <Navbar />
<h1>Notification</h1> <h1>Notification</h1>
{ {
return(<h3>Aucune Notification</h3>); userData.notif != null && userData.notif.map((notif) => {
userData.notif.map((notif) => {
for (let i = 0; i < userData.notif.length; i++) {
if (notif._id === userData.notif[i]) {
return ( return (
<Notif message="dfdf"/> <li>
<Notif key={notif._id} notification={notif}/>
</li>
); );
}
}
return <h3>Aucune Notification</h3>;
}) })
} }
</div> </div>
);*/ );
return (
<div id={'listeNotif'}>
<Navbar />
<h1>Notification</h1>
<Notif message="a like"/>
<Notif message="a like"/>
<Notif message="a like"/>
<Notif message="a like"/>
<Notif message="a like"/>
<Notif message="a commenter votre poste"/>
</div>);
}; };
export default Trends; export default Trends;

@ -165,7 +165,9 @@ module.exports.unlikePost = async (req, res) => {
// } // }
// }; // };
module.exports.commentPost = (req, res) => { module.exports.commentPost = async (req, res) => {
const idUser = await PostModel.findOne({ _id: ObjectID( req.params.id) });
if (!ObjectID.isValid(req.params.id)) if (!ObjectID.isValid(req.params.id))
return res.status(400).send("ID unknown : " + req.params.id); return res.status(400).send("ID unknown : " + req.params.id);
@ -183,7 +185,14 @@ module.exports.commentPost = (req, res) => {
}, },
}, },
{ new: true }) { new: true })
.then((data) => res.send(data)) .then((data) => {
addNotification.addNotification(idUser.postedId, {
typeNotif: "commente",
id_user: req.body.commenterId,
id_post1: req.params.id,
id_post2: data.comments.slice(-1)[0]._id
});
res.send(data);})
.catch((err) => res.status(500).send({ message: err })); .catch((err) => res.status(500).send({ message: err }));
} catch (err) { } catch (err) {
return res.status(400).send(err); return res.status(400).send(err);

@ -8,9 +8,7 @@ module.exports.getAllUsers = async (req, res) => {
}; };
module.exports.getNotif = async (req, res) => { module.exports.getNotif = async (req, res) => {
const users = await UserModel.find().select("-password"); const users = await UserModel.find().select("-password");
console.log('api get notif',users);
res.status(200).json(users); res.status(200).json(users);
}; };
@ -18,10 +16,15 @@ module.exports.getNotif = async (req, res) => {
module.exports.userInfo = (req, res) => { module.exports.userInfo = (req, res) => {
if (!ObjectID.isValid(req.params.id)) if (!ObjectID.isValid(req.params.id))
return res.status(400).send("ID unknown : " + req.params.id); return res.status(400).send("ID unknown : " + req.params.id);
console.log('userinfo:',req.params.id)
UserModel.findById(req.params.id, (err, docs) => { UserModel.findById(req.params.id, (err, docs) => {
if (!err) res.send(docs); if (!err) {
else console.log("ID unknown : " + err); console.log('doc:',docs)
res.send(docs);
}
else
console.log("ID unknown : " + err);
}).select("-password"); }).select("-password");
}; };

Loading…
Cancel
Save