summaryrefslogtreecommitdiff
path: root/http/public/scripts/contact/submit-otp-form.js
blob: 8c093142abb1fc88a0ab760d78f246c2cae98001 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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();
}