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.json'
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 | Frylabs.net
{data && }
>
)
} else if (view === views.question) {
return (
<>
Kérdések - Data Editor | Frylabs.net
{data && (
)}
>
)
} else if (view === views.questionAdder) {
return (
<>
Kérdés beküldés - Data Editor | Frylabs.net
>
)
} else if (view === views.possibleAnswers) {
return (
<>
Kitöltetlen tesztek - Data Editor | Frylabs.net
>
)
} 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()}
)
}