feat(targeted): add targeted practice functionality
feat(analytics); add analytics page
This commit is contained in:
79
src/stores/useExamConfigStore.ts
Normal file
79
src/stores/useExamConfigStore.ts
Normal file
@ -0,0 +1,79 @@
|
||||
// stores/useExamConfigStore.ts
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
import type { StartExamPayload, ExamMode } from "../types/test";
|
||||
|
||||
interface ExamConfigState {
|
||||
payload: StartExamPayload | null;
|
||||
|
||||
setSheetId: (id: string) => void;
|
||||
storeTopics: (ids: string[]) => void;
|
||||
setDifficulty: (difficulty: StartExamPayload["difficulty"]) => void;
|
||||
|
||||
setQuestionCount: (count: number) => void;
|
||||
storeDuration: (minutes: number) => void;
|
||||
setMode: (mode: ExamMode) => void;
|
||||
|
||||
clearPayload: () => void;
|
||||
}
|
||||
|
||||
export const useExamConfigStore = create<ExamConfigState>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
payload: null,
|
||||
|
||||
setSheetId: (sheet_id) =>
|
||||
set({
|
||||
payload: {
|
||||
...(get().payload ?? {}),
|
||||
sheet_id,
|
||||
} as StartExamPayload,
|
||||
}),
|
||||
|
||||
storeTopics: (topic_ids) =>
|
||||
set({
|
||||
payload: {
|
||||
...(get().payload ?? {}),
|
||||
topic_ids,
|
||||
} as StartExamPayload,
|
||||
}),
|
||||
|
||||
setDifficulty: (difficulty) =>
|
||||
set({
|
||||
payload: {
|
||||
...(get().payload ?? {}),
|
||||
difficulty,
|
||||
} as StartExamPayload,
|
||||
}),
|
||||
|
||||
setQuestionCount: (question_count) =>
|
||||
set({
|
||||
payload: {
|
||||
...(get().payload ?? {}),
|
||||
question_count,
|
||||
} as StartExamPayload,
|
||||
}),
|
||||
|
||||
storeDuration: (time_limit_minutes) =>
|
||||
set({
|
||||
payload: {
|
||||
...(get().payload ?? {}),
|
||||
time_limit_minutes,
|
||||
} as StartExamPayload,
|
||||
}),
|
||||
|
||||
setMode: (mode) =>
|
||||
set({
|
||||
payload: {
|
||||
...(get().payload ?? {}),
|
||||
mode,
|
||||
} as StartExamPayload,
|
||||
}),
|
||||
|
||||
clearPayload: () => set({ payload: null }),
|
||||
}),
|
||||
{
|
||||
name: "exam-config-storage",
|
||||
},
|
||||
),
|
||||
);
|
||||
Reference in New Issue
Block a user