| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import { useCallback, useEffect } from 'react'
- import _ from 'lodash'
- import { saveUserSettings } from '../utils/api'
- import { UserSettings } from '../../../../../types/user-settings'
- import { useUserSettingsContext } from '@/shared/context/user-settings-context'
- import getMeta from '@/utils/meta'
- import { useActiveOverallTheme } from '@/shared/hooks/use-active-overall-theme'
- export default function useSetOverallTheme() {
- const { userSettings, setUserSettings } = useUserSettingsContext()
- const { overallTheme } = userSettings
- const setOverallTheme = useCallback(
- (overallTheme: UserSettings['overallTheme']) => {
- setUserSettings(settings => ({ ...settings, overallTheme }))
- },
- [setUserSettings]
- )
- const activeOverallTheme = useActiveOverallTheme()
- useEffect(() => {
- // Sets the body's data-theme attribute for theming
- document.body.dataset.theme =
- activeOverallTheme === 'dark' ? 'default' : 'light'
- }, [activeOverallTheme])
- return useCallback(
- (newOverallTheme: UserSettings['overallTheme']) => {
- if (overallTheme !== newOverallTheme) {
- const chosenTheme = _.find(
- getMeta('ol-overallThemes'),
- theme => theme.val === newOverallTheme
- )
- if (chosenTheme) {
- setOverallTheme(newOverallTheme)
- saveUserSettings('overallTheme', newOverallTheme)
- }
- }
- },
- [overallTheme, setOverallTheme]
- )
- }
|