76 lines
1.5 KiB
TypeScript
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>
|
|
)
|
|
}
|