88 lines
3.4 KiB
JavaScript
88 lines
3.4 KiB
JavaScript
$(document).ready(function() {
|
|
|
|
// Generic AJAX handler for standard forms (Shortcodes & Payments)
|
|
function submitAjaxForm(formId, modalId) {
|
|
$(formId).on('submit', function(e) {
|
|
e.preventDefault();
|
|
let $form = $(this);
|
|
let $submitBtn = $form.find('button[type="submit"]');
|
|
let originalBtnText = $submitBtn.text();
|
|
|
|
// Disable button and show loading state
|
|
$submitBtn.prop('disabled', true).text('Saving...');
|
|
|
|
$.ajax({
|
|
url: $form.attr('action'),
|
|
type: 'POST',
|
|
data: $form.serialize(),
|
|
headers: {
|
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
|
},
|
|
success: function(response) {
|
|
// Hide modal
|
|
$(modalId).modal('hide');
|
|
// Reset form
|
|
$form[0].reset();
|
|
// Reload page to show fresh data (or dynamically append to table)
|
|
location.reload();
|
|
},
|
|
error: function(xhr) {
|
|
let errors = xhr.responseJSON?.errors;
|
|
let errorMsg = 'Something went wrong. Please check your inputs.';
|
|
if (errors) {
|
|
errorMsg = Object.values(errors).flat().join('\n');
|
|
}
|
|
alert(errorMsg);
|
|
},
|
|
complete: function() {
|
|
$submitBtn.prop('disabled', false).text(originalBtnText);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// AJAX handler for Document Upload (Requires FormData for files)
|
|
function submitFileForm(formId, modalId) {
|
|
$(formId).on('submit', function(e) {
|
|
e.preventDefault();
|
|
let formElement = $(this)[0];
|
|
let formData = new FormData(formElement);
|
|
let $submitBtn = $(this).find('button[type="submit"]');
|
|
let originalBtnText = $submitBtn.text();
|
|
|
|
$submitBtn.prop('disabled', true).text('Uploading...');
|
|
|
|
$.ajax({
|
|
url: $(this).attr('action'),
|
|
type: 'POST',
|
|
data: formData,
|
|
processData: false, // Essential for file uploads
|
|
contentType: false, // Essential for file uploads
|
|
headers: {
|
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
|
},
|
|
success: function(response) {
|
|
$(modalId).modal('hide');
|
|
formElement.reset();
|
|
location.reload();
|
|
},
|
|
error: function(xhr) {
|
|
let errors = xhr.responseJSON?.errors;
|
|
let errorMsg = 'Failed to upload document. Please check the file size and format.';
|
|
if (errors) {
|
|
errorMsg = Object.values(errors).flat().join('\n');
|
|
}
|
|
alert(errorMsg);
|
|
},
|
|
complete: function() {
|
|
$submitBtn.prop('disabled', false).text(originalBtnText);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// Initialize the handlers
|
|
submitAjaxForm('#shortcodeForm', '#addShortcodeModal');
|
|
submitAjaxForm('#paymentForm', '#addPaymentModal');
|
|
submitFileForm('#documentForm', '#uploadDocumentModal');
|
|
}); |