import { UserTestResponse } from "@/api/types"; import formatISODate from "@/utils/format-iso-date"; import { getUserTestStatus } from "@/utils/get-user-test-status"; import getUserTestTitle from "@/utils/get-user-test-title"; import { FontAwesome5 } from "@expo/vector-icons"; import { Pressable, StyleSheet, View } from "react-native"; import { Badge, BadgeText } from "./ui/badge"; import { Divider } from "./ui/divider"; import Panel from "./ui/panel"; import { Skeleton } from "./ui/skeleton"; import { ThemedText } from "./ui/themed-text"; type BadgeType = "muted" | "success" | "info" | "warning" | "error"; enum TestStatus { Completed = "Completed", Expired = "Expired", InProgress = "In Progress", } interface UserTestProps { userTest?: UserTestResponse; onPress?: (userTest: UserTestResponse) => void; } const UserTest = ({ userTest, onPress }: UserTestProps) => { if (!userTest) return ; const title = getUserTestTitle(userTest); const testStatus = getUserTestStatus(userTest); let scoreType: BadgeType = "muted"; if (userTest.is_completed || !userTest.is_available) { if (userTest.score >= 80) scoreType = "success"; else if (userTest.score >= 60) scoreType = "info"; else if (userTest.score >= 40) scoreType = "warning"; else if (userTest.score >= 0) scoreType = "error"; } const successAnswers = userTest.answers.filter(answer => answer.is_correct).length; let testStatusType: BadgeType = "warning"; if (testStatus === TestStatus.Completed) testStatusType = "success"; else if (testStatus === TestStatus.Expired) testStatusType = "error"; return ( onPress?.(userTest)}> {testStatus} {userTest.score} {title} Started at: {formatISODate(userTest.created_at)} Closed at: {formatISODate(userTest.closed_at)} {userTest.answers.length} Questions {testStatus !== TestStatus.InProgress && {successAnswers} / {userTest.answers.length} Correct } ); }; const styles = StyleSheet.create({ testTitle: { fontSize: 18, fontWeight: "600", marginBottom: 10, }, }); export default UserTest;