Files
desktop/app/providers/MemoryProvider/useMemory.ts
rosetta 83f38dc63f 'init'
2026-01-30 05:01:05 +02:00

27 lines
986 B
TypeScript

import { useContext } from "react";
import { MemoryContext } from "./MemoryProvider";
export function useMemory<T>(selector : string, def : T, writable : boolean = true) : [T, (value: T | ((prevValue: T) => T)) => void] {
const {memory, setMemory} = useContext(MemoryContext);
const value = () => {
if(memory[selector] == undefined){
return def;
}
return memory[selector];
};
const setValue = (value: T | ((prevValue: T) => T)) => {
if (!writable && memory[selector] == undefined) {
return;
}
const newValue = typeof value === "function" ?
(value as (prevValue: T) => T)(memory[selector] ?? def)
: value;
setMemory((prev : any) => ({
...prev,
[selector]: typeof value === "function"
? (value as (prevValue: T) => T)(prev[selector] ?? def)
: newValue,
}));
}
return [value(), setValue];
}