fix: Resolve JavaScript undefined error in database reset function

- Added event parameter to resetDatabase function
- Fixed 'Cannot read properties of undefined' error
- Added null checks for date range values
- Improved button state management with fallback selectors
- Enhanced error handling for edge cases
This commit is contained in:
2025-08-14 16:13:24 +03:00
parent 24b8257a1f
commit 87a51c7950

View File

@@ -65,7 +65,7 @@
setInterval(updateTimer, 1000); // Update every second setInterval(updateTimer, 1000); // Update every second
// Database reset functionality // Database reset functionality
async function resetDatabase() { async function resetDatabase(event) {
try { try {
// First, get database statistics // First, get database statistics
const statsResponse = await fetch('/database_stats'); const statsResponse = await fetch('/database_stats');
@@ -79,8 +79,8 @@
const totalLogs = stats.total_logs; const totalLogs = stats.total_logs;
const uniqueDevices = stats.unique_devices; const uniqueDevices = stats.unique_devices;
if (totalLogs === 0) { if (totalLogs <= 1) { // Only reset log exists
alert(' Database is already empty!\nNo logs to delete.'); alert(' Database is already empty!\nNo user logs to delete.');
return; return;
} }
@@ -90,7 +90,7 @@
`This will permanently delete:\n` + `This will permanently delete:\n` +
`${totalLogs} log entries\n` + `${totalLogs} log entries\n` +
`• Data from ${uniqueDevices} unique devices\n` + `• Data from ${uniqueDevices} unique devices\n` +
`• Date range: ${stats.earliest_log} to ${stats.latest_log}\n\n` + `• Date range: ${stats.earliest_log || 'N/A'} to ${stats.latest_log || 'N/A'}\n\n` +
`⚠️ ALL DEVICE HISTORY WILL BE LOST ⚠️\n\n` + `⚠️ ALL DEVICE HISTORY WILL BE LOST ⚠️\n\n` +
`This action cannot be undone!\n\n` + `This action cannot be undone!\n\n` +
`Are you absolutely sure you want to proceed?` `Are you absolutely sure you want to proceed?`
@@ -115,10 +115,12 @@
} }
// Show loading indicator // Show loading indicator
const button = event.target; const button = event ? event.target : document.querySelector('button[onclick*="resetDatabase"]');
const originalText = button.innerHTML; const originalText = button ? button.innerHTML : '';
if (button) {
button.innerHTML = '<span class="spinner-border spinner-border-sm" role="status"></span> Clearing Database...'; button.innerHTML = '<span class="spinner-border spinner-border-sm" role="status"></span> Clearing Database...';
button.disabled = true; button.disabled = true;
}
// Send reset request // Send reset request
const resetResponse = await fetch('/reset_database', { const resetResponse = await fetch('/reset_database', {
@@ -142,17 +144,21 @@
location.reload(); // Refresh to show empty database location.reload(); // Refresh to show empty database
} else { } else {
alert('❌ Database Reset Failed:\n' + result.error); alert('❌ Database Reset Failed:\n' + result.error);
if (button) {
button.innerHTML = originalText; button.innerHTML = originalText;
button.disabled = false; button.disabled = false;
} }
}
} catch (error) { } catch (error) {
alert('❌ Network Error:\n' + error.message); alert('❌ Network Error:\n' + error.message);
// Restore button if it was changed // Restore button if it was changed
try { try {
const button = event.target; const button = event ? event.target : document.querySelector('button[onclick*="resetDatabase"]');
if (button) {
button.innerHTML = '<i class="fas fa-trash-alt"></i> Clear Database'; button.innerHTML = '<i class="fas fa-trash-alt"></i> Clear Database';
button.disabled = false; button.disabled = false;
}
} catch (e) { } catch (e) {
// Ignore if button restoration fails // Ignore if button restoration fails
} }
@@ -173,7 +179,7 @@
<a href="/server_logs" class="btn btn-info" title="View server operations and system logs"> <a href="/server_logs" class="btn btn-info" title="View server operations and system logs">
<i class="fas fa-server"></i> Server Logs <i class="fas fa-server"></i> Server Logs
</a> </a>
<button class="btn btn-danger" onclick="resetDatabase()" title="Clear all logs and reset database"> <button class="btn btn-danger" onclick="resetDatabase(event)" title="Clear all logs and reset database">
<i class="fas fa-trash-alt"></i> Clear Database <i class="fas fa-trash-alt"></i> Clear Database
</button> </button>
</div> </div>