pchl-astro/src/components/EspaceMembres.tsx

76 lines
1.5 KiB
TypeScript

import { createContext } from "preact";
import Login from "./Login";
import PocketBase from 'pocketbase';
import { useContext, useEffect, useState } from "preact/hooks";
import Home from "./Members/Home";
export const pbUrl = import.meta.env.PUBLIC_PB_API;
const pb = new PocketBase(pbUrl);
export const Pb = createContext(pb);
export const Router = createContext({
navigate: (path: string) => {
console.log(path);
},
});
export function useAuth() {
const pb = useContext(Pb);
const router = useContext(Router);
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;
}
}
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);
}
return (
<Pb.Provider value={pb}>
<Router.Provider value={{
navigate,
}}>
{{
'/': <Home />,
'/login': <Login />,
}[route]}
</Router.Provider>
</Pb.Provider>
)
}