fix(react/settings): event leak in useOption

This commit is contained in:
Elian Doran 2025-08-14 19:55:45 +03:00
parent d2bc72d54f
commit e7b448e2bc
No known key found for this signature in database

View File

@ -1,4 +1,4 @@
import { type Dispatch, type StateUpdater, useContext, useEffect, useMemo, useRef, useState } from "preact/hooks";
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "preact/hooks";
import { EventData, EventNames } from "../../components/app_context";
import { ParentComponent } from "./ReactBasicWidget";
import SpacedUpdate from "../../services/spaced_update";
@ -73,20 +73,22 @@ export function useTriliumOption(name: OptionNames, needsRefresh?: boolean): [st
const initialValue = options.get(name);
const [ value, setValue ] = useState(initialValue);
async function wrappedSetValue(newValue: string) {
await options.save(name, newValue);
const wrappedSetValue = useMemo(() => {
return async (newValue: string) => {
await options.save(name, newValue);
if (needsRefresh) {
reloadFrontendApp(`option change: ${name}`);
if (needsRefresh) {
reloadFrontendApp(`option change: ${name}`);
}
}
};
}, [ name, needsRefresh ]);
useTriliumEvent("entitiesReloaded", ({ loadResults }) => {
useTriliumEvent("entitiesReloaded", useCallback(({ loadResults }) => {
if (loadResults.getOptionNames().includes(name)) {
const newValue = options.get(name);
setValue(newValue);
}
});
}, [ name ]));
return [
value,