Skip to content

Instantly share code, notes, and snippets.

@jeanverster
Last active November 5, 2019 16:56
Show Gist options
  • Save jeanverster/c64bc1f3c6464a1812c50eab5f8fdb02 to your computer and use it in GitHub Desktop.
Save jeanverster/c64bc1f3c6464a1812c50eab5f8fdb02 to your computer and use it in GitHub Desktop.
import { get, merge } from 'lodash'
import * as React from 'react'
import { ThemeProvider } from 'styled-components'
import AppProvider from './src/context'
import AppNavigation from './src/navigation'
import { modes, theme as baseTheme } from './src/theme'
import { colorModeStorage } from './src/utils'
const AppWithProvider = () => {
const getTheme = (mode) =>
merge({}, baseTheme, {
colors: get(baseTheme.colors.modes, mode, baseTheme.colors)
})
const [mode, setMode] = React.useState(modes[0])
React.useEffect(() => {
async function getMode() {
const stored = await colorModeStorage.get()
setMode(stored)
}
getMode()
}, [])
React.useEffect(() => {
if (!mode) return
colorModeStorage.set(mode)
}, [mode])
const theme = getTheme(mode)
const toggleMode = () => {
const i = (modes.indexOf(mode) + 1) % modes.length
setMode(modes[i])
}
return (
<ThemeProvider theme={theme}>
<AppProvider mode={mode} toggleMode={toggleMode}>
<AppNavigation />
</AppProvider>
</ThemeProvider>
)
}
export default AppWithProvider
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment