fix: verified score display validation
This commit is contained in:
parent
6eb3a2e073
commit
3d96fc69fc
|
|
@ -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 =
|
||||||
|
assessmentStatus === "selesai"
|
||||||
|
? aspectsData?.data?.map((aspect, index) => ({
|
||||||
aspectName: aspect.name,
|
aspectName: aspect.name,
|
||||||
score: Number(formatScore(getVerifiedAspectScore(aspect.id))),
|
score: Number(formatScore(getVerifiedAspectScore(aspect.id, assessmentStatus))),
|
||||||
fill: aspectsColors[index % aspectsColors.length],
|
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,28 +167,36 @@ export default function AssessmentResultPage() {
|
||||||
}))
|
}))
|
||||||
) || [];
|
) || [];
|
||||||
|
|
||||||
const verifiedBarChartData = aspectsData?.data?.flatMap((aspect) =>
|
const verifiedBarChartData =
|
||||||
|
assessmentStatus === "selesai"
|
||||||
|
? aspectsData?.data?.flatMap((aspect) =>
|
||||||
aspect.subAspects.map((subAspect) => ({
|
aspect.subAspects.map((subAspect) => ({
|
||||||
subAspectName: subAspect.name,
|
subAspectName: subAspect.name,
|
||||||
score: Number(formatScore(getVerifiedSubAspectScore(subAspect.id))),
|
score: Number(formatScore(getVerifiedSubAspectScore(subAspect.id, assessmentStatus))),
|
||||||
fill: "#005BFF",
|
fill: "#005BFF",
|
||||||
aspectId: aspect.id,
|
aspectId: aspect.id,
|
||||||
aspectName: aspect.name
|
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 =
|
||||||
|
assessmentStatus === "selesai"
|
||||||
|
? aspectsData?.data?.reduce((config, aspect, index) => {
|
||||||
config[aspect.name.toLowerCase()] = {
|
config[aspect.name.toLowerCase()] = {
|
||||||
label: aspect.name,
|
label: aspect.name,
|
||||||
color: aspectsColors[index % aspectsColors.length],
|
color: aspectsColors[index % aspectsColors.length],
|
||||||
};
|
};
|
||||||
return config;
|
return config;
|
||||||
}, {} as ChartConfig) || {};
|
}, {} as ChartConfig) || {}
|
||||||
|
: {};
|
||||||
|
|
||||||
const barChartConfig = aspectsData?.data?.reduce((config, aspect, index) => {
|
const barChartConfig =
|
||||||
|
assessmentStatus === "selesai"
|
||||||
|
? aspectsData?.data?.reduce((config, aspect, index) => {
|
||||||
aspect.subAspects.forEach((subAspect) => {
|
aspect.subAspects.forEach((subAspect) => {
|
||||||
config[subAspect.name.toLowerCase()] = {
|
config[subAspect.name.toLowerCase()] = {
|
||||||
label: subAspect.name,
|
label: subAspect.name,
|
||||||
|
|
@ -185,7 +204,8 @@ export default function AssessmentResultPage() {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
return config;
|
return config;
|
||||||
}, {} as ChartConfig) || {};
|
}, {} 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>
|
||||||
))}
|
))}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user