Merge branch 'master' of https://codefirst.iut.uca.fr/git/noan.randon/Favor
continuous-integration/drone/push Build encountered an error Details

master
Noan07 2 years ago
commit 10b690f490

@ -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) => {
return (dispatch) => {
return axios

@ -19,7 +19,7 @@ const AjoutLien = () => {
dispatch(getPosts());
cancelPost();
setDisplayAdd(false);
/*window.location.reload();*/
window.location.reload();
}else {
alert("Veuillez compléter tous les champs.")
}
@ -70,7 +70,7 @@ const AjoutLien = () => {
}
</div>
{displayAdd && (
<div className="popup-ajout-container">
<div className="popup-profil-container">
<div className="modal">
<h3>Ajout d'un lien</h3>
<span className="cross" onClick={() => setDisplayAdd(false)}>

@ -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('message', description);
data.append('lien', lien);
console.log(data);
//console.log("test",data);
putData(data);
console.log(data);
cancelPost();
@ -78,7 +78,6 @@ const Navbar = () => {
window.location = "/";
}
return (
<div>
{uid ? (
@ -110,7 +109,7 @@ const Navbar = () => {
</NavLink>
</li>
<li className="navbar-item">
<NavLink to="/Profil" className="navbar-link">
<NavLink to={`/Profil/${uid}`} className="navbar-link">
<i className="fas fa-user navbar-icon"></i>
<span className="navbar-title">Me</span>
</NavLink>

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

@ -0,0 +1,45 @@
import React, { useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { getPosts } from '../../actions/post.actions';
import { isEmpty } from "../Utils";
import Post from './PostNouvelleAffichage';
const NouveauDisplayPosts = () => {
const [loadPost, setLoadPost] = useState(true);
const [count , setCount] = useState(5);
const dispatch = useDispatch();
const postsData = useSelector((state) => state.post.post);
const loadMore = () => {
if (window.innerHeight + document.documentElement.scrollTop + 1 > document.scrollingElement.scrollHeight){
setLoadPost(true);
}
}
useEffect(() => {
if (loadPost) {
dispatch(getPosts(count));
setLoadPost(false);
setCount(count + 5);
}
window.addEventListener('scroll', loadMore);
return () => window.removeEventListener('scroll',loadMore);
}, [loadPost,dispatch,count])
if (!loadPost) {
return <p>Loading...</p>;
}
return (
<div>
<ul>
{!isEmpty(postsData[0]) &&
postsData.map((post) => {
return <Post post={post} key={post._id}/>
})}
</ul>
</div>
);
};
export default NouveauDisplayPosts;

@ -6,6 +6,7 @@ import { dateParser, isEmpty } from '../Utils';
import ButtonLike from './ButtonLike';
import Comment from './Comment';
import Commentaire from '../../assets/img/commentaire.png';
import MiniProfil from "../MiniProfil";
const LinkPreview = ({ link }) => {
const [preview, setPreview] = useState({ image: '', title: '', description: '' });
@ -63,24 +64,8 @@ const Post = ( { post } ) => {
<div id="postContenu">
<div id="hautPoste">
<div id="cadreInfoPoste">
<img id="PhotoProfile" alt="" src={
!isEmpty(usersData[0]) &&
usersData.map((user) => {
if (user._id === post.postedId) return user.picture;
else return null;
}).join('')
}/>
<h6 id="NomProfile">
{
!isEmpty(usersData[0]) &&
usersData.map((user) => {
if(user._id === post.postedId) return user.pseudo;
else return null;
}).join('')
}
</h6>
{post.postedId !== userData._id &&
(<FollowHandler idToFollow={post.postedId} type={'suggest'}/>)}
<MiniProfil uid={post.postedId}/>
{post.postedId !== userData._id && (<FollowHandler idToFollow={post.postedId} type={'suggest'}/>)}
</div>
<div>{dateParser(post.createdAt)}</div>
</div>

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

@ -1,25 +1,36 @@
import {React, useState} from 'react';
import React,{useEffect, useState} from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useParams } from 'react-router-dom'
import Navbar from '../components/Navbar';
import { dateParser } from '../components/Utils';
import {dateParser, isEmpty} from '../components/Utils';
import FollowHandler from '../components/UserProfil/FollowHandler';
import LesPostPersonnels from '../components/UserProfil/NavigationProfil/PostsPersonnels';
import LesDossierPersonnels from '../components/UserProfil/NavigationProfil/DossiersPersonnels';
import LesPostsLikes from '../components/UserProfil/NavigationProfil/PostsLikes';
import PostPersonnels from '../components/UserProfil/NavigationProfil/PostsPersonnels';
import DossierPersonnels from '../components/UserProfil/NavigationProfil/DossiersPersonnels';
import PostsLikes from '../components/UserProfil/NavigationProfil/PostsLikes';
import MiniProfil from "../components/MiniProfil";
const Profil = () => {
const userData = useSelector((state) => state.user.user);
const usersData = useSelector((state) => state.users.users);
const dispatch = useDispatch();
const [followingPopup, setFollowingPopup] = useState(false);
const [followerPopup, setFollowerPopup] = useState(false);
const { uid } = useParams();
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]);
const [dossierPersonnel,setdossierPersonnels ] = useState(true);
const [postPersonnel,setpostPersonnels ] = useState(false);
const [postLike,setpostLikes ] =useState(false);
const [followingPopup, setFollowingPopup] = useState(false);
const [followerPopup, setFollowerPopup] = useState(false);
const [dossierPersonnels,setdossierPersonnels ] = useState(false);
const [postPersonnels,setpostPersonnels ] = useState(true);
const [postLikes,setpostLikes ] = useState(false)
const handleModalsProfil = (e) => {
const handleModals = (e) => {
if (e.target.id === "DossierPersonnels") {
setdossierPersonnels(true);
setpostPersonnels(false);
@ -33,37 +44,39 @@ const Profil = () => {
setpostPersonnels(false);
setpostLikes(true);
}
};
};
if (!userData) {
return <p>Loading...</p>;
}
return (
<>
<Navbar />
{/* <main>
<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">
<img id="PhotoProfile" alt="Profil" src={userData.picture}/>
</div>
<div id="blocName">
<h1>{userData.pseudo}</h1>
<h2 className="subdo">@{userData.pseudo}</h2>
<h2 classNameName="subdo">@{userData.pseudo}</h2>
<div>
<div id="blocAbonnement">
<div onClick={() => setFollowingPopup(true)} className="bloc-aboonnements-abonner">
<div className="nombre">{userData.following.length}</div>
<div className="texteNombre">Abonnement</div>
<div onClick={() => setFollowingPopup(true)} classNameName="bloc-aboonnements-abonner">
<div classNameName="nombre">{userData.following.length}</div>
<div classNameName="texteNombre">Abonnement</div>
</div>
<div onClick={() => setFollowerPopup(true)} className="bloc-aboonnements-abonner">
<div className="nombre">{userData.followers.length}</div>
<div className="texteNombre">Abonnée</div>
<div onClick={() => setFollowerPopup(true)} classNameName="bloc-aboonnements-abonner">
<div classNameName="nombre">{userData.followers.length}</div>
<div classNameName="texteNombre">Abonnée</div>
</div>
{followingPopup && (
<div className="popup-profil-container">
<div className="modal">
<div classNameName="popup-profil-container">
<div classNameName="modal">
<h3>Abonnements</h3>
<span className="cross" onClick={() => setFollowingPopup(false)}>
<span classNameName="cross" onClick={() => setFollowingPopup(false)}>
&#10005;
</span>
<ul>
@ -74,7 +87,7 @@ const Profil = () => {
<li key={user._id}>
<img src={user.picture} alt="user-pic" />
<h4>{user.pseudo}</h4>
<div className="follow-handler">
<div classNameName="follow-handler">
<FollowHandler idToFollow={user._id} type={'card'}/>
</div>
</li>
@ -88,10 +101,10 @@ const Profil = () => {
</div>
)}
{followerPopup && (
<div className="popup-profil-container">
<div className="modal">
<div classNameName="popup-profil-container">
<div classNameName="modal">
<h3>Abonnés</h3>
<span className="cross" onClick={() => setFollowerPopup(false)}>
<span classNameName="cross" onClick={() => setFollowerPopup(false)}>
&#10005;
</span>
<ul>
@ -102,7 +115,7 @@ const Profil = () => {
<li key={user._id}>
<img src={user.picture} alt="user-pic" />
<h4>{user.pseudo}</h4>
<div className="follow-handler">
<div classNameName="follow-handler">
<FollowHandler idToFollow={user._id} type={'card'} />
</div>
</li>
@ -125,24 +138,24 @@ const Profil = () => {
<main>
<div>
<div>
<div class="imageProfil">
<img class="image" src={userData.picture}/>
<div className="imageProfil">
<img className="image" src={userData.picture}/>
</div>
<div class="divPseudo">
<h3 class="pseudo">{userData.pseudo}</h3>
<div className="divPseudo">
<h3 className="pseudo">{userData.pseudo}</h3>
{/* <h3>suuu</h3> */}
</div>
<div class="divSuivreFollowing">
<a href="#" class="button" id="button">Suivre +</a>
<div className="divSuivreFollowing">
<a href="#" className="button" id="button">Suivre +</a>
</div>
<div class="divSuivreFollowing">
<div class="nbFollow" onClick={() => setFollowingPopup(true)}>
<div className="divSuivreFollowing">
<div className="nbFollow" onClick={() => setFollowingPopup(true)}>
<h4>{userData.following.length}</h4>
<h4 class="txtFollower">Abonnements</h4>
<h4 className="txtFollower">Abonnements</h4>
</div>
<div class="nbFollow" onClick={() => setFollowerPopup(true)}>
<div className="nbFollow" onClick={() => setFollowerPopup(true)}>
<h4>{userData.followers.length}</h4>
<h4 class="txtFollower">Abonnés</h4>
<h4 className="txtFollower">Abonnés</h4>
</div>
</div>
{followingPopup && (
@ -153,50 +166,42 @@ const Profil = () => {
&#10005;
</span>
<ul>
{usersData.map((user) => {
for (let i = 0; i < userData.following.length; i++) {
if (user._id === userData.following[i]) {
return (
<li key={user._id}>
<img src={user.picture} alt="user-pic" />
<h4>{user.pseudo}</h4>
<div className="follow-handler">
<FollowHandler idToFollow={user._id} type={'card'}/>
</div>
</li>
);
}
{
userData.following.map((follower, i) => {
return (
<li key={i}>
<MiniProfil uid={follower}/>
<div classNameName="follow-handler">
<FollowHandler idToFollow={uid} type={'card'}/>
</div>
</li>
)
})
}
return null;
})}
</ul>
</div>
</div>
)}
)}
{followerPopup && (
<div className="popup-profil-container">
<div className="modal">
<div classNameName="popup-profil-container">
<div classNameName="modal">
<h3>Abonnés</h3>
<span className="cross" onClick={() => setFollowerPopup(false)}>
<span classNameName="cross" onClick={() => setFollowerPopup(false)}>
&#10005;
</span>
<ul>
{usersData.map((user) => {
for (let i = 0; i < userData.followers.length; i++) {
if (user._id === userData.followers[i]) {
return (
<li key={user._id}>
<img src={user.picture} alt="user-pic" />
<h4>{user.pseudo}</h4>
<div className="follow-handler">
<FollowHandler idToFollow={user._id} type={'card'} />
</div>
</li>
);
}
{
userData.followers.map((follower, i) => {
return (
<li key={i}>
<MiniProfil uid={follower}/>
<div classNameName="follow-handler">
<FollowHandler idToFollow={uid} type={'card'}/>
</div>
</li>
)
})
}
return null;
})}
</ul>
</div>
</div>
@ -204,54 +209,55 @@ const Profil = () => {
</div>
<div class="basDePage">
<div class="divMenu">
<div className="basDePage">
<div className="divMenu">
<div>
<nav role="navigation" class="navProfil">
<ul class="navItemsProfil">
<li class="navItemProfil">
<a class="navLinkProfil" onClick={handleModalsProfil} id="DossierPersonnels" >Dossier Personnel</a>
<nav role="navigation" className="navProfil">
<ul className="navItemsProfil">
<li className="navItemProfil">
<a className="navLinkProfil" id='DossierPersonnels' onClick={handleModals}><span>Dossier Personnel</span></a>
</li>
<li class="navItemProfil">
<a class="navLinkProfil" onClick={handleModalsProfil} id="PostsPersonnels">Posts</a>
<li className="navItemProfil">
<a className="navLinkProfil" id='PostsPersonnels' onClick={handleModals}><span>Posts</span></a>
</li>
<li class="navItemProfil">
<a class="navLinkProfil" onClick={handleModalsProfil} id="PostsLikes" >Posts likés</a>
<li className="navItemProfil">
<a className="navLinkProfil" id='PostLikes' onClick={handleModals}><span>Posts likés</span></a>
</li>
</ul>
</nav>
</div>
<div class="menuContent listContent">
{dossierPersonnel &&<LesDossierPersonnels/>}
{postPersonnel &&<LesPostPersonnels/>}
{postLike &&<LesPostsLikes/>}
<div className="menuContent">
<div className="listContent">
{dossierPersonnels &&<DossierPersonnels/>}
{postPersonnels &&<PostPersonnels/>}
{postLikes &&<PostsLikes/>}
</div>
</div>
</div>
<div class="recoDiv">
<div class="reco">
<div className="recoDiv">
<div className="reco">
<span>Vous pourriez suivre</span>
<hr/>
<div class="ListReco">
<div class="UtiReco">
<img class="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<div className="ListReco">
<div className="UtiReco">
<img className="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<span>UtiT</span>
<a href="#" class="buttonReco" id="button">Suivre</a>
<a href="#" className="buttonReco" id="button">Suivre</a>
</div>
<div class="UtiReco">
<img class="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<div className="UtiReco">
<img className="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<span>UtiT</span>
<a href="#" class="buttonReco" id="button">Suivre</a>
<a href="#" className="buttonReco" id="button">Suivre</a>
</div>
<div class="UtiReco">
<img class="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<div className="UtiReco">
<img className="image" src="https://ionicframework.com/docs/img/demos/avatar.svg"/>
<span>UtiT</span>
<a href="#" class="buttonReco" id="button">Suivre</a>
<a href="#" className="buttonReco" id="button">Suivre</a>
</div>
</div>

@ -1,80 +1,29 @@
import React, {useEffect, useState} from 'react';
import React, {useState} from 'react';
import Navbar from '../components/Navbar';
import Notif from '../components/Notif';
import {useDispatch, 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";
import {useSelector} from "react-redux";
const Trends = () => {
console.log('test');
const [loadNotif, setLoadNotif] = useState(true);
const [count , setCount] = useState(5);
const dispatch = useDispatch();
const [setLoadNotif] = useState(true);
const userData = useSelector((state) => state.user.user);
const usersData = useSelector((state) => state.users.users);
const loadMore = () => {
if (window.innerHeight + document.documentElement.scrollTop + 1 > document.scrollingElement.scrollHeight){
setLoadNotif(true);
}
}
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}/>
return (
<li>
<Notif key={notif._id} notification={notif}/>
</li>
);
})
}
</div>
);
/*
return (
<div id={'listeNotif'}>
<Navbar />
<h1>Notification</h1>
{
return(<h3>Aucune Notification</h3>);
userData.notif.map((notif) => {
for (let i = 0; i < userData.notif.length; i++) {
if (notif._id === userData.notif[i]) {
return (
<Notif message="dfdf"/>
);
}
}
return <h3>Aucune Notification</h3>;
})
}
</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;

@ -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))
return res.status(400).send("ID unknown : " + req.params.id);
@ -183,7 +185,14 @@ module.exports.commentPost = (req, res) => {
},
},
{ 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) {
return res.status(400).send(err);

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

Loading…
Cancel
Save