add useTheme to useApps
This commit is contained in:
parent
5553293476
commit
45e83c0225
5 changed files with 9 additions and 24 deletions
|
@ -2,6 +2,7 @@ import { useState } from 'react'
|
||||||
import set from 'lodash.set'
|
import set from 'lodash.set'
|
||||||
// Stores state in local storage
|
// Stores state in local storage
|
||||||
import useLocalStorage from 'shared/hooks/useLocalStorage.js'
|
import useLocalStorage from 'shared/hooks/useLocalStorage.js'
|
||||||
|
import useTheme from 'shared/hooks/useTheme'
|
||||||
// Prebuild navigation
|
// Prebuild navigation
|
||||||
import prebuildNavigation from 'site/prebuild/navigation.js'
|
import prebuildNavigation from 'site/prebuild/navigation.js'
|
||||||
|
|
||||||
|
@ -9,14 +10,9 @@ function useApp(full = true) {
|
||||||
// No translation for freesewing.dev
|
// No translation for freesewing.dev
|
||||||
const language = 'en'
|
const language = 'en'
|
||||||
|
|
||||||
// User color scheme preference
|
|
||||||
const prefersDarkMode = (typeof window !== 'undefined' && typeof window.matchMedia === 'function')
|
|
||||||
? window.matchMedia(`(prefers-color-scheme: dark`).matches
|
|
||||||
: null
|
|
||||||
|
|
||||||
// Persistent state
|
// Persistent state
|
||||||
const [account, setAccount] = useLocalStorage('account', { username: false })
|
const [account, setAccount] = useLocalStorage('account', { username: false })
|
||||||
const [theme, setTheme] = useLocalStorage('theme', prefersDarkMode ? 'dark' : 'light')
|
const [theme, setTheme] = useTheme();
|
||||||
|
|
||||||
// React State
|
// React State
|
||||||
const [primaryMenu, setPrimaryMenu] = useState(false)
|
const [primaryMenu, setPrimaryMenu] = useState(false)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import patterns from 'shared/config/designs.json'
|
||||||
import { useTranslation } from 'next-i18next'
|
import { useTranslation } from 'next-i18next'
|
||||||
import { capitalize } from 'shared/utils'
|
import { capitalize } from 'shared/utils'
|
||||||
import useVersion from 'site/hooks/useVersion.js'
|
import useVersion from 'site/hooks/useVersion.js'
|
||||||
|
import useTheme from 'shared/hooks/useTheme'
|
||||||
|
|
||||||
// Initial navigation
|
// Initial navigation
|
||||||
const initialNavigation = (t, version) => {
|
const initialNavigation = (t, version) => {
|
||||||
|
@ -58,14 +59,9 @@ function useApp(full = true) {
|
||||||
// Locale (aka language)
|
// Locale (aka language)
|
||||||
const { t } = useTranslation(['app'])
|
const { t } = useTranslation(['app'])
|
||||||
|
|
||||||
// User color scheme preference
|
|
||||||
const prefersDarkMode = (typeof window !== 'undefined' && typeof window.matchMedia === 'function')
|
|
||||||
? window.matchMedia(`(prefers-color-scheme: dark`).matches
|
|
||||||
: null
|
|
||||||
|
|
||||||
// Persistent state
|
// Persistent state
|
||||||
const [account, setAccount] = useLocalStorage('account', { username: false })
|
const [account, setAccount] = useLocalStorage('account', { username: false })
|
||||||
const [theme, setTheme] = useLocalStorage('theme', prefersDarkMode ? 'dark' : 'light')
|
const [theme, setTheme] = useTheme();
|
||||||
|
|
||||||
// React State
|
// React State
|
||||||
const [primaryMenu, setPrimaryMenu] = useState(false)
|
const [primaryMenu, setPrimaryMenu] = useState(false)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import get from 'lodash.get'
|
||||||
import set from 'lodash.set'
|
import set from 'lodash.set'
|
||||||
// Stores state in local storage
|
// Stores state in local storage
|
||||||
import useLocalStorage from 'shared/hooks/useLocalStorage.js'
|
import useLocalStorage from 'shared/hooks/useLocalStorage.js'
|
||||||
|
import useTheme from 'shared/hooks/useTheme'
|
||||||
// Prebuild navigation
|
// Prebuild navigation
|
||||||
import prebuildNavigation from 'site/prebuild/navigation.js'
|
import prebuildNavigation from 'site/prebuild/navigation.js'
|
||||||
// Translation
|
// Translation
|
||||||
|
@ -68,14 +69,9 @@ function useApp(full = true) {
|
||||||
const locale = useRouter().locale
|
const locale = useRouter().locale
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
|
||||||
// User color scheme preference
|
|
||||||
const prefersDarkMode = (typeof window !== 'undefined' && typeof window.matchMedia === 'function')
|
|
||||||
? window.matchMedia(`(prefers-color-scheme: dark`).matches
|
|
||||||
: null
|
|
||||||
|
|
||||||
// Persistent state
|
// Persistent state
|
||||||
const [account, setAccount] = useLocalStorage('account', { username: false })
|
const [account, setAccount] = useLocalStorage('account', { username: false })
|
||||||
const [theme, setTheme] = useLocalStorage('theme', prefersDarkMode ? 'dark' : 'light')
|
const [theme, setTheme] = useTheme()
|
||||||
|
|
||||||
// React State
|
// React State
|
||||||
const [primaryMenu, setPrimaryMenu] = useState(false)
|
const [primaryMenu, setPrimaryMenu] = useState(false)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
// See: https://usehooks.com/useLocalStorage/
|
// See: https://usehooks.com/useLocalStorage/
|
||||||
|
|
||||||
function useLocalStorage(key, initialValue) {
|
function useLocalStorage(key, initialValue) {
|
||||||
const prefix = 'fs_'
|
const prefix = 'fs_'
|
||||||
const [storedValue, setStoredValue] = useState(initialValue);
|
const [storedValue, setStoredValue] = useState(initialValue);
|
||||||
|
|
|
@ -5,18 +5,16 @@ function useTheme() {
|
||||||
const [storedTheme, setStoredTheme, ready] = useLocalStorage('theme', undefined);
|
const [storedTheme, setStoredTheme, ready] = useLocalStorage('theme', undefined);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (ready) {
|
if (ready && storedTheme === undefined) {
|
||||||
const prefersDarkMode = (typeof window !== 'undefined' && typeof window.matchMedia === 'function')
|
const prefersDarkMode = (typeof window !== 'undefined' && typeof window.matchMedia === 'function')
|
||||||
? window.matchMedia(`(prefers-color-scheme: dark`).matches
|
? window.matchMedia(`(prefers-color-scheme: dark`).matches
|
||||||
: null
|
: null
|
||||||
|
|
||||||
if (storedTheme === undefined) {
|
setStoredTheme(prefersDarkMode ? 'dark' : 'light')
|
||||||
setStoredTheme(prefersDarkMode ? 'dark' : 'light')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, [ready])
|
}, [ready])
|
||||||
|
|
||||||
return [storedTheme, setStoredTheme];
|
return [storedTheme, setStoredTheme];
|
||||||
}
|
}
|
||||||
|
|
||||||
export default useTheme;
|
export default useTheme;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue