Implement basic API interaction

This commit is contained in:
april
2024-01-02 17:41:11 -06:00
parent a456f8155b
commit 73b11482ff
20 changed files with 2867 additions and 189 deletions

52
web/app/util/hooks.ts Normal file
View File

@@ -0,0 +1,52 @@
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { client } from "./api";
import { useNavigate } from "@remix-run/react";
type User = {
username: string;
level: number;
};
export function useMe() {
return useQuery<User, Error>({
queryKey: ["me"],
queryFn: () => client.get(`/users/me`).then((res) => res.data),
});
}
export function useSignOut() {
const queryClient = useQueryClient();
const navigate = useNavigate();
const onSignOut = async () => {
queryClient.setQueryData(["user"], null);
const res = await client.post("/auth/logout");
if (res.status == 200) {
navigate("/login");
} else {
console.error("Failed to log out");
}
};
return onSignOut;
}
export function useLogin() {
const navigate = useNavigate();
const { mutate: signInMutation } = useMutation({
mutationFn: async (values) => {
return await client.postForm("/auth/login", values);
},
onSuccess: (data) => {
localStorage.setItem("token", data.data.access_token);
localStorage.setItem("refresh-token", data.data.refresh_token);
navigate("/logbook");
},
onError: (error) => {
console.error(error);
},
});
return signInMutation;
}