use-set-overall-theme.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { useCallback } from 'react'
  2. import _ from 'lodash'
  3. import { saveUserSettings } from '../utils/api'
  4. import { UserSettings } from '../../../../../types/user-settings'
  5. import { useUserSettingsContext } from '@/shared/context/user-settings-context'
  6. import getMeta from '@/utils/meta'
  7. export default function useSetOverallTheme() {
  8. const { userSettings, setUserSettings } = useUserSettingsContext()
  9. const { overallTheme } = userSettings
  10. const setOverallTheme = useCallback(
  11. (overallTheme: UserSettings['overallTheme']) => {
  12. setUserSettings(settings => ({ ...settings, overallTheme }))
  13. },
  14. [setUserSettings]
  15. )
  16. return useCallback(
  17. (newOverallTheme: UserSettings['overallTheme']) => {
  18. if (overallTheme !== newOverallTheme) {
  19. const chosenTheme = _.find(
  20. getMeta('ol-overallThemes'),
  21. theme => theme.val === newOverallTheme
  22. )
  23. if (chosenTheme) {
  24. setOverallTheme(newOverallTheme)
  25. saveUserSettings('overallTheme', newOverallTheme)
  26. }
  27. }
  28. },
  29. [overallTheme, setOverallTheme]
  30. )
  31. }