summaryrefslogtreecommitdiff
path: root/website/src/scripts/contact/submit-otp-form.ts
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-12-18 11:04:03 +0000
committerJoe Carstairs <me@joeac.net>2025-12-18 11:04:03 +0000
commit46c9b7731622f1f4d0f6a03c3179e747e0ce065d (patch)
tree71c60d9cf72797b06054a61990f7baa41db2e8a0 /website/src/scripts/contact/submit-otp-form.ts
parent40d6c7f248c3fe506690ee3ccb3894f952e164ed (diff)
contact page
Diffstat (limited to 'website/src/scripts/contact/submit-otp-form.ts')
-rw-r--r--website/src/scripts/contact/submit-otp-form.ts72
1 files changed, 72 insertions, 0 deletions
diff --git a/website/src/scripts/contact/submit-otp-form.ts b/website/src/scripts/contact/submit-otp-form.ts
new file mode 100644
index 0000000..7fe83a8
--- /dev/null
+++ b/website/src/scripts/contact/submit-otp-form.ts
@@ -0,0 +1,72 @@
+import { actions } from "astro:actions";
+import type { Selectors } from "./selectors";
+import {
+ postErrorMessageOnContactForm,
+ postErrorMessageOnOtpForm,
+} from "./post-error-message";
+
+const fallbackErrorMsg =
+ "No can do. I'm afraid joeac.net is a bit broken right now - sorry about that.";
+
+export async function submitOtpForm(selectors: 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;
+
+ const verifyResult = await actions.otp.verify({ guess, userId: email });
+ if (verifyResult.error) {
+ otpDialog.submitButton()?.removeAttribute("disabled");
+ postErrorMessageOnOtpForm(
+ selectors,
+ verifyResult.error?.toString() ?? fallbackErrorMsg,
+ );
+ return;
+ }
+ if (!verifyResult.data) {
+ otpDialog.submitButton()?.removeAttribute("disabled");
+ postErrorMessageOnOtpForm(selectors, "Incorrect OTP. Check your email?");
+ otpDialog.firstOtpInput()?.focus();
+ return;
+ }
+ const sendmailToken = verifyResult.data;
+
+ const sendmailResult = await actions.sendmail({
+ email,
+ message: message,
+ name: name,
+ userId: email,
+ token: sendmailToken,
+ });
+ if (sendmailResult.error) {
+ const errorMsg = sendmailResult.error?.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();
+}