From f08f6ca0a9d337efff280d4d1669a41b5d9c31c2 Mon Sep 17 00:00:00 2001 From: piotrruss Date: Thu, 2 Sep 2021 22:28:11 +0200 Subject: finish translations, force maximize --- hooks/useApps.js | 17 +++++++++++++++++ hooks/useMediaQuery.js | 19 +++++++++++++++++++ hooks/useSettings.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ hooks/useUser.js | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 hooks/useApps.js create mode 100644 hooks/useMediaQuery.js create mode 100644 hooks/useSettings.js create mode 100644 hooks/useUser.js (limited to 'hooks') 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 ( + + {children} + + ) +} + +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 ( + + {children} + + ) +} + +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} +} -- cgit v1.2.3