import React, { useEffect, useState, useContext } from "react"; import { OpinionCard, OpinionCardContent, OpinionCardContentTime, } from "../Components/Styled/OpinionCard.style"; import { UserDetailsCard, UserDetailsCardContent, } from "../Components/Styled/UserDetails.style"; import { dateConverter } from "../Util/dateConverter"; import axios from "../api/axios"; import JSOG from "jsog"; import AuthApi from "../api/AuthApi"; import {EntityLi, EntityTypeSelector, EntityUl} from "../Components/Styled/EntityList.style"; import { AddOpinionButton, Modal, ModalBody, ModalClose, ModalContent, ModalFooter, ModalHeader, ModalTextarea, ModalInput } from "../Components/Styled/Modal.style"; function UserDashboard() { const { auth, setAuth } = useContext(AuthApi); const [user, setUser] = useState(null); const [loadedUser, setLoadedUser] = useState(false); const [fetchError, setFetchError] = useState(false); const [postReports, setPostReports] = useState(null); const [loadedPostReports, setLoadedPostReports] = useState(false); const [reportModalDisplay, setReportModalDisplay] = useState("none"); const [reportForModal, setReportForModal] = useState(null); const [actionType, setActionType] = useState(0); const [newPostContent, setNewPostContent] = useState(""); const [newPostTitle, setNewPostTitle] = useState(""); const [markResolved, setMarkResolved] = useState(false); const handleModalCloseClick = () => { setReportForModal(null); setReportModalDisplay("none"); document.body.style.overflowY = "auto"; }; const handleViewReportButtonClick = (e,report) => { e.preventDefault(); setReportForModal(report); } useEffect(() => { if(reportForModal!==null) { if (reportForModal.post !== null) { setNewPostContent(reportForModal.post.content); if(reportForModal.post.title !== null) setNewPostTitle(reportForModal.post.title); } setReportModalDisplay("block"); document.body.style.overflowY = "hidden"; } }, [reportForModal]); useEffect(() => { const url1 = `http://192.168.0.19:8080/secure/currentUser`; const url2 = `http://192.168.0.19:8080/secure/getAllPostReports`; const fetchUser = async () => { try { if(!loadedUser) { const response = await axios.get(url1, {withCredentials: true}); let cyclicGraph = await response.data; var jsogStructure = JSOG.encode(cyclicGraph); cyclicGraph = JSOG.decode(jsogStructure); setUser(cyclicGraph); setLoadedUser(true); } if(user.userRole==='MODERATOR')fetchPostReports(); } catch (error) { setFetchError(true); } }; const fetchPostReports = async () => { try { const response = await axios.get(url2, {withCredentials: true}); var cyclicGraph = await response.data; var jsogStructure = JSOG.encode(cyclicGraph); cyclicGraph = JSOG.decode(jsogStructure); setPostReports(cyclicGraph); setLoadedPostReports(true); } catch (error) { setFetchError(true); } }; if (auth) fetchUser(); }, [user]); // useEffect(() => { // const timer = setTimeout(() => { // if (user === null) window.location.reload(false); <---- :-) // }, 3000); // return () => clearTimeout(timer); // }, []); function findParentThread(post) { if (post.parent === null) return post; return findParentThread(post.parent); } const handleEdit = async (e) => { e.preventDefault(); try { if(reportForModal.post !== null && reportForModal.post.targetProfessor !== undefined) { await axios(`http://192.168.0.19:8080/secure/updateOpinion/${reportForModal.post.postId}`, { method: "put", data: { newContent: newPostContent, newTargetProfessorId: reportForModal.post.targetProfessor.professorId, }, withCredentials: true, }) window.location.reload(false); } else if(reportForModal.post !== null && reportForModal.post.targetProfessor === undefined) { await axios(`http://192.168.0.19:8080/secure/updateThread/${reportForModal.post.postId}`, { method: "put", data: { newTitle: newPostTitle, newContent: newPostContent, newTargetSubjectId: reportForModal.post.targetSubject.subjectId }, withCredentials: true, }) window.location.reload(false); } } catch (error) { setFetchError(true); } } const handleDelete = (e) => { e.preventDefault(); } const handleMarkResolved = () => { if (actionType !== 1) setMarkResolved(!markResolved); } return loadedUser ? ( <>

Кориснички податоци:

{user.fullName && ( Име: {user.fullName}{" "} )} Корисничко име: {user.username}{" "} E-mail: {user.email} Карма:{" "} {user.karma} {loadedPostReports ? postReports.length > 0 ? (

Пријави за мислења:

) : (

Нема пријавени мислења

) : loadedUser && user.userRole==='MODERATOR' ? "се вчитува..." : ""} {loadedPostReports && postReports.map((postReport) => { return

{dateConverter( new Date(postReport.time).toString().slice(4, -43) )}
{postReport.description.substring(0,45 )}{postReport.description.length >= 45 ? ("...") : ("")} {postReport.resolved ? (разрешено) : ""}

handleViewReportButtonClick(e,postReport)} style={{height:"30px", padding:"5px", fontSize:"14px", position:"absolute", top:"30%", right:"20px" }}>Разгледај
; })}
{user.authoredPosts.length > 0 ? (

Ваши мислења:

) : (

Немате објавени мислења

)} {user.authoredPosts.map((post) => { return (

во дискусија за{" "} {post.targetProfessor !== undefined ? ( {post.targetProfessor.professorName} ) : ( {post.targetSubject.subjectName} )}

{post.content}

{dateConverter( new Date(post.timePosted).toString().slice(4, -43) )}
); })} {reportForModal && ( ×

Преглед на пријава за мислење

Пријавил: {reportForModal.user !== null ? {reportForModal.user.username} : "(избришан корисник)"}

Време на пријава: {dateConverter( new Date(reportForModal.time).toString().slice(4, -43) )}

Образложение:

{reportForModal.description}

Информации за пријавеното мислење:

{reportForModal.post !== null ?

во дискусија за{" "} {reportForModal.post.targetProfessor !== undefined ? ( {reportForModal.post.targetProfessor.professorName} ) : ( {reportForModal.post.targetSubject.subjectName} )}

{reportForModal.post.title === null ?

{reportForModal.post.author.username} {" "} напишал

:

{reportForModal.post.author.username} {" "} отворил тема со наслов {reportForModal.post.title}

}

{reportForModal.post.content}

{dateConverter( new Date(reportForModal.post.timePosted).toString().slice(4, -43) )}
: "Пријавеното мислење или неговиот автор се избришани"} {reportForModal.post !== null &&
{actionType===0 ? Измени содржина или наслов : setActionType(0)} > Измени содржина или наслов } {actionType===1 ? Избриши : {setActionType(1); setMarkResolved(true)}} > Избриши } {actionType===2 ? Премести : setActionType(2)} > Премести }
} {reportForModal.post !== null ? actionType === 0 ? (
handleEdit(e)}> {reportForModal.post.title !== null && }
ПОТВРДИ
) : actionType === 1 ? (
handleDelete(e)}>

Избриши го мислењето? (оваа акција е иреверзибилна)

ПОТВРДИ
) : ("123") : null }
)} ) : ( <>се вчитува... ); } export default UserDashboard;