update: index lazy for submit option on assessment

This commit is contained in:
abiyasa05 2024-10-17 13:28:12 +07:00
parent 49b6fac174
commit 2e9156a30b

View File

@ -14,11 +14,10 @@ import {
} from "@mantine/core"; } from "@mantine/core";
import { useQuery, useMutation } from "@tanstack/react-query"; import { useQuery, useMutation } from "@tanstack/react-query";
import { import {
getAnswersQueryOptions, submitOptionMutationOptions,
getAverageScoreSubAspectQueryOptions, getAverageScoreSubAspectQueryOptions,
getAverageScoreQueryOptions, getAverageScoreQueryOptions,
fetchAspects, fetchAspects,
submitAnswerMutationOptions,
getQuestionsAllQueryOptions, getQuestionsAllQueryOptions,
toggleFlagAnswer, toggleFlagAnswer,
} from "@/modules/assessmentManagement/queries/assessmentQueries"; } from "@/modules/assessmentManagement/queries/assessmentQueries";
@ -100,7 +99,7 @@ export default function AssessmentPage() {
if (firstMatchingSubAspect) { if (firstMatchingSubAspect) {
setSelectedSubAspectId(firstMatchingSubAspect.id); setSelectedSubAspectId(firstMatchingSubAspect.id);
setSelectedAspectId(aspectsQuery.data.data.find(aspect => setSelectedAspectId(aspectsQuery.data.data.find(aspect =>
aspect.subAspects.some(sub => sub.id === firstMatchingSubAspect.id) aspect.subAspects.some(sub => sub.id === firstMatchingSubAspect.id)
)?.id || null); // Set selectedAspectId based on the found sub-aspect )?.id || null); // Set selectedAspectId based on the found sub-aspect
} }
@ -141,7 +140,7 @@ export default function AssessmentPage() {
// Filter average scores for the selected sub-aspect // Filter average scores for the selected sub-aspect
const averageScoresForSelectedSubAspect = averageScoreSubAspectQuery.data?.subAspects?.filter( const averageScoresForSelectedSubAspect = averageScoreSubAspectQuery.data?.subAspects?.filter(
(subAspect) => (subAspect) =>
subAspect.aspectId === selectedAspectId // Use the appropriate property for filtering subAspect.aspectId === selectedAspectId // Use the appropriate property for filtering
); );
@ -163,8 +162,8 @@ export default function AssessmentPage() {
}, },
}); });
// Inside the AssessmentPage function: // Mutation function to submit answer
const submitAnswerMutation = useMutation(submitAnswerMutationOptions()); const submitOptionMutation = useMutation(submitOptionMutationOptions());
useEffect(() => { useEffect(() => {
const savedAnswers = localStorage.getItem("assessmentAnswers"); const savedAnswers = localStorage.getItem("assessmentAnswers");
@ -174,7 +173,7 @@ export default function AssessmentPage() {
}, []); }, []);
const handleAnswerChange = (questionId: string, optionId: string) => { const handleAnswerChange = (questionId: string, optionId: string) => {
const assessmentId = getQueryParam("id"); // Mengambil assessmentId otomatis dari URL const assessmentId = getQueryParam("id");
if (!assessmentId) { if (!assessmentId) {
console.error("Assessment ID tidak ditemukan"); console.error("Assessment ID tidak ditemukan");
@ -188,13 +187,12 @@ export default function AssessmentPage() {
// Update state // Update state
setAnswers(updatedAnswers); setAnswers(updatedAnswers);
// Kirim jawaban ke backend submitOptionMutation.mutate({
submitAnswerMutation.mutate({
optionId, optionId,
assessmentId, // Menggunakan assessmentId dari URL assessmentId,
validationInformation: JSON.stringify({ questionId,
questionId, isFlagged: false,
}), filename: undefined,
}); });
}; };
@ -261,9 +259,6 @@ export default function AssessmentPage() {
} }
const totalQuestions = data?.data?.length || 0; const totalQuestions = data?.data?.length || 0;
const totalPages = Math.ceil(totalQuestions / limit);
const averageScores = averageScoreQuery.data?.aspects;
const averageScoresSubAspect = averageScoreSubAspectQuery.data?.subAspects;
if (!assessmentId) { if (!assessmentId) {
return ( return (
@ -555,7 +550,7 @@ export default function AssessmentPage() {
{/* Skor Sub-Aspek */} {/* Skor Sub-Aspek */}
<div> <div>
{averageScoresForSelectedSubAspect?.length ? ( {averageScoresForSelectedSubAspect?.length ? (
averageScoresForSelectedSubAspect.map((subAspect) => ( averageScoresForSelectedSubAspect.map((subAspect) => (
<div key={subAspect.aspectId} className="flex justify-between items-center"> <div key={subAspect.aspectId} className="flex justify-between items-center">
<Text className="text-lg text-gray-400"> <Text className="text-lg text-gray-400">