Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 11s
Build & Deploy / 🧪 QA (push) Failing after 32s
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
94 lines
3.1 KiB
TypeScript
94 lines
3.1 KiB
TypeScript
'use server';
|
|
|
|
import { sendEmail } from '@/lib/mail/mailer';
|
|
import { render, ContactFormNotification, ConfirmationMessage } from '@mintel/mail';
|
|
import React from 'react';
|
|
|
|
export async function sendContactFormAction(formData: FormData) {
|
|
const name = formData.get('name') as string;
|
|
const email = formData.get('email') as string;
|
|
const message = formData.get('message') as string;
|
|
const productName = formData.get('productName') as string | null;
|
|
|
|
if (!name || !email || !message) {
|
|
console.warn('Missing required fields in contact form');
|
|
return { success: false, error: 'Missing required fields' };
|
|
}
|
|
|
|
// 1. Save to CMS
|
|
try {
|
|
const { getPayload } = await import('payload');
|
|
const configPromise = (await import('@payload-config')).default;
|
|
const payload = await getPayload({ config: configPromise });
|
|
|
|
await payload.create({
|
|
collection: 'form-submissions',
|
|
data: {
|
|
name,
|
|
email,
|
|
message,
|
|
type: productName ? 'product_quote' : 'contact',
|
|
productName: productName || undefined,
|
|
},
|
|
});
|
|
|
|
console.log('Successfully saved form submission to Payload CMS');
|
|
} catch (error) {
|
|
console.error('Failed to store submission in Payload CMS', { error });
|
|
}
|
|
|
|
// 2. Send Emails
|
|
console.log('Sending branded emails', { email, productName });
|
|
|
|
const notificationSubject = productName
|
|
? `Product Inquiry: ${productName}`
|
|
: 'New Contact Form Submission';
|
|
const confirmationSubject = 'Thank you for your inquiry';
|
|
|
|
try {
|
|
// 2a. Send notification to Mintel/Client
|
|
const notificationHtml = await render(
|
|
React.createElement(ContactFormNotification, {
|
|
name,
|
|
email,
|
|
message,
|
|
productName: productName || undefined,
|
|
}),
|
|
);
|
|
|
|
const notificationResult = await sendEmail({
|
|
replyTo: email,
|
|
subject: notificationSubject,
|
|
html: notificationHtml,
|
|
});
|
|
|
|
if (!notificationResult.success) {
|
|
console.error('Notification email FAILED', { error: notificationResult.error });
|
|
}
|
|
|
|
// 2b. Send confirmation to Customer
|
|
const confirmationHtml = await render(
|
|
React.createElement(ConfirmationMessage, {
|
|
name,
|
|
clientName: 'Cable Creations',
|
|
}),
|
|
);
|
|
|
|
const confirmationResult = await sendEmail({
|
|
to: email,
|
|
subject: confirmationSubject,
|
|
html: confirmationHtml,
|
|
});
|
|
|
|
if (!confirmationResult.success) {
|
|
console.error('Confirmation email FAILED', { error: confirmationResult.error });
|
|
}
|
|
|
|
return { success: true };
|
|
} catch (error) {
|
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
console.error('Failed to send branded emails', { error: errorMsg });
|
|
return { success: false, error: errorMsg };
|
|
}
|
|
}
|