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(); });