aboutsummaryrefslogtreecommitdiffstats
path: root/hooks/useSettings.js
diff options
context:
space:
mode:
Diffstat (limited to 'hooks/useSettings.js')
-rw-r--r--hooks/useSettings.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/hooks/useSettings.js b/hooks/useSettings.js
new file mode 100644
index 0000000..90ee72d
--- /dev/null
+++ b/hooks/useSettings.js
@@ -0,0 +1,50 @@
+import React, { createContext, useState, useEffect, useContext } from 'react'
+import translations from 'configs/translations'
+import useUser from 'hooks/useUser'
+
+const SettingsContext = createContext()
+
+export const SettingsProvider = ({children}) => {
+ const defaultSettings = {theme: 'green', language: 'en'}
+ const {user} = useUser()
+ const [data, setData] = useState()
+
+ const setSettings = s => {
+ if (typeof window !== "undefined") {
+ window.localStorage.setItem('loggedOutSettings', JSON.stringify(s(data)))
+ }
+ setData(s)
+ }
+
+ const t = key => data && data.language && translations[data.language][key]
+ ? translations[data.language][key]
+ ? translations[data.language][key]
+ : translations.en[key]
+ : '...'
+
+ useEffect(() => {
+ const loggedOutSettings = JSON.parse(localStorage.getItem('loggedOutSettings'))
+
+ if (user && user.isLoggedIn) {
+ const settings = {theme: user.theme, language: user.language}
+ if (typeof window !== "undefined") {
+ window.localStorage.setItem('loggedOutSettings', JSON.stringify(settings))
+ }
+ setData(settings)
+ } else if (loggedOutSettings) {
+ setData(loggedOutSettings)
+ } else {
+ setData(defaultSettings)
+ }
+ }, [user])
+
+ return (
+ <SettingsContext.Provider value={{settings: data, setSettings, t}}>
+ {children}
+ </SettingsContext.Provider>
+ )
+}
+
+const useSettings = () => useContext(SettingsContext)
+
+export default useSettings