updated client module
This commit is contained in:
88
public/assets/js/client-show-modal.js
Normal file
88
public/assets/js/client-show-modal.js
Normal file
@@ -0,0 +1,88 @@
|
||||
$(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');
|
||||
});
|
||||
Reference in New Issue
Block a user