216 lines
7.1 KiB
JavaScript
216 lines
7.1 KiB
JavaScript
// Tambah Admin JavaScript
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const form = document.getElementById('addAdminForm');
|
|
const usernameInput = document.getElementById('username');
|
|
const passwordInput = document.getElementById('password');
|
|
const confirmPasswordInput = document.getElementById('confirmPassword');
|
|
const togglePassword = document.getElementById('togglePassword');
|
|
const toggleConfirmPassword = document.getElementById('toggleConfirmPassword');
|
|
const errorMessage = document.getElementById('errorMessage');
|
|
const successMessage = document.getElementById('successMessage');
|
|
const submitBtn = document.getElementById('submitBtn');
|
|
const loadingSpinner = document.getElementById('loadingSpinner');
|
|
const btnText = document.getElementById('btnText');
|
|
|
|
// Toggle password visibility
|
|
function setupPasswordToggle(toggleBtn, inputField) {
|
|
toggleBtn.addEventListener('click', function() {
|
|
const type = inputField.getAttribute('type') === 'password' ? 'text' : 'password';
|
|
inputField.setAttribute('type', type);
|
|
|
|
const icon = toggleBtn.querySelector('i');
|
|
if (type === 'password') {
|
|
icon.className = 'fas fa-eye-slash';
|
|
} else {
|
|
icon.className = 'fas fa-eye';
|
|
}
|
|
});
|
|
}
|
|
|
|
setupPasswordToggle(togglePassword, passwordInput);
|
|
setupPasswordToggle(toggleConfirmPassword, confirmPasswordInput);
|
|
|
|
// Confirm password validation
|
|
function validatePasswordMatch() {
|
|
const password = passwordInput.value;
|
|
const confirmPassword = confirmPasswordInput.value;
|
|
|
|
if (confirmPassword && password !== confirmPassword) {
|
|
confirmPasswordInput.classList.add('error');
|
|
confirmPasswordInput.classList.remove('success');
|
|
return false;
|
|
} else if (confirmPassword && password === confirmPassword) {
|
|
confirmPasswordInput.classList.remove('error');
|
|
confirmPasswordInput.classList.add('success');
|
|
return true;
|
|
}
|
|
|
|
confirmPasswordInput.classList.remove('error', 'success');
|
|
return confirmPassword === '';
|
|
}
|
|
|
|
confirmPasswordInput.addEventListener('input', validatePasswordMatch);
|
|
passwordInput.addEventListener('input', function() {
|
|
if (confirmPasswordInput.value) {
|
|
validatePasswordMatch();
|
|
}
|
|
});
|
|
|
|
// Username validation
|
|
usernameInput.addEventListener('input', function() {
|
|
const username = this.value.trim();
|
|
|
|
if (username.length >= 3) {
|
|
this.classList.remove('error');
|
|
this.classList.add('success');
|
|
} else if (username.length > 0) {
|
|
this.classList.add('error');
|
|
this.classList.remove('success');
|
|
} else {
|
|
this.classList.remove('error', 'success');
|
|
}
|
|
});
|
|
|
|
// Form validation
|
|
function validateForm() {
|
|
const username = usernameInput.value.trim();
|
|
const password = passwordInput.value;
|
|
const confirmPassword = confirmPasswordInput.value;
|
|
|
|
let isValid = true;
|
|
let errorMsg = '';
|
|
|
|
// Username validation
|
|
if (username.length < 3) {
|
|
isValid = false;
|
|
errorMsg = 'Username harus minimal 3 karakter';
|
|
usernameInput.classList.add('error');
|
|
}
|
|
|
|
// Password validation
|
|
if (password.length < 4) {
|
|
isValid = false;
|
|
errorMsg = 'Password harus minimal 4 karakter';
|
|
passwordInput.classList.add('error');
|
|
}
|
|
|
|
// Password match validation
|
|
if (password !== confirmPassword) {
|
|
isValid = false;
|
|
errorMsg = 'Konfirmasi password tidak cocok';
|
|
confirmPasswordInput.classList.add('error');
|
|
}
|
|
|
|
if (!isValid) {
|
|
showError(errorMsg);
|
|
}
|
|
|
|
return isValid;
|
|
}
|
|
|
|
// Show error message
|
|
function showError(message) {
|
|
errorMessage.textContent = message;
|
|
errorMessage.style.display = 'block';
|
|
successMessage.style.display = 'none';
|
|
|
|
setTimeout(() => {
|
|
errorMessage.style.display = 'none';
|
|
}, 5000);
|
|
}
|
|
|
|
// Show success message
|
|
function showSuccess(message) {
|
|
successMessage.textContent = message;
|
|
successMessage.style.display = 'block';
|
|
errorMessage.style.display = 'none';
|
|
|
|
setTimeout(() => {
|
|
successMessage.style.display = 'none';
|
|
}, 5000);
|
|
}
|
|
|
|
// Set loading state
|
|
function setLoading(loading) {
|
|
if (loading) {
|
|
submitBtn.disabled = true;
|
|
loadingSpinner.style.display = 'inline-block';
|
|
btnText.textContent = 'Menambahkan...';
|
|
} else {
|
|
submitBtn.disabled = false;
|
|
loadingSpinner.style.display = 'none';
|
|
btnText.textContent = 'Tambah Admin';
|
|
}
|
|
}
|
|
|
|
// Form submission
|
|
form.addEventListener('submit', async function(e) {
|
|
e.preventDefault();
|
|
|
|
if (!validateForm()) {
|
|
return;
|
|
}
|
|
|
|
setLoading(true);
|
|
|
|
// Prepare form data
|
|
const formData = new FormData();
|
|
formData.append('username', usernameInput.value.trim());
|
|
formData.append('password', passwordInput.value);
|
|
formData.append('confirmPassword', confirmPasswordInput.value);
|
|
|
|
try {
|
|
const response = await fetch('../api/tambah_admin.php', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
const result = await response.json();
|
|
|
|
if (result.status === 'success') {
|
|
showSuccess(result.message);
|
|
form.reset();
|
|
|
|
// Reset all visual states
|
|
document.querySelectorAll('.form-input').forEach(input => {
|
|
input.classList.remove('error', 'success');
|
|
});
|
|
|
|
// Redirect after 3 seconds
|
|
setTimeout(() => {
|
|
window.location.href = 'dashboard.html';
|
|
}, 3000);
|
|
} else {
|
|
showError(result.message || 'Terjadi kesalahan saat menambahkan admin');
|
|
|
|
// Handle specific errors
|
|
if (result.field === 'username') {
|
|
usernameInput.classList.add('error');
|
|
usernameInput.focus();
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('Error:', error);
|
|
showError('Terjadi kesalahan koneksi. Silakan coba lagi.');
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
});
|
|
|
|
// Check authentication status
|
|
async function checkAuth() {
|
|
try {
|
|
const response = await fetch('../api/dashboard.php');
|
|
const result = await response.json();
|
|
|
|
if (result.status === 'error' && result.redirect) {
|
|
window.location.href = result.redirect;
|
|
}
|
|
} catch (error) {
|
|
console.error('Auth check failed:', error);
|
|
}
|
|
}
|
|
|
|
// Check auth on page load
|
|
checkAuth();
|
|
}); |