feat: implement knowledge testing system with leaderboard, quiz generation, and PocketBase integration
This commit is contained in:
@@ -9,7 +9,7 @@ import Input from '../components/ui/Input';
|
||||
import LearningContentViewer from '../components/ui/LearningContentViewer';
|
||||
import { useApp } from '../store/AppContext';
|
||||
import { getAssignedTopic, generateLearningContent, getCachedContent, generateCustomTopic } from '../lib/learningService';
|
||||
import { storage } from '../lib/storage';
|
||||
import * as db from '../lib/db';
|
||||
|
||||
const Leren = () => {
|
||||
const { state } = useApp();
|
||||
@@ -39,12 +39,17 @@ const Leren = () => {
|
||||
|
||||
useEffect(() => {
|
||||
if (state.currentUser) {
|
||||
const assigned = getAssignedTopic(state.currentUser.id, state.weekNumber);
|
||||
setAssignedTopic(assigned);
|
||||
setAllTopics(storage.get('kb:topics', []));
|
||||
|
||||
const done = storage.get(`user:${state.currentUser.id}:week:${state.weekNumber}:learn_done`, false);
|
||||
if (done) setWeeklyDone(true);
|
||||
const load = async () => {
|
||||
const [assigned, topics, done] = await Promise.all([
|
||||
getAssignedTopic(state.currentUser.id, state.weekNumber),
|
||||
db.getTopics(),
|
||||
db.getLearnDone(state.currentUser.id, state.weekNumber),
|
||||
]);
|
||||
setAssignedTopic(assigned);
|
||||
setAllTopics(topics);
|
||||
if (done) setWeeklyDone(true);
|
||||
};
|
||||
load();
|
||||
}
|
||||
}, [state.currentUser, state.weekNumber]);
|
||||
|
||||
@@ -97,11 +102,11 @@ const Leren = () => {
|
||||
}
|
||||
};
|
||||
|
||||
const doComplete = () => {
|
||||
const doComplete = async () => {
|
||||
setSessionDone(true);
|
||||
if (!weeklyDone) {
|
||||
setWeeklyDone(true);
|
||||
storage.set(`user:${state.currentUser.id}:week:${state.weekNumber}:learn_done`, true);
|
||||
await db.setLearnDone(state.currentUser.id, state.weekNumber);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -114,14 +119,12 @@ const Leren = () => {
|
||||
doComplete();
|
||||
};
|
||||
|
||||
const handleSubmitFeedback = () => {
|
||||
const handleSubmitFeedback = async () => {
|
||||
if (feedbackText.trim()) {
|
||||
storage.set(`user:${state.currentUser.id}:feedback:${activeTopic.id}`, {
|
||||
text: feedbackText.trim(),
|
||||
topicId: activeTopic.id,
|
||||
week: state.weekNumber,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
await db.setSetting(
|
||||
`feedback:${state.currentUser.id}:${activeTopic.id}:${state.weekNumber}`,
|
||||
feedbackText.trim()
|
||||
);
|
||||
}
|
||||
setShowFeedbackModal(false);
|
||||
doComplete();
|
||||
|
||||
Reference in New Issue
Block a user