mirror of
https://github.com/muerwre/markdown-home-tab.git
synced 2025-04-25 00:46:41 +07:00
added settings persistance
This commit is contained in:
parent
e81e766ea6
commit
51576b0309
2 changed files with 47 additions and 25 deletions
40
src/modules/settings/hooks/usePersistSettings.ts
Normal file
40
src/modules/settings/hooks/usePersistSettings.ts
Normal file
|
@ -0,0 +1,40 @@
|
|||
import { useCallback, useState } from "react";
|
||||
import { defaultSettings } from "../context/SettingsContext";
|
||||
import {
|
||||
Theme,
|
||||
defaultDarkTheme,
|
||||
defaultLightTheme,
|
||||
} from "~/modules/theme/constants/theme";
|
||||
import { useDetectTheme } from "~/modules/theme/hooks/useDetectTheme";
|
||||
import { SettingsValue } from "~/modules/settings/context/SettingsContext";
|
||||
|
||||
const getLocalStorageSettings = (defaultValue: SettingsValue) => {
|
||||
try {
|
||||
const raw = localStorage.getItem("settings");
|
||||
const parsed = JSON.parse(raw ?? "");
|
||||
|
||||
return parsed ? { ...defaultValue, ...parsed } : defaultValue;
|
||||
} catch (error) {
|
||||
return defaultValue;
|
||||
}
|
||||
};
|
||||
|
||||
export const usePersistSettings = () => {
|
||||
const theme = useDetectTheme();
|
||||
const defaultColors =
|
||||
theme === Theme.Dark ? defaultDarkTheme : defaultLightTheme;
|
||||
|
||||
const [settings, setSettings] = useState<SettingsValue>(
|
||||
getLocalStorageSettings({ ...defaultSettings, ...defaultColors })
|
||||
);
|
||||
|
||||
const update = useCallback((val: Partial<SettingsValue>) => {
|
||||
setSettings((v) => {
|
||||
const updatedValue = { ...v, ...val };
|
||||
localStorage.setItem("settings", JSON.stringify(updatedValue));
|
||||
return updatedValue;
|
||||
});
|
||||
}, []);
|
||||
|
||||
return { settings, update };
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue