Now the message rendering are dynamic

This commit is contained in:
Sadrinho27 2025-11-12 11:41:38 +01:00
parent 1903a15af3
commit ecdef29a26

View File

@ -1,6 +1,6 @@
"use client"
import { useState, useEffect } from "react"
import { useState, useEffect, useCallback } from "react"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { Textarea } from "@/components/ui/textarea"
@ -29,10 +29,9 @@ export default function FolderChat({ folder }: FolderChatProps) {
const [generalMessages, setGeneralMessages] = useState<FolderChatData[]>([]);
const {
isConnected,
userPairingId,
folders,
members,
setFolderProcesses,
setFolderPrivateData,
} = use4NK();
useEffect(() => {
@ -43,7 +42,8 @@ export default function FolderChat({ folder }: FolderChatProps) {
// Filtre les messages basé sur l'onglet actif
const filteredMessages = activeTab === 'owner' ? ownerMessages : generalMessages;
const handleProcessUpdate = async (processId: string, key: string, value: any) => {
const handleProcessUpdate = useCallback(async (processId: string, key: string, value: any) => {
// Note : 'value' est l'objet newMessageData que vous avez passé
try {
const messageBus = MessageBus.getInstance(iframeUrl);
await messageBus.isReady();
@ -52,40 +52,58 @@ export default function FolderChat({ folder }: FolderChatProps) {
[key]: value
};
// First update the process
// 1. Mettre à jour le process
const updatedProcess = await messageBus.updateProcess(processId, updateData, [], null);
console.log("Process mis à jour :", updatedProcess);
if (!updatedProcess) {
throw new Error('No updated process found');
throw new Error('updateProcess n\'a pas retourné de process mis à jour');
}
// 2. Extraire le newStateId
const newStateId = updatedProcess.diffs[0]?.state_id;
if (!newStateId) {
throw new Error('No new state id found');
}
// Then notify about the update
// 3. Notifier et Valider
await messageBus.notifyProcessUpdate(processId, newStateId);
// Finally validate the state
await messageBus.validateState(processId, newStateId);
// Refresh the processes data
await messageBus.getProcesses();
// 4. Mettre à jour l'objet process dans le contexte
setFolderProcesses((prevProcesses: any) => ({
...prevProcesses,
[processId]: updatedProcess.current_process
}));
// 5. Mettre à jour le cache des données privées (CORRIGÉ)
// D'abord, convertir l'objet 'value' en Map, comme l'attend loadFoldersFrom4NK
const valueAsMap = new Map(Object.entries(value));
// Ensuite, créer l'objet conteneur structuré
const privateDataForCache = {
[key]: valueAsMap
};
// Enfin, stocker cet objet structuré dans le cache
setFolderPrivateData((prevData) => ({
...prevData,
[newStateId]: privateDataForCache // <-- Utiliser l'objet formaté
}));
console.log('Process & cache de données privées mis à jour avec succès.');
console.log('Process updated successfully');
} catch (error) {
console.error('Error updating field:', error);
// You might want to show an error message to the user here
}
};
}, [setFolderProcesses, setFolderPrivateData]);
const handleSendMessage = () => {
const handleSendMessage = useCallback(() => {
if (newMessage.trim() && folder) {
console.log(`Envoi message [${activeTab}] dans le dossier:`, folder?.name, "Msg:", newMessage)
const key = activeTab === 'owner' ? 'messages_owner' : 'messages'
// Créez l'objet du nouveau message
const newMessageData: FolderChatData = {
timestamp: Date.now(),
sender: (userPairingId ? userPairingId : ''),
@ -101,13 +119,22 @@ export default function FolderChat({ folder }: FolderChatProps) {
setGeneralMessages(prevMessages => [...prevMessages, newMessageData]);
}
// Envoi de la mise à jour au MessageBus (en arrière-plan)
// Appelle la fonction mémorisée
handleProcessUpdate(folder.processId, key, newMessageData)
// Vider l'input
setNewMessage("")
}
}
}, [
// La fonction doit être recréée si une de ces valeurs change :
newMessage,
folder,
activeTab,
userPairingId,
handleProcessUpdate, // <-- Mettez la fonction mémorisée ici
setOwnerMessages,
setGeneralMessages,
setNewMessage
]);
// Si aucun dossier n'est sélectionné, afficher un placeholder
if (!folder) {