This commit is contained in:
2026-04-12 18:54:59 +07:00
parent 28e866a64e
commit ec3d400e8a
71 changed files with 7888 additions and 333 deletions

View File

@@ -1,27 +1,53 @@
import { create } from "zustand"
import { persist } from "zustand/middleware"
import { create } from 'zustand'
import { persist } from 'zustand/middleware'
import type { Question } from '@/types'
interface TestState {
// Shell — filled during TOEIC feature implementation
currentPart: number | null
answers: Record<string, string>
setCurrentPart: (part: number | null) => void
setAnswer: (questionId: string, answer: string) => void
interface TestStore {
partId: number
partName: string
questions: Question[]
answers: (number | null)[]
isSubmitted: boolean
timeUsed: number // seconds elapsed when submitted
startExam: (partId: number, partName: string, questions: Question[]) => void
setAnswer: (questionIndex: number, answerIndex: number) => void
submitExam: (timeUsed: number) => void
reset: () => void
}
export const useTestStore = create<TestState>()(
export const useTestStore = create<TestStore>()(
persist(
(set) => ({
currentPart: null,
answers: {},
setCurrentPart: (part) => set({ currentPart: part }),
setAnswer: (questionId, answer) =>
set((state) => ({
answers: { ...state.answers, [questionId]: answer },
})),
reset: () => set({ currentPart: null, answers: {} }),
partId: 2,
partName: '',
questions: [],
answers: [],
isSubmitted: false,
timeUsed: 0,
startExam: (partId, partName, questions) =>
set({
partId,
partName,
questions,
answers: new Array(questions.length).fill(null),
isSubmitted: false,
timeUsed: 0,
}),
setAnswer: (questionIndex, answerIndex) =>
set((state) => {
const answers = [...state.answers]
answers[questionIndex] = answerIndex
return { answers }
}),
submitExam: (timeUsed) => set({ isSubmitted: true, timeUsed }),
reset: () =>
set({ partId: 2, partName: '', questions: [], answers: [], isSubmitted: false, timeUsed: 0 }),
}),
{ name: "test-store" },
{ name: 'test-store' },
),
)