diff --git a/src/components/EspaceMembres.tsx b/src/components/EspaceMembres.tsx index 9b43833..455e2ab 100644 --- a/src/components/EspaceMembres.tsx +++ b/src/components/EspaceMembres.tsx @@ -1,7 +1,8 @@ import { createContext } from "preact"; import Login from "./Login"; import PocketBase from 'pocketbase'; -import { useContext, useState } from "preact/hooks"; +import { useContext, useEffect, useState } from "preact/hooks"; +import Home from "./Members/Home"; const pb = new PocketBase(import.meta.env.PUBLIC_PB_API); export const Pb = createContext(pb); @@ -12,22 +13,46 @@ export const Router = createContext({ }, }); -function Fake() { +export function useAuth() { + const pb = useContext(Pb); const router = useContext(Router); - const handleClick = () => { - router.navigate('/login'); + const [isAuth, setIsAuth] = useState(pb.authStore.isValid); + + const login = async (email: string, password: string) => { + try { + await pb.collection('users').authWithPassword(email, password); + router.navigate('/'); + setIsAuth(true) + } catch (error) { + return error; + } } - return ( -
-

Fake

- -
- ) + const logout = () => { + try { + pb.authStore.clear() + setIsAuth(false) + } catch (error) { + return error; + } + } + + return { + isAuth, + login, + logout, + } } export default function EspaceMembres() { const [route, setRoute] = useState('/'); + const { isAuth } = useAuth(); + + useEffect(() => { + if (!isAuth) { + setRoute('/login'); + } + }, [isAuth]); const navigate = (path: string) => { setRoute(path); @@ -39,7 +64,7 @@ export default function EspaceMembres() { navigate, }}> {{ - '/': , + '/': , '/login': , }[route]} diff --git a/src/components/Login.tsx b/src/components/Login.tsx index f6ec8d5..19cdedd 100644 --- a/src/components/Login.tsx +++ b/src/components/Login.tsx @@ -1,26 +1,14 @@ import { type TargetedEvent } from "preact/compat" -import { useContext } from "preact/compat" -import { Pb, Router } from "./EspaceMembres" +import { useAuth } from "./EspaceMembres"; export default function Login() { - const pb = useContext(Pb); - const router = useContext(Router); + const { login } = useAuth(); const handleSubmit = (event: TargetedEvent) => { event.preventDefault() login(event.currentTarget.email.value, event.currentTarget.password.value) } - const login = async (email: string, password: string) => { - try { - await pb.collection('users').authWithPassword(email, password); - router.navigate('/'); - } catch (error) { - if (error instanceof Error) - console.error(error.message); - } - } - return (
diff --git a/src/components/Members/Home.tsx b/src/components/Members/Home.tsx new file mode 100644 index 0000000..991066d --- /dev/null +++ b/src/components/Members/Home.tsx @@ -0,0 +1,7 @@ +export default function Home() { + return ( + <> +

Bienvenue sur votre espace membre

+ + ) +} diff --git a/src/components/Members/index.ts b/src/components/Members/index.ts new file mode 100644 index 0000000..e69de29