11import React , { useState , useReducer , useEffect , useContext , useRef } from 'react'
22import './App.css'
3- import { PreferencesProvider } from './preferences/PreferencesContext'
4- import AppReducer from './preferences/AppReducer'
53import ConfigurationContext from './configuration/ConfigurationContext'
64import { APP , LS_PREFERENCES_KEY , SUPPORTED_CARDS } from './Constants'
7- import { getOSMode } from './services/os'
85import AppStorage from './services/localStorage'
96import TermsPage from './pages/TermsPage'
107import PrivacyPage from './pages/PrivacyPage'
@@ -18,76 +15,37 @@ import ScrollCardsNavigator from './components/ScrollCardsNavigator'
1815import BottomNavigation from './components/BottomNavigation'
1916import AppContentLayout from './components/AppContentLayout'
2017import 'react-contexify/dist/ReactContexify.css'
18+ import PreferencesContext from './preferences/PreferencesContext'
2119
2220function App ( ) {
23- const {
24- supportedTags,
25- marketingBannerConfig = { } ,
26- feedbackWidget,
27- } = useContext ( ConfigurationContext )
21+ const { marketingBannerConfig = { } , feedbackWidget } = useContext ( ConfigurationContext )
2822 const [ showSideBar , setShowSideBar ] = useState ( false )
2923 const [ showSettings , setShowSettings ] = useState ( false )
3024 const [ currentPage , setCurrentPage ] = useState ( 'home' )
31- const [ state , dispatcher ] = useReducer (
32- AppReducer ,
33- {
34- userSelectedTags : supportedTags . filter ( ( t ) => t . value === 'javascript' ) ,
35- userBookmarks : [ ] ,
36- theme : getOSMode ( ) ,
37- openLinksNewTab : true ,
38- listingMode : 'normal' ,
39- searchEngine : 'Google' ,
40- cards : [
41- { id : 0 , name : 'github' } ,
42- { id : 1 , name : 'hackernews' } ,
43- { id : 2 , name : 'devto' } ,
44- { id : 3 , name : 'producthunt' } ,
45- ] ,
46- } ,
47- ( initialState ) => {
48- try {
49- let preferences = AppStorage . getItem ( LS_PREFERENCES_KEY )
50- if ( preferences ) {
51- preferences = JSON . parse ( preferences )
52- preferences = {
53- ...preferences ,
54- userSelectedTags : supportedTags . filter ( ( tag ) =>
55- preferences . userSelectedTags . includes ( tag . value )
56- ) ,
57- }
58- return {
59- ...initialState ,
60- ...preferences ,
61- }
62- }
63- } catch ( e ) { }
64- return initialState
65- }
66- )
25+ const { state, dispatcher } = useContext ( PreferencesContext )
26+
6727 useEffect ( ( ) => {
6828 trackPageView ( currentPage )
6929 } , [ currentPage ] )
7030
7131 const renderHomePage = ( ) => {
7232 return (
73- < PreferencesProvider value = { { ...state , dispatcher : dispatcher } } >
74- < div className = "App" >
75- < Header
76- setShowSideBar = { setShowSideBar }
77- state = { state }
78- dispatcher = { dispatcher }
79- showSideBar = { showSideBar }
80- showSettings = { showSettings }
81- setShowSettings = { setShowSettings }
82- />
83- < ScrollCardsNavigator />
84- < MarketingBanner { ...marketingBannerConfig } />
85- < AppContentLayout setShowSettings = { setShowSettings } />
86- < BookmarksSidebar showSidebar = { showSideBar } onClose = { ( ) => setShowSideBar ( false ) } />
33+ < div className = "App" >
34+ < Header
35+ setShowSideBar = { setShowSideBar }
36+ state = { state }
37+ dispatcher = { dispatcher }
38+ showSideBar = { showSideBar }
39+ showSettings = { showSettings }
40+ setShowSettings = { setShowSettings }
41+ />
42+ < ScrollCardsNavigator />
43+ < MarketingBanner { ...marketingBannerConfig } />
44+ < AppContentLayout setShowSettings = { setShowSettings } />
45+ < BookmarksSidebar showSidebar = { showSideBar } onClose = { ( ) => setShowSideBar ( false ) } />
8746
88- < Footer setCurrentPage = { setCurrentPage } feedbackWidget = { feedbackWidget } />
89- </ div >
90- </ PreferencesProvider >
47+ < Footer setCurrentPage = { setCurrentPage } feedbackWidget = { feedbackWidget } />
48+ </ div >
9149 )
9250 }
9351
0 commit comments