//=== FORM FILTER ===// $('#form-filter button[type="submit"]').on('click', function () { $('#form-filter').data('url', $(this).data('url')); }); $('#form-filter').on('submit', function (e) { if ($(this)[0].checkValidity() === false) { e.preventDefault(); e.stopPropagation(); } else { $('#form-filter button[type="submit"]').attr('disabled', true); $.ajax({ url: $(this).data('url'), type: 'POST', data: new FormData($(this)[0]), contentType: false, processData: false, beforeSend: function () { setTimeout(function () { $('#modal-loader').modal('show'); }, 100); }, xhr: function () { var xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; return xhr; }, success: function (response, status, xhr) { var filename = ""; var disposition = xhr.getResponseHeader('Content-Disposition'); // Mencari nama file dari header Content-Disposition if (disposition && disposition.indexOf('attachment') !== -1) { var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; var matches = filenameRegex.exec(disposition); if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, ''); } // Mendapatkan tipe konten dari respons var contentType = xhr.getResponseHeader('Content-Type'); var blob = new Blob([response], { type: contentType }); // Penanganan berdasarkan jenis konten if (contentType.toLowerCase().indexOf('application/pdf') !== -1) { // Jika tipe konten adalah PDF, buka tab baru untuk melihat PDF var fileUrl = window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob); window.open(fileUrl, '_blank'); } else { // Jika bukan PDF, lakukan proses unduhan if (typeof window.navigator.msSaveBlob !== 'undefined') { // Internet Explorer window.navigator.msSaveBlob(blob, filename); } else { // Bukan Internet Explorer var downloadUrl = window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob); if (filename) { // Gunakan atribut HTML5 untuk menentukan nama file var a = document.createElement("a"); if (typeof a.download === 'undefined') { // Safari tidak mendukung atribut download, navigasi ke URL unduhan window.location = downloadUrl; } else { // Mengatur atribute href dan download, dan melakukan klik pada elemen a a.href = downloadUrl; a.download = filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); } } else { // Jika tidak ada nama file, gunakan URL untuk mengunduh file window.location = downloadUrl; } // Membersihkan URL object setelah beberapa saat setTimeout(function () { if (window.URL) { window.URL.revokeObjectURL(downloadUrl); } else { window.webkitURL.revokeObjectURL(downloadUrl); } }, 100); } } }, error: function (error) { alert('Kesalahan Saat Export Data'); } }).done(function () { $('#form-filter button[type="submit"]').removeAttr('disabled'); setTimeout(function () { $('#modal-loader').modal('hide'); }, 1000); }).fail(function () { $('#form-filter button[type="submit"]').removeAttr('disabled'); $('#modal-loader').modal('hide'); }) return false; } $(this).addClass('was-validated'); }); //=== FORM SUBMIT ===// $('#form').on('submit', function (e) { event.preventDefault(); const form = $(this); const submitButton = form.find('#btn-save'); const alert = form.find('#alert'); var url = form.data('url-store'); var method = $('input[name=_method]').val(); if (method === 'PATCH') { url = $(this).data('url-update').replace(':id', $('#id').val()); } if (form[0].checkValidity() === false) { form.addClass('was-validated'); } else { form.find('#alert').html(''); form.find('#btn-save').attr('disabled', true); $.ajax({ url: url, type: 'POST', data: new FormData(form[0]), contentType: false, processData: false, beforeSend: function () { $('#modal-loader').modal('show'); form.find('#alert').html(''); form.find('#btn-save').attr('disabled', true); }, success: function (data) { form.find('#alert').html(successMessageFormat(data)); table.api().ajax.reload(); }, error: function (xhr) { form.find('#alert').html(errorMessageFormat(xhr)); form.find('#btn-save').removeAttr('disabled'); } }).done(function () { $('#modal-loader').modal('hide'); form.find('#btn-save').removeAttr('disabled'); form.find('#btn-cancel').trigger('click'); }).fail(function () { $('#modal-loader').modal('hide'); form.find('#btn-save').removeAttr('disabled'); }) return false; } form.addClass('was-validated'); }); function edit(e) { $('#alert').html(''); $('#form-title').html("Mohon tunggu beberapa saat..."); $('#form-textAction').html(" Perubahan"); $('input[name=_method]').val('PATCH'); $('#btn-cancel').show(); $.ajax({ url: $(e).data('url'), type: 'GET', dataType: 'JSON', success: function (data) { $('#form-title').html('Edit'); $('#id').val(data.id); $('#name').val(data.name).focus(); }, error: function () { reload(); } }); } function remove(e) { $.confirm({ title: '', content: 'Apakah Anda yakin akan menghapus data ini?', icon: 'icon icon-question amber-text', theme: 'modern', closeIcon: true, animation: 'scale', type: 'red', buttons: { ok: { text: 'ok!', btnClass: 'btn-primary', keys: ['enter'], action: function () { $.ajax({ url: $(e).data('url'), type: 'POST', data: { '_method': 'DELETE', '_token': $('meta[name="csrf-token"]').attr('content') }, success: function (data) { table.api().ajax.reload(); }, error: function () { reload(); } }); } }, cancel: function () { console.log('the user clicked cancel'); } } }); } function reset(e) { const form = $(e).closest('form'); form[0].reset(); form.find('input[name=_method]').val('POST'); form.find('.select2').val('').trigger('change'); form.find('#form-title').html("Tambah"); form.find('#form-textAction').html(''); form.find('#btn-cancel').hide(); form.find('#btn-reset').show(); }