import React, { useState, useEffect } from 'react' import fetch from 'unfetch' import Head from 'next/head' 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() { 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.reduce((acc, x) => { return [ ...acc, ...x.subjs.map((subj) => { return subj.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: err.target.value }, index) } value={Q || ''} className={styles.questionInput} />
onChange({ ...currData, A: err.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.reduce((acc, res) => { return acc + res.newQuestions }, 0) + ' új kérdés' ) // eslint-disable-line setIsSubmitting(false) } else { alert('Hiba beküldés közben :/') // eslint-disable-line setIsSubmitting(false) } }) .catch((err) => { alert('Hiba beküldés közben :/') // eslint-disable-line console.log(err) 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 = () => { // 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 ( ) } return (
Qmining - Kérdés beküldés {subjects ? ( <> {renderUsage()}
{renderSubjSelector()} {renderStuff()} ) : ( )}
) }