import React, { useState, useEffect } from 'react' import fetch from 'unfetch' import LoadingIndicator from '../components/LoadingIndicator.js' import styles from './addQuestion.module.css' import constants from '../constants.json' const getDefaultQuestion = () => { return { Q: '', A: '', data: { type: 'simple' } } } export default function AddQuestion (props) { const [form, setForm] = useState({ quiz: [getDefaultQuestion()] }) const [subjects, setSubjects] = useState(undefined) const [isSubmitting, setIsSubmitting] = useState(false) const [isNewSubj, setIsNewSubj] = useState(false) useEffect(() => { console.info('Fetching subject names') fetch(`${constants.apiUrl}dataCount?detailed=true`, { credentials: 'include' }) .then((resp) => { return resp.json() }) .then((data) => { let res = data.map((x) => { return x.name }) res = res.sort() setSubjects(res) }) }, []) const onChange = (newData, index) => { let quiz = form.quiz quiz[index] = newData setForm({ ...form, quiz: quiz }) } const renderQuestionInput = (params) => { const { index, onChange } = params const currData = form.quiz[index] const { Q, A, data } = form.quiz[index] || {} return (
onChange({ ...currData, Q: e.target.value }, index)} value={Q || ''} className={styles.questionInput} />
onChange({ ...currData, A: e.target.value }, index)} value={A || ''} className={styles.questionInput} />
{ // TODO: handle JSON // try { // let newData = JSON.parse(e.target.value) // onChange({ ...currData, data: newData }, index) // } catch (e) { // } }} value={JSON.stringify(data) || ''} className={styles.questionInput} /> deleteQuestion(index)} > Kérdés törlése

) } const deleteQuestion = (index) => { let quiz = form.quiz quiz.splice(index, 1) setForm({ ...form, quiz: quiz }) } const handleSubmit = async () => { if (!form.subj) { alert('Nem választottál ki tantárgyat!') // eslint-disable-line return } let isValid = form.quiz.every((x) => { return x.Q && x.A }) if (!isValid || form.quiz.length === 0) { alert('Kérdés kitöltése kötelező!') // eslint-disable-line return } const t = document.getElementById('cid').value let cid = '' let version = '' if (t) { cid = t.split('|')[0] version = t.split('|')[1] } setIsSubmitting(true) const rawResponse = await fetch(constants.apiUrl + 'isAdding', { method: 'POST', credentials: 'include', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ ...form, id: cid, version: 'WEBSITE', scriptVersion: version }) }) rawResponse.json() .then((resp) => { if (resp.success) { alert('Sikeres beküldés, ' + resp.newQuestions + ' új kérdés') // eslint-disable-line setIsSubmitting(false) } else { console.log(resp) alert('Hiba beküldés közben :/') // eslint-disable-line setIsSubmitting(false) } }) .catch((e) => { alert('Hiba beküldés közben :/') // eslint-disable-line console.log(e) setIsSubmitting(false) }) } const renderStuff = (props) => { return (
{form.quiz.map((q, i) => { return (
{renderQuestionInput({ index: i, onChange })}
) })}
{isSubmitting ?
Kérdések feldolgozása folyamatban, ha sokat küldtél, akkor több perc is lehet
:
}
) } const renderSubjSelector = (props) => { // TODO: handle if new subject return (
{isNewSubj ? { setForm({ ...form, subj: e.target.value }) }} /> : } { setIsNewSubj(!isNewSubj) }} > {isNewSubj ? 'Létező tárgy ...' : 'Új tárgy ...' }
) } const renderUsage = () => { return ( ) } if (subjects) { return (
{renderUsage()}
{renderSubjSelector({ subjects })} {renderStuff()}
) } else { return ( ) } }