document.addEventListener('DOMContentLoaded', function () {
const userModal = new bootstrap.Modal(document.getElementById('user-modal'));
const userForm = document.getElementById('user-form');
const userTable = document.getElementById('users-table').getElementsByTagName('tbody')[0];
const modalLabel = document.getElementById('user-modal-label');
const passwordField = document.getElementById('password');
const passwordHelpText = passwordField.nextElementSibling;
// Function to fetch and display users
function loadUsers() {
fetch('api/get_users.php')
.then(response => response.json())
.then(data => {
userTable.innerHTML = '';
if(data.success) {
data.users.forEach(user => {
const row = userTable.insertRow();
row.innerHTML = `
${user.nama_lengkap} |
${user.email} |
${user.role.replace('_', ' ')} |
${user.nama_kantor || 'N/A'} |
${new Date(user.created_at).toLocaleDateString()} |
|
`;
});
feather.replace();
}
})
.catch(error => console.error('Error loading users:', error));
}
// Show modal for adding a new user
document.getElementById('btn-add-user').addEventListener('click', function () {
userForm.reset();
document.getElementById('user-id').value = '';
modalLabel.textContent = 'Tambah Pengguna Baru';
passwordField.setAttribute('required', 'required');
passwordHelpText.style.display = 'none';
userModal.show();
});
// Handle form submission for both add and edit
userForm.addEventListener('submit', function (e) {
e.preventDefault();
const formData = new FormData(userForm);
const userId = formData.get('id');
const url = userId ? 'api/update_user.php' : 'api/add_user.php';
// If password is empty on update, remove it from form data
if (userId && !formData.get('password')) {
formData.delete('password');
}
fetch(url, {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
userModal.hide();
loadUsers(); // Refresh the table
// You can add a toast notification here for better UX
} else {
alert('Error: ' + data.message);
}
})
.catch(error => console.error('Form submission error:', error));
});
// Handle edit and delete button clicks
userTable.addEventListener('click', function (e) {
const target = e.target.closest('button');
if (!target) return;
const id = target.dataset.id;
// Edit button
if (target.classList.contains('edit-btn')) {
fetch(`api/get_user.php?id=${id}`)
.then(response => response.json())
.then(data => {
if (data.success) {
const user = data.user;
document.getElementById('user-id').value = user.id;
document.getElementById('nama_lengkap').value = user.nama_lengkap;
document.getElementById('email').value = user.email;
document.getElementById('role').value = user.role;
document.getElementById('id_kantor').value = user.id_kantor || '';
modalLabel.textContent = 'Edit Pengguna';
passwordField.removeAttribute('required');
passwordHelpText.style.display = 'block';
userModal.show();
} else {
alert('Error: ' + data.message);
}
});
}
// Delete button
if (target.classList.contains('delete-btn')) {
if (confirm('Apakah Anda yakin ingin menghapus pengguna ini?')) {
fetch('api/delete_user.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: `id=${id}`
})
.then(response => response.json())
.then(data => {
if (data.success) {
loadUsers(); // Refresh the table
} else {
alert('Error: ' + data.message);
}
})
.catch(error => console.error('Delete error:', error));
}
}
});
// Initial load of users
loadUsers();
});