import AccentSubmitButton from "@/components/AccentSubmitButton"; import TextInput from "@/components/TextInput"; import CenteredForm from "@/layouts/CenteredForm"; import { signIn } from "next-auth/react"; import Link from "next/link"; import React, { useState, FormEvent, useEffect } from "react"; import { toast } from "react-hot-toast"; import { Capacitor } from "@capacitor/core"; import sendLoginRequest from "@/lib/client/sendLoginRequest"; interface FormData { baseURL: string; username: string; password: string; } interface AvailableLogins { credentialsEnabled: string; emailEnabled: string; buttonAuths: Array<{ method: string; name: string; }>; registrationDisabled: string; } export default function Login() { const [submitLoader, setSubmitLoader] = useState(false); const [availableLogins, setAvailableLogins] = useState(null); const [form, setForm] = useState({ baseURL: "", username: "", password: "", }); useEffect(() => { async function fetchLogins() { try { const response = await fetch("http://localhost:3000/api/v1/logins"); if (!response.ok) { throw new Error("Network response was not ok"); } const data = await response.json(); setAvailableLogins(data); } catch (error) { console.error("Failed to fetch available logins:", error); } } Capacitor.isNativePlatform() ? undefined : fetchLogins(); }, []); async function loginUser(event: FormEvent) { event.preventDefault(); if ( form.username !== "" && form.password !== "" && (Capacitor.isNativePlatform() ? form.baseURL : true) ) { setSubmitLoader(true); const load = toast.loading("Authenticating..."); const response = await sendLoginRequest(form); toast.dismiss(load); setSubmitLoader(false); if (response?.status !== 200) { toast.error("Invalid login."); } } else { toast.error("Please fill out all the fields."); } } async function loginUserButton(method: string) { setSubmitLoader(true); const load = toast.loading("Authenticating..."); const res = await signIn(method, {}); toast.dismiss(load); setSubmitLoader(false); } function displayLoginCredential() { return availableLogins?.credentialsEnabled === "false" ? null : ( <>

Enter your credentials


{Capacitor.isNativePlatform() ? (

Instance URL

setForm({ ...form, baseURL: e.target.value })} />
) : undefined}

Username {availableLogins?.emailEnabled === "true" ? " or Email" : undefined}

setForm({ ...form, username: e.target.value })} />

Password

setForm({ ...form, password: e.target.value })} /> {availableLogins?.emailEnabled === "true" && !Capacitor.isNativePlatform() && (
Forgot Password?
)}
{availableLogins && availableLogins.buttonAuths.length > 0 ? (
OR
) : undefined} ); } function displayLoginExternalButton() { const Buttons: any = []; availableLogins?.buttonAuths.forEach((value, index) => { Buttons.push( {index !== 0 ?
OR
: undefined} loginUserButton(value.method)} label={`Sign in with ${value.name}`} className=" w-full text-center" loading={submitLoader} />
); }); return Buttons; } function displayRegistration() { if (availableLogins?.registrationDisabled !== "true") { return (

New here?

Sign Up
); } } return (
{displayLoginCredential()} {displayLoginExternalButton()} {Capacitor.isNativePlatform() ? undefined : displayRegistration()}
); }