diff --git a/client/src/pages/QuestionDetailPage.jsx b/client/src/pages/QuestionDetailPage.jsx index e50d4f7..37845ff 100644 --- a/client/src/pages/QuestionDetailPage.jsx +++ b/client/src/pages/QuestionDetailPage.jsx @@ -45,518 +45,4 @@ const QuestionDetailPage = () => { } = useQuery( ['question', id], () => api.get(`/questions/${id}`).then(res => res.data), - { - staleTime: 30000, - refetchOnWindowFocus: false, - } - ); - - // Join question room for real-time updates - useEffect(() => { - if (socket && id) { - socket.emit('join-question', id); - return () => socket.emit('leave-question', id); - } - }, [socket, id]); - - // Mutations - const upvoteMutation = useMutation( - ({ contentType, contentId }) => { - if (contentType === 'answers') { - return api.post(`api/answers/${contentId}/upvote`); - } else { - return api.post(`api/questions/${contentId}/upvote`); - } - }, - { - onSuccess: () => { - queryClient.invalidateQueries(['question', id]); - toast.success('Upvoted successfully!'); - }, - onError: error => { - toast.error(error.response?.data?.message || 'Failed to upvote'); - }, - } - ); - - const downvoteMutation = useMutation( - ({ contentType, contentId }) => { - if (contentType === 'answers') { - return api.post(`api/answers/${contentId}/downvote`); - } else { - return api.post(`api/questions/${contentId}/downvote`); - } - }, - { - onSuccess: () => { - queryClient.invalidateQueries(['question', id]); - toast.success('Downvoted successfully!'); - }, - onError: error => { - toast.error(error.response?.data?.message || 'Failed to downvote'); - }, - } - ); - - const acceptAnswerMutation = useMutation( - answerId => api.post(`api/questions/${id}/accept-answer`, { answerId }), - { - onSuccess: () => { - queryClient.invalidateQueries(['question', id]); - toast.success('Answer accepted successfully!'); - }, - onError: error => { - toast.error(error.response?.data?.message || 'Failed to accept answer'); - }, - } - ); - - const submitAnswerMutation = useMutation( - content => { - console.log('🔍 Frontend Debug - Submitting answer for question ID:', id); - console.log('🔍 Frontend Debug - Answer content:', content); - console.log('🔍 Frontend Debug - API call:', `/answers/${id}`); - return api.post(`api/answers/${id}`, { content }); - }, - { - onSuccess: () => { - queryClient.invalidateQueries(['question', id]); - setAnswerContent(''); - setShowAnswerForm(false); - setIsSubmitting(false); - toast.success('Answer posted successfully!'); - }, - onError: error => { - setIsSubmitting(false); - toast.error(error.response?.data?.message || 'Failed to post answer'); - }, - } - ); - - const deleteMutation = useMutation( - ({ contentType, contentId }) => - api.delete(`api/${contentType}/${contentId}`), - { - onSuccess: () => { - queryClient.invalidateQueries(['question', id]); - toast.success('Content deleted successfully'); - }, - onError: error => { - toast.error(error.response?.data?.message || 'Failed to delete'); - }, - } - ); - - // Handlers - const handleVote = (type, contentType, contentId) => { - if (!user) { - toast.error('Please log in to vote'); - return; - } - if (type === 'upvote') { - upvoteMutation.mutate({ contentType, contentId }); - } else { - downvoteMutation.mutate({ contentType, contentId }); - } - }; - - const handleAcceptAnswer = answerId => { - if (!user) { - toast.error('Please log in to accept answers'); - return; - } - acceptAnswerMutation.mutate(answerId); - }; - - const handleSubmitAnswer = () => { - if (!answerContent.trim()) { - toast.error('Please enter an answer'); - return; - } - setIsSubmitting(true); - submitAnswerMutation.mutate(answerContent); - }; - - const handleDelete = (contentType, contentId) => { - if (window.confirm('Are you sure you want to delete this?')) { - deleteMutation.mutate({ contentType, contentId }); - } - }; - - const getVoteStatus = (votes, userId) => { - if (!userId) return null; - const upvoted = votes.upvotes.some( - vote => vote.user === userId || vote.user?._id === userId - ); - const downvoted = votes.downvotes.some( - vote => vote.user === userId || vote.user?._id === userId - ); - if (upvoted) return 'upvote'; - if (downvoted) return 'downvote'; - return null; - }; - - if (isLoading) { - return ( -
- Error loading question: {error.message} -
- -- Be the first to answer this question! -
- {user && ( - - )} -