From 04572a8e5081b1e4871e273cde9dbaaa44c52fe0 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Wed, 13 Mar 2024 21:43:44 +0000 Subject: structure: Create apps dir and copy tooling dir from t3-turbo repo --- apps/mobile/app/signin.tsx | 101 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 apps/mobile/app/signin.tsx (limited to 'apps/mobile/app/signin.tsx') diff --git a/apps/mobile/app/signin.tsx b/apps/mobile/app/signin.tsx new file mode 100644 index 00000000..a89b0087 --- /dev/null +++ b/apps/mobile/app/signin.tsx @@ -0,0 +1,101 @@ +import { useRouter } from "expo-router"; +import { useEffect, useState } from "react"; +import { View, Text } from "react-native"; + +import Logo from "@/components/Logo"; +import { Button } from "@/components/ui/Button"; +import { Input } from "@/components/ui/Input"; +import useAppSettings from "@/lib/settings"; +import { api } from "@/lib/trpc"; + +export default function Signin() { + const router = useRouter(); + + const { settings, setSettings } = useAppSettings(); + + const [error, setError] = useState(); + + const { mutate: login, isPending } = api.apiKeys.exchange.useMutation({ + onSuccess: (resp) => { + setSettings({ ...settings, apiKey: resp.key }); + router.replace("dashboard"); + }, + onError: (e) => { + if (e.data?.code === "UNAUTHORIZED") { + setError("Wrong username or password"); + } else { + setError(`${e.message}`); + } + }, + }); + + const [formData, setFormData] = useState<{ + email: string; + password: string; + }>({ + email: "", + password: "", + }); + + useEffect(() => { + if (settings.apiKey) { + router.navigate("dashboard"); + } + }, [settings]); + + const onSignin = () => { + const randStr = (Math.random() + 1).toString(36).substring(5); + login({ ...formData, keyName: `Mobile App: (${randStr})` }); + }; + + return ( + + + + + {error && ( + {error} + )} + + Server Address + + setSettings({ ...settings, address: e.nativeEvent.text }) + } + /> + + + Email + setFormData((s) => ({ ...s, email: e }))} + /> + + + Password + setFormData((s) => ({ ...s, password: e }))} + /> + +