33 lines
1006 B
JavaScript
33 lines
1006 B
JavaScript
import { useState, useEffect } from 'react'
|
|
import { getLocationTimes } from '../utils/getLocationTimes'
|
|
import { getCountry } from '../utils/getCountry'
|
|
|
|
export default function useDarkMode() {
|
|
const store = typeof localStorage === 'undefined' ? null : localStorage
|
|
const darkLocalStorage = store && store.getItem('darkMode')
|
|
const [darkMode, setDarkMode] = useState(false)
|
|
|
|
useEffect(() => {
|
|
darkLocalStorage
|
|
? darkLocalStorage === 'true'
|
|
? setDarkMode(true)
|
|
: setDarkMode(false)
|
|
: checkTimes()
|
|
|
|
async function checkTimes() {
|
|
const geolocation = await getCountry()
|
|
const { sunset, sunrise } = getLocationTimes(geolocation)
|
|
const now = new Date().getHours()
|
|
const weWantItDarkTimes = now >= sunset || now <= sunrise
|
|
weWantItDarkTimes && setDarkMode(true)
|
|
}
|
|
}, [darkLocalStorage])
|
|
|
|
function toggleDark() {
|
|
setDarkMode(!darkMode)
|
|
store && store.setItem('darkMode', !darkMode)
|
|
}
|
|
|
|
return { darkMode, toggleDark }
|
|
}
|