Add recoil state

This commit is contained in:
Benjamin Sherriff
2023-10-20 07:36:10 -04:00
parent a1090e2a0f
commit 11facd9bad
3 changed files with 31 additions and 15 deletions

View File

@@ -1,15 +1,17 @@
'use client';
import { me } from '@/api/auth';
import { User } from '@/api/auth.types';
import React, { useEffect, useState } from 'react';
import React, { useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { useRecoilState } from 'recoil';
import { userState } from '@/state/auth';
export default function Page() {
const [user, setUser] = useState<User | undefined>(undefined);
const [user, setUser] = useRecoilState(userState);
const router = useRouter();
useEffect(() => {
if (!user) {
me().then((response) => {
if (response) {
setUser(response.user);
@@ -17,7 +19,8 @@ export default function Page() {
router.push('/');
}
});
}, []);
}
}, [user]);
if (user) {
return <div>Logged in as {user.email}</div>;

View File

@@ -7,20 +7,21 @@ import { Avatar, Button, Card, Grid, Group, Menu, Text, UnstyledButton } from '@
import Cookies from 'js-cookie';
import { useEffect, useState } from 'react';
import { logout, me, refreshLoggedIn } from '@/api/auth';
import { User } from '@/api/auth.types';
import { useToggle } from '@mantine/hooks';
import { HeaderModal } from './HeaderModal';
import { HeaderItem, headerItems } from './headerItems';
import { userState } from '@/state/auth';
import { useRecoilState } from 'recoil';
export default function Header() {
const pathName = usePathname();
const [modalType, toggle] = useToggle([undefined, 'login', 'register', 'reset']);
const [headers, setHeaders] = useState<HeaderItem[]>([]);
const [user, setUser] = useState<User | undefined>(undefined);
const [user, setUser] = useRecoilState(userState);
const [refreshId, setRefreshId] = useState<NodeJS.Timeout | undefined>(undefined);
useEffect(() => {
if (Cookies.get('logged_in')) {
if (!user && Cookies.get('logged_in')) {
me().then((response) => {
if (response) {
setRefreshId(refreshLoggedIn());
@@ -28,7 +29,7 @@ export default function Header() {
}
});
}
}, []);
}, [user]);
useEffect(() => {
const h: HeaderItem[] = [];

12
ui/src/state/auth.ts Normal file
View File

@@ -0,0 +1,12 @@
import { User } from '@/api/auth.types';
import { atom } from 'recoil';
export const userState = atom({
key: 'userState',
default: undefined as User | undefined
});
export const isAuthenticatedState = atom({
key: 'isAuthenticatedState',
default: false
});