import React, { useState, useEffect, useContext } from "react"; import { useNavigate, useParams } from "react-router-dom"; import JSOG from "jsog"; import { Outlet } from "react-router-dom"; import { CurrentPageNav } from "../Components/Styled/Main.style"; import { ProfessorCard, ProfessorCardDetails, ProfessorCardName, ProfessorCardSeparator, } from "../Components/Styled/ProfessorCard.style"; import AuthApi from "../api/AuthApi"; import { AddOpinionButton } from "../Components/Styled/Modal.style"; import { EntityLi, EntityUl, EntityParam, } from "../Components/Styled/EntityList.style"; import { Modal, ModalBody, ModalClose, ModalContent, ModalFooter, ModalHeader, ModalInput, ModalTextarea, } from "../Components/Styled/Modal.style"; import axios from "../api/axios"; const Subject = () => { let params = useParams(); let navigate = useNavigate(); const { auth, setAuth } = useContext(AuthApi); const [subject, setSubject] = useState(null); const [loaded, setLoaded] = useState(false); const [fetchError, setFetchError] = useState(false); var totalTopics = 0; var topics = []; const [topicModalDisplay, setTopicModalDisplay] = useState("none"); const [topicTitle, setTopicTitle] = useState(""); const [topicContent, setTopicContent] = useState(""); const [errorMessage, setErrorMessage] = useState(""); useEffect(() => { const url = `http://192.168.0.19:8080/public/subject/${params.subjectId}`; const fetchData = async () => { try { const response = await fetch(url); let cyclicGraph = await response.json(); let jsogStructure = JSOG.encode(cyclicGraph); cyclicGraph = JSOG.decode(jsogStructure); setSubject(cyclicGraph); setLoaded(true); } catch (error) { setFetchError(true); } }; fetchData(); }, [params.subjectId]); const handleAddTopicButtonClick = () => { if (auth) { setTopicModalDisplay("block"); document.body.style.overflowY = "hidden"; } else { navigate("/login"); } }; const handleModalCloseClick = () => { setTopicModalDisplay("none"); document.body.style.overflowY = "auto"; }; const handleTopicSubmit = async (e) => { e.preventDefault(); if (!topicTitle.length < 1 && !topicContent.length < 1) { const response = await axios( `http://192.168.0.19:8080/secure/subject/${params.subjectId}/addThread`, { method: "post", data: { title: topicTitle, content: topicContent, }, withCredentials: true, } ); setErrorMessage(""); window.location.reload(false); } else { setErrorMessage("Полињата за наслов и содржина не смеат да бидат празни"); } }; const handleContentChange = (e) => { setTopicContent(e.target.value); }; const handleTitleChange = (e) => { setTopicTitle(e.target.value); }; return loaded ? ( <> »{" "} {subject.studyProgramme.faculty.university.universityName} {" "} »{" "} {subject.studyProgramme.faculty.facultyName} {" "} » {subject.subjectName} {subject.subjectName}
{subject.studyProgramme.studyProgrammeName} ( {subject.studyProgramme.cycle} {"."} {"циклус"}) {subject.studyProgramme.faculty.facultyName} {subject.studyProgramme.faculty.university.universityName}

{subject.threads.map((thread) => { if (thread.parent === null) { totalTopics++; topics.push(thread); } })} {totalTopics} {totalTopics !== 1 ? "теми" : "тема"}

{auth && ( Отвори тема )}
×

Тема во врска со {subject.subjectName}

{errorMessage}

ОБЈАВИ
{topics.map((topic) => { var numReplies = topic.children.length; return ( {topic.title} отворил:{" "} {topic.author.username} ,{" "} {numReplies !== 1 ? ( numReplies !== 0 ? ( {numReplies} {" "} реплики ) : ( {numReplies} {" "} реплики ) ) : ( {numReplies}{" "} реплика )} ); })}
) : !fetchError ? (

се вчитува...

) : (

Страницата не е пронајдена.

); }; export default Subject;