Add recoil state
This commit is contained in:
@@ -1,15 +1,17 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { me } from '@/api/auth';
|
import { me } from '@/api/auth';
|
||||||
import { User } from '@/api/auth.types';
|
import React, { useEffect } from 'react';
|
||||||
import React, { useEffect, useState } from 'react';
|
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
|
import { useRecoilState } from 'recoil';
|
||||||
|
import { userState } from '@/state/auth';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const [user, setUser] = useState<User | undefined>(undefined);
|
const [user, setUser] = useRecoilState(userState);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!user) {
|
||||||
me().then((response) => {
|
me().then((response) => {
|
||||||
if (response) {
|
if (response) {
|
||||||
setUser(response.user);
|
setUser(response.user);
|
||||||
@@ -17,7 +19,8 @@ export default function Page() {
|
|||||||
router.push('/');
|
router.push('/');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, []);
|
}
|
||||||
|
}, [user]);
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
return <div>Logged in as {user.email}</div>;
|
return <div>Logged in as {user.email}</div>;
|
||||||
|
|||||||
@@ -7,20 +7,21 @@ import { Avatar, Button, Card, Grid, Group, Menu, Text, UnstyledButton } from '@
|
|||||||
import Cookies from 'js-cookie';
|
import Cookies from 'js-cookie';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { logout, me, refreshLoggedIn } from '@/api/auth';
|
import { logout, me, refreshLoggedIn } from '@/api/auth';
|
||||||
import { User } from '@/api/auth.types';
|
|
||||||
import { useToggle } from '@mantine/hooks';
|
import { useToggle } from '@mantine/hooks';
|
||||||
import { HeaderModal } from './HeaderModal';
|
import { HeaderModal } from './HeaderModal';
|
||||||
import { HeaderItem, headerItems } from './headerItems';
|
import { HeaderItem, headerItems } from './headerItems';
|
||||||
|
import { userState } from '@/state/auth';
|
||||||
|
import { useRecoilState } from 'recoil';
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
const pathName = usePathname();
|
const pathName = usePathname();
|
||||||
const [modalType, toggle] = useToggle([undefined, 'login', 'register', 'reset']);
|
const [modalType, toggle] = useToggle([undefined, 'login', 'register', 'reset']);
|
||||||
const [headers, setHeaders] = useState<HeaderItem[]>([]);
|
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);
|
const [refreshId, setRefreshId] = useState<NodeJS.Timeout | undefined>(undefined);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Cookies.get('logged_in')) {
|
if (!user && Cookies.get('logged_in')) {
|
||||||
me().then((response) => {
|
me().then((response) => {
|
||||||
if (response) {
|
if (response) {
|
||||||
setRefreshId(refreshLoggedIn());
|
setRefreshId(refreshLoggedIn());
|
||||||
@@ -28,7 +29,7 @@ export default function Header() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, []);
|
}, [user]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const h: HeaderItem[] = [];
|
const h: HeaderItem[] = [];
|
||||||
|
|||||||
12
ui/src/state/auth.ts
Normal file
12
ui/src/state/auth.ts
Normal 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
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user