import { SettingsOutlined } from "@mui/icons-material"; import { LoadingButton, TabContext, TabList, TabPanel } from "@mui/lab"; import { Box, Button, IconButton, Tab, useTheme } from "@mui/material"; import { useAtom } from "jotai"; import { useEffect, useState } from "react"; import { useSettings } from "../../../contexts/SettingsContext"; import { settingsAtom } from "../../../lib/store/jotai/settings"; import { FloatingDialog } from "../../Generic/FloatingDialog"; import { SettingsTabDisplay } from "./SettingsTabDisplay"; export const Settings = () => { // contexts const theme = useTheme(); const { settings, updateSettings, resetSettings } = useSettings(); // atoms const [stagedSettings, setStagedSettings] = useAtom(settingsAtom); // states const [settingsOpenState, setSettingsOpenState] = useState(false); const [settingsMaximisedState, setSettingsMaximisedState] = useState(false); const [subTabValue, setSubTabValue] = useState("display"); const [applyLoading, setApplyLoading] = useState(false); const [saveLoading, setSaveLoading] = useState(false); const toggleSettings = () => { // reset the settings maximised state setSettingsMaximisedState(false); setSettingsOpenState((prevState) => !prevState); }; const closeSettings = () => { setSettingsOpenState(false); }; // logic for switching tabs const subTabChangeEvent = (newTabValue: string) => { setSubTabValue(newTabValue); }; const applyClickEvent = () => { setApplyLoading(true); updateSettings(stagedSettings); setApplyLoading(false); }; const saveClickEvent = () => { setSaveLoading(true); updateSettings(stagedSettings); setSaveLoading(false); closeSettings(); }; useEffect(() => { setStagedSettings(settings); }, [setStagedSettings, settings]); return ( { subTabChangeEvent(value); }} scrollButtons={true} sx={{ borderBottom: "1px solid " + theme.palette.divider, }} variant="scrollable" > } bottomBar={ Apply Save } close={closeSettings} maximisedState={settingsMaximisedState} openButton={ } openState={settingsOpenState} setMaximisedState={setSettingsMaximisedState} title="Settings" /> ); };