- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
reactapp/src/Pages/UserDashboard.js
raf801e3 r3b6962d 1 /* eslint-disable no-unused-vars */2 // noinspection JSUnresolvedVariable,ES6ConvertVarToLetConst,JSUnresolvedFunction,SpellCheckingInspection,JSUnusedLocalSymbols3 4 1 import React, { useEffect, useState, useContext } from "react"; 5 2 import { … … 26 23 ModalInput 27 24 } from "../Components/Styled/Modal.style"; 28 import LoadingSpinner from "../Components/Styled/LoadingSpinner.style";29 25 30 26 function UserDashboard() { … … 44 40 45 41 const [newPostContent, setNewPostContent] = useState(""); 46 const [newOpinionTargetProfessorId, setNewOpinionTargetProfessorId] = useState(""); 47 const [newOpinionTargetProfessor, setNewOpinionTargetProfessor] = useState(null); 48 const [loadedNewProfessor,setLoadedNewProfessor] = useState(false); 49 const [newParentPostId, setNewParentPostId] = useState("-1"); 50 51 const [newThreadTitle, setNewThreadTitle] = useState(""); 52 const [newParentThreadId,setNewParentThreadId] = useState("-1"); 53 const [newTargetSubjectId, setNewTargetSubjectId] = useState(""); 54 const [newTargetSubject, setNewTargetSubject] = useState(null); 55 const [loadedNewSubject, setLoadedNewSubject] = useState(null); 42 const [newPostTitle, setNewPostTitle] = useState(""); 56 43 57 44 const [markResolved, setMarkResolved] = useState(false); 58 59 const [errMsg, setErrMsg] = useState("");60 45 61 46 const handleModalCloseClick = () => { … … 74 59 if (reportForModal.post !== null) { 75 60 setNewPostContent(reportForModal.post.content); 76 if(reportForModal.post.title !== null) setNewThreadTitle(reportForModal.post.title); 77 if(reportForModal.post.targetProfessor !== undefined) setNewOpinionTargetProfessorId(reportForModal.post.targetProfessor.professorId); //prvicnoto 78 if(reportForModal.post.targetProfessor === undefined) setNewTargetSubjectId(reportForModal.post.targetSubject.subjectId); //prvicnoto 61 if(reportForModal.post.title !== null) setNewPostTitle(reportForModal.post.title); 79 62 } 80 63 setReportModalDisplay("block"); … … 83 66 }, [reportForModal]); 84 67 85 const[loadingProf, setLoadingProf] = useState(false);86 87 const handleNewTargetProfessorChange = async (e) => {88 setLoadingProf(true);89 e.preventDefault();90 if (newOpinionTargetProfessorId!=="") {91 try {92 const response = await axios.get(`http://192.168.0.29:8080/public/professor/${newOpinionTargetProfessorId}`, {withCredentials: true});93 let cyclicGraph = await response.data;94 var jsogStructure = JSOG.encode(cyclicGraph);95 cyclicGraph = JSOG.decode(jsogStructure);96 setNewOpinionTargetProfessor(cyclicGraph);97 setLoadedNewProfessor(true);98 setLoadingProf(false);99 } catch (error) {100 setFetchError(true);101 }102 }103 }104 105 const[loadingSubj, setLoadingSubj] = useState(false);106 107 const handleNewTargetSubjectChange = async (e) => {108 e.preventDefault();109 setLoadingSubj(true);110 if (newTargetSubjectId!=="") {111 try {112 const response = await axios.get(`http://192.168.0.29:8080/public/subject/${newTargetSubjectId}`, {withCredentials: true});113 let cyclicGraph = await response.data;114 var jsogStructure = JSOG.encode(cyclicGraph);115 cyclicGraph = JSOG.decode(jsogStructure);116 setNewTargetSubject(cyclicGraph);117 setLoadedNewSubject(true);118 setLoadingSubj(false);119 } catch (error) {120 setFetchError(true);121 }122 }123 }124 125 68 useEffect(() => { 126 const url1 = `http://192.168.0. 29:8080/secure/currentUser`;127 const url2 = `http://192.168.0. 29:8080/secure/getAllPostReports`;69 const url1 = `http://192.168.0.19:8080/secure/currentUser`; 70 const url2 = `http://192.168.0.19:8080/secure/getAllPostReports`; 128 71 129 72 const fetchUser = async () => { … … 162 105 // useEffect(() => { 163 106 // const timer = setTimeout(() => { 164 // if (user === null) window.location.reload( ); <---- :-)107 // if (user === null) window.location.reload(false); <---- :-) 165 108 // }, 3000); 166 109 // return () => clearTimeout(timer); … … 176 119 try { 177 120 if(reportForModal.post !== null && reportForModal.post.targetProfessor !== undefined) { 178 await axios(`http://192.168.0. 29:8080/secure/updateOpinion/${reportForModal.post.postId}`,121 await axios(`http://192.168.0.19:8080/secure/updateOpinion/${reportForModal.post.postId}`, 179 122 { 180 123 method: "put", … … 182 125 newContent: newPostContent, 183 126 newTargetProfessorId: reportForModal.post.targetProfessor.professorId, 184 newParentPostId: reportForModal.post.parent !== null ? reportForModal.post.parent.postId : "-1"185 127 }, 186 128 withCredentials: true, 187 129 }) 130 window.location.reload(false); 188 131 } else if(reportForModal.post !== null && reportForModal.post.targetProfessor === undefined) { 189 await axios(`http://192.168.0. 29:8080/secure/updateThread/${reportForModal.post.postId}`,132 await axios(`http://192.168.0.19:8080/secure/updateThread/${reportForModal.post.postId}`, 190 133 { 191 134 method: "put", 192 135 data: { 193 newTitle: new ThreadTitle,136 newTitle: newPostTitle, 194 137 newContent: newPostContent, 195 newTargetSubjectId: reportForModal.post.targetSubject.subjectId, 196 newParentThreadId: reportForModal.post.parent !== null ? reportForModal.post.parent.postId : "-1" 138 newTargetSubjectId: reportForModal.post.targetSubject.subjectId 197 139 }, 198 140 withCredentials: true, 199 141 }) 200 } 201 await axios(`http://192.168.0.29:8080/secure/markReportResolved/${reportForModal.postReportId}/${markResolved ? `resolve` : `open`}`,{ 202 method: "get", 203 withCredentials: true 204 }) 205 } catch (error) { 206 setFetchError(true); 207 } 208 window.location.reload(); 209 } 210 211 const handleRelocate = async (e) => { 212 e.preventDefault(); 213 try { 214 if(reportForModal.post !== null && reportForModal.post.targetProfessor !== undefined) { 215 var response = await axios(`http://192.168.0.29:8080/secure/updateOpinion/${reportForModal.post.postId}`, 216 { 217 method: "put", 218 data: { 219 newContent: reportForModal.post.content, 220 newTargetProfessorId: newOpinionTargetProfessorId, 221 newParentPostId: newParentPostId==="Постави како самостојно мислење" ? "-1" : newParentPostId //:) 222 }, 223 withCredentials: true, 224 }) 225 } else if(reportForModal.post !== null && reportForModal.post.targetProfessor === undefined) { 226 var response = await axios(`http://192.168.0.29:8080/secure/updateThread/${reportForModal.post.postId}`, 227 { 228 method: "put", 229 data: { 230 newTitle: newThreadTitle, 231 newContent: reportForModal.post.content, 232 newTargetSubjectId: newTargetSubjectId, 233 newParentThreadId: newParentThreadId==="Постави како самостојно мислење (нова тема)" ? "-1" : newParentThreadId //:) 234 }, 235 withCredentials: true, 236 }) 237 } 238 await axios(`http://192.168.0.29:8080/secure/markReportResolved/${reportForModal.postReportId}/${markResolved ? `resolve` : `open`}`,{ 239 method: "get", 240 withCredentials: true 241 }) 242 } catch (error) { 243 setFetchError(true); 244 } 245 setErrMsg(response.data); 246 if (response.data==="") window.location.reload(); 247 } 248 249 const handleDelete = async (e) => { 250 e.preventDefault(); 251 try { 252 if(reportForModal.post !== null && reportForModal.post.targetProfessor !== undefined) { 253 await axios(`http://192.168.0.29:8080/secure/deleteOpinion/${reportForModal.post.postId}`, 254 { 255 method: "delete", 256 withCredentials: true, 257 }) 258 window.location.reload(); 259 } else if(reportForModal.post !== null && reportForModal.post.targetProfessor === undefined) { 260 await axios(`http://192.168.0.29:8080/secure/deleteThread/${reportForModal.post.postId}`, 261 { 262 method: "delete", 263 withCredentials: true, 264 }) 142 window.location.reload(false); 265 143 } 266 144 } catch (error) { 267 145 setFetchError(true); 268 146 } 269 window.location.reload(); 147 } 148 149 const handleDelete = (e) => { 150 e.preventDefault(); 270 151 } 271 152 … … 300 181 ) : ( 301 182 <h3>Нема пријавени мислења</h3> 302 ) : loadedUser && user.userRole==='MODERATOR' ? <LoadingSpinner/>: ""}183 ) : loadedUser && user.userRole==='MODERATOR' ? "се вчитува..." : ""} 303 184 <EntityUl style={{marginTop:"25px"}}> 304 185 {loadedPostReports && postReports.map((postReport) => { … … 344 225 {dateConverter( 345 226 new Date(post.timePosted).toString().slice(4, -43) 346 )} <span style={{fontStyle:"normal",color:"blue"}}>#{post.postId}</span>227 )} 347 228 </OpinionCardContentTime> 348 229 </OpinionCardContent> … … 406 287 {dateConverter( 407 288 new Date(reportForModal.post.timePosted).toString().slice(4, -43) 408 )} <span style={{fontStyle:"normal",color:"blue"}}>#{reportForModal.post.postId}</span>289 )} 409 290 </OpinionCardContentTime> 410 291 </OpinionCardContent> … … 472 353 actionType === 0 ? 473 354 (<form onSubmit={e => handleEdit(e)}> 474 {reportForModal.post.title !== null && 475 <label> 355 {reportForModal.post.title !== null && <label> 476 356 <b>Нов наслов на тема:</b> 477 357 <ModalInput 478 value={new ThreadTitle}479 onChange={e => setNew ThreadTitle(e.target.value)}358 value={newPostTitle} 359 onChange={e => setNewPostTitle(e.target.value)} 480 360 id="title" 481 361 spellCheck={false} … … 499 379 <input 500 380 type="checkbox" 381 checked={markResolved} 501 382 onChange={handleMarkResolved} 502 383 /> … … 522 403 </form>) 523 404 : 524 (reportForModal.post.targetProfessor !== undefined ? 525 (<form onSubmit={e => handleRelocate(e)}> 526 <p style={{color:"black"}}>Внеси <span style={{fontWeight:"bold"}}>ID</span> на секцијата за дискусија (за <span style={{fontWeight:"bold"}}>професор</span>) 527 во која треба да биде преместено мислењето:</p> 528 <div style={{marginTop:"15px"}}> 529 <label> 530 <ModalInput 531 value={newOpinionTargetProfessorId} 532 onChange={e => {e.preventDefault();setNewOpinionTargetProfessorId(e.target.value)}} 533 id="newOpinionTargetProfessorId" 534 spellCheck={false} 535 style={{marginTop:"10px", marginBottom:"10px", width:"90px"}} 536 /> 537 <button onClick={async (e) => {await handleNewTargetProfessorChange(e);}} style={{marginBottom:"10px", padding:"5px", fontFamily: "Roboto Mono, monospace"}}>Зачувај</button> 538 {newOpinionTargetProfessor!==null && !loadingProf ? <p style={{color:"black", marginBottom:"20px", opacity:"50%"}}>Мислењето ќе се премести во секцијата за професорот со <span style={{fontWeight:"bold"}}>ID= 539 {newOpinionTargetProfessor.professorId}</span> (<span style={{fontWeight:"bold"}}>{newOpinionTargetProfessor.professorName}</span>)</p> : loadingProf ? <LoadingSpinner style={{marginBottom:"15px", marginTop:"15px"}}/> : null} 540 {newOpinionTargetProfessor && <p style={{color:"black", marginBottom:"10px"}}>Постави како дете на мислење со ID:</p>} 541 {newOpinionTargetProfessor && 542 <select value={newParentPostId} onChange={e => setNewParentPostId(e.target.value)} style={{width:"280px", display:"block", padding:"5px",marginBottom:"5px", fontFamily: "Roboto Mono, monospace"}}> 543 <option value="-1">Постави како самостојно мислење</option> 544 {newOpinionTargetProfessor.relatedOpinions.filter((opinion)=>opinion.postId!==reportForModal.post.postId).map((opinion) => { 545 return <option key={opinion.postId} value={opinion.postId}>{opinion.postId}</option>}) 546 } 547 </select>} 548 <br/> 549 <input 550 type="checkbox" 551 defaultChecked={reportForModal.resolved} 552 onChange={handleMarkResolved} 553 /> 554 <span style={{marginLeft:"10px", fontWeight:"bold"}}>Означи како разрешено</span> 555 </label> 556 </div> 557 {errMsg!=="" && <p style={{color:"red", display:"flex", justifyContent:"space-around"}}>{errMsg}</p>} 558 <ModalFooter type="submit">ПОТВРДИ</ModalFooter> 559 </form>) : 560 //THREAD CASE 561 (<form onSubmit={e => handleRelocate(e)}> 562 <p style={{color:"black"}}>Внеси <span style={{fontWeight:"bold"}}>ID</span> на секцијата за дискусија (за <span style={{fontWeight:"bold"}}>предмет</span>) 563 во која треба да биде преместено мислењето:</p> 564 <div style={{marginTop:"15px"}}> 565 <label> 566 <ModalInput 567 value={newTargetSubjectId} 568 onChange={e => {e.preventDefault();setNewTargetSubjectId(e.target.value)}} 569 id="newTargetSubjectId" 570 spellCheck={false} 571 style={{marginTop:"10px", marginBottom:"10px", width:"90px"}} 572 /> 573 <button onClick={async (e) => {await handleNewTargetSubjectChange(e);}} style={{marginBottom:"10px", padding:"5px", fontFamily: "Roboto Mono, monospace"}}>Зачувај</button> 574 {newTargetSubject!==null && !loadingSubj ? <p style={{color:"black", marginBottom:"20px", opacity:"50%"}}>Мислењето ќе се премести во секцијата за предметот со <span style={{fontWeight:"bold"}}>ID= 575 {newTargetSubject.subjectId}</span> (<span style={{fontWeight:"bold"}}>{newTargetSubject.subjectName}</span>)</p> : loadingSubj ? <LoadingSpinner style={{marginBottom:"15px", marginTop:"15px"}}/> : null} 576 {newTargetSubject && <p style={{color:"black", marginBottom:"10px"}}>Постави како дете на мислење со ID:</p>} 577 {newTargetSubject && 578 <select value={newParentThreadId} onChange={e => setNewParentThreadId(e.target.value)} style={{width:"370px", display:"block", padding:"5px",marginBottom:"5px", fontFamily: "Roboto Mono, monospace"}}> 579 <option value="-1">Постави како самостојно мислење (нова тема)</option> 580 {newTargetSubject.threads.filter((thread)=>thread.postId!==reportForModal.post.postId).map((thread) => { 581 return <option key={thread.postId} value={thread.postId}>{thread.postId}</option>}) 582 } 583 </select>} 584 {newParentThreadId==="-1" && loadedNewSubject && 585 <> 586 <p style={{marginTop:"10px"}}>Наслов на нова тема:</p> 587 <ModalInput 588 value={newThreadTitle} 589 onChange={e => setNewThreadTitle(e.target.value)} 590 id="titleChangeRelocate" 591 spellCheck={false} 592 style={{marginTop:"10px"}} 593 /> 594 </>} 595 <br/> 596 <input 597 type="checkbox" 598 defaultChecked={reportForModal.resolved} 599 onChange={handleMarkResolved} 600 /> 601 <span style={{marginLeft:"10px", fontWeight:"bold"}}>Означи како разрешено</span> 602 </label> 603 </div> 604 {errMsg!=="" && <p style={{color:"red", display:"flex", justifyContent:"space-around"}}>{errMsg}</p>} 605 <ModalFooter type="submit">ПОТВРДИ</ModalFooter> 606 </form>)) 607 : null 405 ("123") 406 : null 608 407 } 609 408 </ModalBody> … … 613 412 </> 614 413 ) : ( 615 <LoadingSpinner/>414 <>се вчитува...</> 616 415 ); 617 416 }
Note:
See TracChangeset
for help on using the changeset viewer.