diff --git a/src/components/useImmutable.ts b/src/components/useImmutable.ts index a2cca4f..3a2564c 100644 --- a/src/components/useImmutable.ts +++ b/src/components/useImmutable.ts @@ -14,14 +14,18 @@ function createEdgeForObject( value: T, setValue: Dispatch> ): T { - const keys = Object.keys(value); // @ts-expect-error const edge: T = {}; - for (let key of keys) { + for (let [key, keyValue] of Object.entries(value)) { + const set = (next: SetStateAction) => { + const v = typeof next === 'function' ? next(keyValue) : next; + setValue((value) => ({ ...value, [key]: v })); + }; + Object.defineProperty(edge, key, { enumerable: true, configurable: false, - get: () => value[key], + get: () => createEdge(keyValue, set), set: (v) => void setValue((value) => ({ ...value, [key]: v })), }); }