diff --git a/client/src/components/QAComponents/Answer.jsx b/client/src/components/QAComponents/Answer.jsx
index f579c4a..a69e3ae 100644
--- a/client/src/components/QAComponents/Answer.jsx
+++ b/client/src/components/QAComponents/Answer.jsx
@@ -2,11 +2,10 @@ import { Button, ButtonGroup, ListItem, ListItemText, Tooltip } from '@mui/mater
import CheckIcon from '@mui/icons-material/Check';
import ReactMarkdown from 'react-markdown';
import CreationInfoTag from 'components/CreationInfoTag';
-import { useUser } from 'contexts';
-import { AnswerCommentsList, CommentControl, VoteControl } from 'controllers/QAControllers';
-import { getAnswerVote, updateAcceptAnswer, updateAnswerVote, updateQuestion } from 'services/questionsServices';
import { useQuestion } from 'contexts';
-import { postQuestionComment, postAnswerComment } from 'services/questionsServices';
+import { AnswerCommentsList, CommentControl, VoteControl } from 'controllers/QAControllers';
+import { getAnswerVote, postAnswerComment, updateAcceptAnswer, updateAnswerVote } from 'services/questionsServices';
+
export default function Answer({
accepted,
answer_id,
@@ -18,19 +17,17 @@ export default function Answer({
text,
upvotes,
}) {
- const { userData: { level, username } } = useUser();
-
- const getVote = () => getAnswerVote(question_id, answer_id);
- const updateVote = (data) => updateAnswerVote(question_id, answer_id, data);
-
- const {permissions} = useQuestion();
+ const { permissions } = useQuestion();
let canVote = permissions.canVote;
let canComment = permissions.canComment;
let canAccept = permissions.canAccept;
+
+ const getVote = () => getAnswerVote(question_id, answer_id);
+ const updateVote = (data) => updateAnswerVote(question_id, answer_id, data);
- function acceptAnswer(){
+ function acceptAnswer() {
updateAcceptAnswer(question_id, answer_id)
-
+
}
const postComment = (data) => postAnswerComment(question_id, answer_id, data);
@@ -52,8 +49,14 @@ export default function Answer({
{text}
-
-
+
+ {canAccept && (
+
+
+
+ )}
diff --git a/client/src/components/QAComponents/Question.jsx b/client/src/components/QAComponents/Question.jsx
index 93ec606..0129390 100644
--- a/client/src/components/QAComponents/Question.jsx
+++ b/client/src/components/QAComponents/Question.jsx
@@ -8,14 +8,14 @@ import {
Button,
Tooltip,
} from '@mui/material';
-import ReactMarkdown from 'react-markdown';
-import { CreationInfoTag } from 'controllers';
-import { CommentControl, VoteControl } from 'controllers/QAControllers';
-import { getQuestionVote, postQuestionComment,openQuestion,protectQuestion , updateQuestion, closeQuestion, updateQuestionVote } from 'services/questionsServices';
-import { Link } from 'react-router-dom';
import { useEffect, useState } from 'react';
+import ReactMarkdown from 'react-markdown';
+import { Link } from 'react-router-dom';
import { useQuestion, useUser } from 'contexts';
-import CreateAnswer from './CreateAnswer';
+import { CreationInfoTag } from 'controllers';
+import { CommentControl, CreateAnswer, VoteControl } from 'controllers/QAControllers';
+import { getQuestionVote, postQuestionComment, openQuestion, protectQuestion, updateQuestion, closeQuestion, updateQuestionVote } from 'services/questionsServices';
+
const statusColor = (status) => {
switch (status) {
case 'open':
@@ -31,37 +31,37 @@ const statusColor = (status) => {
export default function Question({
answers,
+ close,
comments,
creator,
createdAt,
downvotes,
hasAcceptedAnswer,
+ protect,
+ reopen,
status,
title,
text,
question_id,
upvotes,
- views,
- protect,
- close,
- reopen
+ views
}) {
-
- const {userData} = useUser();
+
+ const { userData } = useUser();
const [ongoingVote, setOngoingVote] = useState({})
- const {setPermissions} = useQuestion();
-
- function setVote(){
- if(protect.length > 0){setOngoingVote({users : protect, type : "protect"})}
- if(close.length > 0){setOngoingVote({users : close, type : "close"})}
- if(reopen.length > 0){setOngoingVote({users : reopen, type : "open"})}
- }
+ const { setPermissions } = useQuestion();
+
+ function setVote() {
+ if (protect.length) setOngoingVote({ users: protect, type: 'protect' })
+ if (close.length) setOngoingVote({ users: close, type: 'close' })
+ if (reopen.length) setOngoingVote({ users: reopen, type: 'open' })
+ }
+
-
let level = 0;
- let protection = false;
+ const protection = status === 'protected' || status === 'closed';
let canProtect = false;
let canClose = false;
@@ -69,47 +69,44 @@ export default function Question({
let canAnswer = true;
let canVote = true;
let canAccept = false;
-
-
- if(userData.username){
+ if (userData.username) {
level = userData.level;
- if(status === 'protected' || status === 'closed'){protection = true;}
- if(userData.username === creator && !hasAcceptedAnswer){canAccept = true}
- if(level >= 7 && ongoingVote.type !== "protect"){canClose = true}
- if(level >= 6 && !protection && ongoingVote.type !== "close"){canProtect = true}
- if((level >= 3 && !protection) || (status === 'protected' && level >= 5) || (userData.username === creator)){canComment = true}
- if((status === 'protected' && level < 5) || status === 'closed'){canAnswer = false}
- if(status === 'closed' || level < 2){canVote = false}
- }else{
+ if (userData.username === creator && !hasAcceptedAnswer) { canAccept = true }
+ if (level >= 7 && ongoingVote.type !== "protect") { canClose = true }
+ if (level >= 6 && !protection && ongoingVote.type !== "close") { canProtect = true }
+ if ((level >= 3 && !protection) || (status === 'protected' && level >= 5) || (userData.username === creator)) { canComment = true }
+ if ((status === 'protected' && level < 5) || status === 'closed') { canAnswer = false }
+ if (status === 'closed' || level < 2) { canVote = false }
+ } else {
canAnswer = false;
}
- useEffect(()=>{
- setPermissions({canVote: canVote, canComment: canComment, canAccept: canAccept })
+ useEffect(() => {
+ setPermissions({ canVote: canVote, canComment: canComment, canAccept: canAccept })
setVote();
- },[canVote, canComment, canAccept])
+ }, [canVote, canComment, canAccept])
- useEffect(()=>{
- updateQuestion(question_id, {views: "increment"})
- },[])
+ useEffect(() => {
+ updateQuestion(question_id, { views: "increment" })
+ }, [])
- function changeProtect(){
+ function changeProtect() {
protectQuestion(question_id, userData)
}
- function changeClose(){
- if(status === 'open'){
+ function changeClose() {
+ if (status === 'open') {
closeQuestion(question_id, userData)
- }else{
+ } else {
openQuestion(question_id, userData)
}
-
+
}
const getVote = () => getQuestionVote(question_id);
const updateVote = (data) => updateQuestionVote(question_id, data);
-
+
const postComment = (data) => postQuestionComment(question_id, data);
-
+
return (
<>
@@ -130,17 +127,17 @@ export default function Question({
label={hasAcceptedAnswer ? 'yes' : 'no'}
size='small'
/>
-
+
-
+
-
+
-
+
-
+
@@ -163,7 +160,7 @@ export default function Question({
{text}
-
+