Caching fetched resources

This commit is contained in:
mrfry 2021-06-09 09:48:31 +02:00
parent 7e93e41edc
commit 3daeef184a
12 changed files with 213 additions and 85 deletions

View file

@ -70,7 +70,7 @@ function fetchDbs() {
})
}
export default function AllQuestions({ router }) {
export default function AllQuestions({ router, globalState, setGlobalState }) {
const [subjectsShowing, setSubjectsShowing] = useState(false)
const [searchTerm, setSearchTerm] = useState('')
const [activeSubjName, setActiveSubjName] = useState('')
@ -112,15 +112,60 @@ export default function AllQuestions({ router }) {
useEffect(() => {
if (dbs && selectedDb && (selectedDb === 'all' || dbs[selectedDb])) {
if (selectedDb === 'all') {
fetchAllData(dbs).then((res) => {
setData(mergeData(res))
const hasAll =
globalState.dbs &&
dbs.every((db) => {
return (
Object.keys(globalState.dbs).findIndex((key) => {
return db.name === key
}) !== -1
)
})
if (hasAll) {
const asd = Object.keys(globalState.dbs).map((key) => {
return {
dbName: key,
data: globalState.dbs[key],
}
})
setData(mergeData(asd))
setFetchingData(false)
})
} else {
fetchAllData(dbs).then((res) => {
setData(mergeData(res))
setFetchingData(false)
let cacheRes = {}
res.forEach((db) => {
cacheRes = {
...cacheRes,
[db.dbName]: db.data,
}
})
setGlobalState({
dbs: cacheRes,
})
})
}
} else {
fetchData(dbs[selectedDb]).then((res) => {
setData(res.data)
const selected = dbs[selectedDb]
if (globalState.dbs && globalState.dbs[selected.name]) {
setData(globalState.dbs[selected.name])
setFetchingData(false)
})
} else {
fetchData(dbs[selectedDb]).then((res) => {
setData(res.data)
setFetchingData(false)
setGlobalState({
dbs: {
...globalState.dbs,
[res.dbName]: res.data,
},
})
})
}
}
}
}, [selectedDb, dbs])