From b82b34e542c7dd00ddbc08852e1f871ec8d29251 Mon Sep 17 00:00:00 2001 From: Bro Date: Fri, 24 Jul 2026 19:43:18 +0700 Subject: [PATCH] feat: status + test koneksi E-Jurnal di sinkronisasi --- resources/views/settings/sync.blade.php | 83 +++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/resources/views/settings/sync.blade.php b/resources/views/settings/sync.blade.php index 93dbf02..f62f140 100644 --- a/resources/views/settings/sync.blade.php +++ b/resources/views/settings/sync.blade.php @@ -121,6 +121,30 @@

Generate token untuk diinput di Aplikasi E-Jurnal Guru agar bisa push data presensi.

+ {{-- Status + Test Connection --}} + @if($hasEjurnalToken) +
+
+
+
+ + Belum diverifikasi +
+

Masukkan URL E-Jurnal dan klik Test Koneksi.

+
+
+
+ + +
+
+ @endif + {{-- Token display --}} @if($hasEjurnalToken)
@@ -277,6 +301,65 @@ } }); } + + // === E-Jurnal Connection Test === + const ejBtn = document.getElementById('test-ejurnal-btn'); + const ejSt = document.getElementById('ejurnal-status'); + const ejDot = document.getElementById('ejurnal-status-dot'); + const ejTxt = document.getElementById('ejurnal-status-text'); + const ejDet = document.getElementById('ejurnal-status-detail'); + const ejUrlInput = document.getElementById('ejurnal-test-url'); + + if (ejBtn && ejSt && ejDot && ejTxt && ejDet && ejUrlInput) { + ejBtn.addEventListener('click', async function () { + const tokenDisplay = document.getElementById('ejurnalTokenDisplay'); + const token = tokenDisplay ? tokenDisplay.textContent.trim() : ''; + const url = ejUrlInput.value.trim().replace(/\/+$/, ''); + + if (!url || !token) { + ejSt.className = 'p-4 bg-amber-50 border border-amber-200 rounded-xl'; + ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-amber-400'; + ejTxt.className = 'text-sm font-semibold text-amber-800'; + ejTxt.textContent = '⚠️ URL atau token belum lengkap'; + ejDet.textContent = 'Isi URL E-Jurnal dan pastikan token sudah digenerate.'; + return; + } + + ejBtn.disabled = true; + ejBtn.innerHTML = ' Testing...'; + ejSt.className = 'p-4 bg-slate-50 border border-slate-200 rounded-xl'; + ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-slate-300'; + ejTxt.className = 'text-sm font-semibold text-slate-500'; + ejTxt.textContent = 'Menguji koneksi...'; + ejDet.textContent = 'Menghubungi ' + url + '...'; + + try { + const resp = await fetch(url + '/api/v1/ping?token=' + encodeURIComponent(token)); + const data = await resp.json(); + + if (resp.ok && data.success) { + ejSt.className = 'p-4 bg-emerald-50 border border-emerald-200 rounded-xl'; + ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-emerald-500'; + ejTxt.className = 'text-sm font-semibold text-emerald-800'; + ejTxt.textContent = '✅ Terhubung ke E-Jurnal'; + ejDet.innerHTML = 'Siswa: ' + (data.data?.students || '?') + ' terdata'; + } else { + throw new Error(data.message || 'Token tidak valid'); + } + } catch (err) { + ejSt.className = 'p-4 bg-red-50 border border-red-200 rounded-xl'; + ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-red-500'; + ejTxt.className = 'text-sm font-semibold text-red-800'; + ejTxt.textContent = '❌ Tidak Terhubung'; + ejDet.textContent = err.message.includes('Failed to fetch') + ? 'Tidak dapat menjangkau ' + url + '. Periksa URL.' + : err.message; + } finally { + ejBtn.disabled = false; + ejBtn.innerHTML = ' Test Koneksi'; + } + }); + } });