diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index bdab1ad..db036e9 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -81,7 +81,7 @@ use Modules\Lpj\Http\Requests\SurveyorRequest; use Modules\Lpj\Http\Requests\FormSurveyorRequest; use Modules\Lpj\Emails\SendJadwalKunjunganEmail; use App\Helpers\Lpj; - +use Modules\Lpj\Models\Authorization; class SurveyorController extends Controller { public $user; @@ -366,7 +366,7 @@ class SurveyorController extends Controller return response()->json([ 'success' => true, 'message' => 'Data berhasil disimpan', - 'file' => $newFoto + 'path' => $newFoto[0]['path'], ], 200); } diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index 7f7a008..f18abbd 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -176,7 +176,7 @@ -
Tidak ada foto yang ditemukan.
'; } }, error: function(xhr, status, error) { console.error('Gagal memuat foto:', error); - gallery.innerHTML = 'Gagal memuat foto. Silakan coba lagi.
'; + showErrorMessage('Gagal memuat foto yang ada'); }, complete: function() { - gallery.innerHTML = gallery.innerHTML.includes('loader') ? '' : gallery - .innerHTML; + hideLoadingOverlay(); } }); } + function handleUploadComplete(file, isSuccess, errorMessage = null) { + uploadQueue--; + const index = uploadBatch.indexOf(file); + if (index > -1) { + uploadBatch.splice(index, 1); + } + + // Show individual error if any + if (!isSuccess && errorMessage) { + showErrorMessage(errorMessage); + } + + // If all uploads are complete + if (uploadQueue === 0) { + hideLoadingOverlay(); + + // Show final status message + const totalFiles = uploadBatch.length + 1; // +1 for current file + if (totalFiles === 1) { + // Single file upload + if (isSuccess) { + showSuccessMessage('Foto berhasil diupload'); + } + } else { + // Multiple files upload + showSuccessMessage(`${totalFiles} foto berhasil diupload`); + } + + // Reset batch + uploadBatch = []; + } + } + + function showLoadingOverlay() { + const overlay = document.querySelector('.loading-overlay'); + if (!overlay) { + const dropzoneElement = document.querySelector('#upload-dropzone'); + const loadingOverlay = document.createElement('div'); + loadingOverlay.className = 'loading-overlay'; + loadingOverlay.style.cssText = ` + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255,255,255,0.7); + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; + `; + loadingOverlay.innerHTML = ''; + dropzoneElement.appendChild(loadingOverlay); + } else { + overlay.style.display = 'flex'; + } + } + + function hideLoadingOverlay() { + const overlay = document.querySelector('.loading-overlay'); + if (overlay) overlay.style.display = 'none'; + } + + function showSuccessMessage(message) { + Swal.fire({ + icon: 'success', + title: message, + toast: true, + position: 'top-end', + showConfirmButton: false, + timer: 1500 + }); + } + + function showErrorMessage(message) { + Swal.fire({ + icon: 'error', + title: 'Upload Gagal', + text: message || 'Error tidak diketahui' + }); + } + + // Inisialisasi Dropzone untuk elemen awal dengan pengecekan function safeInitDropzone(selector, paramName) { setTimeout(() => { @@ -492,15 +490,12 @@ // Inisialisasi dropzone untuk elemen awal safeInitDropzone('#upload-dropzone', 'upload_foto'); - - // Event listener untuk menambah lantai - }); let fotoObjekJaminan = @json($fotoObjekJaminan); // Fungsi untuk membuka modal dan mengatur data - function openEditDataModal(file, response) { + window.openEditDrawer = function(file, response) { // Mengisi data input berdasarkan respons document.getElementById('editDataFilePath').value = response.path || ''; document.getElementById('editDataName').value = response.name || ''; @@ -567,12 +562,10 @@ cssMaxHeight: 500 }); - - // openModal('editPhotoModal'); } - function addEditAndDeleteButtons(file, response) { + window.addEditAndDeleteButtons = function(file, response) { const filePreviewElement = file.previewElement; @@ -592,7 +585,8 @@ editButton.style.cursor = 'pointer'; editButton.setAttribute("data-drawer-toggle", "#drawer_2_2"); editButton.onclick = function() { - openEditDataModal(file, response); + // e.preventDefault(); + openEditDrawer(file, response); }; // Tombol Hapus