import { actions } from "./actions.js"; import { postErrorMessageOnOtpForm } from "./post-error-message.js"; /** @typedef {import("./selectors.js").Selectors} Selectors */ const fallbackErrorMsg = "No can do. I'm afraid joeac.net is a bit broken right now - sorry about that."; /** * @param {Selectors} selectors */ export async function submitOtpForm(selectors) { const { contactForm, otpDialog, successSection } = selectors; const otpForm = otpDialog.otpForm(); otpDialog.submitButton()?.setAttribute("disabled", ""); const otpFormData = new FormData(otpForm ?? undefined); const guess = [ otpFormData.get("1"), otpFormData.get("2"), otpFormData.get("3"), otpFormData.get("4"), otpFormData.get("5"), otpFormData.get("6"), ].join(""); const name = contactForm.nameElem()?.value; const email = contactForm.emailElem().value; const message = contactForm.messageElem()?.value; let verifyResult; try { verifyResult = await actions.verifyOtp({ guess, userId: email }); } catch (verifyError) { otpDialog.submitButton()?.removeAttribute("disabled"); postErrorMessageOnOtpForm( selectors, verifyError?.toString() ?? fallbackErrorMsg, ); return; } if (verifyResult === false) { otpDialog.submitButton()?.removeAttribute("disabled"); postErrorMessageOnOtpForm(selectors, "Incorrect OTP. Check your email?"); otpDialog.firstOtpInput()?.focus(); return; } const sendmailToken = verifyResult; try { await actions.sendEmail({ email, message: message, name: name, userId: email, token: sendmailToken, }); } catch (sendEmailError) { const errorMsg = sendEmailError?.toString() ?? fallbackErrorMsg; postErrorMessageOnOtpForm(selectors, errorMsg); otpDialog.submitButton()?.removeAttribute("disabled"); return; } const sentName = successSection.name(); const sentEmail = successSection.email(); const sentMessage = successSection.message(); sentName && (sentName.textContent = name ?? "???"); sentEmail && (sentEmail.textContent = email ?? "???"); sentMessage && (sentMessage.textContent = message ?? "???"); contactForm.self()?.remove(); successSection.self()?.removeAttribute("hidden"); otpDialog.submitButton()?.removeAttribute("disabled"); otpDialog.self().close(); }