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) {
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),
)}
>
);