diff --git a/src/components/AccountDefaultSetting.tsx b/src/components/AccountDefaultSetting.tsx index 29c6865..80b3ced 100644 --- a/src/components/AccountDefaultSetting.tsx +++ b/src/components/AccountDefaultSetting.tsx @@ -4,22 +4,24 @@ import { Link } from "react-router-dom"; interface Props { settingField: string; settingValue: string; - settingsChangedHook: object; + changedSettingsHook: object; } -function handleSettingFieldChange(eventData, setFunction, settingsChangedHook, initialValue) { +function handleSettingFieldChange(eventData, setFunction, changedSettingsHook, initialValue, settingField) { setFunction(eventData.target.value); if (eventData.target.value === initialValue) { - settingsChangedHook.setsettingsChanged(false); + let removeSettingObject = changedSettingsHook.changedSettings + delete removeSettingObject[settingField]; + changedSettingsHook.setChangedSettings(() => ({...removeSettingObject})); } else { - settingsChangedHook.setsettingsChanged(true); + changedSettingsHook.setChangedSettings(() => ({...changedSettingsHook.changedSettings, [settingField]: eventData.target.value})); } } export default function AccountDefaultSetting({ settingField, settingValue, - settingsChangedHook, + changedSettingsHook, }: Props) { const initialValue = settingValue; const [fieldValue, setFieldValue] = React.useState(settingValue); @@ -32,7 +34,7 @@ export default function AccountDefaultSetting({ name={settingField} value={fieldValue} onChange={(eventData) => - handleSettingFieldChange(eventData, setFieldValue, settingsChangedHook, initialValue) + handleSettingFieldChange(eventData, setFieldValue, changedSettingsHook, initialValue, settingField) } > diff --git a/src/components/SettingSaveButton.tsx b/src/components/SettingSaveButton.tsx new file mode 100644 index 0000000..9756858 --- /dev/null +++ b/src/components/SettingSaveButton.tsx @@ -0,0 +1,13 @@ +import * as React from "react"; + +export default function SettingSaveButton() { + function onSettingButtonClicked() { + currentSettingHook.setCurrentSetting(settingName); + } + + return ( + <> + + + ); +} diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index 15201aa..962aa85 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -10,10 +10,10 @@ interface Props { authTokenStorageHandler: object; } -function renderCurrentSetting(setting: string, settingsChangedHook: object) { +function renderCurrentSetting(setting: string, changedSettingsHook: object) { switch (setting) { case "Account": - return ; + return ; case "Security": return ; default: @@ -24,17 +24,18 @@ function renderCurrentSetting(setting: string, settingsChangedHook: object) { export default function Home({ authTokenStorageHandler }: Props) { const settings = ["Account", "Security"]; const [currentSetting, setCurrentSetting] = React.useState(settings[0]); - const [settingsChanged, setsettingsChanged] = React.useState(false); + const [changedSettings, setChangedSettings] = React.useState({}); /* Make objects to pass by reference */ const currentSettingHook = { currentSetting, setCurrentSetting, }; - const settingsChangedHook = { - settingsChanged, - setsettingsChanged, + const changedSettingsHook = { + changedSettings, + setChangedSettings, }; + if (!authTokenStorageHandler.authTokenValue) { return ; } @@ -42,27 +43,23 @@ export default function Home({ authTokenStorageHandler }: Props) { function onSettingsSave(formEvent) { formEvent.preventDefault(); - const formData = new FormData(formEvent.target); - const formDataObject = Object.fromEntries(formData); - console.log(JSON.stringify(formDataObject)); - - fetch("http://127.0.0.1:8000/api/debug", { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(formDataObject), - }) - .then((response) => response.json()) - .then((responseParsed: Object) => { - console.log(responseParsed); - if (responseParsed.success) { - authTokenStorageHandler.setAuthTokenValue(responseParsed.authToken); - } else { - console.log("Login failure!"); - } - }); + for (let [key, value] of Object.entries(changedSettings)) { + fetch("http://127.0.0.1:8000/api/user/settings/change/" + key, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + "authToken": authTokenStorageHandler.authTokenValue, + "newValue": value, + }), + }) + .then((response) => response.json()) + .then((responseParsed: Object) => { + console.log(responseParsed); + }); + }; } return ( @@ -85,9 +82,11 @@ export default function Home({ authTokenStorageHandler }: Props) {
- {renderCurrentSetting(currentSetting, settingsChangedHook)} + {renderCurrentSetting(currentSetting, changedSettingsHook)}
- {settingsChangedHook.settingsChanged ? ( ) : null } + {Object.keys(changedSettings).length > 0 ? ( ) : null } +

{JSON.stringify(changedSettings)}

+

{Object.keys(changedSettings).length}

diff --git a/src/pages/settings/Account.tsx b/src/pages/settings/Account.tsx index cf67551..a919995 100644 --- a/src/pages/settings/Account.tsx +++ b/src/pages/settings/Account.tsx @@ -3,10 +3,10 @@ import { authTokenStorageHandlerInit } from "../../components/storageHandler.ts" import AccountDefaultSetting from "../../components/AccountDefaultSetting.tsx"; interface Props { - settingsChangedHook: object; + changedSettingsHook: object; } -function RenderSettingField(settingField: str, settingValue: str, settingsChangedHook: object) { +function RenderSettingField(settingField: str, settingValue: str, changedSettingsHook: object) { switch (settingField) { default: return ( @@ -14,13 +14,13 @@ function RenderSettingField(settingField: str, settingValue: str, settingsChange key={settingField + "Main"} settingField={settingField} settingValue={settingValue} - settingsChangedHook={settingsChangedHook} + changedSettingsHook={changedSettingsHook} > ); } } -export default function AccountSetting({ settingsChangedHook }: Props) { +export default function AccountSetting({ changedSettingsHook }: Props) { const [accountSettings, setAccountSettings] = React.useState({}); const authTokenStorageHandler = authTokenStorageHandlerInit(); @@ -49,7 +49,7 @@ export default function AccountSetting({ settingsChangedHook }: Props) {

Account


{Object.entries(accountSettings).map((item, key) => - RenderSettingField(item[0], item[1], settingsChangedHook), + RenderSettingField(item[0], item[1], changedSettingsHook), )} );