All questions fixes

This commit is contained in:
mrfry 2021-04-25 09:50:00 +02:00
parent 867568d446
commit 730c0d4058

View file

@ -75,7 +75,7 @@ export default function AllQuestions({ router }) {
const [searchTerm, setSearchTerm] = useState('') const [searchTerm, setSearchTerm] = useState('')
const [activeSubjName, setActiveSubjName] = useState('') const [activeSubjName, setActiveSubjName] = useState('')
const [dbs, setDbs] = useState(null) const [dbs, setDbs] = useState(null)
const [selectedDb, setSelectedDb] = useState('') const [selectedDb, setSelectedDb] = useState(-1)
const [data, setData] = useState(null) const [data, setData] = useState(null)
const [fetchingData, setFetchingData] = useState(false) const [fetchingData, setFetchingData] = useState(false)
@ -83,26 +83,34 @@ export default function AllQuestions({ router }) {
const questionCount = data ? data.reduce(countReducer, 0) : 0 const questionCount = data ? data.reduce(countReducer, 0) : 0
useEffect(() => { useEffect(() => {
router.replace(`${router.asPath.replace('.html', '')}`, undefined, {
shallow: true,
})
fetchDbs().then((res) => { fetchDbs().then((res) => {
setDbs(res) setDbs(res)
}) })
}, []) }, [])
useEffect(() => { useEffect(() => {
router.replace(`${router.asPath.replace('.html', '')}`, undefined, { const db = router.query.question ? decodeURIComponent(router.query.db) : ''
shallow: true,
}) if (db) {
setSelectedDb(db)
}
}, [router.query.db])
useEffect(() => {
const querySearch = router.query.question const querySearch = router.query.question
? decodeURIComponent(router.query.question) ? decodeURIComponent(router.query.question)
: '' : ''
const db = router.query.question ? decodeURIComponent(router.query.db) : ''
setSearchTerm(querySearch) if (querySearch) {
setSelectedDb(db) setSearchTerm(querySearch)
}
}, [router.query.question]) }, [router.query.question])
useEffect(() => { useEffect(() => {
if (dbs) { if (dbs && selectedDb && (selectedDb === 'all' || dbs[selectedDb])) {
if (selectedDb === 'all') { if (selectedDb === 'all') {
fetchAllData(dbs).then((res) => { fetchAllData(dbs).then((res) => {
setData(mergeData(res)) setData(mergeData(res))
@ -145,26 +153,33 @@ export default function AllQuestions({ router }) {
</center> </center>
<div className={'selectContainer'}> <div className={'selectContainer'}>
<select <select
defaultValue={-1}
value={selectedDb} value={selectedDb}
onChange={(event) => { onChange={(event) => {
const key = event.target.value const key = event.target.value
setData(null) setData(null)
setSelectedDb(key)
if (parseInt(key) === -1) {
router.replace(
`${router.pathname}?question=${encodeURIComponent(
searchTerm
)}`,
undefined,
{ shallow: true }
)
return
}
setFetchingData(true) setFetchingData(true)
router.replace( router.replace(
`${router.pathname}${event.target.value && `${router.pathname}?question=${encodeURIComponent(
'?question='}${encodeURIComponent(searchTerm)}&db=${key}`, searchTerm
)}&db=${key}`,
undefined, undefined,
{ shallow: true } { shallow: true }
) )
setSelectedDb(key)
}} }}
> >
<option disabled value={-1}> <option value={-1}>{' Válassz egy adatbázist!'}</option>
{' Válassz egy adatbázist!'}
</option>
{dbs.map((db, i) => { {dbs.map((db, i) => {
return ( return (
<option value={i} key={db.path}> <option value={i} key={db.path}>
@ -248,8 +263,7 @@ export default function AllQuestions({ router }) {
onChange={(event) => { onChange={(event) => {
setSearchTerm(event.target.value) setSearchTerm(event.target.value)
router.replace( router.replace(
`${router.pathname}${event.target.value && `${router.pathname}?question=${encodeURIComponent(
'?question='}${encodeURIComponent(
event.target.value event.target.value
)}&db=${selectedDb}`, )}&db=${selectedDb}`,
undefined, undefined,
@ -305,7 +319,7 @@ export default function AllQuestions({ router }) {
window.open(`${constants.apiUrl}allqr.txt`, '_blank') window.open(`${constants.apiUrl}allqr.txt`, '_blank')
} else { } else {
window.open( window.open(
`${constants.apiUrl}allqr.txt?db=${selectedDb}`, `${constants.apiUrl}allqr.txt?db=${dbs[selectedDb].name}`,
'_blank' '_blank'
) )
} }