import { Badge, HStack, Stack, Text, useColorModeValue, } from '@chakra-ui/react'; import { __ } from '@wordpress/i18n'; import React from 'react'; import { Td, Tr } from 'react-super-responsive-table'; import { formatAttemptDuration, getWordpressLocalTime, } from '../../../assets/js/back-end/utils/utils'; import { H5PQuizAttempt } from '../types/h5pQuizAttempt'; interface Props { attempt: H5PQuizAttempt; isStudentView?: boolean; } const LabeledValue: React.FC<{ label: string; value: React.ReactNode }> = ({ label, value, }) => { const contentColor = useColorModeValue('gray.600', 'gray.300'); const labelColor = useColorModeValue('oxford-night', 'white'); return ( {label} {value} ); }; /** * Convert minutes to an "X hrs Y mins" string. * * Mirrors `QuizAttemptInfo`'s `getHrsAndMins`. */ const getHrsAndMins = (minutes: number) => { const hrs = Math.floor(minutes / 60); const mins = minutes % 60; return `${hrs} hrs ${mins} mins`; }; /** * Summary info row for an H5P quiz attempt detail page. * * Mirrors the normal quiz `QuizAttemptInfo` layout: * Student/Quiz info | Quiz summary | Result. */ const H5PAttemptInfo: React.FC = ({ attempt, isStudentView = false, }) => { const contentColor = useColorModeValue('gray.600', 'gray.300'); const resultBg = useColorModeValue('#F7F7F7', 'gray.700'); const totalQuestions = attempt.question_scores?.length ?? 0; const isPassed = attempt.passed === 'yes'; const percentColor = isPassed ? 'green.500' : 'coral-red'; return ( {isStudentView ? ( {attempt.quiz?.name} ) : ( <> {attempt.user?.first_name} {attempt.user?.last_name} {attempt.user?.display_name} ({attempt.user?.email}) )} {isPassed ? __('Pass', 'learning-management-system') : __('Fail', 'learning-management-system')} {attempt.max_score > 0 && ( {attempt.percentage}% )} ); }; export default H5PAttemptInfo;