|
|
import { toast } from "react-toastify"; |
|
|
|
|
|
const initialState = { |
|
|
loading: false, |
|
|
error: null, |
|
|
list: [], |
|
|
schoolUserList :[], |
|
|
info: null, |
|
|
searchResult: [], |
|
|
filterResult: [], |
|
|
subjects: [], |
|
|
levels: [], |
|
|
sortFilters: ["مرتب سازی", "محبوب ترین", "جدیدترین"], |
|
|
selectedVideo: null, |
|
|
gradeFilterBooks: null, |
|
|
sortFilterCourse: null, |
|
|
selectedGrade: null, |
|
|
selectedSort: "پربازدید ترین ها", |
|
|
}; |
|
|
|
|
|
const grades = [ |
|
|
"پیش دبستان", |
|
|
"اول", |
|
|
"دوم", |
|
|
"سوم", |
|
|
"چهارم", |
|
|
"پنجم", |
|
|
"ششم", |
|
|
"هفتم", |
|
|
"هشتم", |
|
|
"نهم", |
|
|
"دهم", |
|
|
"یازدهم", |
|
|
"دوازدهم", |
|
|
]; |
|
|
|
|
|
export default function book(state = initialState, action) { |
|
|
let { type, data } = action; |
|
|
switch (type) { |
|
|
case "product/list": |
|
|
let itemsSubject = (Array.isArray(data) ? data : []).map( |
|
|
(item, index) => item.name |
|
|
); |
|
|
if (window.innerWidth < 1000) { |
|
|
itemsSubject.unshift("نام کتاب"); |
|
|
} |
|
|
let itemsLevel = (Array.isArray(data) ? data : []) |
|
|
.map((item) => item.gradeId * 1) |
|
|
.sort((a, b) => a - b) |
|
|
.map((e) => grades[e]); |
|
|
if (window.innerWidth < 1000) { |
|
|
itemsLevel.unshift("پایه تحصیلی"); |
|
|
} |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
list: data, |
|
|
subjects: Array.from(new Set(itemsSubject)), |
|
|
levels: Array.from(new Set(itemsLevel)), |
|
|
filterResult: data, |
|
|
error: null, |
|
|
}; |
|
|
case "product/info": |
|
|
return { ...state, loading: false, info: data, error: null }; |
|
|
case "product/schoolUser": |
|
|
return { ...state, loading: false, schoolUserList: data, error: null }; |
|
|
case "book/lesson/active": |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
error: null, |
|
|
}; |
|
|
case "book/gradeFilter": |
|
|
if (data === state.selectedGrade) { |
|
|
return { ...state, gradeFilterBooks: null, selectedGrade: null }; |
|
|
} else { |
|
|
return { |
|
|
...state, |
|
|
gradeFilterBooks: state.list.filter( |
|
|
(item, i) => grades[item.gradeId] === data |
|
|
), |
|
|
selectedGrade: data, |
|
|
}; |
|
|
} |
|
|
case "book/sortFilter": |
|
|
const search = state.list.filter( |
|
|
(item) => item.name.indexOf(data.search) !== -1 |
|
|
); |
|
|
if (data.sort === "تمامی دورهها") { |
|
|
return { ...state, sortFilterCourse: search, selectedSort: data.sort }; |
|
|
} else if (data.sort === "جدیدترینها") { |
|
|
return { |
|
|
...state, |
|
|
sortFilterCourse: search.sort((item1, item2) => { |
|
|
return item1.publishYear - item2.publishYear; |
|
|
}), |
|
|
selectedSort: data.sort, |
|
|
}; |
|
|
} |
|
|
return { ...state, sortFilterCourse: search, selectedSort: data.sort }; |
|
|
|
|
|
// case "book/update": |
|
|
// return { ...state, loading: false, error: null }; |
|
|
// case "book/add": |
|
|
// return { ...state, loading: false, error: null }; |
|
|
// case "book/delete": |
|
|
// return { ...state, loading: false, error: null }; |
|
|
// case "book/search": |
|
|
// return { ...state }; |
|
|
// case "book/filter": |
|
|
// const realList = state.list; |
|
|
// const level = data.level; |
|
|
// const subject = data.subject; |
|
|
// const sort = data.sort; |
|
|
// const search = data.search; |
|
|
// if (level.length > 0 || subject.length > 0 || sort || search) { |
|
|
// localStorage.setItem("filter", "ON"); |
|
|
// } |
|
|
// let finalSort; |
|
|
// let byLevelFilter = []; |
|
|
// if (level.length > 0) { |
|
|
// level.map((item1) => { |
|
|
// for (let i = 0; i < realList.length; i++) { |
|
|
// if (grades[realList[i].gradeId] === item1) { |
|
|
// byLevelFilter.push(realList[i]); |
|
|
// } |
|
|
// } |
|
|
// }); |
|
|
// } else { |
|
|
// byLevelFilter = realList; |
|
|
// } |
|
|
|
|
|
// let bySubjectFilter = []; |
|
|
// if (subject.length > 0) { |
|
|
// subject.map((item1) => { |
|
|
// for (let i = 0; i < byLevelFilter.length; i++) { |
|
|
// if (byLevelFilter[i].name === item1) { |
|
|
// bySubjectFilter.push(byLevelFilter[i]); |
|
|
// } |
|
|
// } |
|
|
// }); |
|
|
// } else { |
|
|
// bySubjectFilter = byLevelFilter; |
|
|
// } |
|
|
|
|
|
// const bySearchFilter = search |
|
|
// ? bySubjectFilter.filter((item1) => item1.name.indexOf(search) !== -1) |
|
|
// : bySubjectFilter; |
|
|
|
|
|
// if (sort === "گران ترین") { |
|
|
// finalSort = bySearchFilter.sort((item1, item2) => { |
|
|
// return item1.product[0].price - item2.product[0].price; |
|
|
// }); |
|
|
// } else { |
|
|
// finalSort = bySearchFilter; |
|
|
// } |
|
|
// return { |
|
|
// ...state, |
|
|
// loading: false, |
|
|
// error: null, |
|
|
// filterResult: finalSort, |
|
|
// }; |
|
|
case "book/loading": |
|
|
return { ...state, loading: true }; |
|
|
case "book/error": |
|
|
toast.error(data.message); |
|
|
return { ...state, loading: false, error: data.message }; |
|
|
default: |
|
|
return state; |
|
|
} |
|
|
}
|
|
|
|