source: reactapp/src/Pages/Faculty.js@ 3b6962d

main
Last change on this file since 3b6962d was 3b6962d, checked in by unknown <mlviktor23@…>, 20 months ago

moderation/reporting api in spring boot

  • Property mode set to 100644
File size: 7.9 KB
Line 
1import React, { useState, useEffect } from "react";
2import { useParams, Outlet } from "react-router-dom";
3import JSOG from "jsog";
4import {
5 ProfessorCard,
6 ProfessorCardName,
7 ProfessorCardSeparator,
8 ProfessorCardDetails,
9} from "../Components/Styled/ProfessorCard.style";
10import {
11 EntityUl,
12 EntityLi,
13 EntityParam,
14 EntityTypeSelector,
15} from "../Components/Styled/EntityList.style";
16import SubjectsAccordion from "../Components/SubjectsAccordion";
17import { CurrentPageNav } from "../Components/Styled/Main.style";
18
19const Faculty = () => {
20 let params = useParams();
21 const [loadedProfessors, setLoadedProfessors] = useState(false);
22 const [loadedStudyProgrammes, setLoadedStudyProgrammes] = useState(false);
23 const [professors, setProfessors] = useState(null);
24 const [studyProgrammes, setStudyProgrammes] = useState(null);
25 const [fetchError, setFetchError] = useState(false);
26 const [entityType, setEntityType] = useState(0);
27
28 useEffect(() => {
29 const urlProfessors = `http://192.168.0.19:8080/public/professors?facultyId=${params.facultyId}`;
30 const urlStudyProgrammes = `http://192.168.0.19:8080/public/study_programmes?facultyId=${params.facultyId}`;
31
32 const fetchDataProfessors = async () => {
33 try {
34 const response = await fetch(urlProfessors);
35 let cyclicGraph = await response.json();
36 let jsogStructure = JSOG.encode(cyclicGraph);
37 cyclicGraph = JSOG.decode(jsogStructure);
38 setProfessors(cyclicGraph);
39 setLoadedProfessors(true);
40 } catch (error) {
41 setFetchError(true);
42 }
43 };
44
45 const fetchDataStudyProgrammes = async () => {
46 try {
47 const response2 = await fetch(urlStudyProgrammes);
48 let cyclicGraph2 = await response2.json();
49 let jsogStructure2 = JSOG.encode(cyclicGraph2);
50 cyclicGraph2 = JSOG.decode(jsogStructure2);
51 setStudyProgrammes(cyclicGraph2);
52 setLoadedStudyProgrammes(true);
53 } catch (error) {
54 setFetchError(true);
55 }
56 };
57
58 fetchDataProfessors();
59 fetchDataStudyProgrammes();
60 }, [params.facultyId]);
61
62 return loadedProfessors && professors.length != 0 ? (
63 entityType === 0 ? (
64 <>
65 <CurrentPageNav>
66 &#187;{" "}
67 <a
68 href={
69 "/university/" + professors[0].faculty.university.universityId
70 }
71 >
72 {professors[0].faculty.university.universityName}
73 </a>{" "}
74 &#187; <a href="#">{professors[0].faculty.facultyName}</a>
75 </CurrentPageNav>
76 <ProfessorCard>
77 <ProfessorCardName>
78 {professors[0].faculty.facultyName}
79 </ProfessorCardName>
80 <ProfessorCardSeparator />
81 <ProfessorCardDetails fontSize="20px">
82 {professors[0].faculty.university.universityName}
83 </ProfessorCardDetails>
84 </ProfessorCard>
85 <div style={{ display: "flex" }}>
86 <EntityTypeSelector
87 backgroundcolor="rgba(0, 102, 204, 1)"
88 color="white"
89 boxshadow="none"
90 boxshadowhover="none"
91 opacityhover="0.6"
92 cursor="auto"
93 >
94 Прикажи професори
95 </EntityTypeSelector>
96 <EntityTypeSelector
97 boxshadow="2px 2px 5px #aaaaaa"
98 cursor="pointer"
99 boxshadowhover="2px 2px 10px #aaaaaa"
100 opacityhover="1"
101 onClick={() => setEntityType(1)}
102 >
103 Прикажи предмети
104 </EntityTypeSelector>
105 </div>
106 <div key={params.facultyId}>
107 {professors.map((professor) => {
108 let totalPosts = professor.relatedOpinions.length;
109
110 return (
111 <EntityUl key={professor.professorId}>
112 <EntityLi bgcolor="cornsilk">
113 <a href={"/professor/" + professor.professorId}>
114 {professor.professorName}
115 </a>
116 <EntityParam right="30px">
117 {totalPosts !== 1 ? (
118 totalPosts !== 0 ? (
119 <span
120 style={{
121 fontWeight: "normal",
122 opacity: totalPosts === 0 ? "0.5" : "1",
123 }}
124 >
125 <span
126 style={{
127 fontWeight: "bold",
128 opacity: totalPosts === 0 ? "0.5" : "1",
129 }}
130 >
131 {totalPosts}
132 </span>{" "}
133 мислења
134 </span>
135 ) : (
136 <span
137 style={{
138 fontWeight: "normal",
139 opacity: totalPosts === 0 ? "0.5" : "1",
140 }}
141 >
142 <span
143 style={{
144 fontWeight: "bold",
145 opacity: totalPosts === 0 ? "0.5" : "1",
146 }}
147 >
148 {totalPosts}
149 </span>{" "}
150 мислења
151 </span>
152 )
153 ) : (
154 <span style={{ fontWeight: "normal" }}>
155 <span style={{ fontWeight: "bold" }}>{totalPosts}</span>{" "}
156 мислење
157 </span>
158 )}
159 </EntityParam>
160 </EntityLi>
161 </EntityUl>
162 );
163 })}
164 </div>
165 </>
166 ) : (
167 loadedStudyProgrammes && (
168 <>
169 <CurrentPageNav>
170 &#187;{" "}
171 <a
172 href={
173 "/university/" + professors[0].faculty.university.universityId
174 }
175 >
176 {professors[0].faculty.university.universityName}
177 </a>{" "}
178 &#187; <a href="#">{professors[0].faculty.facultyName}</a>
179 </CurrentPageNav>
180 <ProfessorCard>
181 <ProfessorCardName>
182 {professors[0].faculty.facultyName}
183 </ProfessorCardName>
184 <ProfessorCardSeparator />
185 <ProfessorCardDetails fontSize="20px">
186 {professors[0].faculty.university.universityName}
187 </ProfessorCardDetails>
188 </ProfessorCard>
189 <div style={{ display: "flex" }}>
190 <EntityTypeSelector
191 boxshadow="2px 2px 5px #aaaaaa"
192 cursor="pointer"
193 boxshadowhover="2px 2px 10px #aaaaaa"
194 opacityhover="1"
195 onClick={() => setEntityType(0)}
196 >
197 Прикажи професори
198 </EntityTypeSelector>
199 <EntityTypeSelector
200 backgroundcolor="rgba(0, 102, 204, 1)"
201 color="white"
202 boxshadow="none"
203 boxshadowhover="none"
204 opacityhover="0.6"
205 cursor="auto"
206 >
207 Прикажи предмети
208 </EntityTypeSelector>
209 </div>
210 <div key={params.facultyId}>
211 {studyProgrammes.map((studyProgramme) => {
212 return (
213 <SubjectsAccordion
214 key={studyProgramme.studyProgrammeId}
215 title={studyProgramme}
216 content={studyProgramme.subjects}
217 ></SubjectsAccordion>
218 );
219 })}
220 </div>
221 </>
222 )
223 )
224 ) : !fetchError && !loadedProfessors ? (
225 <div>
226 <p style={{ marginTop: "140px" }}>се вчитува...</p>
227 <Outlet />
228 </div>
229 ) : (
230 <div style={{ marginTop: "140px" }}>
231 <h1 style={{ textAlign: "center" }}>Страницата не е пронајдена.</h1>
232 </div>
233 );
234};
235
236export default Faculty;
Note: See TracBrowser for help on using the repository browser.