Spaces:
Sleeping
Sleeping
| import { create } from 'zustand' | |
| import type { Message } from '../types' | |
| interface InterviewState { | |
| sessionId: string | null | |
| topicId: string | null | |
| messages: Message[] | |
| turnCount: number | |
| maxTurns: number | |
| status: 'idle' | 'loading' | 'waiting' | 'finished' | |
| } | |
| interface InterviewActions { | |
| startSession: (sessionId: string, topicId: string, firstMessage: string) => void | |
| addMessage: (message: Message) => void | |
| setTurnCount: (count: number) => void | |
| setStatus: (status: InterviewState['status']) => void | |
| reset: () => void | |
| } | |
| const initialState: InterviewState = { | |
| sessionId: null, | |
| topicId: null, | |
| messages: [], | |
| turnCount: 0, | |
| maxTurns: 5, | |
| status: 'idle', | |
| } | |
| export const useInterviewStore = create<InterviewState & InterviewActions>((set) => ({ | |
| ...initialState, | |
| startSession: (sessionId, topicId, firstMessage) => | |
| set({ | |
| sessionId, | |
| topicId, | |
| messages: [{ role: 'ai', content: firstMessage }], | |
| turnCount: 0, | |
| status: 'waiting', | |
| }), | |
| addMessage: (message) => | |
| set((state) => ({ messages: [...state.messages, message] })), | |
| setTurnCount: (count) => set({ turnCount: count }), | |
| setStatus: (status) => set({ status }), | |
| reset: () => set(initialState), | |
| })) | |