import React, { useState, useEffect } from 'react'; import { exportSettings, importSettings } from './settingUtils'; // Import utility functions const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ({ closeSettings, accountName }) => { const getItemFromLocalStorage = (key: string) => { const item = localStorage.getItem(key); return item ? JSON.parse(item) : false; // Default to false if item is null }; // Active section const [activeSection, setActiveSection] = useState(() => localStorage.getItem('activeSection') || 'general'); // Language setting const [preferredLanguage, setPreferredLanguage] = useState(() => localStorage.getItem('preferredLanguage') || 'en'); // Currency setting const [preferredCurrency, setPreferredCurrency] = useState(() => localStorage.getItem('preferredCurrency') || 'usd'); // Date and time format settings const [dateFormat, setDateFormat] = useState(() => localStorage.getItem('dateFormat') || 'mm/dd/yyyy'); const [timeFormat, setTimeFormat] = useState(() => localStorage.getItem('timeFormat') || '12-hour'); const [timeZone, setTimeZone] = useState(() => localStorage.getItem('timeZone') || 'GMT'); // Online AI and chat history settings // State declarations const [disableOnlineAI, setDisableOnlineAI] = useState(() => getItemFromLocalStorage('disableOnlineAI')); const [disableChatHistory, setDisableChatHistory] = useState(() => getItemFromLocalStorage('disableChatHistory')); const [disableAIMemory, setDisableAIMemory] = useState(() => getItemFromLocalStorage('disableAIMemory')); const [openSourceMode, setOpenSourceMode] = useState(() => getItemFromLocalStorage('openSourceMode')); // User credentials const [newName, setNewName] = useState(() => localStorage.getItem('newName') || ''); const [newEmail, setNewEmail] = useState(() => localStorage.getItem('newEmail') || ''); const [newPassword, setNewPassword] = useState(() => localStorage.getItem('newPassword') || ''); // Measurement setting const [preferredMeasurement, setPreferredMeasurement] = useState(() => localStorage.getItem('preferredMeasurement') || 'Metric'); // Theme settings const [backgroundColor, setBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--background-color').trim()); const [textColor, setTextColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--text-color').trim()); const [inputBackgroundColor, setInputBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--input-background-color').trim()); const [inputButtonColor, setInputButtonColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--input-button-color').trim()); const [inputButtonHoverColor, setInputButtonHoverColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--input-button-hover-color').trim()); const [userMessageBackgroundColor, setUserMessageBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--user-message-background-color').trim()); const [userMessageTextColor, setUserMessageTextColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--user-message-text-color').trim()); const [aiMessageBackgroundColor, setAiMessageBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--ai-message-background-color').trim()); const [aiMessageTextColor, setAiMessageTextColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--ai-message-text-color').trim()); const [buttonBackgroundColor, setButtonBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--button-background-color').trim()); const [buttonHoverBackgroundColor, setButtonHoverBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--button-hover-background-color').trim()); const [modelsBackgroundColor, setModelsBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--models-background-color').trim()); const [historyBackgroundColor, setHistoryBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--history-background-color').trim()); const [leftPanelBackgroundColor, setLeftPanelBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--left-panel-background-color').trim()); const [conversationBackgroundColor, setConversationBackgroundColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--conversation-background-color').trim()); const [popUpTextColor, setPopUpTextColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--pop-up-text').trim()); const [inputBorderColor, setInputBorderColor] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--input-border-color').trim()); const [fontFamily, setFontFamily] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--font-family').trim()); const [fontSize, setFontSize] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--font-size').trim()); // Theme selection const [selectedTheme, setSelectedTheme] = useState(() => localStorage.getItem('selectedTheme') || 'default'); // API Keys const [laPlateforme, setLaPlateforme] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--online-la-plateforme').trim()); const [openAI, setOpenAI] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--online-cheap-openai').trim()); const [anthropic, setAnthropic] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--online-cheap-anthropic').trim()); const [google, setGoogle] = useState(() => getComputedStyle(document.documentElement).getPropertyValue('--online-cheap-google').trim()); // Effect hooks to update localStorage whenever any state changes useEffect(() => { localStorage.setItem('activeSection', activeSection); }, [activeSection]); useEffect(() => { localStorage.setItem('preferredLanguage', preferredLanguage); }, [preferredLanguage]); useEffect(() => { localStorage.setItem('preferredCurrency', preferredCurrency); }, [preferredCurrency]); useEffect(() => { localStorage.setItem('dateFormat', dateFormat); }, [dateFormat]); useEffect(() => { localStorage.setItem('timeFormat', timeFormat); }, [timeFormat]); useEffect(() => { localStorage.setItem('timeZone', timeZone); }, [timeZone]); useEffect(() => { localStorage.setItem('disableOnlineAI', JSON.stringify(disableOnlineAI)); }, [disableOnlineAI]); useEffect(() => { localStorage.setItem('disableChatHistory', JSON.stringify(disableChatHistory)); }, [disableChatHistory]); useEffect(() => { localStorage.setItem('disableAIMemory', JSON.stringify(disableAIMemory)); }, [disableAIMemory]); useEffect(() => { localStorage.setItem('openSourceMode', JSON.stringify(openSourceMode)); }, [openSourceMode]); useEffect(() => { localStorage.setItem('newName', newName); }, [newName]); useEffect(() => { localStorage.setItem('newEmail', newEmail); }, [newEmail]); useEffect(() => { localStorage.setItem('newPassword', newPassword); }, [newPassword]); useEffect(() => { localStorage.setItem('preferredMeasurement', preferredMeasurement); }, [preferredMeasurement]); useEffect(() => { localStorage.setItem('backgroundColor', backgroundColor); }, [backgroundColor]); useEffect(() => { localStorage.setItem('textColor', textColor); }, [textColor]); useEffect(() => { localStorage.setItem('inputBackgroundColor', inputBackgroundColor); }, [inputBackgroundColor]); useEffect(() => { localStorage.setItem('inputButtonColor', inputButtonColor); }, [inputButtonColor]); useEffect(() => { localStorage.setItem('inputButtonHoverColor', inputButtonHoverColor); }, [inputButtonHoverColor]); useEffect(() => { localStorage.setItem('userMessageBackgroundColor', userMessageBackgroundColor); }, [userMessageBackgroundColor]); useEffect(() => { localStorage.setItem('userMessageTextColor', userMessageTextColor); }, [userMessageTextColor]); useEffect(() => { localStorage.setItem('aiMessageBackgroundColor', aiMessageBackgroundColor); }, [aiMessageBackgroundColor]); useEffect(() => { localStorage.setItem('aiMessageTextColor', aiMessageTextColor); }, [aiMessageTextColor]); useEffect(() => { localStorage.setItem('buttonBackgroundColor', buttonBackgroundColor); }, [buttonBackgroundColor]); useEffect(() => { localStorage.setItem('buttonHoverBackgroundColor', buttonHoverBackgroundColor); }, [buttonHoverBackgroundColor]); useEffect(() => { localStorage.setItem('modelsBackgroundColor', modelsBackgroundColor); }, [modelsBackgroundColor]); useEffect(() => { localStorage.setItem('historyBackgroundColor', historyBackgroundColor); }, [historyBackgroundColor]); useEffect(() => { localStorage.setItem('leftPanelBackgroundColor', leftPanelBackgroundColor); }, [leftPanelBackgroundColor]); useEffect(() => { localStorage.setItem('conversationBackgroundColor', conversationBackgroundColor); }, [conversationBackgroundColor]); useEffect(() => { localStorage.setItem('popUpTextColor', popUpTextColor); }, [popUpTextColor]); useEffect(() => { localStorage.setItem('inputBorderColor', inputBorderColor); }, [inputBorderColor]); useEffect(() => { localStorage.setItem('fontFamily', fontFamily); }, [fontFamily]); useEffect(() => { localStorage.setItem('fontSize', fontSize); }, [fontSize]); useEffect(() => { localStorage.setItem('selectedTheme', selectedTheme); }, [selectedTheme]); useEffect(() => { localStorage.setItem('laPlateforme', laPlateforme); }, [laPlateforme]); useEffect(() => { localStorage.setItem('openAI', openAI); }, [openAI]); useEffect(() => { localStorage.setItem('anthropic', anthropic); }, [anthropic]); useEffect(() => { localStorage.setItem('google', google); }, [google]); // Apply imported settings to the CSS variables const applySettings = (settings: any) => { if (settings.backgroundColor) { setBackgroundColor(settings.backgroundColor); document.documentElement.style.setProperty('--background-color', settings.backgroundColor); } if (settings.textColor) { setTextColor(settings.textColor); document.documentElement.style.setProperty('--text-color', settings.textColor); } if (settings.inputBackgroundColor) { setInputBackgroundColor(settings.inputBackgroundColor); document.documentElement.style.setProperty('--input-background-color', settings.inputBackgroundColor); } if (settings.inputButtonColor) { setInputButtonColor(settings.inputButtonColor); document.documentElement.style.setProperty('--input-button-color', settings.inputButtonColor); } if (settings.inputButtonHoverColor) { setInputButtonHoverColor(settings.inputButtonHoverColor); document.documentElement.style.setProperty('--input-button-hover-color', settings.inputButtonHoverColor); } if (settings.userMessageBackgroundColor) { setUserMessageBackgroundColor(settings.userMessageBackgroundColor); document.documentElement.style.setProperty('--user-message-background-color', settings.userMessageBackgroundColor); } if (settings.userMessageTextColor) { setUserMessageTextColor(settings.userMessageTextColor); document.documentElement.style.setProperty('--user-message-text-color', settings.userMessageTextColor); } if (settings.aiMessageBackgroundColor) { setAiMessageBackgroundColor(settings.aiMessageBackgroundColor); document.documentElement.style.setProperty('--ai-message-background-color', settings.aiMessageBackgroundColor); } if (settings.aiMessageTextColor) { setAiMessageTextColor(settings.aiMessageTextColor); document.documentElement.style.setProperty('--ai-message-text-color', settings.aiMessageTextColor); } if (settings.buttonBackgroundColor) { setButtonBackgroundColor(settings.buttonBackgroundColor); document.documentElement.style.setProperty('--button-background-color', settings.buttonBackgroundColor); } if (settings.buttonHoverBackgroundColor) { setButtonHoverBackgroundColor(settings.buttonHoverBackgroundColor); document.documentElement.style.setProperty('--button-hover-background-color', settings.buttonHoverBackgroundColor); } if (settings.modelsBackgroundColor) { setModelsBackgroundColor(settings.modelsBackgroundColor); document.documentElement.style.setProperty('--models-background-color', settings.modelsBackgroundColor); } if (settings.historyBackgroundColor) { setHistoryBackgroundColor(settings.historyBackgroundColor); document.documentElement.style.setProperty('--history-background-color', settings.historyBackgroundColor); } if (settings.leftPanelBackgroundColor) { setLeftPanelBackgroundColor(settings.leftPanelBackgroundColor); document.documentElement.style.setProperty('--left-panel-background-color', settings.leftPanelBackgroundColor); } if (settings.conversationBackgroundColor) { setConversationBackgroundColor(settings.conversationBackgroundColor); document.documentElement.style.setProperty('--conversation-background-color', settings.conversationBackgroundColor); } if (settings.popUpTextColor) { setPopUpTextColor(settings.popUpTextColor); document.documentElement.style.setProperty('--pop-up-text', settings.popUpTextColor); } if (settings.inputBorderColor) { setInputBorderColor(settings.inputBorderColor); document.documentElement.style.setProperty('--input-border-color', settings.inputBorderColor); } if (settings.fontFamily) { setFontFamily(settings.fontFamily); document.documentElement.style.setProperty('--font-family', settings.fontFamily); } if (settings.fontSize) { setFontSize(settings.fontSize); document.documentElement.style.setProperty('--font-size', settings.fontSize); } }; // Render settings content based on the active section const renderSettingsContent = () => { switch (activeSection) { case 'general': return (
Select Theme
Font Size
{ const newSize = `${e.target.value}px`; setFontSize(newSize); document.documentElement.style.setProperty('--font-size', newSize); }} /> {fontSize}Background Color
{ const newColor = e.target.value; setBackgroundColor(newColor); document.documentElement.style.setProperty('--background-color', newColor); }} />Text Color
{ const newColor = e.target.value; setTextColor(newColor); document.documentElement.style.setProperty('--text-color', newColor); }} />Input Background Color
{ const newColor = e.target.value; setInputBackgroundColor(newColor); document.documentElement.style.setProperty('--input-background-color', newColor); }} />Input Button Color
{ const newColor = e.target.value; setInputButtonColor(newColor); document.documentElement.style.setProperty('--input-button-color', newColor); }} />Input Button Hover Color
{ const newColor = e.target.value; setInputButtonHoverColor(newColor); document.documentElement.style.setProperty('--input-button-hover-color', newColor); }} />User Message Background Color
{ const newColor = e.target.value; setUserMessageBackgroundColor(newColor); document.documentElement.style.setProperty('--user-message-background-color', newColor); }} />User Message Text Color
{ const newColor = e.target.value; setUserMessageTextColor(newColor); document.documentElement.style.setProperty('--user-message-text-color', newColor); }} />AI Message Background Color
{ const newColor = e.target.value; setAiMessageBackgroundColor(newColor); document.documentElement.style.setProperty('--ai-message-background-color', newColor); }} />AI Message Text Color
{ const newColor = e.target.value; setAiMessageTextColor(newColor); document.documentElement.style.setProperty('--ai-message-text-color', newColor); }} />Button Background Color
{ const newColor = e.target.value; setButtonBackgroundColor(newColor); document.documentElement.style.setProperty('--button-background-color', newColor); }} />Button Hover Background Color
{ const newColor = e.target.value; setButtonHoverBackgroundColor(newColor); document.documentElement.style.setProperty('--button-hover-background-color', newColor); }} />Models Background Color
{ const newColor = e.target.value; setModelsBackgroundColor(newColor); document.documentElement.style.setProperty('--models-background-color', newColor); }} />History Background Color
{ const newColor = e.target.value; setHistoryBackgroundColor(newColor); document.documentElement.style.setProperty('--history-background-color', newColor); }} />Left Panel Background Color
{ const newColor = e.target.value; setLeftPanelBackgroundColor(newColor); document.documentElement.style.setProperty('--left-panel-background-color', newColor); }} />Conversation Background Color
{ const newColor = e.target.value; setConversationBackgroundColor(newColor); document.documentElement.style.setProperty('--conversation-background-color', newColor); }} />Pop-up Text Color
{ const newColor = e.target.value; setPopUpTextColor(newColor); document.documentElement.style.setProperty('--pop-up-text', newColor); }} />Input Border Color
{ const newColor = e.target.value; setInputBorderColor(newColor); document.documentElement.style.setProperty('--input-border-color', newColor); }} />Font Family