fix: sync bug

This commit is contained in:
Gabe
2025-11-15 21:05:06 +08:00
parent 4f00492e49
commit c4ccdba268
5 changed files with 31 additions and 10 deletions

View File

@@ -13,5 +13,11 @@ export function useDebouncedCallback(callback, delay) {
[delay] [delay]
); );
useEffect(() => {
return () => {
debouncedCallback.cancel();
};
}, [debouncedCallback]);
return debouncedCallback; return debouncedCallback;
} }

View File

@@ -25,13 +25,17 @@ const SettingContext = createContext({
reloadSetting: () => {}, reloadSetting: () => {},
}); });
export function SettingProvider({ children }) { export function SettingProvider({ children, isSettingPage }) {
const { const {
data: setting, data: setting,
isLoading, isLoading,
update, update,
reload, reload,
} = useStorage(STOKEY_SETTING, DEFAULT_SETTING, KV_SETTING_KEY); } = useStorage(
STOKEY_SETTING,
DEFAULT_SETTING,
isSettingPage ? KV_SETTING_KEY : ""
);
useEffect(() => { useEffect(() => {
if (typeof setting?.darkMode === "boolean") { if (typeof setting?.darkMode === "boolean") {
@@ -43,6 +47,8 @@ export function SettingProvider({ children }) {
}, [setting?.darkMode, update]); }, [setting?.darkMode, update]);
useEffect(() => { useEffect(() => {
if (!isSettingPage) return;
(async () => { (async () => {
try { try {
logger.setLevel(setting?.logLevel); logger.setLevel(setting?.logLevel);
@@ -53,7 +59,7 @@ export function SettingProvider({ children }) {
logger.error("Failed to fetch log level, using default.", error); logger.error("Failed to fetch log level, using default.", error);
} }
})(); })();
}, [setting]); }, [isSettingPage, setting?.logLevel]);
const updateSetting = useCallback( const updateSetting = useCallback(
(objOrFn) => { (objOrFn) => {

View File

@@ -62,10 +62,12 @@ class Logger {
return; return;
} }
this.config.level = newLevelObject; if (this.config.level.value !== newLevelObject.value) {
console.log( this.config.level = newLevelObject;
`[${this.config.prefix}] Log level dynamically set to ${this.config.level.name}` console.log(
); `[${this.config.prefix}] Log level dynamically set to ${this.config.level.name}`
);
}
} }
/** /**

View File

@@ -59,14 +59,21 @@ export const sleep = (delay) =>
*/ */
export const debounce = (func, delay = 200) => { export const debounce = (func, delay = 200) => {
let timer = null; let timer = null;
return (...args) => {
const debouncedFunc = (...args) => {
timer && clearTimeout(timer); timer && clearTimeout(timer);
timer = setTimeout(() => { timer = setTimeout(() => {
func(...args); func(...args);
clearTimeout(timer);
timer = null; timer = null;
}, delay); }, delay);
}; };
debouncedFunc.cancel = () => {
clearTimeout(timer);
timer = null;
};
return debouncedFunc;
}; };
/** /**

View File

@@ -99,7 +99,7 @@ export default function Options() {
} }
return ( return (
<SettingProvider> <SettingProvider isSettingPage={true}>
<ThemeProvider> <ThemeProvider>
<AlertProvider> <AlertProvider>
<ConfirmProvider> <ConfirmProvider>