2023-05-14 11:00:37 +00:00
|
|
|
import { create } from "zustand";
|
|
|
|
import { persist } from "zustand/middleware";
|
|
|
|
|
|
|
|
interface QuizStore {
|
2023-05-14 14:25:07 +00:00
|
|
|
listQuizes: {[key: number]: Quizes};
|
2023-05-26 18:27:33 +00:00
|
|
|
updateQuizesList: (id: number, values: unknown) => void;
|
2023-05-14 14:25:07 +00:00
|
|
|
removeQuiz:(id: number) => void;
|
2023-05-26 18:27:33 +00:00
|
|
|
createBlank: () => void;
|
2023-05-14 11:00:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
interface Quizes {
|
|
|
|
id: number,
|
|
|
|
qid: string,
|
|
|
|
deleted: boolean,
|
|
|
|
archived: boolean,
|
|
|
|
fingerprinting: boolean,
|
|
|
|
repeatable: boolean,
|
|
|
|
note_prevented: boolean,
|
|
|
|
mail_notifications: boolean,
|
2023-05-14 14:25:07 +00:00
|
|
|
unique_answers: boolean,
|
2023-05-14 11:00:37 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
export const quizStore = create<QuizStore>()(
|
|
|
|
persist(
|
|
|
|
(set, get) => ({
|
2023-05-14 14:25:07 +00:00
|
|
|
listQuizes: {
|
2023-05-20 20:36:33 +00:00
|
|
|
// 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
|
|
|
|
// }
|
2023-05-14 14:25:07 +00:00
|
|
|
},
|
2023-05-26 18:27:33 +00:00
|
|
|
updateQuizesList: (id: number, values: any) => {
|
2023-05-14 14:25:07 +00:00
|
|
|
const state = get()["listQuizes"] || {};
|
2023-05-26 18:27:33 +00:00
|
|
|
state[id] = {
|
|
|
|
...state[id],
|
|
|
|
...values
|
2023-05-14 14:25:07 +00:00
|
|
|
};
|
2023-05-26 18:27:33 +00:00
|
|
|
set({listQuizes:state});
|
2023-05-14 14:25:07 +00:00
|
|
|
},
|
|
|
|
removeQuiz: (id) => {
|
|
|
|
const state = get()["listQuizes"] || {};
|
|
|
|
|
|
|
|
const newState = Object.entries(state).reduce<any>((accumulator, [key, value], index, array) => {
|
|
|
|
if (key !== id.toString()) {
|
|
|
|
accumulator[key] = value;
|
|
|
|
}
|
|
|
|
return accumulator;
|
|
|
|
}, {});
|
|
|
|
set({listQuizes:newState});
|
2023-05-26 18:27:33 +00:00
|
|
|
},
|
|
|
|
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
|
|
|
|
};
|
|
|
|
set({listQuizes:newListQuizes});
|
|
|
|
return id;
|
|
|
|
},
|
2023-05-14 11:00:37 +00:00
|
|
|
}),
|
|
|
|
{
|
|
|
|
name: "quizes",
|
|
|
|
}
|
|
|
|
)
|
2023-05-20 20:36:33 +00:00
|
|
|
);
|
|
|
|
|
2023-05-26 18:27:33 +00:00
|
|
|
function getRandom(min: number, max:number) {
|
|
|
|
min = Math.ceil(min);
|
|
|
|
max = Math.floor(max);
|
|
|
|
return Math.floor(Math.random() * (max - min)) + min;
|
|
|
|
}
|