import {create} from "zustand"; import {persist} from "zustand/middleware"; interface QuizStore { listQuizes: { [key: number]: Quizes }; updateQuizesList: (id: number, values: unknown) => void; removeQuiz: (id: number) => void; createBlank: () => void; } interface Quizes { id: number, qid: string, deleted: boolean, archived: boolean, fingerprinting: boolean, repeatable: boolean, note_prevented: boolean, mail_notifications: boolean, unique_answers: boolean, name: string, description: string, config: string, status: string, limit: number, due_to: number, time_of_passing: number, pausable: boolean, version: number, version_comment: string, created_at: string, updated_at: string, question_cnt: number, passed_count: number, average_time: number, super: true, group_id: number, step: number } export const quizStore = create()( persist( (set, get) => ({ listQuizes: { // 1: { // "id": 0, // "qid": "string", // "deleted": false, // "archived": true, // "fingerprinting": true, // "repeatable": true, // "note_prevented": true, // "mail_notifications": true, // "unique_answers": true, // "name": "string", // "description": "string", // "config": "string", // "status": "string", // "limit": 0, // "due_to": 0, // "time_of_passing": 0, // "pausable": true, // "version": 0, // "version_comment": "string", // "created_at": "string", // "updated_at": "string", // "question_cnt": 0, // "passed_count": 0, // "average_time": 0, // "super": true, // "group_id": 0 // } }, updateQuizesList: (id: number, values: any) => { const state = get()["listQuizes"] || {}; state[id] = { ...state[id], ...values }; set({listQuizes: state}); }, removeQuiz: (id) => { const state = get()["listQuizes"] || {}; const newState = Object.entries(state).reduce((accumulator, [key, value], index, array) => { if (key !== id.toString()) { accumulator[key] = value; } return accumulator; }, {}); set({listQuizes: newState}); }, createBlank: () => { const id = getRandom(1000000, 10000000) const newListQuizes = get()["listQuizes"] || {}; newListQuizes[id] = { "id": id, "qid": "", "deleted": false, "archived": true, "fingerprinting": true, "repeatable": true, "note_prevented": true, "mail_notifications": true, "unique_answers": true, "name": "", "description": "", "config": "", "status": "", "limit": 0, "due_to": 0, "time_of_passing": 0, "pausable": true, "version": 0, "version_comment": "", "created_at": "", "updated_at": "", "question_cnt": 0, "passed_count": 0, "average_time": 0, "super": true, "group_id": 0, "step": 1 }; set({listQuizes: newListQuizes}); return id; }, }), { name: "quizes", } ) ); function getRandom(min: number, max: number) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; }