master-brain-api / static /js /support.js
Dilip8756's picture
Upload 100 files
58c1398 verified
/**
* Support Page Logic - Aadhaar Pro
*/
document.addEventListener('DOMContentLoaded', () => {
initSupportPage();
});
function initSupportPage() {
loadRecentTickets();
setupTicketForm();
}
/**
* Handle new ticket submission
*/
function setupTicketForm() {
const form = document.getElementById('ticket-form');
if (!form) return;
form.addEventListener('submit', async (e) => {
e.preventDefault();
const data = {
subject: document.getElementById('tick-subject').value.trim(),
category: document.getElementById('tick-category').value,
message: document.getElementById('tick-message').value.trim()
};
if (!data.subject || !data.message) {
alert('Please provide both a subject and a message.');
return;
}
try {
const btn = form.querySelector('button[type="submit"]');
const originalBtnHtml = btn.innerHTML;
btn.disabled = true;
btn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Submitting...';
const res = await fetch('/api/support/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
const resData = await res.json();
btn.disabled = false;
btn.innerHTML = originalBtnHtml;
if (res.ok && resData.success) {
alert(`Ticket ${resData.ticket_number} submitted successfully! Our team will get back to you soon.`);
form.reset();
loadRecentTickets(); // Refresh list
} else {
alert('Submission failed: ' + (resData.error || 'Unknown error'));
}
} catch (err) {
console.error('Support ticket error:', err);
alert('An error occurred. Please try again later.');
}
});
}
/**
* Load recent support tickets (API Integration)
*/
async function loadRecentTickets() {
const container = document.getElementById('tickets-container');
if (!container) return;
try {
const res = await fetch('/api/support/list');
const tickets = await res.json();
if (Array.isArray(tickets) && tickets.length > 0) {
container.innerHTML = tickets.map(t => `
<div class="ticket-status-item" onclick="viewTicket('${t.id}')">
<div class="ticket-info">
<span class="id">#${t.ticket_number}</span>
<div class="subject">${t.subject}</div>
<div class="date">${t.date}</div>
</div>
<span class="status-tag status-${t.status}">
${t.status.toUpperCase()}
</span>
</div>
`).join('');
} else {
container.innerHTML = '<p style="color: var(--text-muted); font-size: 0.85rem; padding: 10px;">No support tickets found.</p>';
}
} catch (err) {
console.error('Error loading tickets:', err);
container.innerHTML = '<p class="error-text">Failed to load ticket history.</p>';
}
}
/**
* Basic view ticket placeholder (could be expanded to a modal or detail page)
*/
async function viewTicket(ticketId) {
try {
const res = await fetch(`/api/support/ticket/${ticketId}`);
const t = await res.json();
if (t.error) {
alert(t.error);
return;
}
let messageThread = t.messages.map(m => `
<div class="msg-bubble ${m.sender}">
<div class="msg-meta">${m.sender === 'user' ? 'You' : 'Admin'}${m.time}</div>
<div class="msg-text">${m.message}</div>
</div>
`).join('');
// For now, using a simple prompt-based interaction or just an alert with history
alert(`TICKET: #${t.ticket_number}\nSUBJECT: ${t.subject}\nSTATUS: ${t.status.toUpperCase()}\n\nLATEST MESSAGES:\n${t.messages.map(m => `[${m.time}] ${m.sender.toUpperCase()}: ${m.message}`).join('\n')}`);
} catch (err) {
console.error('Error fetching ticket detail:', err);
}
}