|
1 | | -import React, { useReducer } from 'react'; |
2 | | -import { appReducer } from '../../reducers/appReducer'; |
3 | | -import { lightTheme, darkTheme } from '../../providers/themes'; |
4 | | -import youtubeSearchService from '../../services/youtubeSearchService'; |
5 | | -import AppContext from '../../providers/AppContext'; |
| 1 | +import React from 'react'; |
| 2 | +import AppWrapper from './AppWrapper'; |
6 | 3 | import { createBrowserHistory } from 'history'; |
7 | | -import { Router } from 'react-router-dom'; |
8 | | -import { LayoutWrapper } from '../Layout'; |
9 | | -import { |
10 | | - SET_IS_FIRST_LOAD, |
11 | | - SET_SESSION, |
12 | | - SET_VIDEOS_LIST, |
13 | | - SWITCH_THEME |
14 | | -} from '../../reducers/actionTypes'; |
| 4 | +import LayoutWrapper from '../Layout/LayoutWrapper'; |
15 | 5 | import Content from './Content'; |
16 | | - |
17 | | -const USER_SESSION_KEY = "user_session"; |
18 | | -const initialState = { |
19 | | - videosList: [], |
20 | | - currentVideoId: undefined, |
21 | | - isLightTheme: true, |
22 | | - isFirstLoad: true, |
23 | | - userSession: JSON.parse(window.sessionStorage.getItem(USER_SESSION_KEY)), |
24 | | -}; |
| 6 | +import { Router } from 'react-router'; |
25 | 7 |
|
26 | 8 | const history = createBrowserHistory(); |
27 | 9 |
|
28 | | -function App() { |
29 | | - const [{ |
30 | | - videosList, |
31 | | - isLightTheme, |
32 | | - isFirstLoad, |
33 | | - userSession}, |
34 | | - dispatch] = useReducer(appReducer, initialState); |
35 | | - |
36 | | - const getThemeConfig = () => ({ |
37 | | - theme: isLightTheme ? lightTheme : darkTheme, |
38 | | - switchTheme: () => dispatch({type: SWITCH_THEME}), |
39 | | - }); |
40 | | - |
41 | | - const search = async (query) => { |
42 | | - const serviceResponse = await youtubeSearchService.search(query); |
43 | | - serviceResponse.error |
44 | | - ? dispatch({ type: SET_VIDEOS_LIST, payload: [] }) |
45 | | - : dispatch({ type: SET_VIDEOS_LIST, payload: serviceResponse }); |
46 | | - } |
47 | | - |
48 | | - const firstSearch = async () => { |
49 | | - let counter = 0; |
50 | | - /* global gapi */ |
51 | | - /* eslint no-undef: "error" */ |
52 | | - while((!gapi || !gapi.client) && counter < 10){ |
53 | | - counter+=1; |
54 | | - await new Promise(resolve => setTimeout(resolve, 100)); |
55 | | - } |
56 | | - ((!gapi || !gapi.client) || counter >= 10) |
57 | | - ? dispatch({ type: SET_VIDEOS_LIST, payload: [] }) |
58 | | - : search() |
59 | | - } |
60 | | - |
61 | | - if(isFirstLoad){ |
62 | | - dispatch({ type: SET_IS_FIRST_LOAD, payload: false }); |
63 | | - firstSearch(); |
64 | | - } |
65 | | - |
| 10 | +const App = () =>{ |
66 | 11 | return ( |
67 | | - <AppContext.Provider value={ |
68 | | - { ...getThemeConfig(), |
69 | | - search, |
70 | | - videosList, |
71 | | - userSession, |
72 | | - setUserSession: (data) => dispatch({type: SET_SESSION, payload: data}), |
73 | | - } |
74 | | - }> |
| 12 | + <AppWrapper> |
75 | 13 | <Router history={history}> |
76 | 14 | { |
77 | 15 | <LayoutWrapper> |
78 | 16 | <Content /> |
79 | 17 | </LayoutWrapper> |
80 | 18 | } |
81 | 19 | </Router> |
82 | | - </AppContext.Provider> |
| 20 | + </AppWrapper> |
83 | 21 | ); |
84 | 22 | } |
85 | 23 |
|
|
0 commit comments