portfolio/src/hooks/use-dark-mode.js

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 }
}