You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
355 lines
10 KiB
355 lines
10 KiB
import { IoReturnUpBack } from "react-icons/io5" |
|
import fizikpdf from '../../assets/fizik.pdf' |
|
import samplePdf from '../../assets/sample.pdf' |
|
const initialState = { |
|
grade: 8, |
|
groupId: 0, |
|
name: '', |
|
startDate: new Date(), |
|
endDate: new Date(), |
|
startTime: '19:0', |
|
endTime: '', |
|
description: '', |
|
type: 'bank', |
|
duration:null, |
|
|
|
questionnaires: [ |
|
{ |
|
id: 1, |
|
name: 'عمومی', |
|
fileUrl: fizikpdf, |
|
courses: [ |
|
|
|
{ |
|
id: 0, |
|
questionnaireId: 1, |
|
name: 'دینی', |
|
coefficient: 4, |
|
questionStart: 1, |
|
questionEnd: 21 |
|
}, |
|
|
|
], |
|
answers:[ |
|
|
|
] |
|
}, |
|
{ |
|
id: 2, |
|
name: 'اختصاصی', |
|
fileUrl: samplePdf, |
|
courses: [], |
|
answers:[ |
|
|
|
] |
|
} |
|
], |
|
|
|
|
|
answers: [ |
|
|
|
], |
|
|
|
courseBank: [ |
|
{ |
|
id: 1, |
|
title: 'ریاضی', |
|
coefficient: 4, |
|
numberOfOptions: 4, |
|
selectedQuestions: [] |
|
}, |
|
{ |
|
id: 2, |
|
title: 'شیمی', |
|
coefficient: 3, |
|
numberOfOptions: 3, |
|
selectedQuestions: [] |
|
}, |
|
], |
|
questionBank: [ |
|
{ |
|
questionId: 1, |
|
courseId: 2, |
|
title: 'تترا فلورید اسید چنتا اسید داره؟', |
|
answeredPercentage: '83%', |
|
score: 1, |
|
options: [ |
|
{ |
|
id: 1, |
|
title: 'تترا', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 2, |
|
title: 'سه ترا', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 3, |
|
title: 'هویج و گوجه فرنگی؟', |
|
isAnswer: true |
|
}, |
|
{ |
|
id: 4, |
|
title: 'فلور تا', |
|
isAnswer: false |
|
}, |
|
] |
|
}, |
|
{ |
|
questionId: 2, |
|
courseId: 2, |
|
title: 'asdaw dsfsdfiermc', |
|
answeredPercentage: '83%', |
|
score: 1, |
|
options: [ |
|
{ |
|
id: 1, |
|
title: 'asdasd', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 2, |
|
title: 'asdasd2', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 3, |
|
title: '', |
|
isAnswer: true |
|
}, |
|
{ |
|
id: 4, |
|
title: 'asdasd4', |
|
isAnswer: false |
|
}, |
|
] |
|
}, |
|
{ |
|
questionId: 3, |
|
courseId: 1, |
|
title: 'برای حل مساءل مربوط به مساحت زیر نمودار باید از کدام مبحث ریاضی استفاده کرد؟', |
|
answeredPercentage: '43%', |
|
score: 1, |
|
options: [ |
|
{ |
|
id: 1, |
|
title: 'لگاریتم طبیعی', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 2, |
|
title: 'حد و مشتق', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 3, |
|
title: 'قدر مطلق', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 4, |
|
title: 'نخوندم 🗿', |
|
isAnswer: true |
|
}, |
|
] |
|
}, |
|
{ |
|
questionId: 4, |
|
courseId: 2, |
|
title: 'asdaw dsfsdfisdfsdfsfsdfsfsdfsdfermc', |
|
answeredPercentage: '83%', |
|
score: 1, |
|
options: [ |
|
{ |
|
id: 1, |
|
title: 'asdasd', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 2, |
|
title: 'asdasd2', |
|
isAnswer: false |
|
}, |
|
{ |
|
id: 3, |
|
title: 'sdfsdfsdfsfd', |
|
isAnswer: true |
|
}, |
|
{ |
|
id: 4, |
|
title: 'asdasd4', |
|
isAnswer: false |
|
}, |
|
] |
|
}, |
|
|
|
], |
|
courses: [ |
|
|
|
], |
|
questions: [ |
|
|
|
], |
|
|
|
|
|
} |
|
export const numOfinitQs = initialState.questionBank.length; |
|
|
|
export default function addExamReduser(state = initialState, { type, payload }) { |
|
switch (type) { |
|
|
|
case 'ADD_EXAM_GRADE_AND_GROUP': |
|
return { |
|
...state, |
|
grade: payload.grade, |
|
groupId: payload.groupId |
|
} |
|
|
|
case 'ADD_EXAM_DESCRIPTION': |
|
return { |
|
...state, |
|
name: payload.name, |
|
startDate: new Date(), |
|
endDate: new Date(), |
|
startTime: "19:0", |
|
endTime: "", |
|
description: payload.description, |
|
type: payload.type, |
|
duration: payload.duration, |
|
startDate:payload.startDate, |
|
endDate:payload.endDate |
|
}; |
|
|
|
case 'ADD_EXAM_QUESTIONAIRES': |
|
return { |
|
...state, |
|
questionnaires: [...state.questionnaires, payload] |
|
} |
|
case 'ADD_QUESTIONNAIRE_COURSES': |
|
console.log(payload) |
|
let thisQ = state.questionnaires.find(itm => itm.id == payload.questionnaireId) |
|
let otherQ = state.questionnaires.filter(itm => itm.id !== payload.questionnaireId) |
|
thisQ = { |
|
...thisQ, |
|
courses: [ ...thisQ.courses,payload] |
|
} |
|
console.log(thisQ) |
|
return { |
|
...state, |
|
questionnaires: [...otherQ, thisQ] |
|
} |
|
case 'ADD_ANSWERS': |
|
console.log(payload) |
|
let thisQC = state.questionnaires.find(itm => itm.id == payload[0].questionnaierId) |
|
let otherQC = state.questionnaires.filter(itm => itm.id !== payload[0].questionnaierId) |
|
thisQC = { |
|
...thisQC, |
|
answers: [ ...thisQC?.answers,...payload] |
|
} |
|
|
|
return { |
|
...state, |
|
questionnaires: [...otherQC, thisQC] |
|
} |
|
|
|
case 'ADD_EXAM_COURSE': |
|
return { |
|
...state, |
|
courses: [...state.courses, payload] |
|
} |
|
case 'REMOVE_EXAM_COURSE': |
|
return { |
|
...state, |
|
courses: state.courses.filter(itm => itm.id !== payload.id) |
|
} |
|
|
|
case 'ADD_EXAM_QUESTIONS': |
|
console.log(payload) |
|
const othercourses = state.courses.filter(itm => itm.id !== payload.courseId) |
|
const selectedC = state.courses.filter(itm => itm.id == payload.courseId) |
|
selectedC[0] = { ...selectedC[0], selectedQuestions: [payload, ...selectedC[0].selectedQuestions] } |
|
const newCourses = [...othercourses, ...selectedC] |
|
|
|
return { |
|
...state, |
|
courses: newCourses |
|
|
|
} |
|
|
|
|
|
case 'REMOVE_EXAM_QUESTIONS': |
|
const dontDeleteThese = state.courses.filter(itm => itm.id !== payload.courseId) |
|
const courseForDelete = state.courses.filter(itm => itm.id == payload.courseId) |
|
courseForDelete[0] = { ...courseForDelete[0], selectedQuestions: courseForDelete[0].selectedQuestions.filter(itm => itm.questionId !== payload.questionId) } |
|
const newCoursesWithDeleted = [...dontDeleteThese, ...courseForDelete] |
|
console.log(newCoursesWithDeleted) |
|
console.log(courseForDelete) |
|
console.log(dontDeleteThese) |
|
console.log(payload) |
|
return { |
|
...state, |
|
courses: newCoursesWithDeleted |
|
|
|
} |
|
case 'REMOVE_QUESTION_FROM_BANK': |
|
return { |
|
...state, |
|
questionBank: state.questionBank.filter(itm => itm.questionId !== payload.questionId) |
|
} |
|
case 'GET_QUESTION_BACK_TO_BANK': |
|
return { |
|
...state, |
|
questionBank: [payload, ...state.questionBank,] |
|
} |
|
|
|
case 'CHANGE_QUESTION_ORDER': |
|
const dontChangeThese = state.courses.filter(itm => itm.id !== payload[0].courseId) |
|
const courseForChange = state.courses.filter(itm => itm.id == payload[0].courseId) |
|
courseForChange[0] = { ...courseForChange[0], selectedQuestions: payload } |
|
const newChangedCourseSort = [...dontChangeThese, ...courseForChange] |
|
console.log(payload) |
|
return { |
|
...state, |
|
courses: newChangedCourseSort |
|
} |
|
case 'CHANGE_COURSE_ORDER': |
|
console.log(payload) |
|
return { |
|
...state, |
|
courses: payload |
|
} |
|
case 'ADD_CUSTOM_QUESTION': |
|
const otherCourses = state.courses.filter(itm => itm.id !== payload.courseId) |
|
const selectedc = state.courses.filter(itm => itm.id == payload.courseId) |
|
selectedc[0] = { ...selectedc[0], selectedQuestions: [payload, ...selectedc[0].selectedQuestions] } |
|
const newcourses = [...selectedc, ...otherCourses] |
|
return { |
|
...state, |
|
courses: newcourses |
|
|
|
} |
|
case 'CHANGE_COURSE_NUM_OF_OPTIONS': |
|
const otherCourseS = state.courses.filter(itm => itm.id !== payload.courseId) |
|
const seLectedC = state.courses.filter(itm => itm.id == payload.courseId) |
|
seLectedC[0] = { ...seLectedC[0], numberOfOptions: payload.value } |
|
const neWCourses = [...seLectedC, ...otherCourseS] |
|
return { |
|
...state, |
|
courses: neWCourses |
|
|
|
} |
|
|
|
case 'CHANGE_QUESTIONNAIRES_ORDER': |
|
return { |
|
...state, |
|
questionnaires: payload |
|
|
|
} |
|
|
|
default: |
|
return state; |
|
|
|
} |
|
|
|
} |