1
0
Fork 0

add useTheme to useApps

This commit is contained in:
Enoch Riese 2022-06-06 13:12:34 -05:00
parent 5553293476
commit 45e83c0225
5 changed files with 9 additions and 24 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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);

View file

@ -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;