diff --git a/src/routes/contact/+page.server.ts b/src/routes/contact/+page.server.ts index b3f396a..e604d9b 100644 --- a/src/routes/contact/+page.server.ts +++ b/src/routes/contact/+page.server.ts @@ -1,81 +1,84 @@ -import { env } from '$env/dynamic/private'; -import { fail } from '@sveltejs/kit'; -import { createTransport } from 'nodemailer'; -import type { Actions } from './$types'; -import { logger } from '$lib/server/logger'; +import { env } from "$env/dynamic/private"; +import { fail } from "@sveltejs/kit"; +import { createTransport } from "nodemailer"; +import type { Actions } from "./$types"; +import { logger } from "$lib/server/logger"; export const actions = { default: async ({ request }) => { const form = await request.formData(); - if (!form.has('name')) { + if (!form.has("name")) { return fail(400, { name: null, missing: true }); } - if (!form.has('email')) { + if (!form.has("email")) { return fail(400, { email: null, missing: true }); } - if (!form.has('subject')) { + if (!form.has("subject")) { return fail(400, { subject: null, missing: true }); } - if (!form.has('message')) { + if (!form.has("message")) { return fail(400, { message: null, missing: true }); } - const name = form.get('name'); - if (typeof name !== 'string') { + const name = form.get("name"); + if (typeof name !== "string") { return fail(400, { name, incorrect: true }); } - const email = form.get('email'); - if (typeof email !== 'string') { + const email = form.get("email"); + if (typeof email !== "string") { return fail(400, { email, incorrect: true }); } - const subject = form.get('subject'); - if (typeof subject !== 'string') { + const subject = form.get("subject"); + if (typeof subject !== "string") { return fail(400, { subject, incorrect: true }); } - const message = form.get('message'); - if (typeof message !== 'string') { + const message = form.get("message"); + if (typeof message !== "string") { return fail(400, { message, incorrect: true }); } const transport = createTransport({ host: env.MAIL_TRANSPORT_HOST, - port: isNaN(Number(env.MAIL_TRANSPORT_PORT)) ? 587 : Number(env.MAIL_TRANSPORT_PORT), + port: isNaN(Number(env.MAIL_TRANSPORT_PORT)) + ? 587 + : Number(env.MAIL_TRANSPORT_PORT), auth: { user: env.MAIL_TRANSPORT_USER, - pass: env.MAIL_TRANSPORT_PASS - } + pass: env.MAIL_TRANSPORT_PASS, + }, }); try { const info1 = await transport.sendMail({ - from: 'no-reply@benjaminpalko.ca', + from: "no-reply@benjaminpalko.ca", to: email, subject: `Thank you for reaching out`, - text: `Hello ${name}!\n\nThank you for reaching out! I will be sure to get back to you ASAP.\n\nCheers,\nBenjamin` + text: `Hello ${name}!\n\nThank you for reaching out! I will be sure to get back to you ASAP.\n\nCheers,\nBenjamin`, }); const info2 = await transport.sendMail({ from: email, - to: 'contact@benjaminpalko.ca', + to: "contact@benjaminpalko.ca", subject: subject, - text: message + text: message, }); return { response: { accepted: [...info1.accepted, ...info2.accepted], - rejected: [...info1.rejected, ...info2.rejected] - } + rejected: [...info1.rejected, ...info2.rejected], + }, }; } catch (error) { logger.error(error); + fail(400, { incorrect: true }); } - } + }, } satisfies Actions; diff --git a/src/routes/contact/+page.svelte b/src/routes/contact/+page.svelte index 79ae3f8..88036fd 100644 --- a/src/routes/contact/+page.svelte +++ b/src/routes/contact/+page.svelte @@ -11,11 +11,27 @@ } from '@lucide/svelte'; import type { PageProps } from './$types'; + let loading = $state(false); + let { form }: PageProps = $props(); + + $inspect(form); -
-
+ { + loading = true; + return async ({ update }) => { + loading = false; + update(); + }; + }} +> +
+

Reach out! 🤝

+
{#if form?.response?.rejected.length ?? 0 > 0} -

Reach out! 🤝

-
- +