document.addEventListener('DOMContentLoaded', () => {
const ticketForm = document.getElementById('ticketForm');
const ticketList = document.getElementById('ticketList');
const fetchTickets = async () => {
try {
const response = await fetch('api/tickets.php');
const tickets = await response.json();
renderTickets(tickets);
} catch (error) {
console.error('Error fetching tickets:', error);
}
};
const renderTickets = (tickets) => {
ticketList.innerHTML = tickets.map(ticket => `
| #${ticket.id} |
${escapeHtml(ticket.title)} |
${ticket.priority} |
${ticket.status} |
${new Date(ticket.created_at).toLocaleDateString()} |
|
`).join('');
};
const escapeHtml = (text) => {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
};
ticketForm.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(ticketForm);
const data = Object.fromEntries(formData.entries());
try {
const response = await fetch('api/tickets.php', {
method: 'POST',
headers: { 'Content-Type: application/json' },
body: JSON.stringify(data)
});
if (response.ok) {
ticketForm.reset();
const modal = bootstrap.Modal.getInstance(document.getElementById('createTicketModal'));
modal.hide();
fetchTickets();
showNotification('Ticket created successfully');
}
} catch (error) {
console.error('Error creating ticket:', error);
}
});
const showNotification = (message) => {
// Simple toast or alert
const toast = document.createElement('div');
toast.className = 'position-fixed bottom-0 end-0 p-3';
toast.style.zIndex = '1100';
toast.innerHTML = `
`;
document.body.appendChild(toast);
setTimeout(() => toast.remove(), 3000);
};
fetchTickets();
});