fix: verified score display validation

This commit is contained in:
Sukma Gladys 2024-11-26 13:28:07 +07:00
parent 6eb3a2e073
commit 3d96fc69fc

View File

@ -72,6 +72,9 @@ export default function AssessmentResultPage() {
const { data: allVerifiedAspectsScoreData } = useQuery(getAllVerifiedAspectsAverageScore(assessmentId)); const { data: allVerifiedAspectsScoreData } = useQuery(getAllVerifiedAspectsAverageScore(assessmentId));
const { data: allVerifiedSubAspectsScoreData } = useQuery(getAllVerifiedSubAspectsAverageScore(assessmentId)); const { data: allVerifiedSubAspectsScoreData } = useQuery(getAllVerifiedSubAspectsAverageScore(assessmentId));
// Pastikan status tersedia
const assessmentStatus = assessmentResult?.statusAssessment;
const getAspectScore = (aspectId: string) => { const getAspectScore = (aspectId: string) => {
return allAspectsScoreData?.aspects?.find((score) => score.aspectId === aspectId)?.averageScore || undefined; return allAspectsScoreData?.aspects?.find((score) => score.aspectId === aspectId)?.averageScore || undefined;
}; };
@ -80,11 +83,13 @@ export default function AssessmentResultPage() {
return allSubAspectsScoreData?.subAspects?.find((score) => score.subAspectId === subAspectId)?.averageScore || undefined; return allSubAspectsScoreData?.subAspects?.find((score) => score.subAspectId === subAspectId)?.averageScore || undefined;
}; };
const getVerifiedAspectScore = (aspectId: string) => { const getVerifiedAspectScore = (aspectId: string, assessmentStatus: string) => {
if (assessmentStatus !== "selesai") return undefined;
return allVerifiedAspectsScoreData?.aspects?.find((score) => score.aspectId === aspectId)?.averageScore || undefined; return allVerifiedAspectsScoreData?.aspects?.find((score) => score.aspectId === aspectId)?.averageScore || undefined;
}; };
const getVerifiedSubAspectScore = (subAspectId: string) => { const getVerifiedSubAspectScore = (subAspectId: string, assessmentStatus: string) => {
if (assessmentStatus !== "selesai") return undefined;
return allVerifiedSubAspectsScoreData?.subAspects?.find((score) => score.subAspectId === subAspectId)?.averageScore || undefined; return allVerifiedSubAspectsScoreData?.subAspects?.find((score) => score.subAspectId === subAspectId)?.averageScore || undefined;
}; };
@ -96,7 +101,10 @@ export default function AssessmentResultPage() {
// Total score // Total score
const totalScore = parseFloat(formatScore(assessmentResult?.assessmentsResult)); const totalScore = parseFloat(formatScore(assessmentResult?.assessmentsResult));
const totalVerifiedScore = parseFloat(formatScore(verifiedAssessmentResult?.verifiedAssessmentsResult)); const totalVerifiedScore =
assessmentStatus === "selesai"
? parseFloat(formatScore(verifiedAssessmentResult?.verifiedAssessmentsResult))
: 0;
// Mengatur warna dan level maturitas berdasarkan skor // Mengatur warna dan level maturitas berdasarkan skor
const getScoreStyleClass = (score: number | undefined, isBg: boolean = false) => { const getScoreStyleClass = (score: number | undefined, isBg: boolean = false) => {
@ -140,11 +148,14 @@ export default function AssessmentResultPage() {
fill: aspectsColors[index % aspectsColors.length], fill: aspectsColors[index % aspectsColors.length],
})) || []; })) || [];
const verifiedChartData = aspectsData?.data?.map((aspect, index) => ({ const verifiedChartData =
aspectName: aspect.name, assessmentStatus === "selesai"
score: Number(formatScore(getVerifiedAspectScore(aspect.id))), ? aspectsData?.data?.map((aspect, index) => ({
fill: aspectsColors[index % aspectsColors.length], aspectName: aspect.name,
})) || []; score: Number(formatScore(getVerifiedAspectScore(aspect.id, assessmentStatus))),
fill: aspectsColors[index % aspectsColors.length],
})) || []
: [];
const barChartData = aspectsData?.data?.flatMap((aspect) => const barChartData = aspectsData?.data?.flatMap((aspect) =>
aspect.subAspects.map((subAspect) => ({ aspect.subAspects.map((subAspect) => ({
@ -156,36 +167,45 @@ export default function AssessmentResultPage() {
})) }))
) || []; ) || [];
const verifiedBarChartData = aspectsData?.data?.flatMap((aspect) => const verifiedBarChartData =
aspect.subAspects.map((subAspect) => ({ assessmentStatus === "selesai"
subAspectName: subAspect.name, ? aspectsData?.data?.flatMap((aspect) =>
score: Number(formatScore(getVerifiedSubAspectScore(subAspect.id))), aspect.subAspects.map((subAspect) => ({
fill: "#005BFF", subAspectName: subAspect.name,
aspectId: aspect.id, score: Number(formatScore(getVerifiedSubAspectScore(subAspect.id, assessmentStatus))),
aspectName: aspect.name fill: "#005BFF",
})) aspectId: aspect.id,
) || []; aspectName: aspect.name,
}))
) || []
: [];
const sortedBarChartData = barChartData.sort((a, b) => (a.aspectId ?? '').localeCompare(b.aspectId ?? '')); const sortedBarChartData = barChartData.sort((a, b) => (a.aspectId ?? '').localeCompare(b.aspectId ?? ''));
const sortedVerifiedBarChartData = verifiedBarChartData.sort((a, b) => (a.aspectId ?? '').localeCompare(b.aspectId ?? '')); const sortedVerifiedBarChartData = verifiedBarChartData.sort((a, b) => (a.aspectId ?? '').localeCompare(b.aspectId ?? ''));
const chartConfig = aspectsData?.data?.reduce((config, aspect, index) => { const chartConfig =
config[aspect.name.toLowerCase()] = { assessmentStatus === "selesai"
label: aspect.name, ? aspectsData?.data?.reduce((config, aspect, index) => {
color: aspectsColors[index % aspectsColors.length], config[aspect.name.toLowerCase()] = {
}; label: aspect.name,
return config; color: aspectsColors[index % aspectsColors.length],
}, {} as ChartConfig) || {}; };
return config;
}, {} as ChartConfig) || {}
: {};
const barChartConfig = aspectsData?.data?.reduce((config, aspect, index) => { const barChartConfig =
aspect.subAspects.forEach((subAspect) => { assessmentStatus === "selesai"
config[subAspect.name.toLowerCase()] = { ? aspectsData?.data?.reduce((config, aspect, index) => {
label: subAspect.name, aspect.subAspects.forEach((subAspect) => {
color: aspectsColors[index % aspectsColors.length], config[subAspect.name.toLowerCase()] = {
}; label: subAspect.name,
}); color: aspectsColors[index % aspectsColors.length],
return config; };
}, {} as ChartConfig) || {}; });
return config;
}, {} as ChartConfig) || {}
: {};
// Dropdown State // Dropdown State
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
@ -735,9 +755,9 @@ export default function AssessmentResultPage() {
className={clsx( className={clsx(
"text-sm lg:text-3xl font-bold", "text-sm lg:text-3xl font-bold",
)} )}
style={getScoreStyleClass(getVerifiedAspectScore(aspect.id))} style={getScoreStyleClass(getVerifiedAspectScore(aspect.id, assessmentStatus ?? ''))}
> >
{formatScore(getVerifiedAspectScore(aspect.id))} {formatScore(getVerifiedAspectScore(aspect.id, assessmentStatus ?? ''))}
</span> </span>
</div> </div>
</th> </th>
@ -755,7 +775,7 @@ export default function AssessmentResultPage() {
</td> </td>
{/* Sub-aspect Score Column (No Left Border and w-fit for flexible width) */} {/* Sub-aspect Score Column (No Left Border and w-fit for flexible width) */}
<td className="text-[0.4rem] lg:text-sm font-bold text-right p-1 lg:p-2 border-t border-b border-r border-gray-200 w-fit"> <td className="text-[0.4rem] lg:text-sm font-bold text-right p-1 lg:p-2 border-t border-b border-r border-gray-200 w-fit">
{aspect.subAspects[rowIndex] ? formatScore(getVerifiedSubAspectScore(aspect.subAspects[rowIndex].id)) : ""} {aspect.subAspects[rowIndex] ? formatScore(getVerifiedSubAspectScore(aspect.subAspects[rowIndex].id, assessmentStatus ?? '')) : ""}
</td> </td>
</React.Fragment> </React.Fragment>
))} ))}