From 7c67a5fec8b4e9a2fde625203340344475bf128a Mon Sep 17 00:00:00 2001 From: sageTheDM <info@photofuel.tech> Date: Tue, 24 Sep 2024 15:01:45 +0200 Subject: [PATCH] Setting changes --- app/components/Settings.tsx | 239 +++++++++++++++++++----------- app/components/json/black.json | 1 + app/components/json/iomarket.json | 1 + app/components/json/white.json | 1 + app/styles/Settings.css | 13 ++ py/api.py | 2 +- 6 files changed, 172 insertions(+), 85 deletions(-) create mode 100644 app/components/json/black.json create mode 100644 app/components/json/iomarket.json create mode 100644 app/components/json/white.json diff --git a/app/components/Settings.tsx b/app/components/Settings.tsx index ecc8a34..e3e626b 100644 --- a/app/components/Settings.tsx +++ b/app/components/Settings.tsx @@ -15,8 +15,9 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( const [newName, setNewName] = useState(''); const [newEmail, setNewEmail] = useState(''); const [newPassword, setNewPassword] = useState(''); + const [preferredMessurement, setPreferredMessurement] = useState('Metric'); - // Theme settings state + // Theme settings state const [backgroundColor, setBackgroundColor] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--background-color').trim()); const [textColor, setTextColor] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--text-color').trim()); const [inputBackgroundColor, setInputBackgroundColor] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--input-background-color').trim()); @@ -37,9 +38,15 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( const [fontFamily, setFontFamily] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--font-family').trim()); const [fontSize, setFontSize] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--font-size').trim()); - // Theme selection - const [selectedTheme, setSelectedTheme] = useState<string>('default'); + // Theme selection + const [selectedTheme, setSelectedTheme] = useState<string>('default'); + // API Keys + const [laPlateforme, setLaPlateforme] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--online-la-plateforme').trim()); + const [openAI, setOpenAI] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--online-cheap-openai').trim()); + const [anthropic, setAnthropic] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--online-cheap-anthropic').trim()); + const [google, setGoogle] = useState<string>(getComputedStyle(document.documentElement).getPropertyValue('--online-cheap-google').trim()); + // Apply imported settings to the CSS variables const applySettings = (settings: any) => { if (settings.backgroundColor) { @@ -147,85 +154,102 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( case 'general': return ( <div className="settings-section"> - <h2>General Settings</h2> - <div className="settings-option"> - <label>Preferred Language</label> - <select - value={preferredLanguage} - onChange={(e) => setPreferredLanguage(e.target.value)} - > - <option value="en">English</option> - <option value="es">Spanish</option> - <option value="fr">French</option> - <option value="de">German</option> - <option value="it">Italian</option> - <option value="pt">Portuguese</option> - <option value="zh">Chinese</option> - <option value="ja">Japanese</option> - <option value="ru">Russian</option> - <option value="ar">Arabic</option> - </select> - </div> - <div className="settings-option"> - <label>Preferred Currency</label> - <select - value={preferredCurrency} - onChange={(e) => setPreferredCurrency(e.target.value)} - > - <option value="usd">USD</option> - <option value="eur">EUR</option> - <option value="gbp">GBP</option> - <option value="jpy">JPY</option> - <option value="cad">CAD</option> - <option value="aud">AUD</option> - <option value="chf">CHF</option> - <option value="cny">CNY</option> - <option value="inr">INR</option> - </select> - </div> - <div className="settings-option"> - <label>Date Format</label> - <select - value={dateFormat} - onChange={(e) => setDateFormat(e.target.value)} - > - <option value="mm/dd/yyyy">MM/DD/YYYY</option> - <option value="dd/mm/yyyy">DD/MM/YYYY</option> - <option value="yyyy-mm-dd">YYYY-MM-DD</option> - <option value="mm-dd-yyyy">MM-DD-YYYY</option> - <option value="dd-mm-yyyy">DD-MM-YYYY</option> - </select> - </div> - <div className="settings-option"> - <label>Time Format</label> - <select - value={timeFormat} - onChange={(e) => setTimeFormat(e.target.value)} - > - <option value="12-hour">12 Hour</option> - <option value="24-hour">24 Hour</option> - </select> - </div> - <div className="settings-option"> - <label>Time Zone</label> - <select - value={timeZone} - onChange={(e) => setTimeZone(e.target.value)} - > - <option value="GMT">GMT</option> - <option value="EST">EST</option> - <option value="CST">CST</option> - <option value="MST">MST</option> - <option value="PST">PST</option> - <option value="UTC">UTC</option> - <option value="BST">BST</option> - <option value="IST">IST</option> - <option value="CET">CET</option> - <option value="JST">JST</option> - </select> - </div> + <h2>General Settings</h2> + + <div className="settings-option"> + <label>Preferred Language</label> + <select + value={preferredLanguage} + onChange={(e) => setPreferredLanguage(e.target.value)} + > + <option value="en">English</option> + <option value="es">Spanish</option> + <option value="fr">French</option> + <option value="de">German</option> + <option value="it">Italian</option> + <option value="pt">Portuguese</option> + <option value="zh">Chinese</option> + <option value="ja">Japanese</option> + <option value="ru">Russian</option> + <option value="ar">Arabic</option> + </select> </div> - ); + + <div className="settings-option"> + <label>Preferred Currency</label> + <select + value={preferredCurrency} + onChange={(e) => setPreferredCurrency(e.target.value)} + > + <option value="usd">USD</option> + <option value="eur">EUR</option> + <option value="gbp">GBP</option> + <option value="jpy">JPY</option> + <option value="cad">CAD</option> + <option value="aud">AUD</option> + <option value="chf">CHF</option> + <option value="cny">CNY</option> + <option value="inr">INR</option> + </select> + </div> + + <div className="settings-option"> + <label>Date Format</label> + <select + value={dateFormat} + onChange={(e) => setDateFormat(e.target.value)} + > + <option value="mm/dd/yyyy">MM/DD/YYYY</option> + <option value="dd/mm/yyyy">DD/MM/YYYY</option> + <option value="yyyy-mm-dd">YYYY-MM-DD</option> + <option value="mm-dd-yyyy">MM-DD-YYYY</option> + <option value="dd-mm-yyyy">DD-MM-YYYY</option> + </select> + </div> + + <div className="settings-option"> + <label>Time Format</label> + <select + value={timeFormat} + onChange={(e) => setTimeFormat(e.target.value)} + > + <option value="12-hour">12 Hour</option> + <option value="24-hour">24 Hour</option> + </select> + </div> + + <div className="settings-option"> + <label>Time Zone</label> + <select + value={timeZone} + onChange={(e) => setTimeZone(e.target.value)} + > + <option value="GMT">GMT</option> + <option value="EST">EST</option> + <option value="CST">CST</option> + <option value="MST">MST</option> + <option value="PST">PST</option> + <option value="UTC">UTC</option> + <option value="BST">BST</option> + <option value="IST">IST</option> + <option value="CET">CET</option> + <option value="JST">JST</option> + </select> + </div> + + {/* New Preferred Measurement Option */} + <div className="settings-option"> + <label>Preferred Measurement</label> + <select + value={preferredMessurement} + onChange={(e) => setPreferredMessurement(e.target.value)} + > + <option value="Metric">Metric</option> + <option value="Imperial">Imperial</option> + </select> + </div> + </div> + ); case 'privacy': return ( @@ -697,17 +721,55 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( </div> ); + case 'api': + return ( + <div className="settings-section"> + <div className="settings-option"> + <label>La Plateforme</label> + <input + type="text" + value={laPlateforme} + onChange={(e) => setLaPlateforme(e.target.value)} + /> + </div> + <div className="settings-option"> + <label>OpenAI</label> + <input + type="text" + value={openAI} + onChange={(e) => setOpenAI(e.target.value)} + /> + </div> + <div className="settings-option"> + <label>Anthropic</label> + <input + type="text" + value={anthropic} + onChange={(e) => setAnthropic(e.target.value)} + /> + </div> + <div className="settings-option"> + <label>Google</label> + <input + type="text" + value={google} + onChange={(e) => setGoogle(e.target.value)} + /> + </div> + </div> + ); + case 'im/export': return ( <div className="settings-section"> <h2>Import & Export</h2> <div className="settings-option"> <h3>Export the settings</h3> - <button onClick={() => exportSettings(currentSettings)}>Export Settings</button> + <button onClick={() => exportSettings(currentSettings)} className='export-button'>Export Settings</button> </div> <div className="settings-option"> <h3>Import the settings</h3> - <input type="file" onChange={handleImport} accept=".json" /> + <input type="file" onChange={handleImport} accept=".json" className='import-file'/> </div> </div> ); @@ -748,6 +810,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( fontSize, preferredLanguage, preferredCurrency, + preferredMessurement, dateFormat, timeFormat, timeZone, @@ -755,7 +818,14 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( disableChatHistory, disableAIMemory, openSourceMode, - }; + + // API Keys + laPlateforme, + openAI, + anthropic, + google +}; + return ( <div className="popup-overlay"> @@ -768,6 +838,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( <li onClick={() => setActiveSection('theme')}>Theme</li> <li onClick={() => setActiveSection('foss')}>FOSS</li> <li onClick={() => setActiveSection('account')}>Account</li> + <li onClick={() => setActiveSection('api')}>API Keys</li> <li onClick={() => setActiveSection('im/export')}>Import/Export</li> </ul> </div> diff --git a/app/components/json/black.json b/app/components/json/black.json new file mode 100644 index 0000000..cc56d50 --- /dev/null +++ b/app/components/json/black.json @@ -0,0 +1 @@ +{"backgroundColor":"#8B9635","textColor":"#474D22","inputBackgroundColor":"#ffffff","inputButtonColor":"#8B9635","inputButtonHoverColor":"#6b7c2b","userMessageBackgroundColor":"#8B9635","userMessageTextColor":"#000","aiMessageBackgroundColor":"#FCFCEB","aiMessageTextColor":"#000","buttonBackgroundColor":"#8B9635","buttonHoverBackgroundColor":"#6b7c2b","modelsBackgroundColor":"#ffffff","historyBackgroundColor":"#f9f9f9","leftPanelBackgroundColor":"#79832e","conversationBackgroundColor":"#79832e","popUpTextColor":"#000","inputBorderColor":"#8B9635","fontFamily":"'Poppins', 'sans-serif'","fontSize":"16px","preferredLanguage":"en","preferredCurrency":"usd","dateFormat":"mm/dd/yyyy","timeFormat":"12-hour","timeZone":"GMT","disableOnlineAI":false,"disableChatHistory":false,"disableAIMemory":false,"openSourceMode":false,"laPlateforme":"","openAI":"","anthropic":"","google":""} \ No newline at end of file diff --git a/app/components/json/iomarket.json b/app/components/json/iomarket.json new file mode 100644 index 0000000..cc56d50 --- /dev/null +++ b/app/components/json/iomarket.json @@ -0,0 +1 @@ +{"backgroundColor":"#8B9635","textColor":"#474D22","inputBackgroundColor":"#ffffff","inputButtonColor":"#8B9635","inputButtonHoverColor":"#6b7c2b","userMessageBackgroundColor":"#8B9635","userMessageTextColor":"#000","aiMessageBackgroundColor":"#FCFCEB","aiMessageTextColor":"#000","buttonBackgroundColor":"#8B9635","buttonHoverBackgroundColor":"#6b7c2b","modelsBackgroundColor":"#ffffff","historyBackgroundColor":"#f9f9f9","leftPanelBackgroundColor":"#79832e","conversationBackgroundColor":"#79832e","popUpTextColor":"#000","inputBorderColor":"#8B9635","fontFamily":"'Poppins', 'sans-serif'","fontSize":"16px","preferredLanguage":"en","preferredCurrency":"usd","dateFormat":"mm/dd/yyyy","timeFormat":"12-hour","timeZone":"GMT","disableOnlineAI":false,"disableChatHistory":false,"disableAIMemory":false,"openSourceMode":false,"laPlateforme":"","openAI":"","anthropic":"","google":""} \ No newline at end of file diff --git a/app/components/json/white.json b/app/components/json/white.json new file mode 100644 index 0000000..cc56d50 --- /dev/null +++ b/app/components/json/white.json @@ -0,0 +1 @@ +{"backgroundColor":"#8B9635","textColor":"#474D22","inputBackgroundColor":"#ffffff","inputButtonColor":"#8B9635","inputButtonHoverColor":"#6b7c2b","userMessageBackgroundColor":"#8B9635","userMessageTextColor":"#000","aiMessageBackgroundColor":"#FCFCEB","aiMessageTextColor":"#000","buttonBackgroundColor":"#8B9635","buttonHoverBackgroundColor":"#6b7c2b","modelsBackgroundColor":"#ffffff","historyBackgroundColor":"#f9f9f9","leftPanelBackgroundColor":"#79832e","conversationBackgroundColor":"#79832e","popUpTextColor":"#000","inputBorderColor":"#8B9635","fontFamily":"'Poppins', 'sans-serif'","fontSize":"16px","preferredLanguage":"en","preferredCurrency":"usd","dateFormat":"mm/dd/yyyy","timeFormat":"12-hour","timeZone":"GMT","disableOnlineAI":false,"disableChatHistory":false,"disableAIMemory":false,"openSourceMode":false,"laPlateforme":"","openAI":"","anthropic":"","google":""} \ No newline at end of file diff --git a/app/styles/Settings.css b/app/styles/Settings.css index bf88759..a2224a4 100644 --- a/app/styles/Settings.css +++ b/app/styles/Settings.css @@ -147,3 +147,16 @@ display: block; font-weight: bold; } + +.export-button{ + background-color: var(--button-hover-background-color); + padding: 10px; + margin: 10px; + border-radius: 10px; +} + +.import-file{ + background-color: var(--button-hover-background-color); + padding: 10px; + margin: 10px; +} \ No newline at end of file diff --git a/py/api.py b/py/api.py index 508a9bd..fc6f8eb 100644 --- a/py/api.py +++ b/py/api.py @@ -1,4 +1,4 @@ -from flask import Flask, request, jsonify + from flask import Flask, request, jsonify from flask_cors import CORS import secrets import threading