change and add into components, widgets and pages

This commit is contained in:
LathanDevers
2026-07-30 14:08:49 +02:00
parent ec900efe3a
commit 057aa628a3
39 changed files with 1620 additions and 1062 deletions
+63
View File
@@ -0,0 +1,63 @@
import { useState, useEffect, useCallback } from 'react';
import { pb } from '@/services/pocketbase';
import type { Ticket } from '@/types/Ticket';
import type { TicketMessage } from '@/types/Message';
export const useTicketDetail = (ticketId?: string) => {
const [ticket, setTicket] = useState<Ticket | null>(null);
const [messages, setMessages] = useState<TicketMessage[]>([]);
const [isLoading, setIsLoading] = useState(true);
const [isSending, setIsSending] = useState(false);
const [error, setError] = useState<string | null>(null);
const currentUser = pb.authStore.record; // ou .model selon votre version PocketBase
const fetchTicketData = useCallback(async () => {
if (!ticketId) return;
setError(null);
try {
// 1. Récupération du ticket
const ticketData = await pb.collection('aegis_tickets').getOne<Ticket>(ticketId);
setTicket(ticketData);
// 2. Récupération des messages associés
const messageRecords = await pb.collection('aegis_ticket_messages').getFullList<TicketMessage>({
filter: `ticket = "${ticketId}"`,
expand: 'author',
sort: 'created',
});
setMessages(messageRecords);
} catch (err) {
console.error("Erreur lors du chargement de la discussion :", err);
setError("Ticket introuvable ou accès non autorisé.");
} finally {
setIsLoading(false);
}
}, [ticketId]);
useEffect(() => {
fetchTicketData();
}, [fetchTicketData]);
const sendMessage = async (content: string) => {
if (!content.trim() || !currentUser || !ticketId) return;
setIsSending(true);
try {
await pb.collection('aegis_ticket_messages').create({
ticket: ticketId,
author: currentUser.id,
content: content.trim(),
});
await fetchTicketData(); // On recharge les messages après l'envoi
} catch (err) {
console.error("Erreur lors de l'envoi du message :", err);
throw new Error("Impossible d'envoyer le message.");
} finally {
setIsSending(false);
}
};
return { ticket, messages, isLoading, error, isSending, sendMessage, currentUser };
};