// =================== // © AngelaMos | 2026 // AnswerRunner.tsx // =================== import { type FormEvent, useState } from 'react' import { useSubmit } from '@/api/hooks' import type { SubmitResult } from '@/api/types' import { CATEGORY_HINT, type Category } from '@/config' import styles from './AnswerRunner.module.scss' import { SourceReveal } from './SourceReveal' interface AnswerRunnerProps { cid: string category: Category solved: boolean } export function AnswerRunner({ cid, category, solved, }: AnswerRunnerProps): React.ReactElement { const [answer, setAnswer] = useState('') const [result, setResult] = useState(null) const submit = useSubmit(cid) const onSubmit = (event: FormEvent): void => { event.preventDefault() if (answer.trim().length === 0) { return } submit.mutate(answer, { onSuccess: (data) => setResult(data) }) } const pending = submit.isPending const empty = answer.trim().length === 0 return (
{result && (
{result.message}
)} {result?.correct && result.revealed_source && ( )} {solved && result === null && (

Already solved. Submit again to reveal the source.

)} ) }