import React, { useState, useEffect } from 'react'
import Head from 'next/head'
import SubjectView from '../components/subjectView'
import QuestionView from '../components/questionView'
import QuestionAdder from '../components/questionAdder.js'
import PossibleAnswers from '../components/possibleAnswers.js'
import DbSelector from '../components/dbSelector.js'
import LoadingIndicator from '../components/LoadingIndicator'
import styles from './index.module.css'
import commonStyles from '../commonStyles.module.css'
import constants from '../constants.js'
const domain = typeof window !== 'undefined' ? window.location.domain : ''
const Infos = ({ onClick, renderOKButton }) => {
return (
Kérdés szerkesztő
Ezen az oldalon az éles adatbázisban levő kérdéseket tudod
szerkeszteni, vagy azokhoz tudsz adni.{' '}
A törléshez és módosításokhoz nem kér megerősítést, ezek
azonnal megtörténnek, és nem visszavonhatóak.
Néhány dolog, amit kérlek tarts be szerkesztés közben:
-
Ne rontsd el a kérdéseket sok törléssel / rossz
válasz megadásával. Sok más felhasználónak lesz
rossz, és visszakereshető / tiltható a módosító
-
Arra is vigyázz, hogy véletlen se történjen ilyesmi,
vagy ha mégis valami baj történt, akkor azt{' '}
jelezd. Van
sok biztonsági mentés
-
Ahhoz, hogy a script megtalálja a helyes választ a
kérdés szövegének pontosan olyannak kell
lennie, mint a teszt közben (elírásokkal, ....
-okkal, meg mindennel)
{renderOKButton && (
OK
)}
)
}
const fetchDbs = () => {
return new Promise((resolve) => {
fetch(`${constants.apiUrl}getDbs`, {
credentials: 'include',
})
.then((resp) => {
return resp.json()
})
.then((resp) => {
resolve(resp)
})
})
}
const fetchData = (selectedDb) => {
return new Promise((resolve) => {
const toFetch = `${constants.apiUrl}${selectedDb.path}`
fetch(toFetch, {
credentials: 'include',
})
.then((resp) => {
return resp.json()
})
.then((resp) => {
resolve(resp)
})
})
}
const views = {
welcome: 'w',
subject: 's',
question: 'q',
questionAdder: 'qa',
possibleAnswers: 'pa',
}
export default function Index({ router }) {
const [infoRead, setInfoRead] = useState(false)
const [data, setData] = useState(null)
const [qdbs, setQdbs] = useState(null)
const [selectedDb, setSelectedDb] = useState(null)
const [view, setView] = useState(views.welcome)
const [error, setError] = useState(null)
useEffect(() => {
if (selectedDb) {
loadData()
} else {
setData(null)
}
}, [selectedDb])
useEffect(() => {
fetchDbs().then((resp) => {
setQdbs(resp)
const view = router.query.v
? decodeURIComponent(router.query.v)
: views.welcome
setView(view)
})
}, [])
const loadData = () => {
setData(null)
if (!selectedDb) {
alert('Válassz egy adatbázist!')
return
}
fetchData(selectedDb)
.then((resp) => {
setData(resp)
})
.catch((error) => {
console.error(error)
console.error('Error while fetching data')
setError('Error while fetching data')
})
}
const refetchDbs = () => {
if (selectedDb) {
fetchData(selectedDb).then((resp) => {
setData(resp)
})
}
fetchDbs().then((resp) => {
setQdbs(resp)
})
}
const renderView = () => {
if (view === views.subject) {
return (
<>
Tárgyak - Data Editor | {domain}
{data && (
)}
>
)
} else if (view === views.question) {
return (
<>
Kérdések - Data Editor | {domain}
{data && (
)}
>
)
} else if (view === views.questionAdder) {
return (
<>
Kérdés beküldés - Data Editor | {domain}
>
)
} else if (view === views.possibleAnswers) {
return (
<>
Kitöltetlen tesztek - Data Editor | {domain}
>
)
} else if (view === views.welcome) {
return
} else {
return No view!
}
}
function renderViewSelector() {
return (
{
router.replace(
`${router.pathname}?v=${views.question}`,
undefined,
{ shallow: true }
)
setView(views.question)
}}
>
Kérdések
{
router.replace(
`${router.pathname}?v=${views.subject}`,
undefined,
{
shallow: true,
}
)
setView(views.subject)
}}
>
Tárgyak
{
router.replace(
`${router.pathname}?v=${views.questionAdder}`,
undefined,
{ shallow: true }
)
setView(views.questionAdder)
setSelectedDb(null)
}}
>
Kérdés beküldés
{
router.replace(
`${router.pathname}?v=${views.possibleAnswers}`,
undefined,
{ shallow: true }
)
setView(views.possibleAnswers)
}}
>
Kitöltetlen tesztek
)
}
if (error) {
return {error}
}
if (!infoRead) {
return setInfoRead(true)} renderOKButton />
}
if (!qdbs) {
return
}
return (
{renderViewSelector()}
{renderView()}
)
}