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 (
)
}
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,
})}
)
})}
{
let quiz = form.quiz
quiz.push(getDefaultQuestion())
setForm({
...form,
quiz: quiz,
})
}}
>
Új kérdés hozzáadása
{isSubmitting ? (
Kérdések feldolgozása folyamatban, ha sokat küldtél, akkor több perc
is lehet
) : (
Kérdések beküldése
)}
)
}
const renderSubjSelector = () => {
// TODO: handle if new subject
return (
{isNewSubj ? (
{
setForm({
...form,
subj: e.target.value,
})
}}
/>
) : (
{
setForm({
...form,
subj: subjects[e.target.value],
})
}}
>
Válassz egy tárgyat...
{subjects.map((subjName, i) => {
return (
{subjName}
)
})}
)}
{
setIsNewSubj(!isNewSubj)
}}
>
{isNewSubj ? 'Létező tárgy ...' : 'Új tárgy ...'}
)
}
const renderUsage = () => {
return (
Ezen az oldalon kérdéseket tudsz beküldeni manuálisan.
Ezek a kérdések ellenőrizve lesznek hogy megvannak-e már
Ha több válasz van, akkor ', '-vel válaszd el őket ( "válasz1,
válasz2, válasz3" )
Kérdéseknél az utolsó sor (ahol a JSON cucc van) jelenleg nem
módosítható, csak olyan kérdéseket lehet beküldeni, amik sima
kérdés-válaszok, szóval pl nincs benne kép. Ez később bővül majd
Ha sok új kérdést küldesz be, akkor akár több percig is eltarthat a
dolog. Akárhány kérdést be lehet egyszerre küldeni, de max 10-15 az
ajánlott
Bármilyen szöveget beküldhettek, de ne tegyétek, más felhasználóknak
és magatoknak lesz rosz, ty!
)
}
return (
Qmining - Kérdés beküldés
{subjects ? (
<>
{renderUsage()}
{renderSubjSelector()}
{renderStuff()}
>
) : (
)}
)
}