import { Text, ScrollView, Card, Separator } from "tamagui"; import React from "react"; import FormField from "@/components/ui/form"; import { InputField } from "@/components/ui/input"; import { useZForm } from "@/hooks/useZForm"; import { router, Stack } from "expo-router"; import Button from "@/components/ui/button"; import ThemeSwitcher from "@/components/containers/theme-switcher"; import { useMutation } from "@tanstack/react-query"; import { z } from "zod"; import { ErrorAlert } from "@/components/ui/alert"; import { loginResultSchema, loginSchema } from "./schema"; import api from "@/lib/api"; import Icons from "@/components/ui/icons"; import authStore from "@/stores/auth"; import tamaguiConfig from "@/tamagui.config"; export default function LoginPage() { const form = useZForm(loginSchema); const login = useMutation({ mutationFn: async (body: z.infer) => { const res = await api("/auth/login", { method: "POST", body }); const { data } = loginResultSchema.safeParse(res); if (!data) { throw new Error("Invalid response!"); } return data; }, onSuccess(data) { authStore.setState({ token: data.sessionId }); router.replace("/"); }, }); const onSubmit = form.handleSubmit((values) => { login.mutate(values); }); return ( <> ( ), }} /> Login ); }