Implement basic settings save button

This commit is contained in:
Curt Spark 2024-06-12 19:49:25 +01:00
parent 8dc8269b5d
commit d2554c7a0e
5 changed files with 40 additions and 12 deletions

View File

@ -114,7 +114,6 @@ export default function App() {
element={ element={
<Register <Register
authTokenStorageHandler={authTokenStorageHandler} authTokenStorageHandler={authTokenStorageHandler}
usernameStorageHandler={usernameStorageHandler}
></Register> ></Register>
} }
/> />

View File

@ -4,16 +4,24 @@ import { Link } from "react-router-dom";
interface Props { interface Props {
settingField: string; settingField: string;
settingValue: string; settingValue: string;
settingsChangedHook: object;
} }
function handleSettingFieldChange(eventData, setFunction) { function handleSettingFieldChange(eventData, setFunction, settingsChangedHook, initialValue) {
setFunction(eventData.target.value); setFunction(eventData.target.value);
if (eventData.target.value === initialValue) {
settingsChangedHook.setsettingsChanged(false);
} else {
settingsChangedHook.setsettingsChanged(true);
}
} }
export default function AccountDefaultSetting({ export default function AccountDefaultSetting({
settingField, settingField,
settingValue, settingValue,
settingsChangedHook,
}: Props) { }: Props) {
const initialValue = settingValue;
const [fieldValue, setFieldValue] = React.useState(settingValue); const [fieldValue, setFieldValue] = React.useState(settingValue);
return ( return (
<> <>
@ -23,7 +31,7 @@ export default function AccountDefaultSetting({
key={settingField + "Body"} key={settingField + "Body"}
value={fieldValue} value={fieldValue}
onChange={(eventData) => onChange={(eventData) =>
handleSettingFieldChange(eventData, setFieldValue) handleSettingFieldChange(eventData, setFieldValue, settingsChangedHook, initialValue)
} }
></input> ></input>
</> </>

View File

@ -161,8 +161,16 @@ a {
text-align: left; text-align: left;
} }
.currentSettingBox {
display: flex;
flex-direction: column;
}
.currentSetting { .currentSetting {
max-height: 100%;
max-width: 100%;
padding-left: var(--tiling-box-padding); padding-left: var(--tiling-box-padding);
flex-grow: 1;
} }
.blogEntryGrid { .blogEntryGrid {

View File

@ -10,10 +10,10 @@ interface Props {
authTokenStorageHandler: object; authTokenStorageHandler: object;
} }
function renderCurrentSetting(setting: string) { function renderCurrentSetting(setting: string, settingsChangedHook: object) {
switch (setting) { switch (setting) {
case "Account": case "Account":
return <AccountSetting></AccountSetting>; return <AccountSetting settingsChangedHook={settingsChangedHook}></AccountSetting>;
case "Security": case "Security":
return <SecuritySetting></SecuritySetting>; return <SecuritySetting></SecuritySetting>;
default: default:
@ -24,11 +24,16 @@ function renderCurrentSetting(setting: string) {
export default function Home({ authTokenStorageHandler }: Props) { export default function Home({ authTokenStorageHandler }: Props) {
const settings = ["Account", "Security"]; const settings = ["Account", "Security"];
const [currentSetting, setCurrentSetting] = React.useState(settings[0]); const [currentSetting, setCurrentSetting] = React.useState(settings[0]);
/* Make object to pass by reference */ const [settingsChanged, setsettingsChanged] = React.useState(false);
/* Make objects to pass by reference */
const currentSettingHook = { const currentSettingHook = {
currentSetting, currentSetting,
setCurrentSetting, setCurrentSetting,
}; };
const settingsChangedHook = {
settingsChanged,
setsettingsChanged,
};
if (!authTokenStorageHandler.authTokenValue) { if (!authTokenStorageHandler.authTokenValue) {
return <Navigate to="/home"></Navigate>; return <Navigate to="/home"></Navigate>;
@ -52,9 +57,12 @@ export default function Home({ authTokenStorageHandler }: Props) {
</ul> </ul>
</div> </div>
<hr></hr> <hr></hr>
<div className="currentSetting"> <div className="currentSettingBox">
{renderCurrentSetting(currentSetting)} <div className="currentSetting">
</div> {renderCurrentSetting(currentSetting, settingsChangedHook)}
</div>
{settingsChangedHook.settingsChanged ? ( <button>Save</button> ) : null }
</div>
</div> </div>
</TilingItem> </TilingItem>
</div> </div>

View File

@ -2,7 +2,11 @@ import * as React from "react";
import { authTokenStorageHandlerInit } from "../../components/storageHandler.ts"; import { authTokenStorageHandlerInit } from "../../components/storageHandler.ts";
import AccountDefaultSetting from "../../components/AccountDefaultSetting.tsx"; import AccountDefaultSetting from "../../components/AccountDefaultSetting.tsx";
function RenderSettingField(settingField: str, settingValue: str) { interface Props {
settingsChangedHook: object;
}
function RenderSettingField(settingField: str, settingValue: str, settingsChangedHook: object) {
switch (settingField) { switch (settingField) {
default: default:
return ( return (
@ -10,12 +14,13 @@ function RenderSettingField(settingField: str, settingValue: str) {
key={settingField + "Main"} key={settingField + "Main"}
settingField={settingField} settingField={settingField}
settingValue={settingValue} settingValue={settingValue}
settingsChangedHook={settingsChangedHook}
></AccountDefaultSetting> ></AccountDefaultSetting>
); );
} }
} }
export default function AccountSetting() { export default function AccountSetting({ settingsChangedHook }: Props) {
const [accountSettings, setAccountSettings] = React.useState({}); const [accountSettings, setAccountSettings] = React.useState({});
const authTokenStorageHandler = authTokenStorageHandlerInit(); const authTokenStorageHandler = authTokenStorageHandlerInit();
@ -44,7 +49,7 @@ export default function AccountSetting() {
<h1>Account</h1> <h1>Account</h1>
<hr></hr> <hr></hr>
{Object.entries(accountSettings).map((item, key) => {Object.entries(accountSettings).map((item, key) =>
RenderSettingField(item[0], item[1]), RenderSettingField(item[0], item[1], settingsChangedHook),
)} )}
</> </>
); );