import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FormInput, FormSelect, Label, SelectContent, SelectItem, SelectTrigger, SelectValue, ToggleGroup, ToggleGroupItem, } from "@/components/ui"; import { type LoginArgs, useLoginMutation } from "@/services/db"; import { useSessionStore } from "@/state/db-session-store"; import { zodResolver } from "@hookform/resolvers/zod"; import { createFileRoute } from "@tanstack/react-router"; import { useState } from "react"; import { type Control, useForm } from "react-hook-form"; import { z } from "zod"; export const Route = createFileRoute("/auth/login")({ component: LoginForm, }); const loginWithConnectionStringSchema = z.object({ type: z.enum(["mysql", "postgres"]), connectionString: z.string().trim().min(1, "Connection string is required"), }); type LoginWithConnectionStringFields = z.infer< typeof loginWithConnectionStringSchema >; function ConnectionStringForm({ onSubmit, }: { onSubmit: (values: LoginWithConnectionStringFields) => void; }) { const { control, handleSubmit } = useForm({ resolver: zodResolver(loginWithConnectionStringSchema), defaultValues: { type: "postgres", connectionString: "", }, }); return (
); } const loginWithConnectionFieldsSchema = z.object({ type: z.enum(["mysql", "postgres"]), username: z.string().min(1, "Username is required"), password: z.string().min(1, "Password is required"), host: z.string().min(1, "Host is required"), port: z.string().min(1, "Port is required"), database: z.string().min(1, "Database is required"), ssl: z.enum(["false", "true", "require", "allow", "prefer", "verify-full"]), }); type LoginWithConnectionFields = z.infer< typeof loginWithConnectionFieldsSchema >; function ConnectionFieldsForm({ onSubmit, }: { onSubmit: (values: LoginWithConnectionFields) => void; }) { const { control, handleSubmit } = useForm({ resolver: zodResolver(loginWithConnectionFieldsSchema), defaultValues: { type: "postgres", host: "", port: "", username: "", password: "", ssl: "prefer", database: "", }, }); return (
false true require allow prefer verify-full
); } function LoginForm() { const [connectionMethod, setConnectionMethod] = useState("connectionString"); const { mutateAsync } = useLoginMutation(); const addSession = useSessionStore.use.addSession(); const onSubmit = async (args: LoginArgs) => { await mutateAsync(args); addSession(args); }; return (
Login Enter your database credentials below.
Fields Connection string {connectionMethod === "fields" ? ( ) : ( )}
); } function DatabaseTypeSelector({ control, }: { control: Control; }) { return (
Postgres MySQL
); }