// Function to create customer from form
async function createCustomerFromForm(formData) {
try {
// Validate form data
const validation = validateCustomerData(formData);
if (!validation.isValid) {
throw new Error('Invalid data: ' + validation.errors.join(', '));
}
// Prepare customer data
const customerData = {
first_name: formData.firstName.trim(),
last_name: formData.lastName.trim(),
email: formData.email.toLowerCase().trim(),
phone: formData.phone?.trim(),
date_of_birth: formData.dateOfBirth,
gender: formData.gender,
preferences: {
language: formData.language || 'en',
communication_preferences: {
email_notifications: formData.emailNotifications !== false,
sms_notifications: formData.smsNotifications === true,
marketing_emails: formData.marketingEmails === true
}
},
send_welcome_email: formData.sendWelcomeEmail !== false,
create_wp_user: formData.createAccount === true
};
// Add address if complete
if (formData.street && formData.city) {
customerData.address = {
street: formData.street,
city: formData.city,
state: formData.state,
postal_code: formData.postalCode,
country: formData.country || 'US'
};
}
// Add custom fields
if (formData.customFields) {
customerData.custom_fields = formData.customFields;
}
// Create customer
const response = await fetch('/wp-json/latepoint-api/v1/customers', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'your_api_key'
},
body: JSON.stringify(customerData)
});
if (!response.ok) {
throw new Error(`HTTP Error: ${response.status}`);
}
const result = await response.json();
if (result.status === 'success') {
return {
success: true,
customer: result.data,
message: 'Customer created successfully'
};
} else {
throw new Error(result.error.message);
}
} catch (error) {
console.error('Error creating customer:', error);
return {
success: false,
error: error.message
};
}
}
function validateCustomerData(data) {
const errors = [];
if (!data.firstName || data.firstName.trim().length < 2) {
errors.push('First name must be at least 2 characters');
}
if (!data.lastName || data.lastName.trim().length < 2) {
errors.push('Last name must be at least 2 characters');
}
if (!data.email || !isValidEmail(data.email)) {
errors.push('Invalid email');
}
if (data.phone && !isValidPhone(data.phone)) {
errors.push('Invalid phone number');
}
return {
isValid: errors.length === 0,
errors
};
}
function isValidEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
function isValidPhone(phone) {
const phoneRegex = /^[\+]?[1-9][\d\s\-\(\)]{7,15}$/;
return phoneRegex.test(phone);
}
// Usage
const formData = {
firstName: 'Anna',
lastName: 'Martinez',
email: '[email protected]',
phone: '+1 555 444 3333',
emailNotifications: true,
smsNotifications: false,
sendWelcomeEmail: true,
createAccount: false
};
const result = await createCustomerFromForm(formData);
if (result.success) {
console.log('Customer created:', result.customer);
// Redirect or show success message
} else {
console.error('Error:', result.error);
// Show error message to user
}