Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • reactapp/src/Pages/UserDashboard.js

    r3b6962d raf801e3  
     1/* eslint-disable no-unused-vars */
     2// noinspection JSUnresolvedVariable,ES6ConvertVarToLetConst,JSUnresolvedFunction,SpellCheckingInspection,JSUnusedLocalSymbols
     3
    14import React, { useEffect, useState, useContext } from "react";
    25import {
     
    2326    ModalInput
    2427} from "../Components/Styled/Modal.style";
     28import LoadingSpinner from "../Components/Styled/LoadingSpinner.style";
    2529
    2630function UserDashboard() {
     
    4044
    4145  const [newPostContent, setNewPostContent] = useState("");
    42   const [newPostTitle, setNewPostTitle] = 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);
    4356
    4457  const [markResolved, setMarkResolved] = useState(false);
     58
     59  const [errMsg, setErrMsg] = useState("");
    4560
    4661  const handleModalCloseClick = () => {
     
    5974      if (reportForModal.post !== null) {
    6075        setNewPostContent(reportForModal.post.content);
    61         if(reportForModal.post.title !== null) setNewPostTitle(reportForModal.post.title);
     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
    6279      }
    6380      setReportModalDisplay("block");
     
    6683  }, [reportForModal]);
    6784
     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
    68125  useEffect(() => {
    69     const url1 = `http://192.168.0.19:8080/secure/currentUser`;
    70     const url2 = `http://192.168.0.19:8080/secure/getAllPostReports`;
     126    const url1 = `http://192.168.0.29:8080/secure/currentUser`;
     127    const url2 = `http://192.168.0.29:8080/secure/getAllPostReports`;
    71128
    72129    const fetchUser = async () => {
     
    105162  // useEffect(() => {
    106163  //   const timer = setTimeout(() => {
    107   //     if (user === null) window.location.reload(false); <---- :-)
     164  //     if (user === null) window.location.reload(); <---- :-)
    108165  //   }, 3000);
    109166  //   return () => clearTimeout(timer);
     
    119176    try {
    120177      if(reportForModal.post !== null && reportForModal.post.targetProfessor !== undefined) {
    121         await axios(`http://192.168.0.19:8080/secure/updateOpinion/${reportForModal.post.postId}`,
     178        await axios(`http://192.168.0.29:8080/secure/updateOpinion/${reportForModal.post.postId}`,
    122179            {
    123180              method: "put",
     
    125182                newContent: newPostContent,
    126183                newTargetProfessorId: reportForModal.post.targetProfessor.professorId,
     184                newParentPostId: reportForModal.post.parent !== null ? reportForModal.post.parent.postId : "-1"
    127185              },
    128186              withCredentials: true,
    129187            })
    130         window.location.reload(false);
    131188      } else if(reportForModal.post !== null && reportForModal.post.targetProfessor === undefined) {
    132         await axios(`http://192.168.0.19:8080/secure/updateThread/${reportForModal.post.postId}`,
     189        await axios(`http://192.168.0.29:8080/secure/updateThread/${reportForModal.post.postId}`,
    133190            {
    134191              method: "put",
    135192              data: {
    136                 newTitle: newPostTitle,
     193                newTitle: newThreadTitle,
    137194                newContent: newPostContent,
    138                 newTargetSubjectId: reportForModal.post.targetSubject.subjectId
     195                newTargetSubjectId: reportForModal.post.targetSubject.subjectId,
     196                newParentThreadId: reportForModal.post.parent !== null ? reportForModal.post.parent.postId : "-1"
    139197              },
    140198              withCredentials: true,
    141199            })
    142         window.location.reload(false);
     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            })
    143265      }
    144266    } catch (error) {
    145267      setFetchError(true);
    146268    }
    147   }
    148 
    149   const handleDelete = (e) => {
    150     e.preventDefault();
     269    window.location.reload();
    151270  }
    152271
     
    181300      ) : (
    182301          <h3>Нема пријавени мислења</h3>
    183       ) : loadedUser && user.userRole==='MODERATOR' ? "се вчитува..." : ""}
     302      ) : loadedUser && user.userRole==='MODERATOR' ? <LoadingSpinner/> : ""}
    184303      <EntityUl style={{marginTop:"25px"}}>
    185304      {loadedPostReports && postReports.map((postReport) => {
     
    225344                  {dateConverter(
    226345                    new Date(post.timePosted).toString().slice(4, -43)
    227                   )}
     346                  )} <span style={{fontStyle:"normal",color:"blue"}}>#{post.postId}</span>
    228347                </OpinionCardContentTime>
    229348              </OpinionCardContent>
     
    287406                          {dateConverter(
    288407                              new Date(reportForModal.post.timePosted).toString().slice(4, -43)
    289                           )}
     408                          )} <span style={{fontStyle:"normal",color:"blue"}}>#{reportForModal.post.postId}</span>
    290409                        </OpinionCardContentTime>
    291410                      </OpinionCardContent>
     
    353472                  actionType === 0 ?
    354473              (<form onSubmit={e => handleEdit(e)}>
    355                 {reportForModal.post.title !== null && <label>
     474                {reportForModal.post.title !== null &&
     475                    <label>
    356476                  <b>Нов наслов на тема:</b>
    357477                  <ModalInput
    358                       value={newPostTitle}
    359                       onChange={e => setNewPostTitle(e.target.value)}
     478                      value={newThreadTitle}
     479                      onChange={e => setNewThreadTitle(e.target.value)}
    360480                      id="title"
    361481                      spellCheck={false}
     
    379499                  <input
    380500                      type="checkbox"
    381                       checked={markResolved}
    382501                      onChange={handleMarkResolved}
    383502                  />
     
    403522                          </form>)
    404523                          :
    405                           ("123")
    406                           : null
     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
    407608              }
    408609                </ModalBody>
     
    412613    </>
    413614  ) : (
    414     <>се вчитува...</>
     615      <LoadingSpinner/>
    415616  );
    416617}
Note: See TracChangeset for help on using the changeset viewer.