Index: reactapp/src/Pages/Topic.js
===================================================================
--- reactapp/src/Pages/Topic.js	(revision af801e3ae2a87e526d2053085fdbb077aafd6741)
+++ reactapp/src/Pages/Topic.js	(revision 9bf1f8db5dd66185ddc4f7d093582ff73006f66b)
@@ -43,12 +43,18 @@
   const [postModalDisplay, setPostModalDisplay] = useState("none");
   const [postContent, setPostContent] = useState("");
+
   const [replyModalDisplay, setReplyModalDisplay] = useState("none");
   const [replyContent, setReplyContent] = useState("");
-  const [postForModal, setPostForModal] = useState(null);
+  const [postForReplyModal, setPostForReplyModal] = useState(null);
+
+  const [reportModalDisplay, setReportModalDisplay] = useState("none");
+  const [reportContent, setReportContent] = useState("");
+  const [postForReportModal, setPostForReportModal] = useState(null);
+
   const [errorMessage, setErrorMessage] = useState("");
 
   useEffect(() => {
-    const url1 = `http://192.168.0.29:8080/public/thread/${params.topicId}`;
-    const url2 = `http://192.168.0.29:8080/secure/currentUser`;
+    const url1 = `http://192.168.1.254:8080/public/thread/${params.topicId}`;
+    const url2 = `http://192.168.1.254:8080/secure/currentUser`;
 
     const fetchTopic = async () => {
@@ -79,10 +85,20 @@
 
     fetchTopic().then(fetchUser);
-  }, []);
+  }, [loadedThread]);
 
   const handleReply = (post) => {
     if (auth) {
       setReplyModalDisplay("block");
-      setPostForModal(post);
+      setPostForReplyModal(post);
+      document.body.style.overflowY = "hidden";
+    } else {
+      navigate("/login");
+    }
+  };
+
+  const handleReport = (post) => {
+    if (auth) {
+      setReportModalDisplay("block");
+      setPostForReportModal(post);
       document.body.style.overflowY = "hidden";
     } else {
@@ -95,4 +111,9 @@
   };
 
+  const handleReportContentChange = (e) => {
+    e.preventDefault();
+    setReportContent(e.target.value);
+  };
+
   const handleReplySubmit = async (e, postId) => {
     e.preventDefault();
@@ -100,5 +121,5 @@
     if (!replyContent.length < 1) {
       const response = await axios(
-        `http://192.168.0.29:8080/secure/subject/${thread.targetSubject.subjectId}/replyToThread/${postId}`,
+        `http://192.168.1.254:8080/secure/subject/${thread.targetSubject.subjectId}/replyToThread/${postId}`,
         {
           method: "post",
@@ -116,4 +137,25 @@
   };
 
+  const handleReportSubmit = async (e, postId) => {
+    e.preventDefault();
+
+    if (!reportContent.length < 1) {
+      const response = await axios(
+          `http://192.168.1.254:8080/secure/reportThread/${postId}`,
+          {
+            method: "post",
+            data: {
+              description: reportContent,
+            },
+            withCredentials: true,
+          }
+      );
+      setErrorMessage("");
+      window.location.reload();
+    } else {
+      setErrorMessage("Полето за содржина не смее да биде празно");
+    }
+  };
+
   const handleAddOpinionButtonClick = () => {
     if (auth) {
@@ -129,5 +171,5 @@
     if (!postContent.length < 1) {
       const response = await axios(
-        `http://192.168.0.29:8080/secure/subject/${thread.targetSubject.subjectId}/replyToThread/${params.topicId}`,
+        `http://192.168.1.254:8080/secure/subject/${thread.targetSubject.subjectId}/replyToThread/${params.topicId}`,
         {
           method: "post",
@@ -147,4 +189,5 @@
     setPostModalDisplay("none");
     setReplyModalDisplay("none");
+    setReportModalDisplay("none");
     document.body.style.overflowY = "auto";
   };
@@ -161,5 +204,5 @@
       ) {
         const response = await axios(
-          `http://192.168.0.29:8080/secure/upvoteThread/${post.postId}`,
+          `http://192.168.1.254:8080/secure/upvoteThread/${post.postId}`,
           {
             method: "get",
@@ -184,5 +227,5 @@
       ) {
         const response = await axios(
-          `http://192.168.0.29:8080/secure/downvoteThread/${post.postId}`,
+          `http://192.168.1.254:8080/secure/downvoteThread/${post.postId}`,
           {
             method: "get",
@@ -280,4 +323,11 @@
                 color="darkgrey"
                 onClick={() => handleReply(child)}
+              />
+
+              <StyledFontAwesomeIcon
+                  icon={solid("flag")}
+                  right={130 + "px"}
+                  color="darkgrey"
+                  onClick={() => handleReport(child)}
               />
             </div>
@@ -393,4 +443,10 @@
           >
             <StyledFontAwesomeIcon
+                icon={solid("flag")}
+                right={90 + "px"}
+                color="darkgrey"
+                onClick={() => handleReport(thread)}
+            />
+            <StyledFontAwesomeIcon
               icon={solid("thumbs-up")}
               right={50 + "px"}
@@ -517,4 +573,11 @@
                   onClick={() => handleReply(directChild)}
                 />
+
+                <StyledFontAwesomeIcon
+                    icon={solid("flag")}
+                    right={130 + "px"}
+                    color="darkgrey"
+                    onClick={() => handleReport(directChild)}
+                />
               </div>
             </OpinionCardContent>
@@ -525,5 +588,5 @@
         );
       })}
-      {postForModal && (
+      {postForReplyModal && (
         <Modal display={replyModalDisplay}>
           <ModalContent>
@@ -531,8 +594,8 @@
               <ModalClose onClick={handleModalCloseClick}>&times;</ModalClose>
               <h3 style={{ marginTop: "5px" }}>
-                Реплика на {postForModal.author.username}
+                Реплика на {postForReplyModal.author.username}
               </h3>
             </ModalHeader>
-            <form onSubmit={(e) => handleReplySubmit(e, postForModal.postId)}>
+            <form onSubmit={(e) => handleReplySubmit(e, postForReplyModal.postId)}>
               <ModalBody>
                 <label htmlFor="content">
@@ -557,4 +620,36 @@
         </Modal>
       )}
+      {postForReportModal && (
+          <Modal display={reportModalDisplay}>
+            <ModalContent>
+              <ModalHeader>
+                <ModalClose onClick={handleModalCloseClick}>&times;</ModalClose>
+                <h3 style={{ marginTop: "5px" }}>
+                  Пријава за мислење #{postForReportModal.postId}
+                </h3>
+              </ModalHeader>
+              <form onSubmit={(e) => handleReportSubmit(e, postForReportModal.postId)}>
+                <ModalBody>
+                  <label htmlFor="content">
+                    <b>Наведете причина</b>:
+                    <ModalTextarea
+                        id="content"
+                        rows="8"
+                        cols="100"
+                        value={reportContent}
+                        onChange={handleReportContentChange}
+                    />
+                  </label>
+                </ModalBody>
+                <p
+                    style={{ color: "red", marginLeft: "15px", marginTop: "10px" }}
+                >
+                  {errorMessage}
+                </p>
+                <ModalFooter type="submit">ПРИЈАВИ</ModalFooter>
+              </form>
+            </ModalContent>
+          </Modal>
+      )}
     </>
   ) : !fetchError && !loadedThread ? (
