diff --git a/app/components/Login.tsx b/app/components/Login.tsx index 146e86c..f1382a6 100644 --- a/app/components/Login.tsx +++ b/app/components/Login.tsx @@ -5,6 +5,7 @@ import { getSettings } from '../backend/database'; import Settings from './settings/Settings'; // Import the Settings component +import { importDatabase } from './settings/settingUtils'; const Login: React.FC = () => { // State to handle popup visibility @@ -23,14 +24,14 @@ const Login: React.FC = () => { // On component mount, check if there are credentials in localStorage useEffect(() => { - let savedAccountName:string|null; - let savedAccountEmail:string|null; - let savedAccountPassword:string|null; + let savedAccountName: string | null; + let savedAccountEmail: string | null; + let savedAccountPassword: string | null; if (typeof localStorage !== 'undefined') { savedAccountName = localStorage.getItem('accountName'); savedAccountEmail = localStorage.getItem('accountEmail'); savedAccountPassword = localStorage.getItem('accountPassword'); - + // If credentials are found in localStorage, log the user in if (savedAccountName && savedAccountEmail && savedAccountPassword) { setAccountName(savedAccountName); @@ -40,6 +41,14 @@ const Login: React.FC = () => { if (savedAccountName !== null && savedAccountPassword !== null) { const success = await checkCredentials(savedAccountName, savedAccountPassword); setIsLoggedIn(success); // Automatically log in + const useName = localStorage.getItem("accountName"); + const usePassword = localStorage.getItem("accountPassword"); + + if (useName && usePassword) { + await importDatabase(useName, usePassword); + } + + } }; check(); @@ -64,11 +73,19 @@ const Login: React.FC = () => { setIsLoggedIn(true); // Successful login const data = await getSettings(accountName, password) if (data) { - if (typeof localStorage !== 'undefined') { + if (typeof localStorage !== 'undefined') { localStorage.setItem("dataFromServer", data) } } setShowLoginPopup(false); // Close the login popup + const useName = localStorage.getItem("accountName"); + const usePassword = localStorage.getItem("accountPassword"); + + if (useName && usePassword) { + await importDatabase(useName, usePassword); + } + + window.location.reload(); } else { alert('Incorrect credentials'); } diff --git a/app/components/settings/Settings.tsx b/app/components/settings/Settings.tsx index afe571d..28aeb87 100644 --- a/app/components/settings/Settings.tsx +++ b/app/components/settings/Settings.tsx @@ -1,7 +1,7 @@ //#region imports import React, { useState, useEffect } from 'react'; import { applyTheme } from './theme'; -import { exportSettings, importSettings } from './settingUtils'; // Import utility functions +import { exportSettings, importSettings, sendToDatabase, importDatabase } from './settingUtils'; // Import utility functions import { getAllLocalStorageItems } from '../../backend/GetLocalStorage'; import ColorSetting from './ColorSettings'; import TextSettings from './TextSettings' @@ -15,8 +15,6 @@ import { changeSettings, createAccount, deleteAccount, - getSettings, - sendToDatabase } from '../../backend/database'; import ThemeDropdown from './DropDownTheme'; @@ -302,7 +300,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( useEffect(() => { const useName = localStorage.getItem("accountName"); const usePassword = localStorage.getItem("accountPassword"); - + if (useName && usePassword) { importDatabase(useName, usePassword); } @@ -314,27 +312,6 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( } }, []); // Runs only once when the component mounts - const importDatabase = async (useName: string, usePassword: string) => { - const databaseSettings = await getSettings(useName, usePassword); - - // Ensure user settings exist before flattening and storing - if (typeof databaseSettings == 'object' && databaseSettings) { - JSON.stringify(importSettings(databaseSettings), null, 2); // Pass only the current user's settings - } else { - console.error('Database settings are not in the expected format.'); - } - } - - const sendToDatabase = async () => { - let useName = localStorage.getItem("accountName") - let usePassword = localStorage.getItem("accountPassword") - if (useName && usePassword) { - if (await changeSettings(useName, usePassword, JSON.parse(exportSettings()))) { - alert('Data has been transferred') - } - } - }; - // Effect hooks to update localStorage whenever any state changes useEffect(() => { // Flatten nested objects @@ -593,7 +570,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( )} ); - //#region custom --> foss + //#region custom --> foss case 'foss': return (
@@ -606,7 +583,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
); - //#region account + //#region account case 'account': return (
@@ -649,7 +626,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( />
); - //#region api + //#region api case 'api': return (
@@ -703,7 +680,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
); - //#region import export + //#region import export case 'im/export': return (
@@ -759,52 +736,51 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = ( //#region overall export return (
-
-
- {/* Sidebar for desktop */} -
-
    -
  • setActiveSection('general')}>General
  • -
  • setActiveSection('privacy')}>Privacy
  • -
  • setActiveSection('theme')}>Theme
  • -
  • setActiveSection('foss')}>FOSS
  • -
  • setActiveSection('account')}>Account
  • -
  • setActiveSection('api')}>API Keys
  • -
  • setActiveSection('im/export')}>Import/Export
  • -
-
+
+
+ {/* Sidebar for desktop */} +
+
    +
  • setActiveSection('general')}>General
  • +
  • setActiveSection('privacy')}>Privacy
  • +
  • setActiveSection('theme')}>Theme
  • +
  • setActiveSection('foss')}>FOSS
  • +
  • setActiveSection('account')}>Account
  • +
  • setActiveSection('api')}>API Keys
  • +
  • setActiveSection('im/export')}>Import/Export
  • +
+
-
- {/* Dropdown for selections in responsive mode */} -
-

Select a Setting

- -
-

Settings for {accountName}

- {renderSettingsContent()} - - - -
+
+ {/* Dropdown for selections in responsive mode */} +
+

Select a Setting

+
+

Settings for {accountName}

+ {renderSettingsContent()} + + + +
+
-); + ); }; diff --git a/app/components/settings/settingUtils.ts b/app/components/settings/settingUtils.ts index 885ad98..a3b3e61 100644 --- a/app/components/settings/settingUtils.ts +++ b/app/components/settings/settingUtils.ts @@ -1,11 +1,12 @@ // settingsManager.ts +import { changeSettings, getSettings } from "@/app/backend/database"; // Method to export localStorage to a JSON object export function exportSettings(): string { const settings: { [key: string]: string } = {}; // Loop through all keys in localStorage and add them to the settings object - if (typeof localStorage !== 'undefined') { + if (typeof localStorage !== 'undefined') { for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key) { @@ -26,7 +27,7 @@ export function importSettings(jsonData: string): void { const parsedSettings = JSON.parse(jsonData); // Loop through parsed settings and save them in localStorage - if (typeof localStorage !== 'undefined') { + if (typeof localStorage !== 'undefined') { Object.keys(parsedSettings).forEach((key) => { localStorage.setItem(key, parsedSettings[key]); }); @@ -37,3 +38,27 @@ export function importSettings(jsonData: string): void { console.error("Invalid JSON data:", error); } } + +export const sendToDatabase = async () => { + let useName = localStorage.getItem("accountName") + let usePassword = localStorage.getItem("accountPassword") + if (useName && usePassword) { + let result = await changeSettings(useName, usePassword, JSON.parse(exportSettings())) + if (result == true) { + alert('Data has been transferred') + window.location.reload(); + } + } + window.location.reload(); +}; + +export const importDatabase = async (useName: string, usePassword: string) => { + const databaseSettings = await getSettings(useName, usePassword); + + // Ensure user settings exist before flattening and storing + if (typeof databaseSettings == 'object' && databaseSettings) { + importSettings(JSON.stringify(databaseSettings, null, 2)); // Pass only the current user's settings + } else { + console.error('Database settings are not in the expected format.'); + } +}