mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 17:43:47 +00:00
feat: add ticket status change buttons to inline chat
Add status buttons (open/pending/answered/closed) to the ticket chat view in admin user detail page.
This commit is contained in:
@@ -199,6 +199,20 @@ export default function AdminUserDetail() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleTicketStatusChange = async (newStatus: string) => {
|
||||||
|
if (!selectedTicketId) return;
|
||||||
|
setActionLoading(true);
|
||||||
|
try {
|
||||||
|
await adminApi.updateTicketStatus(selectedTicketId, newStatus);
|
||||||
|
await loadTicketDetail(selectedTicketId);
|
||||||
|
await loadTickets();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to update ticket status:', error);
|
||||||
|
} finally {
|
||||||
|
setActionLoading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (selectedTicketId) {
|
if (selectedTicketId) {
|
||||||
loadTicketDetail(selectedTicketId);
|
loadTicketDetail(selectedTicketId);
|
||||||
@@ -1136,6 +1150,24 @@ export default function AdminUserDetail() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Status buttons */}
|
||||||
|
<div className="flex flex-wrap gap-1.5">
|
||||||
|
{(['open', 'pending', 'answered', 'closed'] as const).map((s) => (
|
||||||
|
<button
|
||||||
|
key={s}
|
||||||
|
onClick={() => handleTicketStatusChange(s)}
|
||||||
|
disabled={selectedTicket.status === s || actionLoading}
|
||||||
|
className={`rounded-lg border px-2.5 py-1 text-xs transition-all ${
|
||||||
|
selectedTicket.status === s
|
||||||
|
? 'border-accent-500/50 bg-accent-500/20 text-accent-400'
|
||||||
|
: 'border-dark-700/50 text-dark-400 hover:border-dark-600 hover:text-dark-200'
|
||||||
|
} disabled:opacity-50`}
|
||||||
|
>
|
||||||
|
{t(`admin.tickets.status${s.charAt(0).toUpperCase() + s.slice(1)}`)}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Messages */}
|
{/* Messages */}
|
||||||
<div className="scrollbar-hide max-h-[60vh] space-y-3 overflow-y-auto rounded-xl bg-dark-800/30 p-3">
|
<div className="scrollbar-hide max-h-[60vh] space-y-3 overflow-y-auto rounded-xl bg-dark-800/30 p-3">
|
||||||
{selectedTicket.messages.map((msg) => (
|
{selectedTicket.messages.map((msg) => (
|
||||||
|
|||||||
Reference in New Issue
Block a user