ironGym/webapp/src/app/[locale]/(GlobalWrapper)/(Auth)/layout.tsx

71 lines
2.2 KiB
TypeScript

'use client';
import { useAppSelector } from "@/redux/store"
import { isLoggedIn , mountCheckIfValid } from "@/redux/features/auth-slice";
import { useDispatch } from "react-redux"
import { AppDispatch } from '@/redux/store';
import { useEffect } from "react";
import { useRouter } from 'next/navigation'
import { ReactNode } from 'react'
import FullScreenLoader from "@/components/common/fullScreenLoader";
import { load } from '@/redux/features/settings-slice'
import Cookies from 'universal-cookie';
const cookies = new Cookies();
// HOC for auth pages ( only accept auth user )
export default function LocaleLayout({children} : { children : ReactNode }) {
const router = useRouter()
const dispatch = useDispatch<AppDispatch>();
// load states
const isValid = useAppSelector((state) => state.authReducer.value.isValid)
const checkIfValidMounted = useAppSelector((state) => state.authReducer.value.checkIfValidMounted)
const notAuthRedirectPage = useAppSelector((state) => state.settingsReducer.value.notAuthRedirectPage)
const isLoadingSettings = useAppSelector((state) => state.settingsReducer.value.isLoadingSettings)
const loadedFirstTime = useAppSelector((state) => state.settingsReducer.value.loadedFirstTime)
// Get redux states
// init isLoggedIn
useEffect(() => {
if(checkIfValidMounted) return
dispatch(mountCheckIfValid())
async function a()
{
await dispatch(isLoggedIn({NotLoggedInCallback}))
}
a()
}, [])
// load settings
useEffect(() => {
if(loadedFirstTime) return
if(isLoadingSettings) return
async function a()
{
await dispatch(load({page : 1}))
}
a()
}, [])
// if wasnt logged in this will fire
function NotLoggedInCallback()
{
console.log('SERVER ::: not logged in')
cookies.remove('authToken', { path: '/' });
// reset the state to there initial value
return router.push(notAuthRedirectPage)
}
return (
<>
{
isValid ?
<>
{children}
</>
:
<FullScreenLoader />
}
</>
);
}