|
|
@@ -1,6 +1,6 @@
|
|
|
import Vue from 'vue'
|
|
|
import Vuex, { GetterTree, MutationTree } from 'vuex'
|
|
|
-import { ID, Record, UserSerializer } from '@/api/types'
|
|
|
+import { CodeTuple, ID, Record, UserSerializer } from '@/api/types'
|
|
|
import createPersistedState from 'vuex-persistedstate'
|
|
|
|
|
|
Vue.use(Vuex)
|
|
|
@@ -10,20 +10,34 @@ export type RootState = {
|
|
|
token?: string
|
|
|
examAnswers?: Object
|
|
|
examId?: ID
|
|
|
+ examCodesCache?: Object
|
|
|
}
|
|
|
|
|
|
export const state = (): RootState => ({
|
|
|
user: (null as unknown) as UserSerializer,
|
|
|
token: '',
|
|
|
examAnswers: (null as unknown) as Object,
|
|
|
- examId: (null as unknown) as ID
|
|
|
+ examId: (null as unknown) as ID,
|
|
|
+ examCodesCache: (null as unknown) as Object
|
|
|
})
|
|
|
|
|
|
export const mutations: MutationTree<RootState> = {
|
|
|
setToken: (state, token) => (state.token = token),
|
|
|
setUser: (state, user) => (state.user = user),
|
|
|
setExamAnswers: (state, answers) => (state.examAnswers = answers),
|
|
|
- setExamId: (state, examId) => (state.examId = examId)
|
|
|
+ setExamId: (state, examId) => (state.examId = examId),
|
|
|
+ setExamCodes: (state, { questionId, codeCache }) => {
|
|
|
+ if (
|
|
|
+ state.examCodesCache &&
|
|
|
+ Object.keys(state.examCodesCache).find(questionId)
|
|
|
+ ) {
|
|
|
+ let entries = Object.entries(state.examCodesCache)
|
|
|
+ entries.push([questionId, codeCache])
|
|
|
+ state.examCodesCache = Object.fromEntries(entries)
|
|
|
+ } else {
|
|
|
+ state.examCodesCache = Object.fromEntries([questionId, codeCache])
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export const getters: GetterTree<RootState, RootState> = {
|
|
|
@@ -32,7 +46,8 @@ export const getters: GetterTree<RootState, RootState> = {
|
|
|
getId: (state) => state.user.id,
|
|
|
isLogin: (state) => Boolean(state.token),
|
|
|
getExamAnswers: (state) => state.examAnswers,
|
|
|
- getExamId: (state) => state.examId
|
|
|
+ getExamId: (state) => state.examId,
|
|
|
+ getExamCodes: (state) => state.examCodesCache
|
|
|
}
|
|
|
|
|
|
export default new Vuex.Store({
|