Pull Request branch dev-clone to main #1

Merged
gitea merged 429 commits from dev-clone into main 2024-12-23 09:31:34 +00:00
Showing only changes of commit 318783c71c - Show all commits

View File

@ -60,6 +60,7 @@ export default function AssessmentPage() {
}>({}); }>({});
const fileInputRef = useRef<HTMLInputElement>(null); const fileInputRef = useRef<HTMLInputElement>(null);
const [modalOpen, setModalOpen] = useState(false); const [modalOpen, setModalOpen] = useState(false);
const [selectedAspectId, setSelectedAspectId] = useState<string | null>(null);
const [selectedSubAspectId, setSelectedSubAspectId] = useState<string | null>(null); const [selectedSubAspectId, setSelectedSubAspectId] = useState<string | null>(null);
const [assessmentId, setAssessmentId] = useState<string | null>(null); const [assessmentId, setAssessmentId] = useState<string | null>(null);
const [answers, setAnswers] = useState<{ [key: string]: string }>({}); const [answers, setAnswers] = useState<{ [key: string]: string }>({});
@ -99,10 +100,13 @@ export default function AssessmentPage() {
if (firstMatchingSubAspect) { if (firstMatchingSubAspect) {
setSelectedSubAspectId(firstMatchingSubAspect.id); setSelectedSubAspectId(firstMatchingSubAspect.id);
setSelectedAspectId(aspectsQuery.data.data.find(aspect =>
aspect.subAspects.some(sub => sub.id === firstMatchingSubAspect.id)
)?.id || null); // Set selectedAspectId based on the found sub-aspect
} }
} }
} }
}, [aspectsQuery.data, selectedSubAspectId, data?.data]); }, [aspectsQuery.data, selectedSubAspectId, data?.data])
const handleConfirmFinish = () => { const handleConfirmFinish = () => {
if (assessmentId) { if (assessmentId) {
@ -124,14 +128,21 @@ export default function AssessmentPage() {
})); }));
}; };
// Fetch average scores berdasarkan assessmentId yang diambil dari URL // Fetch average scores by aspect
const averageScoreQuery = useQuery( const averageScoreQuery = useQuery(getAverageScoreQueryOptions(assessmentId || ""));
getAverageScoreQueryOptions(assessmentId || "")
// Fetch average scores by sub-aspect
const averageScoreSubAspectQuery = useQuery(getAverageScoreSubAspectQueryOptions(assessmentId || ""));
// Filter average score aspect berdasarkan sub-aspect yang dipilih
const filteredAverageScores = averageScoreQuery.data?.aspects?.filter(aspect =>
aspect.subAspects.some(subAspect => subAspect.subAspectId === selectedSubAspectId)
); );
// Fetch average scores for sub-aspects // Filter average scores for the selected sub-aspect
const averageScoreSubAspectQuery = useQuery( const averageScoresForSelectedSubAspect = averageScoreSubAspectQuery.data?.subAspects?.filter(
getAverageScoreSubAspectQueryOptions(assessmentId || "") (subAspect) =>
subAspect.aspectId === selectedAspectId // Use the appropriate property for filtering
); );
// Mutation function to toggle flag // Mutation function to toggle flag
@ -519,42 +530,46 @@ export default function AssessmentPage() {
<div className="mt-4"> <div className="mt-4">
<Card shadow="sm" p="md" radius="md" withBorder> <Card shadow="sm" p="md" radius="md" withBorder>
<Stack> <Stack>
{averageScores && averageScores.length > 0 ? ( {/* Skor Aspek */}
averageScores.map((aspect: any) => ( <div>
<div key={aspect.AspectId} className="flex justify-between items-center"> {filteredAverageScores && filteredAverageScores.length > 0 ? (
filteredAverageScores.map((aspect) => (
<div key={aspect.aspectId} className="flex justify-between items-center">
<Text className="text-xl text-gray-400"> <Text className="text-xl text-gray-400">
{aspect.AspectName} {aspect.aspectName}
</Text> </Text>
<Text className="text-xl font-bold"> <Text className="text-xl font-bold">
{parseFloat(aspect.averageScore).toFixed(1)} {parseFloat(aspect.averageScore).toFixed(2)}
</Text> </Text>
</div> </div>
)) ))
) : ( ) : (
<Text>Tidak ada data skor.</Text> <Text className="text-lg text-gray-400">Data aspek kosong</Text>
)} )}
</div>
{/* Garis pembatas */} {/* Garis pembatas */}
<div> <div>
<hr className="border-t-2 border-gray-300 w-full mx-auto" /> <hr className="border-t-2 border-gray-300 w-full mx-auto" />
</div> </div>
{averageScoresSubAspect && averageScoresSubAspect.length > 0 && ( {/* Skor Sub-Aspek */}
<Stack> <div>
{averageScoresSubAspect.map((subAspects: any) => { {averageScoresForSelectedSubAspect?.length ? (
return ( averageScoresForSelectedSubAspect.map((subAspect) => (
<div key={subAspects.subAspectId} 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">
{subAspects.subAspectName} {subAspect.subAspectName}
</Text> </Text>
<Text className="text-lg font-bold"> <Text className="text-lg font-bold">
{parseFloat(subAspects.averageScore).toFixed(1)} {parseFloat(subAspect.averageScore).toFixed(2)}
</Text> </Text>
</div> </div>
); ))
})} ) : (
</Stack> <Text className="text-lg text-gray-400">Data sub aspek kosong</Text>
)} )}
</div>
</Stack> </Stack>
{/* Tombol Selesai */} {/* Tombol Selesai */}