Files
shopify-ai-backup/chat/templates/Form Builder/public/js/public-script.js

137 lines
5.2 KiB
JavaScript

/**
* PC Form Builder Public Scripts
*
* Frontend JavaScript functionality for form handling.
*
* @package PCFormBuilder
*/
(function($) {
'use strict';
var PCFB_Public = {
init: function() {
this.initForms();
},
initForms: function() {
var self = this;
$(document).on('submit', '.pcfb-form', function(e) {
e.preventDefault();
self.handleFormSubmit($(this));
});
},
handleFormSubmit: function($form) {
var self = this;
var formId = $form.data('form-id');
var $submitButton = $form.find('.pcfb-submit-button');
var $submitText = $form.find('.pcfb-submit-text');
var $submitLoader = $form.find('.pcfb-submit-loader');
var $successMessage = $form.closest('.pcfb-form-container').find('.pcfb-success-message');
var $errorMessage = $form.closest('.pcfb-form-container').find('.pcfb-error-message');
$form.find('.pcfb-form-group').removeClass('error');
$form.find('.pcfb-field-error').text('');
$errorMessage.hide().find('.pcfb-message-text').text('');
$successMessage.hide();
var formData = $form.serialize();
var ajaxData = {
action: 'pcfb_submit_form',
form_id: formId,
form_data: {},
nonce: pcfbVars.nonce
};
$form.find('input, textarea, select').each(function() {
var $field = $(this);
var name = $field.attr('name');
if (name && name !== 'action' && name !== 'form_id' && name !== 'pcfb_nonce') {
if ($field.is(':checkbox')) {
if ($field.is(':checked')) {
if (!ajaxData.form_data[name]) {
ajaxData.form_data[name] = [];
}
ajaxData.form_data[name].push($field.val());
}
} else if ($field.is(':radio')) {
if ($field.is(':checked')) {
ajaxData.form_data[name] = $field.val();
}
} else {
ajaxData.form_data[name] = $field.val();
}
}
});
$form.addClass('loading');
$submitButton.prop('disabled', true);
$submitText.hide();
$submitLoader.show();
$.ajax({
url: pcfbVars.ajaxurl,
type: 'POST',
data: ajaxData,
dataType: 'json',
success: function(response) {
$form.removeClass('loading');
$submitButton.prop('disabled', false);
$submitText.show();
$submitLoader.hide();
if (response.success) {
$successMessage.find('.pcfb-message-text').text(response.data.message || 'Thank you!');
$successMessage.show();
$form.hide();
if (response.data.response_id) {
console.log('Response ID:', response.data.response_id);
}
} else {
if (response.data.errors) {
$.each(response.data.errors, function(fieldName, errorMessage) {
var $fieldGroup = $form.find('[name="' + fieldName + '"]').closest('.pcfb-form-group');
if ($fieldGroup.length === 0) {
$fieldGroup = $form.find('[name^="' + fieldName + '"]').closest('.pcfb-form-group');
}
if ($fieldGroup.length > 0) {
$fieldGroup.addClass('error');
$fieldGroup.find('.pcfb-field-error').text(errorMessage);
}
});
}
var errorText = response.data.message || 'An error occurred. Please try again.';
$errorMessage.find('.pcfb-message-text').text(errorText);
$errorMessage.show();
}
},
error: function(xhr, status, error) {
$form.removeClass('loading');
$submitButton.prop('disabled', false);
$submitText.show();
$submitLoader.hide();
var errorText = 'An error occurred. Please try again.';
if (xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message) {
errorText = xhr.responseJSON.data.message;
} else if (xhr.statusText) {
errorText = xhr.statusText;
}
$errorMessage.find('.pcfb-message-text').text(errorText);
$errorMessage.show();
}
});
}
};
$(document).ready(function() {
PCFB_Public.init();
});
})(jQuery);