diff --git a/lib/contexts/FourNKContext.tsx b/lib/contexts/FourNKContext.tsx index e871e25..c84330c 100644 --- a/lib/contexts/FourNKContext.tsx +++ b/lib/contexts/FourNKContext.tsx @@ -29,6 +29,7 @@ type FourNKContextType = { setMyFolderProcesses: React.Dispatch>; setFolderPrivateData: React.Dispatch>>>; setMembers: React.Dispatch>; + refreshUserName: () => Promise; }; const FourNKContext = createContext(undefined); @@ -235,6 +236,50 @@ export function FourNKProvider({ children }: { children: ReactNode }) { }, [loadMembersFrom4NK]); + // Fonction pour forcer la mise à jour du nom utilisateur + const refreshUserName = useCallback(async () => { + try { + const messageBus = MessageBus.getInstance(iframeUrl); + await messageBus.isReady(); + + // Recharger les processes et récupérer le nom + const freshProcesses = await messageBus.getProcesses(); + if (!freshProcesses || !userPairingId) { + setUserName("Utilisateur 4NK"); + return; + } + + const userProcess = freshProcesses[userPairingId]; + if (!userProcess?.states) { + setUserName("Utilisateur 4NK"); + return; + } + + const latestState = userProcess.states[userProcess.states.length - 2] || userProcess.states[0]; + if (!latestState?.public_data?.memberPublicName) { + setUserName("Utilisateur 4NK"); + return; + } + + const decodedName = await messageBus.getPublicData(latestState.public_data.memberPublicName); + const finalName = (typeof decodedName === 'string' && decodedName.trim()) + ? decodedName.trim() + : "Utilisateur 4NK"; + + setProcesses(freshProcesses); + setUserName(finalName); + } catch (error) { + setUserName("Utilisateur 4NK"); + } + }, [userPairingId]); + + // Mettre à jour userName quand les processes changent (seulement au démarrage) + useEffect(() => { + if (processes && userPairingId && userName === null) { + refreshUserName(); + } + }, [processes, userPairingId, userName, refreshUserName]); + const value = { isConnected, userPairingId, @@ -251,6 +296,7 @@ export function FourNKProvider({ children }: { children: ReactNode }) { setMyFolderProcesses, setFolderPrivateData, setMembers, + refreshUserName, }; return (