aboutsummaryrefslogtreecommitdiffstats
path: root/hooks
diff options
context:
space:
mode:
authorGravatar piotrruss <mail@pruss.it> 2021-09-02 22:28:11 +0200
committerGravatar piotrruss <mail@pruss.it> 2021-09-02 23:54:56 +0200
commitf08f6ca0a9d337efff280d4d1669a41b5d9c31c2 (patch)
tree7dee778ba742deb5f499f2aa08a1ba040606d633 /hooks
parent9f74c550927671f4ded301d0cf3e9d592716375c (diff)
downloadmy_apps-f08f6ca0a9d337efff280d4d1669a41b5d9c31c2.tar.gz
my_apps-f08f6ca0a9d337efff280d4d1669a41b5d9c31c2.tar.bz2
my_apps-f08f6ca0a9d337efff280d4d1669a41b5d9c31c2.zip
finish translations, force maximize
Diffstat (limited to 'hooks')
-rw-r--r--hooks/useApps.js17
-rw-r--r--hooks/useMediaQuery.js19
-rw-r--r--hooks/useSettings.js50
-rw-r--r--hooks/useUser.js33
4 files changed, 119 insertions, 0 deletions
diff --git a/hooks/useApps.js b/hooks/useApps.js
new file mode 100644
index 0000000..babf712
--- /dev/null
+++ b/hooks/useApps.js
@@ -0,0 +1,17 @@
+import React, { createContext, useState, useContext } from 'react'
+
+const AppsContext = createContext()
+
+export const AppsProvider = ({children}) => {
+ const [apps, setApps] = useState([])
+
+ return (
+ <AppsContext.Provider value={{apps, setApps}}>
+ {children}
+ </AppsContext.Provider>
+ )
+}
+
+const useApps = () => useContext(AppsContext)
+
+export default useApps
diff --git a/hooks/useMediaQuery.js b/hooks/useMediaQuery.js
new file mode 100644
index 0000000..1adb499
--- /dev/null
+++ b/hooks/useMediaQuery.js
@@ -0,0 +1,19 @@
+import { useState, useEffect } from "react";
+
+const useMediaQuery = (query) => {
+ const [matches, setMatches] = useState(false);
+
+ useEffect(() => {
+ const media = window.matchMedia(query);
+ if (media.matches !== matches) {
+ setMatches(media.matches);
+ }
+ const listener = () => setMatches(media.matches);
+ window.addEventListener("resize", listener);
+ return () => window.removeEventListener("resize", listener);
+ }, [matches, query]);
+
+ return matches;
+}
+
+export default useMediaQuery;
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
diff --git a/hooks/useUser.js b/hooks/useUser.js
new file mode 100644
index 0000000..16833aa
--- /dev/null
+++ b/hooks/useUser.js
@@ -0,0 +1,33 @@
+import { useEffect } from 'react'
+import Router from 'next/router'
+import useSWR from 'swr'
+
+export default function useUser({
+ redirectToLogin = false,
+ redirectToVerify = false,
+ redirectToApps = false,
+} = {}) {
+ const { data: user, mutate: mutateUser } = useSWR('/api/user')
+
+ useEffect(() => {
+ if (!user || (!redirectToLogin && !redirectToVerify && !redirectToApps)) return
+
+ if (redirectToLogin && !user?.isLoggedIn) {
+ Router.push('/login')
+ }
+
+ if (redirectToVerify && user?.isLoggedIn && !user?.isVerified) {
+ Router.push('/verify')
+ }
+
+ if (
+ (redirectToApps && user?.isLoggedIn && user?.isVerified)
+ ) {
+ Router.push('/')
+ }
+
+ return
+ }, [user, redirectToLogin, redirectToVerify, redirectToApps])
+
+ return {user, mutateUser}
+}