const initialState = { loading: true, error: null, list: [], info: null, searchResult: [], filterResult: [], }; export default function book(state = initialState, action) { let { type, data } = action; switch (type) { case "book/list": return { ...state, loading: false, list: data, error: null }; case "book/info": return { ...state, loading: false, list: null, info: data, error: null }; 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.searchResult.length > 0 ? state.searchResult : 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; const byLevelFilter = level.length > 0 ? realList.filter( (item) => item.name.indexOf(level.map((item) => item)) !== -1 ) : realList; const bySubjectFilter = subject.length > 0 ? byLevelFilter.filter( (item) => item.name.indexOf(subject.map((item) => item)) !== -1 ) : byLevelFilter; const bySearchFilter = search ? bySubjectFilter.filter((item) => item.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 "loading": return { ...state, loading: true }; case "error": return { ...state, loading: false, error: data.message }; default: return state; } }