File Extension Image for Written.jsx Written.jsx
2235 Chars | 96 Lines | 2.23 kb | Text File Parent Directory
import React, { useState, useEffect } from 'react'

import { useShallow } from 'zustand/react/shallow'
import { usePack } from '@/stores/pack'

import Form from 'react-bootstrap/Form'

import leven from 'leven'
import { stripHTML } from '@/lib/utilities'

export default function Written({ i, submit, save }) {
	const [cards] = usePack(useShallow((state) => [state.pack.content[i]]))
	const [answer, setAnswer] = React.useState('')
	const [qs, setQs] = useState([])

	useEffect(() => {
		if (submit) {
			let correctness = leven(answer, stripHTML(cards.term))
			if (correctness === 0) {
				save(true)
				setQs(
					<>
						<span className="text-success">Correct Answer!</span>
						<Form.Control
							size="lg"
							type="text"
							placeholder="Term"
							value={answer}
							readOnly
							disabled
						/>
					</>
				)
			} else if (correctness <= 3) {
				save(true)
				setQs(
					<>
						<span className="text-info">
							Correct Answer! {answer} was guessed to be equal to{' '}
							{stripHTML(cards.term)}.
						</span>
						<Form.Control
							size="lg"
							type="text"
							placeholder="Term"
							value={answer}
							readOnly
							disabled
						/>
					</>
				)
			} else if (correctness > 3) {
				save(false)
				setQs(
					<>
						<span className="text-danger">
							Incorrect Answer -{' '}
							<span className="text-success">{stripHTML(cards.term)}</span>
						</span>
						<Form.Control
							size="lg"
							type="text"
							placeholder="Term"
							value={answer}
							readOnly
							disabled
						/>
					</>
				)
			}
		} else {
			setQs(
				<Form.Control
					size="lg"
					type="text"
					placeholder="Term"
					value={answer}
					onChange={(e) => setAnswer(e.target.value)}
				/>
			)
		}
	}, [submit, cards, answer])

	return (
		<div className={`mb-3 w-75 mx-auto card p-1`}>
			<div className="row g-0">
				<div className="col-md-6 my-auto">
					<h3 className="fw-light mb-0 p-5">{stripHTML(cards?.definition)}</h3>
				</div>
				<div className="col-md-6 my-auto">
					<div className="card-body">{qs}</div>
				</div>
			</div>
		</div>
	)
}