Spaces:
Runtime error
Runtime error
| import React, { createContext, useContext, useState } from 'react'; | |
| interface Message { | |
| id: number; | |
| text: string; | |
| translatedText?: string; | |
| isArabic?: boolean; | |
| isFrench?: boolean; | |
| timestamp: Date; | |
| } | |
| interface ChatContextType { | |
| messages: Message[]; | |
| addMessage: (message: Message) => void; | |
| } | |
| const ChatContext = createContext<ChatContextType | undefined>(undefined); | |
| export function ChatProvider({ children }: { children: React.ReactNode }) { | |
| const [messages, setMessages] = useState<Message[]>([]); | |
| const translateText = async (text: string, from: string, to: string) => { | |
| try { | |
| // Utilisation de l'API Google Translate via RapidAPI | |
| const response = await fetch('https://translate.googleapis.com/translate_a/single?client=gtx&sl=' + from + '&tl=' + to + '&dt=t&q=' + encodeURI(text)); | |
| if (!response.ok) { | |
| throw new Error('Translation failed'); | |
| } | |
| const data = await response.json(); | |
| // La traduction se trouve dans le premier élément du premier tableau | |
| const translatedText = data[0][0][0]; | |
| return translatedText; | |
| } catch (error) { | |
| console.error('Translation error:', error); | |
| return text; | |
| } | |
| }; | |
| const addMessage = async (message: Message) => { | |
| const from = message.isArabic ? 'ar' : 'fr'; | |
| const to = message.isArabic ? 'fr' : 'ar'; | |
| try { | |
| const translatedText = await translateText(message.text, from, to); | |
| const messageWithTranslation = { | |
| ...message, | |
| translatedText, | |
| }; | |
| setMessages(prev => [...prev, messageWithTranslation]); | |
| } catch (error) { | |
| console.error('Error in message translation:', error); | |
| setMessages(prev => [...prev, message]); | |
| } | |
| }; | |
| return ( | |
| <ChatContext.Provider value={{ messages, addMessage }}> | |
| {children} | |
| </ChatContext.Provider> | |
| ); | |
| } | |
| export function useChat() { | |
| const context = useContext(ChatContext); | |
| if (context === undefined) { | |
| throw new Error('useChat must be used within a ChatProvider'); | |
| } | |
| return context; | |
| } |