diff --git a/src/components/questionAdder.js b/src/components/questionAdder.js
new file mode 100644
index 0000000..a3754cf
--- /dev/null
+++ b/src/components/questionAdder.js
@@ -0,0 +1,323 @@
+import React, { useState, useEffect } from 'react'
+import Head from 'next/head'
+
+import LoadingIndicator from '../components/LoadingIndicator'
+
+import styles from './questionAdder.module.css'
+import constants from '../constants.json'
+
+const getDefaultQuestion = () => {
+ return {
+ Q: '',
+ A: '',
+ data: { type: 'simple' },
+ }
+}
+
+export default function QuestionAdder() {
+ 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) => {
+ console.log(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 = () => {
+ 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
+
+
+ {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: event.target.value,
+ })
+ }}
+ />
+ ) : (
+ {
+ setForm({
+ ...form,
+ subj: subjects[event.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 | Frylabs.net
+
+ {subjects ? (
+ <>
+ {renderUsage()}
+
+ {renderSubjSelector()}
+ {renderStuff()}
+ >
+ ) : (
+
+ )}
+
+ )
+}
diff --git a/src/components/questionAdder.module.css b/src/components/questionAdder.module.css
new file mode 100644
index 0000000..bba190a
--- /dev/null
+++ b/src/components/questionAdder.module.css
@@ -0,0 +1,116 @@
+.questionInput {
+ flex-grow: 1;
+ font-size: 16px;
+ background-color: var(--background-color);
+ color: white;
+ border: none;
+ padding: 8px;
+ margin: 4px;
+ border: 1px solid;
+ border-color: var(--background-color);
+}
+
+.questionContainer {
+ margin-top: 30px;
+ margin-bottom: 30px;
+ margin-right: 10px;
+ margin-left: 10px;
+}
+
+.inputContainer {
+ width: 100%;
+ display: flex;
+}
+
+.buttonContainer {
+ text-align: center;
+ width: 200px;
+ margin: 0 auto;
+ padding: 10px;
+}
+
+.deleteButton {
+ display: flex;
+ align-items: center;
+ background-color: #333;
+ padding: 6px;
+ font-size: 16px;
+ color: white;
+ cursor: pointer;
+ border: 1px solid;
+ border-color: var(--background-color);
+}
+
+.deleteButton:hover {
+ background-color: #666;
+}
+
+.questionInput:hover {
+ border: 1px solid;
+}
+
+.button {
+ cursor: pointer;
+ background-color: var(--text-color);
+ border: none;
+ padding: 10px 30px;
+ color: white;
+ width: 200px;
+}
+
+.subjSelectorContainer {
+ width: 100%;
+ display: flex;
+}
+
+.subjSelector {
+ flex-grow: 1;
+ background-color: var(--background-color);
+}
+
+.newSubj {
+ display: flex;
+ justify-content: center;
+
+ background-color: #333;
+ width: 150px;
+ margin: 0px 4px;
+ padding: 10px;
+ cursor: pointer;
+ font-size: 14px;
+ color: white;
+}
+
+.newSubj:hover {
+ background-color: #666;
+}
+
+.usage li {
+ margin: 5px;
+}
+
+.usage {
+ font-size: 15px;
+ color: white;
+}
+
+.issubmitting {
+ text-align: center;
+ color: white;
+}
+
+.newQuestionButton {
+ display: flex;
+ justify-content: center;
+}
+
+.newQuestionButton div {
+ background-color: #333;
+ color: white;
+ cursor: pointer;
+ padding: 10px 20px;
+}
+
+.newQuestionButton div:hover {
+ background-color: #666;
+}
diff --git a/src/components/subjectView.module.css b/src/components/subjectView.module.css
index d029668..61dbdf7 100644
--- a/src/components/subjectView.module.css
+++ b/src/components/subjectView.module.css
@@ -4,11 +4,9 @@
color: white;
background-color: #222426;
border: none;
- font-size: 18px;
flex-grow: 1;
}
-
.searchContainer {
width: 100%;
display: flex;
@@ -18,7 +16,6 @@
width: 80px;
background-color: var(--background-color);
color: white;
- font-size: 23px;
cursor: pointer;
border: none;
}
diff --git a/src/pages/index.js b/src/pages/index.js
index b8d1a8e..46451f5 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -3,6 +3,7 @@ import fetch from 'unfetch'
import SubjectView from '../components/subjectView'
import QuestionView from '../components/questionView'
+import QuestionAdder from '../components/questionAdder.js'
import LoadingIndicator from '../components/LoadingIndicator'
import styles from './index.module.css'
@@ -12,6 +13,7 @@ const views = {
subject: 'SUBJECT',
question: 'QUESTION',
welcome: 'WELCOME',
+ questionAdder: 'QADDER',
}
// TODO: Add question on subjects view
@@ -195,6 +197,8 @@ export default function Index() {
deleteQuestion={deleteQuestion}
/>
)
+ } else if (view === views.questionAdder) {
+ return
} else if (view === views.welcome) {
return (
@@ -262,7 +266,7 @@ export default function Index() {
{
@@ -272,10 +276,10 @@ export default function Index() {
{
- if (password) {
+ if (password && selectedDb) {
SendDataToServer()
} else {
- alert('Hibás jelszó!') // eslint-disable-line
+ alert('Nincs jelszó, vagy nem választottál ki adatbázist!') // eslint-disable-line
}
}}
>
@@ -295,6 +299,9 @@ export default function Index() {
Kérdés nézet
{
if (selectedDb) {
setView(views.subject)
@@ -305,6 +312,13 @@ export default function Index() {
>
Tárgy nézet
+ {
+ setView(views.questionAdder)
+ }}
+ >
+ Kérdés beküldés
+
{renderView()}