|
|
import location from "../../utils/location"; |
|
|
|
|
|
const initialState = { |
|
|
isDark: localStorage.getItem("isDark") === "true" ? true : false, |
|
|
isMobile: window.innerWidth < 1024, |
|
|
homeData: [], |
|
|
newProducts: [], |
|
|
levels: [], |
|
|
loading: false, |
|
|
error: null, |
|
|
searchResult: [], |
|
|
arList: [], |
|
|
blogList: [], |
|
|
blog: null, |
|
|
province: ["استان"], |
|
|
city: ["شهر"], |
|
|
departmans: [ |
|
|
{ |
|
|
id: 0, |
|
|
name: "محتوا", |
|
|
}, |
|
|
{ |
|
|
id: 0, |
|
|
name: "دیزاین", |
|
|
}, |
|
|
{ |
|
|
id: 0, |
|
|
name: "برنامه نویسی", |
|
|
}, |
|
|
], |
|
|
header: [], |
|
|
selectedMenu: null, |
|
|
contactData: null, |
|
|
selectedVideo: null, |
|
|
bookInfo: null, |
|
|
activeCategory: null, |
|
|
categories: null, |
|
|
bookSection: null, |
|
|
grades: { |
|
|
0: "پیش دبستان", |
|
|
1: "اول", |
|
|
2: "دوم", |
|
|
3: "سوم", |
|
|
4: "چهارم", |
|
|
5: "پنجم", |
|
|
6: "ششم", |
|
|
7: "هفتم", |
|
|
8: "هشتم", |
|
|
9: "نهم", |
|
|
10: "دهم", |
|
|
11: "یازدهم", |
|
|
12: "دوازدهم", |
|
|
}, |
|
|
headerOptions: { |
|
|
shown: false, |
|
|
logo: false, |
|
|
hamburgerMenu: false, |
|
|
qr: false, |
|
|
menu: false, |
|
|
back: false, |
|
|
title: false, |
|
|
}, |
|
|
desktopContentTransform: false, |
|
|
overLayer: false, |
|
|
provinces: [], |
|
|
cities: [], |
|
|
dashboardOptions: { |
|
|
profile: null, |
|
|
support: null, |
|
|
}, |
|
|
}; |
|
|
|
|
|
const grades = [ |
|
|
"پیش دبستان", |
|
|
"اول", |
|
|
"دوم", |
|
|
"سوم", |
|
|
"چهارم", |
|
|
"پنجم", |
|
|
"ششم", |
|
|
"هفتم", |
|
|
"هشتم", |
|
|
"نهم", |
|
|
"دهم", |
|
|
"یازدهم", |
|
|
"دوازدهم", |
|
|
]; |
|
|
|
|
|
export default function publicApi(state = initialState, action) { |
|
|
let { type, data } = action; |
|
|
switch (type) { |
|
|
case "public/dashboard": |
|
|
return { ...state, error: null, loading: false, dashboardOptions: data }; |
|
|
case "public/setOverLayer": |
|
|
return { ...state, overLayer: data }; |
|
|
case "public/setDesktopContentTransform": |
|
|
return { ...state, desktopContentTransform: data }; |
|
|
case "public/setHeaderOptions": |
|
|
return { ...state, headerOptions: data }; |
|
|
case "public/setIsDark": |
|
|
localStorage.setItem("isDark", data); |
|
|
return { ...state, location: false, error: null, isDark: data }; |
|
|
case "active/video": |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
error: null, |
|
|
selectedVideo: data, |
|
|
}; |
|
|
case "active/category": |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
activeCategory: state.activeCategory === data ? null : data, |
|
|
error: null, |
|
|
}; |
|
|
case "public/vod/bookSection": |
|
|
const videoId = location.getId(); |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
bookSection: data, |
|
|
error: null, |
|
|
selectedVideo: data.vods?.filter((item) => item.id !== videoId)[0], |
|
|
}; |
|
|
case "public/vod/bookCourse": |
|
|
let allCats; |
|
|
allCats = Array.from( |
|
|
new Set(data.vods.map((item) => item.categoryId && item.categoryId)) |
|
|
); |
|
|
|
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
bookInfo: { |
|
|
...data, |
|
|
vods: data.vods.map((item) => { |
|
|
return { ...item, active: false }; |
|
|
}), |
|
|
}, |
|
|
error: null, |
|
|
categories: allCats.map((item) => |
|
|
data.vods.filter((item1) => item1.categoryId === item) |
|
|
), |
|
|
selectedVideo: data.vods.filter( |
|
|
(item) => item.id !== location.getId() |
|
|
)[0], |
|
|
}; |
|
|
case "public/homePage": |
|
|
let itemsLevel; |
|
|
if (window.innerWidth > 1000) { |
|
|
const jadidTarin = data.filter( |
|
|
(item) => item.title === "جدیدترین کتابهای دانوین" |
|
|
); |
|
|
itemsLevel = jadidTarin[0].data |
|
|
.map((item) => item.book.gradeId * 1) |
|
|
.sort((a, b) => a - b) |
|
|
.map((e) => grades[e]); |
|
|
itemsLevel.unshift("همه"); |
|
|
} |
|
|
|
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
levels: window.innerWidth > 1000 ? Array.from(new Set(itemsLevel)) : [], |
|
|
error: null, |
|
|
homeData: data, |
|
|
}; |
|
|
case "public/ar": |
|
|
return { ...state, loading: false, error: null, arList: data }; |
|
|
case "public/contact": |
|
|
return { ...state, loading: false, error: null, contactData: data }; |
|
|
case "public/blogList": |
|
|
return { ...state, loading: false, error: null, blogList: data }; |
|
|
case "public/blogInfo": |
|
|
return { ...state, loading: false, error: null, blog: data }; |
|
|
case "public/setSubscribe": |
|
|
return { ...state, loading: false, error: null, selectedSubscribe: data }; |
|
|
case "public/province": |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
error: null, |
|
|
province: [...state.province, ...data.map((item) => item.name)], |
|
|
provinces: data, |
|
|
}; |
|
|
case "public/city": |
|
|
return { |
|
|
...state, |
|
|
loading: false, |
|
|
error: null, |
|
|
city: [...data.map((item) => item.name)], |
|
|
cities: data, |
|
|
}; |
|
|
case "public/selectMenu": |
|
|
return { ...state, loading: false, error: null, selectedMenu: data }; |
|
|
case "public/VOD/homePage": |
|
|
return { ...state, loading: false, error: null, header: data }; |
|
|
case "loading": |
|
|
return { ...state, loading: true }; |
|
|
case "error": |
|
|
return { ...state, loading: false, error: data.message }; |
|
|
default: |
|
|
return state; |
|
|
} |
|
|
}
|
|
|
|