mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2025-07-31 02:00:07 +02:00

[web] Add new system theme to the editor GitOrigin-RevId: b65083c5e96abc493556e901c861689cb7e3bbf7
43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
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]
|
|
)
|
|
}
|